1
0
Fork 0

Merge branch 'main' into list-privacy

This commit is contained in:
Mouse Reeve 2022-07-02 12:16:39 -07:00
commit aae02dff9a
112 changed files with 2754 additions and 1571 deletions

View file

@ -21,8 +21,7 @@ jobs:
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install -r requirements.txt pip install -r requirements.txt
pip install pylint
- name: Analysing the code with pylint - name: Analysing the code with pylint
run: | run: |
pylint bookwyrm/ --ignore=migrations --disable=E1101,E1135,E1136,R0903,R0901,R0902,W0707,W0511,W0406,R0401,R0801 pylint bookwyrm/

6
.pylintrc Normal file
View file

@ -0,0 +1,6 @@
[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

View file

@ -6,6 +6,7 @@ RUN mkdir /app /app/static /app/images
WORKDIR /app WORKDIR /app
RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean
COPY requirements.txt /app/ COPY requirements.txt /app/
RUN pip install -r requirements.txt --no-cache-dir RUN pip install -r requirements.txt --no-cache-dir
RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean

5
SECURITY.md Normal file
View file

@ -0,0 +1,5 @@
# Security Policy
## Reporting a Vulnerability
Please report security issues to `mousereeve@riseup.net`

View file

@ -1,6 +1,7 @@
""" basics for an activitypub serializer """ """ basics for an activitypub serializer """
from dataclasses import dataclass, fields, MISSING from dataclasses import dataclass, fields, MISSING
from json import JSONEncoder from json import JSONEncoder
import logging
from django.apps import apps from django.apps import apps
from django.db import IntegrityError, transaction from django.db import IntegrityError, transaction
@ -8,6 +9,8 @@ from django.db import IntegrityError, transaction
from bookwyrm.connectors import ConnectorException, get_data from bookwyrm.connectors import ConnectorException, get_data
from bookwyrm.tasks import app from bookwyrm.tasks import app
logger = logging.getLogger(__name__)
class ActivitySerializerError(ValueError): class ActivitySerializerError(ValueError):
"""routine problems serializing activitypub json""" """routine problems serializing activitypub json"""
@ -39,12 +42,12 @@ def naive_parse(activity_objects, activity_json, serializer=None):
activity_json["type"] = "PublicKey" activity_json["type"] = "PublicKey"
activity_type = activity_json.get("type") activity_type = activity_json.get("type")
if activity_type in ["Question", "Article"]:
return None
try: try:
serializer = activity_objects[activity_type] serializer = activity_objects[activity_type]
except KeyError as err: except KeyError as err:
# we know this exists and that we can't handle it # we know this exists and that we can't handle it
if activity_type in ["Question"]:
return None
raise ActivitySerializerError(err) raise ActivitySerializerError(err)
return serializer(activity_objects=activity_objects, **activity_json) return serializer(activity_objects=activity_objects, **activity_json)
@ -65,7 +68,7 @@ class ActivityObject:
try: try:
value = kwargs[field.name] value = kwargs[field.name]
if value in (None, MISSING, {}): if value in (None, MISSING, {}):
raise KeyError() raise KeyError("Missing required field", field.name)
try: try:
is_subclass = issubclass(field.type, ActivityObject) is_subclass = issubclass(field.type, ActivityObject)
except TypeError: except TypeError:
@ -268,9 +271,9 @@ def resolve_remote_id(
try: try:
data = get_data(remote_id) data = get_data(remote_id)
except ConnectorException: except ConnectorException:
raise ActivitySerializerError( logger.exception("Could not connect to host for remote_id: %s", remote_id)
f"Could not connect to host for remote_id: {remote_id}" return None
)
# determine the model implicitly, if not provided # determine the model implicitly, if not provided
# or if it's a model with subclasses like Status, check again # or if it's a model with subclasses like Status, check again
if not model or hasattr(model.objects, "select_subclasses"): if not model or hasattr(model.objects, "select_subclasses"):

View file

@ -298,8 +298,9 @@ def add_status_on_create_command(sender, instance, created):
priority = HIGH priority = HIGH
# check if this is an old status, de-prioritize if so # check if this is an old status, de-prioritize if so
# (this will happen if federation is very slow, or, more expectedly, on csv import) # (this will happen if federation is very slow, or, more expectedly, on csv import)
one_day = 60 * 60 * 24 if instance.published_date < timezone.now() - timedelta(
if (instance.created_date - instance.published_date).seconds > one_day: days=1
) or instance.created_date < instance.published_date - timedelta(days=1):
priority = LOW priority = LOW
add_status_task.apply_async( add_status_task.apply_async(

View file

@ -148,8 +148,8 @@ class SearchResult:
def __repr__(self): def __repr__(self):
# pylint: disable=consider-using-f-string # pylint: disable=consider-using-f-string
return "<SearchResult key={!r} title={!r} author={!r}>".format( return "<SearchResult key={!r} title={!r} author={!r} confidence={!r}>".format(
self.key, self.title, self.author self.key, self.title, self.author, self.confidence
) )
def json(self): def json(self):

View file

@ -1,9 +1,8 @@
""" functionality outline for a book data connector """ """ functionality outline for a book data connector """
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
import imghdr import imghdr
import ipaddress
import logging import logging
from urllib.parse import urlparse import re
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.db import transaction from django.db import transaction
@ -11,7 +10,7 @@ import requests
from requests.exceptions import RequestException from requests.exceptions import RequestException
from bookwyrm import activitypub, models, settings 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 from .format_mappings import format_mappings
@ -39,62 +38,34 @@ class AbstractMinimalConnector(ABC):
for field in self_fields: for field in self_fields:
setattr(self, field, getattr(info, field)) setattr(self, field, getattr(info, field))
def search(self, query, min_confidence=None, timeout=settings.QUERY_TIMEOUT): def get_search_url(self, query):
"""free text search""" """format the query url"""
params = {} # Check if the query resembles an ISBN
if min_confidence: if maybe_isbn(query) and self.isbn_search_url and self.isbn_search_url != "":
params["min_confidence"] = min_confidence return f"{self.isbn_search_url}{query}"
data = self.get_search_data( # NOTE: previously, we tried searching isbn and if that produces no results,
f"{self.search_url}{query}", # searched as free text. This, instead, only searches isbn if it's isbn-y
params=params, return f"{self.search_url}{query}"
timeout=timeout,
)
results = []
for doc in self.parse_search_data(data)[:10]: def process_search_response(self, query, data, min_confidence):
results.append(self.format_search_result(doc)) """Format the search results based on the formt of the query"""
return results if maybe_isbn(query):
return list(self.parse_isbn_search_data(data))[:10]
def isbn_search(self, query, timeout=settings.QUERY_TIMEOUT): return list(self.parse_search_data(data, min_confidence))[:10]
"""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)
@abstractmethod @abstractmethod
def get_or_create_book(self, remote_id): def get_or_create_book(self, remote_id):
"""pull up a book record by whatever means possible""" """pull up a book record by whatever means possible"""
@abstractmethod @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""" """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 @abstractmethod
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
"""turn the result json from a search into a list""" """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): class AbstractConnector(AbstractMinimalConnector):
"""generic book data connector""" """generic book data connector"""
@ -254,9 +225,6 @@ def get_data(url, params=None, timeout=10):
# check if the url is blocked # check if the url is blocked
raise_not_valid_url(url) raise_not_valid_url(url)
if models.FederatedServer.is_blocked(url):
raise ConnectorException(f"Attempting to load data from blocked url: {url}")
try: try:
resp = requests.get( resp = requests.get(
url, url,
@ -311,20 +279,6 @@ def get_image(url, timeout=10):
return image_content, extension 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: class Mapping:
"""associate a local database field with a field in an external dataset""" """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 # try a direct match, so saving this would be redundant
return None return None
return format_text 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

View file

@ -10,15 +10,12 @@ class Connector(AbstractMinimalConnector):
def get_or_create_book(self, remote_id): def get_or_create_book(self, remote_id):
return activitypub.resolve_remote_id(remote_id, model=models.Edition) return activitypub.resolve_remote_id(remote_id, model=models.Edition)
def parse_search_data(self, data): def parse_search_data(self, data, min_confidence):
return data for search_result in data:
search_result["connector"] = self
def format_search_result(self, search_result): yield SearchResult(**search_result)
search_result["connector"] = self
return SearchResult(**search_result)
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
return data for search_result in data:
search_result["connector"] = self
def format_isbn_search_result(self, search_result): yield SearchResult(**search_result)
return self.format_search_result(search_result)

View file

@ -1,17 +1,18 @@
""" interface with whatever connectors the app has """ """ interface with whatever connectors the app has """
from datetime import datetime import asyncio
import importlib import importlib
import ipaddress
import logging import logging
import re
from urllib.parse import urlparse from urllib.parse import urlparse
import aiohttp
from django.dispatch import receiver from django.dispatch import receiver
from django.db.models import signals from django.db.models import signals
from requests import HTTPError from requests import HTTPError
from bookwyrm import book_search, models 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 from bookwyrm.tasks import app
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -21,53 +22,85 @@ class ConnectorException(HTTPError):
"""when the connector can't do what was asked""" """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.exception(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): def search(query, min_confidence=0.1, return_first=False):
"""find books based on arbitary keywords""" """find books based on arbitary keywords"""
if not query: if not query:
return [] return []
results = [] results = []
# Have we got a ISBN ? items = []
isbn = re.sub(r"[\W_]", "", query)
maybe_isbn = len(isbn) in [10, 13] # ISBN10 or ISBN13
start_time = datetime.now()
for connector in get_connectors(): for connector in get_connectors():
result_set = None # get the search url from the connector before sending
if maybe_isbn and connector.isbn_search_url and connector.isbn_search_url != "": url = connector.get_search_url(query)
# Search on ISBN try:
try: raise_not_valid_url(url)
result_set = connector.isbn_search(isbn) except ConnectorException:
except Exception as err: # pylint: disable=broad-except # if this URL is invalid we should skip it and move on
logger.info(err) logger.info("Request denied to blocked domain: %s", url)
# if this fails, we can still try regular search continue
items.append((url, connector))
# if no isbn search results, we fallback to generic search # load as many results as we can
if not result_set: results = asyncio.run(async_connector_search(query, items, min_confidence))
try: results = [r for r in results if r]
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
if return_first: 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 return results
@ -119,6 +152,15 @@ def load_more_data(connector_id, book_id):
connector.expand_book_data(book) 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): def load_connector(connector_info):
"""instantiate the connector class""" """instantiate the connector class"""
connector = importlib.import_module( connector = importlib.import_module(
@ -133,3 +175,20 @@ def create_connector(sender, instance, created, *args, **kwargs):
"""create a connector to an external bookwyrm server""" """create a connector to an external bookwyrm server"""
if instance.application_type == "bookwyrm": if instance.application_type == "bookwyrm":
get_or_create_connector(f"https://{instance.server_name}") 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}")

View file

@ -5,7 +5,7 @@ from bookwyrm import models
from bookwyrm.book_search import SearchResult from bookwyrm.book_search import SearchResult
from .abstract_connector import AbstractConnector, Mapping from .abstract_connector import AbstractConnector, Mapping
from .abstract_connector import get_data from .abstract_connector import get_data
from .connector_manager import ConnectorException from .connector_manager import ConnectorException, create_edition_task
class Connector(AbstractConnector): class Connector(AbstractConnector):
@ -77,53 +77,42 @@ class Connector(AbstractConnector):
**{k: data.get(k) for k in ["uri", "image", "labels", "sitelinks", "type"]}, **{k: data.get(k) for k in ["uri", "image", "labels", "sitelinks", "type"]},
} }
def search(self, query, min_confidence=None): # pylint: disable=arguments-differ def parse_search_data(self, data, min_confidence):
"""overrides default search function with confidence ranking""" for search_result in data.get("results", []):
results = super().search(query) images = search_result.get("image")
if min_confidence: cover = f"{self.covers_url}/img/entities/{images[0]}" if images else None
# filter the search results after the fact # a deeply messy translation of inventaire's scores
return [r for r in results if r.confidence >= min_confidence] confidence = float(search_result.get("_score", 0.1))
return results confidence = 0.1 if confidence < 150 else 0.999
if confidence < min_confidence:
def parse_search_data(self, data): continue
return data.get("results") yield SearchResult(
title=search_result.get("label"),
def format_search_result(self, search_result): key=self.get_remote_id(search_result.get("uri")),
images = search_result.get("image") author=search_result.get("description"),
cover = f"{self.covers_url}/img/entities/{images[0]}" if images else None view_link=f"{self.base_url}/entity/{search_result.get('uri')}",
# a deeply messy translation of inventaire's scores cover=cover,
confidence = float(search_result.get("_score", 0.1)) confidence=confidence,
confidence = 0.1 if confidence < 150 else 0.999 connector=self,
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_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
"""got some daaaata""" """got some daaaata"""
results = data.get("entities") results = data.get("entities")
if not results: if not results:
return [] return
return list(results.values()) for search_result in list(results.values()):
title = search_result.get("claims", {}).get("wdt:P1476", [])
def format_isbn_search_result(self, search_result): if not title:
"""totally different format than a regular search result""" continue
title = search_result.get("claims", {}).get("wdt:P1476", []) yield SearchResult(
if not title: title=title[0],
return None key=self.get_remote_id(search_result.get("uri")),
return SearchResult( author=search_result.get("description"),
title=title[0], view_link=f"{self.base_url}/entity/{search_result.get('uri')}",
key=self.get_remote_id(search_result.get("uri")), cover=self.get_cover_url(search_result.get("image")),
author=search_result.get("description"), connector=self,
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): def is_work_data(self, data):
return data.get("type") == "work" return data.get("type") == "work"
@ -167,12 +156,16 @@ class Connector(AbstractConnector):
for edition_uri in edition_options.get("uris"): for edition_uri in edition_options.get("uris"):
remote_id = self.get_remote_id(edition_uri) remote_id = self.get_remote_id(edition_uri)
try: create_edition_task.delay(self.connector.id, work.id, remote_id)
data = self.get_book_data(remote_id)
except ConnectorException: def create_edition_from_data(self, work, edition_data, instance=None):
# who, indeed, knows """pass in the url as data and then call the version in abstract connector"""
continue try:
self.create_edition_from_data(work, data) data = self.get_book_data(edition_data)
except ConnectorException:
# who, indeed, knows
return
super().create_edition_from_data(work, data, instance=instance)
def get_cover_url(self, cover_blob, *_): def get_cover_url(self, cover_blob, *_):
"""format the relative cover url into an absolute one: """format the relative cover url into an absolute one:

View file

@ -5,7 +5,7 @@ from bookwyrm import models
from bookwyrm.book_search import SearchResult from bookwyrm.book_search import SearchResult
from .abstract_connector import AbstractConnector, Mapping from .abstract_connector import AbstractConnector, Mapping
from .abstract_connector import get_data, infer_physical_format, unique_physical_format 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 from .openlibrary_languages import languages
@ -152,39 +152,41 @@ class Connector(AbstractConnector):
image_name = f"{cover_id}-{size}.jpg" image_name = f"{cover_id}-{size}.jpg"
return f"{self.covers_url}/b/id/{image_name}" return f"{self.covers_url}/b/id/{image_name}"
def parse_search_data(self, data): def parse_search_data(self, data, min_confidence):
return data.get("docs") 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): # OL doesn't provide confidence, but it does sort by an internal ranking, so
# build the remote id from the openlibrary key # this confidence value is relative to the list position
key = self.books_url + search_result["key"] confidence = 1 / (idx + 1)
author = search_result.get("author_name") or ["Unknown"]
cover_blob = search_result.get("cover_i") yield SearchResult(
cover = self.get_cover_url([cover_blob], size="M") if cover_blob else None title=search_result.get("title"),
return SearchResult( key=key,
title=search_result.get("title"), author=", ".join(author),
key=key, connector=self,
author=", ".join(author), year=search_result.get("first_publish_year"),
connector=self, cover=cover,
year=search_result.get("first_publish_year"), confidence=confidence,
cover=cover, )
)
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
return list(data.values()) for search_result in list(data.values()):
# build the remote id from the openlibrary key
def format_isbn_search_result(self, search_result): key = self.books_url + search_result["key"]
# build the remote id from the openlibrary key authors = search_result.get("authors") or [{"name": "Unknown"}]
key = self.books_url + search_result["key"] author_names = [author.get("name") for author in authors]
authors = search_result.get("authors") or [{"name": "Unknown"}] yield SearchResult(
author_names = [author.get("name") for author in authors] title=search_result.get("title"),
return SearchResult( key=key,
title=search_result.get("title"), author=", ".join(author_names),
key=key, connector=self,
author=", ".join(author_names), year=search_result.get("publish_date"),
connector=self, )
year=search_result.get("publish_date"),
)
def load_edition_data(self, olkey): def load_edition_data(self, olkey):
"""query openlibrary for editions of a work""" """query openlibrary for editions of a work"""
@ -208,7 +210,7 @@ class Connector(AbstractConnector):
# does this edition have ANY interesting data? # does this edition have ANY interesting data?
if ignore_edition(edition_data): if ignore_edition(edition_data):
continue 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): def ignore_edition(edition_data):

View file

@ -53,7 +53,12 @@ class ReadThroughForm(CustomForm):
self.add_error( self.add_error(
"finish_date", _("Reading finish date cannot be before start date.") "finish_date", _("Reading finish date cannot be before start date.")
) )
stopped_date = cleaned_data.get("stopped_date")
if start_date and stopped_date and start_date > stopped_date:
self.add_error(
"stopped_date", _("Reading stopped date cannot be before start date.")
)
class Meta: class Meta:
model = models.ReadThrough model = models.ReadThrough
fields = ["user", "book", "start_date", "finish_date"] fields = ["user", "book", "start_date", "finish_date", "stopped_date"]

View file

@ -1,6 +1,7 @@
""" import classes """ """ import classes """
from .importer import Importer from .importer import Importer
from .calibre_import import CalibreImporter
from .goodreads_import import GoodreadsImporter from .goodreads_import import GoodreadsImporter
from .librarything_import import LibrarythingImporter from .librarything_import import LibrarythingImporter
from .openlibrary_import import OpenLibraryImporter from .openlibrary_import import OpenLibraryImporter

View file

@ -0,0 +1,28 @@
""" handle reading a csv from calibre """
from bookwyrm.models import Shelf
from . import Importer
class CalibreImporter(Importer):
"""csv downloads from Calibre"""
service = "Calibre"
def __init__(self, *args, **kwargs):
# Add timestamp to row_mappings_guesses for date_added to avoid
# integrity error
row_mappings_guesses = []
for field, mapping in self.row_mappings_guesses:
if field in ("date_added",):
row_mappings_guesses.append((field, mapping + ["timestamp"]))
else:
row_mappings_guesses.append((field, mapping))
self.row_mappings_guesses = row_mappings_guesses
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
return Shelf.TO_READ

View file

@ -1,5 +1,8 @@
""" handle reading a tsv from librarything """ """ handle reading a tsv from librarything """
import re import re
from bookwyrm.models import Shelf
from . import Importer from . import Importer
@ -21,7 +24,7 @@ class LibrarythingImporter(Importer):
def get_shelf(self, normalized_row): def get_shelf(self, normalized_row):
if normalized_row["date_finished"]: if normalized_row["date_finished"]:
return "read" return Shelf.READ_FINISHED
if normalized_row["date_started"]: if normalized_row["date_started"]:
return "reading" return Shelf.READING
return "to-read" return Shelf.TO_READ

View file

@ -56,12 +56,17 @@ class Command(BaseCommand):
self.stdout.write(" OK 🖼") self.stdout.write(" OK 🖼")
# Books # Books
books = models.Book.objects.select_subclasses().filter() book_ids = (
self.stdout.write( models.Book.objects.select_subclasses()
" → Book preview images ({}): ".format(len(books)), ending="" .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(".", ending="")
self.stdout.write(" OK 🖼") self.stdout.write(" OK 🖼")

View file

@ -89,7 +89,7 @@ def init_connectors():
covers_url="https://inventaire.io", covers_url="https://inventaire.io",
search_url="https://inventaire.io/api/search?types=works&types=works&search=", 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", isbn_search_url="https://inventaire.io/api/entities?action=by-uris&uris=isbn%3A",
priority=3, priority=1,
) )
models.Connector.objects.create( models.Connector.objects.create(
@ -101,7 +101,7 @@ def init_connectors():
covers_url="https://covers.openlibrary.org", covers_url="https://covers.openlibrary.org",
search_url="https://openlibrary.org/search?q=", search_url="https://openlibrary.org/search?q=",
isbn_search_url="https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:", isbn_search_url="https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:",
priority=3, priority=1,
) )

View file

@ -0,0 +1,80 @@
# Generated by Django 3.2.12 on 2022-03-16 23:20
import bookwyrm.models.fields
from django.db import migrations
from bookwyrm.models import Shelf
def add_shelves(apps, schema_editor):
"""add any superusers to the "admin" group"""
db_alias = schema_editor.connection.alias
shelf_model = apps.get_model("bookwyrm", "Shelf")
users = apps.get_model("bookwyrm", "User")
local_users = users.objects.using(db_alias).filter(local=True)
for user in local_users:
remote_id = f"{user.remote_id}/books/stopped"
shelf_model.objects.using(db_alias).create(
name="Stopped reading",
identifier=Shelf.STOPPED_READING,
user=user,
editable=False,
remote_id=remote_id,
)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0145_sitesettings_version"),
]
operations = [
migrations.AlterField(
model_name="comment",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "To-Read"),
("reading", "Reading"),
("read", "Read"),
("stopped-reading", "Stopped-Reading"),
],
max_length=255,
null=True,
),
),
migrations.AlterField(
model_name="quotation",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "To-Read"),
("reading", "Reading"),
("read", "Read"),
("stopped-reading", "Stopped-Reading"),
],
max_length=255,
null=True,
),
),
migrations.AlterField(
model_name="review",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "To-Read"),
("reading", "Reading"),
("read", "Read"),
("stopped-reading", "Stopped-Reading"),
],
max_length=255,
null=True,
),
),
migrations.RunPython(add_shelves, reverse_code=migrations.RunPython.noop),
]

View file

@ -0,0 +1,13 @@
# Generated by Django 3.2.12 on 2022-03-26 20:06
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0146_auto_20220316_2320"),
("bookwyrm", "0147_alter_user_preferred_language"),
]
operations = []

View file

@ -0,0 +1,13 @@
# Generated by Django 3.2.13 on 2022-05-26 17:16
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0148_alter_user_preferred_language"),
("bookwyrm", "0148_merge_20220326_2006"),
]
operations = []

View file

@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2022-05-26 18:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0149_merge_20220526_1716"),
]
operations = [
migrations.AddField(
model_name="readthrough",
name="stopped_date",
field=models.DateTimeField(blank=True, null=True),
),
]

View file

@ -176,8 +176,8 @@ class Book(BookDataModel):
"""properties of this edition, as a string""" """properties of this edition, as a string"""
items = [ items = [
self.physical_format if hasattr(self, "physical_format") else None, self.physical_format if hasattr(self, "physical_format") else None,
self.languages[0] + " language" f"{self.languages[0]} language"
if self.languages and self.languages[0] != "English" if self.languages and self.languages[0] and self.languages[0] != "English"
else None, else None,
str(self.published_date.year) if self.published_date else None, str(self.published_date.year) if self.published_date else None,
", ".join(self.publishers) if hasattr(self, "publishers") else None, ", ".join(self.publishers) if hasattr(self, "publishers") else None,

View file

@ -175,9 +175,15 @@ class ImportItem(models.Model):
def date_added(self): def date_added(self):
"""when the book was added to this dataset""" """when the book was added to this dataset"""
if self.normalized_data.get("date_added"): if self.normalized_data.get("date_added"):
return timezone.make_aware( parsed_date_added = dateutil.parser.parse(
dateutil.parser.parse(self.normalized_data.get("date_added")) self.normalized_data.get("date_added")
) )
if timezone.is_aware(parsed_date_added):
# Keep timezone if import already had one
return parsed_date_added
return timezone.make_aware(parsed_date_added)
return None return None
@property @property

View file

@ -27,6 +27,7 @@ class ReadThrough(BookWyrmModel):
) )
start_date = models.DateTimeField(blank=True, null=True) start_date = models.DateTimeField(blank=True, null=True)
finish_date = models.DateTimeField(blank=True, null=True) finish_date = models.DateTimeField(blank=True, null=True)
stopped_date = models.DateTimeField(blank=True, null=True)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
@ -34,7 +35,7 @@ class ReadThrough(BookWyrmModel):
cache.delete(f"latest_read_through-{self.user.id}-{self.book.id}") cache.delete(f"latest_read_through-{self.user.id}-{self.book.id}")
self.user.update_active_date() self.user.update_active_date()
# an active readthrough must have an unset finish date # an active readthrough must have an unset finish date
if self.finish_date: if self.finish_date or self.stopped_date:
self.is_active = False self.is_active = False
super().save(*args, **kwargs) super().save(*args, **kwargs)

View file

@ -18,8 +18,9 @@ class Shelf(OrderedCollectionMixin, BookWyrmModel):
TO_READ = "to-read" TO_READ = "to-read"
READING = "reading" READING = "reading"
READ_FINISHED = "read" READ_FINISHED = "read"
STOPPED_READING = "stopped-reading"
READ_STATUS_IDENTIFIERS = (TO_READ, READING, READ_FINISHED) READ_STATUS_IDENTIFIERS = (TO_READ, READING, READ_FINISHED, STOPPED_READING)
name = fields.CharField(max_length=100) name = fields.CharField(max_length=100)
identifier = models.CharField(max_length=100) identifier = models.CharField(max_length=100)

View file

@ -116,11 +116,8 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel):
def ignore_activity(cls, activity): # pylint: disable=too-many-return-statements def ignore_activity(cls, activity): # pylint: disable=too-many-return-statements
"""keep notes if they are replies to existing statuses""" """keep notes if they are replies to existing statuses"""
if activity.type == "Announce": if activity.type == "Announce":
try: boosted = activitypub.resolve_remote_id(activity.object, get_activity=True)
boosted = activitypub.resolve_remote_id( if not boosted:
activity.object, get_activity=True
)
except activitypub.ActivitySerializerError:
# if we can't load the status, definitely ignore it # if we can't load the status, definitely ignore it
return True return True
# keep the boost if we would keep the status # keep the boost if we would keep the status
@ -265,7 +262,7 @@ class GeneratedNote(Status):
ReadingStatusChoices = models.TextChoices( ReadingStatusChoices = models.TextChoices(
"ReadingStatusChoices", ["to-read", "reading", "read"] "ReadingStatusChoices", ["to-read", "reading", "read", "stopped-reading"]
) )
@ -306,10 +303,17 @@ class Comment(BookStatus):
@property @property
def pure_content(self): def pure_content(self):
"""indicate the book in question for mastodon (or w/e) users""" """indicate the book in question for mastodon (or w/e) users"""
return ( if self.progress_mode == "PG" and self.progress and (self.progress > 0):
f'{self.content}<p>(comment on <a href="{self.book.remote_id}">' return_value = (
f'"{self.book.title}"</a>)</p>' f'{self.content}<p>(comment on <a href="{self.book.remote_id}">'
) f'"{self.book.title}"</a>, page {self.progress})</p>'
)
else:
return_value = (
f'{self.content}<p>(comment on <a href="{self.book.remote_id}">'
f'"{self.book.title}"</a>)</p>'
)
return return_value
activity_serializer = activitypub.Comment activity_serializer = activitypub.Comment
@ -335,10 +339,17 @@ class Quotation(BookStatus):
"""indicate the book in question for mastodon (or w/e) users""" """indicate the book in question for mastodon (or w/e) users"""
quote = re.sub(r"^<p>", '<p>"', self.quote) quote = re.sub(r"^<p>", '<p>"', self.quote)
quote = re.sub(r"</p>$", '"</p>', quote) quote = re.sub(r"</p>$", '"</p>', quote)
return ( if self.position_mode == "PG" and self.position and (self.position > 0):
f'{quote} <p>-- <a href="{self.book.remote_id}">' return_value = (
f'"{self.book.title}"</a></p>{self.content}' f'{quote} <p>-- <a href="{self.book.remote_id}">'
) f'"{self.book.title}"</a>, page {self.position}</p>{self.content}'
)
else:
return_value = (
f'{quote} <p>-- <a href="{self.book.remote_id}">'
f'"{self.book.title}"</a></p>{self.content}'
)
return return_value
activity_serializer = activitypub.Quotation activity_serializer = activitypub.Quotation
@ -377,7 +388,7 @@ class Review(BookStatus):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
"""clear rating caches""" """clear rating caches"""
if self.book.parent_work: 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) super().save(*args, **kwargs)

View file

@ -374,6 +374,10 @@ class User(OrderedCollectionPageMixin, AbstractUser):
"name": "Read", "name": "Read",
"identifier": "read", "identifier": "read",
}, },
{
"name": "Stopped Reading",
"identifier": "stopped-reading",
},
] ]
for shelf in shelves: for shelf in shelves:

View file

@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _
env = Env() env = Env()
env.read_env() env.read_env()
DOMAIN = env("DOMAIN") DOMAIN = env("DOMAIN")
VERSION = "0.3.4" VERSION = "0.4.0"
RELEASE_API = env( RELEASE_API = env(
"RELEASE_API", "RELEASE_API",
@ -21,7 +21,7 @@ RELEASE_API = env(
PAGE_LENGTH = env("PAGE_LENGTH", 15) PAGE_LENGTH = env("PAGE_LENGTH", 15)
DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English")
JS_CACHE = "bc93172a" JS_CACHE = "e678183b"
# email # email
EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend") EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend")
@ -212,7 +212,7 @@ STREAMS = [
# Search configuration # Search configuration
# total time in seconds that the instance will spend searching connectors # 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 # timeout for a query to an individual connector
QUERY_TIMEOUT = int(env("QUERY_TIMEOUT", 5)) QUERY_TIMEOUT = int(env("QUERY_TIMEOUT", 5))

View file

@ -203,6 +203,8 @@ let StatusCache = new (class {
.forEach((item) => (item.disabled = false)); .forEach((item) => (item.disabled = false));
next_identifier = next_identifier == "complete" ? "read" : next_identifier; next_identifier = next_identifier == "complete" ? "read" : next_identifier;
next_identifier =
next_identifier == "stopped-reading-complete" ? "stopped-reading" : next_identifier;
// Disable the current state // Disable the current state
button.querySelector( button.querySelector(

View file

@ -50,7 +50,7 @@
</ul> </ul>
</nav> </nav>
<div class="column"> <div class="column is-clipped">
{% block about_content %}{% endblock %} {% block about_content %}{% endblock %}
</div> </div>
</div> </div>

View file

@ -24,7 +24,7 @@
</div> </div>
{% endif %} {% endif %}
<form class="block" name="edit-author" action="{{ author.local_path }}/edit" method="post"> <form class="block" name="edit-author" action="{% url 'edit-author' author.id %}" method="post">
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="last_edited_by" value="{{ request.user.id }}"> <input type="hidden" name="last_edited_by" value="{{ request.user.id }}">

View file

@ -41,10 +41,18 @@
class="block" class="block"
{% if book.id %} {% if book.id %}
name="edit-book" name="edit-book"
action="{{ book.local_path }}/{% if confirm_mode %}confirm{% else %}edit{% endif %}" {% if confirm_mode %}
action="{% url 'edit-book-confirm' book.id %}"
{% else %}
action="{% url 'edit-book' book.id %}"
{% endif %}
{% else %} {% else %}
name="create-book" name="create-book"
action="/create-book{% if confirm_mode %}/confirm{% endif %}" {% if confirm_mode %}
action="{% url 'create-book-confirm' %}"
{% else %}
action="{% url 'create-book' %}"
{% endif %}
{% endif %} {% endif %}
method="post" method="post"
enctype="multipart/form-data" enctype="multipart/form-data"

View file

@ -10,6 +10,7 @@
{% if shelf.identifier == 'to-read' %}{% trans "To Read" %} {% if shelf.identifier == 'to-read' %}{% trans "To Read" %}
{% elif shelf.identifier == 'reading' %}{% trans "Currently Reading" %} {% elif shelf.identifier == 'reading' %}{% trans "Currently Reading" %}
{% elif shelf.identifier == 'read' %}{% trans "Read" %} {% elif shelf.identifier == 'read' %}{% trans "Read" %}
{% elif shelf.identifier == 'stopped-reading' %}{% trans "Stopped Reading" %}
{% else %}{{ shelf.name }}{% endif %} {% else %}{{ shelf.name }}{% endif %}
</option> </option>
{% endfor %} {% endfor %}

View file

@ -32,6 +32,9 @@
<option value="OpenLibrary" {% if current == 'OpenLibrary' %}selected{% endif %}> <option value="OpenLibrary" {% if current == 'OpenLibrary' %}selected{% endif %}>
OpenLibrary (CSV) OpenLibrary (CSV)
</option> </option>
<option value="Calibre" {% if current == 'Calibre' %}selected{% endif %}>
Calibre (CSV)
</option>
</select> </select>
</div> </div>

View file

@ -0,0 +1,14 @@
{% extends 'layout.html' %}
{% load i18n %}
{% block title %}
{% blocktrans trimmed with book_title=book.title %}
Stop Reading "{{ book_title }}"
{% endblocktrans %}
{% endblock %}
{% block content %}
{% include "snippets/reading_modals/stop_reading_modal.html" with book=book active=True static=True %}
{% endblock %}

View file

@ -19,6 +19,7 @@
</label> </label>
{% include "snippets/progress_field.html" with id=field_id %} {% include "snippets/progress_field.html" with id=field_id %}
{% endif %} {% endif %}
<div class="field"> <div class="field">
<label class="label" for="id_finish_date_{{ readthrough.id }}"> <label class="label" for="id_finish_date_{{ readthrough.id }}">
{% trans "Finished reading" %} {% trans "Finished reading" %}

View file

@ -8,10 +8,12 @@
<div class="column"> <div class="column">
{% trans "Progress Updates:" %} {% trans "Progress Updates:" %}
<ul> <ul>
{% if readthrough.finish_date or readthrough.progress %} {% if readthrough.finish_date or readthrough.stopped_date or readthrough.progress %}
<li> <li>
{% if readthrough.finish_date %} {% if readthrough.finish_date %}
{{ readthrough.finish_date | localtime | naturalday }}: {% trans "finished" %} {{ readthrough.finish_date | localtime | naturalday }}: {% trans "finished" %}
{% elif readthrough.stopped_date %}
{{ readthrough.stopped_date | localtime | naturalday }}: {% trans "stopped" %}
{% else %} {% else %}
{% if readthrough.progress_mode == 'PG' %} {% if readthrough.progress_mode == 'PG' %}

View file

@ -36,7 +36,7 @@
{% if result_set.results %} {% if result_set.results %}
<section class="mb-5"> <section class="mb-5">
{% if not result_set.connector.local %} {% if not result_set.connector.local %}
<details class="details-panel box" {% if forloop.first %}open{% endif %}> <details class="details-panel box" open>
{% endif %} {% endif %}
{% if not result_set.connector.local %} {% if not result_set.connector.local %}
<summary class="is-flex is-align-items-center is-flex-wrap-wrap is-gap-2"> <summary class="is-flex is-align-items-center is-flex-wrap-wrap is-gap-2">

View file

@ -86,6 +86,7 @@
{% if shelf.identifier == 'to-read' %}{% trans "To Read" %} {% if shelf.identifier == 'to-read' %}{% trans "To Read" %}
{% elif shelf.identifier == 'reading' %}{% trans "Currently Reading" %} {% elif shelf.identifier == 'reading' %}{% trans "Currently Reading" %}
{% elif shelf.identifier == 'read' %}{% trans "Read" %} {% elif shelf.identifier == 'read' %}{% trans "Read" %}
{% elif shelf.identifier == 'stopped-reading' %}{% trans "Stopped Reading" %}
{% else %}{{ shelf.name }}{% endif %} {% else %}{{ shelf.name }}{% endif %}
<span class="subtitle"> <span class="subtitle">
{% include 'snippets/privacy-icons.html' with item=shelf %} {% include 'snippets/privacy-icons.html' with item=shelf %}
@ -150,7 +151,7 @@
{% if is_self %} {% if is_self %}
<th>{% trans "Shelved" as text %}{% include 'snippets/table-sort-header.html' with field="shelved_date" sort=sort text=text %}</th> <th>{% trans "Shelved" as text %}{% include 'snippets/table-sort-header.html' with field="shelved_date" sort=sort text=text %}</th>
<th>{% trans "Started" as text %}{% include 'snippets/table-sort-header.html' with field="start_date" sort=sort text=text %}</th> <th>{% trans "Started" as text %}{% include 'snippets/table-sort-header.html' with field="start_date" sort=sort text=text %}</th>
<th>{% trans "Finished" as text %}{% include 'snippets/table-sort-header.html' with field="finish_date" sort=sort text=text %}</th> <th>{% if shelf.identifier == 'read' %}{% trans "Finished" as text %}{% else %}{% trans "Until" as text %}{% endif %}{% include 'snippets/table-sort-header.html' with field="finish_date" sort=sort text=text %}</th>
{% endif %} {% endif %}
<th>{% trans "Rating" as text %}{% include 'snippets/table-sort-header.html' with field="rating" sort=sort text=text %}</th> <th>{% trans "Rating" as text %}{% include 'snippets/table-sort-header.html' with field="rating" sort=sort text=text %}</th>
{% endif %} {% endif %}
@ -180,7 +181,7 @@
<td data-title="{% trans "Started" %}"> <td data-title="{% trans "Started" %}">
{{ book.start_date|naturalday|default_if_none:""}} {{ book.start_date|naturalday|default_if_none:""}}
</td> </td>
<td data-title="{% trans "Finished" %}"> <td data-title="{% if shelf.identifier == 'read' %}{% trans "Finished" as text %}{% else %}{% trans "Until" as text %}{% endif %}">
{{ book.finish_date|naturalday|default_if_none:""}} {{ book.finish_date|naturalday|default_if_none:""}}
</td> </td>
{% endif %} {% endif %}

View file

@ -0,0 +1,42 @@
{% extends 'snippets/reading_modals/layout.html' %}
{% load i18n %}
{% load utilities %}
{% block modal-title %}
{% blocktrans trimmed with book_title=book|book_title %}
Stop Reading "<em>{{ book_title }}</em>"
{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="stop-reading-{{ uuid }}" action="{% url 'reading-status' 'stop' book.id %}" method="post" {% if not refresh %}class="submit-status"{% endif %}>
{% csrf_token %}
<input type="hidden" name="id" value="{{ readthrough.id }}">
<input type="hidden" name="reading_status" value="stopped-reading">
<input type="hidden" name="shelf" value="{{ move_from }}">
{% endblock %}
{% block reading-dates %}
<div class="columns">
<div class="column is-half">
<div class="field">
<label class="label" for="stop_id_start_date_{{ uuid }}">
{% trans "Started reading" %}
</label>
<input type="date" name="start_date" class="input" id="stop_id_start_date_{{ uuid }}" value="{{ readthrough.start_date | date:"Y-m-d" }}">
</div>
</div>
<div class="column is-half">
<div class="field">
<label class="label" for="id_read_until_date_{{ uuid }}">
{% trans "Stopped reading" %}
</label>
<input type="date" name="stopped_date" class="input" id="id_read_until_date_{{ uuid }}" value="{% now "Y-m-d" %}">
</div>
</div>
</div>
{% endblock %}
{% block form %}
{% include "snippets/reading_modals/form.html" with optional=True type="stop_modal" %}
{% endblock %}

View file

@ -49,6 +49,13 @@
{% join "finish_reading" uuid as modal_id %} {% join "finish_reading" uuid as modal_id %}
{% include 'snippets/shelve_button/modal_button.html' with class=button_class fallback_url=fallback_url %} {% include 'snippets/shelve_button/modal_button.html' with class=button_class fallback_url=fallback_url %}
{% elif shelf.identifier == 'stopped-reading' %}
{% trans "Stopped reading" as button_text %}
{% url 'reading-status' 'stop' book.id as fallback_url %}
{% join "stop_reading" uuid as modal_id %}
{% include 'snippets/shelve_button/modal_button.html' with class=button_class fallback_url=fallback_url %}
{% elif shelf.identifier == 'to-read' %} {% elif shelf.identifier == 'to-read' %}
{% trans "Want to read" as button_text %} {% trans "Want to read" as button_text %}
@ -99,5 +106,8 @@
{% join "finish_reading" uuid as modal_id %} {% join "finish_reading" uuid as modal_id %}
{% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book id=modal_id move_from=current.id readthrough=readthrough refresh=True class="" %} {% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book id=modal_id move_from=current.id readthrough=readthrough refresh=True class="" %}
{% join "stop_reading" uuid as modal_id %}
{% include 'snippets/reading_modals/stop_reading_modal.html' with book=active_shelf.book id=modal_id move_from=current.id readthrough=readthrough refresh=True class="" %}
{% endwith %} {% endwith %}
{% endblock %} {% endblock %}

View file

@ -29,6 +29,9 @@
{% join "finish_reading" uuid as modal_id %} {% join "finish_reading" uuid as modal_id %}
{% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf_book id=modal_id readthrough=readthrough class="" %} {% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf_book id=modal_id readthrough=readthrough class="" %}
{% join "stop_reading" uuid as modal_id %}
{% include 'snippets/reading_modals/stop_reading_modal.html' with book=active_shelf_book id=modal_id readthrough=readthrough class="" %}
{% join "progress_update" uuid as modal_id %} {% join "progress_update" uuid as modal_id %}
{% include 'snippets/reading_modals/progress_update_modal.html' with book=active_shelf_book id=modal_id readthrough=readthrough class="" %} {% include 'snippets/reading_modals/progress_update_modal.html' with book=active_shelf_book id=modal_id readthrough=readthrough class="" %}

View file

@ -8,7 +8,7 @@
{% comparison_bool shelf.identifier active_shelf.shelf.identifier as is_current %} {% comparison_bool shelf.identifier active_shelf.shelf.identifier as is_current %}
<li role="menuitem" class="dropdown-item p-0"> <li role="menuitem" class="dropdown-item p-0">
<div <div
class="{% if next_shelf_identifier == shelf.identifier %}is-hidden{% endif %}" class="{% if is_current or next_shelf_identifier == shelf.identifier %}is-hidden{% elif shelf.identifier == 'stopped-reading' and active_shelf.shelf.identifier != "reading" %}is-hidden{% endif %}"
data-shelf-dropdown-identifier="{{ shelf.identifier }}" data-shelf-dropdown-identifier="{{ shelf.identifier }}"
data-shelf-next="{{ shelf.identifier|next_shelf }}" data-shelf-next="{{ shelf.identifier|next_shelf }}"
> >
@ -26,6 +26,13 @@
{% join "finish_reading" button_uuid as modal_id %} {% join "finish_reading" button_uuid as modal_id %}
{% include 'snippets/shelve_button/modal_button.html' with class=class fallback_url=fallback_url %} {% include 'snippets/shelve_button/modal_button.html' with class=class fallback_url=fallback_url %}
{% elif shelf.identifier == 'stopped-reading' %}
{% trans "Stop reading" as button_text %}
{% url 'reading-status' 'stop' book.id as fallback_url %}
{% join "stop_reading" button_uuid as modal_id %}
{% include 'snippets/shelve_button/modal_button.html' with class=class fallback_url=fallback_url %}
{% elif shelf.identifier == 'to-read' %} {% elif shelf.identifier == 'to-read' %}
{% trans "Want to read" as button_text %} {% trans "Want to read" as button_text %}

View file

@ -13,6 +13,15 @@
</button> </button>
</div> </div>
<div
class="{% if next_shelf_identifier != 'stopped-reading-complete' %}is-hidden{% endif %}"
data-shelf-identifier="stopped-reading-complete"
>
<button type="button" class="button {{ class }}" disabled>
<span>{% trans "Stopped reading" %}</span>
</button>
</div>
{% for shelf in shelves %} {% for shelf in shelves %}
<div <div
class="{% if next_shelf_identifier != shelf.identifier %}is-hidden{% endif %}" class="{% if next_shelf_identifier != shelf.identifier %}is-hidden{% endif %}"
@ -33,6 +42,14 @@
{% join "finish_reading" button_uuid as modal_id %} {% join "finish_reading" button_uuid as modal_id %}
{% include 'snippets/shelve_button/modal_button.html' with class=class fallback_url=fallback_url %} {% include 'snippets/shelve_button/modal_button.html' with class=class fallback_url=fallback_url %}
{% elif shelf.identifier == 'stopped-reading' %}
{% trans "Stop reading" as button_text %}
{% url 'reading-status' 'finish' book.id as fallback_url %}
{% join "stop_reading" button_uuid as modal_id %}
{% include 'snippets/shelve_button/modal_button.html' with class=class fallback_url=fallback_url %}
{% elif shelf.identifier == 'to-read' %} {% elif shelf.identifier == 'to-read' %}
{% trans "Want to read" as button_text %} {% trans "Want to read" as button_text %}

View file

@ -112,6 +112,9 @@
{% with full=status.content|safe no_trim=status.content_warning itemprop="reviewBody" %} {% with full=status.content|safe no_trim=status.content_warning itemprop="reviewBody" %}
{% include 'snippets/trimmed_text.html' %} {% include 'snippets/trimmed_text.html' %}
{% endwith %} {% endwith %}
{% if status.progress %}
<div class="is-small is-italic has-text-right mr-3">{% trans "page" %} {{ status.progress }}</div>
{% endif %}
{% endif %} {% endif %}
{% if status.attachments.exists %} {% if status.attachments.exists %}

View file

@ -0,0 +1,23 @@
{% spaceless %}
{% load i18n %}
{% load utilities %}
{% load status_display %}
{% load_book status as book %}
{% if book.authors.exists %}
{% with author=book.authors.first %}
{% blocktrans trimmed with book_path=book.local_path book=book|book_title author_name=author.name author_path=author.local_path %}
stopped reading <a href="{{ book_path }}">{{ book }}</a> by <a href="{{ author_path }}">{{ author_name }}</a>
{% endblocktrans %}
{% endwith %}
{% else %}
{% blocktrans trimmed with book_path=book.local_path book=book|book_title %}
stopped reading <a href="{{ book_path }}">{{ book }}</a>
{% endblocktrans %}
{% endif %}
{% endspaceless %}

View file

@ -33,8 +33,9 @@
{% if shelf.name == 'To Read' %}{% trans "To Read" %} {% if shelf.name == 'To Read' %}{% trans "To Read" %}
{% elif shelf.name == 'Currently Reading' %}{% trans "Currently Reading" %} {% elif shelf.name == 'Currently Reading' %}{% trans "Currently Reading" %}
{% elif shelf.name == 'Read' %}{% trans "Read" %} {% elif shelf.name == 'Read' %}{% trans "Read" %}
{% elif shelf.name == 'Stopped Reading' %}{% trans "Stopped Reading" %}
{% else %}{{ shelf.name }}{% endif %} {% else %}{{ shelf.name }}{% endif %}
{% if shelf.size > 3 %}<small>(<a href="{{ shelf.local_path }}">{% blocktrans with size=shelf.size %}View all {{ size }}{% endblocktrans %}</a>)</small>{% endif %} {% if shelf.size > 4 %}<small>(<a href="{{ shelf.local_path }}">{% blocktrans with size=shelf.size %}View all {{ size }}{% endblocktrans %}</a>)</small>{% endif %}
</h3> </h3>
<div class="is-mobile field is-grouped"> <div class="is-mobile field is-grouped">
{% for book in shelf.books %} {% for book in shelf.books %}

View file

@ -13,10 +13,10 @@ register = template.Library()
def get_rating(book, user): def get_rating(book, user):
"""get the overall rating of a book""" """get the overall rating of a book"""
return cache.get_or_set( return cache.get_or_set(
f"book-rating-{book.parent_work.id}-{user.id}", f"book-rating-{book.parent_work.id}",
lambda u, b: models.Review.privacy_filter(u) lambda u, b: models.Review.objects.filter(
.filter(book__parent_work__editions=b, rating__gt=0) book__parent_work__editions=b, rating__gt=0
.aggregate(Avg("rating"))["rating__avg"] ).aggregate(Avg("rating"))["rating__avg"]
or 0, or 0,
user, user,
book, book,

View file

@ -30,6 +30,8 @@ def get_next_shelf(current_shelf):
return "read" return "read"
if current_shelf == "read": if current_shelf == "read":
return "complete" return "complete"
if current_shelf == "stopped-reading":
return "stopped-reading-complete"
return "to-read" return "to-read"

View file

@ -1,6 +1,10 @@
""" testing activitystreams """ """ testing activitystreams """
from datetime import datetime, timedelta
from unittest.mock import patch from unittest.mock import patch
from django.test import TestCase from django.test import TestCase
from django.utils import timezone
from bookwyrm import activitystreams, models from bookwyrm import activitystreams, models
@ -62,6 +66,39 @@ class ActivitystreamsSignals(TestCase):
self.assertEqual(args["args"][0], status.id) self.assertEqual(args["args"][0], status.id)
self.assertEqual(args["queue"], "high_priority") self.assertEqual(args["queue"], "high_priority")
def test_add_status_on_create_created_low_priority(self, *_):
"""a new statuses has entered"""
# created later than publication
status = models.Status.objects.create(
user=self.remote_user,
content="hi",
privacy="public",
created_date=datetime(2022, 5, 16, tzinfo=timezone.utc),
published_date=datetime(2022, 5, 14, tzinfo=timezone.utc),
)
with patch("bookwyrm.activitystreams.add_status_task.apply_async") as mock:
activitystreams.add_status_on_create_command(models.Status, status, False)
self.assertEqual(mock.call_count, 1)
args = mock.call_args[1]
self.assertEqual(args["args"][0], status.id)
self.assertEqual(args["queue"], "low_priority")
# published later than yesterday
status = models.Status.objects.create(
user=self.remote_user,
content="hi",
privacy="public",
published_date=timezone.now() - timedelta(days=1),
)
with patch("bookwyrm.activitystreams.add_status_task.apply_async") as mock:
activitystreams.add_status_on_create_command(models.Status, status, False)
self.assertEqual(mock.call_count, 1)
args = mock.call_args[1]
self.assertEqual(args["args"][0], status.id)
self.assertEqual(args["queue"], "low_priority")
def test_populate_streams_on_account_create_command(self, *_): def test_populate_streams_on_account_create_command(self, *_):
"""create streams for a user""" """create streams for a user"""
with patch("bookwyrm.activitystreams.populate_stream_task.delay") as mock: with patch("bookwyrm.activitystreams.populate_stream_task.delay") as mock:

View file

@ -42,15 +42,9 @@ class AbstractConnector(TestCase):
generated_remote_link_field = "openlibrary_link" generated_remote_link_field = "openlibrary_link"
def format_search_result(self, search_result): def parse_search_data(self, data, min_confidence):
return search_result
def parse_search_data(self, data):
return data return data
def format_isbn_search_result(self, search_result):
return search_result
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
return data return data

View file

@ -1,6 +1,5 @@
""" testing book data connectors """ """ testing book data connectors """
from django.test import TestCase from django.test import TestCase
import responses
from bookwyrm import models from bookwyrm import models
from bookwyrm.connectors import abstract_connector from bookwyrm.connectors import abstract_connector
@ -25,18 +24,12 @@ class AbstractConnector(TestCase):
class TestConnector(abstract_connector.AbstractMinimalConnector): class TestConnector(abstract_connector.AbstractMinimalConnector):
"""nothing added here""" """nothing added here"""
def format_search_result(self, search_result):
return search_result
def get_or_create_book(self, remote_id): def get_or_create_book(self, remote_id):
pass pass
def parse_search_data(self, data): def parse_search_data(self, data, min_confidence):
return data return data
def format_isbn_search_result(self, search_result):
return search_result
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
return data return data
@ -54,45 +47,6 @@ class AbstractConnector(TestCase):
self.assertIsNone(connector.name) self.assertIsNone(connector.name)
self.assertEqual(connector.identifier, "example.com") 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): def test_create_mapping(self):
"""maps remote fields for book data to bookwyrm activitypub fields""" """maps remote fields for book data to bookwyrm activitypub fields"""
mapping = Mapping("isbn") mapping = Mapping("isbn")

View file

@ -30,14 +30,11 @@ class BookWyrmConnector(TestCase):
result = self.connector.get_or_create_book(book.remote_id) result = self.connector.get_or_create_book(book.remote_id)
self.assertEqual(book, result) self.assertEqual(book, result)
def test_format_search_result(self): def test_parse_search_data(self):
"""create a SearchResult object from search response json""" """create a SearchResult object from search response json"""
datafile = pathlib.Path(__file__).parent.joinpath("../data/bw_search.json") datafile = pathlib.Path(__file__).parent.joinpath("../data/bw_search.json")
search_data = json.loads(datafile.read_bytes()) search_data = json.loads(datafile.read_bytes())
results = self.connector.parse_search_data(search_data) result = list(self.connector.parse_search_data(search_data, 0))[0]
self.assertIsInstance(results, list)
result = self.connector.format_search_result(results[0])
self.assertIsInstance(result, SearchResult) self.assertIsInstance(result, SearchResult)
self.assertEqual(result.title, "Jonathan Strange and Mr Norrell") self.assertEqual(result.title, "Jonathan Strange and Mr Norrell")
self.assertEqual(result.key, "https://example.com/book/122") self.assertEqual(result.key, "https://example.com/book/122")
@ -45,10 +42,9 @@ class BookWyrmConnector(TestCase):
self.assertEqual(result.year, 2017) self.assertEqual(result.year, 2017)
self.assertEqual(result.connector, self.connector) 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""" """just gotta attach the connector"""
datafile = pathlib.Path(__file__).parent.joinpath("../data/bw_search.json") datafile = pathlib.Path(__file__).parent.joinpath("../data/bw_search.json")
search_data = json.loads(datafile.read_bytes()) search_data = json.loads(datafile.read_bytes())
results = self.connector.parse_isbn_search_data(search_data) result = list(self.connector.parse_isbn_search_data(search_data))[0]
result = self.connector.format_isbn_search_result(results[0])
self.assertEqual(result.connector, self.connector) self.assertEqual(result.connector, self.connector)

View file

@ -49,39 +49,11 @@ class ConnectorManager(TestCase):
self.assertEqual(len(connectors), 1) self.assertEqual(len(connectors), 1)
self.assertIsInstance(connectors[0], BookWyrmConnector) 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): def test_search_empty_query(self):
"""don't panic on empty queries""" """don't panic on empty queries"""
results = connector_manager.search("") results = connector_manager.search("")
self.assertEqual(results, []) 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): def test_first_search_result(self):
"""only get one search result""" """only get one search result"""
result = connector_manager.first_search_result("Example") result = connector_manager.first_search_result("Example")

View file

@ -66,38 +66,14 @@ class Inventaire(TestCase):
with self.assertRaises(ConnectorException): with self.assertRaises(ConnectorException):
self.connector.get_book_data("https://test.url/ok") self.connector.get_book_data("https://test.url/ok")
@responses.activate def test_parse_search_data(self):
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):
"""json to search result objs""" """json to search result objs"""
search_file = pathlib.Path(__file__).parent.joinpath( search_file = pathlib.Path(__file__).parent.joinpath(
"../data/inventaire_search.json" "../data/inventaire_search.json"
) )
search_results = json.loads(search_file.read_bytes()) search_results = json.loads(search_file.read_bytes())
results = self.connector.parse_search_data(search_results) formatted = list(self.connector.parse_search_data(search_results, 0))[0]
formatted = self.connector.format_search_result(results[0])
self.assertEqual(formatted.title, "The Stories of Vladimir Nabokov") self.assertEqual(formatted.title, "The Stories of Vladimir Nabokov")
self.assertEqual( self.assertEqual(
@ -178,15 +154,14 @@ class Inventaire(TestCase):
result = self.connector.resolve_keys(keys) result = self.connector.resolve_keys(keys)
self.assertEqual(result, ["epistolary novel", "crime novel"]) self.assertEqual(result, ["epistolary novel", "crime novel"])
def test_isbn_search(self): def test_pase_isbn_search_data(self):
"""another search type""" """another search type"""
search_file = pathlib.Path(__file__).parent.joinpath( search_file = pathlib.Path(__file__).parent.joinpath(
"../data/inventaire_isbn_search.json" "../data/inventaire_isbn_search.json"
) )
search_results = json.loads(search_file.read_bytes()) search_results = json.loads(search_file.read_bytes())
results = self.connector.parse_isbn_search_data(search_results) formatted = list(self.connector.parse_isbn_search_data(search_results))[0]
formatted = self.connector.format_isbn_search_result(results[0])
self.assertEqual(formatted.title, "L'homme aux cercles bleus") self.assertEqual(formatted.title, "L'homme aux cercles bleus")
self.assertEqual( self.assertEqual(
@ -198,25 +173,12 @@ class Inventaire(TestCase):
"https://covers.inventaire.io/img/entities/12345", "https://covers.inventaire.io/img/entities/12345",
) )
def test_isbn_search_empty(self): def test_parse_isbn_search_data_empty(self):
"""another search type""" """another search type"""
search_results = {} search_results = {}
results = self.connector.parse_isbn_search_data(search_results) results = list(self.connector.parse_isbn_search_data(search_results))
self.assertEqual(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): def test_is_work_data(self):
"""is it a work""" """is it a work"""
work_file = pathlib.Path(__file__).parent.joinpath( work_file = pathlib.Path(__file__).parent.joinpath(

View file

@ -122,21 +122,11 @@ class Openlibrary(TestCase):
self.assertEqual(result, "https://covers.openlibrary.org/b/id/image-L.jpg") self.assertEqual(result, "https://covers.openlibrary.org/b/id/image-L.jpg")
def test_parse_search_result(self): 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""" """translate json from openlibrary into SearchResult"""
datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_search.json") datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_search.json")
search_data = json.loads(datafile.read_bytes()) search_data = json.loads(datafile.read_bytes())
results = self.connector.parse_search_data(search_data) result = list(self.connector.parse_search_data(search_data, 0))[0]
self.assertIsInstance(results, list)
result = self.connector.format_search_result(results[0])
self.assertIsInstance(result, SearchResult) self.assertIsInstance(result, SearchResult)
self.assertEqual(result.title, "This Is How You Lose the Time War") self.assertEqual(result.title, "This Is How You Lose the Time War")
self.assertEqual(result.key, "https://openlibrary.org/works/OL20639540W") self.assertEqual(result.key, "https://openlibrary.org/works/OL20639540W")
@ -148,18 +138,10 @@ class Openlibrary(TestCase):
"""extract the results from the search json response""" """extract the results from the search json response"""
datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_isbn_search.json") datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_isbn_search.json")
search_data = json.loads(datafile.read_bytes()) search_data = json.loads(datafile.read_bytes())
result = self.connector.parse_isbn_search_data(search_data) result = list(self.connector.parse_isbn_search_data(search_data))
self.assertIsInstance(result, list)
self.assertEqual(len(result), 1) self.assertEqual(len(result), 1)
def test_format_isbn_search_result(self): result = result[0]
"""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])
self.assertIsInstance(result, SearchResult) self.assertIsInstance(result, SearchResult)
self.assertEqual(result.title, "Les ombres errantes") self.assertEqual(result.title, "Les ombres errantes")
self.assertEqual(result.key, "https://openlibrary.org/books/OL16262504M") self.assertEqual(result.key, "https://openlibrary.org/books/OL16262504M")
@ -229,7 +211,7 @@ class Openlibrary(TestCase):
status=200, status=200,
) )
with patch( with patch(
"bookwyrm.connectors.openlibrary.Connector." "get_authors_from_data" "bookwyrm.connectors.openlibrary.Connector.get_authors_from_data"
) as mock: ) as mock:
mock.return_value = [] mock.return_value = []
result = self.connector.create_edition_from_data(work, self.edition_data) result = self.connector.create_edition_from_data(work, self.edition_data)

View file

@ -0,0 +1,2 @@
authors,author_sort,rating,library_name,timestamp,formats,size,isbn,identifiers,comments,tags,series,series_index,languages,title,cover,title_sort,publisher,pubdate,id,uuid
"Seanan McGuire","McGuire, Seanan","5","Bücher","2021-01-19T22:41:16+01:00","epub, original_epub","1433809","9780756411800","goodreads:39077187,isbn:9780756411800","REPLACED COMMENTS (BOOK DESCRIPTION) BECAUSE IT IS REALLY LONG.","Cryptids, Fantasy, Romance, Magic","InCryptid","8.0","eng","That Ain't Witchcraft","/home/tastytea/Bücher/Seanan McGuire/That Ain't Witchcraft (864)/cover.jpg","That Ain't Witchcraft","Daw Books","2019-03-05T01:00:00+01:00","864","3051ed45-8943-4900-a22a-d2704e3583df"
1 authors author_sort rating library_name timestamp formats size isbn identifiers comments tags series series_index languages title cover title_sort publisher pubdate id uuid
2 Seanan McGuire McGuire, Seanan 5 Bücher 2021-01-19T22:41:16+01:00 epub, original_epub 1433809 9780756411800 goodreads:39077187,isbn:9780756411800 REPLACED COMMENTS (BOOK DESCRIPTION) BECAUSE IT IS REALLY LONG. Cryptids, Fantasy, Romance, Magic InCryptid 8.0 eng That Ain't Witchcraft /home/tastytea/Bücher/Seanan McGuire/That Ain't Witchcraft (864)/cover.jpg That Ain't Witchcraft Daw Books 2019-03-05T01:00:00+01:00 864 3051ed45-8943-4900-a22a-d2704e3583df

View file

@ -0,0 +1,71 @@
""" testing import """
import pathlib
from unittest.mock import patch
from django.test import TestCase
from bookwyrm import models
from bookwyrm.importers import CalibreImporter
from bookwyrm.importers.importer import handle_imported_book
# pylint: disable=consider-using-with
@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay")
@patch("bookwyrm.activitystreams.populate_stream_task.delay")
@patch("bookwyrm.activitystreams.add_book_statuses_task.delay")
class CalibreImport(TestCase):
"""importing from Calibre csv"""
def setUp(self):
"""use a test csv"""
self.importer = CalibreImporter()
datafile = pathlib.Path(__file__).parent.joinpath("../data/calibre.csv")
self.csv = open(datafile, "r", encoding=self.importer.encoding)
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", "password", local=True
)
work = models.Work.objects.create(title="Test Work")
self.book = models.Edition.objects.create(
title="Example Edition",
remote_id="https://example.com/book/1",
parent_work=work,
)
def test_create_job(self, *_):
"""creates the import job entry and checks csv"""
import_job = self.importer.create_job(
self.local_user, self.csv, False, "public"
)
import_items = (
models.ImportItem.objects.filter(job=import_job).order_by("index").all()
)
self.assertEqual(len(import_items), 1)
self.assertEqual(import_items[0].index, 0)
self.assertEqual(
import_items[0].normalized_data["title"], "That Ain't Witchcraft"
)
def test_handle_imported_book(self, *_):
"""calibre import added a book, this adds related connections"""
shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.TO_READ
).first()
self.assertIsNone(shelf.books.first())
import_job = self.importer.create_job(
self.local_user, self.csv, False, "public"
)
import_item = import_job.items.first()
import_item.book = self.book
import_item.save()
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"):
handle_imported_book(import_item)
shelf.refresh_from_db()
self.assertEqual(shelf.books.first(), self.book)

View file

@ -84,7 +84,9 @@ class GoodreadsImport(TestCase):
def test_handle_imported_book(self, *_): def test_handle_imported_book(self, *_):
"""goodreads import added a book, this adds related connections""" """goodreads import added a book, this adds related connections"""
shelf = self.local_user.shelf_set.filter(identifier="read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.READ_FINISHED
).first()
self.assertIsNone(shelf.books.first()) self.assertIsNone(shelf.books.first())
import_job = self.importer.create_job( import_job = self.importer.create_job(

View file

@ -174,7 +174,9 @@ class GenericImporter(TestCase):
def test_handle_imported_book(self, *_): def test_handle_imported_book(self, *_):
"""import added a book, this adds related connections""" """import added a book, this adds related connections"""
shelf = self.local_user.shelf_set.filter(identifier="read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.READ_FINISHED
).first()
self.assertIsNone(shelf.books.first()) self.assertIsNone(shelf.books.first())
import_job = self.importer.create_job( import_job = self.importer.create_job(
@ -193,7 +195,9 @@ class GenericImporter(TestCase):
def test_handle_imported_book_already_shelved(self, *_): def test_handle_imported_book_already_shelved(self, *_):
"""import added a book, this adds related connections""" """import added a book, this adds related connections"""
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"):
shelf = self.local_user.shelf_set.filter(identifier="to-read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.TO_READ
).first()
models.ShelfBook.objects.create( models.ShelfBook.objects.create(
shelf=shelf, shelf=shelf,
user=self.local_user, user=self.local_user,
@ -217,12 +221,16 @@ class GenericImporter(TestCase):
shelf.shelfbook_set.first().shelved_date, make_date(2020, 2, 2) shelf.shelfbook_set.first().shelved_date, make_date(2020, 2, 2)
) )
self.assertIsNone( self.assertIsNone(
self.local_user.shelf_set.get(identifier="read").books.first() self.local_user.shelf_set.get(
identifier=models.Shelf.READ_FINISHED
).books.first()
) )
def test_handle_import_twice(self, *_): def test_handle_import_twice(self, *_):
"""re-importing books""" """re-importing books"""
shelf = self.local_user.shelf_set.filter(identifier="read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.READ_FINISHED
).first()
import_job = self.importer.create_job( import_job = self.importer.create_job(
self.local_user, self.csv, False, "public" self.local_user, self.csv, False, "public"
) )

View file

@ -93,7 +93,9 @@ class LibrarythingImport(TestCase):
def test_handle_imported_book(self, *_): def test_handle_imported_book(self, *_):
"""librarything import added a book, this adds related connections""" """librarything import added a book, this adds related connections"""
shelf = self.local_user.shelf_set.filter(identifier="read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.READ_FINISHED
).first()
self.assertIsNone(shelf.books.first()) self.assertIsNone(shelf.books.first())
import_job = self.importer.create_job( import_job = self.importer.create_job(
@ -117,7 +119,9 @@ class LibrarythingImport(TestCase):
def test_handle_imported_book_already_shelved(self, *_): def test_handle_imported_book_already_shelved(self, *_):
"""librarything import added a book, this adds related connections""" """librarything import added a book, this adds related connections"""
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"):
shelf = self.local_user.shelf_set.filter(identifier="to-read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.TO_READ
).first()
models.ShelfBook.objects.create( models.ShelfBook.objects.create(
shelf=shelf, user=self.local_user, book=self.book shelf=shelf, user=self.local_user, book=self.book
) )
@ -135,7 +139,9 @@ class LibrarythingImport(TestCase):
shelf.refresh_from_db() shelf.refresh_from_db()
self.assertEqual(shelf.books.first(), self.book) self.assertEqual(shelf.books.first(), self.book)
self.assertIsNone( self.assertIsNone(
self.local_user.shelf_set.get(identifier="read").books.first() self.local_user.shelf_set.get(
identifier=models.Shelf.READ_FINISHED
).books.first()
) )
readthrough = models.ReadThrough.objects.get(user=self.local_user) readthrough = models.ReadThrough.objects.get(user=self.local_user)

View file

@ -70,7 +70,9 @@ class OpenLibraryImport(TestCase):
def test_handle_imported_book(self, *_): def test_handle_imported_book(self, *_):
"""openlibrary import added a book, this adds related connections""" """openlibrary import added a book, this adds related connections"""
shelf = self.local_user.shelf_set.filter(identifier="reading").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.READING
).first()
self.assertIsNone(shelf.books.first()) self.assertIsNone(shelf.books.first())
import_job = self.importer.create_job( import_job = self.importer.create_job(

View file

@ -62,7 +62,9 @@ class StorygraphImport(TestCase):
def test_handle_imported_book(self, *_): def test_handle_imported_book(self, *_):
"""storygraph import added a book, this adds related connections""" """storygraph import added a book, this adds related connections"""
shelf = self.local_user.shelf_set.filter(identifier="to-read").first() shelf = self.local_user.shelf_set.filter(
identifier=models.Shelf.TO_READ
).first()
self.assertIsNone(shelf.books.first()) self.assertIsNone(shelf.books.first())
import_job = self.importer.create_job( import_job = self.importer.create_job(

View file

@ -195,7 +195,7 @@ class ImportJob(TestCase):
) as search: ) as search:
search.return_value = result search.return_value = result
with patch( with patch(
"bookwyrm.connectors.openlibrary.Connector." "get_authors_from_data" "bookwyrm.connectors.openlibrary.Connector.get_authors_from_data"
): ):
book = item.get_book_from_identifier() book = item.get_book_from_identifier()

View file

@ -462,6 +462,8 @@ class Status(TestCase):
@responses.activate @responses.activate
def test_ignore_activity_boost(self, *_): def test_ignore_activity_boost(self, *_):
"""don't bother with most remote statuses""" """don't bother with most remote statuses"""
responses.add(responses.GET, "http://fish.com/nothing")
activity = activitypub.Announce( activity = activitypub.Announce(
id="http://www.faraway.com/boost/12", id="http://www.faraway.com/boost/12",
actor=self.remote_user.remote_id, actor=self.remote_user.remote_id,

View file

@ -53,15 +53,17 @@ class User(TestCase):
def test_user_shelves(self): def test_user_shelves(self):
shelves = models.Shelf.objects.filter(user=self.user).all() shelves = models.Shelf.objects.filter(user=self.user).all()
self.assertEqual(len(shelves), 3) self.assertEqual(len(shelves), 4)
names = [s.name for s in shelves] names = [s.name for s in shelves]
self.assertTrue("To Read" in names) self.assertTrue("To Read" in names)
self.assertTrue("Currently Reading" in names) self.assertTrue("Currently Reading" in names)
self.assertTrue("Read" in names) self.assertTrue("Read" in names)
self.assertTrue("Stopped Reading" in names)
ids = [s.identifier for s in shelves] ids = [s.identifier for s in shelves]
self.assertTrue("to-read" in ids) self.assertTrue("to-read" in ids)
self.assertTrue("reading" in ids) self.assertTrue("reading" in ids)
self.assertTrue("read" in ids) self.assertTrue("read" in ids)
self.assertTrue("stopped-reading" in ids)
def test_activitypub_serialize(self): def test_activitypub_serialize(self):
activity = self.user.to_activity() activity = self.user.to_activity()

View file

@ -40,7 +40,8 @@ class RatingTags(TestCase):
@patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async")
def test_get_rating(self, *_): 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 # follows-only: not included
models.ReviewRating.objects.create( models.ReviewRating.objects.create(
user=self.remote_user, user=self.remote_user,
@ -48,7 +49,8 @@ class RatingTags(TestCase):
book=self.book, book=self.book,
privacy="followers", 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 # public: included
models.ReviewRating.objects.create( models.ReviewRating.objects.create(

View file

@ -102,18 +102,12 @@ class BookSearch(TestCase):
class TestConnector(AbstractMinimalConnector): class TestConnector(AbstractMinimalConnector):
"""nothing added here""" """nothing added here"""
def format_search_result(self, search_result):
return search_result
def get_or_create_book(self, remote_id): def get_or_create_book(self, remote_id):
pass pass
def parse_search_data(self, data): def parse_search_data(self, data, min_confidence):
return data return data
def format_isbn_search_result(self, search_result):
return search_result
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
return data return data

View file

@ -9,6 +9,7 @@ from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
from bookwyrm import forms, models, views from bookwyrm import forms, models, views
from bookwyrm.views.books.edit_book import add_authors
from bookwyrm.tests.validate_html import validate_html from bookwyrm.tests.validate_html import validate_html
from bookwyrm.tests.views.books.test_book import _setup_cover_url from bookwyrm.tests.views.books.test_book import _setup_cover_url
@ -214,3 +215,22 @@ class EditBookViews(TestCase):
self.book.refresh_from_db() self.book.refresh_from_db()
self.assertTrue(self.book.cover) self.assertTrue(self.book.cover)
def test_add_authors_helper(self):
"""converts form input into author matches"""
form = forms.EditionForm(instance=self.book)
form.data["title"] = "New Title"
form.data["last_edited_by"] = self.local_user.id
form.data["add_author"] = ["Sappho", "Some Guy"]
request = self.factory.post("", form.data)
request.user = self.local_user
with patch("bookwyrm.utils.isni.find_authors_by_name") as mock:
mock.return_value = []
result = add_authors(request, form.data)
self.assertTrue(result["confirm_mode"])
self.assertEqual(result["add_author"], ["Sappho", "Some Guy"])
self.assertEqual(len(result["author_matches"]), 2)
self.assertEqual(result["author_matches"][0]["name"], "Sappho")
self.assertEqual(result["author_matches"][1]["name"], "Some Guy")

View file

@ -208,16 +208,44 @@ class InboxCreate(TestCase):
self.assertEqual(book_list.description, "summary text") self.assertEqual(book_list.description, "summary text")
self.assertEqual(book_list.remote_id, "https://example.com/list/22") self.assertEqual(book_list.remote_id, "https://example.com/list/22")
def test_create_unsupported_type(self, *_): def test_create_unsupported_type_question(self, *_):
"""ignore activities we know we can't handle""" """ignore activities we know we can't handle"""
activity = self.create_json activity = self.create_json
activity["object"] = { activity["object"] = {
"id": "https://example.com/status/887", "id": "https://example.com/status/887",
"type": "Question", "type": "Question",
} }
# just observer how it doesn't throw an error # just observe how it doesn't throw an error
views.inbox.activity_task(activity) views.inbox.activity_task(activity)
def test_create_unsupported_type_article(self, *_):
"""special case in unsupported type because we do know what it is"""
activity = self.create_json
activity["object"] = {
"id": "https://example.com/status/887",
"type": "Article",
"name": "hello",
"published": "2021-04-29T21:27:30.014235+00:00",
"attributedTo": "https://example.com/user/mouse",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://example.com/user/mouse/followers"],
"sensitive": False,
"@context": "https://www.w3.org/ns/activitystreams",
}
# just observe how it doesn't throw an error
views.inbox.activity_task(activity)
def test_create_unsupported_type_unknown(self, *_):
"""Something truly unexpected should throw an error"""
activity = self.create_json
activity["object"] = {
"id": "https://example.com/status/887",
"type": "Blaaaah",
}
# error this time
with self.assertRaises(ActivitySerializerError):
views.inbox.activity_task(activity)
def test_create_unknown_type(self, *_): def test_create_unknown_type(self, *_):
"""ignore activities we know we've never heard of""" """ignore activities we know we've never heard of"""
activity = self.create_json activity = self.create_json

View file

@ -1,6 +1,5 @@
""" test for app action functionality """ """ test for app action functionality """
import json import json
import pathlib
from unittest.mock import patch from unittest.mock import patch
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
@ -8,9 +7,9 @@ from django.http import JsonResponse
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
import responses
from bookwyrm import models, views from bookwyrm import models, views
from bookwyrm.book_search import SearchResult
from bookwyrm.settings import DOMAIN from bookwyrm.settings import DOMAIN
from bookwyrm.tests.validate_html import validate_html from bookwyrm.tests.validate_html import validate_html
@ -65,12 +64,11 @@ class Views(TestCase):
self.assertIsInstance(response, TemplateResponse) self.assertIsInstance(response, TemplateResponse)
validate_html(response.render()) validate_html(response.render())
@responses.activate
def test_search_books(self): def test_search_books(self):
"""searches remote connectors""" """searches remote connectors"""
view = views.Search.as_view() view = views.Search.as_view()
models.Connector.objects.create( connector = models.Connector.objects.create(
identifier="example.com", identifier="example.com",
connector_file="openlibrary", connector_file="openlibrary",
base_url="https://example.com", base_url="https://example.com",
@ -78,26 +76,24 @@ class Views(TestCase):
covers_url="https://example.com/covers", covers_url="https://example.com/covers",
search_url="https://example.com/search?q=", search_url="https://example.com/search?q=",
) )
datafile = pathlib.Path(__file__).parent.joinpath("../data/ol_search.json") mock_result = SearchResult(title="Mock Book", connector=connector, key="hello")
search_data = json.loads(datafile.read_bytes())
responses.add(
responses.GET, "https://example.com/search?q=Test%20Book", json=search_data
)
request = self.factory.get("", {"q": "Test Book", "remote": True}) request = self.factory.get("", {"q": "Test Book", "remote": True})
request.user = self.local_user request.user = self.local_user
with patch("bookwyrm.views.search.is_api_request") as is_api: with patch("bookwyrm.views.search.is_api_request") as is_api:
is_api.return_value = False 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) self.assertIsInstance(response, TemplateResponse)
validate_html(response.render()) validate_html(response.render())
connector_results = response.context_data["results"] connector_results = response.context_data["results"]
self.assertEqual(len(connector_results), 2) self.assertEqual(len(connector_results), 2)
self.assertEqual(connector_results[0]["results"][0].title, "Test Book") self.assertEqual(connector_results[0]["results"][0].title, "Test Book")
self.assertEqual( self.assertEqual(connector_results[1]["results"][0].title, "Mock Book")
connector_results[1]["results"][0].title,
"This Is How You Lose the Time War",
)
# don't search remote # don't search remote
request = self.factory.get("", {"q": "Test Book", "remote": True}) request = self.factory.get("", {"q": "Test Book", "remote": True})
@ -106,7 +102,11 @@ class Views(TestCase):
request.user = anonymous_user request.user = anonymous_user
with patch("bookwyrm.views.search.is_api_request") as is_api: with patch("bookwyrm.views.search.is_api_request") as is_api:
is_api.return_value = False 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) self.assertIsInstance(response, TemplateResponse)
validate_html(response.render()) validate_html(response.render())
connector_results = response.context_data["results"] connector_results = response.context_data["results"]

View file

@ -281,7 +281,7 @@ http://www.fish.com/"""
result = views.status.to_markdown(text) result = views.status.to_markdown(text)
self.assertEqual( self.assertEqual(
result, result,
'<p><em>hi</em> and <a href="http://fish.com">fish.com</a> ' "is rad</p>", '<p><em>hi</em> and <a href="http://fish.com">fish.com</a> is rad</p>',
) )
def test_to_markdown_detect_url(self, *_): def test_to_markdown_detect_url(self, *_):
@ -297,7 +297,7 @@ http://www.fish.com/"""
"""this is mostly handled in other places, but nonetheless""" """this is mostly handled in other places, but nonetheless"""
text = "[hi](http://fish.com) is <marquee>rad</marquee>" text = "[hi](http://fish.com) is <marquee>rad</marquee>"
result = views.status.to_markdown(text) result = views.status.to_markdown(text)
self.assertEqual(result, '<p><a href="http://fish.com">hi</a> ' "is rad</p>") self.assertEqual(result, '<p><a href="http://fish.com">hi</a> is rad</p>')
def test_delete_status(self, mock, *_): def test_delete_status(self, mock, *_):
"""marks a status as deleted""" """marks a status as deleted"""

View file

@ -537,12 +537,20 @@ urlpatterns = [
name="book-user-statuses", name="book-user-statuses",
), ),
re_path(rf"{BOOK_PATH}/edit/?$", views.EditBook.as_view(), name="edit-book"), re_path(rf"{BOOK_PATH}/edit/?$", views.EditBook.as_view(), name="edit-book"),
re_path(rf"{BOOK_PATH}/confirm/?$", views.ConfirmEditBook.as_view()), re_path(
rf"{BOOK_PATH}/confirm/?$",
views.ConfirmEditBook.as_view(),
name="edit-book-confirm",
),
re_path( re_path(
r"^create-book/data/?$", views.create_book_from_data, name="create-book-data" r"^create-book/data/?$", views.create_book_from_data, name="create-book-data"
), ),
re_path(r"^create-book/?$", views.CreateBook.as_view(), name="create-book"), re_path(r"^create-book/?$", views.CreateBook.as_view(), name="create-book"),
re_path(r"^create-book/confirm/?$", views.ConfirmEditBook.as_view()), re_path(
r"^create-book/confirm/?$",
views.ConfirmEditBook.as_view(),
name="create-book-confirm",
),
re_path(rf"{BOOK_PATH}/editions(.json)?/?$", views.Editions.as_view()), re_path(rf"{BOOK_PATH}/editions(.json)?/?$", views.Editions.as_view()),
re_path( re_path(
r"^upload-cover/(?P<book_id>\d+)/?$", views.upload_cover, name="upload-cover" r"^upload-cover/(?P<book_id>\d+)/?$", views.upload_cover, name="upload-cover"
@ -614,7 +622,7 @@ urlpatterns = [
name="reading-status-update", name="reading-status-update",
), ),
re_path( re_path(
r"^reading-status/(?P<status>want|start|finish)/(?P<book_id>\d+)/?$", r"^reading-status/(?P<status>want|start|finish|stop)/(?P<book_id>\d+)/?$",
views.ReadingStatus.as_view(), views.ReadingStatus.as_view(),
name="reading-status", name="reading-status",
), ),

View file

@ -115,6 +115,7 @@ class CreateBook(View):
# go to confirm mode # go to confirm mode
if not parent_work_id or data.get("add_author"): if not parent_work_id or data.get("add_author"):
data["confirm_mode"] = True
return TemplateResponse(request, "book/edit/edit_book.html", data) return TemplateResponse(request, "book/edit/edit_book.html", data)
with transaction.atomic(): with transaction.atomic():
@ -189,7 +190,7 @@ def add_authors(request, data):
"existing_isnis": exists, "existing_isnis": exists,
} }
) )
return data return data
@require_POST @require_POST

View file

@ -138,6 +138,7 @@ def handle_reading_status(user, shelf, book, privacy):
"to-read": "wants to read", "to-read": "wants to read",
"reading": "started reading", "reading": "started reading",
"read": "finished reading", "read": "finished reading",
"stopped-reading": "stopped reading",
}[shelf.identifier] }[shelf.identifier]
except KeyError: except KeyError:
# it's a non-standard shelf, don't worry about it # it's a non-standard shelf, don't worry about it

View file

@ -11,6 +11,7 @@ from django.views import View
from bookwyrm import forms, models from bookwyrm import forms, models
from bookwyrm.importers import ( from bookwyrm.importers import (
CalibreImporter,
LibrarythingImporter, LibrarythingImporter,
GoodreadsImporter, GoodreadsImporter,
StorygraphImporter, StorygraphImporter,
@ -52,6 +53,8 @@ class Import(View):
importer = StorygraphImporter() importer = StorygraphImporter()
elif source == "OpenLibrary": elif source == "OpenLibrary":
importer = OpenLibraryImporter() importer = OpenLibraryImporter()
elif source == "Calibre":
importer = CalibreImporter()
else: else:
# Default : Goodreads # Default : Goodreads
importer = GoodreadsImporter() importer = GoodreadsImporter()

View file

@ -1,4 +1,5 @@
""" the good stuff! the books! """ """ the good stuff! the books! """
import logging
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.cache import cache from django.core.cache import cache
from django.db import transaction from django.db import transaction
@ -15,6 +16,8 @@ from .status import CreateStatus
from .helpers import get_edition, handle_reading_status, is_api_request from .helpers import get_edition, handle_reading_status, is_api_request
from .helpers import load_date_in_user_tz_as_utc from .helpers import load_date_in_user_tz_as_utc
logger = logging.getLogger(__name__)
# pylint: disable=no-self-use # pylint: disable=no-self-use
# pylint: disable=too-many-return-statements # pylint: disable=too-many-return-statements
@ -29,20 +32,24 @@ class ReadingStatus(View):
"want": "want.html", "want": "want.html",
"start": "start.html", "start": "start.html",
"finish": "finish.html", "finish": "finish.html",
"stop": "stop.html",
}.get(status) }.get(status)
if not template: if not template:
return HttpResponseNotFound() return HttpResponseNotFound()
# redirect if we're already on this shelf # redirect if we're already on this shelf
return TemplateResponse(request, f"reading_progress/{template}", {"book": book}) return TemplateResponse(request, f"reading_progress/{template}", {"book": book})
@transaction.atomic
def post(self, request, status, book_id): def post(self, request, status, book_id):
"""Change the state of a book by shelving it and adding reading dates""" """Change the state of a book by shelving it and adding reading dates"""
identifier = { identifier = {
"want": models.Shelf.TO_READ, "want": models.Shelf.TO_READ,
"start": models.Shelf.READING, "start": models.Shelf.READING,
"finish": models.Shelf.READ_FINISHED, "finish": models.Shelf.READ_FINISHED,
"stop": models.Shelf.STOPPED_READING,
}.get(status) }.get(status)
if not identifier: if not identifier:
logger.exception("Invalid reading status type: %s", status)
return HttpResponseBadRequest() return HttpResponseBadRequest()
# invalidate related caches # invalidate related caches
@ -85,6 +92,7 @@ class ReadingStatus(View):
desired_shelf.identifier, desired_shelf.identifier,
start_date=request.POST.get("start_date"), start_date=request.POST.get("start_date"),
finish_date=request.POST.get("finish_date"), finish_date=request.POST.get("finish_date"),
stopped_date=request.POST.get("stopped_date"),
) )
# post about it (if you want) # post about it (if you want)
@ -153,8 +161,9 @@ class ReadThrough(View):
@transaction.atomic @transaction.atomic
# pylint: disable=too-many-arguments
def update_readthrough_on_shelve( def update_readthrough_on_shelve(
user, annotated_book, status, start_date=None, finish_date=None user, annotated_book, status, start_date=None, finish_date=None, stopped_date=None
): ):
"""update the current readthrough for a book when it is re-shelved""" """update the current readthrough for a book when it is re-shelved"""
# there *should* only be one of current active readthrough, but it's a list # there *should* only be one of current active readthrough, but it's a list
@ -176,8 +185,9 @@ def update_readthrough_on_shelve(
) )
# santiize and set dates # santiize and set dates
active_readthrough.start_date = load_date_in_user_tz_as_utc(start_date, user) active_readthrough.start_date = load_date_in_user_tz_as_utc(start_date, user)
# if the finish date is set, the readthrough will be automatically set as inactive # if the stop or finish date is set, the readthrough will be set as inactive
active_readthrough.finish_date = load_date_in_user_tz_as_utc(finish_date, user) active_readthrough.finish_date = load_date_in_user_tz_as_utc(finish_date, user)
active_readthrough.stopped_date = load_date_in_user_tz_as_utc(stopped_date, user)
active_readthrough.save() active_readthrough.save()

View file

@ -1,5 +1,6 @@
""" what are we here for if not for posting """ """ what are we here for if not for posting """
import re import re
import logging
from urllib.parse import urlparse from urllib.parse import urlparse
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -21,6 +22,8 @@ from bookwyrm.utils import regex
from .helpers import handle_remote_webfinger, is_api_request from .helpers import handle_remote_webfinger, is_api_request
from .helpers import load_date_in_user_tz_as_utc from .helpers import load_date_in_user_tz_as_utc
logger = logging.getLogger(__name__)
# pylint: disable= no-self-use # pylint: disable= no-self-use
@method_decorator(login_required, name="dispatch") @method_decorator(login_required, name="dispatch")
@ -72,11 +75,14 @@ class CreateStatus(View):
form = getattr(forms, f"{status_type}Form")( form = getattr(forms, f"{status_type}Form")(
request.POST, instance=existing_status request.POST, instance=existing_status
) )
except AttributeError: except AttributeError as err:
logger.exception(err)
return HttpResponseBadRequest() return HttpResponseBadRequest()
if not form.is_valid(): if not form.is_valid():
if is_api_request(request): if is_api_request(request):
return HttpResponse(status=500) logger.exception(form.errors)
return HttpResponseBadRequest()
return redirect(request.headers.get("Referer", "/")) return redirect(request.headers.get("Referer", "/"))
status = form.save(commit=False) status = form.save(commit=False)

View file

@ -106,7 +106,7 @@ class Followers(View):
if is_api_request(request): if is_api_request(request):
return ActivitypubResponse(user.to_followers_activity(**request.GET)) return ActivitypubResponse(user.to_followers_activity(**request.GET))
if user.hide_follows: if user.hide_follows and user != request.user:
raise PermissionDenied() raise PermissionDenied()
followers = annotate_if_follows(request.user, user.followers) followers = annotate_if_follows(request.user, user.followers)
@ -129,7 +129,7 @@ class Following(View):
if is_api_request(request): if is_api_request(request):
return ActivitypubResponse(user.to_following_activity(**request.GET)) return ActivitypubResponse(user.to_following_activity(**request.GET))
if user.hide_follows: if user.hide_follows and user != request.user:
raise PermissionDenied() raise PermissionDenied()
following = annotate_if_follows(request.user, user.following) following = annotate_if_follows(request.user, user.following)

5
bw-dev
View file

@ -140,6 +140,10 @@ case "$CMD" in
black) black)
docker-compose run --rm dev-tools black celerywyrm bookwyrm 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) prettier)
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
;; ;;
@ -149,6 +153,7 @@ case "$CMD" in
--config dev-tools/.stylelintrc.js --config dev-tools/.stylelintrc.js
;; ;;
formatters) formatters)
runweb pylint bookwyrm/
docker-compose run --rm dev-tools black celerywyrm 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 prettier --write bookwyrm/static/js/*.js
docker-compose run --rm dev-tools npx stylelint \ docker-compose run --rm dev-tools npx stylelint \

View file

@ -1 +1 @@
black==22.1.0 black==22.3.0

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-30 13:02\n" "PO-Revision-Date: 2022-06-19 10:11\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: German\n" "Language-Team: German\n"
"Language: de\n" "Language: de\n"
@ -46,6 +46,10 @@ msgstr "Unbegrenzt"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "Enddatum darf nicht vor dem Startdatum liegen." msgstr "Enddatum darf nicht vor dem Startdatum liegen."
#: bookwyrm/forms/forms.py:59
msgid "Reading stopped date cannot be before start date."
msgstr ""
#: bookwyrm/forms/landing.py:32 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Ein Benutzer mit diesem Benutzernamen existiert bereits" msgstr "Ein Benutzer mit diesem Benutzernamen existiert bereits"
@ -70,8 +74,8 @@ msgstr "Reihenfolge der Liste"
msgid "Book Title" msgid "Book Title"
msgstr "Buchtitel" msgstr "Buchtitel"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Bewertung" msgstr "Bewertung"
@ -121,25 +125,25 @@ msgstr "Gefahr"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Automatisch generierter Report" msgstr "Automatisch generierter Report"
#: 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "Ausstehend" msgstr "Ausstehend"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Selbstlöschung" msgstr "Selbstlöschung"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Moderator*in suspendieren" msgstr "Moderator*in suspendieren"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Moderator*in löschen" msgstr "Moderator*in löschen"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Domainsperrung" msgstr "Domainsperrung"
@ -238,7 +242,7 @@ msgstr "Käuflich erhältlich"
#: bookwyrm/models/link.py:53 #: bookwyrm/models/link.py:53
msgid "Available for loan" msgid "Available for loan"
msgstr "Zum Liehen erhältlich" msgstr "Zum Ausleihen erhältlich"
#: bookwyrm/models/link.py:70 #: bookwyrm/models/link.py:70
#: bookwyrm/templates/settings/link_domains/link_domains.html:23 #: 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 #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
msgid "Reviews" msgid "Reviews"
msgstr "Besprechungen" msgstr "Rezensionen"
#: bookwyrm/models/user.py:33 #: bookwyrm/models/user.py:33
msgid "Comments" msgid "Comments"
@ -396,7 +400,7 @@ msgstr "Verfolge deine Lektüre, sprich über Bücher, schreibe Besprechungen un
#: bookwyrm/templates/about/about.html:98 #: bookwyrm/templates/about/about.html:98
msgid "Meet your admins" msgid "Meet your admins"
msgstr "Lerne deinen Admins kennen" msgstr "Lerne deine Admins kennen"
#: bookwyrm/templates/about/about.html:101 #: bookwyrm/templates/about/about.html:101
#, python-format #, python-format
@ -426,7 +430,7 @@ msgstr "Verhaltenskodex"
#: bookwyrm/templates/about/layout.html:11 #: bookwyrm/templates/about/layout.html:11
msgid "Active users:" msgid "Active users:"
msgstr "Aktive Benutzer*innen:" msgstr "Aktive Nutzer*innen:"
#: bookwyrm/templates/about/layout.html:15 #: bookwyrm/templates/about/layout.html:15
msgid "Statuses posted:" msgid "Statuses posted:"
@ -734,7 +738,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Speichern"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Das Laden von Daten wird eine Verbindung zu <strong>%(source_name)s</strong> aufbauen und überprüfen, ob Autor*in-Informationen vorliegen, die hier noch nicht bekannt sind. Bestehende Informationen werden nicht überschrieben." msgstr "Das Laden von Daten wird eine Verbindung zu <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -806,7 +810,7 @@ msgstr "Fehler beim Laden des Titelbilds"
#: bookwyrm/templates/book/book.html:108 #: bookwyrm/templates/book/book.html:108
msgid "Click to enlarge" msgid "Click to enlarge"
msgstr "Zum vergrößern anklicken" msgstr "Zum Vergrößern anklicken"
#: bookwyrm/templates/book/book.html:179 #: bookwyrm/templates/book/book.html:179
#, python-format #, python-format
@ -829,7 +833,7 @@ msgstr "Beschreibung:"
#, python-format #, python-format
msgid "%(count)s edition" msgid "%(count)s edition"
msgid_plural "%(count)s editions" msgid_plural "%(count)s editions"
msgstr[0] "" msgstr[0] "%(count)s Auflage"
msgstr[1] "%(count)s Auflagen" msgstr[1] "%(count)s Auflagen"
#: bookwyrm/templates/book/book.html:228 #: 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 #: bookwyrm/templates/book/book.html:294
msgid "Your reviews" msgid "Your reviews"
msgstr "Deine Besprechungen" msgstr "Deine Rezensionen"
#: bookwyrm/templates/book/book.html:300 #: bookwyrm/templates/book/book.html:300
msgid "Your comments" msgid "Your comments"
@ -949,42 +953,42 @@ msgstr "„%(book_title)s“ bearbeiten"
msgid "Add Book" msgid "Add Book"
msgstr "Buch hinzufügen" msgstr "Buch hinzufügen"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Buchinfo bestätigen" msgstr "Buchinfo bestätigen"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "Ist „%(name)s“ einer dieser Autor*innen?" msgstr "Ist „%(name)s“ einer dieser Autor*innen?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Autor*in von " 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" msgid "Find more information at isni.org"
msgstr "Weitere Informationen auf isni.org finden" 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" msgid "This is a new author"
msgstr "Neue*r Autor*in" msgstr "Neue*r Autor*in"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Als neue*r Autor*in erstellen: %(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?" msgid "Is this an edition of an existing work?"
msgstr "Ist das eine Ausgabe eines vorhandenen Werkes?" 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" msgid "This is a new work"
msgstr "Dies ist ein neues Werk." 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Zurück" msgstr "Zurück"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Weitere*n Autor*in hinzufügen" msgstr "Weitere*n Autor*in hinzufügen"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Titelbild" msgstr "Titelbild"
@ -1234,7 +1238,7 @@ msgstr "Datei-Links"
#: bookwyrm/templates/book/file_links/links.html:9 #: bookwyrm/templates/book/file_links/links.html:9
msgid "Get a copy" msgid "Get a copy"
msgstr "Kopie erhalten" msgstr "Exemplar erhalten"
#: bookwyrm/templates/book/file_links/links.html:47 #: bookwyrm/templates/book/file_links/links.html:47
msgid "No links available" msgid "No links available"
@ -1709,25 +1713,30 @@ msgstr "Zu deinen Büchern hinzufügen"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Zu lesen" msgstr "Zu lesen"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Aktuell lesend" msgstr "Liest gerade"
#: bookwyrm/templates/get_started/book_preview.html:12 #: bookwyrm/templates/get_started/book_preview.html:12
#: bookwyrm/templates/shelf/shelf.html:88 #: bookwyrm/templates/shelf/shelf.html:88
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Gelesen" 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 ""
#: bookwyrm/templates/get_started/books.html:6 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Was liest du gerade?" msgstr "Was liest du gerade?"
@ -1970,33 +1979,33 @@ msgstr "Bücher importieren"
msgid "Data source:" msgid "Data source:"
msgstr "Datenquelle:" msgstr "Datenquelle:"
#: bookwyrm/templates/import/import.html:39 #: bookwyrm/templates/import/import.html:42
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Du kannst deine Goodreads-Daten von der <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import&nbsp;/&nbsp;Export-Seite</a> deines Goodreads-Kontos downloaden." msgstr "Du kannst deine Goodreads-Daten von der <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import&nbsp;/&nbsp;Export-Seite</a> deines Goodreads-Kontos downloaden."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Datei:" msgstr "Datei:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Besprechungen einschließen" msgstr "Besprechungen einschließen"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Datenschutzeinstellung für importierte Besprechungen:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importieren" msgstr "Importieren"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Zuletzt importiert" msgstr "Zuletzt importiert"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Keine aktuellen Importe" msgstr "Keine aktuellen Importe"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Zeile" msgstr "Zeile"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary-Schlüssel" msgstr "Openlibrary-Schlüssel"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Autor*in" msgstr "Autor*in"
@ -2947,7 +2956,7 @@ msgstr "Follower*innen manuell bestätigen"
#: bookwyrm/templates/preferences/edit_user.html:123 #: bookwyrm/templates/preferences/edit_user.html:123
msgid "Hide followers and following on profile" msgid "Hide followers and following on profile"
msgstr "" msgstr "Folgende und Gefolgte im Profil ausblenden"
#: bookwyrm/templates/preferences/edit_user.html:128 #: bookwyrm/templates/preferences/edit_user.html:128
msgid "Default post privacy:" msgid "Default post privacy:"
@ -2988,6 +2997,11 @@ msgstr "„%(book_title)s“ abschließen"
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "„%(book_title)s“ beginnen" msgstr "„%(book_title)s“ beginnen"
#: bookwyrm/templates/reading_progress/stop.html:5
#, python-format
msgid "Stop Reading \"%(book_title)s\""
msgstr ""
#: bookwyrm/templates/reading_progress/want.html:5 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Lesedaten für „<em>%(title)s</em>“ aktualisieren"
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Zu lesen angefangen" msgstr "Zu lesen angefangen"
@ -3020,7 +3035,7 @@ msgstr "Zu lesen angefangen"
msgid "Progress" msgid "Progress"
msgstr "Fortschritt" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Zwischenstände:"
msgid "finished" msgid "finished"
msgstr "abgeschlossen" msgstr "abgeschlossen"
#: 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" msgid "Show all updates"
msgstr "Zeige alle Zwischenstände" msgstr "Zeige alle Zwischenstände"
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "Diesen Zwischenstand löschen" msgstr "Diesen Zwischenstand löschen"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "angefangen" msgstr "angefangen"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Lesedaten bearbeiten" msgstr "Lesedaten bearbeiten"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Diese Lesedaten löschen" msgstr "Diese Lesedaten löschen"
@ -3289,7 +3308,7 @@ msgstr "Zeitplan löschen"
#: bookwyrm/templates/settings/automod/rules.html:63 #: bookwyrm/templates/settings/automod/rules.html:63
msgid "Run now" msgid "Run now"
msgstr "" msgstr "Jetzt ausführen"
#: bookwyrm/templates/settings/automod/rules.html:64 #: bookwyrm/templates/settings/automod/rules.html:64
msgid "Last run date will not be updated" msgid "Last run date will not be updated"
@ -3298,11 +3317,11 @@ msgstr ""
#: bookwyrm/templates/settings/automod/rules.html:69 #: bookwyrm/templates/settings/automod/rules.html:69
#: bookwyrm/templates/settings/automod/rules.html:92 #: bookwyrm/templates/settings/automod/rules.html:92
msgid "Schedule scan" msgid "Schedule scan"
msgstr "" msgstr "Scan planen"
#: bookwyrm/templates/settings/automod/rules.html:101 #: bookwyrm/templates/settings/automod/rules.html:101
msgid "Successfully added rule" msgid "Successfully added rule"
msgstr "" msgstr "Regel erfolgreich hinzugefügt"
#: bookwyrm/templates/settings/automod/rules.html:107 #: bookwyrm/templates/settings/automod/rules.html:107
msgid "Add Rule" msgid "Add Rule"
@ -4034,7 +4053,7 @@ msgstr "Einladungsanfragen zulassen"
#: bookwyrm/templates/settings/site.html:158 #: bookwyrm/templates/settings/site.html:158
msgid "Set a question for invite requests" msgid "Set a question for invite requests"
msgstr "" msgstr "Eine Frage für Einladungsanfragen festlegen"
#: bookwyrm/templates/settings/site.html:163 #: bookwyrm/templates/settings/site.html:163
msgid "Question:" msgid "Question:"
@ -4050,11 +4069,11 @@ msgstr "Hinweis für Einladungsanfragen:"
#: bookwyrm/templates/settings/themes.html:10 #: bookwyrm/templates/settings/themes.html:10
msgid "Set instance default theme" msgid "Set instance default theme"
msgstr "" msgstr "Instanz-Standard-Theme festlegen"
#: bookwyrm/templates/settings/themes.html:19 #: bookwyrm/templates/settings/themes.html:19
msgid "Successfully added theme" msgid "Successfully added theme"
msgstr "" msgstr "Theme erfolgreich hinzugefügt"
#: bookwyrm/templates/settings/themes.html:26 #: bookwyrm/templates/settings/themes.html:26
msgid "How to add a theme" msgid "How to add a theme"
@ -4263,11 +4282,11 @@ msgstr ""
#: bookwyrm/templates/setup/admin.html:55 #: bookwyrm/templates/setup/admin.html:55
msgid "Learn more about moderation" msgid "Learn more about moderation"
msgstr "" msgstr "Mehr über Moderation erfahren"
#: bookwyrm/templates/setup/config.html:5 #: bookwyrm/templates/setup/config.html:5
msgid "Instance Configuration" msgid "Instance Configuration"
msgstr "" msgstr "Instanzkonfiguration"
#: bookwyrm/templates/setup/config.html:7 #: bookwyrm/templates/setup/config.html:7
msgid "Make sure everything looks right before proceeding" msgid "Make sure everything looks right before proceeding"
@ -4291,11 +4310,11 @@ msgstr "Einstellungen"
#: bookwyrm/templates/setup/config.html:56 #: bookwyrm/templates/setup/config.html:56
msgid "Instance domain:" msgid "Instance domain:"
msgstr "" msgstr "Instanz Domain:"
#: bookwyrm/templates/setup/config.html:63 #: bookwyrm/templates/setup/config.html:63
msgid "Protocol:" msgid "Protocol:"
msgstr "" msgstr "Protokoll:"
#: bookwyrm/templates/setup/config.html:81 #: bookwyrm/templates/setup/config.html:81
msgid "Using S3:" msgid "Using S3:"
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "Benutzer*inprofil" msgstr "Benutzer*inprofil"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Alle Bücher" msgstr "Alle Bücher"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s Buch" msgstr[0] "%(formatted_count)s Buch"
msgstr[1] "%(formatted_count)s Bücher" msgstr[1] "%(formatted_count)s Bücher"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(Anzeige: %(start)s&endash;%(end)s)" msgstr "(Anzeige: %(start)s&endash;%(end)s)"
#: bookwyrm/templates/shelf/shelf.html:115 #: bookwyrm/templates/shelf/shelf.html:116
msgid "Edit shelf" msgid "Edit shelf"
msgstr "Regal bearbeiten" msgstr "Regal bearbeiten"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Regal löschen" msgstr "Regal löschen"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Ins Regal gestellt" msgstr "Ins Regal gestellt"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Gestartet" msgstr "Gestartet"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Abgeschlossen" 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." msgid "This shelf is empty."
msgstr "Dieses Regal ist leer." msgstr "Dieses Regal ist leer."
@ -4666,7 +4690,7 @@ msgstr "Ziel setzen"
#: bookwyrm/templates/snippets/goal_progress.html:7 #: bookwyrm/templates/snippets/goal_progress.html:7
msgctxt "Goal successfully completed" msgctxt "Goal successfully completed"
msgid "Success!" msgid "Success!"
msgstr "" msgstr "Erfolg!"
#: bookwyrm/templates/snippets/goal_progress.html:9 #: bookwyrm/templates/snippets/goal_progress.html:9
#, python-format #, python-format
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "(Optional)" msgstr "(Optional)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Zwischenstand" msgstr "Zwischenstand"
@ -4737,6 +4761,17 @@ msgstr "Zwischenstand"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "„<em>%(book_title)s</em>“ beginnen" msgstr "„<em>%(book_title)s</em>“ beginnen"
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr "Buch verschieben"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Zu lesen beginnen" msgstr "Zu lesen beginnen"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Auf Leseliste setzen" msgstr "Auf Leseliste setzen"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Aus %(name)s entfernen" msgstr "Aus %(name)s entfernen"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Entfernen aus" msgstr "Entfernen aus"
@ -4808,7 +4843,12 @@ msgstr "Entfernen aus"
msgid "More shelves" msgid "More shelves"
msgstr "Mehr Regale" 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 ""
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40
msgid "Finish reading" msgid "Finish reading"
msgstr "Lesen abschließen" msgstr "Lesen abschließen"
@ -4903,6 +4943,16 @@ msgstr "hat <a href=\"%(book_path)s\">%(book)s</a> von <a href=\"%(author_path)s
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "hat <a href=\"%(book_path)s\">%(book)s</a> besprochen" msgstr "hat <a href=\"%(book_path)s\">%(book)s</a> besprochen"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5093,29 @@ msgstr "%(username)s folgt niemandem"
msgid "Edit profile" msgid "Edit profile"
msgstr "Profil bearbeiten" msgstr "Profil bearbeiten"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Alle %(size)s anzeigen" msgstr "Alle %(size)s anzeigen"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Alle Bücher anzeigen" msgstr "Alle Bücher anzeigen"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "Leseziel %(current_year)s" msgstr "Leseziel %(current_year)s"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Benutzer*innenaktivität" msgstr "Benutzer*innenaktivität"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "RSS-Feed" msgstr "RSS-Feed"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Noch keine Aktivitäten!" msgstr "Noch keine Aktivitäten!"
@ -5114,7 +5164,7 @@ msgstr "Datei überschreitet die maximale Größe von 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Keine gültige CSV-Datei" msgstr "Keine gültige CSV-Datei"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.0.1\n" "Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-14 14:03+0000\n" "POT-Creation-Date: 2022-06-30 16:55+0000\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: English <LL@li.org>\n" "Language-Team: English <LL@li.org>\n"
@ -47,6 +47,10 @@ msgstr ""
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "" msgstr ""
#: bookwyrm/forms/forms.py:59
msgid "Reading stopped date cannot be before start date."
msgstr ""
#: bookwyrm/forms/landing.py:32 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "" msgstr ""
@ -71,8 +75,8 @@ msgstr ""
msgid "Book Title" msgid "Book Title"
msgstr "" msgstr ""
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "" msgstr ""
@ -122,25 +126,25 @@ msgstr ""
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "" msgstr ""
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "" msgstr ""
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "" msgstr ""
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "" msgstr ""
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "" msgstr ""
@ -735,7 +739,7 @@ msgstr ""
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -758,8 +762,8 @@ msgstr ""
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -781,7 +785,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "" msgstr ""
#: bookwyrm/templates/author/sync_modal.html:24 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -950,42 +954,42 @@ msgstr ""
msgid "Add Book" msgid "Add Book"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Find more information at isni.org" msgid "Find more information at isni.org"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:85 #: bookwyrm/templates/book/edit/edit_book.html:93
msgid "This is a new author" msgid "This is a new author"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "" msgstr ""
#: 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?" msgid "Is this an edition of an existing work?"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:107 #: bookwyrm/templates/book/edit/edit_book.html:115
msgid "This is a new work" msgid "This is a new work"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book.html:116 #: bookwyrm/templates/book/edit/edit_book.html:124
#: bookwyrm/templates/feed/status.html:21 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "" msgstr ""
@ -1076,7 +1080,7 @@ msgid "Add Another Author"
msgstr "" msgstr ""
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -1710,13 +1714,13 @@ msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "" msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "" msgstr ""
@ -1725,10 +1729,15 @@ msgstr ""
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "" 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 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "" msgstr ""
@ -1971,33 +1980,33 @@ msgstr ""
msgid "Data source:" msgid "Data source:"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:39 #: bookwyrm/templates/import/import.html:42
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "" msgstr ""
@ -2056,8 +2065,8 @@ msgid "Row"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "" msgstr ""
@ -2070,8 +2079,8 @@ msgid "Openlibrary key"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "" msgstr ""
@ -2989,6 +2998,11 @@ msgstr ""
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "" msgstr ""
#: bookwyrm/templates/reading_progress/stop.html:5
#, python-format
msgid "Stop Reading \"%(book_title)s\""
msgstr ""
#: bookwyrm/templates/reading_progress/want.html:5 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3013,6 +3027,7 @@ msgstr ""
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "" msgstr ""
@ -3021,7 +3036,7 @@ msgstr ""
msgid "Progress" msgid "Progress"
msgstr "" msgstr ""
#: bookwyrm/templates/readthrough/readthrough_form.html:24 #: bookwyrm/templates/readthrough/readthrough_form.html:25
#: bookwyrm/templates/readthrough/readthrough_modal.html:63 #: bookwyrm/templates/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3035,23 +3050,27 @@ msgstr ""
msgid "finished" msgid "finished"
msgstr "" 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" msgid "Show all updates"
msgstr "" msgstr ""
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "" msgstr ""
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "" msgstr ""
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "" msgstr ""
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "" msgstr ""
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:115 #: bookwyrm/templates/shelf/shelf.html:116
msgid "Edit shelf" msgid "Edit shelf"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "" msgstr ""
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "" 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." msgid "This shelf is empty."
msgstr "" msgstr ""
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "" msgstr ""
@ -4737,6 +4761,17 @@ msgstr ""
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr ""
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "" msgstr ""
@ -4808,7 +4843,12 @@ msgstr ""
msgid "More shelves" msgid "More shelves"
msgstr "" 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" msgid "Finish reading"
msgstr "" msgstr ""
@ -4830,11 +4870,15 @@ msgstr ""
msgid "(%(percent)s%%)" msgid "(%(percent)s%%)"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/status/content_status.html:126 #: bookwyrm/templates/snippets/status/content_status.html:116
msgid "page"
msgstr ""
#: bookwyrm/templates/snippets/status/content_status.html:129
msgid "Open image in new window" msgid "Open image in new window"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/status/content_status.html:145 #: bookwyrm/templates/snippets/status/content_status.html:148
msgid "Hide status" msgid "Hide status"
msgstr "" msgstr ""
@ -4903,6 +4947,16 @@ msgstr ""
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5097,29 @@ msgstr ""
msgid "Edit profile" msgid "Edit profile"
msgstr "" msgstr ""
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "" msgstr ""
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "" msgstr ""
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "" msgstr ""
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "" msgstr ""
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "" msgstr ""
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "" msgstr ""
@ -5114,7 +5168,7 @@ msgstr ""
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "" msgstr ""
#: bookwyrm/views/imports/import_data.py:67 #: bookwyrm/views/imports/import_data.py:70
msgid "Not a valid csv file" msgid "Not a valid csv file"
msgstr "" msgstr ""

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-30 10:04\n" "PO-Revision-Date: 2022-06-01 00:55\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"Language: es\n" "Language: es\n"
@ -46,6 +46,10 @@ msgstr "Sin límite"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio." 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 ""
#: bookwyrm/forms/landing.py:32 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Este nombre de usuario ya está en uso." msgstr "Este nombre de usuario ya está en uso."
@ -70,8 +74,8 @@ msgstr "Orden de la lista"
msgid "Book Title" msgid "Book Title"
msgstr "Título" msgstr "Título"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Valoración" msgstr "Valoración"
@ -121,25 +125,25 @@ msgstr "Cuidado"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Informe generado automáticamente" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "Pendiente" msgstr "Pendiente"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Auto-eliminación" msgstr "Auto-eliminación"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Suspensión de moderador" msgstr "Suspensión de moderador"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Eliminación de moderador" msgstr "Eliminación de moderador"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Bloqueo de dominio" msgstr "Bloqueo de dominio"
@ -734,7 +738,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Guardar"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "La carga de datos se conectará a <strong>%(source_name)s</strong> y comprobará si hay metadatos sobre este autor que no están presentes aquí. Los metadatos existentes no serán sobrescritos." msgstr "La carga de datos se conectará a <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -949,42 +953,42 @@ msgstr "Editar \"%(book_title)s\""
msgid "Add Book" msgid "Add Book"
msgstr "Agregar libro" msgstr "Agregar libro"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Confirmar información de libro" msgstr "Confirmar información de libro"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "¿Es \"%(name)s\" uno de estos autores?" msgstr "¿Es \"%(name)s\" uno de estos autores?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Autor/a de " 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" msgid "Find more information at isni.org"
msgstr "Más información en 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" msgid "This is a new author"
msgstr "Este es un autor nuevo" msgstr "Este es un autor nuevo"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Creando un autor nuevo: %(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?" msgid "Is this an edition of an existing work?"
msgstr "¿Es esta una edición de una obra ya existente?" 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" msgid "This is a new work"
msgstr "Esta es una obra nueva" 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Volver" msgstr "Volver"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Añadir Otro Autor" msgstr "Añadir Otro Autor"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Portada" msgstr "Portada"
@ -1709,13 +1713,13 @@ msgstr "Añadir a tus libros"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Para leer" msgstr "Para leer"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Leyendo actualmente" msgstr "Leyendo actualmente"
@ -1724,10 +1728,15 @@ msgstr "Leyendo actualmente"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Leído" 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 ""
#: bookwyrm/templates/get_started/books.html:6 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "¿Qué estás leyendo?" msgstr "¿Qué estás leyendo?"
@ -1970,33 +1979,33 @@ msgstr "Importar libros"
msgid "Data source:" msgid "Data source:"
msgstr "Fuente de datos:" 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 <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Puedes descargar tus datos de Goodreads desde la <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">página de importación/exportación</a> de tu cuenta de Goodreads." msgstr "Puedes descargar tus datos de Goodreads desde la <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">página de importación/exportación</a> de tu cuenta de Goodreads."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Archivo de datos:" msgstr "Archivo de datos:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Incluir reseñas" msgstr "Incluir reseñas"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Configuración de privacidad para las reseñas importadas:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importar" msgstr "Importar"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Importaciones recientes" msgstr "Importaciones recientes"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "No hay ninguna importación reciente" msgstr "No hay ninguna importación reciente"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Fila" msgstr "Fila"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Título" msgstr "Título"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Clave de OpenLibrary" msgstr "Clave de OpenLibrary"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Autor/Autora" msgstr "Autor/Autora"
@ -2988,6 +2997,11 @@ msgstr "Terminar \"%(book_title)s\""
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "Empezar \"%(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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Actualizar fechas de lectura de «<em>%(title)s</em>»"
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Lectura se empezó" msgstr "Lectura se empezó"
@ -3020,7 +3035,7 @@ msgstr "Lectura se empezó"
msgid "Progress" msgid "Progress"
msgstr "Progreso" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Actualizaciones de progreso:"
msgid "finished" msgid "finished"
msgstr "terminado" 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" msgid "Show all updates"
msgstr "Mostrar todas las actualizaciones" msgstr "Mostrar todas las actualizaciones"
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "Eliminar esta actualización de progreso" msgstr "Eliminar esta actualización de progreso"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "empezado" msgstr "empezado"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Editar fechas de lectura" msgstr "Editar fechas de lectura"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Eliminar estas fechas de lectura" msgstr "Eliminar estas fechas de lectura"
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "Perfil de usuario" msgstr "Perfil de usuario"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Todos los libros" msgstr "Todos los libros"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s libro" msgstr[0] "%(formatted_count)s libro"
msgstr[1] "%(formatted_count)s libros" msgstr[1] "%(formatted_count)s libros"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(mostrando %(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" msgid "Edit shelf"
msgstr "Editar estantería" msgstr "Editar estantería"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Eliminar estantería" msgstr "Eliminar estantería"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Archivado" msgstr "Archivado"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Empezado" msgstr "Empezado"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Terminado" 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." msgid "This shelf is empty."
msgstr "Esta estantería está vacía." msgstr "Esta estantería está vacía."
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "(Opcional)" msgstr "(Opcional)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Actualizar progreso" msgstr "Actualizar progreso"
@ -4737,6 +4761,17 @@ msgstr "Actualizar progreso"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Empezar \"<em>%(book_title)s</em>\"" msgstr "Empezar \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr "Mover libro"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Empezar a leer" msgstr "Empezar a leer"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Quiero leer" msgstr "Quiero leer"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Quitar de %(name)s" msgstr "Quitar de %(name)s"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Eliminar de" msgstr "Eliminar de"
@ -4808,7 +4843,12 @@ msgstr "Eliminar de"
msgid "More shelves" msgid "More shelves"
msgstr "Más estanterías" 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" msgid "Finish reading"
msgstr "Terminar de leer" msgstr "Terminar de leer"
@ -4903,6 +4943,16 @@ msgstr "reseñó <a href=\"%(book_path)s\">%(book)s</a> de <a href=\"%(author_pa
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "reseñó a <a href=\"%(book_path)s\">%(book)s</a>" msgstr "reseñó a <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5093,29 @@ msgstr "%(username)s no sigue a nadie"
msgid "Edit profile" msgid "Edit profile"
msgstr "Editar perfil" msgstr "Editar perfil"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Ver los %(size)s" msgstr "Ver los %(size)s"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Ver todos los libros" msgstr "Ver todos los libros"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "Objetivo de Lectura de %(current_year)s" msgstr "Objetivo de Lectura de %(current_year)s"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Actividad del usuario" msgstr "Actividad del usuario"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "Feed RSS" msgstr "Feed RSS"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "¡Aún no actividades!" msgstr "¡Aún no actividades!"
@ -5114,7 +5164,7 @@ msgstr "Archivo excede el tamaño máximo: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "No un archivo csv válido" msgstr "No un archivo csv válido"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-05-07 14:54\n" "PO-Revision-Date: 2022-06-01 09:05\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"Language: fi\n" "Language: fi\n"
@ -46,6 +46,10 @@ msgstr "rajattomasti"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "Lopetuspäivä ei voi olla ennen aloituspäivää." 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 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Käyttäjänimi on jo varattu" msgstr "Käyttäjänimi on jo varattu"
@ -70,8 +74,8 @@ msgstr "Lisäysjärjestys"
msgid "Book Title" msgid "Book Title"
msgstr "Kirjan nimi" msgstr "Kirjan nimi"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Arvosana" msgstr "Arvosana"
@ -121,25 +125,25 @@ msgstr "Vaara"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Automaattisesti luotu raportti" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "Odottaa" msgstr "Odottaa"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Itse poistettu" msgstr "Itse poistettu"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Moderaattorin estämä" msgstr "Moderaattorin estämä"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Moderaattorin poistama" msgstr "Moderaattorin poistama"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Verkkotunnuksen esto" msgstr "Verkkotunnuksen esto"
@ -734,7 +738,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Tallenna"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Tietoja ladattaessa muodostetaan yhteys lähteeseen <strong>%(source_name)s</strong> ja sieltä haetaan metatietoja, joita ei vielä ole täällä. Olemassa olevia metatietoja ei korvata uusilla." msgstr "Tietoja ladattaessa muodostetaan yhteys lähteeseen <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -949,42 +953,42 @@ msgstr "Muokkaa teosta ”%(book_title)s”"
msgid "Add Book" msgid "Add Book"
msgstr "Lisää kirja" msgstr "Lisää kirja"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Vahvista kirjan tiedot" msgstr "Vahvista kirjan tiedot"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "Onko ”%(name)s” joku seuraavista tekijöistä?" msgstr "Onko ”%(name)s” joku seuraavista tekijöistä?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Tekijänä teoksessa " 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" msgid "Find more information at isni.org"
msgstr "Lisätietoja osoitteessa 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" msgid "This is a new author"
msgstr "Uusi tekijä" msgstr "Uusi tekijä"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Luodaan uusi tekijä: %(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?" msgid "Is this an edition of an existing work?"
msgstr "Onko tämä aiemmin lisätyn teoksen laitos?" 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" msgid "This is a new work"
msgstr "Uusi teos" 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Takaisin" msgstr "Takaisin"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Yksi tekijä lisää" msgstr "Yksi tekijä lisää"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Kansikuva" msgstr "Kansikuva"
@ -1709,13 +1713,13 @@ msgstr "Lisää omiin kirjoihin"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Lukujono" msgstr "Lukujono"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Luettavana" msgstr "Luettavana"
@ -1724,10 +1728,15 @@ msgstr "Luettavana"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Luettu" 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 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Mitä luet?" msgstr "Mitä luet?"
@ -1970,33 +1979,33 @@ msgstr "Tuo kirjoja"
msgid "Data source:" msgid "Data source:"
msgstr "Tietolähde:" msgstr "Tietolähde:"
#: bookwyrm/templates/import/import.html:39 #: bookwyrm/templates/import/import.html:42
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Goodreads-tiedot voi ladata Goodreads-käyttäjätilin <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export-sivun</a> kautta." msgstr "Goodreads-tiedot voi ladata Goodreads-käyttäjätilin <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export-sivun</a> kautta."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Datatiedosto:" msgstr "Datatiedosto:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Myös arviot" msgstr "Myös arviot"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Tuotavien arvioiden yksityisyysvalinta:" msgstr "Tuotavien arvioiden yksityisyysvalinta:"
#: bookwyrm/templates/import/import.html:63 #: bookwyrm/templates/import/import.html:66
#: bookwyrm/templates/preferences/layout.html:31 #: bookwyrm/templates/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Tuo" msgstr "Tuo"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Viimeksi tuotu" msgstr "Viimeksi tuotu"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Ei viimeaikaisia tuonteja" msgstr "Ei viimeaikaisia tuonteja"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Rivi" msgstr "Rivi"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Nimi" msgstr "Nimi"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary-avain" msgstr "Openlibrary-avain"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Tekijä" msgstr "Tekijä"
@ -2988,6 +2997,11 @@ msgstr "Merkitse ”%(book_title)s” luetuksi"
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "Aloita ”%(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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Päivitä teoksen <em>%(title)s</em> lukuajankohtaa"
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Alkoi lukea" msgstr "Alkoi lukea"
@ -3020,7 +3035,7 @@ msgstr "Alkoi lukea"
msgid "Progress" msgid "Progress"
msgstr "Eteneminen" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Etenemispäivitykset:"
msgid "finished" msgid "finished"
msgstr "luettu" 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" msgid "Show all updates"
msgstr "Näytä kaikki päivitykset" 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" msgid "Delete this progress update"
msgstr "Poista etenemispäivitys" msgstr "Poista etenemispäivitys"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "aloitettu" msgstr "aloitettu"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Muokkaa lukuajankohtaa" msgstr "Muokkaa lukuajankohtaa"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Poista lukuajankohta" msgstr "Poista lukuajankohta"
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "Käyttäjäprofiili" msgstr "Käyttäjäprofiili"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Kaikki kirjat" msgstr "Kaikki kirjat"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s kirja" msgstr[0] "%(formatted_count)s kirja"
msgstr[1] "%(formatted_count)s kirjaa" msgstr[1] "%(formatted_count)s kirjaa"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(näytetään %(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" msgid "Edit shelf"
msgstr "Muokkaa hyllyä" msgstr "Muokkaa hyllyä"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Poista hylly" msgstr "Poista hylly"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Hyllytetty" msgstr "Hyllytetty"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Aloitettu" msgstr "Aloitettu"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Lopetettu" 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." msgid "This shelf is empty."
msgstr "Hylly on tyhjä." msgstr "Hylly on tyhjä."
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "(valinnainen)" msgstr "(valinnainen)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Etenemispäivitys" msgstr "Etenemispäivitys"
@ -4737,6 +4761,17 @@ msgstr "Etenemispäivitys"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Aloita <em>%(book_title)s</em>" msgstr "Aloita <em>%(book_title)s</em>"
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
msgstr "Keskeytä teoksen ”<em>%(book_title)s</em>” 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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr "Siirrä kirja"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Aloita lukeminen" msgstr "Aloita lukeminen"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Lisää lukujonoon" msgstr "Lisää lukujonoon"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Poista hyllystä %(name)s" msgstr "Poista hyllystä %(name)s"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Poista hyllystä" msgstr "Poista hyllystä"
@ -4808,7 +4843,12 @@ msgstr "Poista hyllystä"
msgid "More shelves" msgid "More shelves"
msgstr "Lisää hyllyjä" 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" msgid "Finish reading"
msgstr "Lopeta lukeminen" msgstr "Lopeta lukeminen"
@ -4903,6 +4943,16 @@ msgstr "kirjoitti arvion teoksesta <a href=\"%(author_path)s\">%(author_name)s</
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "kirjoitti arvion teoksesta <a href=\"%(book_path)s\">%(book)s</a>" msgstr "kirjoitti arvion teoksesta <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr "keskeytti teoksen <a href=\"%(author_path)s\">%(author_name)s</a>: <a href=\"%(book_path)s\">%(book)s</a> lukemisen"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "keskeytti teoksen <a href=\"%(book_path)s\">%(book)s</a> lukemisen"
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5093,29 @@ msgstr "%(username)s ei seuraa muita käyttäjiä"
msgid "Edit profile" msgid "Edit profile"
msgstr "Muokkaa profiilia" msgstr "Muokkaa profiilia"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Näytä kaikki %(size)s" msgstr "Näytä kaikki %(size)s"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Näytä kaikki kirjat" msgstr "Näytä kaikki kirjat"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "Lukutavoite vuodelle %(current_year)s" msgstr "Lukutavoite vuodelle %(current_year)s"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Käyttäjän toiminta" msgstr "Käyttäjän toiminta"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "RSS-syöte" msgstr "RSS-syöte"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Ei toimintaa!" msgstr "Ei toimintaa!"
@ -5114,7 +5164,7 @@ msgstr "Tiedosto on enimmäiskokoa 10 Mt suurempi"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Epäkelpo csv-tiedosto" msgstr "Epäkelpo csv-tiedosto"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-09 08:36\n" "PO-Revision-Date: 2022-06-10 17:57\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: French\n" "Language-Team: French\n"
"Language: fr\n" "Language: fr\n"
@ -46,6 +46,10 @@ msgstr "Sans limite"
msgid "Reading finish date cannot be before start date." 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." 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 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Un compte du même nom existe déjà" msgstr "Un compte du même nom existe déjà"
@ -70,8 +74,8 @@ msgstr "Ordre de la liste"
msgid "Book Title" msgid "Book Title"
msgstr "Titre du livre" msgstr "Titre du livre"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Note" msgstr "Note"
@ -121,25 +125,25 @@ msgstr "Danger"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Rapport généré automatiquement" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "En attente" msgstr "En attente"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Auto-suppression" msgstr "Auto-suppression"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Suspension du modérateur" msgstr "Suspension du modérateur"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Suppression du modérateur" msgstr "Suppression du modérateur"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Blocage de domaine" msgstr "Blocage de domaine"
@ -734,7 +738,7 @@ msgstr "ISNI :"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Enregistrer"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Le chargement des données se connectera à <strong>%(source_name)s</strong> 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." msgstr "Le chargement des données se connectera à <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -949,42 +953,42 @@ msgstr "Modifier « %(book_title)s»"
msgid "Add Book" msgid "Add Book"
msgstr "Ajouter un livre" msgstr "Ajouter un livre"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Confirmer les informations de ce livre" 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 #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "Est-ce que \"%(name)s\" fait partie de ces auteurs ou autrices ?" 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:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Auteur ou autrice de " 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" msgid "Find more information at isni.org"
msgstr "Trouver plus dinformations sur isni.org" msgstr "Trouver plus dinformations 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" msgid "This is a new author"
msgstr "Il sagit dun nouvel auteur ou dune nouvelle autrice." msgstr "Il sagit dun nouvel auteur ou dune nouvelle autrice."
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Création dun nouvel auteur/autrice: %(name)s" msgstr "Création dun 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?" msgid "Is this an edition of an existing work?"
msgstr "Estce lédition dun ouvrage existant?" msgstr "Estce lédition dun ouvrage existant?"
#: bookwyrm/templates/book/edit/edit_book.html:107 #: bookwyrm/templates/book/edit/edit_book.html:115
msgid "This is a new work" msgid "This is a new work"
msgstr "Il sagit dun nouvel ouvrage." msgstr "Il sagit dun nouvel ouvrage."
#: bookwyrm/templates/book/edit/edit_book.html:116 #: bookwyrm/templates/book/edit/edit_book.html:124
#: bookwyrm/templates/feed/status.html:21 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Retour" msgstr "Retour"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Ajouter un autre auteur ou autrice" msgstr "Ajouter un autre auteur ou autrice"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Couverture" msgstr "Couverture"
@ -1709,13 +1713,13 @@ msgstr "Ajouter à vos livres"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "À lire" msgstr "À lire"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Lectures en cours" msgstr "Lectures en cours"
@ -1724,10 +1728,15 @@ msgstr "Lectures en cours"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Lu" 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 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Que lisezvous?" msgstr "Que lisezvous?"
@ -1970,33 +1979,33 @@ msgstr "Importer des livres"
msgid "Data source:" msgid "Data source:"
msgstr "Source de données:" 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 <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Vous pouvez télécharger vos données Goodreads depuis la page <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export</a> de votre compte Goodreads." msgstr "Vous pouvez télécharger vos données Goodreads depuis la page <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export</a> de votre compte Goodreads."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Fichier de données:" msgstr "Fichier de données:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Importer les critiques" msgstr "Importer les critiques"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Confidentialité des critiques importées:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importer" msgstr "Importer"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Importations récentes" msgstr "Importations récentes"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Aucune importation récente" msgstr "Aucune importation récente"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Ligne" msgstr "Ligne"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Titre" msgstr "Titre"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Clé Openlibrary" msgstr "Clé Openlibrary"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Auteur/autrice" msgstr "Auteur/autrice"
@ -2988,6 +2997,11 @@ msgstr "Terminer \"%(book_title)s\""
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "Commencer \"%(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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Mettre à jour les dates de lecture pour « <em>%(title)s</em> »"
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Lecture commencée le" msgstr "Lecture commencée le"
@ -3020,7 +3035,7 @@ msgstr "Lecture commencée le"
msgid "Progress" msgid "Progress"
msgstr "Progression" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Progression:"
msgid "finished" msgid "finished"
msgstr "terminé" 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" msgid "Show all updates"
msgstr "Montrer toutes les progressions" msgstr "Montrer toutes les progressions"
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "Supprimer cette mise à jour" msgstr "Supprimer cette mise à jour"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "commencé" msgstr "commencé"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Modifier les date de lecture" 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" msgid "Delete these read dates"
msgstr "Supprimer ces dates de lecture" msgstr "Supprimer ces dates de lecture"
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "Profil utilisateur·rice" msgstr "Profil utilisateur·rice"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Tous les livres" msgstr "Tous les livres"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s livre" msgstr[0] "%(formatted_count)s livre"
msgstr[1] "%(formatted_count)s livres" msgstr[1] "%(formatted_count)s livres"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(affichage de %(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" msgid "Edit shelf"
msgstr "Modifier létagère" msgstr "Modifier létagère"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Supprimer létagère" msgstr "Supprimer létagère"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Date dajout" msgstr "Date dajout"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Commencé" msgstr "Commencé"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Terminé" 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." msgid "This shelf is empty."
msgstr "Cette étagère est vide" msgstr "Cette étagère est vide"
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "(Facultatif)" msgstr "(Facultatif)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Progression de la mise à jour" msgstr "Progression de la mise à jour"
@ -4737,6 +4761,17 @@ msgstr "Progression de la mise à jour"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Commencer « <em>%(book_title)s</em> »" msgstr "Commencer « <em>%(book_title)s</em> »"
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
msgstr "Interrompre la lecture de « <em>%(book_title)s</em> »"
#: 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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr "Déplacer le livre"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Commencer la lecture" msgstr "Commencer la lecture"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Je veux le lire" msgstr "Je veux le lire"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Retirer de %(name)s" msgstr "Retirer de %(name)s"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Retirer de" msgstr "Retirer de"
@ -4808,7 +4843,12 @@ msgstr "Retirer de"
msgid "More shelves" msgid "More shelves"
msgstr "Plus détagères" 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" msgid "Finish reading"
msgstr "Terminer la lecture" msgstr "Terminer la lecture"
@ -4903,6 +4943,16 @@ msgstr "a publié une critique de <a href=\"%(book_path)s\">%(book)s</a> par <a
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "a critiqué <a href=\"%(book_path)s\">%(book)s</a>" msgstr "a critiqué <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr "a interrompu la lecture de <a href=\"%(book_path)s\">%(book)s</a> par <a href=\"%(author_path)s\">%(author_name)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "a interrompu la lecture de <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5093,29 @@ msgstr "%(username)s ne suit personne"
msgid "Edit profile" msgid "Edit profile"
msgstr "Modifier le profil" msgstr "Modifier le profil"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Voir les %(size)s" msgstr "Voir les %(size)s"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Voir tous les livres" msgstr "Voir tous les livres"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "Défi lecture pour %(current_year)s" msgstr "Défi lecture pour %(current_year)s"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Activité du compte" msgstr "Activité du compte"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "Flux RSS" msgstr "Flux RSS"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Aucune activité pour linstant!" msgstr "Aucune activité pour linstant!"
@ -5114,7 +5164,7 @@ msgstr "Ce fichier dépasse la taille limite: 10Mo"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Fichier CSV non valide" msgstr "Fichier CSV non valide"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-09 14:02\n" "PO-Revision-Date: 2022-06-01 04:46\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Galician\n" "Language-Team: Galician\n"
"Language: gl\n" "Language: gl\n"
@ -46,6 +46,10 @@ msgstr "Sen límite"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "A data final da lectura non pode ser anterior á de inicio." 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 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Xa existe unha usuaria con este identificador" msgstr "Xa existe unha usuaria con este identificador"
@ -70,8 +74,8 @@ msgstr "Orde da lista"
msgid "Book Title" msgid "Book Title"
msgstr "Título do libro" msgstr "Título do libro"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Puntuación" msgstr "Puntuación"
@ -121,25 +125,25 @@ msgstr "Perigo"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Denuncia creada automáticamente" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "Pendente" msgstr "Pendente"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Auto eliminación" msgstr "Auto eliminación"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Suspendido pola moderación" msgstr "Suspendido pola moderación"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Eliminado pola moderación" msgstr "Eliminado pola moderación"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Bloqueo de dominio" msgstr "Bloqueo de dominio"
@ -734,7 +738,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Gardar"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Ao cargar os datos vas conectar con <strong>%(source_name)s</strong> e comprobar se existen metadatos desta persoa autora que non están aquí presentes. Non se sobrescribirán os datos existentes." msgstr "Ao cargar os datos vas conectar con <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -949,42 +953,42 @@ msgstr "Editar \"%(book_title)s\""
msgid "Add Book" msgid "Add Book"
msgstr "Engadir libro" msgstr "Engadir libro"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Confirma info do libro" msgstr "Confirma info do libro"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "É \"%(name)s\" un destas autoras?" msgstr "É \"%(name)s\" un destas autoras?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Autora de " 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" msgid "Find more information at isni.org"
msgstr "Atopa máis información en 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" msgid "This is a new author"
msgstr "Esta é unha nova autora" msgstr "Esta é unha nova autora"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Creando nova autora: %(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?" msgid "Is this an edition of an existing work?"
msgstr "É esta a edición dun traballo existente?" 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" msgid "This is a new work"
msgstr "Este é un novo traballo" 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Atrás" msgstr "Atrás"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Engade outra Autora" msgstr "Engade outra Autora"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Portada" msgstr "Portada"
@ -1709,13 +1713,13 @@ msgstr "Engadir aos teus libros"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Pendentes" msgstr "Pendentes"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Lectura actual" msgstr "Lectura actual"
@ -1724,10 +1728,15 @@ msgstr "Lectura actual"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Lido" 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 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Que estás a ler?" msgstr "Que estás a ler?"
@ -1970,33 +1979,33 @@ msgstr "Importar libros"
msgid "Data source:" msgid "Data source:"
msgstr "Fonte de datos:" 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 <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Podes descargar os teus datos de Goodreads desde a <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">páxina de Exportación/Importación</a> da túa conta Goodreads." msgstr "Podes descargar os teus datos de Goodreads desde a <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">páxina de Exportación/Importación</a> da túa conta Goodreads."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Ficheiro de datos:" msgstr "Ficheiro de datos:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Incluír recensións" msgstr "Incluír recensións"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Axuste de privacidade para recensións importadas:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importar" msgstr "Importar"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Importacións recentes" msgstr "Importacións recentes"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Sen importacións recentes" msgstr "Sen importacións recentes"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Fila" msgstr "Fila"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Título" msgstr "Título"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Chave en Openlibrary" msgstr "Chave en Openlibrary"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Autor" msgstr "Autor"
@ -2988,6 +2997,11 @@ msgstr "Acabei \"%(book_title)s\""
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "Comecei \"%(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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Actualizar as datas de lectura para \"<em>%(title)s</em>\""
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Comecei a ler" msgstr "Comecei a ler"
@ -3020,7 +3035,7 @@ msgstr "Comecei a ler"
msgid "Progress" msgid "Progress"
msgstr "Progreso" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Actualizacións da lectura:"
msgid "finished" msgid "finished"
msgstr "rematado" 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" msgid "Show all updates"
msgstr "Mostrar tódalas actualizacións" 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" msgid "Delete this progress update"
msgstr "Eliminar esta actualización da lectura" msgstr "Eliminar esta actualización da lectura"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "iniciado" msgstr "iniciado"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Editar datas da lectura" msgstr "Editar datas da lectura"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Eliminar estas datas da lectura" msgstr "Eliminar estas datas da lectura"
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "Perfil da usuaria" msgstr "Perfil da usuaria"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Tódolos libros" msgstr "Tódolos libros"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s libro" msgstr[0] "%(formatted_count)s libro"
msgstr[1] "%(formatted_count)s libros" msgstr[1] "%(formatted_count)s libros"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(mostrando %(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" msgid "Edit shelf"
msgstr "Editar estante" msgstr "Editar estante"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Eliminar estante" msgstr "Eliminar estante"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "No estante" msgstr "No estante"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Comezado" msgstr "Comezado"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Rematado" 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." msgid "This shelf is empty."
msgstr "Este estante esta baleiro." msgstr "Este estante esta baleiro."
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "(Optativo)" msgstr "(Optativo)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Actualización do progreso" msgstr "Actualización do progreso"
@ -4737,6 +4761,17 @@ msgstr "Actualización do progreso"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Comecei a ler \"<em>%(book_title)s</em>\"" msgstr "Comecei a ler \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
msgstr "Deixar de ler \"<em>%(book_title)s</em>\""
#: 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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr "Mover libro"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Comezar a ler" msgstr "Comezar a ler"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Quero ler" msgstr "Quero ler"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Eliminar de %(name)s" msgstr "Eliminar de %(name)s"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Eliminar de" msgstr "Eliminar de"
@ -4808,7 +4843,12 @@ msgstr "Eliminar de"
msgid "More shelves" msgid "More shelves"
msgstr "Máis estantes" 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" msgid "Finish reading"
msgstr "Rematar a lectura" msgstr "Rematar a lectura"
@ -4903,6 +4943,16 @@ msgstr "recensionou <a href=\"%(book_path)s\">%(book)s</a> de <a href=\"%(author
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "recensionou <a href=\"%(book_path)s\">%(book)s</a>" msgstr "recensionou <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr "deixei de ler <a href=\"%(book_path)s\">%(book)s</a> de <a href=\"%(author_path)s\">%(author_name)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "deixei de ler <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5093,29 @@ msgstr "%(username)s non segue a ninguén"
msgid "Edit profile" msgid "Edit profile"
msgstr "Editar perfil" msgstr "Editar perfil"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Ver tódolos %(size)s" msgstr "Ver tódolos %(size)s"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Ver tódolos libros" msgstr "Ver tódolos libros"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "Obxectivo de Lectura para %(current_year)s" msgstr "Obxectivo de Lectura para %(current_year)s"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Actividade da usuaria" msgstr "Actividade da usuaria"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "Fonte RSS" msgstr "Fonte RSS"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Sen actividade!" msgstr "Sen actividade!"
@ -5114,7 +5164,7 @@ msgstr "O ficheiro supera o tamaño máximo: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Non é un ficheiro csv válido" msgstr "Non é un ficheiro csv válido"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-20 22:49\n" "PO-Revision-Date: 2022-06-01 00:55\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"Language: it\n" "Language: it\n"
@ -46,6 +46,10 @@ msgstr "Illimitato"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "La data di fine lettura non può essere precedente alla data di inizio." 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 ""
#: bookwyrm/forms/landing.py:32 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Esiste già un utente con questo nome utente" msgstr "Esiste già un utente con questo nome utente"
@ -70,8 +74,8 @@ msgstr "Ordina Lista"
msgid "Book Title" msgid "Book Title"
msgstr "Titolo del libro" msgstr "Titolo del libro"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Valutazione" msgstr "Valutazione"
@ -121,25 +125,25 @@ msgstr "Attenzione"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Rapporto generato automaticamente" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "In attesa" msgstr "In attesa"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Eliminazione automatica" msgstr "Eliminazione automatica"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Sospensione del moderatore" msgstr "Sospensione del moderatore"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Cancellazione del moderatore" msgstr "Cancellazione del moderatore"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Blocco del dominio" msgstr "Blocco del dominio"
@ -734,7 +738,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Salva"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Il caricamento dei dati si collegherà a <strong>%(source_name)s</strong> e verificherà eventuali metadati relativi a questo autore che non sono presenti qui. I metadati esistenti non vengono sovrascritti." msgstr "Il caricamento dei dati si collegherà a <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -949,42 +953,42 @@ msgstr "Modifica \"%(book_title)s\""
msgid "Add Book" msgid "Add Book"
msgstr "Aggiungi libro" msgstr "Aggiungi libro"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Conferma informazioni sul libro" msgstr "Conferma informazioni sul libro"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "È \"%(name)s\" uno di questi autori?" msgstr "È \"%(name)s\" uno di questi autori?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Autore di " 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" msgid "Find more information at isni.org"
msgstr "Trova maggiori informazioni su 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" msgid "This is a new author"
msgstr "Questo è un nuovo autore" msgstr "Questo è un nuovo autore"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Creazione di un nuovo autore: %(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?" msgid "Is this an edition of an existing work?"
msgstr "È un'edizione di un'opera esistente?" 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" msgid "This is a new work"
msgstr "Si tratta di un nuovo lavoro" 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Indietro" msgstr "Indietro"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Aggiungi un altro autore" msgstr "Aggiungi un altro autore"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Copertina" msgstr "Copertina"
@ -1709,13 +1713,13 @@ msgstr "Aggiungi ai tuoi libri"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Da leggere" msgstr "Da leggere"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Letture correnti" msgstr "Letture correnti"
@ -1724,10 +1728,15 @@ msgstr "Letture correnti"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Letti" 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 ""
#: bookwyrm/templates/get_started/books.html:6 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Cosa stai leggendo?" msgstr "Cosa stai leggendo?"
@ -1970,33 +1979,33 @@ msgstr "Importa libri"
msgid "Data source:" msgid "Data source:"
msgstr "Sorgenti dati:" msgstr "Sorgenti dati:"
#: bookwyrm/templates/import/import.html:39 #: bookwyrm/templates/import/import.html:42
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Puoi scaricare i tuoi dati Goodreads dalla pagina <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">\"Importa/Esporta\"</a> del tuo account Goodreads." msgstr "Puoi scaricare i tuoi dati Goodreads dalla pagina <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">\"Importa/Esporta\"</a> del tuo account Goodreads."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Dati file:" msgstr "Dati file:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Includi recensioni" msgstr "Includi recensioni"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Impostazione della privacy per le recensioni importate:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importa" msgstr "Importa"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Importazioni recenti" msgstr "Importazioni recenti"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Nessuna importazione recente" msgstr "Nessuna importazione recente"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Riga" msgstr "Riga"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Titolo" msgstr "Titolo"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Chiave OpenLibrary" msgstr "Chiave OpenLibrary"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Autore" msgstr "Autore"
@ -2988,6 +2997,11 @@ msgstr "Termina \"%(book_title)s\""
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "Inizia \"%(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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Aggiorna date di lettura per \"<em>%(title)s</em>\""
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Inizia la lettura" msgstr "Inizia la lettura"
@ -3020,7 +3035,7 @@ msgstr "Inizia la lettura"
msgid "Progress" msgid "Progress"
msgstr "Avanzamento" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Aggiornamento progressi:"
msgid "finished" msgid "finished"
msgstr "completato" 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" msgid "Show all updates"
msgstr "Mostra tutti gli aggiornamenti" msgstr "Mostra tutti gli aggiornamenti"
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "Elimina questo aggiornamento" msgstr "Elimina questo aggiornamento"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "iniziato" msgstr "iniziato"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Modifica data di lettura" msgstr "Modifica data di lettura"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Elimina queste date di lettura" msgstr "Elimina queste date di lettura"
@ -4359,46 +4378,51 @@ msgid "User profile"
msgstr "Profilo utente" msgstr "Profilo utente"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Tutti i libri" msgstr "Tutti i libri"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s libro" msgstr[0] "%(formatted_count)s libro"
msgstr[1] "%(formatted_count)s libri" msgstr[1] "%(formatted_count)s libri"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(mostra %(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" msgid "Edit shelf"
msgstr "Modifica scaffale" msgstr "Modifica scaffale"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Elimina scaffale" msgstr "Elimina scaffale"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Scaffali" msgstr "Scaffali"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Iniziato" msgstr "Iniziato"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Completato" 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." msgid "This shelf is empty."
msgstr "Questo scaffale è vuoto." msgstr "Questo scaffale è vuoto."
@ -4728,7 +4752,7 @@ msgid "(Optional)"
msgstr "(Opzionale)" msgstr "(Opzionale)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Aggiornamento in corso" msgstr "Aggiornamento in corso"
@ -4737,6 +4761,17 @@ msgstr "Aggiornamento in corso"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Inizia \"<em>%(book_title)s </em>\"" msgstr "Inizia \"<em>%(book_title)s </em>\""
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4784,23 +4819,23 @@ msgstr "Sposta libro"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Inizia la lettura" msgstr "Inizia la lettura"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Vuoi leggere" msgstr "Vuoi leggere"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Rimuovi da %(name)s" msgstr "Rimuovi da %(name)s"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Rimuovi da" msgstr "Rimuovi da"
@ -4808,7 +4843,12 @@ msgstr "Rimuovi da"
msgid "More shelves" msgid "More shelves"
msgstr "Altri scaffali" 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" msgid "Finish reading"
msgstr "Finito di leggere" msgstr "Finito di leggere"
@ -4903,6 +4943,16 @@ msgstr "ha recensito <a href=\"%(book_path)s\">%(book)s</a> di <a href=\"%(autho
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "ha recensito <a href=\"%(book_path)s\">%(book)s</a>" msgstr "ha recensito <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5043,29 +5093,29 @@ msgstr "%(username)s non sta seguendo nessun utente"
msgid "Edit profile" msgid "Edit profile"
msgstr "Modifica profilo" msgstr "Modifica profilo"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Visualizza tutti i %(size)s" msgstr "Visualizza tutti i %(size)s"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Visualizza tutti i libri" msgstr "Visualizza tutti i libri"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "Obiettivo di lettura %(current_year)s" msgstr "Obiettivo di lettura %(current_year)s"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Attività dellutente" msgstr "Attività dellutente"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "Feed RSS" msgstr "Feed RSS"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Ancora nessuna attività!" msgstr "Ancora nessuna attività!"
@ -5114,7 +5164,7 @@ msgstr "Il file supera la dimensione massima: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Non è un file di csv valido" msgstr "Non è un file di csv valido"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-10 07:54\n" "PO-Revision-Date: 2022-06-01 00:55\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Lithuanian\n" "Language-Team: Lithuanian\n"
"Language: lt\n" "Language: lt\n"
@ -46,6 +46,10 @@ msgstr "Neribota"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "Skaitymo pabaigos data negali būti prieš skaitymo pradžios datą." 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 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "Toks naudotojo vardas jau egzistuoja" msgstr "Toks naudotojo vardas jau egzistuoja"
@ -70,8 +74,8 @@ msgstr "Kaip pridėta į sąrašą"
msgid "Book Title" msgid "Book Title"
msgstr "Knygos antraštė" msgstr "Knygos antraštė"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Įvertinimas" msgstr "Įvertinimas"
@ -121,25 +125,25 @@ msgstr "Pavojus"
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "Automatiškai sugeneruota ataskaita" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "Laukiama" msgstr "Laukiama"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Išsitrina savaime" msgstr "Išsitrina savaime"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Moderatorius nutraukė" msgstr "Moderatorius nutraukė"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Moderatorius ištrynė" msgstr "Moderatorius ištrynė"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Blokuoti pagal domeną" msgstr "Blokuoti pagal domeną"
@ -742,7 +746,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -765,8 +769,8 @@ msgstr "Išsaugoti"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -788,7 +792,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Duomenų įkėlimas prisijungs prie <strong>%(source_name)s</strong> ir patikrins ar nėra naujos informacijos. Esantys metaduomenys nebus perrašomi." msgstr "Duomenų įkėlimas prisijungs prie <strong>%(source_name)s</strong> ir patikrins ar nėra naujos informacijos. Esantys metaduomenys nebus perrašomi."
#: bookwyrm/templates/author/sync_modal.html:24 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -961,42 +965,42 @@ msgstr "Redaguoti „%(book_title)s“"
msgid "Add Book" msgid "Add Book"
msgstr "Pridėti knygą" msgstr "Pridėti knygą"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Patvirtinti knygos informaciją" msgstr "Patvirtinti knygos informaciją"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "Ar \"%(name)s\" yra vienas iš šių autorių?" msgstr "Ar \"%(name)s\" yra vienas iš šių autorių?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Autorius " 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" msgid "Find more information at isni.org"
msgstr "Daugiau informacijos 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" msgid "This is a new author"
msgstr "Tai naujas autorius" msgstr "Tai naujas autorius"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Kuriamas naujas autorius: %(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?" msgid "Is this an edition of an existing work?"
msgstr "Ar tai egzistuojančio darbo leidimas?" 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" msgid "This is a new work"
msgstr "Tai naujas darbas" 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Atgal" msgstr "Atgal"
@ -1087,7 +1091,7 @@ msgid "Add Another Author"
msgstr "Pridėti dar vieną autorių" msgstr "Pridėti dar vieną autorių"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Viršelis" msgstr "Viršelis"
@ -1725,13 +1729,13 @@ msgstr "Pridėti prie savo knygų"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Norimos perskaityti" msgstr "Norimos perskaityti"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Šiuo metu skaitomos" msgstr "Šiuo metu skaitomos"
@ -1740,10 +1744,15 @@ msgstr "Šiuo metu skaitomos"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Perskaitytos" 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 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Ką skaitome?" msgstr "Ką skaitome?"
@ -1990,33 +1999,33 @@ msgstr "Importuoti knygas"
msgid "Data source:" msgid "Data source:"
msgstr "Duomenų šaltinis:" msgstr "Duomenų šaltinis:"
#: bookwyrm/templates/import/import.html:39 #: bookwyrm/templates/import/import.html:42
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Galite atsisiųsti savo „Goodreads“ duomenis iš <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Importavimo ir eksportavimo puslapio</a>, esančio jūsų „Goodreads“ paskyroje." msgstr "Galite atsisiųsti savo „Goodreads“ duomenis iš <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Importavimo ir eksportavimo puslapio</a>, esančio jūsų „Goodreads“ paskyroje."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Duomenų failas:" msgstr "Duomenų failas:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Įtraukti atsiliepimus" msgstr "Įtraukti atsiliepimus"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Privatumo nustatymai svarbiems atsiliepimams:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importuoti" msgstr "Importuoti"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Pastaruoju metu importuota" msgstr "Pastaruoju metu importuota"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Pastaruoju metu neimportuota" msgstr "Pastaruoju metu neimportuota"
@ -2079,8 +2088,8 @@ msgid "Row"
msgstr "Eilutė" msgstr "Eilutė"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Pavadinimas" msgstr "Pavadinimas"
@ -2093,8 +2102,8 @@ msgid "Openlibrary key"
msgstr "„Openlibrary“ raktas" msgstr "„Openlibrary“ raktas"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Autorius" msgstr "Autorius"
@ -3012,6 +3021,11 @@ msgstr "Užbaigti „%(book_title)s“"
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "Pradėti „%(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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3036,6 +3050,7 @@ msgstr "Atnaujinkite knygos „<em>%(title)s</em>“ skaitymo datas"
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Pradėjo skaityti" msgstr "Pradėjo skaityti"
@ -3044,7 +3059,7 @@ msgstr "Pradėjo skaityti"
msgid "Progress" msgid "Progress"
msgstr "Progresas" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3058,23 +3073,27 @@ msgstr "Informacija apie progresą:"
msgid "finished" msgid "finished"
msgstr "baigta" 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" msgid "Show all updates"
msgstr "Rodyti visus naujinius" msgstr "Rodyti visus naujinius"
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "Ištrinti progreso naujinį" msgstr "Ištrinti progreso naujinį"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "pradėta" msgstr "pradėta"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Redaguoti skaitymo datas" msgstr "Redaguoti skaitymo datas"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Ištrinti šias skaitymo datas" msgstr "Ištrinti šias skaitymo datas"
@ -4391,11 +4410,11 @@ msgid "User profile"
msgstr "Nario paskyra" msgstr "Nario paskyra"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Visos knygos" msgstr "Visos knygos"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
@ -4404,35 +4423,40 @@ msgstr[1] "%(formatted_count)s knygos"
msgstr[2] "%(formatted_count)s knygų" msgstr[2] "%(formatted_count)s knygų"
msgstr[3] "%(formatted_count)s knygos" msgstr[3] "%(formatted_count)s knygos"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(rodoma %(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" msgid "Edit shelf"
msgstr "Redaguoti lentyną" msgstr "Redaguoti lentyną"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Ištrinti lentyną" msgstr "Ištrinti lentyną"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Sudėta į lentynas" msgstr "Sudėta į lentynas"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Pradėta" msgstr "Pradėta"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Baigta" 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." msgid "This shelf is empty."
msgstr "Ši lentyna tuščia." msgstr "Ši lentyna tuščia."
@ -4774,7 +4798,7 @@ msgid "(Optional)"
msgstr "(Nebūtina)" msgstr "(Nebūtina)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Atnaujinti progresą" msgstr "Atnaujinti progresą"
@ -4783,6 +4807,17 @@ msgstr "Atnaujinti progresą"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Pradėti „<em>%(book_title)s</em>“" msgstr "Pradėti „<em>%(book_title)s</em>“"
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4830,23 +4865,23 @@ msgstr "Perkelti knygą"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Pradėti skaityti" msgstr "Pradėti skaityti"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Noriu perskaityti" msgstr "Noriu perskaityti"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Pašalinti iš %(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" msgid "Remove from"
msgstr "Panaikinti iš" msgstr "Panaikinti iš"
@ -4854,7 +4889,12 @@ msgstr "Panaikinti iš"
msgid "More shelves" msgid "More shelves"
msgstr "Daugiau lentynų" 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" msgid "Finish reading"
msgstr "Baigti skaityti" msgstr "Baigti skaityti"
@ -4949,6 +4989,16 @@ msgstr "apžvelgė autoriaus <a href=\"%(author_path)s\">%(author_name)s</a> kny
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "apžvelgė <a href=\"%(book_path)s\">%(book)s</a>" msgstr "apžvelgė <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5089,29 +5139,29 @@ msgstr "%(username)s nieko neseka"
msgid "Edit profile" msgid "Edit profile"
msgstr "Redaguoti paskyrą" msgstr "Redaguoti paskyrą"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Žiūrėti visas %(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" msgid "View all books"
msgstr "Žiūrėti visas knygas" msgstr "Žiūrėti visas knygas"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "%(current_year)s skaitymo tikslas" msgstr "%(current_year)s skaitymo tikslas"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Naudotojo aktyvumas" msgstr "Naudotojo aktyvumas"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "RSS srautas" msgstr "RSS srautas"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Įrašų dar nėra" msgstr "Įrašų dar nėra"
@ -5164,7 +5214,7 @@ msgstr "Failas viršijo maksimalų dydį: 10 MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Netinkamas csv failas" msgstr "Netinkamas csv failas"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-08 21:00+0000\n" "POT-Creation-Date: 2022-05-31 23:50+0000\n"
"PO-Revision-Date: 2022-04-08 21:50\n" "PO-Revision-Date: 2022-06-01 00:55\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Norwegian\n" "Language-Team: Norwegian\n"
"Language: no\n" "Language: no\n"
@ -46,6 +46,10 @@ msgstr "Ubegrenset"
msgid "Reading finish date cannot be before start date." msgid "Reading finish date cannot be before start date."
msgstr "Sluttdato kan ikke være før startdato." 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 #: bookwyrm/forms/landing.py:32
msgid "User with this username already exists" msgid "User with this username already exists"
msgstr "" msgstr ""
@ -70,8 +74,8 @@ msgstr "Liste rekkefølge"
msgid "Book Title" msgid "Book Title"
msgstr "Boktittel" msgstr "Boktittel"
#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:155 #: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
#: bookwyrm/templates/shelf/shelf.html:187 #: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Vurdering" msgstr "Vurdering"
@ -121,25 +125,25 @@ msgstr ""
msgid "Automatically generated report" msgid "Automatically generated report"
msgstr "" 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/import/import_status.html:200
#: bookwyrm/templates/settings/link_domains/link_domains.html:19 #: bookwyrm/templates/settings/link_domains/link_domains.html:19
msgid "Pending" msgid "Pending"
msgstr "Avventer" msgstr "Avventer"
#: bookwyrm/models/base_model.py:18 #: bookwyrm/models/base_model.py:19
msgid "Self deletion" msgid "Self deletion"
msgstr "Selvsletting" msgstr "Selvsletting"
#: bookwyrm/models/base_model.py:19 #: bookwyrm/models/base_model.py:20
msgid "Moderator suspension" msgid "Moderator suspension"
msgstr "Moderatør suspensjon" msgstr "Moderatør suspensjon"
#: bookwyrm/models/base_model.py:20 #: bookwyrm/models/base_model.py:21
msgid "Moderator deletion" msgid "Moderator deletion"
msgstr "Moderatør sletting" msgstr "Moderatør sletting"
#: bookwyrm/models/base_model.py:21 #: bookwyrm/models/base_model.py:22
msgid "Domain block" msgid "Domain block"
msgstr "Domeneblokkering" msgstr "Domeneblokkering"
@ -734,7 +738,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/author/edit_author.html:115
#: bookwyrm/templates/book/book.html:202 #: 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/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/edit_links.html:82 #: bookwyrm/templates/book/file_links/edit_links.html:82
#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/groups/form.html:32
@ -757,8 +761,8 @@ msgstr "Lagre"
#: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/author/sync_modal.html:23
#: bookwyrm/templates/book/book.html:203 #: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/cover_add_modal.html:33
#: bookwyrm/templates/book/edit/edit_book.html:129 #: bookwyrm/templates/book/edit/edit_book.html:137
#: bookwyrm/templates/book/edit/edit_book.html:132 #: bookwyrm/templates/book/edit/edit_book.html:140
#: bookwyrm/templates/book/file_links/add_link_modal.html:59 #: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/file_links/verification_modal.html:25
#: bookwyrm/templates/book/sync_modal.html:23 #: bookwyrm/templates/book/sync_modal.html:23
@ -780,7 +784,7 @@ msgid "Loading data will connect to <strong>%(source_name)s</strong> and check f
msgstr "Laster inn data kobler til <strong>%(source_name)s</strong> og finner metadata om denne forfatteren som enda ikke finnes her. Eksisterende metadata vil ikke bli overskrevet." msgstr "Laster inn data kobler til <strong>%(source_name)s</strong> 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/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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/landing/password_reset.html:42
@ -949,42 +953,42 @@ msgstr "Rediger \"%(book_title)s"
msgid "Add Book" msgid "Add Book"
msgstr "Legg til bok" msgstr "Legg til bok"
#: bookwyrm/templates/book/edit/edit_book.html:54 #: bookwyrm/templates/book/edit/edit_book.html:62
msgid "Confirm Book Info" msgid "Confirm Book Info"
msgstr "Bekreft bokinformasjon" msgstr "Bekreft bokinformasjon"
#: bookwyrm/templates/book/edit/edit_book.html:62 #: bookwyrm/templates/book/edit/edit_book.html:70
#, python-format #, python-format
msgid "Is \"%(name)s\" one of these authors?" msgid "Is \"%(name)s\" one of these authors?"
msgstr "Er \"%(name)s\" en av disse forfatterne?" msgstr "Er \"%(name)s\" en av disse forfatterne?"
#: bookwyrm/templates/book/edit/edit_book.html:73 #: bookwyrm/templates/book/edit/edit_book.html:81
#: bookwyrm/templates/book/edit/edit_book.html:75 #: bookwyrm/templates/book/edit/edit_book.html:83
msgid "Author of " msgid "Author of "
msgstr "Forfatter av " 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" msgid "Find more information at isni.org"
msgstr "Finn mer informasjon på 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" msgid "This is a new author"
msgstr "Dette er en ny forfatter" msgstr "Dette er en ny forfatter"
#: bookwyrm/templates/book/edit/edit_book.html:92 #: bookwyrm/templates/book/edit/edit_book.html:100
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "Oppretter en ny forfatter: %(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?" msgid "Is this an edition of an existing work?"
msgstr "Er dette en utgave av et eksisterende verk?" 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" msgid "This is a new work"
msgstr "Dette er et nytt verk" 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 #: bookwyrm/templates/feed/status.html:21
msgid "Back" msgid "Back"
msgstr "Tilbake" msgstr "Tilbake"
@ -1075,7 +1079,7 @@ msgid "Add Another Author"
msgstr "Legg til enda en forfatter" msgstr "Legg til enda en forfatter"
#: bookwyrm/templates/book/edit/edit_book_form.html:220 #: bookwyrm/templates/book/edit/edit_book_form.html:220
#: bookwyrm/templates/shelf/shelf.html:146 #: bookwyrm/templates/shelf/shelf.html:147
msgid "Cover" msgid "Cover"
msgstr "Omslag" msgstr "Omslag"
@ -1709,13 +1713,13 @@ msgstr "Legg til i bøkene dine"
#: bookwyrm/templates/get_started/book_preview.html:10 #: bookwyrm/templates/get_started/book_preview.html:10
#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:33 #: 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" msgid "To Read"
msgstr "Å lese" msgstr "Å lese"
#: bookwyrm/templates/get_started/book_preview.html:11 #: bookwyrm/templates/get_started/book_preview.html:11
#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:34 #: 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" msgid "Currently Reading"
msgstr "Leser nå" msgstr "Leser nå"
@ -1724,10 +1728,15 @@ msgstr "Leser nå"
#: bookwyrm/templates/snippets/shelf_selector.html:47 #: 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_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: 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" msgid "Read"
msgstr "Lest" 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 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" msgid "What are you reading?"
msgstr "Hva er det du leser nå?" msgstr "Hva er det du leser nå?"
@ -1970,33 +1979,33 @@ msgstr "Importer bøker"
msgid "Data source:" msgid "Data source:"
msgstr "Datakilde:" msgstr "Datakilde:"
#: bookwyrm/templates/import/import.html:39 #: bookwyrm/templates/import/import.html:42
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account." msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr "Du kan laste ned Goodread-dataene dine fra <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export sida</a> på Goodread-kontoen din." msgstr "Du kan laste ned Goodread-dataene dine fra <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export sida</a> på Goodread-kontoen din."
#: bookwyrm/templates/import/import.html:44 #: bookwyrm/templates/import/import.html:47
msgid "Data file:" msgid "Data file:"
msgstr "Datafil:" msgstr "Datafil:"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:55
msgid "Include reviews" msgid "Include reviews"
msgstr "Inkluder anmeldelser" msgstr "Inkluder anmeldelser"
#: bookwyrm/templates/import/import.html:57 #: bookwyrm/templates/import/import.html:60
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Personverninnstilling for importerte anmeldelser:" 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/preferences/layout.html:31
#: bookwyrm/templates/settings/federation/instance_blocklist.html:76 #: bookwyrm/templates/settings/federation/instance_blocklist.html:76
msgid "Import" msgid "Import"
msgstr "Importér" msgstr "Importér"
#: bookwyrm/templates/import/import.html:68 #: bookwyrm/templates/import/import.html:71
msgid "Recent Imports" msgid "Recent Imports"
msgstr "Nylig importer" msgstr "Nylig importer"
#: bookwyrm/templates/import/import.html:70 #: bookwyrm/templates/import/import.html:73
msgid "No recent imports" msgid "No recent imports"
msgstr "Ingen nylige importer" msgstr "Ingen nylige importer"
@ -2055,8 +2064,8 @@ msgid "Row"
msgstr "Rad" msgstr "Rad"
#: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/import/import_status.html:103
#: bookwyrm/templates/shelf/shelf.html:147 #: bookwyrm/templates/shelf/shelf.html:148
#: bookwyrm/templates/shelf/shelf.html:169 #: bookwyrm/templates/shelf/shelf.html:170
msgid "Title" msgid "Title"
msgstr "Tittel" msgstr "Tittel"
@ -2069,8 +2078,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary nøkkel" msgstr "Openlibrary nøkkel"
#: bookwyrm/templates/import/import_status.html:114 #: bookwyrm/templates/import/import_status.html:114
#: bookwyrm/templates/shelf/shelf.html:148 #: bookwyrm/templates/shelf/shelf.html:149
#: bookwyrm/templates/shelf/shelf.html:172 #: bookwyrm/templates/shelf/shelf.html:173
msgid "Author" msgid "Author"
msgstr "Forfatter" msgstr "Forfatter"
@ -2988,6 +2997,11 @@ msgstr "Fullfør \"%(book_title)s\""
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "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 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
@ -3012,6 +3026,7 @@ msgstr "Oppdatér lesedatoer for \"<em>%(title)s</em>\""
#: bookwyrm/templates/readthrough/readthrough_modal.html:38 #: bookwyrm/templates/readthrough/readthrough_modal.html:38
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24 #: 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/start_reading_modal.html:21
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
msgid "Started reading" msgid "Started reading"
msgstr "Begynte å lese" msgstr "Begynte å lese"
@ -3020,7 +3035,7 @@ msgstr "Begynte å lese"
msgid "Progress" msgid "Progress"
msgstr "Fremdrift" 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/readthrough/readthrough_modal.html:63
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32 #: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
msgid "Finished reading" msgid "Finished reading"
@ -3034,23 +3049,27 @@ msgstr "Fremdriftsoppdateringer:"
msgid "finished" msgid "finished"
msgstr "ferdig" 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" msgid "Show all updates"
msgstr "Vis alle oppdateringer" msgstr "Vis alle oppdateringer"
#: bookwyrm/templates/readthrough/readthrough_list.html:41 #: bookwyrm/templates/readthrough/readthrough_list.html:43
msgid "Delete this progress update" msgid "Delete this progress update"
msgstr "Slett denne fremgangsoppdateringen" msgstr "Slett denne fremgangsoppdateringen"
#: bookwyrm/templates/readthrough/readthrough_list.html:53 #: bookwyrm/templates/readthrough/readthrough_list.html:55
msgid "started" msgid "started"
msgstr "startet" msgstr "startet"
#: bookwyrm/templates/readthrough/readthrough_list.html:60 #: bookwyrm/templates/readthrough/readthrough_list.html:62
msgid "Edit read dates" msgid "Edit read dates"
msgstr "Rediger lesedatoer" msgstr "Rediger lesedatoer"
#: bookwyrm/templates/readthrough/readthrough_list.html:68 #: bookwyrm/templates/readthrough/readthrough_list.html:70
msgid "Delete these read dates" msgid "Delete these read dates"
msgstr "Slett disse lesedatoene" msgstr "Slett disse lesedatoene"
@ -4357,46 +4376,51 @@ msgid "User profile"
msgstr "Brukerprofil" msgstr "Brukerprofil"
#: bookwyrm/templates/shelf/shelf.html:39 #: 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" msgid "All books"
msgstr "Alle bøker" msgstr "Alle bøker"
#: bookwyrm/templates/shelf/shelf.html:96 #: bookwyrm/templates/shelf/shelf.html:97
#, python-format #, python-format
msgid "%(formatted_count)s book" msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books" msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s bok" msgstr[0] "%(formatted_count)s bok"
msgstr[1] "%(formatted_count)s bøker" msgstr[1] "%(formatted_count)s bøker"
#: bookwyrm/templates/shelf/shelf.html:103 #: bookwyrm/templates/shelf/shelf.html:104
#, python-format #, python-format
msgid "(showing %(start)s-%(end)s)" msgid "(showing %(start)s-%(end)s)"
msgstr "(viser %(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" msgid "Edit shelf"
msgstr "Rediger hylle" msgstr "Rediger hylle"
#: bookwyrm/templates/shelf/shelf.html:123 #: bookwyrm/templates/shelf/shelf.html:124
msgid "Delete shelf" msgid "Delete shelf"
msgstr "Slett hylle" msgstr "Slett hylle"
#: bookwyrm/templates/shelf/shelf.html:151 #: bookwyrm/templates/shelf/shelf.html:152
#: bookwyrm/templates/shelf/shelf.html:177 #: bookwyrm/templates/shelf/shelf.html:178
msgid "Shelved" msgid "Shelved"
msgstr "Lagt på hylla" msgstr "Lagt på hylla"
#: bookwyrm/templates/shelf/shelf.html:152 #: bookwyrm/templates/shelf/shelf.html:153
#: bookwyrm/templates/shelf/shelf.html:180 #: bookwyrm/templates/shelf/shelf.html:181
msgid "Started" msgid "Started"
msgstr "Startet" msgstr "Startet"
#: bookwyrm/templates/shelf/shelf.html:153 #: bookwyrm/templates/shelf/shelf.html:154
#: bookwyrm/templates/shelf/shelf.html:183 #: bookwyrm/templates/shelf/shelf.html:184
msgid "Finished" msgid "Finished"
msgstr "Fullført" 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." msgid "This shelf is empty."
msgstr "Denne hylla er tom." msgstr "Denne hylla er tom."
@ -4726,7 +4750,7 @@ msgid "(Optional)"
msgstr "(Valgfritt)" msgstr "(Valgfritt)"
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6 #: 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" msgid "Update progress"
msgstr "Oppdater fremgang" msgstr "Oppdater fremgang"
@ -4735,6 +4759,17 @@ msgstr "Oppdater fremgang"
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Start \"<em>%(book_title)s</em>\"" msgstr "Start \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
#, python-format
msgid "Stop Reading \"<em>%(book_title)s</em>\""
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 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
@ -4782,23 +4817,23 @@ msgstr "Flytt bok"
#: bookwyrm/templates/snippets/shelf_selector.html:39 #: 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_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" msgid "Start reading"
msgstr "Begynn å lese" msgstr "Begynn å lese"
#: bookwyrm/templates/snippets/shelf_selector.html:54 #: bookwyrm/templates/snippets/shelf_selector.html:61
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:38 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
msgid "Want to read" msgid "Want to read"
msgstr "Ønsker å lese" msgstr "Ønsker å lese"
#: bookwyrm/templates/snippets/shelf_selector.html:75 #: bookwyrm/templates/snippets/shelf_selector.html:82
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:66 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
#, python-format #, python-format
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Fjern fra %(name)s" msgstr "Fjern fra %(name)s"
#: bookwyrm/templates/snippets/shelf_selector.html:88 #: bookwyrm/templates/snippets/shelf_selector.html:95
msgid "Remove from" msgid "Remove from"
msgstr "Fjern fra" msgstr "Fjern fra"
@ -4806,7 +4841,12 @@ msgstr "Fjern fra"
msgid "More shelves" msgid "More shelves"
msgstr "Flere hyller" 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" msgid "Finish reading"
msgstr "Fullfør lesing" msgstr "Fullfør lesing"
@ -4901,6 +4941,16 @@ msgstr "anmeldte <a href=\"%(book_path)s\">%(book)s</a> av <a href=\"%(author_pa
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "anmeldte <a href=\"%(book_path)s\">%(book)s</a>" msgstr "anmeldte <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:10 #: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format #, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>" msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
@ -5041,29 +5091,29 @@ msgstr "%(username)s følger ingen andre medlemmer"
msgid "Edit profile" msgid "Edit profile"
msgstr "Rediger profil" msgstr "Rediger profil"
#: bookwyrm/templates/user/user.html:37 #: bookwyrm/templates/user/user.html:38
#, python-format #, python-format
msgid "View all %(size)s" msgid "View all %(size)s"
msgstr "Vis alle %(size)s" msgstr "Vis alle %(size)s"
#: bookwyrm/templates/user/user.html:51 #: bookwyrm/templates/user/user.html:52
msgid "View all books" msgid "View all books"
msgstr "Se alle bøker" msgstr "Se alle bøker"
#: bookwyrm/templates/user/user.html:58 #: bookwyrm/templates/user/user.html:59
#, python-format #, python-format
msgid "%(current_year)s Reading Goal" msgid "%(current_year)s Reading Goal"
msgstr "%(current_year)s lesemål" msgstr "%(current_year)s lesemål"
#: bookwyrm/templates/user/user.html:65 #: bookwyrm/templates/user/user.html:66
msgid "User Activity" msgid "User Activity"
msgstr "Brukeraktivitet" msgstr "Brukeraktivitet"
#: bookwyrm/templates/user/user.html:69 #: bookwyrm/templates/user/user.html:70
msgid "RSS feed" msgid "RSS feed"
msgstr "RSS strøm" msgstr "RSS strøm"
#: bookwyrm/templates/user/user.html:80 #: bookwyrm/templates/user/user.html:81
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Ingen aktivitet enda!" msgstr "Ingen aktivitet enda!"
@ -5112,7 +5162,7 @@ msgstr "Filen overskrider maksimal størrelse: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(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" msgid "Not a valid csv file"
msgstr "Ikke en gyldig csv-fil" msgstr "Ikke en gyldig csv-fil"

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more