Merge branch 'main' into import-limit

This commit is contained in:
Mouse Reeve 2022-12-16 12:44:57 -08:00 committed by GitHub
commit d4351cfcb4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
121 changed files with 5402 additions and 2951 deletions

View file

@ -194,6 +194,11 @@ class ActivityObject:
try:
if issubclass(type(v), ActivityObject):
data[k] = v.serialize()
elif isinstance(v, list):
data[k] = [
e.serialize() if issubclass(type(e), ActivityObject) else e
for e in v
]
except TypeError:
pass
data = {k: v for (k, v) in data.items() if v is not None and k not in omit}
@ -306,7 +311,9 @@ class Link(ActivityObject):
def serialize(self, **kwargs):
"""remove fields"""
omit = ("id", "type", "@context")
omit = ("id", "@context")
if self.type == "Link":
omit += ("type",)
return super().serialize(omit=omit)

View file

@ -19,6 +19,8 @@ class BookData(ActivityObject):
viaf: str = None
wikidata: str = None
asin: str = None
aasin: str = None
isfdb: str = None
lastEditedBy: str = None
links: List[str] = field(default_factory=lambda: [])
fileLinks: List[str] = field(default_factory=lambda: [])

View file

@ -18,6 +18,12 @@ def email_data():
}
def test_email(user):
"""Just an admin checking if emails are sending"""
data = email_data()
send_email(user.email, *format_email("test", data))
def email_confirmation_email(user):
"""newly registered users confirm email address"""
data = email_data()

View file

@ -55,11 +55,45 @@ class CreateInviteForm(CustomForm):
class SiteForm(CustomForm):
class Meta:
model = models.SiteSettings
exclude = ["admin_code", "install_mode"]
fields = [
"name",
"instance_tagline",
"instance_description",
"instance_short_description",
"default_theme",
"code_of_conduct",
"privacy_policy",
"impressum",
"show_impressum",
"logo",
"logo_small",
"favicon",
"support_link",
"support_title",
"admin_email",
"footer_item",
]
widgets = {
"instance_short_description": forms.TextInput(
attrs={"aria-describedby": "desc_instance_short_description"}
),
}
class RegistrationForm(CustomForm):
class Meta:
model = models.SiteSettings
fields = [
"allow_registration",
"allow_invite_requests",
"registration_closed_text",
"invite_request_text",
"invite_request_question",
"invite_question_text",
"require_confirm_email",
]
widgets = {
"require_confirm_email": forms.CheckboxInput(
attrs={"aria-describedby": "desc_require_confirm_email"}
),
@ -69,6 +103,23 @@ class SiteForm(CustomForm):
}
class RegistrationLimitedForm(CustomForm):
class Meta:
model = models.SiteSettings
fields = [
"registration_closed_text",
"invite_request_text",
"invite_request_question",
"invite_question_text",
]
widgets = {
"invite_request_text": forms.Textarea(
attrs={"aria-describedby": "desc_invite_request_text"}
),
}
class ThemeForm(CustomForm):
class Meta:
model = models.Theme

View file

@ -21,6 +21,7 @@ class AuthorForm(CustomForm):
"inventaire_id",
"librarything_key",
"goodreads_key",
"isfdb",
"isni",
]
widgets = {

View file

@ -18,19 +18,30 @@ class CoverForm(CustomForm):
class EditionForm(CustomForm):
class Meta:
model = models.Edition
exclude = [
"remote_id",
"origin_id",
"created_date",
"updated_date",
"edition_rank",
"authors",
"parent_work",
"shelves",
"connector",
"search_vector",
"links",
"file_links",
fields = [
"title",
"subtitle",
"description",
"series",
"series_number",
"languages",
"subjects",
"publishers",
"first_published_date",
"published_date",
"cover",
"physical_format",
"physical_format_detail",
"pages",
"isbn_13",
"isbn_10",
"openlibrary_key",
"inventaire_id",
"goodreads_key",
"oclc_number",
"asin",
"aasin",
"isfdb",
]
widgets = {
"title": forms.TextInput(attrs={"aria-describedby": "desc_title"}),
@ -73,10 +84,15 @@ class EditionForm(CustomForm):
"inventaire_id": forms.TextInput(
attrs={"aria-describedby": "desc_inventaire_id"}
),
"goodreads_key": forms.TextInput(
attrs={"aria-describedby": "desc_goodreads_key"}
),
"oclc_number": forms.TextInput(
attrs={"aria-describedby": "desc_oclc_number"}
),
"ASIN": forms.TextInput(attrs={"aria-describedby": "desc_ASIN"}),
"AASIN": forms.TextInput(attrs={"aria-describedby": "desc_AASIN"}),
"isfdb": forms.TextInput(attrs={"aria-describedby": "desc_isfdb"}),
}

View file

@ -17,8 +17,8 @@ class Importer:
("id", ["id", "book id"]),
("title", ["title"]),
("authors", ["author", "authors", "primary author"]),
("isbn_10", ["isbn10", "isbn"]),
("isbn_13", ["isbn13", "isbn", "isbns"]),
("isbn_10", ["isbn10", "isbn", "isbn/uid"]),
("isbn_13", ["isbn13", "isbn", "isbns", "isbn/uid"]),
("shelf", ["shelf", "exclusive shelf", "read status", "bookshelf"]),
("review_name", ["review name"]),
("review_body", ["my review", "review"]),

View file

@ -0,0 +1,19 @@
""" manually confirm e-mail of user """
from django.core.management.base import BaseCommand
from bookwyrm import models
class Command(BaseCommand):
"""command-line options"""
help = "Manually confirm email for user"
def add_arguments(self, parser):
parser.add_argument("username")
def handle(self, *args, **options):
name = options["username"]
user = models.User.objects.get(localname=name)
user.reactivate()
self.stdout.write(self.style.SUCCESS("User's email is now confirmed."))

View file

@ -8,54 +8,64 @@ from bookwyrm import models
def init_groups():
"""permission levels"""
groups = ["admin", "moderator", "editor"]
groups = ["admin", "owner", "moderator", "editor"]
for group in groups:
Group.objects.create(name=group)
Group.objects.get_or_create(name=group)
def init_permissions():
"""permission types"""
permissions = [
{
"codename": "manage_registration",
"name": "allow or prevent user registration",
"groups": ["admin"],
},
{
"codename": "system_administration",
"name": "technical controls",
"groups": ["admin"],
},
{
"codename": "edit_instance_settings",
"name": "change the instance info",
"groups": ["admin"],
"groups": ["admin", "owner"],
},
{
"codename": "set_user_group",
"name": "change what group a user is in",
"groups": ["admin", "moderator"],
"groups": ["admin", "owner", "moderator"],
},
{
"codename": "control_federation",
"name": "control who to federate with",
"groups": ["admin", "moderator"],
"groups": ["admin", "owner", "moderator"],
},
{
"codename": "create_invites",
"name": "issue invitations to join",
"groups": ["admin", "moderator"],
"groups": ["admin", "owner", "moderator"],
},
{
"codename": "moderate_user",
"name": "deactivate or silence a user",
"groups": ["admin", "moderator"],
"groups": ["admin", "owner", "moderator"],
},
{
"codename": "moderate_post",
"name": "delete other users' posts",
"groups": ["admin", "moderator"],
"groups": ["admin", "owner", "moderator"],
},
{
"codename": "edit_book",
"name": "edit book info",
"groups": ["admin", "moderator", "editor"],
"groups": ["admin", "owner", "moderator", "editor"],
},
]
content_type = ContentType.objects.get_for_model(models.User)
for permission in permissions:
permission_obj = Permission.objects.create(
permission_obj, _ = Permission.objects.get_or_create(
codename=permission["codename"],
name=permission["name"],
content_type=content_type,

View file

@ -0,0 +1,23 @@
# Generated by Django 3.2.16 on 2022-11-25 19:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0166_sitesettings_imports_enabled"),
]
operations = [
migrations.AddField(
model_name="sitesettings",
name="impressum",
field=models.TextField(default="Add a impressum here."),
),
migrations.AddField(
model_name="sitesettings",
name="show_impressum",
field=models.BooleanField(default=False),
),
]

View file

@ -0,0 +1,28 @@
# Generated by Django 3.2.16 on 2022-12-05 17:01
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0167_auto_20221125_1900"),
]
operations = [
migrations.AddField(
model_name="author",
name="aasin",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
migrations.AddField(
model_name="book",
name="aasin",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
]

View file

@ -0,0 +1,63 @@
""" I added two new permission types and a new group to the management command that
creates the database on install, this creates them for existing instances """
# Generated by Django 3.2.16 on 2022-12-05 23:31
from django.db import migrations
def create_groups_and_perms(apps, schema_editor):
"""create the new "owner" group and "system admin" permission"""
db_alias = schema_editor.connection.alias
group_model = apps.get_model("auth", "Group")
# Add the "owner" group, if needed
owner_group, group_created = group_model.objects.using(db_alias).get_or_create(
name="owner"
)
# Create perms, if needed
user_model = apps.get_model("bookwyrm", "User")
content_type_model = apps.get_model("contenttypes", "ContentType")
content_type = content_type_model.objects.get_for_model(user_model)
perms_model = apps.get_model("auth", "Permission")
reg_perm, perm_created = perms_model.objects.using(db_alias).get_or_create(
codename="manage_registration",
name="allow or prevent user registration",
content_type=content_type,
)
admin_perm, admin_perm_created = perms_model.objects.using(db_alias).get_or_create(
codename="system_administration",
name="technical controls",
content_type=content_type,
)
# Add perms to the group if anything was created
if group_created or perm_created or admin_perm_created:
perms = [
"edit_instance_settings",
"set_user_group",
"control_federation",
"create_invites",
"moderate_user",
"moderate_post",
"edit_book",
]
owner_group.permissions.set(
perms_model.objects.using(db_alias).filter(codename__in=perms).all()
)
# also extend these perms to admins
# This is get or create so the tests don't fail -- it should already exist
admin_group, _ = group_model.objects.using(db_alias).get_or_create(name="admin")
admin_group.permissions.add(reg_perm)
admin_group.permissions.add(admin_perm)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0167_auto_20221125_1900"),
]
operations = [
migrations.RunPython(create_groups_and_perms, migrations.RunPython.noop)
]

View file

@ -0,0 +1,28 @@
# Generated by Django 3.2.16 on 2022-12-06 09:02
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0168_auto_20221205_1701"),
]
operations = [
migrations.AddField(
model_name="author",
name="isfdb",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
migrations.AddField(
model_name="book",
name="isfdb",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
]

View file

@ -0,0 +1,13 @@
# Generated by Django 3.2.16 on 2022-12-11 20:00
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0168_auto_20221205_2331"),
("bookwyrm", "0169_auto_20221206_0902"),
]
operations = []

View file

@ -24,6 +24,9 @@ class Author(BookDataModel):
gutenberg_id = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True
)
isfdb = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True
)
# idk probably other keys would be useful here?
born = fields.DateTimeField(blank=True, null=True)
died = fields.DateTimeField(blank=True, null=True)
@ -60,6 +63,11 @@ class Author(BookDataModel):
"""generate the url from the openlibrary id"""
return f"https://openlibrary.org/authors/{self.openlibrary_key}"
@property
def isfdb_link(self):
"""generate the url from the isni id"""
return f"https://www.isfdb.org/cgi-bin/ea.cgi?{self.isfdb}"
def get_remote_id(self):
"""editions and works both use "book" instead of model_name"""
return f"https://{DOMAIN}/author/{self.id}"

View file

@ -55,6 +55,12 @@ class BookDataModel(ObjectMixin, BookWyrmModel):
asin = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True
)
aasin = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True
)
isfdb = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True
)
search_vector = SearchVectorField(null=True)
last_edited_by = fields.ForeignKey(
@ -73,6 +79,11 @@ class BookDataModel(ObjectMixin, BookWyrmModel):
"""generate the url from the inventaire id"""
return f"https://inventaire.io/entity/{self.inventaire_id}"
@property
def isfdb_link(self):
"""generate the url from the isfdb id"""
return f"https://www.isfdb.org/cgi-bin/title.cgi?{self.isfdb}"
class Meta:
"""can't initialize this model, that wouldn't make sense"""

View file

@ -13,6 +13,7 @@ from django.forms import ClearableFileInput, ImageField as DjangoImageField
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.utils.encoding import filepath_to_uri
from markdown import markdown
from bookwyrm import activitypub
from bookwyrm.connectors import get_image
@ -499,6 +500,9 @@ class HtmlField(ActivitypubFieldMixin, models.TextField):
return None
return clean(value)
def field_to_activity(self, value):
return markdown(value) if value else value
class ArrayField(ActivitypubFieldMixin, DjangoArrayField):
"""activitypub-aware array field"""

View file

@ -62,6 +62,8 @@ class SiteSettings(SiteModel):
)
code_of_conduct = models.TextField(default="Add a code of conduct here.")
privacy_policy = models.TextField(default="Add a privacy policy here.")
impressum = models.TextField(default="Add a impressum here.")
show_impressum = models.BooleanField(default=False)
# registration
allow_registration = models.BooleanField(default=False)

View file

@ -373,6 +373,7 @@ class User(OrderedCollectionPageMixin, AbstractUser):
"""We don't actually delete the database entry"""
# pylint: disable=attribute-defined-outside-init
self.is_active = False
self.avatar = ""
# skip the logic in this class's save()
super().save(*args, **kwargs)
@ -390,7 +391,10 @@ class User(OrderedCollectionPageMixin, AbstractUser):
self.is_active = True
self.deactivation_reason = None
self.allow_reactivation = False
super().save(broadcast=False)
super().save(
broadcast=False,
update_fields=["deactivation_reason", "is_active", "allow_reactivation"],
)
@property
def local_path(self):

View file

@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _
env = Env()
env.read_env()
DOMAIN = env("DOMAIN")
VERSION = "0.5.2"
VERSION = "0.5.3"
RELEASE_API = env(
"RELEASE_API",
@ -21,7 +21,7 @@ RELEASE_API = env(
PAGE_LENGTH = env("PAGE_LENGTH", 15)
DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English")
JS_CACHE = "e678183c"
JS_CACHE = "ad848b97"
# email
EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend")

View file

@ -140,6 +140,10 @@ button:focus-visible .button-invisible-overlay {
opacity: 1;
}
button.button-paragraph {
vertical-align: middle;
}
/** States
******************************************************************************/

View file

@ -81,7 +81,19 @@ details.dropdown .dropdown-menu a:focus-visible {
details.details-panel {
box-shadow: 0 0 0 1px $border;
transition: box-shadow 0.2s ease;
padding: 0.75rem;
padding: 0;
> * {
padding: 0.75rem;
}
summary {
position: relative;
.details-close {
padding: 0.75rem;
}
}
}
details[open].details-panel,
@ -89,10 +101,6 @@ details.details-panel:hover {
box-shadow: 0 0 0 1px $border;
}
details.details-panel summary {
position: relative;
}
details summary .details-close {
position: absolute;
right: 0;

View file

@ -15,6 +15,8 @@ $danger: #872538;
$danger-light: #481922;
$light: #393939;
$red: #ffa1b4;
$black: #000;
$white-ter: hsl(0, 0%, 90%);
/* book cover standins */
$no-cover-color: #002549;
@ -56,9 +58,12 @@ $link-active: $white-bis;
$link-light: #0d1c26;
/* bulma overrides */
$body-background-color: rgb(17, 18, 18);
$background: $background-secondary;
$menu-item-active-background-color: $link-background;
$navbar-dropdown-item-hover-color: $white;
$info-light: $background-body;
$info-dark: #72b6ee;
/* These element's colors are hardcoded, probably a bug in bulma? */
@media screen and (min-width: 769px) {
@ -74,7 +79,7 @@ $navbar-dropdown-item-hover-color: $white;
}
/* misc */
$shadow: 0 0.5em 1em -0.125em rgba($black, 0.2), 0 0px 0 1px rgba($black, 0.02);
$shadow: 0 0.5em 0.5em -0.125em rgba($black, 0.2), 0 0px 0 1px rgba($black, 0.02);
$card-header-shadow: 0 0.125em 0.25em rgba($black, 0.1);
$invisible-overlay-background-color: rgba($black, 0.66);
$progress-value-background-color: $border-light;
@ -92,6 +97,7 @@ $family-secondary: $family-sans-serif;
color: $grey-light !important;
}
#qrcode svg {
background-color: #a6a6a6;
}

View file

@ -48,6 +48,12 @@ let BookWyrm = new (class {
document
.querySelector("#barcode-scanner-modal")
.addEventListener("open", this.openBarcodeScanner.bind(this));
document
.querySelectorAll('form[name="register"]')
.forEach((form) =>
form.addEventListener("submit", (e) => this.setPreferredTimezone(e, form))
);
}
/**
@ -628,9 +634,9 @@ let BookWyrm = new (class {
}
function toggleStatus(status) {
for (const child of statusNode.children) {
BookWyrm.toggleContainer(child, !child.classList.contains(status));
}
const template = document.querySelector(`#barcode-${status}`);
statusNode.replaceChildren(template ? template.content.cloneNode(true) : null);
}
function initBarcodes(cameraId = null) {
@ -785,4 +791,16 @@ let BookWyrm = new (class {
initBarcodes();
}
/**
* Set preferred timezone in register form.
*
* @param {Event} event - `submit` event fired by the register form.
* @return {undefined}
*/
setPreferredTimezone(event, form) {
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
form.querySelector('input[name="preferred_timezone"]').value = tz;
}
})();

View file

@ -0,0 +1,15 @@
{% extends 'about/layout.html' %}
{% load i18n %}
{% block title %}{% trans "Impressum" %}{% endblock %}
{% block about_content %}
<div class="block content">
<h2>{% trans "Impressum" %}</h2>
<div class="content">
{{ site.impressum | safe }}
</div>
</div>
{% endblock %}

View file

@ -47,6 +47,14 @@
{% trans "Privacy Policy" %}
</a>
</li>
{% if site.show_impressum %}
<li>
{% url 'impressum' as path %}
<a href="{{ path }}" {% if request.path in path %}class="is-active"{% endif %}>
{% trans "Impressum" %}
</a>
</li>
{% endif %}
</ul>
</nav>

View file

@ -53,7 +53,7 @@
{% trans "Share this page" %}
</span>
</summary>
<div class="columns mt-3">
<div class="columns">
<div class="column is-three-fifths is-offset-one-fifth">
{% if year_key %}
@ -123,16 +123,18 @@
</h2>
<p class="subtitle is-5">{% trans "Thats great!" %}</p>
<p class="title is-4 is-serif">
{% blocktrans with pages=pages_average|intcomma %}That makes an average of {{ pages }} pages per book.{% endblocktrans %}
</p>
{% if pages > 0 %}
<p class="title is-4 is-serif">
{% blocktrans with pages=pages_average|intcomma %}That makes an average of {{ pages }} pages per book.{% endblocktrans %}
</p>
{% endif %}
{% if no_page_number %}
<p class="subtitle is-6">
{% blocktrans trimmed count counter=no_page_number %}
({{ no_page_number }} book doesnt have pages)
(No page data was available for {{ no_page_number }} book)
{% plural %}
({{ no_page_number }} books dont have pages)
(No page data was available for {{ no_page_number }} books)
{% endblocktrans %}
</p>
{% endif %}

View file

@ -28,7 +28,7 @@
<meta itemprop="name" content="{{ author.name }}">
{% firstof author.aliases author.born author.died as details %}
{% firstof author.wikipedia_link author.openlibrary_key author.inventaire_id author.isni as links %}
{% firstof author.wikipedia_link author.openlibrary_key author.inventaire_id author.isni author.isfdb as links %}
{% if details or links %}
<div class="column is-3">
{% if details %}
@ -81,6 +81,14 @@
</div>
{% endif %}
{% if author.isfdb %}
<div class="mt-1">
<a itemprop="sameAs" href="{{ author.isfdb_link }}" rel="nofollow noopener noreferrer" target="_blank">
{% trans "View on ISFDB" %}
</a>
</div>
{% endif %}
{% trans "Load data" as button_text %}
{% if author.openlibrary_key %}
<div class="mt-1 is-flex">
@ -128,6 +136,14 @@
</a>
</div>
{% endif %}
{% if author.isfdb %}
<div>
<a itemprop="sameAs" href="https://www.isfdb.org/cgi-bin/ea.cgi?{{ author.isfdb }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View ISFDB entry" %}
</a>
</div>
{% endif %}
</div>
</section>
{% endif %}
@ -144,7 +160,7 @@
{% for book in books %}
{% with book=book|author_edition:author %}
<div class="column is-one-fifth-tablet is-half-mobile is-flex is-flex-direction-column">
<div class="is-flex-grow-1">
<div class="is-flex-grow-1 mb-3">
{% include 'landing/small-book.html' with book=book %}
</div>
{% include 'snippets/shelve_button/shelve_button.html' with book=book %}

View file

@ -101,6 +101,13 @@
{% include 'snippets/form_errors.html' with errors_list=form.goodreads_key.errors id="desc_goodreads_key" %}
</div>
<div class="field">
<label class="label" for="id_isfdb">{% trans "ISFDB:" %}</label>
{{ form.isfdb }}
{% include 'snippets/form_errors.html' with errors_list=form.isfdb.errors id="desc_isfdb" %}
</div>
<div class="field">
<label class="label" for="id_isni">{% trans "ISNI:" %}</label>
{{ form.isni }}

View file

@ -25,7 +25,7 @@
<div class="block" itemscope itemtype="https://schema.org/Book">
<div class="columns is-mobile">
<div class="column">
<h1 class="title" itemprop="name">
<h1 class="title" itemprop="name" dir="auto">
{{ book.title }}
</h1>
@ -37,7 +37,7 @@
content="{{ book.subtitle | escape }}"
>
<span class="has-text-weight-bold">
<span class="has-text-weight-bold" dir="auto">
{{ book.subtitle }}
</span>
{% endif %}
@ -52,7 +52,7 @@
{% endif %}
{% if book.authors.exists %}
<div class="subtitle">
<div class="subtitle" dir="auto">
{% trans "by" %} {% include 'snippets/authors.html' with book=book %}
</div>
{% endif %}
@ -135,7 +135,7 @@
{% trans "View on OpenLibrary" %}
</a>
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
<button class="button is-small" type="button" data-modal-open="openlibrary_sync">
<button class="button is-small button-paragraph" type="button" data-modal-open="openlibrary_sync">
<span class="icon icon-download" title="{{ button_text }}"></span>
<span class="is-sr-only-mobile">{{ button_text }}</span>
</button>
@ -150,7 +150,7 @@
</a>
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
<button class="button is-small" type="button" data-modal-open="inventaire_sync">
<button class="button is-small button-paragraph" type="button" data-modal-open="inventaire_sync">
<span class="icon icon-download" title="{{ button_text }}"></span>
<span class="is-sr-only-mobile">{{ button_text }}</span>
</button>
@ -158,6 +158,13 @@
{% endif %}
</p>
{% endif %}
{% if book.isfdb %}
<p>
<a href="{{ book.isfdb_link }}" target="_blank" rel="nofollow noopener noreferrer">
{% trans "View on ISFDB" %}
</a>
</p>
{% endif %}
</section>
</div>
@ -189,15 +196,15 @@
{% if user_authenticated and can_edit_book and not book|book_description %}
{% trans 'Add Description' as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="add_description" controls_uid=book.id focus="id_description" hide_active=True id="hide_description" %}
{% include 'snippets/toggle/open_button.html' with class="mb-2" text=button_text controls_text="add_description" controls_uid=book.id focus="id_description" hide_active=True id="hide_description" %}
<div class="box is-hidden" id="add_description_{{ book.id }}">
<form name="add-description" method="POST" action="{% url "add-description" book.id %}">
{% csrf_token %}
<p class="fields is-grouped">
<div class="field">
<label class="label" for="id_description_{{ book.id }}">{% trans "Description:" %}</label>
<textarea name="description" cols="None" rows="None" class="textarea" id="id_description_{{ book.id }}"></textarea>
</p>
</div>
<div class="field">
<button class="button is-primary" type="submit">{% trans "Save" %}</button>
{% trans "Cancel" as button_text %}
@ -231,7 +238,7 @@
{% for shelf in user_shelfbooks %}
<li class="box">
<a href="{{ shelf.shelf.local_path }}">{{ shelf.shelf.name }}</a>
<div class="mb-3">
<div class="is-pulled-right">
{% include 'snippets/shelf_selector.html' with shelf=shelf.shelf class="is-small" readthrough=readthrough %}
</div>
</li>

View file

@ -1,7 +1,7 @@
{% spaceless %}
{% load i18n %}
{% if book.isbn_13 or book.oclc_number or book.asin %}
{% if book.isbn_13 or book.oclc_number or book.asin or book.aasin or book.isfdb %}
<dl>
{% if book.isbn_13 %}
<div class="is-flex">
@ -23,6 +23,27 @@
<dd>{{ book.asin }}</dd>
</div>
{% endif %}
{% if book.aasin %}
<div class="is-flex">
<dt class="mr-1">{% trans "Audible ASIN:" %}</dt>
<dd>{{ book.aasin }}</dd>
</div>
{% endif %}
{% if book.isfdb %}
<div class="is-flex">
<dt class="mr-1">{% trans "ISFDB ID:" %}</dt>
<dd>{{ book.isfdb }}</dd>
</div>
{% endif %}
{% if book.goodreads_key %}
<div class="is-flex">
<dt class="mr-1">{% trans "Goodreads:" %}</dt>
<dd>{{ book.goodreads_key }}</dd>
</div>
{% endif %}
</dl>
{% endif %}
{% endspaceless %}

View file

@ -65,17 +65,17 @@
<input type="hidden" name="author-match-count" value="{{ author_matches|length }}">
<div class="column is-half">
{% for author in author_matches %}
<fieldset>
<fieldset class="block">
<legend class="title is-5 mb-1">
{% blocktrans with name=author.name %}Is "{{ name }}" one of these authors?{% endblocktrans %}
</legend>
{% with forloop.counter0 as counter %}
{% for match in author.matches %}
<label class="label">
<label class="label mb-0">
<input type="radio" name="author_match-{{ counter }}" value="{{ match.id }}" required>
{{ match.name }}
</label>
<p class="help ml-5 mb-2">
<p class="help ml-5 mb-0 mt-0">
{% with book_title=match.book_set.first.title alt_title=match.bio %}
{% if book_title %}
<a href="{{ match.local_path }}" target="_blank" rel="nofollow noopener noreferrer">{% blocktrans trimmed %}
@ -98,6 +98,9 @@
</label>
{% endwith %}
</fieldset>
{% if not forloop.last %}
<hr aria-hidden="true">
{% endif %}
{% endfor %}
</div>
{% else %}

View file

@ -81,7 +81,7 @@
{% include 'snippets/form_errors.html' with errors_list=form.languages.errors id="desc_languages" %}
</div>
<div>
<div class="field">
<label class="label" for="id_add_subjects">
{% trans "Subjects:" %}
</label>
@ -327,6 +327,15 @@
{% include 'snippets/form_errors.html' with errors_list=form.inventaire_id.errors id="desc_inventaire_id" %}
</div>
<div class="field">
<label class="label" for="id_goodreads_key">
{% trans "Goodreads key:" %}
</label>
{{ form.goodreads_key }}
{% include 'snippets/form_errors.html' with errors_list=form.goodreads_key.errors id="desc_goodreads_key" %}
</div>
<div class="field">
<label class="label" for="id_oclc_number">
{% trans "OCLC Number:" %}
@ -344,6 +353,24 @@
{% include 'snippets/form_errors.html' with errors_list=form.ASIN.errors id="desc_ASIN" %}
</div>
<div class="field">
<label class="label" for="id_aasin">
{% trans "Audible ASIN:" %}
</label>
{{ form.aasin }}
{% include 'snippets/form_errors.html' with errors_list=form.AASIN.errors id="desc_AASIN" %}
</div>
<div class="field">
<label class="label" for="id_isfdb">
{% trans "ISFDB ID:" %}
</label>
{{ form.isfdb }}
{% include 'snippets/form_errors.html' with errors_list=form.isfdb.errors id="desc_isfdb" %}
</div>
</div>
</section>
</div>

View file

@ -0,0 +1,12 @@
{% extends 'email/html_layout.html' %}
{% load i18n %}
{% block content %}
<p>
{% blocktrans trimmed %}
This is a test email.
{% endblocktrans %}
</p>
{% endblock %}

View file

@ -0,0 +1,4 @@
{% load i18n %}
{% blocktrans trimmed %}
Test email
{% endblocktrans %}

View file

@ -0,0 +1,9 @@
{% extends 'email/text_layout.html' %}
{% load i18n %}
{% block content %}
{% blocktrans trimmed %}
This is a test email.
{% endblocktrans %}
{% endblock %}

View file

@ -2,7 +2,7 @@
{% load i18n %}
{% block filter %}
<label class="label mt-2 mb-1">Status types</label>
<label class="label mb-1">Status types</label>
<div class="is-flex is-flex-direction-row is-flex-direction-column-mobile">
{% for name, value in feed_status_types_options %}

View file

@ -73,7 +73,7 @@
{% if site.invite_request_question %}
<div class="block">
<label for="id_answer_register" class="label">{{ site.invite_question_text }}</label>
<input type="answer" name="answer" maxlength="50" class="input" required="true" id="id_answer_register" aria-describedby="desc_answer_register">
<input type="text" name="answer" maxlength="255" class="input" required="true" id="id_answer_register" aria-describedby="desc_answer_register">
{% include 'snippets/form_errors.html' with errors_list=request_form.answer.errors id="desc_answer_register" %}
</div>
{% endif %}

View file

@ -13,6 +13,7 @@
<link rel="search" type="application/opensearchdescription+xml" href="{% url 'opensearch' %}" title="{% blocktrans with site_name=site.name %}{{ site_name }} search{% endblocktrans %}" />
<link rel="shortcut icon" type="image/x-icon" href="{% if site.favicon %}{% get_media_prefix %}{{ site.favicon }}{% else %}{% static "images/favicon.ico" %}{% endif %}">
<link rel="apple-touch-icon" href="{% if site.logo %}{{ media_full_url }}{{ site.logo }}{% else %}{% static "images/logo.png" %}{% endif %}">
{% if preview_images_enabled is True %}
<meta name="twitter:card" content="summary_large_image">

View file

@ -12,12 +12,16 @@
</p>
</div>
<div class="column is-narrow is-flex">
<div class="column is-narrow is-flex field is-grouped">
{% if request.user == list.user %}
<div class="control">
{% trans "Edit List" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="pencil" controls_text="edit_list" focus="edit_list_header" %}
</div>
{% endif %}
{% include "lists/bookmark_button.html" with list=list %}
<div class="control">
{% include "lists/bookmark_button.html" with list=list %}
</div>
</div>
</header>

View file

@ -51,7 +51,7 @@
{% endif %}
{% if not items.object_list.exists %}
<p>{% trans "This list is currently empty" %}</p>
<p class="block">{% trans "This list is currently empty." %}</p>
{% else %}
<ol start="{{ items.start_index }}" class="ordered-list">
{% for item in items %}

View file

@ -65,7 +65,7 @@
{# This happens if the list item was deleted #}
{% blocktrans trimmed %}
<a href="{{ related_user_link }}">{{ related_user }}</a>
added added a book to one of your lists
added a book to one of your lists
{% endblocktrans %}
{% elif related_list.curation != "curated" %}

View file

@ -44,7 +44,7 @@
{% csrf_token %}
<p>{% trans "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up." %}</p>
<div class="columns">
<section class="column is-narrow">
<section class="column">
<figure class="m-4" id="qrcode">{{ qrcode | safe }}</figure>
<details class="details-panel box">
<summary>

View file

@ -1,48 +1,46 @@
{% extends 'components/modal.html' %}
{% load i18n %}
{% block modal-title %}
{% blocktrans %}
Scan Barcode
{% endblocktrans %}
{% endblock %}
{% block modal-body %}
<div class="block">
<div id="barcode-scanner"></div>
</div>
<div id="barcode-camera-list" class="select is-small">
<select>
</select>
</div>
<div id="barcode-status" class="block">
<div class="grant-access is-hidden">
<span class="icon icon-lock"></span>
<span class="is-size-5">{% trans "Requesting camera..." %}</span><br/>
<span>{% trans "Grant access to the camera to scan a book's barcode." %}</span>
</div>
<div class="access-denied is-hidden">
<span class="icon icon-warning"></span>
<span class="is-size-5">Access denied</span><br/>
<span>{% trans "Could not access camera" %}</span>
</div>
<div class="scanning is-hidden">
<span class="icon icon-barcode"></span>
<span class="is-size-5">{% trans "Scanning..." context "barcode scanner" %}</span><br/>
<span>{% trans "Align your book's barcode with the camera." %}</span>
</div>
<div class="found is-hidden">
<span class="icon icon-check"></span>
<span class="is-size-5">{% trans "ISBN scanned" context "barcode scanner" %}</span><br/>
{% trans "Searching for book:" context "followed by ISBN" %} <span class="isbn"></span>...
</div>
</div>
{% endblock %}
{% block modal-footer %}
<button class="button" type="button" data-modal-close>{% trans "Cancel" %}</button>
{% endblock %}
{% extends 'components/modal.html' %}
{% load i18n %}
{% block modal-title %}
{% blocktrans %}
Scan Barcode
{% endblocktrans %}
{% endblock %}
{% block modal-body %}
<div class="block">
<div id="barcode-scanner"></div>
</div>
<div id="barcode-camera-list" class="select is-small">
<select>
</select>
</div>
<template id="barcode-grant-access">
<span class="icon icon-lock"></span>
<span class="is-size-5">{% trans "Requesting camera..." %}</span><br/>
<span>{% trans "Grant access to the camera to scan a book's barcode." %}</span>
</template>
<template id="barcode-access-denied">
<span class="icon icon-warning"></span>
<span class="is-size-5">Access denied</span><br/>
<span>{% trans "Could not access camera" %}</span>
</template>
<template id="barcode-scanning">
<span class="icon icon-barcode"></span>
<span class="is-size-5">{% trans "Scanning..." context "barcode scanner" %}</span><br/>
<span>{% trans "Align your book's barcode with the camera." %}</span>
</template>
<template id="barcode-found">
<span class="icon icon-check"></span>
<span class="is-size-5">{% trans "ISBN scanned" context "barcode scanner" %}</span><br/>
{% trans "Searching for book:" context "followed by ISBN" %} <span class="isbn"></span>...
</template>
<div id="barcode-status" class="block"></div>
{% endblock %}
{% block modal-footer %}
<button class="button" type="button" data-modal-close>{% trans "Cancel" %}</button>
{% endblock %}

View file

@ -58,7 +58,7 @@
<span class="details-close icon icon-x" aria-hidden="true"></span>
</summary>
<div class="mt-5">
<div>
<div class="is-flex is-flex-direction-row-reverse">
<ul class="is-flex-grow-1">
{% for result in result_set.results %}

View file

@ -145,7 +145,7 @@
<div class="block content">
<h2 class="title is-4">{% trans "Current Rules" %}</h2>
<details class="details-panel">
<details class="details-panel box">
<summary>
<span class="title is-5" role="heading" aria-level="3">
{% trans "Show rules" %} ({{ rules.count }})

View file

@ -0,0 +1,96 @@
{% extends 'settings/layout.html' %}
{% load humanize %}
{% load i18n %}
{% load celery_tags %}
{% block title %}{% trans "Email Configuration" %}{% endblock %}
{% block header %}{% trans "Email Configuration" %}{% endblock %}
{% block panel %}
{% if error %}
<div class="notification is-danger is-light">
<span class="icon icon-x" aria-hidden="true"></span>
<span>
{% trans "Error sending test email:" %}
{{ error }}
</span>
</div>
{% elif success %}
<div class="notification is-success is-light">
<span class="icon icon-check" aria-hidden="true"></span>
<span>
{% trans "Successfully sent test email." %}
</span>
</div>
{% endif %}
<section class="block content">
<dl>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Email sender:" %}
</dt>
<dd>
{{ email_sender }}
</dd>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Email backend:" %}
</dt>
<dd>
<code>{{ email_backend }}</code>
</dd>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Host:" %}
</dt>
<dd>
<code>{{ email_host }}</code>
</dd>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Host user:" %}
</dt>
<dd>
<code>{% firstof email_host_user "-" %}</code>
</dd>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Port:" %}
</dt>
<dd>
<code>{{ email_port }}</code>
</dd>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Use TLS:" %}
</dt>
<dd>
{{ email_use_tls|yesno }}
</dd>
<dt class="is-pulled-left mr-5 has-text-weight-bold">
{% trans "Use SSL:" %}
</dt>
<dd>
{{ email_use_ssl|yesno }}
</dd>
</dl>
</section>
<section class="block content box">
<p>
{% blocktrans trimmed with email=request.user.email %}
Send test email to {{ email }}
{% endblocktrans %}
</p>
<form action="{% url 'settings-email-config' %}" method="post">
{% csrf_token %}
<button type="submit" class="button is-success">
{% trans "Send test email" %}
</button>
</form>
</section>
{% endblock %}

View file

@ -81,12 +81,14 @@
{% url 'settings-imports' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Imports" %}</a>
</li>
</ul>
<ul class="menu-list">
<li>
{% url 'settings-celery' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Celery status" %}</a>
</li>
<li>
{% url 'settings-email-config' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Email Configuration" %}</a>
</li>
</ul>
{% endif %}
{% if perms.bookwyrm.edit_instance_settings %}
@ -101,10 +103,21 @@
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Site Settings" %}</a>
{% block site-subtabs %}{% endblock %}
</li>
<li>
{% if perms.bookwyrm.manage_registration %}
{% url 'settings-registration' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Registration" %}</a>
{% else %}
{% url 'settings-registration-limited' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Registration" %}</a>
{% endif %}
</li>
{% if perms.bookwyrm.system_administration %}
<li>
{% url 'settings-themes' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Themes" %}</a>
</li>
{% endif %}
</ul>
{% endif %}
</nav>

View file

@ -40,23 +40,23 @@
</h2>
</header>
<div class="column is-narrow">
<button type="button" class="button" data-modal-open="{{ domain_modal }}">
<button type="button" class="button is-small" data-modal-open="{{ domain_modal }}">
<span class="icon icon-pencil m-0-mobile" aria-hidden="treu"></span>
<span class="is-sr-only-mobile">{% trans "Set display name" %}</span>
</button>
</div>
</div>
<div class="block">
<details class="details-panel">
<details class="details-panel box">
<summary>
<span role="heading" aria-level="3" class="title is-6 mb-0">
<span role="heading" aria-level="3" class="title is-6">
{% trans "View links" %}
({{ domain.links.count }})
</span>
<span class="details-close icon icon-x" aria-hidden="true"></span>
</summary>
<div class="table-container mt-4">
<div class="table-container pt-0">
{% include "settings/link_domains/link_table.html" with links=domain.links.all|slice:10 %}
</div>
</details>

View file

@ -0,0 +1,83 @@
{% extends 'settings/layout.html' %}
{% load i18n %}
{% block title %}{% trans "Registration" %}{% endblock %}
{% block header %}{% trans "Registration" %}{% endblock %}
{% block panel %}
{% if success %}
<div class="notification is-success is-light">
<span class="icon icon-check" aria-hidden="true"></span>
<span>
{% trans "Settings saved" %}
</span>
</div>
{% endif %}
{% if form.errors %}
<div class="notification is-danger is-light">
<span class="icon icon-x" aria-hidden="true"></span>
<span>
{% trans "Unable to save settings" %}
</span>
</div>
{% endif %}
<form
action="{% url 'settings-registration' %}"
method="POST"
class="content"
enctype="multipart/form-data"
>
{% csrf_token %}
<section class="block box" id="registration">
<div class="field">
<label class="label" for="id_allow_registration">
{{ form.allow_registration }}
{% trans "Allow registration" %}
</label>
</div>
<div class="field">
<label class="label mb-0" for="id_require_confirm_email">
{{ form.require_confirm_email }}
{% trans "Require users to confirm email address" %}
</label>
<p class="help" id="desc_require_confirm_email">{% trans "(Recommended if registration is open)" %}</p>
</div>
<div class="field">
<label class="label" for="id_allow_invite_requests">
{{ form.allow_invite_requests }}
{% trans "Allow invite requests" %}
</label>
</div>
<div class="field">
<label class="label" for="id_invite_request_text">{% trans "Invite request text:" %}</label>
{{ form.invite_request_text }}
{% include 'snippets/form_errors.html' with errors_list=form.invite_request_text.errors id="desc_invite_request_text" %}
</div>
<div class="field">
<label class="label" for="id_invite_requests_question">
{{ form.invite_request_question }}
{% trans "Set a question for invite requests" %}
</label>
</div>
<div class="field">
<label class="label" for="id_invite_question_text">
{% trans "Question:" %}
{{ form.invite_question_text }}
</label>
</div>
<div class="field">
<label class="label" for="id_registration_closed_text">{% trans "Registration closed text:" %}</label>
{{ form.registration_closed_text }}
</div>
</section>
<footer class="block">
<button class="button is-primary" type="submit">{% trans "Save" %}</button>
</footer>
</form>
{% endblock %}

View file

@ -0,0 +1,81 @@
{% extends 'settings/layout.html' %}
{% load i18n %}
{% block title %}{% trans "Registration" %}{% endblock %}
{% block header %}{% trans "Registration" %}{% endblock %}
{% block panel %}
{% if success %}
<div class="notification is-success is-light">
<span class="icon icon-check" aria-hidden="true"></span>
<span>
{% trans "Settings saved" %}
</span>
</div>
{% endif %}
{% if form.errors %}
<div class="notification is-danger is-light">
<span class="icon icon-x" aria-hidden="true"></span>
<span>
{% trans "Unable to save settings" %}
</span>
</div>
{% endif %}
{% if site.allow_registration %}
<div class="notification">
{% trans "Registration is enabled on this instance" %}
</div>
{% else %}
<form
action="{% url 'settings-registration-limited' %}"
method="POST"
class="content"
enctype="multipart/form-data"
>
{% csrf_token %}
<section class="block box" id="registration">
{% if site.allow_invite_requests %}
<div class="field">
<label class="label" for="id_invite_request_text">{% trans "Invite request text:" %}</label>
{{ form.invite_request_text }}
{% include 'snippets/form_errors.html' with errors_list=form.invite_request_text.errors id="desc_invite_request_text" %}
</div>
<div class="field">
<label class="label" for="id_invite_requests_question">
{{ form.invite_request_question }}
{% trans "Set a question for invite requests" %}
</label>
</div>
<div class="field">
<label class="label" for="id_invite_question_text">
{% trans "Question:" %}
{{ form.invite_question_text }}
</label>
</div>
{% else %}
<input type="hidden" name="invite_request_text" value="{{ form.invite_request_text.value }}">
<input type="hidden" name="invite_request_question" value="{{ form.invite_request_question.value }}">
<input type="hidden" name="invite_question_text" value="{{ form.invite_question_text.value }}">
{% endif %}
{% if not site.allow_invite_requests and not site.allow_registration %}
<div class="field">
<label class="label" for="id_registration_closed_text">{% trans "Registration closed text:" %}</label>
{{ form.registration_closed_text }}
</div>
{% else %}
<input type="hidden" name="registration_closed_text" value="{{ form.registration_closed_text.value }}">
{% endif %}
</section>
<footer class="block">
<button class="button is-primary" type="submit">{% trans "Save" %}</button>
</footer>
</form>
{% endif %}
{% endblock %}

View file

@ -10,7 +10,6 @@
<li><a href="#instance-info">{% trans "Instance Info" %}</a></li>
<li><a href="#display">{% trans "Display" %}</a></li>
<li><a href="#footer">{% trans "Footer Content" %}</a></li>
<li><a href="#registration">{% trans "Registration" %}</a></li>
</ul>
{% endblock %}
@ -68,6 +67,19 @@
<label class="label" for="id_privacy_policy">{% trans "Privacy Policy:" %}</label>
{{ site_form.privacy_policy }}
</div>
<div class="field">
<label class="label" for="id_impressum">{% trans "Impressum:" %}</label>
{{ site_form.impressum }}
</div>
<div class="field is-horizontal">
<div class="field mr-2">
<label class="label" for="id_show_impressum">{% trans "Include impressum:" %}</label>
</div>
<div class="control">
{{ site_form.show_impressum }}
</div>
</div>
</div>
</section>
@ -128,55 +140,6 @@
</div>
</section>
<hr aria-hidden="true">
<section class="block" id="registration">
<h2 class="title is-4">{% trans "Registration" %}</h2>
<div class="box">
<div class="field">
<label class="label" for="id_allow_registration">
{{ site_form.allow_registration }}
{% trans "Allow registration" %}
</label>
</div>
<div class="field">
<label class="label mb-0" for="id_require_confirm_email">
{{ site_form.require_confirm_email }}
{% trans "Require users to confirm email address" %}
</label>
<p class="help" id="desc_require_confirm_email">{% trans "(Recommended if registration is open)" %}</p>
</div>
<div class="field">
<label class="label" for="id_allow_invite_requests">
{{ site_form.allow_invite_requests }}
{% trans "Allow invite requests" %}
</label>
</div>
<div class="field">
<label class="label" for="id_invite_requests_question">
{{ site_form.invite_request_question }}
{% trans "Set a question for invite requests" %}
</label>
</div>
<div class="field">
<label class="label" for="id_invite_question_text">
{% trans "Question:" %}
{{ site_form.invite_question_text }}
</label>
</div>
<div class="field">
<label class="label" for="id_registration_closed_text">{% trans "Registration closed text:" %}</label>
{{ site_form.registration_closed_text }}
</div>
<div class="field">
<label class="label" for="id_invite_request_text">{% trans "Invite request text:" %}</label>
{{ site_form.invite_request_text }}
{% include 'snippets/form_errors.html' with errors_list=site_form.invite_request_text.errors id="desc_invite_request_text" %}
</div>
</div>
</section>
<footer class="block">
<button class="button is-primary" type="submit">{% trans "Save" %}</button>
</footer>

View file

@ -10,7 +10,7 @@
{% csrf_token %}
<p>
{% blocktrans trimmed with username=user.localname %}
Are you sure you want to delete <strong>{{ username}}</strong>'s account? This action cannot be undone. To proceed, please enter your password to confirm deletion.
Are you sure you want to delete <strong>{{username}}</strong>'s account? This action cannot be undone. To proceed, please enter your password to confirm deletion.
{% endblocktrans %}
</p>
<div class="field">

View file

@ -134,7 +134,7 @@
{% endif %}
</div>
<div class="block">
<div class="block mt-2">
{% include 'shelf/edit_shelf_form.html' with controls_text="edit_shelf_form" %}
</div>

View file

@ -25,7 +25,7 @@
<span class="details-close icon icon-x is-{{ size|default:'normal' }}" aria-hidden="true"></span>
</summary>
<div class="mt-3">
<div>
<form id="filters" method="{{ method|default:'get' }}" action="{{ action|default:request.path }}">
{% if method == 'post' %}
{% csrf_token %}
@ -34,7 +34,7 @@
{% if sort %}
<input type="hidden" name="sort" value="{{ sort }}">
{% endif %}
<div class="mt-3 columns filters-fields is-align-items-stretch">
<div class="columns filters-fields is-align-items-stretch">
{% block filter_fields %}
{% endblock %}
</div>

View file

@ -29,6 +29,11 @@
<p>
<a href ="{% url 'privacy' %}">{% trans "Privacy Policy" %}</a>
</p>
{% if site.show_impressum %}
<p>
<a href ="{% url 'impressum' %}">{% trans "Impressum" %}</a>
</p>
{% endif %}
</div>
<div class="column content">
{% if site.support_link %}

View file

@ -58,6 +58,8 @@
</div>
</div>
<input type="hidden" name="preferred_timezone" />
<div class="field">
<div class="control">
<button class="button is-primary" type="submit">

View file

@ -32,7 +32,7 @@
<div class="card-footer-item">
{% trans "Reply" as button_text %}
{% include 'snippets/toggle/toggle_button.html' with controls_text="show_comment" controls_uid=status.id text=button_text icon_with_text="comment" class="is-small is-light toggle-button" focus="id_content_reply" %}
{% include 'snippets/toggle/toggle_button.html' with controls_text="show_comment" controls_uid=status.id text=button_text icon_with_text="comment" class="is-small is-light is-transparent toggle-button" focus="id_content_reply" %}
</div>
<div class="card-footer-item">
{% include 'snippets/boost_button.html' with status=status %}
@ -42,7 +42,7 @@
</div>
{% if not moderation_mode %}
<div class="card-footer-item">
{% include 'snippets/status/status_options.html' with class="is-small is-light" right=True %}
{% include 'snippets/status/status_options.html' with class="is-small is-light is-transparent" right=True %}
</div>
{% endif %}

View file

@ -66,6 +66,10 @@
<li{% if url == request.path or url == request.path|add:'/' %} class="is-active"{% endif %}>
<a href="{{ url }}">{% trans "Activity" %}</a>
</li>
{% url 'user-reviews-comments' user|username as url %}
<li{% if url == request.path or url == request.path|add:'/' %} class="is-active"{% endif %}>
<a href="{{ url }}">{% trans "Reviews and Comments" %}</a>
</li>
{% if is_self or user.goal.exists %}
{% now 'Y' as year %}
{% url 'user-goal' user|username year as url %}

View file

@ -0,0 +1,30 @@
{% extends 'user/layout.html' %}
{% load i18n %}
{% load utilities %}
{% block title %}{{ user.display_name }}{% endblock %}
{% block header %}
<div class="columns is-mobile">
<div class="column">
<h1 class="title">{% trans "Reviews and Comments" %}</h1>
</div>
</div>
{% endblock %}
{% block panel %}
<div>
{% for activity in activities %}
<div class="block" id="feed_{{ activity.id }}">
{% include 'snippets/status/status.html' with status=activity %}
</div>
{% endfor %}
{% if not activities %}
<div class="block">
<p>{% trans "No reviews or comments yet!" %}</p>
</div>
{% endif %}
{% include 'snippets/pagination.html' with page=activities path=path %}
</div>
{% endblock %}

View file

@ -21,6 +21,7 @@
"openlibrary_key": "OL29486417M",
"librarything_key": null,
"goodreads_key": null,
"isfdb": null,
"attachment": [
{
"url": "https://bookwyrm.social/images/covers/50202953._SX318_.jpg",

View file

@ -1,3 +1,3 @@
Title,Authors,Contributors,ISBN,Format,Read Status,Date Added,Last Date Read,Dates Read,Read Count,Moods,Pace,Character- or Plot-Driven?,Strong Character Development?,Loveable Characters?,Diverse Characters?,Flawed Characters?,Star Rating,Review,Content Warnings,Content Warning Description,Tags,Owned?
Always Coming Home,"Ursula K. Le Guin, Todd Barton, Margaret Chodos-Irvine","",,,to-read,2021/05/10,"","",0,"",,,,,,,,,"",,"",No
Subprime Attention Crisis,Tim Hwang,"",,,read,2021/05/10,"","",1,informative,fast,,,,,,5.0,"","","","",No
Title,Authors,Contributors,ISBN/UID,Format,Read Status,Date Added,Last Date Read,Dates Read,Read Count,Moods,Pace,Character- or Plot-Driven?,Strong Character Development?,Loveable Characters?,Diverse Characters?,Flawed Characters?,Star Rating,Review,Content Warnings,Content Warning Description,Tags,Owned?
Always Coming Home,"Ursula K. Le Guin, Todd Barton, Margaret Chodos-Irvine","",9780520227354,,to-read,2021/05/10,"","",0,"",,,,,,,,,"",,"",No
Subprime Attention Crisis,Tim Hwang,"",0374538654,,read,2021/05/10,"","",1,informative,fast,,,,,,5.0,"","","","",No

1 Title Authors Contributors ISBN ISBN/UID Format Read Status Date Added Last Date Read Dates Read Read Count Moods Pace Character- or Plot-Driven? Strong Character Development? Loveable Characters? Diverse Characters? Flawed Characters? Star Rating Review Content Warnings Content Warning Description Tags Owned?
2 Always Coming Home Ursula K. Le Guin, Todd Barton, Margaret Chodos-Irvine 9780520227354 to-read 2021/05/10 0 No
3 Subprime Attention Crisis Tim Hwang 0374538654 read 2021/05/10 1 informative fast 5.0 No

View file

@ -53,13 +53,19 @@ class StorygraphImport(TestCase):
models.ImportItem.objects.filter(job=import_job).order_by("index").all()
)
self.assertEqual(len(import_items), 2)
self.assertEqual(import_items[0].index, 0)
self.assertEqual(import_items[0].normalized_data["title"], "Always Coming Home")
self.assertEqual(import_items[1].index, 1)
always_book = import_items[0]
self.assertEqual(always_book.index, 0)
self.assertEqual(always_book.normalized_data["title"], "Always Coming Home")
self.assertEqual(always_book.isbn, "9780520227354")
subprime_book = import_items[1]
self.assertEqual(subprime_book.index, 1)
self.assertEqual(
import_items[1].normalized_data["title"], "Subprime Attention Crisis"
subprime_book.normalized_data["title"], "Subprime Attention Crisis"
)
self.assertEqual(import_items[1].normalized_data["rating"], "5.0")
self.assertEqual(subprime_book.normalized_data["rating"], "5.0")
self.assertEqual(subprime_book.isbn, "0374538654")
def test_handle_imported_book(self, *_):
"""storygraph import added a book, this adds related connections"""

View file

@ -12,7 +12,7 @@ class InitDB(TestCase):
def test_init_groups(self):
"""Create groups"""
initdb.init_groups()
self.assertEqual(Group.objects.count(), 3)
self.assertEqual(Group.objects.count(), 4)
self.assertTrue(Group.objects.filter(name="admin").exists())
self.assertTrue(Group.objects.filter(name="moderator").exists())
self.assertTrue(Group.objects.filter(name="editor").exists())
@ -87,7 +87,7 @@ class InitDB(TestCase):
command.handle()
# everything should have been called
self.assertEqual(Group.objects.count(), 3)
self.assertEqual(Group.objects.count(), 4)
self.assertTrue(Permission.objects.exists())
self.assertEqual(models.Connector.objects.count(), 3)
self.assertEqual(models.SiteSettings.objects.count(), 1)
@ -99,7 +99,7 @@ class InitDB(TestCase):
command.handle(limit="group")
# everything should have been called
self.assertEqual(Group.objects.count(), 3)
self.assertEqual(Group.objects.count(), 4)
self.assertEqual(models.Connector.objects.count(), 0)
self.assertEqual(models.SiteSettings.objects.count(), 0)
self.assertEqual(models.LinkDomain.objects.count(), 0)

View file

@ -383,16 +383,16 @@ class ActivitypubMixins(TestCase):
self.assertEqual(page_1.partOf, "http://fish.com/")
self.assertEqual(page_1.id, "http://fish.com/?page=1")
self.assertEqual(page_1.next, "http://fish.com/?page=2")
self.assertEqual(page_1.orderedItems[0]["content"], "test status 29")
self.assertEqual(page_1.orderedItems[1]["content"], "test status 28")
self.assertEqual(page_1.orderedItems[0]["content"], "<p>test status 29</p>")
self.assertEqual(page_1.orderedItems[1]["content"], "<p>test status 28</p>")
page_2 = to_ordered_collection_page(
models.Status.objects.all(), "http://fish.com/", page=2
)
self.assertEqual(page_2.partOf, "http://fish.com/")
self.assertEqual(page_2.id, "http://fish.com/?page=2")
self.assertEqual(page_2.orderedItems[0]["content"], "test status 14")
self.assertEqual(page_2.orderedItems[-1]["content"], "test status 0")
self.assertEqual(page_2.orderedItems[0]["content"], "<p>test status 14</p>")
self.assertEqual(page_2.orderedItems[-1]["content"], "<p>test status 0</p>")
def test_to_ordered_collection(self, *_):
"""convert a queryset into an ordered collection object"""
@ -420,8 +420,8 @@ class ActivitypubMixins(TestCase):
)
self.assertEqual(page_2.partOf, "http://fish.com/")
self.assertEqual(page_2.id, "http://fish.com/?page=2")
self.assertEqual(page_2.orderedItems[0]["content"], "test status 14")
self.assertEqual(page_2.orderedItems[-1]["content"], "test status 0")
self.assertEqual(page_2.orderedItems[0]["content"], "<p>test status 14</p>")
self.assertEqual(page_2.orderedItems[-1]["content"], "<p>test status 0</p>")
def test_broadcast_task(self, *_):
"""Should be calling asyncio"""

View file

@ -132,7 +132,7 @@ class Status(TestCase):
activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Note")
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["sensitive"], False)
def test_status_to_activity_tombstone(self, *_):
@ -156,7 +156,7 @@ class Status(TestCase):
activity = status.to_activity(pure=True)
self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Note")
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["sensitive"], False)
self.assertEqual(activity["attachment"], [])
@ -170,7 +170,7 @@ class Status(TestCase):
activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "GeneratedNote")
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["sensitive"], False)
self.assertEqual(len(activity["tag"]), 2)
@ -191,14 +191,14 @@ class Status(TestCase):
self.assertEqual(activity["type"], "Note")
self.assertEqual(activity["sensitive"], False)
self.assertIsInstance(activity["attachment"], list)
self.assertEqual(activity["attachment"][0].type, "Document")
self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue(
re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg",
activity["attachment"][0].url,
r"https:\/\/your.domain.here\/images\/covers\/test(_[A-z0-9]+)?.jpg",
activity["attachment"][0]["url"],
)
)
self.assertEqual(activity["attachment"][0].name, "Test Edition")
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
def test_comment_to_activity(self, *_):
"""subclass of the base model version with a "pure" serializer"""
@ -208,7 +208,7 @@ class Status(TestCase):
activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Comment")
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["inReplyToBook"], self.book.remote_id)
def test_comment_to_pure_activity(self, *_):
@ -223,14 +223,14 @@ class Status(TestCase):
activity["content"],
f'test content<p>(comment on <a href="{self.book.remote_id}">"Test Edition"</a>)</p>',
)
self.assertEqual(activity["attachment"][0].type, "Document")
self.assertEqual(activity["attachment"][0]["type"], "Document")
# self.assertTrue(
# re.match(
# r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg",
# activity["attachment"][0].url,
# )
# )
self.assertEqual(activity["attachment"][0].name, "Test Edition")
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
def test_quotation_to_activity(self, *_):
"""subclass of the base model version with a "pure" serializer"""
@ -243,8 +243,8 @@ class Status(TestCase):
activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Quotation")
self.assertEqual(activity["quote"], "a sickening sense")
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["quote"], "<p>a sickening sense</p>")
self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["inReplyToBook"], self.book.remote_id)
def test_quotation_to_pure_activity(self, *_):
@ -262,14 +262,14 @@ class Status(TestCase):
activity["content"],
f'a sickening sense <p>-- <a href="{self.book.remote_id}">"Test Edition"</a></p>test content',
)
self.assertEqual(activity["attachment"][0].type, "Document")
self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue(
re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg",
activity["attachment"][0].url,
activity["attachment"][0]["url"],
)
)
self.assertEqual(activity["attachment"][0].name, "Test Edition")
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
def test_review_to_activity(self, *_):
"""subclass of the base model version with a "pure" serializer"""
@ -285,7 +285,7 @@ class Status(TestCase):
self.assertEqual(activity["type"], "Review")
self.assertEqual(activity["rating"], 3)
self.assertEqual(activity["name"], "Review name")
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["inReplyToBook"], self.book.remote_id)
def test_review_to_pure_activity(self, *_):
@ -305,14 +305,14 @@ class Status(TestCase):
f'Review of "{self.book.title}" (3 stars): Review\'s name',
)
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["attachment"][0].type, "Document")
self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue(
re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg",
activity["attachment"][0].url,
activity["attachment"][0]["url"],
)
)
self.assertEqual(activity["attachment"][0].name, "Test Edition")
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
def test_review_to_pure_activity_no_rating(self, *_):
"""subclass of the base model version with a "pure" serializer"""
@ -330,14 +330,14 @@ class Status(TestCase):
f'Review of "{self.book.title}": Review name',
)
self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["attachment"][0].type, "Document")
self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue(
re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg",
activity["attachment"][0].url,
activity["attachment"][0]["url"],
)
)
self.assertEqual(activity["attachment"][0].name, "Test Edition")
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
def test_reviewrating_to_pure_activity(self, *_):
"""subclass of the base model version with a "pure" serializer"""
@ -353,14 +353,14 @@ class Status(TestCase):
activity["content"],
f'rated <em><a href="{self.book.remote_id}">{self.book.title}</a></em>: 3 stars',
)
self.assertEqual(activity["attachment"][0].type, "Document")
self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue(
re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg",
activity["attachment"][0].url,
activity["attachment"][0]["url"],
)
)
self.assertEqual(activity["attachment"][0].name, "Test Edition")
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
def test_favorite(self, *_):
"""fav a status"""

View file

@ -0,0 +1,46 @@
""" test for app action functionality """
from unittest.mock import patch
from django.contrib.auth.models import Group
from django.template.response import TemplateResponse
from django.test import TestCase
from django.test.client import RequestFactory
from bookwyrm import models, views
from bookwyrm.management.commands import initdb
from bookwyrm.tests.validate_html import validate_html
class EmailConfigViews(TestCase):
"""every response to a get request, html or json"""
# pylint: disable=invalid-name
def setUp(self):
"""we need basic test data and mocks"""
self.factory = RequestFactory()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
"bookwyrm.activitystreams.populate_stream_task.delay"
), patch("bookwyrm.lists_stream.populate_lists_task.delay"):
self.local_user = models.User.objects.create_user(
"mouse@local.com",
"mouse@mouse.mouse",
"password",
local=True,
localname="mouse",
)
initdb.init_groups()
initdb.init_permissions()
group = Group.objects.get(name="admin")
self.local_user.groups.set([group])
models.SiteSettings.objects.create()
def test_email_config_get(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.EmailConfig.as_view()
request = self.factory.get("")
request.user = self.local_user
result = view(request)
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
self.assertEqual(result.status_code, 200)

View file

@ -14,6 +14,7 @@ from bookwyrm.tests.validate_html import validate_html
class SiteSettingsViews(TestCase):
"""Edit site settings"""
# pylint: disable=invalid-name
def setUp(self):
"""we need basic test data and mocks"""
self.factory = RequestFactory()
@ -56,6 +57,8 @@ class SiteSettingsViews(TestCase):
form.data["invite_request_text"] = "blah"
form.data["code_of_conduct"] = "blah"
form.data["privacy_policy"] = "blah"
form.data["show_impressum"] = False
form.data["impressum"] = "bleh"
request = self.factory.post("", form.data)
request.user = self.local_user

View file

@ -1,6 +1,7 @@
""" test for app action functionality """
from unittest.mock import patch
from django.contrib.auth.models import AnonymousUser
from django.http import Http404
from django.template.response import TemplateResponse
from django.test import TestCase
from django.test.client import RequestFactory
@ -77,6 +78,28 @@ class LandingViews(TestCase):
validate_html(result.render())
self.assertEqual(result.status_code, 200)
def test_impressum_page_off(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.impressum
request = self.factory.get("")
request.user = self.local_user
with self.assertRaises(Http404):
view(request)
def test_impressum_page_on(self):
"""there are so many views, this just makes sure it LOADS"""
site = models.SiteSettings.objects.get()
site.show_impressum = True
site.save()
view = views.impressum
request = self.factory.get("")
request.user = self.local_user
result = view(request)
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
self.assertEqual(result.status_code, 200)
def test_landing(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Landing.as_view()

View file

@ -58,6 +58,7 @@ class RegisterViews(TestCase):
"localname": "nutria-user.user_nutria",
"password": "mouseword",
"email": "aa@bb.cccc",
"preferred_timezone": "Europe/Berlin",
},
)
with patch("bookwyrm.views.landing.register.login"):
@ -68,6 +69,7 @@ class RegisterViews(TestCase):
self.assertEqual(nutria.username, f"nutria-user.user_nutria@{DOMAIN}")
self.assertEqual(nutria.localname, "nutria-user.user_nutria")
self.assertEqual(nutria.local, True)
self.assertEqual(nutria.preferred_timezone, "Europe/Berlin")
@patch("bookwyrm.emailing.send_email.delay")
def test_register_email_confirm(self, *_):
@ -198,6 +200,58 @@ class RegisterViews(TestCase):
self.assertEqual(models.User.objects.count(), 1)
validate_html(response.render())
def test_register_default_preferred_timezone(self, *_):
"""invalid preferred timezone strings should just default to UTC"""
view = views.Register.as_view()
self.assertEqual(models.User.objects.count(), 1)
request = self.factory.post(
"register/",
{
"localname": "nutria1",
"password": "mouseword",
"email": "aa1@bb.cccc",
"preferred_timezone": "invalid-tz",
},
)
with patch("bookwyrm.views.landing.register.login"):
response = view(request)
self.assertEqual(response.status_code, 302)
self.assertEqual(models.User.objects.count(), 2)
nutria = models.User.objects.last()
self.assertEqual(nutria.preferred_timezone, "UTC")
request = self.factory.post(
"register/",
{
"localname": "nutria2",
"password": "mouseword",
"email": "aa2@bb.cccc",
"preferred_timezone": "",
},
)
with patch("bookwyrm.views.landing.register.login"):
response = view(request)
self.assertEqual(response.status_code, 302)
self.assertEqual(models.User.objects.count(), 3)
nutria = models.User.objects.last()
self.assertEqual(nutria.preferred_timezone, "UTC")
request = self.factory.post(
"register/",
{
"localname": "nutria3",
"password": "mouseword",
"email": "aa3@bb.cccc",
},
)
with patch("bookwyrm.views.landing.register.login"):
response = view(request)
self.assertEqual(response.status_code, 302)
self.assertEqual(models.User.objects.count(), 4)
nutria = models.User.objects.last()
self.assertEqual(nutria.preferred_timezone, "UTC")
def test_register_closed_instance(self, *_):
"""you can't just register"""
view = views.Register.as_view()

View file

@ -63,7 +63,7 @@ class ExportViews(TestCase):
# pylint: disable=line-too-long
self.assertEqual(
result[0],
b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,isbn_10,isbn_13,oclc_number,rating,review_name,review_cw,review_content\r\n",
b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,rating,review_name,review_cw,review_content\r\n",
)
expected = f"Test Book,,{self.book.remote_id},,,,,beep,,,,123456789X,9781234567890,,,,,\r\n"
expected = f"Test Book,,{self.book.remote_id},,,,,beep,,,,,,123456789X,9781234567890,,,,,\r\n"
self.assertEqual(result[1].decode("utf-8"), expected)

View file

@ -233,3 +233,19 @@ class UserViews(TestCase):
result = views.user_redirect(request, "mouse")
self.assertEqual(result.status_code, 302)
def test_reviews_comments_page(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.UserReviewsComments.as_view()
request = self.factory.get("")
request.user = self.local_user
result = view(request, "mouse")
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
self.assertEqual(result.status_code, 200)
request.user = self.anonymous_user
result = view(request, "mouse")
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
self.assertEqual(result.status_code, 200)

View file

@ -86,6 +86,16 @@ urlpatterns = [
r"^settings/dashboard/?$", views.Dashboard.as_view(), name="settings-dashboard"
),
re_path(r"^settings/site-settings/?$", views.Site.as_view(), name="settings-site"),
re_path(
r"^settings/site-registration/?$",
views.RegistrationLimited.as_view(),
name="settings-registration-limited",
),
re_path(
r"^settings/site-registration-admin/?$",
views.Registration.as_view(),
name="settings-registration",
),
re_path(r"^settings/themes/?$", views.Themes.as_view(), name="settings-themes"),
re_path(
r"^settings/themes/(?P<theme_id>\d+)/delete/?$",
@ -119,7 +129,7 @@ urlpatterns = [
),
re_path(
r"^settings/email-preview/?$",
views.admin.site.email_preview,
views.admin.email_config.email_preview,
name="settings-email-preview",
),
re_path(
@ -319,10 +329,16 @@ urlpatterns = [
re_path(
r"^settings/celery/?$", views.CeleryStatus.as_view(), name="settings-celery"
),
re_path(
r"^settings/email-config/?$",
views.EmailConfig.as_view(),
name="settings-email-config",
),
# landing pages
re_path(r"^about/?$", views.about, name="about"),
re_path(r"^privacy/?$", views.privacy, name="privacy"),
re_path(r"^conduct/?$", views.conduct, name="conduct"),
re_path(r"^impressum/?$", views.impressum, name="impressum"),
path("", views.Home.as_view(), name="landing"),
re_path(r"^discover/?$", views.Discover.as_view(), name="discover"),
re_path(r"^notifications/?$", views.Notifications.as_view(), name="notifications"),
@ -414,6 +430,11 @@ urlpatterns = [
name="user-relationships",
),
re_path(r"^hide-suggestions/?$", views.hide_suggestions, name="hide-suggestions"),
re_path(
rf"{USER_PATH}/reviews-comments",
views.UserReviewsComments.as_view(),
name="user-reviews-comments",
),
# groups
re_path(rf"{USER_PATH}/groups/?$", views.UserGroups.as_view(), name="user-groups"),
re_path(

View file

@ -10,6 +10,7 @@ from .admin.federation import Federation, FederatedServer
from .admin.federation import AddFederatedServer, ImportServerBlocklist
from .admin.federation import block_server, unblock_server, refresh_server
from .admin.email_blocklist import EmailBlocklist
from .admin.email_config import EmailConfig
from .admin.imports import (
ImportList,
disable_imports,
@ -28,7 +29,7 @@ from .admin.reports import (
unsuspend_user,
moderator_delete_user,
)
from .admin.site import Site
from .admin.site import Site, Registration, RegistrationLimited
from .admin.themes import Themes, delete_theme
from .admin.user_admin import UserAdmin, UserAdminList
@ -65,7 +66,7 @@ from .books.editions import Editions, switch_edition
from .books.links import BookFileLinks, AddFileLink, delete_link
# landing
from .landing.about import about, privacy, conduct
from .landing.about import about, privacy, conduct, impressum
from .landing.landing import Home, Landing
from .landing.login import Login, Logout
from .landing.register import Register
@ -142,7 +143,13 @@ from .setup import InstanceConfig, CreateAdmin
from .status import CreateStatus, EditStatus, DeleteStatus, update_progress
from .status import edit_readthrough
from .updates import get_notification_count, get_unread_status_string
from .user import User, hide_suggestions, user_redirect, toggle_guided_tour
from .user import (
User,
UserReviewsComments,
hide_suggestions,
user_redirect,
toggle_guided_tour,
)
from .relationships import Relationships
from .wellknown import *
from .annual_summary import (

View file

@ -0,0 +1,65 @@
""" is your email running? """
from django.contrib.auth.decorators import login_required, permission_required
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.views import View
from bookwyrm import emailing
from bookwyrm import settings
# pylint: disable= no-self-use
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
name="dispatch",
)
class EmailConfig(View):
"""View and test your emailing setup"""
def get(self, request):
"""View email config"""
data = view_data()
# TODO: show email previews
return TemplateResponse(request, "settings/email_config.html", data)
def post(self, request):
"""Send test email"""
data = view_data()
try:
emailing.test_email(request.user)
data["success"] = True
except Exception as err: # pylint: disable=broad-except
data["error"] = err
return TemplateResponse(request, "settings/email_config.html", data)
def view_data():
"""helper to get data for view"""
return {
"email_backend": settings.EMAIL_BACKEND,
"email_host": settings.EMAIL_HOST,
"email_port": settings.EMAIL_PORT,
"Email_host_user": settings.EMAIL_HOST_USER,
"email_use_tls": settings.EMAIL_USE_TLS,
"email_use_ssl": settings.EMAIL_USE_SSL,
"email_sender": settings.EMAIL_SENDER,
}
@login_required
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
def email_preview(request):
"""for development, renders and example email template"""
template = request.GET.get("email")
data = emailing.email_data()
data["subject_path"] = f"email/{template}/subject.html"
data["html_content_path"] = f"email/{template}/html_content.html"
data["text_content_path"] = f"email/{template}/text_content.html"
data["reset_link"] = "https://example.com/link"
data["invite_link"] = "https://example.com/link"
data["confirmation_link"] = "https://example.com/link"
data["confirmation_code"] = "AKJHKDGKJSDFG"
data["reporter"] = "ConcernedUser"
data["reportee"] = "UserName"
data["report_link"] = "https://example.com/link"
return TemplateResponse(request, "email/preview.html", data)

View file

@ -4,7 +4,7 @@ from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.views import View
from bookwyrm import emailing, forms, models
from bookwyrm import forms, models
# pylint: disable= no-self-use
@ -35,20 +35,55 @@ class Site(View):
return TemplateResponse(request, "settings/site.html", data)
@login_required
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
def email_preview(request):
"""for development, renders and example email template"""
template = request.GET.get("email")
data = emailing.email_data()
data["subject_path"] = f"email/{template}/subject.html"
data["html_content_path"] = f"email/{template}/html_content.html"
data["text_content_path"] = f"email/{template}/text_content.html"
data["reset_link"] = "https://example.com/link"
data["invite_link"] = "https://example.com/link"
data["confirmation_link"] = "https://example.com/link"
data["confirmation_code"] = "AKJHKDGKJSDFG"
data["reporter"] = "ConcernedUser"
data["reportee"] = "UserName"
data["report_link"] = "https://example.com/link"
return TemplateResponse(request, "email/preview.html", data)
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
name="dispatch",
)
class RegistrationLimited(View):
"""Things related to registering that non-admins owners can change"""
def get(self, request):
"""edit form"""
site = models.SiteSettings.objects.get()
data = {"form": forms.RegistrationLimitedForm(instance=site)}
return TemplateResponse(request, "settings/registration_limited.html", data)
def post(self, request):
"""edit the site settings"""
site = models.SiteSettings.objects.get()
form = forms.RegistrationLimitedForm(request.POST, request.FILES, instance=site)
if not form.is_valid():
data = {"form": form}
return TemplateResponse(request, "settings/registration_limited.html", data)
site = form.save(request)
data = {"form": forms.RegistrationLimitedForm(instance=site), "success": True}
return TemplateResponse(request, "settings/registration_limited.html", data)
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.manage_registration", raise_exception=True),
name="dispatch",
)
class Registration(View):
"""Control everything about registration"""
def get(self, request):
"""edit form"""
site = models.SiteSettings.objects.get()
data = {"form": forms.RegistrationForm(instance=site)}
return TemplateResponse(request, "settings/registration.html", data)
def post(self, request):
"""edit the site settings"""
site = models.SiteSettings.objects.get()
form = forms.RegistrationForm(request.POST, request.FILES, instance=site)
if not form.is_valid():
data = {"form": form}
return TemplateResponse(request, "settings/registration.html", data)
site = form.save(request)
data = {"form": forms.RegistrationForm(instance=site), "success": True}
return TemplateResponse(request, "settings/registration.html", data)

View file

@ -12,7 +12,7 @@ from bookwyrm import forms, models
# pylint: disable= no-self-use
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
permission_required("bookwyrm.system_administration", raise_exception=True),
name="dispatch",
)
class Themes(View):
@ -46,7 +46,7 @@ def get_view_data():
@require_POST
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
@permission_required("bookwyrm.system_administration", raise_exception=True)
# pylint: disable=unused-argument
def delete_theme(request, theme_id):
"""Remove a theme"""

View file

@ -49,6 +49,8 @@ class Editions(View):
"isbn_13",
"oclc_number",
"asin",
"aasin",
"isfdb",
]
search_filter_entries = [
{f"{f}__icontains": query} for f in searchable_fields

View file

@ -1,5 +1,6 @@
""" non-interactive pages """
from dateutil.relativedelta import relativedelta
from django.http import Http404
from django.template.response import TemplateResponse
from django.utils import timezone
from django.views.decorators.http import require_GET
@ -36,3 +37,12 @@ def conduct(request):
def privacy(request):
"""more information about the instance"""
return TemplateResponse(request, "about/privacy.html")
@require_GET
def impressum(request):
"""more information about the instance"""
site = models.SiteSettings.objects.get()
if not site.show_impressum:
raise Http404()
return TemplateResponse(request, "about/impressum.html")

View file

@ -1,4 +1,5 @@
""" class views for login/register views """
import pytz
from django.contrib.auth import login
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404, redirect
@ -55,6 +56,10 @@ class Register(View):
localname = form.data["localname"].strip()
email = form.data["email"]
password = form.data["password"]
try:
preferred_timezone = pytz.timezone(form.data.get("preferred_timezone"))
except pytz.exceptions.UnknownTimeZoneError:
preferred_timezone = pytz.utc
# make sure the email isn't blocked as spam
email_domain = email.split("@")[-1]
@ -71,6 +76,7 @@ class Register(View):
local=True,
deactivation_reason="pending" if settings.require_confirm_email else None,
is_active=not settings.require_confirm_email,
preferred_timezone=preferred_timezone,
)
if invite:
invite.times_used += 1
@ -105,9 +111,7 @@ class ConfirmEmailCode(View):
request, "confirm_email/confirm_email.html", {"valid": False}
)
# update the user
user.is_active = True
user.deactivation_reason = None
user.save(broadcast=False, update_fields=["is_active", "deactivation_reason"])
user.reactivate()
# direct the user to log in
return redirect("login", confirmed="confirmed")

View file

@ -1,6 +1,7 @@
""" The user profile """
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db.models import Q
from django.http import Http404
from django.shortcuts import redirect
from django.template.response import TemplateResponse
@ -100,6 +101,49 @@ class User(View):
return TemplateResponse(request, "user/user.html", data)
class UserReviewsComments(View):
"""user's activity filtered by reviews and comments"""
def get(self, request, username):
"""user's activity filtered by reviews and comments"""
user = get_user_from_username(request.user, username)
is_self = request.user.id == user.id
activities = (
models.Status.privacy_filter(
request.user,
)
.filter(
Q(review__isnull=False) | Q(comment__isnull=False),
user=user,
)
.exclude(
privacy="direct",
)
.select_related(
"user",
"reply_parent",
"review__book",
"comment__book",
"quotation__book",
)
.prefetch_related(
"mention_books",
"mention_users",
"attachments",
)
)
paginated = Paginator(activities, PAGE_LENGTH)
data = {
"user": user,
"is_self": is_self,
"activities": paginated.get_page(request.GET.get("page", 1)),
}
return TemplateResponse(request, "user/reviews_comments.html", data)
@require_POST
@login_required
def hide_suggestions(request):

10
bw-dev
View file

@ -174,6 +174,10 @@ case "$CMD" in
prod_error
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
;;
eslint)
prod_error
docker-compose run --rm dev-tools npx eslint bookwyrm/static --ext .js
;;
stylelint)
prod_error
docker-compose run --rm dev-tools npx stylelint \
@ -185,6 +189,7 @@ case "$CMD" in
runweb pylint bookwyrm/
docker-compose run --rm dev-tools black celerywyrm bookwyrm
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
docker-compose run --rm dev-tools npx eslint bookwyrm/static --ext .js
docker-compose run --rm dev-tools npx stylelint \
bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \
--config dev-tools/.stylelintrc.js
@ -260,6 +265,9 @@ case "$CMD" in
remove_2fa)
runweb python manage.py remove_2fa "$@"
;;
confirm_email)
runweb python manage.py confirm_email "$@"
;;
*)
set +x # No need to echo echo
echo "Unrecognised command. Try:"
@ -283,6 +291,7 @@ case "$CMD" in
echo " clean"
echo " black"
echo " prettier"
echo " eslint"
echo " stylelint"
echo " formatters"
echo " collectstatic_watch"
@ -296,5 +305,6 @@ case "$CMD" in
echo " set_cors_to_s3 [cors file]"
echo " runweb [command]"
echo " remove_2fa"
echo " confirm_email"
;;
esac

View file

@ -1,5 +1,5 @@
# bw-dev auto-completions for fish-shell.
# copy this to ~./.config/fish/completions/ with the name `bw-dev.fish`
# copy this to ~/.config/fish/completions/ with the name `bw-dev.fish`
# this will only work if renamed to `bw-dev.fish`.
set -l commands up \
@ -22,6 +22,7 @@ build \
clean \
black \
prettier \
eslint \
stylelint \
formatters \
collectstatic_watch \
@ -34,6 +35,8 @@ copy_media_to_s3 \
set_cors_to_s3 \
setup \
admin_code \
remove_2fa \
confirm_email \
runweb
function __bw_complete -a cmds cmd desc
@ -59,9 +62,9 @@ __bw_complete "$commands" "build" "build the containers"
__bw_complete "$commands" "clean" "bring the cluster down and remove all containers"
__bw_complete "$commands" "black" "run Python code formatting tool"
__bw_complete "$commands" "prettier" "run JavaScript code formatting tool"
__bw_complete "$commands" "eslint" "run JavaScript linting tool"
__bw_complete "$commands" "stylelint" "run SCSS linting tool"
__bw_complete "$commands" "formatters" "run multiple formatter tools"
__bw_complete "$commands" "compilescss" "compile the SCSS layouts to CSS"
__bw_complete "$commands" "populate_streams" "populate the main streams"
__bw_complete "$commands" "populate_lists_streams" "populate streams for book lists"
__bw_complete "$commands" "populate_suggestions" "populate book suggestions"
@ -73,6 +76,8 @@ __bw_complete "$commands" "sync_media_to_s3" "run the `s3 sync` command t
__bw_complete "$commands" "set_cors_to_s3" "push a CORS configuration defined in .json to s3"
__bw_complete "$commands" "setup" "perform first-time setup"
__bw_complete "$commands" "admin_code" "get the admin code"
__bw_complete "$commands" "remove_2fa" "remove 2FA from user"
__bw_complete "$commands" "confirm_email" "manually confirm email of user and set active"
__bw_complete "$commands" "runweb" "run a command on the web container"

View file

@ -19,6 +19,7 @@ build
clean
black
prettier
eslint
stylelint
formatters
collectstatic_watch
@ -31,4 +32,6 @@ copy_media_to_s3
set_cors_to_s3
setup
admin_code
remove_2fa
confirm_email
runweb" -o bashdefault -o default bw-dev

View file

@ -21,6 +21,7 @@ build
clean
black
prettier
eslint
stylelint
formatters
collectstatic_watch
@ -33,4 +34,6 @@ copy_media_to_s3
set_cors_to_s3
setup
admin_code
remove_2fa
confirm_email
runweb" -o bashdefault -o default bw-dev

View file

@ -86,10 +86,8 @@ services:
restart: on-failure
flower:
build: .
command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD}
command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD} --url_prefix=flower
env_file: .env
ports:
- ${FLOWER_PORT}:${FLOWER_PORT}
volumes:
- .:/app
networks:

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-11-10 21:42+0000\n"
"PO-Revision-Date: 2022-11-13 16:05\n"
"POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-12-05 03:56\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Catalan\n"
"Language: ca\n"
@ -90,7 +90,7 @@ msgstr "Codi incorrecte"
msgid "This domain is blocked. Please contact your administrator if you think this is an error."
msgstr "Aquest domini ha estat bloquejat. Poseu-vos en contacte amb l'administració d'aquesta instància si creieu que és un error."
#: bookwyrm/forms/links.py:46
#: bookwyrm/forms/links.py:49
msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending."
msgstr "Ja s'ha afegit un enllaç a aquest tipus de fitxer per a aquest llibre. Si encara no és visible és que el domini encara està pendent."
@ -256,14 +256,14 @@ msgstr "Seguidors"
msgid "Private"
msgstr "Privat"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140
#: bookwyrm/templates/settings/imports/imports.html:19
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active"
msgstr "Actiu"
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:138
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:155
msgid "Complete"
msgstr "Complet"
@ -316,19 +316,19 @@ msgstr "Citacions"
msgid "Everything else"
msgstr "Tota la resta"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home Timeline"
msgstr "Línia de temps Inici"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home"
msgstr "Inici"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
msgid "Books Timeline"
msgstr "Cronologia dels llibres"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Cronologia dels llibres"
msgid "Books"
msgstr "Llibres"
#: bookwyrm/settings.py:282
#: bookwyrm/settings.py:286
msgid "English"
msgstr "English (Anglès)"
#: bookwyrm/settings.py:283
#: bookwyrm/settings.py:287
msgid "Català (Catalan)"
msgstr "Català"
#: bookwyrm/settings.py:284
#: bookwyrm/settings.py:288
msgid "Deutsch (German)"
msgstr "Deutsch (Alemany)"
#: bookwyrm/settings.py:285
#: bookwyrm/settings.py:289
msgid "Español (Spanish)"
msgstr "Español (espanyol)"
#: bookwyrm/settings.py:286
#: bookwyrm/settings.py:290
msgid "Galego (Galician)"
msgstr "Galego (gallec)"
#: bookwyrm/settings.py:287
#: bookwyrm/settings.py:291
msgid "Italiano (Italian)"
msgstr "Italiano (italià)"
#: bookwyrm/settings.py:288
#: bookwyrm/settings.py:292
msgid "Suomi (Finnish)"
msgstr "Suomi (finès)"
#: bookwyrm/settings.py:289
#: bookwyrm/settings.py:293
msgid "Français (French)"
msgstr "Français (francès)"
#: bookwyrm/settings.py:290
#: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituà)"
#: bookwyrm/settings.py:291
#: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)"
msgstr "Norsk (noruec)"
#: bookwyrm/settings.py:292
#: bookwyrm/settings.py:296
msgid "Polski (Polish)"
msgstr "Polski (polonès)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portuguès del Brasil)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portuguès europeu)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:299
msgid "Română (Romanian)"
msgstr "Română (romanès)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:300
msgid "Svenska (Swedish)"
msgstr "Svenska (suec)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (xinès simplificat)"
#: bookwyrm/settings.py:298
#: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (xinès tradicional)"
@ -459,24 +459,24 @@ msgstr "<a href=\"%(book_path)s\"><em>%(title)s</em></a> es el llibre amb valora
msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out</a> and make yourself heard."
msgstr "Feu seguiment de les vostres lectures, parleu sobre llibres, escriviu valoracions i descobriu properes lectures. Bookwyrm és un programari d'escala humana, dissenyat per a ser petit i personal i amb el compromís de no tenir mai publicitat, ser anticorporatiu i orientat a la comunitat. Si teniu suggeriments de característiques noves, informes d'errors o grans projectes, <a href='https://joinbookwyrm.com/get-involved' target='_blank>mireu com implicar-vos</a> i feu-vos sentir."
#: bookwyrm/templates/about/about.html:103
#: bookwyrm/templates/about/about.html:104
msgid "Meet your admins"
msgstr "Coneix les persones que administren la instància"
#: bookwyrm/templates/about/about.html:106
#: bookwyrm/templates/about/about.html:107
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"%(coc_path)s\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr "Les persones moderadores i administradores de %(site_name)s mantenen en funcionament aquest lloc, fan complir el <a href=\"%(coc_path)s\">codi de conducta</a> i responen els informes de brossa i mal comportament que puguin enviar els usuaris."
#: bookwyrm/templates/about/about.html:120
#: bookwyrm/templates/about/about.html:121
msgid "Moderator"
msgstr "Moderació"
#: bookwyrm/templates/about/about.html:122 bookwyrm/templates/user_menu.html:63
#: bookwyrm/templates/about/about.html:123 bookwyrm/templates/user_menu.html:63
msgid "Admin"
msgstr "Administració"
#: bookwyrm/templates/about/about.html:138
#: bookwyrm/templates/about/about.html:139
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
@ -486,6 +486,7 @@ msgstr "Enviar missatge directe"
#: bookwyrm/templates/about/conduct.html:4
#: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct"
msgstr "Codi de Conducta"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Versió de programari:"
#: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200
#: bookwyrm/templates/snippets/2fa_footer.html:8
#: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
msgstr "Sobre %(site_name)s"
@ -512,9 +513,15 @@ msgstr "Sobre %(site_name)s"
#: bookwyrm/templates/about/layout.html:47
#: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy"
msgstr "Política de privacitat"
#: bookwyrm/templates/about/layout.html:54
#: bookwyrm/templates/snippets/footer.html:34
msgid "Impressum"
msgstr ""
#: bookwyrm/templates/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8
#, python-format
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105
#: bookwyrm/templates/settings/site.html:181
#: bookwyrm/templates/settings/site.html:194
#: bookwyrm/templates/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Desa"
#: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80
#: bookwyrm/templates/search/barcode_modal.html:45
#: bookwyrm/templates/search/barcode_modal.html:43
#: bookwyrm/templates/settings/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
@ -852,7 +859,7 @@ msgstr "La càrrega de les dades es connectarà a <strong>%(source_name)s</stron
#: bookwyrm/templates/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52
#: bookwyrm/templates/preferences/2fa.html:54
#: bookwyrm/templates/preferences/2fa.html:77
#: bookwyrm/templates/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Domini"
#: bookwyrm/templates/book/file_links/edit_links.html:36
#: bookwyrm/templates/import/import.html:105
#: bookwyrm/templates/import/import.html:122
#: bookwyrm/templates/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
@ -1333,7 +1340,7 @@ msgstr "Estat"
#: bookwyrm/templates/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:62
#: bookwyrm/templates/settings/imports/imports.html:110
#: bookwyrm/templates/settings/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99
msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Usuari desconegut"
msgid "Report spam"
msgstr "Marqueu com a brossa"
#: bookwyrm/templates/book/file_links/edit_links.html:101
#: bookwyrm/templates/book/file_links/edit_links.html:102
msgid "No links available for this book."
msgstr "No hi ha enllaços disponibles per aquest llibre."
#: bookwyrm/templates/book/file_links/edit_links.html:112
#: bookwyrm/templates/book/file_links/edit_links.html:113
#: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file"
msgstr "Afegiu enllaç a fitxer"
@ -1735,7 +1742,7 @@ msgstr "Si no has demanat reiniciar la teva contrasenya, pots ignorar aquest cor
msgid "Reset your %(site_name)s password"
msgstr "Reinicia el teu password de %(site_name)s "
#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/embed-layout.html:20 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
@ -1743,12 +1750,12 @@ msgstr "Reinicia el teu password de %(site_name)s "
msgid "%(site_name)s home page"
msgstr "Pàgina principal de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204
#: bookwyrm/templates/snippets/2fa_footer.html:12
#: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin"
msgstr "Contacteu l'administració del lloc"
#: bookwyrm/templates/embed-layout.html:46
#: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm"
msgstr "Uniu-vos a BookWyrm"
@ -2314,8 +2321,7 @@ msgstr "Us donem la benvinguda a Bookwyrm!<br><br> Us agradaria fer el tutorial
#: bookwyrm/templates/guided_tour/home.html:17
#: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212
#: bookwyrm/templates/snippets/2fa_footer.html:20
#: bookwyrm/templates/snippets/footer.html:20
msgid "Guided Tour"
msgstr "Visita guiada"
@ -2625,81 +2631,89 @@ msgstr "Troba un llibre"
msgid "Import Books"
msgstr "Importa Llibres"
#: bookwyrm/templates/import/import.html:15
#: bookwyrm/templates/import/import.html:13
msgid "Not a valid CSV file"
msgstr ""
#: bookwyrm/templates/import/import.html:22
#, python-format
msgid "On average, recent imports have taken %(hours)s hours."
msgstr "Les importacions recents han durat %(hours)s de mitjana."
#: bookwyrm/templates/import/import.html:19
#: bookwyrm/templates/import/import.html:26
#, python-format
msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "Les importacions recents han durat %(minutes)s de mitjana."
#: bookwyrm/templates/import/import.html:34
#: bookwyrm/templates/import/import.html:41
msgid "Data source:"
msgstr "Font de la informació:"
#: bookwyrm/templates/import/import.html:40
#: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)"
msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43
#: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)"
msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46
#: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)"
msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49
#: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)"
msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52
#: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)"
msgstr "Calibre (CSV)"
#: bookwyrm/templates/import/import.html:58
#: bookwyrm/templates/import/import.html:65
msgid "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."
msgstr "Podeu descarregar-vos les vostres dades de Goodreads des de la pàgina d'<a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Importa/Exporta</a> del vostre compte de Goodreads."
#: bookwyrm/templates/import/import.html:67
#: bookwyrm/templates/import/import.html:74
msgid "Data file:"
msgstr "Arxiu de dades:"
#: bookwyrm/templates/import/import.html:75
#: bookwyrm/templates/import/import.html:82
msgid "Include reviews"
msgstr "Inclou ressenyes"
#: bookwyrm/templates/import/import.html:80
#: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:"
msgstr "Configuració de privacitat per les ressenyes importades:"
#: bookwyrm/templates/import/import.html:86
#: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importa"
#: bookwyrm/templates/import/import.html:91
#: bookwyrm/templates/import/import.html:101
msgid "Imports are temporarily disabled; thank you for your patience."
msgstr ""
#: bookwyrm/templates/import/import.html:108
msgid "Recent Imports"
msgstr "Importacions recents"
#: bookwyrm/templates/import/import.html:96
#: bookwyrm/templates/settings/imports/imports.html:41
#: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created"
msgstr "Data de creació"
#: bookwyrm/templates/import/import.html:99
#: bookwyrm/templates/import/import.html:116
msgid "Last Updated"
msgstr "Darrera actualització"
#: bookwyrm/templates/import/import.html:102
#: bookwyrm/templates/settings/imports/imports.html:50
#: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items"
msgstr "Items"
#: bookwyrm/templates/import/import.html:111
#: bookwyrm/templates/import/import.html:128
msgid "No recent imports"
msgstr "No hi ha cap importació recent"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Refresca"
#: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82
#: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import"
msgstr "Atura la importació"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rebutja"
#: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59
#: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items"
msgstr "Elements fallits"
@ -2958,7 +2972,7 @@ msgstr "Nom d'usuari:"
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:68
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Contrasenya:"
@ -3038,22 +3052,6 @@ msgstr "S'ha publicat l'estat amb èxit"
msgid "Error posting status"
msgstr "Hi ha hagut un error mentre es publicava l'estat"
#: bookwyrm/templates/layout.html:208
#: bookwyrm/templates/snippets/2fa_footer.html:16
msgid "Documentation"
msgstr "Documentació"
#: bookwyrm/templates/layout.html:221
#: bookwyrm/templates/snippets/2fa_footer.html:29
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Dona suport a %(site_name)s a <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/layout.html:228
#: bookwyrm/templates/snippets/2fa_footer.html:36
msgid "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>."
msgstr "El codi font de BookWyrm està disponible de manera oberta. Pots contribuir-hi o informar de problemes a <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Suprimir aquesta llista?"
#: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17
#: bookwyrm/templates/lists/layout.html:18
msgid "Edit List"
msgstr "Edita la llista"
@ -3128,13 +3126,12 @@ msgstr "Edita la llista"
msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, una llista de %(owner)s"
#: bookwyrm/templates/lists/embed-list.html:18
#: bookwyrm/templates/lists/embed-list.html:20
#, python-format
msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "a <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27
#: bookwyrm/templates/lists/list.html:54
#: bookwyrm/templates/lists/embed-list.html:29
msgid "This list is currently empty"
msgstr "Aquesta llista és buida"
@ -3216,6 +3213,10 @@ msgstr "Has suggerit un llibre per aquesta llista amb èxit!"
msgid "You successfully added a book to this list!"
msgstr "Has afegit un llibre a aquesta llista amb èxit!"
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty."
msgstr ""
#: bookwyrm/templates/lists/list.html:104
msgid "Edit notes"
msgstr "Edita les notes"
@ -3339,12 +3340,17 @@ msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha suggerit afegi
#: bookwyrm/templates/notifications/items/add.html:66
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added a book to one of your lists"
msgstr ""
#: bookwyrm/templates/notifications/items/add.html:72
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[0] "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha afegit <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, i %(display_count)s altre llibre a la vostra llista \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[1] "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha afegit <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, i %(display_count)s altres llibres a la vostra llista \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
#: bookwyrm/templates/notifications/items/add.html:82
#: bookwyrm/templates/notifications/items/add.html:88
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
@ -3768,19 +3774,31 @@ msgstr "Genera codis de seguretat"
msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
msgstr "Escaneja el codi QR amb la teva app d'autenticació i entra el codi que apareix aquí sota per confirmar que la teva app està configurada."
#: bookwyrm/templates/preferences/2fa.html:50
#: bookwyrm/templates/preferences/2fa.html:52
msgid "Use setup key"
msgstr ""
#: bookwyrm/templates/preferences/2fa.html:58
msgid "Account name:"
msgstr ""
#: bookwyrm/templates/preferences/2fa.html:65
msgid "Code:"
msgstr ""
#: bookwyrm/templates/preferences/2fa.html:73
msgid "Enter the code from your app:"
msgstr "Introduïu el codi de la vostra app:"
#: bookwyrm/templates/preferences/2fa.html:60
#: bookwyrm/templates/preferences/2fa.html:83
msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like <em>Authy</em>, <em>Google Authenticator</em> or <em>Microsoft Authenticator</em> each time you log in."
msgstr "Podeu fer el vostre compte més segur utilitzant Autenticació en Dos Passos (2FA). Això requereix que entreu un codi d'un sol ús en una aplicació de mòbil com <em>Authy</em>, <em>Google Authenticator</em> o <em>Microsoft Authenticator</em> cada cop que inicieu sessió."
#: bookwyrm/templates/preferences/2fa.html:62
#: bookwyrm/templates/preferences/2fa.html:85
msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirmeu la vostra contrasenya per començar a configurar 2FA."
#: bookwyrm/templates/preferences/2fa.html:72
#: bookwyrm/templates/preferences/2fa.html:95
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA"
msgstr "Configura 2FA"
@ -3870,7 +3888,7 @@ msgstr "Perfil"
#: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91
msgid "Display"
msgstr "Mostra"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Scan Barcode\n"
" "
#: bookwyrm/templates/search/barcode_modal.html:23
#: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..."
msgstr "Sol·licitant permisos per a la càmera..."
#: bookwyrm/templates/search/barcode_modal.html:24
#: bookwyrm/templates/search/barcode_modal.html:22
msgid "Grant access to the camera to scan a book's barcode."
msgstr "Dona permisos d'accés a la càmera per escanejar el codi de barres d'aquest llibre."
#: bookwyrm/templates/search/barcode_modal.html:29
#: bookwyrm/templates/search/barcode_modal.html:27
msgid "Could not access camera"
msgstr "No s'ha pogut accedir a la càmera"
#: bookwyrm/templates/search/barcode_modal.html:33
#: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner"
msgid "Scanning..."
msgstr "S'està escanejant..."
#: bookwyrm/templates/search/barcode_modal.html:34
#: bookwyrm/templates/search/barcode_modal.html:32
msgid "Align your book's barcode with the camera."
msgstr "Alinea el codi de barres del teu llibre amb la càmera."
#: bookwyrm/templates/search/barcode_modal.html:38
#: bookwyrm/templates/search/barcode_modal.html:36
msgctxt "barcode scanner"
msgid "ISBN scanned"
msgstr "S'ha escanejat l'ISBN"
#: bookwyrm/templates/search/barcode_modal.html:39
#: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN"
msgid "Searching for book:"
msgstr "Cercant el llibre:"
#: bookwyrm/templates/search/book.html:39
#: bookwyrm/templates/search/book.html:25
#, python-format
msgid "%(formatted_review_count)s review"
msgid_plural "%(formatted_review_count)s reviews"
msgstr[0] ""
msgstr[1] ""
#: bookwyrm/templates/search/book.html:34
#, python-format
msgid "(published %(pub_year)s)"
msgstr ""
#: bookwyrm/templates/search/book.html:50
msgid "Results from"
msgstr "Resultats de"
#: bookwyrm/templates/search/book.html:78
#: bookwyrm/templates/search/book.html:89
msgid "Import book"
msgstr "Importa un llibre"
#: bookwyrm/templates/search/book.html:102
#: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues"
msgstr "Carrega resultats d'altres catàlegs"
#: bookwyrm/templates/search/book.html:106
#: bookwyrm/templates/search/book.html:117
msgid "Manually add book"
msgstr "Afegeix manualment un llibre"
#: bookwyrm/templates/search/book.html:111
#: bookwyrm/templates/search/book.html:122
msgid "Log in to import or add books."
msgstr "Inicia la sessió per importar o afegir llibres."
@ -4112,7 +4142,7 @@ msgstr "Tipus de Cerca"
#: bookwyrm/templates/search/layout.html:24
#: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27
#: bookwyrm/templates/settings/federation/instance_list.html:51
#: bookwyrm/templates/settings/federation/instance_list.html:52
#: bookwyrm/templates/settings/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Crea un anunci"
#: bookwyrm/templates/settings/announcements/announcements.html:21
#: bookwyrm/templates/settings/federation/instance_list.html:39
#: bookwyrm/templates/settings/federation/instance_list.html:40
msgid "Date added"
msgstr "Data en què va ser afegit"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Tasques actives"
#: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34
#: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID"
msgstr "ID"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Ha fallat:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
msgid "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:"
msgstr "S'espera un fitxer json en el format proporcionat per <a href=\"https://fediblock.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">FediBlock</a>, amb una llista d'entrades que tenen els camps <code>instància</code> i <code>url</code>. Per exemple:"
msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:"
msgstr ""
#: bookwyrm/templates/settings/federation/instance_list.html:35
#: bookwyrm/templates/settings/federation/instance_list.html:36
#: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name"
msgstr "Nom de la instància"
#: bookwyrm/templates/settings/federation/instance_list.html:43
#: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated"
msgstr "Darrera actualització"
#: bookwyrm/templates/settings/federation/instance_list.html:47
#: bookwyrm/templates/settings/federation/instance_list.html:48
#: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software"
msgstr "Programari"
#: bookwyrm/templates/settings/federation/instance_list.html:69
#: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found"
msgstr "No s'ha trobat cap instància"
@ -4690,27 +4720,51 @@ msgstr "No s'ha trobat cap instància"
msgid "Stop import?"
msgstr "Atura la importació?"
#: bookwyrm/templates/settings/imports/imports.html:23
#: bookwyrm/templates/settings/imports/imports.html:19
msgid "Disable starting new imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:30
msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:31
msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be effected."
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:36
msgid "Disable imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:50
msgid "Users are currently unable to start new imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:55
msgid "Enable imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:71
msgid "Completed"
msgstr "Completat"
#: bookwyrm/templates/settings/imports/imports.html:37
#: bookwyrm/templates/settings/imports/imports.html:85
msgid "User"
msgstr "Usuari"
#: bookwyrm/templates/settings/imports/imports.html:46
#: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated"
msgstr "Data actualització"
#: bookwyrm/templates/settings/imports/imports.html:53
#: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items"
msgstr "Elements pendents"
#: bookwyrm/templates/settings/imports/imports.html:56
#: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items"
msgstr "Ítems amb èxit"
#: bookwyrm/templates/settings/imports/imports.html:91
#: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found."
msgstr "No s'han trobat importacions coincidents."
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Configuració del lloc"
#: bookwyrm/templates/settings/layout.html:106
#: bookwyrm/templates/settings/site.html:95
#: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/settings/themes.html:4
#: bookwyrm/templates/settings/themes.html:6
msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Informació de la instància"
#: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110
#: bookwyrm/templates/settings/site.html:123
msgid "Footer Content"
msgstr "Contingut del peu de pàgina"
#: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134
#: bookwyrm/templates/settings/site.html:147
msgid "Registration"
msgstr "Registre"
@ -5093,71 +5147,79 @@ msgstr "Codi de conducta:"
msgid "Privacy Policy:"
msgstr "Política de privacitat:"
#: bookwyrm/templates/settings/site.html:79
#: bookwyrm/templates/settings/site.html:73
msgid "Impressum:"
msgstr ""
#: bookwyrm/templates/settings/site.html:78
msgid "Include impressum:"
msgstr ""
#: bookwyrm/templates/settings/site.html:92
msgid "Images"
msgstr "Imatges"
#: bookwyrm/templates/settings/site.html:82
#: bookwyrm/templates/settings/site.html:95
msgid "Logo:"
msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86
#: bookwyrm/templates/settings/site.html:99
msgid "Logo small:"
msgstr "Logo petit:"
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/settings/site.html:103
msgid "Favicon:"
msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98
#: bookwyrm/templates/settings/site.html:111
msgid "Default theme:"
msgstr "Tema per defecte:"
#: bookwyrm/templates/settings/site.html:113
#: bookwyrm/templates/settings/site.html:126
msgid "Support link:"
msgstr "Enllaç de suport:"
#: bookwyrm/templates/settings/site.html:117
#: bookwyrm/templates/settings/site.html:130
msgid "Support title:"
msgstr "Títol de suport:"
#: bookwyrm/templates/settings/site.html:121
#: bookwyrm/templates/settings/site.html:134
msgid "Admin email:"
msgstr "Correu electrònic de l'administrador:"
#: bookwyrm/templates/settings/site.html:125
#: bookwyrm/templates/settings/site.html:138
msgid "Additional info:"
msgstr "Informació addicional:"
#: bookwyrm/templates/settings/site.html:139
#: bookwyrm/templates/settings/site.html:152
msgid "Allow registration"
msgstr "Permet el registre"
#: bookwyrm/templates/settings/site.html:145
#: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address"
msgstr "Requereix els usuaris que confirmin les seves adreces de correu"
#: bookwyrm/templates/settings/site.html:147
#: bookwyrm/templates/settings/site.html:160
msgid "(Recommended if registration is open)"
msgstr "(Recomanat si el registre està obert)"
#: bookwyrm/templates/settings/site.html:152
#: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests"
msgstr "Permet peticions d'invitació"
#: bookwyrm/templates/settings/site.html:158
#: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests"
msgstr "Estableix una pregunta per les sol·licituds d'invitació"
#: bookwyrm/templates/settings/site.html:163
#: bookwyrm/templates/settings/site.html:176
msgid "Question:"
msgstr "Pregunta:"
#: bookwyrm/templates/settings/site.html:168
#: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:"
msgstr "Text de registre tancat:"
#: bookwyrm/templates/settings/site.html:172
#: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:"
msgstr "Text de sol·licitud d'invitació:"
@ -5712,6 +5774,19 @@ msgstr "Deixa de seguir"
msgid "Accept"
msgstr "Accepta"
#: bookwyrm/templates/snippets/footer.html:16
msgid "Documentation"
msgstr "Documentació"
#: bookwyrm/templates/snippets/footer.html:42
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Dona suport a %(site_name)s a <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/snippets/footer.html:49
msgid "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>."
msgstr "El codi font de BookWyrm està disponible de manera oberta. Pots contribuir-hi o informar de problemes a <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/snippets/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13
msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Objectiu de lectura del %(current_year)s"
msgid "User Activity"
msgstr "Activitat d'usuari"
#: bookwyrm/templates/user/user.html:70
#: bookwyrm/templates/user/user.html:71
msgid "RSS feed"
msgstr "Canal RSS"
#: bookwyrm/templates/user/user.html:81
#: bookwyrm/templates/user/user.html:83
msgid "No activities yet!"
msgstr "Encara no hi ha activitats."
@ -6252,10 +6327,6 @@ msgstr "El fitxer sobrepassa la mida màxima: 10MB"
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "No és un fitxer csv vàlid"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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-11-10 21:42+0000\n"
"PO-Revision-Date: 2022-11-19 03:57\n"
"POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-12-05 03:56\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Spanish\n"
"Language: es\n"
@ -90,7 +90,7 @@ msgstr "Código incorrecto"
msgid "This domain is blocked. Please contact your administrator if you think this is an error."
msgstr "Este dominio está bloqueado. Ponte en contacto con le admin si crees que se trata de un error."
#: bookwyrm/forms/links.py:46
#: bookwyrm/forms/links.py:49
msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending."
msgstr "Este enlace con ese tipo de archivo ya ha sido añadido a este libro. Si no aparece, es porque el dominio todavía está pendiente."
@ -256,14 +256,14 @@ msgstr "Seguidores"
msgid "Private"
msgstr "Privado"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140
#: bookwyrm/templates/settings/imports/imports.html:19
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active"
msgstr "Activo"
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:138
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:155
msgid "Complete"
msgstr "Completado"
@ -316,19 +316,19 @@ msgstr "Citas"
msgid "Everything else"
msgstr "Todo lo demás"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home Timeline"
msgstr "Línea de tiempo principal"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home"
msgstr "Inicio"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
msgid "Books Timeline"
msgstr "Línea temporal de libros"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Línea temporal de libros"
msgid "Books"
msgstr "Libros"
#: bookwyrm/settings.py:282
#: bookwyrm/settings.py:286
msgid "English"
msgstr "English (Inglés)"
#: bookwyrm/settings.py:283
#: bookwyrm/settings.py:287
msgid "Català (Catalan)"
msgstr "Català (Catalán)"
#: bookwyrm/settings.py:284
#: bookwyrm/settings.py:288
msgid "Deutsch (German)"
msgstr "Deutsch (Alemán)"
#: bookwyrm/settings.py:285
#: bookwyrm/settings.py:289
msgid "Español (Spanish)"
msgstr "Español"
#: bookwyrm/settings.py:286
#: bookwyrm/settings.py:290
msgid "Galego (Galician)"
msgstr "Galego (gallego)"
#: bookwyrm/settings.py:287
#: bookwyrm/settings.py:291
msgid "Italiano (Italian)"
msgstr "Italiano"
#: bookwyrm/settings.py:288
#: bookwyrm/settings.py:292
msgid "Suomi (Finnish)"
msgstr "Suomi (finés)"
#: bookwyrm/settings.py:289
#: bookwyrm/settings.py:293
msgid "Français (French)"
msgstr "Français (Francés)"
#: bookwyrm/settings.py:290
#: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituano)"
#: bookwyrm/settings.py:291
#: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)"
msgstr "Norsk (noruego)"
#: bookwyrm/settings.py:292
#: bookwyrm/settings.py:296
msgid "Polski (Polish)"
msgstr "Polski (Polaco)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portugués brasileño)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:299
msgid "Română (Romanian)"
msgstr "Română (rumano)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:300
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chino simplificado)"
#: bookwyrm/settings.py:298
#: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chino tradicional)"
@ -459,24 +459,24 @@ msgstr "Las valoraciones de <a href=\"%(book_path)s\"><em>%(title)s</em></a> est
msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out</a> and make yourself heard."
msgstr "Haz un registro de tu lectura, habla de libros, escribe reseñas, y descubre qué leer a continuación. BookWyrm es un software de escala humana, sin anuncios, anticorporativo y orientado a la comunidad, diseñado para mantenerse pequeño y personal. Si tienes solicitudes de características, reportes de errores o grandes sueños, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">contacta con nosotros</a> y hazte oír."
#: bookwyrm/templates/about/about.html:103
#: bookwyrm/templates/about/about.html:104
msgid "Meet your admins"
msgstr "Conoce a tus administradores"
#: bookwyrm/templates/about/about.html:106
#: bookwyrm/templates/about/about.html:107
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"%(coc_path)s\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr "Los moderadores y administradores de %(site_name)s mantienen el sitio en funcionamiento, hacen cumplir el <a href=\"%(coc_path)s\">Código de conducta</a> y responden cuando les usuaries informan de spam y mal comportamiento."
#: bookwyrm/templates/about/about.html:120
#: bookwyrm/templates/about/about.html:121
msgid "Moderator"
msgstr "Moderador"
#: bookwyrm/templates/about/about.html:122 bookwyrm/templates/user_menu.html:63
#: bookwyrm/templates/about/about.html:123 bookwyrm/templates/user_menu.html:63
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:138
#: bookwyrm/templates/about/about.html:139
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
@ -486,6 +486,7 @@ msgstr "Enviar mensaje directo"
#: bookwyrm/templates/about/conduct.html:4
#: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct"
msgstr "Código de conducta"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Versión del software:"
#: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200
#: bookwyrm/templates/snippets/2fa_footer.html:8
#: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
msgstr "Sobre %(site_name)s"
@ -512,9 +513,15 @@ msgstr "Sobre %(site_name)s"
#: bookwyrm/templates/about/layout.html:47
#: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy"
msgstr "Política de privacidad"
#: bookwyrm/templates/about/layout.html:54
#: bookwyrm/templates/snippets/footer.html:34
msgid "Impressum"
msgstr ""
#: bookwyrm/templates/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8
#, python-format
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105
#: bookwyrm/templates/settings/site.html:181
#: bookwyrm/templates/settings/site.html:194
#: bookwyrm/templates/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Guardar"
#: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80
#: bookwyrm/templates/search/barcode_modal.html:45
#: bookwyrm/templates/search/barcode_modal.html:43
#: bookwyrm/templates/settings/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
@ -852,7 +859,7 @@ msgstr "La carga de datos se conectará a <strong>%(source_name)s</strong> y com
#: bookwyrm/templates/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52
#: bookwyrm/templates/preferences/2fa.html:54
#: bookwyrm/templates/preferences/2fa.html:77
#: bookwyrm/templates/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Dominio"
#: bookwyrm/templates/book/file_links/edit_links.html:36
#: bookwyrm/templates/import/import.html:105
#: bookwyrm/templates/import/import.html:122
#: bookwyrm/templates/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
@ -1333,7 +1340,7 @@ msgstr "Estado"
#: bookwyrm/templates/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:62
#: bookwyrm/templates/settings/imports/imports.html:110
#: bookwyrm/templates/settings/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99
msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Usuario/a desconocido/a"
msgid "Report spam"
msgstr "Denunciar spam"
#: bookwyrm/templates/book/file_links/edit_links.html:101
#: bookwyrm/templates/book/file_links/edit_links.html:102
msgid "No links available for this book."
msgstr "Ningún enlace disponible para este libro."
#: bookwyrm/templates/book/file_links/edit_links.html:112
#: bookwyrm/templates/book/file_links/edit_links.html:113
#: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file"
msgstr "Añadir enlace a archivo"
@ -1735,7 +1742,7 @@ msgstr "Si no solicitaste reestablecer tu contraseña, puedes ignorar este mensa
msgid "Reset your %(site_name)s password"
msgstr "Reestablece tu contraseña de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/embed-layout.html:20 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
@ -1743,12 +1750,12 @@ msgstr "Reestablece tu contraseña de %(site_name)s"
msgid "%(site_name)s home page"
msgstr "Página de inicio de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204
#: bookwyrm/templates/snippets/2fa_footer.html:12
#: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin"
msgstr "Comuníquese con el administrador del sitio"
#: bookwyrm/templates/embed-layout.html:46
#: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm"
msgstr "Únete a BookWyrm"
@ -2314,8 +2321,7 @@ msgstr "Bienvenido a Bookwyrm<br><br>¿Quieres hacer la visita guiada para ayuda
#: bookwyrm/templates/guided_tour/home.html:17
#: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212
#: bookwyrm/templates/snippets/2fa_footer.html:20
#: bookwyrm/templates/snippets/footer.html:20
msgid "Guided Tour"
msgstr "Visita guiada"
@ -2625,81 +2631,89 @@ msgstr "Encontrar un libro"
msgid "Import Books"
msgstr "Importar libros"
#: bookwyrm/templates/import/import.html:15
#: bookwyrm/templates/import/import.html:13
msgid "Not a valid CSV file"
msgstr ""
#: bookwyrm/templates/import/import.html:22
#, python-format
msgid "On average, recent imports have taken %(hours)s hours."
msgstr "En promedio, las importaciones recientes han tomado %(hours)s horas."
#: bookwyrm/templates/import/import.html:19
#: bookwyrm/templates/import/import.html:26
#, python-format
msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "En promedio, las importaciones recientes han tomado %(minutes)s minutos."
#: bookwyrm/templates/import/import.html:34
#: bookwyrm/templates/import/import.html:41
msgid "Data source:"
msgstr "Fuente de datos:"
#: bookwyrm/templates/import/import.html:40
#: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)"
msgstr ""
msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43
#: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)"
msgstr ""
msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46
#: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)"
msgstr ""
msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49
#: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)"
msgstr ""
msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52
#: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)"
msgstr ""
msgstr "Calibre (CSV)"
#: bookwyrm/templates/import/import.html:58
#: bookwyrm/templates/import/import.html:65
msgid "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."
msgstr "Puede descargar tus datos de Goodreads desde la <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">página de Importación/Exportación</a> de tu cuenta de Goodreads."
#: bookwyrm/templates/import/import.html:67
#: bookwyrm/templates/import/import.html:74
msgid "Data file:"
msgstr "Archivo de datos:"
#: bookwyrm/templates/import/import.html:75
#: bookwyrm/templates/import/import.html:82
msgid "Include reviews"
msgstr "Incluir reseñas"
#: bookwyrm/templates/import/import.html:80
#: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:"
msgstr "Configuración de privacidad para las reseñas importadas:"
#: bookwyrm/templates/import/import.html:86
#: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importar"
#: bookwyrm/templates/import/import.html:91
#: bookwyrm/templates/import/import.html:101
msgid "Imports are temporarily disabled; thank you for your patience."
msgstr "Las importaciones se han deshabilitado temporalmente, gracias por tu paciencia."
#: bookwyrm/templates/import/import.html:108
msgid "Recent Imports"
msgstr "Importaciones recientes"
#: bookwyrm/templates/import/import.html:96
#: bookwyrm/templates/settings/imports/imports.html:41
#: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created"
msgstr "Fecha de Creación"
#: bookwyrm/templates/import/import.html:99
#: bookwyrm/templates/import/import.html:116
msgid "Last Updated"
msgstr "Última Actualización"
#: bookwyrm/templates/import/import.html:102
#: bookwyrm/templates/settings/imports/imports.html:50
#: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items"
msgstr ""
msgstr "Elementos"
#: bookwyrm/templates/import/import.html:111
#: bookwyrm/templates/import/import.html:128
msgid "No recent imports"
msgstr "No hay ninguna importación reciente"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Refrescar"
#: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82
#: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import"
msgstr "Parar la importación"
@ -2806,7 +2820,7 @@ msgstr "Previsualización de la importación no disponible."
#: bookwyrm/templates/import/import_status.html:150
msgid "No items currently need review"
msgstr ""
msgstr "Ningún elemento requiere reseña actualmente"
#: bookwyrm/templates/import/import_status.html:186
msgid "View imported review"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rechazar"
#: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59
#: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items"
msgstr "Elementos fallidos"
@ -2958,7 +2972,7 @@ msgstr "Nombre de usuario:"
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:68
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Contraseña:"
@ -3038,22 +3052,6 @@ msgstr "Estado publicado con éxito"
msgid "Error posting status"
msgstr "Error al publicar el estado"
#: bookwyrm/templates/layout.html:208
#: bookwyrm/templates/snippets/2fa_footer.html:16
msgid "Documentation"
msgstr "Documentación de Django"
#: bookwyrm/templates/layout.html:221
#: bookwyrm/templates/snippets/2fa_footer.html:29
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Apoya a %(site_name)s en <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/layout.html:228
#: bookwyrm/templates/snippets/2fa_footer.html:36
msgid "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>."
msgstr "BookWyrm es software libre y de código abierto. Puedes contribuir o reportar problemas en <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "¿Eliminar esta lista?"
#: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17
#: bookwyrm/templates/lists/layout.html:18
msgid "Edit List"
msgstr "Editar lista"
@ -3128,13 +3126,12 @@ msgstr "Editar lista"
msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, una lista de %(owner)s"
#: bookwyrm/templates/lists/embed-list.html:18
#: bookwyrm/templates/lists/embed-list.html:20
#, python-format
msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "en <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27
#: bookwyrm/templates/lists/list.html:54
#: bookwyrm/templates/lists/embed-list.html:29
msgid "This list is currently empty"
msgstr "Esta lista está vacia"
@ -3216,6 +3213,10 @@ msgstr "¡Has sugerido un libro para esta lista exitosamente!"
msgid "You successfully added a book to this list!"
msgstr "¡Has agregado un libro a esta lista exitosamente!"
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty."
msgstr ""
#: bookwyrm/templates/lists/list.html:104
msgid "Edit notes"
msgstr "Editar notas"
@ -3339,16 +3340,21 @@ msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha sugerido añad
#: bookwyrm/templates/notifications/items/add.html:66
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added a book to one of your lists"
msgstr ""
#: bookwyrm/templates/notifications/items/add.html:72
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[0] "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha añadido <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, y %(display_count)s y otros libros en tu lista \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[1] "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha añadido <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, y %(display_count)s libros más a tu lista \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
#: bookwyrm/templates/notifications/items/add.html:82
#: bookwyrm/templates/notifications/items/add.html:88
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgstr[0] ""
msgstr[0] "<a href=\"%(related_user_link)s\">%(related_user)s</a> sugiere añadir <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, y %(display_count)s a tu lista \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgstr[1] "<a href=\"%(related_user_link)s\">%(related_user)s</a> ha sugerido añadir <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, y %(display_count)s libros más a tu lista \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
#: bookwyrm/templates/notifications/items/boost.html:21
@ -3768,19 +3774,31 @@ msgstr "Genera códigos de respaldo"
msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
msgstr "Escanea el código QR con tu aplicación de autenticación e introduce el código de tu aplicación a continuación para confirmar que esté correctamente configurada."
#: bookwyrm/templates/preferences/2fa.html:50
#: bookwyrm/templates/preferences/2fa.html:52
msgid "Use setup key"
msgstr "Usar clave de configuración"
#: bookwyrm/templates/preferences/2fa.html:58
msgid "Account name:"
msgstr "Nombre de la cuenta:"
#: bookwyrm/templates/preferences/2fa.html:65
msgid "Code:"
msgstr "Código:"
#: bookwyrm/templates/preferences/2fa.html:73
msgid "Enter the code from your app:"
msgstr "Introduce el código de tu aplicación:"
#: bookwyrm/templates/preferences/2fa.html:60
#: bookwyrm/templates/preferences/2fa.html:83
msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like <em>Authy</em>, <em>Google Authenticator</em> or <em>Microsoft Authenticator</em> each time you log in."
msgstr "Tú puedes hacer tu cuenta más segura a través de usar Autenticación de Dos Factores (2FA). Esto requiere que uses un código de un solo uso usando una aplicación de celular como <em>Authy</em>, <em>Autenticador de Google</em> o <em>Microsoft Authenticator</em> cada vez que inicies sesión."
#: bookwyrm/templates/preferences/2fa.html:62
#: bookwyrm/templates/preferences/2fa.html:85
msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirme su contraseña para empezar a configurar 2FA."
#: bookwyrm/templates/preferences/2fa.html:72
#: bookwyrm/templates/preferences/2fa.html:95
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA"
msgstr "Configurar 2FA"
@ -3870,7 +3888,7 @@ msgstr "Perfil"
#: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91
msgid "Display"
msgstr "Apariencia"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Escanear código de barras\n"
" "
#: bookwyrm/templates/search/barcode_modal.html:23
#: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..."
msgstr "Solicitando acceso a cámara..."
#: bookwyrm/templates/search/barcode_modal.html:24
#: bookwyrm/templates/search/barcode_modal.html:22
msgid "Grant access to the camera to scan a book's barcode."
msgstr "Otorga acceso a la cámara para poder escanear el código de barras de tus libros."
#: bookwyrm/templates/search/barcode_modal.html:29
#: bookwyrm/templates/search/barcode_modal.html:27
msgid "Could not access camera"
msgstr "No se ha podido acceder a la cámara."
#: bookwyrm/templates/search/barcode_modal.html:33
#: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner"
msgid "Scanning..."
msgstr "Escaneando..."
#: bookwyrm/templates/search/barcode_modal.html:34
#: bookwyrm/templates/search/barcode_modal.html:32
msgid "Align your book's barcode with the camera."
msgstr "Alinea el código de barras del libro con la cámara."
#: bookwyrm/templates/search/barcode_modal.html:38
#: bookwyrm/templates/search/barcode_modal.html:36
msgctxt "barcode scanner"
msgid "ISBN scanned"
msgstr "Se ha escaneado el ISBN."
#: bookwyrm/templates/search/barcode_modal.html:39
#: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN"
msgid "Searching for book:"
msgstr "Buscando libro:"
#: bookwyrm/templates/search/book.html:39
#: bookwyrm/templates/search/book.html:25
#, python-format
msgid "%(formatted_review_count)s review"
msgid_plural "%(formatted_review_count)s reviews"
msgstr[0] ""
msgstr[1] ""
#: bookwyrm/templates/search/book.html:34
#, python-format
msgid "(published %(pub_year)s)"
msgstr ""
#: bookwyrm/templates/search/book.html:50
msgid "Results from"
msgstr "Resultados de"
#: bookwyrm/templates/search/book.html:78
#: bookwyrm/templates/search/book.html:89
msgid "Import book"
msgstr "Importar libro"
#: bookwyrm/templates/search/book.html:102
#: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues"
msgstr "Cargar resultados de otros catálogos"
#: bookwyrm/templates/search/book.html:106
#: bookwyrm/templates/search/book.html:117
msgid "Manually add book"
msgstr "Agregar libro a mano"
#: bookwyrm/templates/search/book.html:111
#: bookwyrm/templates/search/book.html:122
msgid "Log in to import or add books."
msgstr "Iniciar una sesión para importar o agregar libros."
@ -4112,7 +4142,7 @@ msgstr "Tipo de búsqueda"
#: bookwyrm/templates/search/layout.html:24
#: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27
#: bookwyrm/templates/settings/federation/instance_list.html:51
#: bookwyrm/templates/settings/federation/instance_list.html:52
#: bookwyrm/templates/settings/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Crear anuncio"
#: bookwyrm/templates/settings/announcements/announcements.html:21
#: bookwyrm/templates/settings/federation/instance_list.html:39
#: bookwyrm/templates/settings/federation/instance_list.html:40
msgid "Date added"
msgstr "Fecha agregada"
@ -4327,7 +4357,7 @@ msgstr "Quitar regla"
#: bookwyrm/templates/settings/celery.html:6
#: bookwyrm/templates/settings/celery.html:8
msgid "Celery Status"
msgstr ""
msgstr "Estado de Celery"
#: bookwyrm/templates/settings/celery.html:14
msgid "Queues"
@ -4347,14 +4377,14 @@ msgstr "Prioridad alta"
#: bookwyrm/templates/settings/celery.html:40
msgid "Could not connect to Redis broker"
msgstr ""
msgstr "No se ha podido conectar al broker de Redis"
#: bookwyrm/templates/settings/celery.html:48
msgid "Active Tasks"
msgstr "Tareas activas"
#: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34
#: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID"
msgstr "ID"
@ -4376,15 +4406,15 @@ msgstr "Sin tareas activas"
#: bookwyrm/templates/settings/celery.html:79
msgid "Workers"
msgstr ""
msgstr "Trabajadores"
#: bookwyrm/templates/settings/celery.html:84
msgid "Uptime:"
msgstr ""
msgstr "Tiempo ejecutándose:"
#: bookwyrm/templates/settings/celery.html:94
msgid "Could not connect to Celery"
msgstr ""
msgstr "No se puede conectar a Celery"
#: bookwyrm/templates/settings/celery.html:101
msgid "Errors"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Falló:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
msgid "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:"
msgstr "Se espera un archivo json en el formato proporcionado por <a href=\"https://fediblock.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">FediBlock</a>, con una lista de entradas que tienen <code>instancias</code> y <code>url</code> campos. Ejemplo:"
msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:"
msgstr "Se espera un archivo json en el formato que provee FediBlock, con una lista de entradas que contenga los campos <code>instance</code> y <code>url</code>, por ejemplo:"
#: bookwyrm/templates/settings/federation/instance_list.html:35
#: bookwyrm/templates/settings/federation/instance_list.html:36
#: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name"
msgstr "Nombre de instancia"
#: bookwyrm/templates/settings/federation/instance_list.html:43
#: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated"
msgstr "Última actualización"
#: bookwyrm/templates/settings/federation/instance_list.html:47
#: bookwyrm/templates/settings/federation/instance_list.html:48
#: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software"
msgstr "Software"
#: bookwyrm/templates/settings/federation/instance_list.html:69
#: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found"
msgstr "No se encontró ningun anuncio"
@ -4690,27 +4720,51 @@ msgstr "No se encontró ningun anuncio"
msgid "Stop import?"
msgstr "¿Parar la importación?"
#: bookwyrm/templates/settings/imports/imports.html:23
#: bookwyrm/templates/settings/imports/imports.html:19
msgid "Disable starting new imports"
msgstr "Deshabilitar el inicio de nuevas importaciones"
#: bookwyrm/templates/settings/imports/imports.html:30
msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
msgstr "Ésto es sólo para usarse en caso de que las cosas vayan realmente mal con las importaciones y necesites pausar esta característica mientras resuelves los problemas."
#: bookwyrm/templates/settings/imports/imports.html:31
msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be effected."
msgstr "Mientras las importaciones estén deshabilitadas, los usuarios no tendrán permitido iniciar nuevas importaciones, pero las importaciones existentes no serán afectadas."
#: bookwyrm/templates/settings/imports/imports.html:36
msgid "Disable imports"
msgstr "Deshabilitar importaciones"
#: bookwyrm/templates/settings/imports/imports.html:50
msgid "Users are currently unable to start new imports"
msgstr "Los usuarios actualmente no pueden iniciar nuevas importaciones"
#: bookwyrm/templates/settings/imports/imports.html:55
msgid "Enable imports"
msgstr "Habilitar importaciones"
#: bookwyrm/templates/settings/imports/imports.html:71
msgid "Completed"
msgstr "Completado"
#: bookwyrm/templates/settings/imports/imports.html:37
#: bookwyrm/templates/settings/imports/imports.html:85
msgid "User"
msgstr "Usuario"
#: bookwyrm/templates/settings/imports/imports.html:46
#: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated"
msgstr "Fecha Actualizada"
#: bookwyrm/templates/settings/imports/imports.html:53
#: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items"
msgstr ""
msgstr "Elementos pendientes"
#: bookwyrm/templates/settings/imports/imports.html:56
#: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items"
msgstr ""
msgstr "Importaciones exitosas"
#: bookwyrm/templates/settings/imports/imports.html:91
#: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found."
msgstr "No se han encontrado importaciones coincidentes."
@ -4894,7 +4948,7 @@ msgstr "Sistema"
#: bookwyrm/templates/settings/layout.html:88
msgid "Celery status"
msgstr ""
msgstr "Estado de Celery"
#: bookwyrm/templates/settings/layout.html:93
msgid "Instance Settings"
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Configurar sitio"
#: bookwyrm/templates/settings/layout.html:106
#: bookwyrm/templates/settings/site.html:95
#: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/settings/themes.html:4
#: bookwyrm/templates/settings/themes.html:6
msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Información de instancia"
#: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110
#: bookwyrm/templates/settings/site.html:123
msgid "Footer Content"
msgstr "Contenido del pie de página"
#: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134
#: bookwyrm/templates/settings/site.html:147
msgid "Registration"
msgstr "Registración"
@ -5093,71 +5147,79 @@ msgstr "Código de conducta:"
msgid "Privacy Policy:"
msgstr "Política de privacidad:"
#: bookwyrm/templates/settings/site.html:79
#: bookwyrm/templates/settings/site.html:73
msgid "Impressum:"
msgstr ""
#: bookwyrm/templates/settings/site.html:78
msgid "Include impressum:"
msgstr ""
#: bookwyrm/templates/settings/site.html:92
msgid "Images"
msgstr "Imagenes"
#: bookwyrm/templates/settings/site.html:82
#: bookwyrm/templates/settings/site.html:95
msgid "Logo:"
msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86
#: bookwyrm/templates/settings/site.html:99
msgid "Logo small:"
msgstr "Logo pequeño:"
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/settings/site.html:103
msgid "Favicon:"
msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98
#: bookwyrm/templates/settings/site.html:111
msgid "Default theme:"
msgstr "Tema por defecto:"
#: bookwyrm/templates/settings/site.html:113
#: bookwyrm/templates/settings/site.html:126
msgid "Support link:"
msgstr "Enlace de apoyo:"
#: bookwyrm/templates/settings/site.html:117
#: bookwyrm/templates/settings/site.html:130
msgid "Support title:"
msgstr "Título de apoyo:"
#: bookwyrm/templates/settings/site.html:121
#: bookwyrm/templates/settings/site.html:134
msgid "Admin email:"
msgstr "Correo electrónico de administradorx:"
#: bookwyrm/templates/settings/site.html:125
#: bookwyrm/templates/settings/site.html:138
msgid "Additional info:"
msgstr "Más informacion:"
#: bookwyrm/templates/settings/site.html:139
#: bookwyrm/templates/settings/site.html:152
msgid "Allow registration"
msgstr "Permitir registración"
#: bookwyrm/templates/settings/site.html:145
#: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address"
msgstr "Requerir a usuarios a confirmar dirección de correo electrónico"
#: bookwyrm/templates/settings/site.html:147
#: bookwyrm/templates/settings/site.html:160
msgid "(Recommended if registration is open)"
msgstr "(Recomendado si la registración es abierta)"
#: bookwyrm/templates/settings/site.html:152
#: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests"
msgstr "Permitir solicitudes de invitación"
#: bookwyrm/templates/settings/site.html:158
#: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests"
msgstr "Establece una pregunta para las solicitudes de invitación."
#: bookwyrm/templates/settings/site.html:163
#: bookwyrm/templates/settings/site.html:176
msgid "Question:"
msgstr "Pregunta:"
#: bookwyrm/templates/settings/site.html:168
#: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:"
msgstr "Texto de registración cerrada:"
#: bookwyrm/templates/settings/site.html:172
#: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:"
msgstr "Texto de solicitud de invitación:"
@ -5712,6 +5774,19 @@ msgstr "Dejar de seguir"
msgid "Accept"
msgstr "Aceptar"
#: bookwyrm/templates/snippets/footer.html:16
msgid "Documentation"
msgstr "Documentación de Django"
#: bookwyrm/templates/snippets/footer.html:42
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Apoya a %(site_name)s en <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/snippets/footer.html:49
msgid "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>."
msgstr "BookWyrm es software libre y de código abierto. Puedes contribuir o reportar problemas en <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/snippets/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13
msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Objetivo de Lectura de %(current_year)s"
msgid "User Activity"
msgstr "Actividad del usuario"
#: bookwyrm/templates/user/user.html:70
#: bookwyrm/templates/user/user.html:71
msgid "RSS feed"
msgstr "Feed RSS"
#: bookwyrm/templates/user/user.html:81
#: bookwyrm/templates/user/user.html:83
msgid "No activities yet!"
msgstr "¡Aún no actividades!"
@ -6252,10 +6327,6 @@ msgstr "Archivo excede el tamaño máximo: 10MB"
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "No un archivo csv válido"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"

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-11-10 21:42+0000\n"
"PO-Revision-Date: 2022-11-10 22:54\n"
"POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-12-05 03:56\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Finnish\n"
"Language: fi\n"
@ -90,7 +90,7 @@ msgstr "Virheellinen koodi"
msgid "This domain is blocked. Please contact your administrator if you think this is an error."
msgstr "Verkkotunnus on estetty. Jos epäilet virhettä, ota yhteyttä ylläpitäjään."
#: bookwyrm/forms/links.py:46
#: bookwyrm/forms/links.py:49
msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending."
msgstr "Linkki ja tiedostotyyppi on jo lisätty kirjan tietoihin. Jos se ei näy, verkkotunnusta on vielä odotettava."
@ -256,14 +256,14 @@ msgstr "Seuraajat"
msgid "Private"
msgstr "Yksityinen"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140
#: bookwyrm/templates/settings/imports/imports.html:19
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active"
msgstr "Aktiivinen"
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:138
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:155
msgid "Complete"
msgstr ""
@ -316,19 +316,19 @@ msgstr "Lainaukset"
msgid "Everything else"
msgstr "Muut"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home Timeline"
msgstr "Oma aikajana"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home"
msgstr "Etusivu"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
msgid "Books Timeline"
msgstr "Kirjavirta"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Kirjavirta"
msgid "Books"
msgstr "Kirjat"
#: bookwyrm/settings.py:282
#: bookwyrm/settings.py:286
msgid "English"
msgstr "English (englanti)"
#: bookwyrm/settings.py:283
#: bookwyrm/settings.py:287
msgid "Català (Catalan)"
msgstr "Català (katalaani)"
#: bookwyrm/settings.py:284
#: bookwyrm/settings.py:288
msgid "Deutsch (German)"
msgstr "Deutsch (saksa)"
#: bookwyrm/settings.py:285
#: bookwyrm/settings.py:289
msgid "Español (Spanish)"
msgstr "Español (espanja)"
#: bookwyrm/settings.py:286
#: bookwyrm/settings.py:290
msgid "Galego (Galician)"
msgstr "Galego (galego)"
#: bookwyrm/settings.py:287
#: bookwyrm/settings.py:291
msgid "Italiano (Italian)"
msgstr "Italiano (italia)"
#: bookwyrm/settings.py:288
#: bookwyrm/settings.py:292
msgid "Suomi (Finnish)"
msgstr "suomi"
#: bookwyrm/settings.py:289
#: bookwyrm/settings.py:293
msgid "Français (French)"
msgstr "Français (ranska)"
#: bookwyrm/settings.py:290
#: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (liettua)"
#: bookwyrm/settings.py:291
#: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)"
msgstr "Norsk (norja)"
#: bookwyrm/settings.py:292
#: bookwyrm/settings.py:296
msgid "Polski (Polish)"
msgstr "Polski (puola)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (brasilianportugali)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (portugali)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:299
msgid "Română (Romanian)"
msgstr "Română (romania)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:300
msgid "Svenska (Swedish)"
msgstr "Svenska (ruotsi)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (yksinkertaistettu kiina)"
#: bookwyrm/settings.py:298
#: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (perinteinen kiina)"
@ -459,24 +459,24 @@ msgstr "<a href=\"%(book_path)s\"><em>%(title)s</em></a> jakaa %(site_name)s-yht
msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out</a> and make yourself heard."
msgstr "Täällä voit pitää kirjaa lukemistasi kirjoista, keskustella kirjoista, kirjoittaa arvioita ja etsiä uutta luettavaa. Täällä ei ole mainoksia eikä korporaatioita, täällä ollaan pienimuotoisia ja ihmisläheisiä. Jos sinulla on BookWyrm-alustaan liittyviä ehdotuksia tai visioita uusista ominaisuuksista tai haluat raportoida virheistä ohjelmistokoodissa, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ota toki yhteyttä</a>."
#: bookwyrm/templates/about/about.html:103
#: bookwyrm/templates/about/about.html:104
msgid "Meet your admins"
msgstr "Ylläpitäjät"
#: bookwyrm/templates/about/about.html:106
#: bookwyrm/templates/about/about.html:107
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"%(coc_path)s\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr "%(site_name)s pyörii moderaattorien ja ylläpitäjien työllä. He myös valvovat <a href=\"%(coc_path)s\">käyttöehtojen</a> noudattamista ja reagoivat käyttäjien tekemiin ilmoituksiin."
#: bookwyrm/templates/about/about.html:120
#: bookwyrm/templates/about/about.html:121
msgid "Moderator"
msgstr "Moderaattori"
#: bookwyrm/templates/about/about.html:122 bookwyrm/templates/user_menu.html:63
#: bookwyrm/templates/about/about.html:123 bookwyrm/templates/user_menu.html:63
msgid "Admin"
msgstr "Ylläpitäjä"
#: bookwyrm/templates/about/about.html:138
#: bookwyrm/templates/about/about.html:139
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
@ -486,6 +486,7 @@ msgstr "Lähetä yksityisviesti"
#: bookwyrm/templates/about/conduct.html:4
#: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct"
msgstr "Käyttöehdot"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Ohjelmistoversio:"
#: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200
#: bookwyrm/templates/snippets/2fa_footer.html:8
#: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
msgstr "%(site_name)s — tietoja"
@ -512,9 +513,15 @@ msgstr "%(site_name)s — tietoja"
#: bookwyrm/templates/about/layout.html:47
#: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy"
msgstr "Tietosuojakäytäntö"
#: bookwyrm/templates/about/layout.html:54
#: bookwyrm/templates/snippets/footer.html:34
msgid "Impressum"
msgstr ""
#: bookwyrm/templates/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8
#, python-format
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105
#: bookwyrm/templates/settings/site.html:181
#: bookwyrm/templates/settings/site.html:194
#: bookwyrm/templates/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Tallenna"
#: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80
#: bookwyrm/templates/search/barcode_modal.html:45
#: bookwyrm/templates/search/barcode_modal.html:43
#: bookwyrm/templates/settings/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
@ -852,7 +859,7 @@ msgstr "Tietoja ladattaessa muodostetaan yhteys lähteeseen <strong>%(source_nam
#: bookwyrm/templates/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52
#: bookwyrm/templates/preferences/2fa.html:54
#: bookwyrm/templates/preferences/2fa.html:77
#: bookwyrm/templates/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Verkkotunnus"
#: bookwyrm/templates/book/file_links/edit_links.html:36
#: bookwyrm/templates/import/import.html:105
#: bookwyrm/templates/import/import.html:122
#: bookwyrm/templates/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
@ -1333,7 +1340,7 @@ msgstr "Tila"
#: bookwyrm/templates/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:62
#: bookwyrm/templates/settings/imports/imports.html:110
#: bookwyrm/templates/settings/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99
msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Tuntematon käyttäjä"
msgid "Report spam"
msgstr "Ilmoita roskapostiksi"
#: bookwyrm/templates/book/file_links/edit_links.html:101
#: bookwyrm/templates/book/file_links/edit_links.html:102
msgid "No links available for this book."
msgstr "Tähän kirjaan ei liity linkkejä."
#: bookwyrm/templates/book/file_links/edit_links.html:112
#: bookwyrm/templates/book/file_links/edit_links.html:113
#: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file"
msgstr "Lisää linkki tiedostoon"
@ -1735,7 +1742,7 @@ msgstr "Jos et pyytänyt salasanan palautusta, voit jättää viestin huomiotta.
msgid "Reset your %(site_name)s password"
msgstr "Palauta %(site_name)s-salasanasi"
#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/embed-layout.html:20 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
@ -1743,12 +1750,12 @@ msgstr "Palauta %(site_name)s-salasanasi"
msgid "%(site_name)s home page"
msgstr "%(site_name)s — etusivu"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204
#: bookwyrm/templates/snippets/2fa_footer.html:12
#: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin"
msgstr "Ota yhteyttä ylläpitäjään"
#: bookwyrm/templates/embed-layout.html:46
#: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm"
msgstr "Liity BookWyrmiin"
@ -2314,8 +2321,7 @@ msgstr "Tervetuloa BookWyrmin käyttäjäksi!<br><br>Haluatko esittelykierroksen
#: bookwyrm/templates/guided_tour/home.html:17
#: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212
#: bookwyrm/templates/snippets/2fa_footer.html:20
#: bookwyrm/templates/snippets/footer.html:20
msgid "Guided Tour"
msgstr "Esittelykierros"
@ -2625,81 +2631,89 @@ msgstr "Etsi kirja"
msgid "Import Books"
msgstr "Tuo kirjoja"
#: bookwyrm/templates/import/import.html:15
#: bookwyrm/templates/import/import.html:13
msgid "Not a valid CSV file"
msgstr ""
#: bookwyrm/templates/import/import.html:22
#, python-format
msgid "On average, recent imports have taken %(hours)s hours."
msgstr ""
#: bookwyrm/templates/import/import.html:19
#: bookwyrm/templates/import/import.html:26
#, python-format
msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr ""
#: bookwyrm/templates/import/import.html:34
#: bookwyrm/templates/import/import.html:41
msgid "Data source:"
msgstr "Tietolähde:"
#: bookwyrm/templates/import/import.html:40
#: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)"
msgstr ""
#: bookwyrm/templates/import/import.html:43
#: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)"
msgstr ""
#: bookwyrm/templates/import/import.html:46
#: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)"
msgstr ""
#: bookwyrm/templates/import/import.html:49
#: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)"
msgstr ""
#: bookwyrm/templates/import/import.html:52
#: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)"
msgstr ""
#: bookwyrm/templates/import/import.html:58
#: bookwyrm/templates/import/import.html:65
msgid "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."
msgstr "Goodreads-tiedot voi ladata Goodreads-käyttäjätilin <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Import/Export-sivun</a> kautta."
#: bookwyrm/templates/import/import.html:67
#: bookwyrm/templates/import/import.html:74
msgid "Data file:"
msgstr "Datatiedosto:"
#: bookwyrm/templates/import/import.html:75
#: bookwyrm/templates/import/import.html:82
msgid "Include reviews"
msgstr "Myös arviot"
#: bookwyrm/templates/import/import.html:80
#: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:"
msgstr "Tuotavien arvioiden yksityisyysvalinta:"
#: bookwyrm/templates/import/import.html:86
#: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Tuo"
#: bookwyrm/templates/import/import.html:91
#: bookwyrm/templates/import/import.html:101
msgid "Imports are temporarily disabled; thank you for your patience."
msgstr ""
#: bookwyrm/templates/import/import.html:108
msgid "Recent Imports"
msgstr "Viimeksi tuotu"
#: bookwyrm/templates/import/import.html:96
#: bookwyrm/templates/settings/imports/imports.html:41
#: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created"
msgstr ""
#: bookwyrm/templates/import/import.html:99
#: bookwyrm/templates/import/import.html:116
msgid "Last Updated"
msgstr ""
#: bookwyrm/templates/import/import.html:102
#: bookwyrm/templates/settings/imports/imports.html:50
#: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items"
msgstr ""
#: bookwyrm/templates/import/import.html:111
#: bookwyrm/templates/import/import.html:128
msgid "No recent imports"
msgstr "Ei viimeaikaisia tuonteja"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Päivitä"
#: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82
#: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import"
msgstr ""
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Hylkää"
#: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59
#: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items"
msgstr "Epäonnistuneet kohteet"
@ -2958,7 +2972,7 @@ msgstr "Käyttäjänimi:"
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:68
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Salasana:"
@ -3038,22 +3052,6 @@ msgstr "Tilapäivitys onnistui"
msgid "Error posting status"
msgstr "Virhe tilapäivityksessä"
#: bookwyrm/templates/layout.html:208
#: bookwyrm/templates/snippets/2fa_footer.html:16
msgid "Documentation"
msgstr "Käyttöohjeet"
#: bookwyrm/templates/layout.html:221
#: bookwyrm/templates/snippets/2fa_footer.html:29
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Tue %(site_name)s-sivustoa osoitteessa <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/layout.html:228
#: bookwyrm/templates/snippets/2fa_footer.html:36
msgid "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>."
msgstr "BookWyrmin lähdekoodi on avointa. Kehitystyöhön voi osallistua ja ongelmista voi ilmoittaa <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHubissa</a>."
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Poistetaanko lista?"
#: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17
#: bookwyrm/templates/lists/layout.html:18
msgid "Edit List"
msgstr "Muokkaa listaa"
@ -3128,13 +3126,12 @@ msgstr "Muokkaa listaa"
msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s (lista), tehnyt %(owner)s"
#: bookwyrm/templates/lists/embed-list.html:18
#: bookwyrm/templates/lists/embed-list.html:20
#, python-format
msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "— <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27
#: bookwyrm/templates/lists/list.html:54
#: bookwyrm/templates/lists/embed-list.html:29
msgid "This list is currently empty"
msgstr "Lista on tyhjä"
@ -3216,6 +3213,10 @@ msgstr "Kirjan ehdottaminen listaan onnistui."
msgid "You successfully added a book to this list!"
msgstr "Kirjan lisääminen listaan onnistui."
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty."
msgstr ""
#: bookwyrm/templates/lists/list.html:104
msgid "Edit notes"
msgstr "Muokkaa merkintöjä"
@ -3339,12 +3340,17 @@ msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> ehdotti teoksia <
#: bookwyrm/templates/notifications/items/add.html:66
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added a book to one of your lists"
msgstr ""
#: bookwyrm/templates/notifications/items/add.html:72
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[0] "<a href=\"%(related_user_link)s\">%(related_user)s</a> lisäsi teokset <em><a href=\"%(book_path)s\">%(book_title)s</a></em> ja <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em> sekä %(display_count)s muun teoksen listaasi <a href=\"%(list_path)s\">%(list_name)s</a>"
msgstr[1] "<a href=\"%(related_user_link)s\">%(related_user)s</a> lisäsi teokset <em><a href=\"%(book_path)s\">%(book_title)s</a></em> ja <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em> sekä %(display_count)s muuta teosta listaasi <a href=\"%(list_path)s\">%(list_name)s</a>"
#: bookwyrm/templates/notifications/items/add.html:82
#: bookwyrm/templates/notifications/items/add.html:88
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
@ -3768,19 +3774,31 @@ msgstr "Luo varmistuskoodit"
msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
msgstr "Vahvista autentikointisovellus skannaamalla QR-koodi sovelluksella ja syöttämällä alle sovelluksen antama koodi."
#: bookwyrm/templates/preferences/2fa.html:50
#: bookwyrm/templates/preferences/2fa.html:52
msgid "Use setup key"
msgstr ""
#: bookwyrm/templates/preferences/2fa.html:58
msgid "Account name:"
msgstr ""
#: bookwyrm/templates/preferences/2fa.html:65
msgid "Code:"
msgstr ""
#: bookwyrm/templates/preferences/2fa.html:73
msgid "Enter the code from your app:"
msgstr "Syötä sovelluksen antama koodi:"
#: bookwyrm/templates/preferences/2fa.html:60
#: bookwyrm/templates/preferences/2fa.html:83
msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like <em>Authy</em>, <em>Google Authenticator</em> or <em>Microsoft Authenticator</em> each time you log in."
msgstr "Voit lisätä tilisi turvallisuutta käyttämällä kaksivaiheista tunnistautumista (2FA). Se edellyttää jokaisen sisäänkirjautumisen yhteydessä kertakäyttöisen koodin syöttämistä. Vaatii puhelinsovelluksen, esim. <em>Authy</em>, <em>Google Authenticator</em> tai <em>Microsoft Authenticator</em>."
#: bookwyrm/templates/preferences/2fa.html:62
#: bookwyrm/templates/preferences/2fa.html:85
msgid "Confirm your password to begin setting up 2FA."
msgstr "Aloita kaksivaiheisen tunnistautumisen käyttöönotto syöttämällä salasanasi."
#: bookwyrm/templates/preferences/2fa.html:72
#: bookwyrm/templates/preferences/2fa.html:95
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA"
msgstr "Ota kaksivaiheinen tunnistautuminen käyttöön"
@ -3870,7 +3888,7 @@ msgstr "Profiili"
#: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91
msgid "Display"
msgstr "Näyttövalinnat"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Skannaa viivakoodi\n"
" "
#: bookwyrm/templates/search/barcode_modal.html:23
#: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..."
msgstr "Pyydetään kameraa..."
#: bookwyrm/templates/search/barcode_modal.html:24
#: bookwyrm/templates/search/barcode_modal.html:22
msgid "Grant access to the camera to scan a book's barcode."
msgstr "Anna lupa käyttää kameraa, jotta viivakoodi voidaan skannata."
#: bookwyrm/templates/search/barcode_modal.html:29
#: bookwyrm/templates/search/barcode_modal.html:27
msgid "Could not access camera"
msgstr "Kameraa ei löytynyt"
#: bookwyrm/templates/search/barcode_modal.html:33
#: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner"
msgid "Scanning..."
msgstr "Skannataan..."
#: bookwyrm/templates/search/barcode_modal.html:34
#: bookwyrm/templates/search/barcode_modal.html:32
msgid "Align your book's barcode with the camera."
msgstr "Kohdista kirjan viivakoodi kameraan."
#: bookwyrm/templates/search/barcode_modal.html:38
#: bookwyrm/templates/search/barcode_modal.html:36
msgctxt "barcode scanner"
msgid "ISBN scanned"
msgstr "ISBN skannattu"
#: bookwyrm/templates/search/barcode_modal.html:39
#: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN"
msgid "Searching for book:"
msgstr "Haetaan kirjaa:"
#: bookwyrm/templates/search/book.html:39
#: bookwyrm/templates/search/book.html:25
#, python-format
msgid "%(formatted_review_count)s review"
msgid_plural "%(formatted_review_count)s reviews"
msgstr[0] ""
msgstr[1] ""
#: bookwyrm/templates/search/book.html:34
#, python-format
msgid "(published %(pub_year)s)"
msgstr ""
#: bookwyrm/templates/search/book.html:50
msgid "Results from"
msgstr "Tulokset lähteestä"
#: bookwyrm/templates/search/book.html:78
#: bookwyrm/templates/search/book.html:89
msgid "Import book"
msgstr "Tuo kirja"
#: bookwyrm/templates/search/book.html:102
#: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues"
msgstr "Lataa tuloksia muista katalogeista"
#: bookwyrm/templates/search/book.html:106
#: bookwyrm/templates/search/book.html:117
msgid "Manually add book"
msgstr "Lisää kirja käsin"
#: bookwyrm/templates/search/book.html:111
#: bookwyrm/templates/search/book.html:122
msgid "Log in to import or add books."
msgstr "Kirjojen tuonti tai lisääminen edellyttää sisäänkirjautumista."
@ -4112,7 +4142,7 @@ msgstr "Hakutyyppi"
#: bookwyrm/templates/search/layout.html:24
#: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27
#: bookwyrm/templates/settings/federation/instance_list.html:51
#: bookwyrm/templates/settings/federation/instance_list.html:52
#: bookwyrm/templates/settings/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Luo tiedote"
#: bookwyrm/templates/settings/announcements/announcements.html:21
#: bookwyrm/templates/settings/federation/instance_list.html:39
#: bookwyrm/templates/settings/federation/instance_list.html:40
msgid "Date added"
msgstr "Lisätty"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Aktiiviset tehtävät"
#: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34
#: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID"
msgstr "Tunniste"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Epäonnistuneet:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
msgid "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:"
msgstr "Vaatii <a href=\"https://fediblock.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">FediBlock</a>-muotoillun json-tiedoston, jossa on <code>instanssi</code>- ja <code>url</code>-kentät. Esimerkki:"
msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:"
msgstr ""
#: bookwyrm/templates/settings/federation/instance_list.html:35
#: bookwyrm/templates/settings/federation/instance_list.html:36
#: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name"
msgstr "Palvelimen nimi"
#: bookwyrm/templates/settings/federation/instance_list.html:43
#: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated"
msgstr "Viimeisin päivitys"
#: bookwyrm/templates/settings/federation/instance_list.html:47
#: bookwyrm/templates/settings/federation/instance_list.html:48
#: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software"
msgstr "Ohjelmisto"
#: bookwyrm/templates/settings/federation/instance_list.html:69
#: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found"
msgstr "Palvelimia ei löytynyt"
@ -4690,27 +4720,51 @@ msgstr "Palvelimia ei löytynyt"
msgid "Stop import?"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:23
#: bookwyrm/templates/settings/imports/imports.html:19
msgid "Disable starting new imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:30
msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:31
msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be effected."
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:36
msgid "Disable imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:50
msgid "Users are currently unable to start new imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:55
msgid "Enable imports"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:71
msgid "Completed"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:37
#: bookwyrm/templates/settings/imports/imports.html:85
msgid "User"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:46
#: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:53
#: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:56
#: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items"
msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:91
#: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found."
msgstr ""
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Sivuston asetukset"
#: bookwyrm/templates/settings/layout.html:106
#: bookwyrm/templates/settings/site.html:95
#: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/settings/themes.html:4
#: bookwyrm/templates/settings/themes.html:6
msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Tietoja palvelimesta"
#: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110
#: bookwyrm/templates/settings/site.html:123
msgid "Footer Content"
msgstr "Alatunnisteen sisältö"
#: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134
#: bookwyrm/templates/settings/site.html:147
msgid "Registration"
msgstr "Käyttäjätilien avaaminen"
@ -5093,71 +5147,79 @@ msgstr "Käyttöehdot:"
msgid "Privacy Policy:"
msgstr "Tietosuojakäytäntö:"
#: bookwyrm/templates/settings/site.html:79
#: bookwyrm/templates/settings/site.html:73
msgid "Impressum:"
msgstr ""
#: bookwyrm/templates/settings/site.html:78
msgid "Include impressum:"
msgstr ""
#: bookwyrm/templates/settings/site.html:92
msgid "Images"
msgstr "Kuvat"
#: bookwyrm/templates/settings/site.html:82
#: bookwyrm/templates/settings/site.html:95
msgid "Logo:"
msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86
#: bookwyrm/templates/settings/site.html:99
msgid "Logo small:"
msgstr "Pieni logo:"
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/settings/site.html:103
msgid "Favicon:"
msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98
#: bookwyrm/templates/settings/site.html:111
msgid "Default theme:"
msgstr "Oletusteema:"
#: bookwyrm/templates/settings/site.html:113
#: bookwyrm/templates/settings/site.html:126
msgid "Support link:"
msgstr "Rahankeruulinkki:"
#: bookwyrm/templates/settings/site.html:117
#: bookwyrm/templates/settings/site.html:130
msgid "Support title:"
msgstr "Rahankeruulinkin otsikko:"
#: bookwyrm/templates/settings/site.html:121
#: bookwyrm/templates/settings/site.html:134
msgid "Admin email:"
msgstr "Ylläpitäjän sähköpostiosoite:"
#: bookwyrm/templates/settings/site.html:125
#: bookwyrm/templates/settings/site.html:138
msgid "Additional info:"
msgstr "Lisätietoja:"
#: bookwyrm/templates/settings/site.html:139
#: bookwyrm/templates/settings/site.html:152
msgid "Allow registration"
msgstr "Salli käyttäjätilien avaaminen"
#: bookwyrm/templates/settings/site.html:145
#: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address"
msgstr "Vaadi käyttäjiä vahvistamaan sähköpostiosoitteensa"
#: bookwyrm/templates/settings/site.html:147
#: bookwyrm/templates/settings/site.html:160
msgid "(Recommended if registration is open)"
msgstr "(Suositellaan, jos käyttäjätilejä voi avata vapaasti)"
#: bookwyrm/templates/settings/site.html:152
#: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests"
msgstr "Salli kutsulinkin pyytäminen"
#: bookwyrm/templates/settings/site.html:158
#: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests"
msgstr "Kutsupyyntöjen lisätietokysymys"
#: bookwyrm/templates/settings/site.html:163
#: bookwyrm/templates/settings/site.html:176
msgid "Question:"
msgstr "Kysymys:"
#: bookwyrm/templates/settings/site.html:168
#: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:"
msgstr "Teksti, joka näytetään, kun käyttäjätilin avaaminen ei ole mahdollista:"
#: bookwyrm/templates/settings/site.html:172
#: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:"
msgstr "Kutsupyyntökehote ja -ohje:"
@ -5712,6 +5774,19 @@ msgstr "Lopeta seuraaminen"
msgid "Accept"
msgstr "Hyväksy"
#: bookwyrm/templates/snippets/footer.html:16
msgid "Documentation"
msgstr "Käyttöohjeet"
#: bookwyrm/templates/snippets/footer.html:42
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Tue %(site_name)s-sivustoa osoitteessa <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/snippets/footer.html:49
msgid "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>."
msgstr "BookWyrmin lähdekoodi on avointa. Kehitystyöhön voi osallistua ja ongelmista voi ilmoittaa <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHubissa</a>."
#: bookwyrm/templates/snippets/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13
msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Lukutavoite vuodelle %(current_year)s"
msgid "User Activity"
msgstr "Käyttäjän toiminta"
#: bookwyrm/templates/user/user.html:70
#: bookwyrm/templates/user/user.html:71
msgid "RSS feed"
msgstr "RSS-syöte"
#: bookwyrm/templates/user/user.html:81
#: bookwyrm/templates/user/user.html:83
msgid "No activities yet!"
msgstr "Ei toimintaa!"
@ -6252,10 +6327,6 @@ msgstr "Tiedosto on enimmäiskokoa 10 Mt suurempi"
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "Epäkelpo csv-tiedosto"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"

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-11-10 21:42+0000\n"
"PO-Revision-Date: 2022-11-13 11:57\n"
"POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-12-05 06:26\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: French\n"
"Language: fr\n"
@ -90,7 +90,7 @@ msgstr "Code incorrect"
msgid "This domain is blocked. Please contact your administrator if you think this is an error."
msgstr "Ce domaine est bloqué. Contactez ladmin de votre instance si vous pensez que cest une erreur."
#: bookwyrm/forms/links.py:46
#: bookwyrm/forms/links.py:49
msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending."
msgstr "Le lien avec ce type de fichier a déjà été ajouté pour ce livre. Sil nest pas visible, le domaine est encore en attente."
@ -256,14 +256,14 @@ msgstr "Abonné(e)s"
msgid "Private"
msgstr "Privé"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140
#: bookwyrm/templates/settings/imports/imports.html:19
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active"
msgstr "Actif"
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:138
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:155
msgid "Complete"
msgstr "Terminé"
@ -316,19 +316,19 @@ msgstr "Citations"
msgid "Everything else"
msgstr "Tout le reste"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home Timeline"
msgstr "Mon fil dactualité"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home"
msgstr "Accueil"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
msgid "Books Timeline"
msgstr "Actualité de mes livres"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43
@ -336,73 +336,73 @@ msgstr "Actualité de mes livres"
msgid "Books"
msgstr "Livres"
#: bookwyrm/settings.py:282
#: bookwyrm/settings.py:286
msgid "English"
msgstr "English"
#: bookwyrm/settings.py:283
#: bookwyrm/settings.py:287
msgid "Català (Catalan)"
msgstr "Català (Catalan)"
#: bookwyrm/settings.py:284
#: bookwyrm/settings.py:288
msgid "Deutsch (German)"
msgstr "Deutsch"
#: bookwyrm/settings.py:285
#: bookwyrm/settings.py:289
msgid "Español (Spanish)"
msgstr "Español"
#: bookwyrm/settings.py:286
#: bookwyrm/settings.py:290
msgid "Galego (Galician)"
msgstr "Galego (Galicien)"
#: bookwyrm/settings.py:287
#: bookwyrm/settings.py:291
msgid "Italiano (Italian)"
msgstr "Italiano (Italien)"
#: bookwyrm/settings.py:288
#: bookwyrm/settings.py:292
msgid "Suomi (Finnish)"
msgstr "Suomi (Finnois)"
#: bookwyrm/settings.py:289
#: bookwyrm/settings.py:293
msgid "Français (French)"
msgstr "Français"
#: bookwyrm/settings.py:290
#: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituanien)"
#: bookwyrm/settings.py:291
#: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)"
msgstr "Norsk (Norvégien)"
#: bookwyrm/settings.py:292
#: bookwyrm/settings.py:296
msgid "Polski (Polish)"
msgstr "Polski (Polonais)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portugais brésilien)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugais européen)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:299
msgid "Română (Romanian)"
msgstr "Română (Roumain)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:300
msgid "Svenska (Swedish)"
msgstr "Svenska (Suédois)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)"
msgstr "简化字"
#: bookwyrm/settings.py:298
#: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)"
msgstr "Infos supplémentaires:"
msgstr "繁體中文 (chinois traditionnel)"
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
@ -459,24 +459,24 @@ msgstr "<a href=\"%(book_path)s\"><em>%(title)s</em></a> divise les critiques pl
msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out</a> and make yourself heard."
msgstr "Gardez trace de vos lectures, parlez de livres, écrivez des critiques et découvrez quoi lire ensuite. BookWyrm est un logiciel à taille humaine, sans publicité, anti-capitaliste et axé sur la communauté, conçu pour rester petit et personnel. Si vous avez des demandes de fonctionnalités, des rapports de bogue ou des rêves grandioses, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">rejoignez-nous</a> et faites-vous entendre."
#: bookwyrm/templates/about/about.html:103
#: bookwyrm/templates/about/about.html:104
msgid "Meet your admins"
msgstr "Rencontrez vos admins"
#: bookwyrm/templates/about/about.html:106
#: bookwyrm/templates/about/about.html:107
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"%(coc_path)s\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr "Ladministration et la modération de %(site_name)s maintiennent le site opérationnel, font respecter le <a href=\"%(coc_path)s\">code de conduite</a>, et interviennent lorsque les utilisateurs signalent du spam et des mauvais comportements."
#: bookwyrm/templates/about/about.html:120
#: bookwyrm/templates/about/about.html:121
msgid "Moderator"
msgstr "Modérateur/modératrice"
#: bookwyrm/templates/about/about.html:122 bookwyrm/templates/user_menu.html:63
#: bookwyrm/templates/about/about.html:123 bookwyrm/templates/user_menu.html:63
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:138
#: bookwyrm/templates/about/about.html:139
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
@ -486,6 +486,7 @@ msgstr "Envoyer un message direct"
#: bookwyrm/templates/about/conduct.html:4
#: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct"
msgstr "Code de conduite"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Version logicielle :"
#: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200
#: bookwyrm/templates/snippets/2fa_footer.html:8
#: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
msgstr "À propos de %(site_name)s"
@ -512,9 +513,15 @@ msgstr "À propos de %(site_name)s"
#: bookwyrm/templates/about/layout.html:47
#: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy"
msgstr "Politique de vie privée"
#: bookwyrm/templates/about/layout.html:54
#: bookwyrm/templates/snippets/footer.html:34
msgid "Impressum"
msgstr "Mentions légales"
#: bookwyrm/templates/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8
#, python-format
@ -812,7 +819,7 @@ msgstr "ISNI :"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105
#: bookwyrm/templates/settings/site.html:181
#: bookwyrm/templates/settings/site.html:194
#: bookwyrm/templates/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Enregistrer"
#: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80
#: bookwyrm/templates/search/barcode_modal.html:45
#: bookwyrm/templates/search/barcode_modal.html:43
#: bookwyrm/templates/settings/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
@ -852,7 +859,7 @@ msgstr "Le chargement des données se connectera à <strong>%(source_name)s</str
#: bookwyrm/templates/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52
#: bookwyrm/templates/preferences/2fa.html:54
#: bookwyrm/templates/preferences/2fa.html:77
#: bookwyrm/templates/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Domaine"
#: bookwyrm/templates/book/file_links/edit_links.html:36
#: bookwyrm/templates/import/import.html:105
#: bookwyrm/templates/import/import.html:122
#: bookwyrm/templates/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
@ -1333,7 +1340,7 @@ msgstr "Statut"
#: bookwyrm/templates/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:62
#: bookwyrm/templates/settings/imports/imports.html:110
#: bookwyrm/templates/settings/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99
msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Compte inconnu"
msgid "Report spam"
msgstr "Signaler un spam"
#: bookwyrm/templates/book/file_links/edit_links.html:101
#: bookwyrm/templates/book/file_links/edit_links.html:102
msgid "No links available for this book."
msgstr "Aucun lien disponible pour ce livre."
#: bookwyrm/templates/book/file_links/edit_links.html:112
#: bookwyrm/templates/book/file_links/edit_links.html:113
#: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file"
msgstr "Ajouter un lien vers un fichier"
@ -1735,7 +1742,7 @@ msgstr "Si vous navez pas demandé la réinitialisation de votre mot de passe
msgid "Reset your %(site_name)s password"
msgstr "Réinitialiser votre mot de passe sur %(site_name)s"
#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/embed-layout.html:20 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
@ -1743,12 +1750,12 @@ msgstr "Réinitialiser votre mot de passe sur %(site_name)s"
msgid "%(site_name)s home page"
msgstr "%(site_name)s page d'accueil"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204
#: bookwyrm/templates/snippets/2fa_footer.html:12
#: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin"
msgstr "Contacter ladministrateur du site"
#: bookwyrm/templates/embed-layout.html:46
#: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm"
msgstr "Rejoindre BookWyrm"
@ -2314,8 +2321,7 @@ msgstr "Bienvenue sur Bookwyrm!<br><br>Voulez-vous suivre la visite guidée pour
#: bookwyrm/templates/guided_tour/home.html:17
#: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212
#: bookwyrm/templates/snippets/2fa_footer.html:20
#: bookwyrm/templates/snippets/footer.html:20
msgid "Guided Tour"
msgstr "Visite guidée"
@ -2625,81 +2631,89 @@ msgstr "Trouver un livre"
msgid "Import Books"
msgstr "Importer des livres"
#: bookwyrm/templates/import/import.html:15
#: bookwyrm/templates/import/import.html:13
msgid "Not a valid CSV file"
msgstr "Fichier CSV non valide"
#: bookwyrm/templates/import/import.html:22
#, python-format
msgid "On average, recent imports have taken %(hours)s hours."
msgstr "En moyenne, les dernières importations ont pris %(hours)s heures."
#: bookwyrm/templates/import/import.html:19
#: bookwyrm/templates/import/import.html:26
#, python-format
msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "En moyenne, les dernières importations ont pris %(minutes)s minutes."
#: bookwyrm/templates/import/import.html:34
#: bookwyrm/templates/import/import.html:41
msgid "Data source:"
msgstr "Source de données:"
#: bookwyrm/templates/import/import.html:40
#: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)"
msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43
#: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)"
msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46
#: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)"
msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49
#: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)"
msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52
#: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)"
msgstr "Calibre (CSV)"
#: bookwyrm/templates/import/import.html:58
#: bookwyrm/templates/import/import.html:65
msgid "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."
msgstr "Vous pouvez télécharger vos données Goodreads depuis la page <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Import/Export</a> de votre compte Goodreads."
#: bookwyrm/templates/import/import.html:67
#: bookwyrm/templates/import/import.html:74
msgid "Data file:"
msgstr "Fichier de données:"
#: bookwyrm/templates/import/import.html:75
#: bookwyrm/templates/import/import.html:82
msgid "Include reviews"
msgstr "Importer les critiques"
#: bookwyrm/templates/import/import.html:80
#: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:"
msgstr "Confidentialité des critiques importées:"
#: bookwyrm/templates/import/import.html:86
#: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importer"
#: bookwyrm/templates/import/import.html:91
#: bookwyrm/templates/import/import.html:101
msgid "Imports are temporarily disabled; thank you for your patience."
msgstr "Les importations sont temporairement désactivées, merci pour votre patience."
#: bookwyrm/templates/import/import.html:108
msgid "Recent Imports"
msgstr "Importations récentes"
#: bookwyrm/templates/import/import.html:96
#: bookwyrm/templates/settings/imports/imports.html:41
#: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created"
msgstr "Date de Création"
#: bookwyrm/templates/import/import.html:99
#: bookwyrm/templates/import/import.html:116
msgid "Last Updated"
msgstr "Dernière Mise à jour"
#: bookwyrm/templates/import/import.html:102
#: bookwyrm/templates/settings/imports/imports.html:50
#: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items"
msgstr "Éléments"
#: bookwyrm/templates/import/import.html:111
#: bookwyrm/templates/import/import.html:128
msgid "No recent imports"
msgstr "Aucune importation récente"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Actualiser"
#: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82
#: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import"
msgstr "Arrêter l'import"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rejeter"
#: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59
#: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items"
msgstr "Éléments dont l'importation a échoué"
@ -2958,7 +2972,7 @@ msgstr "Nom du compte:"
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:68
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Mot de passe:"
@ -3038,22 +3052,6 @@ msgstr "Publié !"
msgid "Error posting status"
msgstr "Erreur lors de la publication"
#: bookwyrm/templates/layout.html:208
#: bookwyrm/templates/snippets/2fa_footer.html:16
msgid "Documentation"
msgstr "Documentation"
#: bookwyrm/templates/layout.html:221
#: bookwyrm/templates/snippets/2fa_footer.html:29
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Soutenez %(site_name)s sur <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/layout.html:228
#: bookwyrm/templates/snippets/2fa_footer.html:36
msgid "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>."
msgstr "Le code source de BookWyrm est librement disponible. Vous pouvez contribuer ou rapporter des problèmes sur <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Supprimer cette liste ?"
#: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17
#: bookwyrm/templates/lists/layout.html:18
msgid "Edit List"
msgstr "Modifier la liste"
@ -3128,13 +3126,12 @@ msgstr "Modifier la liste"
msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, une liste de %(owner)s"
#: bookwyrm/templates/lists/embed-list.html:18
#: bookwyrm/templates/lists/embed-list.html:20
#, python-format
msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "sur <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27
#: bookwyrm/templates/lists/list.html:54
#: bookwyrm/templates/lists/embed-list.html:29
msgid "This list is currently empty"
msgstr "Cette liste est actuellement vide"
@ -3216,6 +3213,10 @@ msgstr "Vous avez suggéré un livre à cette liste!"
msgid "You successfully added a book to this list!"
msgstr "Vous avez ajouté un livre à cette liste!"
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty."
msgstr "Cette liste est actuellement vide."
#: bookwyrm/templates/lists/list.html:104
msgid "Edit notes"
msgstr "Modifier les notes"
@ -3339,12 +3340,17 @@ msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> a suggéré d'ajo
#: bookwyrm/templates/notifications/items/add.html:66
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added a book to one of your lists"
msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> a ajouté un livre à l'une de vos listes"
#: bookwyrm/templates/notifications/items/add.html:72
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[0] "<a href=\"%(related_user_link)s\">%(related_user)s</a> a ajouté <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em> et %(display_count)s autre livre à votre liste \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[1] "<a href=\"%(related_user_link)s\">%(related_user)s</a> a ajouté <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em> et %(display_count)s autres livres dans votre liste \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
#: bookwyrm/templates/notifications/items/add.html:82
#: bookwyrm/templates/notifications/items/add.html:88
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
@ -3768,19 +3774,31 @@ msgstr "Générer des codes de secours"
msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
msgstr "Scannez le code QR avec votre app d'authentification, puis saisissez ci-dessous le code de votre app pour confirmer que celle-ci est bien configurée."
#: bookwyrm/templates/preferences/2fa.html:50
#: bookwyrm/templates/preferences/2fa.html:52
msgid "Use setup key"
msgstr "Utiliser une clé d'initialisation"
#: bookwyrm/templates/preferences/2fa.html:58
msgid "Account name:"
msgstr "Nom du compte :"
#: bookwyrm/templates/preferences/2fa.html:65
msgid "Code:"
msgstr "Code :"
#: bookwyrm/templates/preferences/2fa.html:73
msgid "Enter the code from your app:"
msgstr "Entrez le code de votre app :"
#: bookwyrm/templates/preferences/2fa.html:60
#: bookwyrm/templates/preferences/2fa.html:83
msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like <em>Authy</em>, <em>Google Authenticator</em> or <em>Microsoft Authenticator</em> each time you log in."
msgstr "Vous pouvez sécuriser votre compte en utilisant lauthentification à deux facteurs (2FA). Cela vous demandera de saisir un code à usage unique en utilisant une app mobile comme <em>Authy</em>, <em>Google Authenticator</em> ou <em>Microsoft Authenticator</em> à chaque fois que vous vous connectez."
msgstr "Vous pouvez sécuriser votre compte en utilisant lauthentification à deux facteurs (2FA). Un code à usage unique fourni par une application mobile telle que <em>Authy</em>, <em>Google Authenticator</em> ou <em>Microsoft Authenticator</em> vous sera demandé à chaque fois que vous vous connecterez."
#: bookwyrm/templates/preferences/2fa.html:62
#: bookwyrm/templates/preferences/2fa.html:85
msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirmez votre mot de passe pour commencer à configurer lauthentification à deux facteur."
#: bookwyrm/templates/preferences/2fa.html:72
#: bookwyrm/templates/preferences/2fa.html:95
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA"
msgstr "Configurer lauthentification à deux facteurs"
@ -3870,7 +3888,7 @@ msgstr "Profil"
#: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91
msgid "Display"
msgstr "Affichage"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Scanner le code-barres\n"
" "
#: bookwyrm/templates/search/barcode_modal.html:23
#: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..."
msgstr "En attente de la caméra…"
#: bookwyrm/templates/search/barcode_modal.html:24
#: bookwyrm/templates/search/barcode_modal.html:22
msgid "Grant access to the camera to scan a book's barcode."
msgstr "Autorisez laccès à la caméra pour scanner le code-barres dun livre."
#: bookwyrm/templates/search/barcode_modal.html:29
#: bookwyrm/templates/search/barcode_modal.html:27
msgid "Could not access camera"
msgstr "Impossible daccéder à la caméra"
#: bookwyrm/templates/search/barcode_modal.html:33
#: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner"
msgid "Scanning..."
msgstr "Scan en cours…"
#: bookwyrm/templates/search/barcode_modal.html:34
#: bookwyrm/templates/search/barcode_modal.html:32
msgid "Align your book's barcode with the camera."
msgstr "Alignez le code-barres de votre livre avec la caméra."
#: bookwyrm/templates/search/barcode_modal.html:38
#: bookwyrm/templates/search/barcode_modal.html:36
msgctxt "barcode scanner"
msgid "ISBN scanned"
msgstr "ISBN scanné"
#: bookwyrm/templates/search/barcode_modal.html:39
#: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN"
msgid "Searching for book:"
msgstr "Recherche du livre :"
#: bookwyrm/templates/search/book.html:39
#: bookwyrm/templates/search/book.html:25
#, python-format
msgid "%(formatted_review_count)s review"
msgid_plural "%(formatted_review_count)s reviews"
msgstr[0] "%(formatted_review_count)s critique"
msgstr[1] "%(formatted_review_count)s critiques"
#: bookwyrm/templates/search/book.html:34
#, python-format
msgid "(published %(pub_year)s)"
msgstr "(publié en %(pub_year)s)"
#: bookwyrm/templates/search/book.html:50
msgid "Results from"
msgstr "Résultats de"
#: bookwyrm/templates/search/book.html:78
#: bookwyrm/templates/search/book.html:89
msgid "Import book"
msgstr "Importer le livre"
#: bookwyrm/templates/search/book.html:102
#: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues"
msgstr "Charger les résultats dautres catalogues"
#: bookwyrm/templates/search/book.html:106
#: bookwyrm/templates/search/book.html:117
msgid "Manually add book"
msgstr "Ajouter un livre manuellement"
#: bookwyrm/templates/search/book.html:111
#: bookwyrm/templates/search/book.html:122
msgid "Log in to import or add books."
msgstr "Authentifiez-vous pour importer ou ajouter des livres."
@ -4112,7 +4142,7 @@ msgstr "Type de recherche"
#: bookwyrm/templates/search/layout.html:24
#: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27
#: bookwyrm/templates/settings/federation/instance_list.html:51
#: bookwyrm/templates/settings/federation/instance_list.html:52
#: bookwyrm/templates/settings/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Ajouter une annonce"
#: bookwyrm/templates/settings/announcements/announcements.html:21
#: bookwyrm/templates/settings/federation/instance_list.html:39
#: bookwyrm/templates/settings/federation/instance_list.html:40
msgid "Date added"
msgstr "Date dajout"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Tâches actives"
#: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34
#: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID"
msgstr "ID"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Échec:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
msgid "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:"
msgstr "Attend un fichier json au format fourni par <a href=\"https://fediblock.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">FediBlock</a>, avec une liste d'entrées qui ont des champs <code>instance</code> et <code>url</code> . Par exemple :"
msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:"
msgstr "Attend un fichier json dans le format fourni par FediBlock, avec une liste d'entrées qui ont des champs <code>instance</code> et <code>url</code>. Par exemple :"
#: bookwyrm/templates/settings/federation/instance_list.html:35
#: bookwyrm/templates/settings/federation/instance_list.html:36
#: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name"
msgstr "Nom de linstance"
#: bookwyrm/templates/settings/federation/instance_list.html:43
#: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated"
msgstr "Dernière modification"
#: bookwyrm/templates/settings/federation/instance_list.html:47
#: bookwyrm/templates/settings/federation/instance_list.html:48
#: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software"
msgstr "Logiciel"
#: bookwyrm/templates/settings/federation/instance_list.html:69
#: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found"
msgstr "Aucune instance trouvée"
@ -4690,27 +4720,51 @@ msgstr "Aucune instance trouvée"
msgid "Stop import?"
msgstr "Arrêter l'import?"
#: bookwyrm/templates/settings/imports/imports.html:23
#: bookwyrm/templates/settings/imports/imports.html:19
msgid "Disable starting new imports"
msgstr "Désactiver le lancement de nouvelles importations"
#: bookwyrm/templates/settings/imports/imports.html:30
msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
msgstr "Ceci n'est destiné à être utilisé que lorsque la situation des importations est catastrophique et que vous devez suspendre cette fonctionnalité le temps de résoudre les problèmes."
#: bookwyrm/templates/settings/imports/imports.html:31
msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be effected."
msgstr "Tant que les importations sont désactivées, les utilisateurs ne seront pas autorisés à commencer de nouvelles importations, mais les importations existantes ne seront pas affectées."
#: bookwyrm/templates/settings/imports/imports.html:36
msgid "Disable imports"
msgstr "Désactiver les importations"
#: bookwyrm/templates/settings/imports/imports.html:50
msgid "Users are currently unable to start new imports"
msgstr "Les utilisateurs ne peuvent pas commencer de nouvelles importations"
#: bookwyrm/templates/settings/imports/imports.html:55
msgid "Enable imports"
msgstr "Activer les importations"
#: bookwyrm/templates/settings/imports/imports.html:71
msgid "Completed"
msgstr "Terminé"
#: bookwyrm/templates/settings/imports/imports.html:37
#: bookwyrm/templates/settings/imports/imports.html:85
msgid "User"
msgstr "Utilisateur"
#: bookwyrm/templates/settings/imports/imports.html:46
#: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated"
msgstr "Date de Mise à jour"
#: bookwyrm/templates/settings/imports/imports.html:53
#: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items"
msgstr "Éléments en attente"
#: bookwyrm/templates/settings/imports/imports.html:56
#: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items"
msgstr "Éléments réussis"
#: bookwyrm/templates/settings/imports/imports.html:91
#: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found."
msgstr "Aucun import correspondant trouvé."
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Paramètres du site"
#: bookwyrm/templates/settings/layout.html:106
#: bookwyrm/templates/settings/site.html:95
#: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/settings/themes.html:4
#: bookwyrm/templates/settings/themes.html:6
msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Information sur linstance"
#: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110
#: bookwyrm/templates/settings/site.html:123
msgid "Footer Content"
msgstr "Contenu du pied de page"
#: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134
#: bookwyrm/templates/settings/site.html:147
msgid "Registration"
msgstr "Inscription"
@ -5093,71 +5147,79 @@ msgstr "Code de conduite:"
msgid "Privacy Policy:"
msgstr "Politique de vie privée:"
#: bookwyrm/templates/settings/site.html:79
#: bookwyrm/templates/settings/site.html:73
msgid "Impressum:"
msgstr "Mentions légales :"
#: bookwyrm/templates/settings/site.html:78
msgid "Include impressum:"
msgstr "Inclure les mentions légales :"
#: bookwyrm/templates/settings/site.html:92
msgid "Images"
msgstr "Images"
#: bookwyrm/templates/settings/site.html:82
#: bookwyrm/templates/settings/site.html:95
msgid "Logo:"
msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86
#: bookwyrm/templates/settings/site.html:99
msgid "Logo small:"
msgstr "Logo réduit:"
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/settings/site.html:103
msgid "Favicon:"
msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98
#: bookwyrm/templates/settings/site.html:111
msgid "Default theme:"
msgstr "Thème par défaut :"
#: bookwyrm/templates/settings/site.html:113
#: bookwyrm/templates/settings/site.html:126
msgid "Support link:"
msgstr "URL pour soutenir linstance:"
#: bookwyrm/templates/settings/site.html:117
#: bookwyrm/templates/settings/site.html:130
msgid "Support title:"
msgstr "Titre pour soutenir linstance:"
#: bookwyrm/templates/settings/site.html:121
#: bookwyrm/templates/settings/site.html:134
msgid "Admin email:"
msgstr "Email de ladministrateur:"
#: bookwyrm/templates/settings/site.html:125
#: bookwyrm/templates/settings/site.html:138
msgid "Additional info:"
msgstr "Infos supplémentaires:"
#: bookwyrm/templates/settings/site.html:139
#: bookwyrm/templates/settings/site.html:152
msgid "Allow registration"
msgstr "Autoriser les inscriptions"
#: bookwyrm/templates/settings/site.html:145
#: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address"
msgstr "Demander aux utilisateurs et utilisatrices de confirmer leur adresse email"
#: bookwyrm/templates/settings/site.html:147
#: bookwyrm/templates/settings/site.html:160
msgid "(Recommended if registration is open)"
msgstr "(Recommandé si les inscriptions sont ouvertes)"
#: bookwyrm/templates/settings/site.html:152
#: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests"
msgstr "Autoriser les demandes dinvitation"
#: bookwyrm/templates/settings/site.html:158
#: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests"
msgstr "Définir une question pour les demandes dinvitation"
#: bookwyrm/templates/settings/site.html:163
#: bookwyrm/templates/settings/site.html:176
msgid "Question:"
msgstr "Question :"
#: bookwyrm/templates/settings/site.html:168
#: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:"
msgstr "Texte affiché lorsque les inscriptions sont closes:"
#: bookwyrm/templates/settings/site.html:172
#: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:"
msgstr "Texte de la demande d'invitation :"
@ -5712,6 +5774,19 @@ msgstr "Se désabonner"
msgid "Accept"
msgstr "Accepter"
#: bookwyrm/templates/snippets/footer.html:16
msgid "Documentation"
msgstr "Documentation"
#: bookwyrm/templates/snippets/footer.html:42
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Soutenez %(site_name)s sur <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/snippets/footer.html:49
msgid "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>."
msgstr "Le code source de BookWyrm est librement disponible. Vous pouvez contribuer ou rapporter des problèmes sur <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/snippets/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13
msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Défi lecture pour %(current_year)s"
msgid "User Activity"
msgstr "Activité du compte"
#: bookwyrm/templates/user/user.html:70
#: bookwyrm/templates/user/user.html:71
msgid "RSS feed"
msgstr "Flux RSS"
#: bookwyrm/templates/user/user.html:81
#: bookwyrm/templates/user/user.html:83
msgid "No activities yet!"
msgstr "Aucune activité pour linstant!"
@ -6252,10 +6327,6 @@ msgstr "Ce fichier dépasse la taille limite: 10Mo"
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s (%(subtitle)s)"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "Fichier CSV non valide"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"

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-11-10 21:42+0000\n"
"PO-Revision-Date: 2022-11-25 14:49\n"
"POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-12-05 18:13\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Galician\n"
"Language: gl\n"
@ -60,11 +60,11 @@ msgstr "A data final da lectura non pode ser anterior á de inicio."
#: bookwyrm/forms/forms.py:59
msgid "Reading stopped date cannot be before start date."
msgstr "A data do fin da lectura non pode ser anterior á de inicio."
msgstr "A data do abandono da lectura non pode ser anterior á de inicio."
#: bookwyrm/forms/forms.py:67
msgid "Reading stopped date cannot be in the future."
msgstr "A data de deixar a lectura non pode ser futura."
msgstr "A data de abandono da lectura non pode estar no futuro."
#: bookwyrm/forms/forms.py:74
msgid "Reading finished date cannot be in the future."
@ -90,7 +90,7 @@ msgstr "Código incorrecto"
msgid "This domain is blocked. Please contact your administrator if you think this is an error."
msgstr "Este dominio está bloqueado. Contacta coa administración se cres que é un erro."
#: bookwyrm/forms/links.py:46
#: bookwyrm/forms/links.py:49
msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending."
msgstr "Esta ligazón co tipo de ficheiro xa foi engadida para este libro. Se non é visible, o dominio aínda está pendente."
@ -106,7 +106,7 @@ msgstr "Título do libro"
#: bookwyrm/templates/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Puntuación"
msgstr "Valoración"
#: bookwyrm/forms/lists.py:30 bookwyrm/templates/lists/list.html:185
msgid "Sort By"
@ -256,14 +256,14 @@ msgstr "Seguidoras"
msgid "Private"
msgstr "Privado"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140
#: bookwyrm/templates/settings/imports/imports.html:19
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active"
msgstr "Activa"
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:138
#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:155
msgid "Complete"
msgstr "Completa"
@ -316,19 +316,19 @@ msgstr "Citas"
msgid "Everything else"
msgstr "As outras cousas"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home Timeline"
msgstr "Cronoloxía de Inicio"
#: bookwyrm/settings.py:209
#: bookwyrm/settings.py:213
msgid "Home"
msgstr "Inicio"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
msgid "Books Timeline"
msgstr "Cronoloxía de libros"
#: bookwyrm/settings.py:210
#: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Cronoloxía de libros"
msgid "Books"
msgstr "Libros"
#: bookwyrm/settings.py:282
#: bookwyrm/settings.py:286
msgid "English"
msgstr "English (Inglés)"
#: bookwyrm/settings.py:283
#: bookwyrm/settings.py:287
msgid "Català (Catalan)"
msgstr "Català (Catalan)"
#: bookwyrm/settings.py:284
#: bookwyrm/settings.py:288
msgid "Deutsch (German)"
msgstr "Deutsch (Alemán)"
#: bookwyrm/settings.py:285
#: bookwyrm/settings.py:289
msgid "Español (Spanish)"
msgstr "Español (Español)"
#: bookwyrm/settings.py:286
#: bookwyrm/settings.py:290
msgid "Galego (Galician)"
msgstr "Galego (Galego)"
#: bookwyrm/settings.py:287
#: bookwyrm/settings.py:291
msgid "Italiano (Italian)"
msgstr "Italiano (Italiano)"
#: bookwyrm/settings.py:288
#: bookwyrm/settings.py:292
msgid "Suomi (Finnish)"
msgstr "Suomi (Finés)"
#: bookwyrm/settings.py:289
#: bookwyrm/settings.py:293
msgid "Français (French)"
msgstr "Français (Francés)"
#: bookwyrm/settings.py:290
#: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituano)"
#: bookwyrm/settings.py:291
#: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)"
msgstr "Norsk (Noruegués)"
#: bookwyrm/settings.py:292
#: bookwyrm/settings.py:296
msgid "Polski (Polish)"
msgstr "Polski (Polaco)"
#: bookwyrm/settings.py:293
#: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portugués brasileiro)"
#: bookwyrm/settings.py:294
#: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:295
#: bookwyrm/settings.py:299
msgid "Română (Romanian)"
msgstr "Română (Rumanés)"
#: bookwyrm/settings.py:296
#: bookwyrm/settings.py:300
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:297
#: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chinés simplificado)"
#: bookwyrm/settings.py:298
#: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chinés tradicional)"
@ -459,24 +459,24 @@ msgstr "<a href=\"%(book_path)s\"><em>%(title)s</em></a> é o libro con valoraci
msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out</a> and make yourself heard."
msgstr "Rexistra as túas lecturas, conversa acerca dos libros, escribe recensións e descubre próximas lecturas. Sempre sen publicidade, anti-corporacións e orientado á comunidade, BookWyrm é software a escala humana, deseñado para ser pequeno e persoal. Se queres propoñer novas ferramentas, informar de fallos, ou colaborar, <a href=\"https://joinbookwyrm.com/get-involved\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">contacta con nós</a> e deixa oír a túa voz."
#: bookwyrm/templates/about/about.html:103
#: bookwyrm/templates/about/about.html:104
msgid "Meet your admins"
msgstr "Contacta coa administración"
#: bookwyrm/templates/about/about.html:106
#: bookwyrm/templates/about/about.html:107
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"%(coc_path)s\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr "A moderación e administración de %(site_name)s coidan e xestionan o sitio web, fan cumprir co <a href=\"%(coc_path)s\">código de conduta</a> e responden ás denuncias das usuarias sobre spam e mal comportamento."
#: bookwyrm/templates/about/about.html:120
#: bookwyrm/templates/about/about.html:121
msgid "Moderator"
msgstr "Moderación"
#: bookwyrm/templates/about/about.html:122 bookwyrm/templates/user_menu.html:63
#: bookwyrm/templates/about/about.html:123 bookwyrm/templates/user_menu.html:63
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:138
#: bookwyrm/templates/about/about.html:139
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
@ -486,6 +486,7 @@ msgstr "Enviar mensaxe directa"
#: bookwyrm/templates/about/conduct.html:4
#: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct"
msgstr "Código de Conduta"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Versión do software:"
#: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200
#: bookwyrm/templates/snippets/2fa_footer.html:8
#: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
msgstr "Acerca de %(site_name)s"
@ -512,9 +513,15 @@ msgstr "Acerca de %(site_name)s"
#: bookwyrm/templates/about/layout.html:47
#: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy"
msgstr "Política de Privacidade"
#: bookwyrm/templates/about/layout.html:54
#: bookwyrm/templates/snippets/footer.html:34
msgid "Impressum"
msgstr "Legal"
#: bookwyrm/templates/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8
#, python-format
@ -640,7 +647,7 @@ msgstr "Así se fai!"
msgid "%(display_name)s left %(ratings_total)s rating, <br />their average rating is %(rating_average)s"
msgid_plural "%(display_name)s left %(ratings_total)s ratings, <br />their average rating is %(rating_average)s"
msgstr[0] "%(display_name)s fixo %(ratings_total)s valoración,<br />cunha media de %(rating_average)s"
msgstr[1] "%(display_name)s fixo %(ratings_total)s valoracións,<br />cunha puntuación media de %(rating_average)s"
msgstr[1] "%(display_name)s fixo %(ratings_total)s valoracións,<br />cunha valoración media de %(rating_average)s"
#: bookwyrm/templates/annual_summary/layout.html:238
msgid "Their best rated review"
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105
#: bookwyrm/templates/settings/site.html:181
#: bookwyrm/templates/settings/site.html:194
#: bookwyrm/templates/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Gardar"
#: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80
#: bookwyrm/templates/search/barcode_modal.html:45
#: bookwyrm/templates/search/barcode_modal.html:43
#: bookwyrm/templates/settings/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
@ -852,7 +859,7 @@ msgstr "Ao cargar os datos vas conectar con <strong>%(source_name)s</strong> e c
#: bookwyrm/templates/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52
#: bookwyrm/templates/preferences/2fa.html:54
#: bookwyrm/templates/preferences/2fa.html:77
#: bookwyrm/templates/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Dominio"
#: bookwyrm/templates/book/file_links/edit_links.html:36
#: bookwyrm/templates/import/import.html:105
#: bookwyrm/templates/import/import.html:122
#: bookwyrm/templates/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
@ -1333,7 +1340,7 @@ msgstr "Estado"
#: bookwyrm/templates/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:62
#: bookwyrm/templates/settings/imports/imports.html:110
#: bookwyrm/templates/settings/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99
msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Usuaria descoñecida"
msgid "Report spam"
msgstr "Denunciar spam"
#: bookwyrm/templates/book/file_links/edit_links.html:101
#: bookwyrm/templates/book/file_links/edit_links.html:102
msgid "No links available for this book."
msgstr "Sen ligazóns para para este libro."
#: bookwyrm/templates/book/file_links/edit_links.html:112
#: bookwyrm/templates/book/file_links/edit_links.html:113
#: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file"
msgstr "Engadir ligazón ao ficheiro"
@ -1735,7 +1742,7 @@ msgstr "Se non solicitaches cambiar o contrasinal podes ignorar este email."
msgid "Reset your %(site_name)s password"
msgstr "Restablece o contrasinal en %(site_name)s"
#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/embed-layout.html:20 bookwyrm/templates/layout.html:40
#: bookwyrm/templates/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
@ -1743,12 +1750,12 @@ msgstr "Restablece o contrasinal en %(site_name)s"
msgid "%(site_name)s home page"
msgstr "Páxina de inicio de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204
#: bookwyrm/templates/snippets/2fa_footer.html:12
#: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin"
msgstr "Contacta coa administración"
#: bookwyrm/templates/embed-layout.html:46
#: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm"
msgstr "Únete a BookWyrm"
@ -1827,7 +1834,7 @@ msgstr "Ver directorio"
#: bookwyrm/templates/feed/summary_card.html:21
msgid "The end of the year is the best moment to take stock of all the books read during the last 12 months. How many pages have you read? Which book is your best-rated of the year? We compiled these stats, and more!"
msgstr "O final do ano é o mellor momento para botar unha ollada a tódolos libros lidos nos últimos 12 meses. Cantas páxinas liches? Cal é o libro con mellor puntuación do ano? Recollemos estas estatísticas e moitas máis!"
msgstr "O final do ano é o mellor momento para botar unha ollada a tódolos libros lidos nos últimos 12 meses. Cantas páxinas liches? Cal é o libro con mellor valoración do ano? Recollemos estas estatísticas e moitas máis!"
#: bookwyrm/templates/feed/summary_card.html:26
#, python-format
@ -1867,7 +1874,7 @@ msgstr "Lidos"
#: bookwyrm/templates/get_started/book_preview.html:13
#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36
msgid "Stopped Reading"
msgstr "Deixei de ler"
msgstr "Abandonados"
#: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?"
@ -2314,8 +2321,7 @@ msgstr "Benvida a Bookwyrm!<br><br>Queres ver un pequeno titorial para coñecer
#: bookwyrm/templates/guided_tour/home.html:17
#: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212
#: bookwyrm/templates/snippets/2fa_footer.html:20
#: bookwyrm/templates/snippets/footer.html:20
msgid "Guided Tour"
msgstr "Titorial"
@ -2625,81 +2631,89 @@ msgstr "Atopa un libro"
msgid "Import Books"
msgstr "Importar libros"
#: bookwyrm/templates/import/import.html:15
#: bookwyrm/templates/import/import.html:13
msgid "Not a valid CSV file"
msgstr "Non é un ficheiro CSV válido"
#: bookwyrm/templates/import/import.html:22
#, python-format
msgid "On average, recent imports have taken %(hours)s hours."
msgstr "De media, ás importacións recentes levoulles %(hours)s horas."
#: bookwyrm/templates/import/import.html:19
#: bookwyrm/templates/import/import.html:26
#, python-format
msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "De media, ás importacións recentes levoulles %(minutes)s minutos."
#: bookwyrm/templates/import/import.html:34
#: bookwyrm/templates/import/import.html:41
msgid "Data source:"
msgstr "Fonte de datos:"
#: bookwyrm/templates/import/import.html:40
#: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)"
msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43
#: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)"
msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46
#: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)"
msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49
#: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)"
msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52
#: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)"
msgstr "Calibre (CSV)"
#: bookwyrm/templates/import/import.html:58
#: bookwyrm/templates/import/import.html:65
msgid "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."
msgstr "Podes descargar os teus datos de Goodreads desde a <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">páxina de Exportación/Importación</a> da túa conta Goodreads."
#: bookwyrm/templates/import/import.html:67
#: bookwyrm/templates/import/import.html:74
msgid "Data file:"
msgstr "Ficheiro de datos:"
#: bookwyrm/templates/import/import.html:75
#: bookwyrm/templates/import/import.html:82
msgid "Include reviews"
msgstr "Incluír recensións"
#: bookwyrm/templates/import/import.html:80
#: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:"
msgstr "Axuste de privacidade para recensións importadas:"
#: bookwyrm/templates/import/import.html:86
#: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importar"
#: bookwyrm/templates/import/import.html:91
#: bookwyrm/templates/import/import.html:101
msgid "Imports are temporarily disabled; thank you for your patience."
msgstr "As importacións están temporalmente desactivadas; grazas pola paciencia."
#: bookwyrm/templates/import/import.html:108
msgid "Recent Imports"
msgstr "Importacións recentes"
#: bookwyrm/templates/import/import.html:96
#: bookwyrm/templates/settings/imports/imports.html:41
#: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created"
msgstr "Data de creación"
#: bookwyrm/templates/import/import.html:99
#: bookwyrm/templates/import/import.html:116
msgid "Last Updated"
msgstr "Última actualización"
#: bookwyrm/templates/import/import.html:102
#: bookwyrm/templates/settings/imports/imports.html:50
#: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items"
msgstr "Elementos"
#: bookwyrm/templates/import/import.html:111
#: bookwyrm/templates/import/import.html:128
msgid "No recent imports"
msgstr "Sen importacións recentes"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Actualizar"
#: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82
#: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import"
msgstr "Deter a importación"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rexeitar"
#: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59
#: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items"
msgstr "Elementos fallidos"
@ -2958,7 +2972,7 @@ msgstr "Nome de usuaria:"
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:68
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Contrasinal:"
@ -3038,22 +3052,6 @@ msgstr "Publicación correcta"
msgid "Error posting status"
msgstr "Erro ao publicar"
#: bookwyrm/templates/layout.html:208
#: bookwyrm/templates/snippets/2fa_footer.html:16
msgid "Documentation"
msgstr "Documentación"
#: bookwyrm/templates/layout.html:221
#: bookwyrm/templates/snippets/2fa_footer.html:29
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Axuda a %(site_name)s en <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/layout.html:228
#: bookwyrm/templates/snippets/2fa_footer.html:36
msgid "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>."
msgstr "O código fonte de BookWyrm é público. Podes colaborar ou informar de problemas en <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Eliminar esta lista?"
#: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17
#: bookwyrm/templates/lists/layout.html:18
msgid "Edit List"
msgstr "Editar lista"
@ -3128,13 +3126,12 @@ msgstr "Editar lista"
msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, unha lista de %(owner)s"
#: bookwyrm/templates/lists/embed-list.html:18
#: bookwyrm/templates/lists/embed-list.html:20
#, python-format
msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "en <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27
#: bookwyrm/templates/lists/list.html:54
#: bookwyrm/templates/lists/embed-list.html:29
msgid "This list is currently empty"
msgstr "A lista está baleira neste intre"
@ -3216,6 +3213,10 @@ msgstr "Suxeriches correctamente un libro para esta lista!"
msgid "You successfully added a book to this list!"
msgstr "Engadiches correctamente un libro a esta lista!"
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty."
msgstr "A lista está baleira neste intre."
#: bookwyrm/templates/lists/list.html:104
msgid "Edit notes"
msgstr "Editar notas"
@ -3339,12 +3340,17 @@ msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> suxeriu engadir <
#: bookwyrm/templates/notifications/items/add.html:66
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added a book to one of your lists"
msgstr "<a href=\"%(related_user_link)s\">%(related_user)s</a> engadiu un libro a unha das túas listas"
#: bookwyrm/templates/notifications/items/add.html:72
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> added <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[0] "<a href=\"%(related_user_link)s\">%(related_user)s</a> engadiu <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, e %(display_count)s libro máis á tua lista \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr[1] "<a href=\"%(related_user_link)s\">%(related_user)s</a> engadiu <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, e %(display_count)s libros máis á túa lista \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
#: bookwyrm/templates/notifications/items/add.html:82
#: bookwyrm/templates/notifications/items/add.html:88
#, python-format
msgid "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other book to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
msgid_plural "<a href=\"%(related_user_link)s\">%(related_user)s</a> suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em>, <em><a href=\"%(second_book_path)s\">%(second_book_title)s</a></em>, and %(display_count)s other books to your list \"<a href=\"%(list_curate_path)s\">%(list_name)s</a>\""
@ -3768,19 +3774,31 @@ msgstr "Crear códigos de apoio"
msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
msgstr "Escanea o código QR coa túa app de autenticación e escribe aquí o código que apareza nela para confirmar que configuraches a app."
#: bookwyrm/templates/preferences/2fa.html:50
#: bookwyrm/templates/preferences/2fa.html:52
msgid "Use setup key"
msgstr "Usa a clave de configuración"
#: bookwyrm/templates/preferences/2fa.html:58
msgid "Account name:"
msgstr "Nome da conta:"
#: bookwyrm/templates/preferences/2fa.html:65
msgid "Code:"
msgstr "Código:"
#: bookwyrm/templates/preferences/2fa.html:73
msgid "Enter the code from your app:"
msgstr "Escribe o código da túa app:"
#: bookwyrm/templates/preferences/2fa.html:60
#: bookwyrm/templates/preferences/2fa.html:83
msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like <em>Authy</em>, <em>Google Authenticator</em> or <em>Microsoft Authenticator</em> each time you log in."
msgstr "Podes mellorar a seguridade da túa conta usando un Segundo Factor de Autenticación (2FA). Pediráseche un código temporal de un só uso procedente dunha app como <em>Authy</em>, <em>Google Authenticator</em> ou <em>Microsoft Authenticator</em> cada vez que accedas."
#: bookwyrm/templates/preferences/2fa.html:62
#: bookwyrm/templates/preferences/2fa.html:85
msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirma o teu contrasinal para comezar a usar 2FA."
#: bookwyrm/templates/preferences/2fa.html:72
#: bookwyrm/templates/preferences/2fa.html:95
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA"
msgstr "Configurar 2FA"
@ -3870,7 +3888,7 @@ msgstr "Perfil"
#: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91
msgid "Display"
msgstr "Axustes"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Escanear Código de barras\n"
" "
#: bookwyrm/templates/search/barcode_modal.html:23
#: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..."
msgstr "Accedendo á cámara..."
#: bookwyrm/templates/search/barcode_modal.html:24
#: bookwyrm/templates/search/barcode_modal.html:22
msgid "Grant access to the camera to scan a book's barcode."
msgstr "Permite o acceso á cámara para escanear o código de barras do libro."
#: bookwyrm/templates/search/barcode_modal.html:29
#: bookwyrm/templates/search/barcode_modal.html:27
msgid "Could not access camera"
msgstr "Non hai acceso á cámara"
#: bookwyrm/templates/search/barcode_modal.html:33
#: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner"
msgid "Scanning..."
msgstr "Escaneando..."
#: bookwyrm/templates/search/barcode_modal.html:34
#: bookwyrm/templates/search/barcode_modal.html:32
msgid "Align your book's barcode with the camera."
msgstr "Aliña o código de barras do libro coa cámara."
#: bookwyrm/templates/search/barcode_modal.html:38
#: bookwyrm/templates/search/barcode_modal.html:36
msgctxt "barcode scanner"
msgid "ISBN scanned"
msgstr "ISBN escaneado"
#: bookwyrm/templates/search/barcode_modal.html:39
#: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN"
msgid "Searching for book:"
msgstr "Buscando o libro:"
#: bookwyrm/templates/search/book.html:39
#: bookwyrm/templates/search/book.html:25
#, python-format
msgid "%(formatted_review_count)s review"
msgid_plural "%(formatted_review_count)s reviews"
msgstr[0] "%(formatted_review_count)s recensión"
msgstr[1] "%(formatted_review_count)s recensións"
#: bookwyrm/templates/search/book.html:34
#, python-format
msgid "(published %(pub_year)s)"
msgstr "(publicado en %(pub_year)s)"
#: bookwyrm/templates/search/book.html:50
msgid "Results from"
msgstr "Resultados de"
#: bookwyrm/templates/search/book.html:78
#: bookwyrm/templates/search/book.html:89
msgid "Import book"
msgstr "Importar libro"
#: bookwyrm/templates/search/book.html:102
#: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues"
msgstr "Cargar resultados desde outros catálogos"
#: bookwyrm/templates/search/book.html:106
#: bookwyrm/templates/search/book.html:117
msgid "Manually add book"
msgstr "Engadir un libro manualmente"
#: bookwyrm/templates/search/book.html:111
#: bookwyrm/templates/search/book.html:122
msgid "Log in to import or add books."
msgstr "Accede para importar ou engadir libros."
@ -4112,7 +4142,7 @@ msgstr "Tipo de busca"
#: bookwyrm/templates/search/layout.html:24
#: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27
#: bookwyrm/templates/settings/federation/instance_list.html:51
#: bookwyrm/templates/settings/federation/instance_list.html:52
#: bookwyrm/templates/settings/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Crear Anuncio"
#: bookwyrm/templates/settings/announcements/announcements.html:21
#: bookwyrm/templates/settings/federation/instance_list.html:39
#: bookwyrm/templates/settings/federation/instance_list.html:40
msgid "Date added"
msgstr "Data engadida"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Tarefas activas"
#: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34
#: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID"
msgstr "ID"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Fallou:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
msgid "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:"
msgstr "É de esperar un ficheiro json no formato proporcionado por <a href=\"https://fediblock.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Fediblock</a>, cunha lista de entradas que teña campos para <code>instancia</code> e <code>url</code>. Por exemplo:"
msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have <code>instance</code> and <code>url</code> fields. For example:"
msgstr "Agardase un ficheiro json no formato que proporciona FediBlock, cunha lista de entradas con campos para <code>instancia</code> e <code>url</code>. Exemplo:"
#: bookwyrm/templates/settings/federation/instance_list.html:35
#: bookwyrm/templates/settings/federation/instance_list.html:36
#: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name"
msgstr "Nome da instancia"
#: bookwyrm/templates/settings/federation/instance_list.html:43
#: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated"
msgstr "Última actualización"
#: bookwyrm/templates/settings/federation/instance_list.html:47
#: bookwyrm/templates/settings/federation/instance_list.html:48
#: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software"
msgstr "Software"
#: bookwyrm/templates/settings/federation/instance_list.html:69
#: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found"
msgstr "Non hai instancias"
@ -4690,27 +4720,51 @@ msgstr "Non hai instancias"
msgid "Stop import?"
msgstr "Deter a importación?"
#: bookwyrm/templates/settings/imports/imports.html:23
#: bookwyrm/templates/settings/imports/imports.html:19
msgid "Disable starting new imports"
msgstr "Desactivar realizar novas importacións"
#: bookwyrm/templates/settings/imports/imports.html:30
msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
msgstr "Isto pretende ser útil cando algo funciona realmente mal coas importacións e precisas deter esta ferramenta para intentar resolver o problema."
#: bookwyrm/templates/settings/imports/imports.html:31
msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be effected."
msgstr "Cando están desactivadas as importacións as usuarias non poderán realizar novas importacións, pero as existentes non se ven afectadas."
#: bookwyrm/templates/settings/imports/imports.html:36
msgid "Disable imports"
msgstr "Desactivar importacións"
#: bookwyrm/templates/settings/imports/imports.html:50
msgid "Users are currently unable to start new imports"
msgstr "As usuarias actualmente non poden realizar importacións"
#: bookwyrm/templates/settings/imports/imports.html:55
msgid "Enable imports"
msgstr "Activar importacións"
#: bookwyrm/templates/settings/imports/imports.html:71
msgid "Completed"
msgstr "Completada"
#: bookwyrm/templates/settings/imports/imports.html:37
#: bookwyrm/templates/settings/imports/imports.html:85
msgid "User"
msgstr "Usuaria"
#: bookwyrm/templates/settings/imports/imports.html:46
#: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated"
msgstr "Data de actualización"
#: bookwyrm/templates/settings/imports/imports.html:53
#: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items"
msgstr "Elementos pendentes"
#: bookwyrm/templates/settings/imports/imports.html:56
#: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items"
msgstr "Elementos correctos"
#: bookwyrm/templates/settings/imports/imports.html:91
#: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found."
msgstr "Non se atopan importacións que concorden."
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Axustes da web"
#: bookwyrm/templates/settings/layout.html:106
#: bookwyrm/templates/settings/site.html:95
#: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/settings/themes.html:4
#: bookwyrm/templates/settings/themes.html:6
msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Info da instancia"
#: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110
#: bookwyrm/templates/settings/site.html:123
msgid "Footer Content"
msgstr "Contido web do pé"
#: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134
#: bookwyrm/templates/settings/site.html:147
msgid "Registration"
msgstr "Rexistro"
@ -5093,71 +5147,79 @@ msgstr "Código de conduta:"
msgid "Privacy Policy:"
msgstr "Política de privacidade:"
#: bookwyrm/templates/settings/site.html:79
#: bookwyrm/templates/settings/site.html:73
msgid "Impressum:"
msgstr "Legal:"
#: bookwyrm/templates/settings/site.html:78
msgid "Include impressum:"
msgstr "Incluír información legal:"
#: bookwyrm/templates/settings/site.html:92
msgid "Images"
msgstr "Imaxes"
#: bookwyrm/templates/settings/site.html:82
#: bookwyrm/templates/settings/site.html:95
msgid "Logo:"
msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86
#: bookwyrm/templates/settings/site.html:99
msgid "Logo small:"
msgstr "Logo pequeno:"
#: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/settings/site.html:103
msgid "Favicon:"
msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98
#: bookwyrm/templates/settings/site.html:111
msgid "Default theme:"
msgstr "Decorado por defecto:"
#: bookwyrm/templates/settings/site.html:113
#: bookwyrm/templates/settings/site.html:126
msgid "Support link:"
msgstr "Ligazón de axuda:"
#: bookwyrm/templates/settings/site.html:117
#: bookwyrm/templates/settings/site.html:130
msgid "Support title:"
msgstr "Título de axuda:"
#: bookwyrm/templates/settings/site.html:121
#: bookwyrm/templates/settings/site.html:134
msgid "Admin email:"
msgstr "Email de Admin:"
#: bookwyrm/templates/settings/site.html:125
#: bookwyrm/templates/settings/site.html:138
msgid "Additional info:"
msgstr "Info adicional:"
#: bookwyrm/templates/settings/site.html:139
#: bookwyrm/templates/settings/site.html:152
msgid "Allow registration"
msgstr "Abrir rexistro"
#: bookwyrm/templates/settings/site.html:145
#: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address"
msgstr "Requerir que a usuaria confirme o enderezo de email"
#: bookwyrm/templates/settings/site.html:147
#: bookwyrm/templates/settings/site.html:160
msgid "(Recommended if registration is open)"
msgstr "(Recomendable se o rexistro está aberto)"
#: bookwyrm/templates/settings/site.html:152
#: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests"
msgstr "Permitir solicitudes de convite"
#: bookwyrm/templates/settings/site.html:158
#: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests"
msgstr "Escribe a pregunta para as solicitudes de convite"
#: bookwyrm/templates/settings/site.html:163
#: bookwyrm/templates/settings/site.html:176
msgid "Question:"
msgstr "Pregunta:"
#: bookwyrm/templates/settings/site.html:168
#: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:"
msgstr "Texto se o rexistro está pechado:"
#: bookwyrm/templates/settings/site.html:172
#: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:"
msgstr "Texto para a solicitude do convite:"
@ -5712,6 +5774,19 @@ msgstr "Non seguir"
msgid "Accept"
msgstr "Aceptar"
#: bookwyrm/templates/snippets/footer.html:16
msgid "Documentation"
msgstr "Documentación"
#: bookwyrm/templates/snippets/footer.html:42
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
msgstr "Axuda a %(site_name)s en <a href=\"%(support_link)s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">%(support_title)s</a>"
#: bookwyrm/templates/snippets/footer.html:49
msgid "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>."
msgstr "O código fonte de BookWyrm é público. Podes colaborar ou informar de problemas en <a href=\"https://github.com/bookwyrm-social/bookwyrm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>."
#: bookwyrm/templates/snippets/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13
msgid "No rating"
@ -5858,7 +5933,7 @@ msgstr "Deixar de ler \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/shelf_selector.html:54
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21
msgid "Stopped reading"
msgstr "Deixei de ler"
msgstr "Abandonados"
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
@ -6199,11 +6274,11 @@ msgstr "Obxectivo de Lectura para %(current_year)s"
msgid "User Activity"
msgstr "Actividade da usuaria"
#: bookwyrm/templates/user/user.html:70
#: bookwyrm/templates/user/user.html:71
msgid "RSS feed"
msgstr "Fonte RSS"
#: bookwyrm/templates/user/user.html:81
#: bookwyrm/templates/user/user.html:83
msgid "No activities yet!"
msgstr "Sen actividade!"
@ -6252,10 +6327,6 @@ msgstr "O ficheiro supera o tamaño máximo: 10MB"
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "Non é un ficheiro csv válido"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"

Binary file not shown.

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