Merge branch 'main' into production

This commit is contained in:
Mouse Reeve 2022-08-05 16:57:53 -07:00
commit 580745bee3
66 changed files with 656 additions and 434 deletions

View file

@ -56,7 +56,7 @@ EMAIL_SENDER_NAME=admin
EMAIL_SENDER_DOMAIN=
# Query timeouts
SEARCH_TIMEOUT=15
SEARCH_TIMEOUT=5
QUERY_TIMEOUT=5
# Thumbnails Generation

View file

@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _
env = Env()
env.read_env()
DOMAIN = env("DOMAIN")
VERSION = "0.4.4"
VERSION = "0.4.5"
RELEASE_API = env(
"RELEASE_API",

View file

@ -23,7 +23,9 @@
<p class="subtitle notification has-background-primary-highlight">
{% blocktrans trimmed with site_name=site.name %}
{{ site_name }} is part of <em>BookWyrm</em>, a network of independent, self-directed communities for readers.
While you can interact seamlessly with users anywhere in the <a href="https://joinbookwyrm.com/instances/" target="_blank">BookWyrm network</a>, this community is unique.
While you can interact seamlessly with users anywhere in the
<a href="https://joinbookwyrm.com/instances/" target="_blank" rel="nofollow noopener noreferrer">BookWyrm network</a>,
this community is unique.
{% endblocktrans %}
</p>
</div>
@ -88,7 +90,10 @@
</div>
<p>
{% trans "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, <a href='https://joinbookwyrm.com/get-involved' target='_blank'>reach out</a> and make yourself heard." %}
{% blocktrans trimmed %}
Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal.
If you have feature requests, bug reports, or grand dreams, <a href="https://joinbookwyrm.com/get-involved" target="_blank" rel="nofollow noopener noreferrer">reach out</a> and make yourself heard.
{% endblocktrans %}
</p>
</section>

View file

@ -66,7 +66,7 @@
<div class="box">
{% if author.wikipedia_link %}
<div>
<a itemprop="sameAs" href="{{ author.wikipedia_link }}" rel="noopener noreferrer" target="_blank">
<a itemprop="sameAs" href="{{ author.wikipedia_link }}" rel="nofollow noopener noreferrer" target="_blank">
{% trans "Wikipedia" %}
</a>
</div>
@ -74,7 +74,7 @@
{% if author.isni %}
<div class="mt-1">
<a itemprop="sameAs" href="{{ author.isni_link }}" rel="noopener noreferrer" target="_blank">
<a itemprop="sameAs" href="{{ author.isni_link }}" rel="nofollow noopener noreferrer" target="_blank">
{% trans "View ISNI record" %}
</a>
</div>
@ -83,7 +83,7 @@
{% trans "Load data" as button_text %}
{% if author.openlibrary_key %}
<div class="mt-1 is-flex">
<a class="mr-3" itemprop="sameAs" href="{{ author.openlibrary_link }}" target="_blank" rel="noopener noreferrer">
<a class="mr-3" itemprop="sameAs" href="{{ author.openlibrary_link }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on OpenLibrary" %}
</a>
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
@ -98,7 +98,7 @@
{% if author.inventaire_id %}
<div class="mt-1 is-flex">
<a class="mr-3" itemprop="sameAs" href="{{ author.inventaire_link }}" target="_blank" rel="noopener noreferrer">
<a class="mr-3" itemprop="sameAs" href="{{ author.inventaire_link }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on Inventaire" %}
</a>
@ -114,7 +114,7 @@
{% if author.librarything_key %}
<div class="mt-1">
<a itemprop="sameAs" href="https://www.librarything.com/author/{{ author.librarything_key }}" target="_blank" rel="noopener noreferrer">
<a itemprop="sameAs" href="https://www.librarything.com/author/{{ author.librarything_key }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on LibraryThing" %}
</a>
</div>
@ -122,7 +122,7 @@
{% if author.goodreads_key %}
<div>
<a itemprop="sameAs" href="https://www.goodreads.com/author/show/{{ author.goodreads_key }}" target="_blank" rel="noopener noreferrer">
<a itemprop="sameAs" href="https://www.goodreads.com/author/show/{{ author.goodreads_key }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on Goodreads" %}
</a>
</div>

View file

@ -131,7 +131,7 @@
{% trans "Load data" as button_text %}
{% if book.openlibrary_key %}
<p>
<a href="{{ book.openlibrary_link }}" target="_blank" rel="noopener noreferrer">
<a href="{{ book.openlibrary_link }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on OpenLibrary" %}
</a>
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
@ -145,7 +145,7 @@
{% endif %}
{% if book.inventaire_id %}
<p>
<a href="{{ book.inventaire_link }}" target="_blank" rel="noopener noreferrer">
<a href="{{ book.inventaire_link }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on Inventaire" %}
</a>

View file

@ -78,9 +78,13 @@
<p class="help ml-5 mb-2">
{% with book_title=match.book_set.first.title alt_title=match.bio %}
{% if book_title %}
<a href="{{ match.local_path }}" target="_blank">{% trans "Author of " %}<em>{{ book_title }}</em></a>
<a href="{{ match.local_path }}" target="_blank" rel="nofollow noopener noreferrer">{% blocktrans trimmed %}
Author of <em>{{ book_title }}</em>
{% endblocktrans %}</a>
{% else %}
<a href="{{ match.id }}" target="_blank">{% if alt_title %}{% trans "Author of " %}<em>{{ alt_title }}</em>{% else %} {% trans "Find more information at isni.org" %}{% endif %}</a>
<a href="{{ match.id }}" target="_blank" rel="nofollow noopener noreferrer">{% if alt_title %}{% blocktrans trimmed %}
Author of <em>{{ alt_title }}</em>
{% endblocktrans %}{% else %}{% trans "Find more information at isni.org" %}{% endif %}</a>
{% endif %}
{% endwith %}
</p>

View file

@ -39,7 +39,7 @@
{% for link in links %}
<tr>
<td class="overflow-wrap-anywhere">
<a href="{{ link.url }}" target="_blank" rel="noopener noreferrer">{{ link.url }}</a>
<a href="{{ link.url }}" target="_blank" rel="nofollow noopener noreferrer">{{ link.url }}</a>
</td>
<td>
{% if link.added_by %}

View file

@ -28,7 +28,7 @@
{% for link in links.all %}
{% join "verify" link.id as verify_modal %}
<li>
<a href="{{ link.url }}" rel="noopener noreferrer" target="_blank" title="{{ link.url }}" data-modal-open="{{ verify_modal }}">{{ link.name }}</a>
<a href="{{ link.url }}" rel="nofollow noopener noreferrer" target="_blank" title="{{ link.url }}" data-modal-open="{{ verify_modal }}">{{ link.name }}</a>
({{ link.filetype }})
{% if link.availability != "free" %}

View file

@ -23,7 +23,7 @@ Is that where you'd like to go?
</div>
<button type="button" class="button" data-modal-close>{% trans "Cancel" %}</button>
<a href="{{ link.url }}" target="_blank" rel="noopener noreferrer" class="button is-primary">{% trans "Continue" %}</a>
<a href="{{ link.url }}" target="_blank" rel="nofollow noopener noreferrer" noreferrer" class="button is-primary">{% trans "Continue" %}</a>
{% endif %}
{% endblock %}

View file

@ -39,7 +39,11 @@
</div>
<p class="help" id="desc_source">
{% trans '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.' %}
{% blocktrans trimmed %}
You can download your Goodreads data from the
<a href="https://www.goodreads.com/review/import" target="_blank" rel="nofollow noopener noreferrer">Import/Export page</a>
of your Goodreads account.
{% endblocktrans %}
</p>
</div>

View file

@ -169,7 +169,7 @@
<p>{{ item.review|truncatechars:100 }}</p>
{% endif %}
{% if item.linked_review %}
<a href="{{ item.linked_review.remote_id }}" target="_blank">{% trans "View imported review" %}</a>
<a href="{{ item.linked_review.remote_id }}" target="_blank" rel="nofollow noopener noreferrer">{% trans "View imported review" %}</a>
{% endif %}
</td>
{% block import_cols %}

View file

@ -42,7 +42,7 @@
<div class="columns is-mobile">
{% with guess=item.book_guess %}
<div class="column is-narrow">
<a href="{{ item.book.local_path }}" target="_blank">
<a href="{{ item.book.local_path }}" target="_blank" rel="nofollow noopener noreferrer">
{% include 'snippets/book_cover.html' with book=guess cover_class='is-h-s' size='small' %}
</a>
</div>

View file

@ -67,9 +67,27 @@
</form>
{% include "search/barcode_modal.html" with id="barcode-scanner-modal" %}
<button type="button" tabindex="0" class="navbar-burger pulldown-menu my-4" data-controls="main_nav" aria-expanded="false">
<i class="icon icon-dots-three-vertical" aria-hidden="true"></i>
<span class="is-sr-only">{% trans "Main navigation menu" %}</span>
<button
type="button"
tabindex="0"
class="navbar-burger pulldown-menu my-4 is-flex-touch is-align-items-center is-justify-content-center"
data-controls="main_nav"
aria-expanded="false"
aria-label="{% trans 'Main navigation menu' %}"
>
<i class="icon-dots-three-vertical" aria-hidden="true"></i>
{% with request.user.unread_notification_count as notification_count %}
<strong
class="{% if not notification_count %}is-hidden {% elif request.user.has_unread_mentions %}is-danger {% else %}is-primary {% endif %} tag is-small px-1"
data-poll-wrapper
>
<span class="is-sr-only">{% trans "Notifications" %}</span>
<strong data-poll="notifications" class="has-text-white">
{{ notification_count }}
</strong>
</strong>
{% endwith %}
</button>
</div>
@ -200,11 +218,17 @@
{% if site.support_link %}
<p>
<span class="icon icon-heart"></span>
{% blocktrans with site_name=site.name support_link=site.support_link support_title=site.support_title %}Support {{ site_name }} on <a href="{{ support_link }}" target="_blank">{{ support_title }}</a>{% endblocktrans %}
{% blocktrans trimmed with site_name=site.name support_link=site.support_link support_title=site.support_title %}
Support {{ site_name }} on
<a href="{{ support_link }}" target="_blank" rel="nofollow noopener noreferrer">{{ support_title }}</a>
{% endblocktrans %}
</p>
{% endif %}
<p>
{% blocktrans %}BookWyrm's source code is freely available. You can contribute or report issues on <a href="https://github.com/mouse-reeve/bookwyrm">GitHub</a>.{% endblocktrans %}
{% blocktrans trimmed %}
BookWyrm's source code is freely available. You can contribute or report issues on
<a href="https://github.com/bookwyrm-social/bookwyrm" target="_blank" rel="nofollow noopener noreferrer">GitHub</a>.
{% endblocktrans %}
</p>
</div>
{% if site.footer_item %}

View file

@ -4,7 +4,14 @@
<div class="field mb-0">
<div class="control">
<a class="button is-small is-link" href="{% url 'remote-follow-page' %}?user={{ user.username }}" target="_blank" rel="noopener noreferrer" onclick="BookWyrm.displayPopUp(`{% url 'remote-follow-page' %}?user={{ user.username }}`, `remoteFollow`); return false;" aria-describedby="remote_follow_warning">
<a
class="button is-small is-link"
href="{% url 'remote-follow-page' %}?user={{ user.username }}"
target="_blank"
rel="nofollow noopener noreferrer"
onclick="BookWyrm.displayPopUp(`{% url 'remote-follow-page' %}?user={{ user.username }}`, `remoteFollow`); return false;"
aria-describedby="remote_follow_warning"
>
{% blocktrans with username=user.localname %}Follow on Fediverse{% endblocktrans %}
</a>
</div>

View file

@ -3,10 +3,9 @@
{% block panel %}
{% if results %}
{% with results|first as local_results %}
{% if results or remote_results %}
<ul class="block">
{% for result in local_results.results %}
{% for result in results %}
<li class="pd-4 mb-5 local-book-search-result" id="tour-local-book-search-result">
<div class="columns is-mobile is-gapless mb-0">
<div class="column is-cover">
@ -29,25 +28,24 @@
</li>
{% endfor %}
</ul>
{% endwith %}
<div class="block">
{% for result_set in results|slice:"1:" %}
{% for result_set in remote_results %}
{% if result_set.results %}
<section class="mb-5">
{% if not result_set.connector.local %}
<details class="details-panel box" open>
{% endif %}
{% if not result_set.connector.local %}
<summary class="is-flex is-align-items-center is-flex-wrap-wrap is-gap-2 remote-book-search-result" id="tour-remote-search-result">
<span class="mb-0 title is-5">
{% trans 'Results from' %}
<a href="{{ result_set.connector.base_url }}" target="_blank">{{ result_set.connector.name|default:result_set.connector.identifier }}</a>
<a
href="{{ result_set.connector.base_url }}"
target="_blank"
rel="nofollow noopener noreferrer"
>{{ result_set.connector.name|default:result_set.connector.identifier }}</a>
</span>
<span class="details-close icon icon-x" aria-hidden="true"></span>
</summary>
{% endif %}
<div class="mt-5">
<div class="is-flex is-flex-direction-row-reverse">
@ -63,7 +61,7 @@
<strong>
<a
href="{{ result.view_link|default:result.key }}"
rel="noopener noreferrer"
rel="nofollow noopener noreferrer"
target="_blank"
>{{ result.title }}</a>
</strong>
@ -88,17 +86,15 @@
</ul>
</div>
</div>
{% if not result_set.connector.local %}
</details>
{% endif %}
</section>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endblock %}
{% block search_footer %}
<p class="block">
{% if request.user.is_authenticated %}
{% if not remote %}

View file

@ -1,5 +1,6 @@
{% extends 'layout.html' %}
{% load i18n %}
{% load humanize %}
{% block title %}{% trans "Search" %}{% endblock %}
@ -53,17 +54,24 @@
</nav>
<section class="block" id="search-results-block">
{% if not results %}
<p>
<p class="block">
{% if not results %}
<em>{% blocktrans %}No results found for "{{ query }}"{% endblocktrans %}</em>
{% else %}
<em>{% blocktrans trimmed count counter=results.paginator.count with result_count=results.paginator.count|intcomma %}
{{ result_count }} result found
{% plural %}
{{ result_count }} results found
{% endblocktrans %}</em>
{% endif %}
</p>
{% endif %}
{% block panel %}
{% endblock %}
<div>
<div class="block">
{% include 'snippets/pagination.html' with page=results path=request.path %}
</div>
{% block search_footer %}{% endblock %}
</section>
{% endif %}

View file

@ -59,7 +59,9 @@
<div class="field">
<label class="label" for="id_file">JSON data:</label>
<aside class="help">
Expects a json file in the format provided by <a href="https://fediblock.org/" target="_blank" rel="noopener noreferrer">FediBlock</a>, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:
{% blocktrans trimmed %}
Expects a json file in the format provided by <a href="https://fediblock.org/" target="_blank" rel="nofollow noopener noreferrer">FediBlock</a>, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:
{% endblocktrans %}
<pre>
[
{

View file

@ -36,7 +36,7 @@
<header class="column">
<h2 class="title is-5">
{{ domain.name }}
(<a href="http://{{ domain.domain }}" target="_blank" rel="noopener noreferrer">{{ domain.domain }}</a>)
(<a href="http://{{ domain.domain }}" target="_blank" rel="nofollow noopener noreferrer">{{ domain.domain }}</a>)
</h2>
</header>
<div class="column is-narrow">

View file

@ -12,7 +12,7 @@
{% for link in links %}
<tr>
<td class="overflow-wrap-anywhere">
<a href="{{ link.url }}" target="_blank" rel="noopener noreferrer">{{ link.url }}</a>
<a href="{{ link.url }}" target="_blank" rel="nofollow noopener noreferrer">{{ link.url }}</a>
</td>
<td>
{% if link.added_by %}

View file

@ -51,7 +51,7 @@
{% trans "Once the instance is set up, you can promote other users to moderator or admin roles from the admin panel." %}
</p>
<p>
<a href="https://docs.joinbookwyrm.com/moderation.html" target="_blank">
<a href="https://docs.joinbookwyrm.com/moderation.html" target="_blank" rel="nofollow noopener noreferrer">
{% trans "Learn more about moderation" %}
</a>
</p>

View file

@ -144,7 +144,7 @@
{% blocktrans trimmed %}
You can change your instance settings in the <code>.env</code> file on your server.
{% endblocktrans %}
<a href="https://docs.joinbookwyrm.com/install-prod.html" target="_blank">
<a href="https://docs.joinbookwyrm.com/install-prod.html" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View installation instructions" %}
</a>
</p>

View file

@ -9,13 +9,17 @@
<div class="container">
<div class="navbar-brand is-flex-grow-1">
<span class="navbar-item" href="/">
<img class="image logo" src="{% if site.logo_small %}{% get_media_prefix %}{{ site.logo_small }}{% else %}{% static "images/logo-small.png" %}{% endif %}" alt="{% blocktrans with site_name=site.name %}{{ site_name }} home page{% endblocktrans %}">
<img
class="image logo"
src="{% if site.logo_small %}{% get_media_prefix %}{{ site.logo_small }}{% else %}{% static "images/logo-small.png" %}{% endif %}"
alt="{% blocktrans with site_name=site.name %}{{ site_name }} home page{% endblocktrans %}"
>
</span>
<div class="navbar-item is-align-items-start pt-5 is-flex-grow-1">
{% trans "Installing BookWyrm" %}
</div>
<div class="navbar-item is-align-items-start pt-5">
<a href="https://joinbookwyrm.com/get-involved/#dev-chat" target="_blank">{% trans "Need help?" %}</a>
<a href="https://joinbookwyrm.com/get-involved/#dev-chat" target="_blank" rel="nofollow noopener noreferrer">{% trans "Need help?" %}</a>
</div>
</div>
</div>

View file

@ -123,6 +123,7 @@
<a
href="{% get_media_prefix %}{{ attachment.image }}"
target="_blank"
rel="nofollow noopener noreferrer"
aria-label="{% trans 'Open image in new window' %}"
>
<img

View file

@ -65,7 +65,7 @@
<div class="columns is-mobile">
<h2 class="title column">{% trans "User Activity" %}</h2>
<div class="column is-narrow">
<a target="_blank" href="{{ user.local_path }}/rss">
<a target="_blank" href="{{ user.local_path }}/rss" rel="nofollow noopener noreferrer">
<span class="icon icon-rss" aria-hidden="true"></span>
<span class="is-hidden-mobile">{% trans "RSS feed" %}</span>
</a>

View file

@ -1,4 +1,5 @@
""" html validation on rendered templates """
from html.parser import HTMLParser
from tidylib import tidy_document
@ -23,3 +24,32 @@ def validate_html(html):
)
if errors:
raise Exception(errors)
validator = HtmlValidator()
# will raise exceptions
validator.feed(str(html.content))
class HtmlValidator(HTMLParser): # pylint: disable=abstract-method
"""Checks for custom html validation requirements"""
def __init__(self):
HTMLParser.__init__(self)
def handle_starttag(self, tag, attrs):
"""check if the tag is valid"""
# filter out everything besides links that open in new tabs
if tag != "a" or ("target", "_blank") not in attrs:
return
for attr, value in attrs:
if (
attr == "rel"
and "nofollow" in value
and "noopener" in value
and "noreferrer" in value
):
return
raise Exception(
'Links to a new tab must have rel="nofollow noopener noreferrer"'
)

View file

@ -13,7 +13,7 @@ from bookwyrm.tests.validate_html import validate_html
class LandingViews(TestCase):
"""pages you land on without really trying"""
def setUp(self):
def setUp(self): # pylint: disable=invalid-name
"""we need basic test data and mocks"""
self.factory = RequestFactory()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(

View file

@ -2,6 +2,7 @@
from unittest.mock import patch
from django.contrib.auth.models import AnonymousUser
from django.core.exceptions import PermissionDenied
from django.http import Http404
from django.template.response import TemplateResponse
from django.test import TestCase
@ -15,7 +16,7 @@ from bookwyrm.tests.validate_html import validate_html
class GroupViews(TestCase):
"""view group and edit details"""
def setUp(self):
def setUp(self): # pylint: disable=invalid-name
"""we need basic test data and mocks"""
self.factory = RequestFactory()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
@ -129,6 +130,23 @@ class GroupViews(TestCase):
).exists()
)
def test_group_create_permission_denied(self, _):
"""create group view"""
view = views.UserGroups.as_view()
request = self.factory.post(
"",
{
"name": "A group",
"description": "wowzers",
"privacy": "unlisted",
"user": self.local_user.id,
},
)
request.user = self.rat
with self.assertRaises(PermissionDenied):
view(request, "username")
def test_group_edit(self, _):
"""test editing a "group" database entry"""
view = views.Group.as_view()

View file

@ -7,13 +7,14 @@ from django.test import TestCase
from django.test.client import RequestFactory
from bookwyrm import models, views
from bookwyrm.tests.validate_html import validate_html
from bookwyrm.settings import DOMAIN
class IsbnViews(TestCase):
"""tag views"""
def setUp(self):
def setUp(self): # pylint: disable=invalid-name
"""we need basic test data and mocks"""
self.factory = RequestFactory()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
@ -58,4 +59,4 @@ class IsbnViews(TestCase):
is_api.return_value = False
response = view(request, isbn="1234567890123")
self.assertEqual(response.status_code, 200)
response.render()
validate_html(response.render())

View file

@ -17,7 +17,7 @@ from bookwyrm.tests.validate_html import validate_html
class Views(TestCase):
"""tag views"""
def setUp(self):
def setUp(self): # pylint: disable=invalid-name
"""we need basic test data and mocks"""
self.factory = RequestFactory()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
@ -90,13 +90,29 @@ class Views(TestCase):
self.assertIsInstance(response, TemplateResponse)
validate_html(response.render())
connector_results = response.context_data["results"]
self.assertEqual(len(connector_results), 2)
self.assertEqual(connector_results[0]["results"][0].title, "Test Book")
self.assertEqual(connector_results[1]["results"][0].title, "Mock Book")
# don't search remote
local_results = response.context_data["results"]
self.assertEqual(local_results[0].title, "Test Book")
connector_results = response.context_data["remote_results"]
self.assertEqual(connector_results[0]["results"][0].title, "Mock Book")
def test_search_book_anonymous(self):
"""Don't search remote for logged out user"""
view = views.Search.as_view()
connector = models.Connector.objects.create(
identifier="example.com",
connector_file="openlibrary",
base_url="https://example.com",
books_url="https://example.com/books",
covers_url="https://example.com/covers",
search_url="https://example.com/search?q=",
)
mock_result = SearchResult(title="Mock Book", connector=connector, key="hello")
request = self.factory.get("", {"q": "Test Book", "remote": True})
anonymous_user = AnonymousUser
anonymous_user.is_authenticated = False
request.user = anonymous_user
@ -107,11 +123,15 @@ class Views(TestCase):
{"results": [mock_result], "connector": connector}
]
response = view(request)
self.assertIsInstance(response, TemplateResponse)
validate_html(response.render())
connector_results = response.context_data["results"]
self.assertEqual(len(connector_results), 1)
self.assertEqual(connector_results[0]["results"][0].title, "Test Book")
local_results = response.context_data["results"]
self.assertEqual(local_results[0].title, "Test Book")
connector_results = response.context_data.get("remote_results")
self.assertIsNone(connector_results)
def test_search_users(self):
"""searches remote connectors"""

View file

@ -1,7 +1,7 @@
"""group views"""
from django.apps import apps
from django.contrib.auth.decorators import login_required
from django.db import IntegrityError
from django.db import IntegrityError, transaction
from django.core.paginator import Paginator
from django.http import HttpResponseBadRequest
from django.shortcuts import get_object_or_404, redirect
@ -112,9 +112,13 @@ class UserGroups(View):
form = forms.GroupForm(request.POST)
if not form.is_valid():
return redirect(request.user.local_path + "/groups")
group = form.save()
# add the creator as a group member
models.GroupMember.objects.create(group=group, user=request.user)
group = form.save(commit=False)
group.raise_not_editable(request.user)
with transaction.atomic():
group.save()
# add the creator as a group member
models.GroupMember.objects.create(group=group, user=request.user)
return redirect("group", group.id)
@ -128,6 +132,7 @@ class FindUsers(View):
"""basic profile info"""
user_query = request.GET.get("user_query")
group = get_object_or_404(models.Group, id=group_id)
group.raise_not_editable(request.user)
lists = (
models.List.privacy_filter(request.user)
.filter(group=group)
@ -183,10 +188,11 @@ def delete_group(request, group_id):
# only the owner can delete a group
group.raise_not_deletable(request.user)
# deal with any group lists
models.List.objects.filter(group=group).update(curation="closed", group=None)
with transaction.atomic():
# deal with any group lists
models.List.objects.filter(group=group).update(curation="closed", group=None)
group.delete()
group.delete()
return redirect(request.user.local_path + "/groups")

View file

@ -18,14 +18,17 @@ class Isbn(View):
if is_api_request(request):
return JsonResponse(
[book_search.format_search_result(r) for r in book_results], safe=False
[book_search.format_search_result(r) for r in book_results[:10]],
safe=False,
)
paginated = Paginator(book_results, PAGE_LENGTH).get_page(
request.GET.get("page")
)
paginated = Paginator(book_results, PAGE_LENGTH)
page = paginated.get_page(request.GET.get("page"))
data = {
"results": [{"results": paginated}],
"results": page,
"page_range": paginated.get_elided_page_range(
page.number, on_each_side=2, on_ends=1
),
"query": isbn,
"type": "book",
}

View file

@ -23,22 +23,14 @@ class Search(View):
def get(self, request):
"""that search bar up top"""
query = request.GET.get("q")
# check if query is isbn
query = isbn_check(query)
min_confidence = request.GET.get("min_confidence", 0)
search_type = request.GET.get("type")
search_remote = (
request.GET.get("remote", False) and request.user.is_authenticated
)
if is_api_request(request):
# only return local book results via json so we don't cascade
book_results = search(query, min_confidence=min_confidence)
return JsonResponse(
[format_search_result(r) for r in book_results], safe=False
)
return api_book_search(request)
query = request.GET.get("q")
if not query:
return TemplateResponse(request, "search/book.html")
search_type = request.GET.get("type")
if query and not search_type:
search_type = "user" if "@" in query else "book"
@ -50,49 +42,65 @@ class Search(View):
if not search_type in endpoints:
search_type = "book"
data = {
"query": query or "",
"type": search_type,
"remote": search_remote,
}
if query:
results, search_remote = endpoints[search_type](
query, request.user, min_confidence, search_remote
)
if results:
paginated = Paginator(results, PAGE_LENGTH).get_page(
request.GET.get("page")
)
data["results"] = paginated
data["remote"] = search_remote
return TemplateResponse(request, f"search/{search_type}.html", data)
return endpoints[search_type](request)
def book_search(query, user, min_confidence, search_remote=False):
def api_book_search(request):
"""Return books via API response"""
query = request.GET.get("q")
query = isbn_check(query)
min_confidence = request.GET.get("min_confidence", 0)
# only return local book results via json so we don't cascade
book_results = search(query, min_confidence=min_confidence)
return JsonResponse(
[format_search_result(r) for r in book_results[:10]], safe=False
)
def book_search(request):
"""the real business is elsewhere"""
query = request.GET.get("q")
# check if query is isbn
query = isbn_check(query)
min_confidence = request.GET.get("min_confidence", 0)
search_remote = request.GET.get("remote", False) and request.user.is_authenticated
# try a local-only search
results = [{"results": search(query, min_confidence=min_confidence)}]
if not user.is_authenticated or (results[0]["results"] and not search_remote):
return results, False
# if there were no local results, or the request was for remote, search all sources
results += connector_manager.search(query, min_confidence=min_confidence)
return results, True
local_results = search(query, min_confidence=min_confidence)
paginated = Paginator(local_results, PAGE_LENGTH)
page = paginated.get_page(request.GET.get("page"))
data = {
"query": query,
"results": page,
"type": "book",
"remote": search_remote,
"page_range": paginated.get_elided_page_range(
page.number, on_each_side=2, on_ends=1
),
}
# if a logged in user requested remote results or got no local results, try remote
if request.user.is_authenticated and (not local_results or search_remote):
data["remote_results"] = connector_manager.search(
query, min_confidence=min_confidence
)
return TemplateResponse(request, "search/book.html", data)
def user_search(query, viewer, *_):
def user_search(request):
"""cool kids members only user search"""
viewer = request.user
query = request.GET.get("q")
data = {"type": "user", "query": query}
# logged out viewers can't search users
if not viewer.is_authenticated:
return models.User.objects.none(), None
return TemplateResponse(request, "search/user.html", data)
# use webfinger for mastodon style account@domain.com username to load the user if
# they don't exist locally (handle_remote_webfinger will check the db)
if re.match(regex.FULL_USERNAME, query):
handle_remote_webfinger(query)
return (
results = (
models.User.viewer_aware_objects(viewer)
.annotate(
similarity=Greatest(
@ -104,14 +112,23 @@ def user_search(query, viewer, *_):
similarity__gt=0.5,
)
.order_by("-similarity")
), None
)
paginated = Paginator(results, PAGE_LENGTH)
page = paginated.get_page(request.GET.get("page"))
data["results"] = page
data["page_range"] = paginated.get_elided_page_range(
page.number, on_each_side=2, on_ends=1
)
return TemplateResponse(request, "search/user.html", data)
def list_search(query, viewer, *_):
def list_search(request):
"""any relevent lists?"""
return (
query = request.GET.get("q")
data = {"query": query, "type": "list"}
results = (
models.List.privacy_filter(
viewer,
request.user,
privacy_levels=["public", "followers"],
)
.annotate(
@ -124,7 +141,14 @@ def list_search(query, viewer, *_):
similarity__gt=0.1,
)
.order_by("-similarity")
), None
)
paginated = Paginator(results, PAGE_LENGTH)
page = paginated.get_page(request.GET.get("page"))
data["results"] = page
data["page_range"] = paginated.get_elided_page_range(
page.number, on_each_side=2, on_ends=1
)
return TemplateResponse(request, "search/list.html", data)
def isbn_check(query):

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:25\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Catalan\n"
"Language: ca\n"
@ -257,19 +257,19 @@ msgstr "Disponible per a préstec"
msgid "Approved"
msgstr "Aprovat"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Ressenya"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Comentaris"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citacions"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Tota la resta"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (noruec)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portuguès del Brasil)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portuguès europeu)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (romanès)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (suec)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (xinès simplificat)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (xinès tradicional)"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "No és un fitxer csv vàlid"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Nom d'usuari o contrasenya incorrectes"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-08-02 16:08\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 20:31\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: German\n"
"Language: de\n"
@ -257,19 +257,19 @@ msgstr "Zum Ausleihen erhältlich"
msgid "Approved"
msgstr "Bestätigt"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Rezensionen"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Kommentare"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Zitate"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Alles andere"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Norwegisch)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr "Polski (Polnisch)"
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (brasilianisches Portugiesisch)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugiesisch)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (Rumänisch)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Schwedisch)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (vereinfachtes Chinesisch)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chinesisch, traditionell)"
@ -2119,7 +2123,7 @@ msgstr "Lesestatus"
#: bookwyrm/templates/guided_tour/book.html:55
msgid "You can also manually add reading dates here. Unlike changing the reading status using the previous method, adding dates manually will not automatically add them to your <strong>Read</strong> or <strong>Reading</strong> shelves."
msgstr ""
msgstr "Sie können hier auch manuell Lesedaten hinzufügen. Im Gegensatz zum Ändern des Lesestatus mit der vorherigen Methode wird das manuelle Hinzufügen von Daten diese nicht automatisch zu Ihren <strong>Gelesen</strong>- oder <strong>Lesend</strong>-Regalen hinzufügen."
#: bookwyrm/templates/guided_tour/book.html:55
msgid "Got a favourite you re-read every year? We've got you covered - you can add multiple read dates for the same book 😀"
@ -2215,7 +2219,7 @@ msgstr "Deine Gruppe"
#: bookwyrm/templates/guided_tour/group.html:31
msgid "Use this search box to find users to join your group. Currently users must be members of the same Bookwyrm instance and be invited by the group owner."
msgstr ""
msgstr "Benutzen Sie dieses Suchfeld, um Benutzer zu finden, um Ihrer Gruppe beizutreten. Derzeit müssen Benutzer Mitglieder derselben Bookwyrm-Instanz sein und vom Gruppeneigentümer eingeladen werden."
#: bookwyrm/templates/guided_tour/group.html:32
msgid "Find users"
@ -2223,23 +2227,23 @@ msgstr "Benutzer*innen finden"
#: bookwyrm/templates/guided_tour/group.html:54
msgid "Your group members will appear here. The group owner is marked with a star symbol."
msgstr ""
msgstr "Ihre Gruppenmitglieder werden hier erscheinen. Der Gruppenbesitzer ist mit einem Sternsymbol gekennzeichnet."
#: bookwyrm/templates/guided_tour/group.html:55
msgid "Group members"
msgstr ""
msgstr "Gruppenmitglieder"
#: bookwyrm/templates/guided_tour/group.html:77
msgid "As well as creating lists from the Lists page, you can create a group-curated list here on the group's homepage. Any member of the group can create a list curated by group members."
msgstr ""
msgstr "Neben der Erstellung von Listen auf der Listenseite können Sie hier auch eine gruppenkuratierte Liste auf der Startseite der Gruppe erstellen. Jedes Mitglied der Gruppe kann eine von Gruppenmitgliedern kuratierte Liste erstellen."
#: bookwyrm/templates/guided_tour/group.html:78
msgid "Group lists"
msgstr ""
msgstr "Gruppenliste"
#: bookwyrm/templates/guided_tour/group.html:100
msgid "Congratulations, you've finished the tour! Now you know the basics, but there is lots more to explore on your own. Happy reading!"
msgstr ""
msgstr "Herzlichen Glückwunsch, Sie haben die Tour beendet! Nun wissen Sie die Grundlagen, aber es gibt noch viel mehr zu erkunden. Viel Spaß beim Lesen!"
#: bookwyrm/templates/guided_tour/group.html:115
msgid "End tour"
@ -2277,15 +2281,15 @@ msgstr "Suchfeld"
#: bookwyrm/templates/guided_tour/home.html:79
msgid "Search book records by scanning an ISBN barcode using your device's camera - great when you're in the bookstore or library!"
msgstr ""
msgstr "Suchen Sie Bucheinträge durch Scannen eines ISBN Barcodes mit der Kamera Ihres Geräts - großartig, wenn Sie in der Buchhandlung oder Bibliothek sind!"
#: bookwyrm/templates/guided_tour/home.html:80
msgid "Barcode reader"
msgstr ""
msgstr "Barcode-Leser"
#: bookwyrm/templates/guided_tour/home.html:102
msgid "Use the <strong>Feed</strong>, <strong>Lists</strong> and <strong>Discover</strong> links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
msgstr ""
msgstr "Verwenden Sie die <strong>Feed</strong>-, <strong>Listen</strong>- und <strong>Entdecken</strong>-Links um die neuesten Nachrichten aus Ihrem Feed zu finden, Liste von Büchern nach Themen und die neuesten Ereignisse auf diesem Bookwyrm-Server!"
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@ -2293,15 +2297,15 @@ msgstr "Navigationsleiste"
#: bookwyrm/templates/guided_tour/home.html:126
msgid "Books on your reading status shelves will be shown here."
msgstr ""
msgstr "Hier werden Bücher in den Regalen Ihres Lesestatus angezeigt."
#: bookwyrm/templates/guided_tour/home.html:151
msgid "Updates from people you are following will appear in your <strong>Home</strong> timeline.<br><br>The <strong>Books</strong> tab shows activity from anyone, related to your books."
msgstr ""
msgstr "Aktualisierungen von Personen, denen Sie folgen, werden in Ihrer <strong>Startseite</strong>nzeitleiste erscheinen.<br><br>Die <strong>Bücher</strong>registerkarte zeigt Aktivitäten von jedem an, der mit Ihren Büchern in Verbindung steht."
#: bookwyrm/templates/guided_tour/home.html:152
msgid "Timelines"
msgstr ""
msgstr "Zeitleiste"
#: bookwyrm/templates/guided_tour/home.html:176
msgid "The bell will light up when you have a new notification. When it does, click on it to find out what exciting thing has happened!"
@ -2316,117 +2320,117 @@ msgstr "Benachrichtigungen"
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
msgstr ""
msgstr "Ihr Profil, Ihre Bücher, Direktnachrichten und Einstellungen können durch Klicken auf Ihren Namen im Menü hier abgerufen werden."
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting <strong>Profile</strong> from the drop down menu to continue the tour."
msgstr ""
msgstr "Versuchen Sie, <strong>Profil</strong> aus dem Dropdown-Menü auszuwählen, um die Tour fortzusetzen."
#: bookwyrm/templates/guided_tour/home.html:201
msgid "Profile and settings menu"
msgstr ""
msgstr "Profil- und Einstellungsmenü"
#: bookwyrm/templates/guided_tour/lists.html:13
msgid "This is the lists page where you can discover book lists created by any user. A List is a collection of books, similar to a shelf."
msgstr ""
msgstr "Dies ist die Listenseite, auf der Sie die von jedem Benutzer erstellten Buchlisten entdecken können. Eine Liste ist eine Sammlung von Büchern, ähnlich einem Regal."
#: bookwyrm/templates/guided_tour/lists.html:13
msgid "Shelves are for organising books for yourself, whereas Lists are generally for sharing with others."
msgstr ""
msgstr "Die Regale sind für die Organisation von Büchern für Sie selbst, während Listen im Allgemeinen für den Austausch mit anderen sind."
#: bookwyrm/templates/guided_tour/lists.html:34
msgid "Let's see how to create a new list."
msgstr ""
msgstr "Lassen Sie uns sehen, wie eine neue Liste erstellt wird."
#: bookwyrm/templates/guided_tour/lists.html:34
msgid "Click the <strong>Create List</strong> button, then <strong>Next</strong> to continue the tour"
msgstr ""
msgstr "Klicken Sie auf die Schaltfläche <strong>Liste erstellen</strong>, dann <strong>Weiter</strong>, um die Tour fortzuführen"
#: bookwyrm/templates/guided_tour/lists.html:35
#: bookwyrm/templates/guided_tour/lists.html:59
msgid "Creating a new list"
msgstr ""
msgstr "Neue Liste erstellen"
#: bookwyrm/templates/guided_tour/lists.html:58
msgid "You must give your list a name and can optionally give it a description to help other people understand what your list is about."
msgstr ""
msgstr "Sie müssen Ihrer Liste einen Namen geben und können optional eine Beschreibung angeben, um anderen zu helfen, zu verstehen, worum es bei Ihrer Liste geht."
#: bookwyrm/templates/guided_tour/lists.html:81
msgid "Choose who can see your list here. List privacy options work just like we saw when posting book reviews. This is a common pattern throughout Bookwyrm."
msgstr ""
msgstr "Wählen Sie, wer Ihre Liste hier sehen kann. Die Optionen zum Datenschutz funktionieren so, wie wir beim Schreiben von Buchbewertungen gesehen haben. Dies ist ein übliches Muster überall in Bookwyrm."
#: bookwyrm/templates/guided_tour/lists.html:82
msgid "List privacy"
msgstr ""
msgstr "Listen Privatsphäre"
#: bookwyrm/templates/guided_tour/lists.html:105
msgid "You can also decide how your list is to be curated - only by you, by anyone, or by a group."
msgstr ""
msgstr "Sie können auch entscheiden, wie Ihre Liste kuratiert werden soll - nur von Ihnen, von irgendjemandem oder von einer Gruppe."
#: bookwyrm/templates/guided_tour/lists.html:106
msgid "List curation"
msgstr ""
msgstr "Listenkuratierung"
#: bookwyrm/templates/guided_tour/lists.html:128
msgid "Next in our tour we will explore Groups!"
msgstr ""
msgstr "Als nächstes auf unserer Tour werden wir Gruppen entdecken!"
#: bookwyrm/templates/guided_tour/lists.html:129
msgid "Next: Groups"
msgstr ""
msgstr "Nächstes: Gruppen"
#: bookwyrm/templates/guided_tour/lists.html:143
msgid "Take me there"
msgstr ""
msgstr "Hier geht's lang"
#: bookwyrm/templates/guided_tour/search.html:16
msgid "If the book you are looking for is available on a remote catalogue such as Open Library, click on <strong>Import book</strong>."
msgstr ""
msgstr "Wenn das von Ihnen gesuchte Buch in einem Remote-Katalog wie der Open Library verfügbar ist, klicken Sie auf <strong>Buch importieren</strong>."
#: bookwyrm/templates/guided_tour/search.html:17
#: bookwyrm/templates/guided_tour/search.html:44
msgid "Searching"
msgstr ""
msgstr "Suchen"
#: bookwyrm/templates/guided_tour/search.html:43
msgid "If the book you are looking for is already on this Bookwyrm instance, you can click on the title to go to the book's page."
msgstr ""
msgstr "Wenn das von Ihnen gesuchte Buch bereits auf dieser Bookwyrm-Instanz ist, können Sie auf den Titel klicken, um zur Seite des Buches zu gelangen."
#: bookwyrm/templates/guided_tour/search.html:71
msgid "If the book you are looking for is not listed, try loading more records from other sources like Open Library or Inventaire."
msgstr ""
msgstr "Wenn das von Ihnen gesuchte Buch nicht aufgelistet ist, laden Sie weitere Einträge aus anderen Quellen wie Open Library oder Inventaire nach."
#: bookwyrm/templates/guided_tour/search.html:72
msgid "Load more records"
msgstr ""
msgstr "Mehr Einträge laden"
#: bookwyrm/templates/guided_tour/search.html:98
msgid "If your book is not in the results, try adjusting your search terms."
msgstr ""
msgstr "Wenn Ihr Buch nicht in den Ergebnissen enthalten ist, versuchen Sie Ihre Suchbegriffe anzupassen."
#: bookwyrm/templates/guided_tour/search.html:99
msgid "Search again"
msgstr ""
msgstr "Erneut suchen"
#: bookwyrm/templates/guided_tour/search.html:121
msgid "If you still can't find your book, you can add a record manually."
msgstr ""
msgstr "Wenn Sie Ihr Buch immer noch nicht finden, können Sie einen Eintrag manuell hinzufügen."
#: bookwyrm/templates/guided_tour/search.html:122
msgid "Add a record manally"
msgstr ""
msgstr "Einen Eintrag manuell hinzufügen"
#: bookwyrm/templates/guided_tour/search.html:147
msgid "Import, manually add, or view an existing book to continue the tour."
msgstr ""
msgstr "Importieren, manuell hinzufügen oder ein existierendes Buch anzeigen, um die Tour fortzusetzen."
#: bookwyrm/templates/guided_tour/search.html:148
msgid "Continue the tour"
msgstr ""
msgstr "Tour fortsetzen"
#: bookwyrm/templates/guided_tour/user_books.html:10
msgid "This is the page where your books are listed, organised into shelves."
msgstr ""
msgstr "Dies ist die Seite, auf der Ihre Bücher aufgelistet sind, in Regale organisiert."
#: bookwyrm/templates/guided_tour/user_books.html:11
#: bookwyrm/templates/user/books_header.html:4
@ -2435,39 +2439,39 @@ msgstr "Deine Bücher"
#: bookwyrm/templates/guided_tour/user_books.html:31
msgid "<strong>To Read</strong>, <strong>Currently Reading</strong>, <strong>Read</strong>, and <strong>Stopped Reading</strong> are default shelves. When you change the reading status of a book it will automatically be moved to the matching shelf. A book can only be on one default shelf at a time."
msgstr ""
msgstr "<strong>Zu lesen</strong>, <strong>Derzeit lesend</strong>, <strong>Gelesen</strong> und <strong>Lesen gestoppt</strong> sind Standardregale. Wenn Sie den Lesestatus eines Buches ändern, wird er automatisch in das passende Regal verschoben. Ein Buch kann jeweils nur in einem Standardregal liegen."
#: bookwyrm/templates/guided_tour/user_books.html:32
msgid "Reading status shelves"
msgstr ""
msgstr "Lesestatusregale"
#: bookwyrm/templates/guided_tour/user_books.html:55
msgid "You can create additional custom shelves to organise your books. A book on a custom shelf can be on any number of other shelves simultaneously, including one of the default reading status shelves"
msgstr ""
msgstr "Sie können zusätzliche benutzerdefinierte Regale erstellen, um Ihre Bücher zu organisieren. Ein Buch in einem benutzerdefinierten Regal kann gleichzeitig in beliebig vielen anderen Regalen liegen, einschließlich eines der Standardlesestatusregale"
#: bookwyrm/templates/guided_tour/user_books.html:56
msgid "Adding custom shelves."
msgstr ""
msgstr "Füge eigene Regale hinzu."
#: bookwyrm/templates/guided_tour/user_books.html:78
msgid "If you have an export file from another service like Goodreads or LibraryThing, you can import it here."
msgstr ""
msgstr "Wenn Sie eine Exportdatei von einem anderen Dienst wie Goodreads oder LibraryThing haben, können Sie sie hier importieren."
#: bookwyrm/templates/guided_tour/user_books.html:79
msgid "Import from another service"
msgstr ""
msgstr "Von einem anderen Dienst importieren"
#: bookwyrm/templates/guided_tour/user_books.html:101
msgid "Now that we've explored book shelves, let's take a look at a related concept: book lists!"
msgstr ""
msgstr "Nun, da wir Bücherregale erforscht haben, werfen wir einen Blick auf ein verwandtes Konzept: Buchlisten!"
#: bookwyrm/templates/guided_tour/user_books.html:101
msgid "Click on the <strong>Lists</strong> link here to continue the tour."
msgstr ""
msgstr "Klicken Sie hier auf den Link <strong>Listen</strong>, um die Tour fortzusetzen."
#: bookwyrm/templates/guided_tour/user_groups.html:10
msgid "You can create or join a group with other users. Groups can share group-curated book lists, and in future will be able to do other things."
msgstr ""
msgstr "Sie können eine Gruppe mit anderen Benutzern erstellen oder beitreten. Gruppen können gruppenkuratierte Buchlisten teilen und können in Zukunft andere Dinge tun."
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
@ -2477,43 +2481,43 @@ msgstr "Gruppen"
#: bookwyrm/templates/guided_tour/user_groups.html:31
msgid "Let's create a new group!"
msgstr ""
msgstr "Lassen Sie uns eine neue Gruppe erstellen!"
#: bookwyrm/templates/guided_tour/user_groups.html:31
msgid "Click the <strong>Create group</strong> button, then <strong>Next</strong> to continue the tour"
msgstr ""
msgstr "Klicken Sie auf die Schaltfläche <strong>Gruppe erstellen</strong>, dann <strong>Weiter</strong>, um die Tour fortzuführen"
#: bookwyrm/templates/guided_tour/user_groups.html:55
msgid "Give your group a name and describe what it is about. You can make user groups for any purpose - a reading group, a bunch of friends, whatever!"
msgstr ""
msgstr "Geben Sie Ihrer Gruppe einen Namen und beschreiben Sie, worum es geht. Sie können Benutzergruppen zu jedem Zweck erstellen - eine Lesergruppe, eine Gruppe von Freunden, was auch immer!"
#: bookwyrm/templates/guided_tour/user_groups.html:56
msgid "Creating a group"
msgstr ""
msgstr "Eine Gruppe erstellen"
#: bookwyrm/templates/guided_tour/user_groups.html:78
msgid "Groups have privacy settings just like posts and lists, except that group privacy cannot be <strong>Followers</strong>."
msgstr ""
msgstr "Gruppen haben Privatsphäreeinstellungen genau wie Posts und Listen, außer dass die Privatsphäre der Gruppe nicht <strong>Follower</strong> sein kann."
#: bookwyrm/templates/guided_tour/user_groups.html:79
msgid "Group visibility"
msgstr ""
msgstr "Gruppensichtbarkeit"
#: bookwyrm/templates/guided_tour/user_groups.html:102
msgid "Once you're happy with how everything is set up, click the <strong>Save</strong> button to create your new group."
msgstr ""
msgstr "Sobald Sie mit der Einrichtung zufrieden sind, klicken Sie auf <strong>Speichern</strong>, um Ihre neue Gruppe zu erstellen."
#: bookwyrm/templates/guided_tour/user_groups.html:102
msgid "Create and save a group to continue the tour."
msgstr ""
msgstr "Erstellen und speichern Sie eine Gruppe, um die Tour fortzusetzen."
#: bookwyrm/templates/guided_tour/user_groups.html:103
msgid "Save your group"
msgstr ""
msgstr "Speichern Sie Ihre Gruppe"
#: bookwyrm/templates/guided_tour/user_profile.html:10
msgid "This is your user profile. All your latest activities will be listed here. Other Bookwyrm users can see parts of this page too - what they can see depends on your privacy settings."
msgstr ""
msgstr "Dies ist Ihr Benutzerprofil. Alle Ihre neuesten Aktivitäten werden hier aufgelistet. Andere Bookwyrm-Benutzer können auch Teile dieser Seite sehen - was sie sehen können, hängt von Ihren Privatsphäreeinstellungen ab."
#: bookwyrm/templates/guided_tour/user_profile.html:11
#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:10
@ -2522,7 +2526,7 @@ msgstr "Benutzer*inprofil"
#: bookwyrm/templates/guided_tour/user_profile.html:31
msgid "This tab shows everything you have read towards your annual reading goal, or allows you to set one. You don't have to set a reading goal if that's not your thing!"
msgstr ""
msgstr "Diese Registerkarte zeigt alles, was Sie gelesen haben, um Ihr jährliches Leseziel zu erreichen oder erlaubt Ihnen eines, eines zu setzen. Sie müssen kein Leseziel setzen, wenn das nicht Ihre Sache ist!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
#: bookwyrm/templates/user/layout.html:73
@ -2531,27 +2535,27 @@ msgstr "Leseziel"
#: bookwyrm/templates/guided_tour/user_profile.html:54
msgid "Here you can see your groups, or create a new one. A group brings together Bookwyrm users and allows them to curate lists together."
msgstr ""
msgstr "Hier können Sie Ihre Gruppen sehen oder eine neue erstellen. Eine Gruppe versammelt Bookwyrm-Benutzer und erlaubt ihnen, Listen zusammenzufügen."
#: bookwyrm/templates/guided_tour/user_profile.html:77
msgid "You can see your lists, or create a new one, here. A list is a collection of books that have something in common."
msgstr ""
msgstr "Sie können hier Ihre Listen sehen oder eine neue erstellen. Eine Liste ist eine Sammlung von Büchern, die etwas gemeinsam haben."
#: bookwyrm/templates/guided_tour/user_profile.html:100
msgid "The Books tab shows your book shelves. We'll explore this later in the tour."
msgstr ""
msgstr "Auf der Registerkarte Bücher sehen Sie Ihre Bücherregale. Wir werden dies später auf der Tour erforschen."
#: bookwyrm/templates/guided_tour/user_profile.html:123
msgid "Now you understand the basics of your profile page, let's add a book to your shelves."
msgstr ""
msgstr "Jetzt verstehen Sie die Grundlagen Ihrer Profilseite, lassen Sie uns ein Buch zu Ihren Regalen hinzufügen."
#: bookwyrm/templates/guided_tour/user_profile.html:123
msgid "Search for a title or author to continue the tour."
msgstr ""
msgstr "Suche nach einem Titel oder Autor, um die Tour fortzusetzen."
#: bookwyrm/templates/guided_tour/user_profile.html:124
msgid "Find a book"
msgstr ""
msgstr "Finden Sie ein Buch"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Keine gültige CSV-Datei"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Benutzer*inname oder Passwort falsch"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"POT-Creation-Date: 2022-08-05 16:02+0000\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: English <LL@li.org>\n"
@ -2012,8 +2012,8 @@ msgstr ""
#: bookwyrm/templates/groups/members.html:54
#: bookwyrm/templates/groups/suggested_users.html:35
#: bookwyrm/templates/snippets/suggested_users.html:31
#: bookwyrm/templates/user/user_preview.html:33
#: bookwyrm/templates/user/user_preview.html:41
#: bookwyrm/templates/user/user_preview.html:39
#: bookwyrm/templates/user/user_preview.html:47
msgid "Follows you"
msgstr ""
@ -5874,19 +5874,19 @@ msgid_plural "%(counter)s followers"
msgstr[0] ""
msgstr[1] ""
#: bookwyrm/templates/user/user_preview.html:27
#: bookwyrm/templates/user/user_preview.html:31
#, python-format
msgid "%(counter)s following"
msgstr ""
#: bookwyrm/templates/user/user_preview.html:39
#: bookwyrm/templates/user/user_preview.html:45
#, python-format
msgid "%(mutuals_display)s follower you follow"
msgid_plural "%(mutuals_display)s followers you follow"
msgstr[0] ""
msgstr[1] ""
#: bookwyrm/templates/user/user_preview.html:43
#: bookwyrm/templates/user/user_preview.html:49
msgid "No followers you follow"
msgstr ""

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:25\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Spanish\n"
"Language: es\n"
@ -257,19 +257,19 @@ msgstr "Disponible como préstamo"
msgid "Approved"
msgstr "Aprobado"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Reseñas"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Comentarios"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citas"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Todo lo demás"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (noruego)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portugués brasileño)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (rumano)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chino simplificado)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chino tradicional)"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "No un archivo csv válido"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Nombre de usuario o contraseña es incorrecta"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-08-01 17:10\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-05 01:09\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Finnish\n"
"Language: fi\n"
@ -257,19 +257,19 @@ msgstr "Lainattavissa"
msgid "Approved"
msgstr "Hyväksytty"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Arviot"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Kommentit"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Lainaukset"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Muut"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (norja)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr "Polski (puola)"
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (brasilianportugali)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (portugali)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (romania)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (ruotsi)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (yksinkertaistettu kiina)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (perinteinen kiina)"
@ -2285,19 +2289,19 @@ msgstr "Viivakoodinlukija"
#: bookwyrm/templates/guided_tour/home.html:102
msgid "Use the <strong>Feed</strong>, <strong>Lists</strong> and <strong>Discover</strong> links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
msgstr ""
msgstr "<strong>Syöte</strong>, <strong>Listat</strong> ja <strong>Tutustu</strong> auttavat löytämään uusimmat kirjapäivitykset, aiheenmukaisia kirjalistoja sekä tämän BookWyrm-palvelimen uusimpia tapahtumia."
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
msgstr ""
msgstr "Toiminnot sivustolla liikkumiseen"
#: bookwyrm/templates/guided_tour/home.html:126
msgid "Books on your reading status shelves will be shown here."
msgstr ""
msgstr "Tässä näytetään eri lukuvaiheissa olevat kirjat."
#: bookwyrm/templates/guided_tour/home.html:151
msgid "Updates from people you are following will appear in your <strong>Home</strong> timeline.<br><br>The <strong>Books</strong> tab shows activity from anyone, related to your books."
msgstr ""
msgstr "Seuraamiesi henkilöiden päivitykset näytetään <strong>Etusivulla</strong>.<br><br><strong>Kirjat</strong>-välilehdellä näytetään kaikenlaisia kirjoihisi liittyviä päivityksiä."
#: bookwyrm/templates/guided_tour/home.html:152
msgid "Timelines"
@ -2305,7 +2309,7 @@ msgstr "Aikajanat"
#: bookwyrm/templates/guided_tour/home.html:176
msgid "The bell will light up when you have a new notification. When it does, click on it to find out what exciting thing has happened!"
msgstr ""
msgstr "Kellokuvake ilmoittaa uusista ilmoituksista. Ilmoituksia pääsee lukemaan kellokuvaketta painamalla."
#: bookwyrm/templates/guided_tour/home.html:177
#: bookwyrm/templates/layout.html:99 bookwyrm/templates/layout.html:100
@ -2316,44 +2320,44 @@ msgstr "Ilmoitukset"
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
msgstr ""
msgstr "Omaa profiilia, kirjoja, yksityisviestejä ja asetuksia voi tarkastella tämän valikon kautta. Valikko avautuu nimeä painamalla."
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting <strong>Profile</strong> from the drop down menu to continue the tour."
msgstr ""
msgstr "Jatka esittelykierrosta valitsemalla valikosta <strong>Profiili</strong>."
#: bookwyrm/templates/guided_tour/home.html:201
msgid "Profile and settings menu"
msgstr ""
msgstr "Profiili- ja asetusvalikko"
#: bookwyrm/templates/guided_tour/lists.html:13
msgid "This is the lists page where you can discover book lists created by any user. A List is a collection of books, similar to a shelf."
msgstr ""
msgstr "Listasivun kautta voi tarkastella käyttäjien luomia kirjalistoja. Listat ovat ikään kuin kirjahyllyjä."
#: bookwyrm/templates/guided_tour/lists.html:13
msgid "Shelves are for organising books for yourself, whereas Lists are generally for sharing with others."
msgstr ""
msgstr "Hyllyjä käytetään omien kirjojen organisointiin, kun taas listat on tarkoitettu jaettavaksi muiden kanssa."
#: bookwyrm/templates/guided_tour/lists.html:34
msgid "Let's see how to create a new list."
msgstr ""
msgstr "Katsotaanpa, kuinka luodaan uusi lista."
#: bookwyrm/templates/guided_tour/lists.html:34
msgid "Click the <strong>Create List</strong> button, then <strong>Next</strong> to continue the tour"
msgstr ""
msgstr "Jatka esittelykierrosta painamalla <strong>Luo lista</strong> -painiketta ja sen jälkeen <strong>Seuraava</strong>-painiketta"
#: bookwyrm/templates/guided_tour/lists.html:35
#: bookwyrm/templates/guided_tour/lists.html:59
msgid "Creating a new list"
msgstr ""
msgstr "Uuden listan luominen"
#: bookwyrm/templates/guided_tour/lists.html:58
msgid "You must give your list a name and can optionally give it a description to help other people understand what your list is about."
msgstr ""
msgstr "Listalle on annettava nimi, minkä lisäksi sille voi kirjoittaa listan tarkoitusta selventävän kuvauksen."
#: bookwyrm/templates/guided_tour/lists.html:81
msgid "Choose who can see your list here. List privacy options work just like we saw when posting book reviews. This is a common pattern throughout Bookwyrm."
msgstr ""
msgstr "Tästä valitaan listan näkyvyys. Näkyvyysvalinnat toimivat samalla tavoin kuin kirja-arvioiden kohdalla. Tällainen toistuvuus on BookWyrmissä tavallista."
#: bookwyrm/templates/guided_tour/lists.html:82
msgid "List privacy"
@ -2361,72 +2365,72 @@ msgstr "Listan näkyvyys"
#: bookwyrm/templates/guided_tour/lists.html:105
msgid "You can also decide how your list is to be curated - only by you, by anyone, or by a group."
msgstr ""
msgstr "Tästä valitaan myös, kuka voi kuratoida listaa — vain sinä, kuka tahansa tai jonkin tietyn ryhmän jäsenet."
#: bookwyrm/templates/guided_tour/lists.html:106
msgid "List curation"
msgstr ""
msgstr "Listan kuratointi"
#: bookwyrm/templates/guided_tour/lists.html:128
msgid "Next in our tour we will explore Groups!"
msgstr ""
msgstr "Seuraavaksi tutustumme ryhmiin!"
#: bookwyrm/templates/guided_tour/lists.html:129
msgid "Next: Groups"
msgstr ""
msgstr "Seuraavaksi: Ryhmät"
#: bookwyrm/templates/guided_tour/lists.html:143
msgid "Take me there"
msgstr ""
msgstr "Jatka"
#: bookwyrm/templates/guided_tour/search.html:16
msgid "If the book you are looking for is available on a remote catalogue such as Open Library, click on <strong>Import book</strong>."
msgstr ""
msgstr "Jos haettu kirja löytyy etätietokannasta, esimerkiksi Open Librarysta, paina <strong>Tuo kirja</strong>."
#: bookwyrm/templates/guided_tour/search.html:17
#: bookwyrm/templates/guided_tour/search.html:44
msgid "Searching"
msgstr ""
msgstr "Haetaan"
#: bookwyrm/templates/guided_tour/search.html:43
msgid "If the book you are looking for is already on this Bookwyrm instance, you can click on the title to go to the book's page."
msgstr ""
msgstr "Jos haettu kirja löytyy jo tämän BookWyrm-palvelimen tietokannasta, kirjan sivulle voi siirtyä painamalla kirjan nimeä."
#: bookwyrm/templates/guided_tour/search.html:71
msgid "If the book you are looking for is not listed, try loading more records from other sources like Open Library or Inventaire."
msgstr ""
msgstr "Jos haettua kirjaa ei löydy tietokannasta, kokeile ladata lisää tietueita muista lähteistä, esimerkiksi Open Librarysta tai Inventairesta."
#: bookwyrm/templates/guided_tour/search.html:72
msgid "Load more records"
msgstr ""
msgstr "Lataa lisää tietueita"
#: bookwyrm/templates/guided_tour/search.html:98
msgid "If your book is not in the results, try adjusting your search terms."
msgstr ""
msgstr "Jos kirjaa ei löydy, kokeile muokata hakulauseketta."
#: bookwyrm/templates/guided_tour/search.html:99
msgid "Search again"
msgstr ""
msgstr "Hae uudelleen"
#: bookwyrm/templates/guided_tour/search.html:121
msgid "If you still can't find your book, you can add a record manually."
msgstr ""
msgstr "Jos kirjaa ei edelleenkään löydy, sen voi lisätä käsin."
#: bookwyrm/templates/guided_tour/search.html:122
msgid "Add a record manally"
msgstr ""
msgstr "Lisää tietue käsin"
#: bookwyrm/templates/guided_tour/search.html:147
msgid "Import, manually add, or view an existing book to continue the tour."
msgstr ""
msgstr "Jatka esittelykierrosta tuomalla kirja, lisäämällä sellainen käsin tai siirtymällä tietokannasta jo löytyvän kirjan tietoihin."
#: bookwyrm/templates/guided_tour/search.html:148
msgid "Continue the tour"
msgstr ""
msgstr "Jatka esittelykierrosta"
#: bookwyrm/templates/guided_tour/user_books.html:10
msgid "This is the page where your books are listed, organised into shelves."
msgstr ""
msgstr "Tällä sivulla listataan omat kirjasi hylly hyllyltä."
#: bookwyrm/templates/guided_tour/user_books.html:11
#: bookwyrm/templates/user/books_header.html:4
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Epäkelpo csv-tiedosto"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Käyttäjänimi tai salasana on virheellinen"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-30 11:59\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-03 21:03\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: French\n"
"Language: fr\n"
@ -257,19 +257,19 @@ msgstr "Disponible à lemprunt"
msgid "Approved"
msgstr "Approuvé"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Critiques"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Commentaires"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citations"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Tout le reste"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (norvégien)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr "Polski (polonais)"
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portugais brésilien)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugais européen)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (roumain)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Suédois)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简化字"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "Infos supplémentaires:"
@ -5907,7 +5911,7 @@ msgstr "%(title)s (%(subtitle)s)"
msgid "Not a valid csv file"
msgstr "Fichier CSV non valide"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Identifiant ou mot de passe incorrect"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-03 04:21\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Galician\n"
"Language: gl\n"
@ -257,19 +257,19 @@ msgstr "Dispoñible para aluguer"
msgid "Approved"
msgstr "Aprobado"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Recensións"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Comentarios"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citas"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "As outras cousas"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Noruegués)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr "Polski (Polaco)"
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portugués brasileiro)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (Rumanés)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chinés simplificado)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chinés tradicional)"
@ -2043,11 +2047,11 @@ msgstr "Xestora"
#: bookwyrm/templates/guided_tour/book.html:10
msgid "This is home page of a book. Let's see what you can do while you're here!"
msgstr ""
msgstr "Esta é a páxina de inicio para o libro. Vexamos o que podes facer aquí!"
#: bookwyrm/templates/guided_tour/book.html:11
msgid "Book page"
msgstr ""
msgstr "Páxina do libro"
#: bookwyrm/templates/guided_tour/book.html:19
#: bookwyrm/templates/guided_tour/group.html:19
@ -2058,7 +2062,7 @@ msgstr ""
#: bookwyrm/templates/guided_tour/user_groups.html:19
#: bookwyrm/templates/guided_tour/user_profile.html:19
msgid "End Tour"
msgstr ""
msgstr "Rematar titorial"
#: bookwyrm/templates/guided_tour/book.html:26
#: bookwyrm/templates/guided_tour/book.html:50
@ -2111,15 +2115,15 @@ msgstr "Seguinte"
#: bookwyrm/templates/guided_tour/book.html:31
msgid "This is where you can set a reading status for this book. You can press the button to move to the next stage, or use the drop down button to select the reading status you want to set."
msgstr ""
msgstr "Aquí podes establecer o estado de lectura para este libro. Podes premer no botón para ir á seguinte sección, ou usar o seleccionable para establecer o estado de lectura que desexes."
#: bookwyrm/templates/guided_tour/book.html:32
msgid "Reading status"
msgstr ""
msgstr "Estado da lectura"
#: bookwyrm/templates/guided_tour/book.html:55
msgid "You can also manually add reading dates here. Unlike changing the reading status using the previous method, adding dates manually will not automatically add them to your <strong>Read</strong> or <strong>Reading</strong> shelves."
msgstr ""
msgstr "Tamén podes engadir aquí manualmente estados de lectura. Ao contrario do método anterior, a adición manual non os engadirá automáticamente aos estantes <strong>Lidos</strong> ou <strong>Lendo</strong>."
#: bookwyrm/templates/guided_tour/book.html:55
msgid "Got a favourite you re-read every year? We've got you covered - you can add multiple read dates for the same book 😀"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Non é un ficheiro csv válido"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "As credenciais non son correctas"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:25\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Italian\n"
"Language: it\n"
@ -257,19 +257,19 @@ msgstr "Disponibile per il prestito"
msgid "Approved"
msgstr "Approvato"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Recensioni"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Commenti"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citazioni"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Tutto il resto"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Norvegese)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portoghese Brasiliano)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portoghese europeo)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Rumeno (Romanian)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Svedese)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Cinese Semplificato)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Cinese Tradizionale)"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Non è un file di csv valido"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Nome utente o password errati"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Lithuanian\n"
"Language: lt\n"
@ -257,19 +257,19 @@ msgstr "Galima pasiskolinti"
msgid "Approved"
msgstr "Patvirtinti puslapiai"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Apžvalgos"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Komentarai"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citatos"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Visa kita"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norvegų (Norwegian)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português brasileiro (Brazilijos portugalų)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Europos portugalų)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (rumunų)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Švedų)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Supaprastinta kinų)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Tradicinė kinų)"
@ -5963,7 +5967,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Netinkamas csv failas"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Naudotojo vardas arba slaptažodis neteisingi"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-31 16:53\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Norwegian\n"
"Language: no\n"
@ -257,19 +257,19 @@ msgstr "Tilgjengelig for utlån"
msgid "Approved"
msgstr "Godkjent"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Anmeldelser"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Kommentarer"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Sitater"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Andre ting"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Norsk)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português - Brasil (Brasiliansk portugisisk)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Europeisk Portugisisk)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (romansk)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Svensk)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Forenklet kinesisk)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Tradisjonelt kinesisk)"
@ -5905,7 +5909,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Ikke en gyldig csv-fil"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Feil brukernavn eller passord"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-08-02 12:20\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Polish\n"
"Language: pl\n"
@ -257,19 +257,19 @@ msgstr "Do wypożyczenia"
msgid "Approved"
msgstr "Zatwierdzone"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Oceny"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Komentarze"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Cytaty"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Wszystko inne"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Norweski)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Brazylijski Portugalski)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugalski)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (Rumuński)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Szwedzki)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Uproszczony chiński)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Tradycyjny chiński)"
@ -5963,7 +5967,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "To nie jest prawidłowy plik csv"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Niepoprawna nazwa użytkownika lub hasło"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt\n"
@ -257,19 +257,19 @@ msgstr "Disponível para empréstimo"
msgid "Approved"
msgstr "Aprovado"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Resenhas"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Comentários"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citações"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Todo o resto"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Norueguês)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Português do Brasil)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Português Europeu)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (Romeno)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chinês simplificado)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chinês tradicional)"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Não é um arquivo csv válido"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Nome de usuário ou senha incorretos"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Portuguese\n"
"Language: pt\n"
@ -257,19 +257,19 @@ msgstr "Disponível para empréstimo"
msgid "Approved"
msgstr "Aprovado"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Criticas"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Comentários"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citações"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Tudo o resto"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (Norueguês)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Português brasileiro)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português (Português Europeu)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (Romeno)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (sueco)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chinês simplificado)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chinês tradicional)"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Não é um ficheiro csv válido"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Nome de utilizador ou palavra-passe incorretos"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-31 10:35\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:25\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Romanian\n"
"Language: ro\n"
@ -257,19 +257,19 @@ msgstr "Disponibilă pentru împrumut"
msgid "Approved"
msgstr "Aprovat"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Recenzii"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Comentarii"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citate"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Orice altceva"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk (norvegiană)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portugheză braziliană)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (portugheză europeană)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (română)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (suedeză)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (chineză simplificată)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (chineză tradițională)"
@ -5935,7 +5939,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Nu este un fișier csv valid"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Numele de utilizator sau parola greșite"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Swedish\n"
"Language: sv\n"
@ -257,19 +257,19 @@ msgstr "Tillgänglig för lån"
msgid "Approved"
msgstr "Godkänd"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "Recensioner"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "Kommentarer"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "Citat"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "Allt annat"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norska (Norska)"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português d Brasil (Brasiliansk Portugisiska)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Europeisk Portugisiska)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Rumänien (Rumänska)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska (Svenska)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Förenklad Kinesiska)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Traditionell Kinesiska)"
@ -5907,7 +5911,7 @@ msgstr "%(title)s: %(subtitle)s"
msgid "Not a valid csv file"
msgstr "Inte en giltig csv-fil"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "Användarnamnet eller lösenordet är felaktigt"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Chinese Simplified\n"
"Language: zh\n"
@ -257,19 +257,19 @@ msgstr "可借阅"
msgid "Approved"
msgstr "已通过"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "书评"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr "评论"
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr "引用"
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr "所有其它内容"
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr "Norsk挪威语"
#: bookwyrm/settings.py:292
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil巴西葡萄牙语"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:294
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu欧洲葡萄牙语"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:295
msgid "Română (Romanian)"
msgstr "Română (罗马尼亚语)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr "Svenska瑞典语"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文(繁体中文)"
@ -5879,7 +5883,7 @@ msgstr "%(title)s%(subtitle)s"
msgid "Not a valid csv file"
msgstr "不是有效的 csv 文件"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr "用户名或密码不正确"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-29 18:24+0000\n"
"PO-Revision-Date: 2022-07-29 20:00\n"
"POT-Creation-Date: 2022-08-02 17:52+0000\n"
"PO-Revision-Date: 2022-08-02 19:24\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Chinese Traditional\n"
"Language: zh\n"
@ -257,19 +257,19 @@ msgstr ""
msgid "Approved"
msgstr ""
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:289
#: bookwyrm/models/user.py:31 bookwyrm/templates/book/book.html:289
msgid "Reviews"
msgstr "書評"
#: bookwyrm/models/user.py:33
#: bookwyrm/models/user.py:32
msgid "Comments"
msgstr ""
#: bookwyrm/models/user.py:34
#: bookwyrm/models/user.py:33
msgid "Quotations"
msgstr ""
#: bookwyrm/models/user.py:35
#: bookwyrm/models/user.py:34
msgid "Everything else"
msgstr ""
@ -334,26 +334,30 @@ msgid "Norsk (Norwegian)"
msgstr ""
#: bookwyrm/settings.py:292
msgid "Português do Brasil (Brazilian Portuguese)"
msgid "Polski (Polish)"
msgstr ""
#: bookwyrm/settings.py:293
msgid "Português Europeu (European Portuguese)"
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr ""
#: bookwyrm/settings.py:294
msgid "Română (Romanian)"
msgid "Português Europeu (European Portuguese)"
msgstr ""
#: bookwyrm/settings.py:295
msgid "Svenska (Swedish)"
msgid "Română (Romanian)"
msgstr ""
#: bookwyrm/settings.py:296
msgid "Svenska (Swedish)"
msgstr ""
#: bookwyrm/settings.py:297
msgid "简体中文 (Simplified Chinese)"
msgstr "簡體中文"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:298
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文"
@ -5877,7 +5881,7 @@ msgstr ""
msgid "Not a valid csv file"
msgstr "不是有效的 csv 檔案"
#: bookwyrm/views/landing/login.py:70
#: bookwyrm/views/landing/login.py:68
msgid "Username or password are incorrect"
msgstr ""

View file

@ -25,8 +25,9 @@ pytz>=2021.1
boto3==1.17.88
django-storages==1.11.1
django-redis==5.2.0
opentelemetry-api==1.8.0
opentelemetry-sdk==1.8.0
opentelemetry-exporter-otlp-proto-grpc==1.8.0
opentelemetry-instrumentation-django==0.27b0
opentelemetry-instrumentation-celery==0.27b0
opentelemetry-api==1.11.1
opentelemetry-exporter-otlp-proto-grpc==1.11.1
opentelemetry-instrumentation-celery==0.30b1
opentelemetry-instrumentation-django==0.30b1
opentelemetry-sdk==1.11.1
protobuf==3.20.*