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: try:
if issubclass(type(v), ActivityObject): if issubclass(type(v), ActivityObject):
data[k] = v.serialize() 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: except TypeError:
pass pass
data = {k: v for (k, v) in data.items() if v is not None and k not in omit} 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): def serialize(self, **kwargs):
"""remove fields""" """remove fields"""
omit = ("id", "type", "@context") omit = ("id", "@context")
if self.type == "Link":
omit += ("type",)
return super().serialize(omit=omit) return super().serialize(omit=omit)

View file

@ -19,6 +19,8 @@ class BookData(ActivityObject):
viaf: str = None viaf: str = None
wikidata: str = None wikidata: str = None
asin: str = None asin: str = None
aasin: str = None
isfdb: str = None
lastEditedBy: str = None lastEditedBy: str = None
links: List[str] = field(default_factory=lambda: []) links: List[str] = field(default_factory=lambda: [])
fileLinks: 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): def email_confirmation_email(user):
"""newly registered users confirm email address""" """newly registered users confirm email address"""
data = email_data() data = email_data()

View file

@ -55,11 +55,45 @@ class CreateInviteForm(CustomForm):
class SiteForm(CustomForm): class SiteForm(CustomForm):
class Meta: class Meta:
model = models.SiteSettings 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 = { widgets = {
"instance_short_description": forms.TextInput( "instance_short_description": forms.TextInput(
attrs={"aria-describedby": "desc_instance_short_description"} 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( "require_confirm_email": forms.CheckboxInput(
attrs={"aria-describedby": "desc_require_confirm_email"} 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 ThemeForm(CustomForm):
class Meta: class Meta:
model = models.Theme model = models.Theme

View file

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

View file

@ -18,19 +18,30 @@ class CoverForm(CustomForm):
class EditionForm(CustomForm): class EditionForm(CustomForm):
class Meta: class Meta:
model = models.Edition model = models.Edition
exclude = [ fields = [
"remote_id", "title",
"origin_id", "subtitle",
"created_date", "description",
"updated_date", "series",
"edition_rank", "series_number",
"authors", "languages",
"parent_work", "subjects",
"shelves", "publishers",
"connector", "first_published_date",
"search_vector", "published_date",
"links", "cover",
"file_links", "physical_format",
"physical_format_detail",
"pages",
"isbn_13",
"isbn_10",
"openlibrary_key",
"inventaire_id",
"goodreads_key",
"oclc_number",
"asin",
"aasin",
"isfdb",
] ]
widgets = { widgets = {
"title": forms.TextInput(attrs={"aria-describedby": "desc_title"}), "title": forms.TextInput(attrs={"aria-describedby": "desc_title"}),
@ -73,10 +84,15 @@ class EditionForm(CustomForm):
"inventaire_id": forms.TextInput( "inventaire_id": forms.TextInput(
attrs={"aria-describedby": "desc_inventaire_id"} attrs={"aria-describedby": "desc_inventaire_id"}
), ),
"goodreads_key": forms.TextInput(
attrs={"aria-describedby": "desc_goodreads_key"}
),
"oclc_number": forms.TextInput( "oclc_number": forms.TextInput(
attrs={"aria-describedby": "desc_oclc_number"} attrs={"aria-describedby": "desc_oclc_number"}
), ),
"ASIN": forms.TextInput(attrs={"aria-describedby": "desc_ASIN"}), "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"]), ("id", ["id", "book id"]),
("title", ["title"]), ("title", ["title"]),
("authors", ["author", "authors", "primary author"]), ("authors", ["author", "authors", "primary author"]),
("isbn_10", ["isbn10", "isbn"]), ("isbn_10", ["isbn10", "isbn", "isbn/uid"]),
("isbn_13", ["isbn13", "isbn", "isbns"]), ("isbn_13", ["isbn13", "isbn", "isbns", "isbn/uid"]),
("shelf", ["shelf", "exclusive shelf", "read status", "bookshelf"]), ("shelf", ["shelf", "exclusive shelf", "read status", "bookshelf"]),
("review_name", ["review name"]), ("review_name", ["review name"]),
("review_body", ["my review", "review"]), ("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(): def init_groups():
"""permission levels""" """permission levels"""
groups = ["admin", "moderator", "editor"] groups = ["admin", "owner", "moderator", "editor"]
for group in groups: for group in groups:
Group.objects.create(name=group) Group.objects.get_or_create(name=group)
def init_permissions(): def init_permissions():
"""permission types""" """permission types"""
permissions = [ permissions = [
{
"codename": "manage_registration",
"name": "allow or prevent user registration",
"groups": ["admin"],
},
{
"codename": "system_administration",
"name": "technical controls",
"groups": ["admin"],
},
{ {
"codename": "edit_instance_settings", "codename": "edit_instance_settings",
"name": "change the instance info", "name": "change the instance info",
"groups": ["admin"], "groups": ["admin", "owner"],
}, },
{ {
"codename": "set_user_group", "codename": "set_user_group",
"name": "change what group a user is in", "name": "change what group a user is in",
"groups": ["admin", "moderator"], "groups": ["admin", "owner", "moderator"],
}, },
{ {
"codename": "control_federation", "codename": "control_federation",
"name": "control who to federate with", "name": "control who to federate with",
"groups": ["admin", "moderator"], "groups": ["admin", "owner", "moderator"],
}, },
{ {
"codename": "create_invites", "codename": "create_invites",
"name": "issue invitations to join", "name": "issue invitations to join",
"groups": ["admin", "moderator"], "groups": ["admin", "owner", "moderator"],
}, },
{ {
"codename": "moderate_user", "codename": "moderate_user",
"name": "deactivate or silence a user", "name": "deactivate or silence a user",
"groups": ["admin", "moderator"], "groups": ["admin", "owner", "moderator"],
}, },
{ {
"codename": "moderate_post", "codename": "moderate_post",
"name": "delete other users' posts", "name": "delete other users' posts",
"groups": ["admin", "moderator"], "groups": ["admin", "owner", "moderator"],
}, },
{ {
"codename": "edit_book", "codename": "edit_book",
"name": "edit book info", "name": "edit book info",
"groups": ["admin", "moderator", "editor"], "groups": ["admin", "owner", "moderator", "editor"],
}, },
] ]
content_type = ContentType.objects.get_for_model(models.User) content_type = ContentType.objects.get_for_model(models.User)
for permission in permissions: for permission in permissions:
permission_obj = Permission.objects.create( permission_obj, _ = Permission.objects.get_or_create(
codename=permission["codename"], codename=permission["codename"],
name=permission["name"], name=permission["name"],
content_type=content_type, 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( gutenberg_id = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True 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? # idk probably other keys would be useful here?
born = fields.DateTimeField(blank=True, null=True) born = fields.DateTimeField(blank=True, null=True)
died = 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""" """generate the url from the openlibrary id"""
return f"https://openlibrary.org/authors/{self.openlibrary_key}" 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): def get_remote_id(self):
"""editions and works both use "book" instead of model_name""" """editions and works both use "book" instead of model_name"""
return f"https://{DOMAIN}/author/{self.id}" return f"https://{DOMAIN}/author/{self.id}"

View file

@ -55,6 +55,12 @@ class BookDataModel(ObjectMixin, BookWyrmModel):
asin = fields.CharField( asin = fields.CharField(
max_length=255, blank=True, null=True, deduplication_field=True 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) search_vector = SearchVectorField(null=True)
last_edited_by = fields.ForeignKey( last_edited_by = fields.ForeignKey(
@ -73,6 +79,11 @@ class BookDataModel(ObjectMixin, BookWyrmModel):
"""generate the url from the inventaire id""" """generate the url from the inventaire id"""
return f"https://inventaire.io/entity/{self.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: class Meta:
"""can't initialize this model, that wouldn't make sense""" """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 import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils.encoding import filepath_to_uri from django.utils.encoding import filepath_to_uri
from markdown import markdown
from bookwyrm import activitypub from bookwyrm import activitypub
from bookwyrm.connectors import get_image from bookwyrm.connectors import get_image
@ -499,6 +500,9 @@ class HtmlField(ActivitypubFieldMixin, models.TextField):
return None return None
return clean(value) return clean(value)
def field_to_activity(self, value):
return markdown(value) if value else value
class ArrayField(ActivitypubFieldMixin, DjangoArrayField): class ArrayField(ActivitypubFieldMixin, DjangoArrayField):
"""activitypub-aware array field""" """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.") code_of_conduct = models.TextField(default="Add a code of conduct here.")
privacy_policy = models.TextField(default="Add a privacy policy 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 # registration
allow_registration = models.BooleanField(default=False) allow_registration = models.BooleanField(default=False)

View file

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

View file

@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _
env = Env() env = Env()
env.read_env() env.read_env()
DOMAIN = env("DOMAIN") DOMAIN = env("DOMAIN")
VERSION = "0.5.2" VERSION = "0.5.3"
RELEASE_API = env( RELEASE_API = env(
"RELEASE_API", "RELEASE_API",
@ -21,7 +21,7 @@ RELEASE_API = env(
PAGE_LENGTH = env("PAGE_LENGTH", 15) PAGE_LENGTH = env("PAGE_LENGTH", 15)
DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English")
JS_CACHE = "e678183c" JS_CACHE = "ad848b97"
# email # email
EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend") 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; opacity: 1;
} }
button.button-paragraph {
vertical-align: middle;
}
/** States /** States
******************************************************************************/ ******************************************************************************/

View file

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

View file

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

View file

@ -48,6 +48,12 @@ let BookWyrm = new (class {
document document
.querySelector("#barcode-scanner-modal") .querySelector("#barcode-scanner-modal")
.addEventListener("open", this.openBarcodeScanner.bind(this)); .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) { function toggleStatus(status) {
for (const child of statusNode.children) { const template = document.querySelector(`#barcode-${status}`);
BookWyrm.toggleContainer(child, !child.classList.contains(status));
} statusNode.replaceChildren(template ? template.content.cloneNode(true) : null);
} }
function initBarcodes(cameraId = null) { function initBarcodes(cameraId = null) {
@ -785,4 +791,16 @@ let BookWyrm = new (class {
initBarcodes(); 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" %} {% trans "Privacy Policy" %}
</a> </a>
</li> </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> </ul>
</nav> </nav>

View file

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

View file

@ -28,7 +28,7 @@
<meta itemprop="name" content="{{ author.name }}"> <meta itemprop="name" content="{{ author.name }}">
{% firstof author.aliases author.born author.died as details %} {% 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 %} {% if details or links %}
<div class="column is-3"> <div class="column is-3">
{% if details %} {% if details %}
@ -81,6 +81,14 @@
</div> </div>
{% endif %} {% 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 %} {% trans "Load data" as button_text %}
{% if author.openlibrary_key %} {% if author.openlibrary_key %}
<div class="mt-1 is-flex"> <div class="mt-1 is-flex">
@ -128,6 +136,14 @@
</a> </a>
</div> </div>
{% endif %} {% 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> </div>
</section> </section>
{% endif %} {% endif %}
@ -144,7 +160,7 @@
{% for book in books %} {% for book in books %}
{% with book=book|author_edition:author %} {% with book=book|author_edition:author %}
<div class="column is-one-fifth-tablet is-half-mobile is-flex is-flex-direction-column"> <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 %} {% include 'landing/small-book.html' with book=book %}
</div> </div>
{% include 'snippets/shelve_button/shelve_button.html' with book=book %} {% 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" %} {% include 'snippets/form_errors.html' with errors_list=form.goodreads_key.errors id="desc_goodreads_key" %}
</div> </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"> <div class="field">
<label class="label" for="id_isni">{% trans "ISNI:" %}</label> <label class="label" for="id_isni">{% trans "ISNI:" %}</label>
{{ form.isni }} {{ form.isni }}

View file

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

View file

@ -1,7 +1,7 @@
{% spaceless %} {% spaceless %}
{% load i18n %} {% 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> <dl>
{% if book.isbn_13 %} {% if book.isbn_13 %}
<div class="is-flex"> <div class="is-flex">
@ -23,6 +23,27 @@
<dd>{{ book.asin }}</dd> <dd>{{ book.asin }}</dd>
</div> </div>
{% endif %} {% 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> </dl>
{% endif %} {% endif %}
{% endspaceless %} {% endspaceless %}

View file

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

View file

@ -81,7 +81,7 @@
{% include 'snippets/form_errors.html' with errors_list=form.languages.errors id="desc_languages" %} {% include 'snippets/form_errors.html' with errors_list=form.languages.errors id="desc_languages" %}
</div> </div>
<div> <div class="field">
<label class="label" for="id_add_subjects"> <label class="label" for="id_add_subjects">
{% trans "Subjects:" %} {% trans "Subjects:" %}
</label> </label>
@ -327,6 +327,15 @@
{% include 'snippets/form_errors.html' with errors_list=form.inventaire_id.errors id="desc_inventaire_id" %} {% include 'snippets/form_errors.html' with errors_list=form.inventaire_id.errors id="desc_inventaire_id" %}
</div> </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"> <div class="field">
<label class="label" for="id_oclc_number"> <label class="label" for="id_oclc_number">
{% trans "OCLC Number:" %} {% trans "OCLC Number:" %}
@ -344,6 +353,24 @@
{% include 'snippets/form_errors.html' with errors_list=form.ASIN.errors id="desc_ASIN" %} {% include 'snippets/form_errors.html' with errors_list=form.ASIN.errors id="desc_ASIN" %}
</div> </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> </div>
</section> </section>
</div> </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 %} {% load i18n %}
{% block filter %} {% 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"> <div class="is-flex is-flex-direction-row is-flex-direction-column-mobile">
{% for name, value in feed_status_types_options %} {% for name, value in feed_status_types_options %}

View file

@ -73,7 +73,7 @@
{% if site.invite_request_question %} {% if site.invite_request_question %}
<div class="block"> <div class="block">
<label for="id_answer_register" class="label">{{ site.invite_question_text }}</label> <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" %} {% include 'snippets/form_errors.html' with errors_list=request_form.answer.errors id="desc_answer_register" %}
</div> </div>
{% endif %} {% 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="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="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 %} {% if preview_images_enabled is True %}
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">

View file

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

View file

@ -51,7 +51,7 @@
{% endif %} {% endif %}
{% if not items.object_list.exists %} {% 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 %} {% else %}
<ol start="{{ items.start_index }}" class="ordered-list"> <ol start="{{ items.start_index }}" class="ordered-list">
{% for item in items %} {% for item in items %}

View file

@ -65,7 +65,7 @@
{# This happens if the list item was deleted #} {# This happens if the list item was deleted #}
{% blocktrans trimmed %} {% blocktrans trimmed %}
<a href="{{ related_user_link }}">{{ related_user }}</a> <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 %} {% endblocktrans %}
{% elif related_list.curation != "curated" %} {% elif related_list.curation != "curated" %}

View file

@ -44,7 +44,7 @@
{% csrf_token %} {% 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> <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"> <div class="columns">
<section class="column is-narrow"> <section class="column">
<figure class="m-4" id="qrcode">{{ qrcode | safe }}</figure> <figure class="m-4" id="qrcode">{{ qrcode | safe }}</figure>
<details class="details-panel box"> <details class="details-panel box">
<summary> <summary>

View file

@ -16,29 +16,27 @@
<select> <select>
</select> </select>
</div> </div>
<template id="barcode-grant-access">
<div id="barcode-status" class="block">
<div class="grant-access is-hidden">
<span class="icon icon-lock"></span> <span class="icon icon-lock"></span>
<span class="is-size-5">{% trans "Requesting camera..." %}</span><br/> <span class="is-size-5">{% trans "Requesting camera..." %}</span><br/>
<span>{% trans "Grant access to the camera to scan a book's barcode." %}</span> <span>{% trans "Grant access to the camera to scan a book's barcode." %}</span>
</div> </template>
<div class="access-denied is-hidden"> <template id="barcode-access-denied">
<span class="icon icon-warning"></span> <span class="icon icon-warning"></span>
<span class="is-size-5">Access denied</span><br/> <span class="is-size-5">Access denied</span><br/>
<span>{% trans "Could not access camera" %}</span> <span>{% trans "Could not access camera" %}</span>
</div> </template>
<div class="scanning is-hidden"> <template id="barcode-scanning">
<span class="icon icon-barcode"></span> <span class="icon icon-barcode"></span>
<span class="is-size-5">{% trans "Scanning..." context "barcode scanner" %}</span><br/> <span class="is-size-5">{% trans "Scanning..." context "barcode scanner" %}</span><br/>
<span>{% trans "Align your book's barcode with the camera." %}</span> <span>{% trans "Align your book's barcode with the camera." %}</span>
</div> </template>
<div class="found is-hidden"> <template id="barcode-found">
<span class="icon icon-check"></span> <span class="icon icon-check"></span>
<span class="is-size-5">{% trans "ISBN scanned" context "barcode scanner" %}</span><br/> <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>... {% trans "Searching for book:" context "followed by ISBN" %} <span class="isbn"></span>...
</div> </template>
</div> <div id="barcode-status" class="block"></div>
{% endblock %} {% endblock %}
{% block modal-footer %} {% block modal-footer %}

View file

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

View file

@ -145,7 +145,7 @@
<div class="block content"> <div class="block content">
<h2 class="title is-4">{% trans "Current Rules" %}</h2> <h2 class="title is-4">{% trans "Current Rules" %}</h2>
<details class="details-panel"> <details class="details-panel box">
<summary> <summary>
<span class="title is-5" role="heading" aria-level="3"> <span class="title is-5" role="heading" aria-level="3">
{% trans "Show rules" %} ({{ rules.count }}) {% 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 %} {% url 'settings-imports' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Imports" %}</a> <a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Imports" %}</a>
</li> </li>
</ul>
<ul class="menu-list">
<li> <li>
{% url 'settings-celery' as url %} {% url 'settings-celery' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Celery status" %}</a> <a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Celery status" %}</a>
</li> </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> </ul>
{% endif %} {% endif %}
{% if perms.bookwyrm.edit_instance_settings %} {% 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> <a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Site Settings" %}</a>
{% block site-subtabs %}{% endblock %} {% block site-subtabs %}{% endblock %}
</li> </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> <li>
{% url 'settings-themes' as url %} {% url 'settings-themes' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Themes" %}</a> <a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Themes" %}</a>
</li> </li>
{% endif %}
</ul> </ul>
{% endif %} {% endif %}
</nav> </nav>

View file

@ -40,23 +40,23 @@
</h2> </h2>
</header> </header>
<div class="column is-narrow"> <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="icon icon-pencil m-0-mobile" aria-hidden="treu"></span>
<span class="is-sr-only-mobile">{% trans "Set display name" %}</span> <span class="is-sr-only-mobile">{% trans "Set display name" %}</span>
</button> </button>
</div> </div>
</div> </div>
<div class="block"> <div class="block">
<details class="details-panel"> <details class="details-panel box">
<summary> <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" %} {% trans "View links" %}
({{ domain.links.count }}) ({{ domain.links.count }})
</span> </span>
<span class="details-close icon icon-x" aria-hidden="true"></span> <span class="details-close icon icon-x" aria-hidden="true"></span>
</summary> </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 %} {% include "settings/link_domains/link_table.html" with links=domain.links.all|slice:10 %}
</div> </div>
</details> </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="#instance-info">{% trans "Instance Info" %}</a></li>
<li><a href="#display">{% trans "Display" %}</a></li> <li><a href="#display">{% trans "Display" %}</a></li>
<li><a href="#footer">{% trans "Footer Content" %}</a></li> <li><a href="#footer">{% trans "Footer Content" %}</a></li>
<li><a href="#registration">{% trans "Registration" %}</a></li>
</ul> </ul>
{% endblock %} {% endblock %}
@ -68,6 +67,19 @@
<label class="label" for="id_privacy_policy">{% trans "Privacy Policy:" %}</label> <label class="label" for="id_privacy_policy">{% trans "Privacy Policy:" %}</label>
{{ site_form.privacy_policy }} {{ site_form.privacy_policy }}
</div> </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> </div>
</section> </section>
@ -128,55 +140,6 @@
</div> </div>
</section> </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"> <footer class="block">
<button class="button is-primary" type="submit">{% trans "Save" %}</button> <button class="button is-primary" type="submit">{% trans "Save" %}</button>
</footer> </footer>

View file

@ -10,7 +10,7 @@
{% csrf_token %} {% csrf_token %}
<p> <p>
{% blocktrans trimmed with username=user.localname %} {% 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 %} {% endblocktrans %}
</p> </p>
<div class="field"> <div class="field">

View file

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

View file

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

View file

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

View file

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

View file

@ -32,7 +32,7 @@
<div class="card-footer-item"> <div class="card-footer-item">
{% trans "Reply" as button_text %} {% 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>
<div class="card-footer-item"> <div class="card-footer-item">
{% include 'snippets/boost_button.html' with status=status %} {% include 'snippets/boost_button.html' with status=status %}
@ -42,7 +42,7 @@
</div> </div>
{% if not moderation_mode %} {% if not moderation_mode %}
<div class="card-footer-item"> <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> </div>
{% endif %} {% endif %}

View file

@ -66,6 +66,10 @@
<li{% if url == request.path or url == request.path|add:'/' %} class="is-active"{% endif %}> <li{% if url == request.path or url == request.path|add:'/' %} class="is-active"{% endif %}>
<a href="{{ url }}">{% trans "Activity" %}</a> <a href="{{ url }}">{% trans "Activity" %}</a>
</li> </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 %} {% if is_self or user.goal.exists %}
{% now 'Y' as year %} {% now 'Y' as year %}
{% url 'user-goal' user|username year as url %} {% 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", "openlibrary_key": "OL29486417M",
"librarything_key": null, "librarything_key": null,
"goodreads_key": null, "goodreads_key": null,
"isfdb": null,
"attachment": [ "attachment": [
{ {
"url": "https://bookwyrm.social/images/covers/50202953._SX318_.jpg", "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? 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","",,,to-read,2021/05/10,"","",0,"",,,,,,,,,"",,"",No 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,"",,,read,2021/05/10,"","",1,informative,fast,,,,,,5.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() models.ImportItem.objects.filter(job=import_job).order_by("index").all()
) )
self.assertEqual(len(import_items), 2) self.assertEqual(len(import_items), 2)
self.assertEqual(import_items[0].index, 0)
self.assertEqual(import_items[0].normalized_data["title"], "Always Coming Home") always_book = import_items[0]
self.assertEqual(import_items[1].index, 1) 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( 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, *_): def test_handle_imported_book(self, *_):
"""storygraph import added a book, this adds related connections""" """storygraph import added a book, this adds related connections"""

View file

@ -12,7 +12,7 @@ class InitDB(TestCase):
def test_init_groups(self): def test_init_groups(self):
"""Create groups""" """Create groups"""
initdb.init_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="admin").exists())
self.assertTrue(Group.objects.filter(name="moderator").exists()) self.assertTrue(Group.objects.filter(name="moderator").exists())
self.assertTrue(Group.objects.filter(name="editor").exists()) self.assertTrue(Group.objects.filter(name="editor").exists())
@ -87,7 +87,7 @@ class InitDB(TestCase):
command.handle() command.handle()
# everything should have been called # everything should have been called
self.assertEqual(Group.objects.count(), 3) self.assertEqual(Group.objects.count(), 4)
self.assertTrue(Permission.objects.exists()) self.assertTrue(Permission.objects.exists())
self.assertEqual(models.Connector.objects.count(), 3) self.assertEqual(models.Connector.objects.count(), 3)
self.assertEqual(models.SiteSettings.objects.count(), 1) self.assertEqual(models.SiteSettings.objects.count(), 1)
@ -99,7 +99,7 @@ class InitDB(TestCase):
command.handle(limit="group") command.handle(limit="group")
# everything should have been called # 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.Connector.objects.count(), 0)
self.assertEqual(models.SiteSettings.objects.count(), 0) self.assertEqual(models.SiteSettings.objects.count(), 0)
self.assertEqual(models.LinkDomain.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.partOf, "http://fish.com/")
self.assertEqual(page_1.id, "http://fish.com/?page=1") self.assertEqual(page_1.id, "http://fish.com/?page=1")
self.assertEqual(page_1.next, "http://fish.com/?page=2") 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[0]["content"], "<p>test status 29</p>")
self.assertEqual(page_1.orderedItems[1]["content"], "test status 28") self.assertEqual(page_1.orderedItems[1]["content"], "<p>test status 28</p>")
page_2 = to_ordered_collection_page( page_2 = to_ordered_collection_page(
models.Status.objects.all(), "http://fish.com/", page=2 models.Status.objects.all(), "http://fish.com/", page=2
) )
self.assertEqual(page_2.partOf, "http://fish.com/") self.assertEqual(page_2.partOf, "http://fish.com/")
self.assertEqual(page_2.id, "http://fish.com/?page=2") 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[0]["content"], "<p>test status 14</p>")
self.assertEqual(page_2.orderedItems[-1]["content"], "test status 0") self.assertEqual(page_2.orderedItems[-1]["content"], "<p>test status 0</p>")
def test_to_ordered_collection(self, *_): def test_to_ordered_collection(self, *_):
"""convert a queryset into an ordered collection object""" """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.partOf, "http://fish.com/")
self.assertEqual(page_2.id, "http://fish.com/?page=2") 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[0]["content"], "<p>test status 14</p>")
self.assertEqual(page_2.orderedItems[-1]["content"], "test status 0") self.assertEqual(page_2.orderedItems[-1]["content"], "<p>test status 0</p>")
def test_broadcast_task(self, *_): def test_broadcast_task(self, *_):
"""Should be calling asyncio""" """Should be calling asyncio"""

View file

@ -132,7 +132,7 @@ class Status(TestCase):
activity = status.to_activity() activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id) self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Note") 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["sensitive"], False)
def test_status_to_activity_tombstone(self, *_): def test_status_to_activity_tombstone(self, *_):
@ -156,7 +156,7 @@ class Status(TestCase):
activity = status.to_activity(pure=True) activity = status.to_activity(pure=True)
self.assertEqual(activity["id"], status.remote_id) self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Note") 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["sensitive"], False)
self.assertEqual(activity["attachment"], []) self.assertEqual(activity["attachment"], [])
@ -170,7 +170,7 @@ class Status(TestCase):
activity = status.to_activity() activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id) self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "GeneratedNote") 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(activity["sensitive"], False)
self.assertEqual(len(activity["tag"]), 2) self.assertEqual(len(activity["tag"]), 2)
@ -191,14 +191,14 @@ class Status(TestCase):
self.assertEqual(activity["type"], "Note") self.assertEqual(activity["type"], "Note")
self.assertEqual(activity["sensitive"], False) self.assertEqual(activity["sensitive"], False)
self.assertIsInstance(activity["attachment"], list) self.assertIsInstance(activity["attachment"], list)
self.assertEqual(activity["attachment"][0].type, "Document") self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue( self.assertTrue(
re.match( re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", 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_comment_to_activity(self, *_): def test_comment_to_activity(self, *_):
"""subclass of the base model version with a "pure" serializer""" """subclass of the base model version with a "pure" serializer"""
@ -208,7 +208,7 @@ class Status(TestCase):
activity = status.to_activity() activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id) self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Comment") 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) self.assertEqual(activity["inReplyToBook"], self.book.remote_id)
def test_comment_to_pure_activity(self, *_): def test_comment_to_pure_activity(self, *_):
@ -223,14 +223,14 @@ class Status(TestCase):
activity["content"], activity["content"],
f'test content<p>(comment on <a href="{self.book.remote_id}">"Test Edition"</a>)</p>', 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( # self.assertTrue(
# re.match( # re.match(
# r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", # 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_quotation_to_activity(self, *_): def test_quotation_to_activity(self, *_):
"""subclass of the base model version with a "pure" serializer""" """subclass of the base model version with a "pure" serializer"""
@ -243,8 +243,8 @@ class Status(TestCase):
activity = status.to_activity() activity = status.to_activity()
self.assertEqual(activity["id"], status.remote_id) self.assertEqual(activity["id"], status.remote_id)
self.assertEqual(activity["type"], "Quotation") self.assertEqual(activity["type"], "Quotation")
self.assertEqual(activity["quote"], "a sickening sense") self.assertEqual(activity["quote"], "<p>a sickening sense</p>")
self.assertEqual(activity["content"], "test content") self.assertEqual(activity["content"], "<p>test content</p>")
self.assertEqual(activity["inReplyToBook"], self.book.remote_id) self.assertEqual(activity["inReplyToBook"], self.book.remote_id)
def test_quotation_to_pure_activity(self, *_): def test_quotation_to_pure_activity(self, *_):
@ -262,14 +262,14 @@ class Status(TestCase):
activity["content"], activity["content"],
f'a sickening sense <p>-- <a href="{self.book.remote_id}">"Test Edition"</a></p>test 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( self.assertTrue(
re.match( re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", 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, *_): def test_review_to_activity(self, *_):
"""subclass of the base model version with a "pure" serializer""" """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["type"], "Review")
self.assertEqual(activity["rating"], 3) self.assertEqual(activity["rating"], 3)
self.assertEqual(activity["name"], "Review name") 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) self.assertEqual(activity["inReplyToBook"], self.book.remote_id)
def test_review_to_pure_activity(self, *_): 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', f'Review of "{self.book.title}" (3 stars): Review\'s name',
) )
self.assertEqual(activity["content"], "test content") self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["attachment"][0].type, "Document") self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue( self.assertTrue(
re.match( re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", 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, *_): def test_review_to_pure_activity_no_rating(self, *_):
"""subclass of the base model version with a "pure" serializer""" """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', f'Review of "{self.book.title}": Review name',
) )
self.assertEqual(activity["content"], "test content") self.assertEqual(activity["content"], "test content")
self.assertEqual(activity["attachment"][0].type, "Document") self.assertEqual(activity["attachment"][0]["type"], "Document")
self.assertTrue( self.assertTrue(
re.match( re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", 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, *_): def test_reviewrating_to_pure_activity(self, *_):
"""subclass of the base model version with a "pure" serializer""" """subclass of the base model version with a "pure" serializer"""
@ -353,14 +353,14 @@ class Status(TestCase):
activity["content"], activity["content"],
f'rated <em><a href="{self.book.remote_id}">{self.book.title}</a></em>: 3 stars', 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( self.assertTrue(
re.match( re.match(
r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", 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, *_): def test_favorite(self, *_):
"""fav a status""" """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): class SiteSettingsViews(TestCase):
"""Edit site settings""" """Edit site settings"""
# pylint: disable=invalid-name
def setUp(self): def setUp(self):
"""we need basic test data and mocks""" """we need basic test data and mocks"""
self.factory = RequestFactory() self.factory = RequestFactory()
@ -56,6 +57,8 @@ class SiteSettingsViews(TestCase):
form.data["invite_request_text"] = "blah" form.data["invite_request_text"] = "blah"
form.data["code_of_conduct"] = "blah" form.data["code_of_conduct"] = "blah"
form.data["privacy_policy"] = "blah" form.data["privacy_policy"] = "blah"
form.data["show_impressum"] = False
form.data["impressum"] = "bleh"
request = self.factory.post("", form.data) request = self.factory.post("", form.data)
request.user = self.local_user request.user = self.local_user

View file

@ -1,6 +1,7 @@
""" test for app action functionality """ """ test for app action functionality """
from unittest.mock import patch from unittest.mock import patch
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.http import Http404
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
@ -77,6 +78,28 @@ class LandingViews(TestCase):
validate_html(result.render()) validate_html(result.render())
self.assertEqual(result.status_code, 200) 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): def test_landing(self):
"""there are so many views, this just makes sure it LOADS""" """there are so many views, this just makes sure it LOADS"""
view = views.Landing.as_view() view = views.Landing.as_view()

View file

@ -58,6 +58,7 @@ class RegisterViews(TestCase):
"localname": "nutria-user.user_nutria", "localname": "nutria-user.user_nutria",
"password": "mouseword", "password": "mouseword",
"email": "aa@bb.cccc", "email": "aa@bb.cccc",
"preferred_timezone": "Europe/Berlin",
}, },
) )
with patch("bookwyrm.views.landing.register.login"): 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.username, f"nutria-user.user_nutria@{DOMAIN}")
self.assertEqual(nutria.localname, "nutria-user.user_nutria") self.assertEqual(nutria.localname, "nutria-user.user_nutria")
self.assertEqual(nutria.local, True) self.assertEqual(nutria.local, True)
self.assertEqual(nutria.preferred_timezone, "Europe/Berlin")
@patch("bookwyrm.emailing.send_email.delay") @patch("bookwyrm.emailing.send_email.delay")
def test_register_email_confirm(self, *_): def test_register_email_confirm(self, *_):
@ -198,6 +200,58 @@ class RegisterViews(TestCase):
self.assertEqual(models.User.objects.count(), 1) self.assertEqual(models.User.objects.count(), 1)
validate_html(response.render()) 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, *_): def test_register_closed_instance(self, *_):
"""you can't just register""" """you can't just register"""
view = views.Register.as_view() view = views.Register.as_view()

View file

@ -63,7 +63,7 @@ class ExportViews(TestCase):
# pylint: disable=line-too-long # pylint: disable=line-too-long
self.assertEqual( self.assertEqual(
result[0], 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) self.assertEqual(result[1].decode("utf-8"), expected)

View file

@ -233,3 +233,19 @@ class UserViews(TestCase):
result = views.user_redirect(request, "mouse") result = views.user_redirect(request, "mouse")
self.assertEqual(result.status_code, 302) 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" 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-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/?$", views.Themes.as_view(), name="settings-themes"),
re_path( re_path(
r"^settings/themes/(?P<theme_id>\d+)/delete/?$", r"^settings/themes/(?P<theme_id>\d+)/delete/?$",
@ -119,7 +129,7 @@ urlpatterns = [
), ),
re_path( re_path(
r"^settings/email-preview/?$", r"^settings/email-preview/?$",
views.admin.site.email_preview, views.admin.email_config.email_preview,
name="settings-email-preview", name="settings-email-preview",
), ),
re_path( re_path(
@ -319,10 +329,16 @@ urlpatterns = [
re_path( re_path(
r"^settings/celery/?$", views.CeleryStatus.as_view(), name="settings-celery" 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 # landing pages
re_path(r"^about/?$", views.about, name="about"), re_path(r"^about/?$", views.about, name="about"),
re_path(r"^privacy/?$", views.privacy, name="privacy"), re_path(r"^privacy/?$", views.privacy, name="privacy"),
re_path(r"^conduct/?$", views.conduct, name="conduct"), re_path(r"^conduct/?$", views.conduct, name="conduct"),
re_path(r"^impressum/?$", views.impressum, name="impressum"),
path("", views.Home.as_view(), name="landing"), path("", views.Home.as_view(), name="landing"),
re_path(r"^discover/?$", views.Discover.as_view(), name="discover"), re_path(r"^discover/?$", views.Discover.as_view(), name="discover"),
re_path(r"^notifications/?$", views.Notifications.as_view(), name="notifications"), re_path(r"^notifications/?$", views.Notifications.as_view(), name="notifications"),
@ -414,6 +430,11 @@ urlpatterns = [
name="user-relationships", name="user-relationships",
), ),
re_path(r"^hide-suggestions/?$", views.hide_suggestions, name="hide-suggestions"), 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 # groups
re_path(rf"{USER_PATH}/groups/?$", views.UserGroups.as_view(), name="user-groups"), re_path(rf"{USER_PATH}/groups/?$", views.UserGroups.as_view(), name="user-groups"),
re_path( re_path(

View file

@ -10,6 +10,7 @@ from .admin.federation import Federation, FederatedServer
from .admin.federation import AddFederatedServer, ImportServerBlocklist from .admin.federation import AddFederatedServer, ImportServerBlocklist
from .admin.federation import block_server, unblock_server, refresh_server from .admin.federation import block_server, unblock_server, refresh_server
from .admin.email_blocklist import EmailBlocklist from .admin.email_blocklist import EmailBlocklist
from .admin.email_config import EmailConfig
from .admin.imports import ( from .admin.imports import (
ImportList, ImportList,
disable_imports, disable_imports,
@ -28,7 +29,7 @@ from .admin.reports import (
unsuspend_user, unsuspend_user,
moderator_delete_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.themes import Themes, delete_theme
from .admin.user_admin import UserAdmin, UserAdminList 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 from .books.links import BookFileLinks, AddFileLink, delete_link
# landing # landing
from .landing.about import about, privacy, conduct from .landing.about import about, privacy, conduct, impressum
from .landing.landing import Home, Landing from .landing.landing import Home, Landing
from .landing.login import Login, Logout from .landing.login import Login, Logout
from .landing.register import Register 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 CreateStatus, EditStatus, DeleteStatus, update_progress
from .status import edit_readthrough from .status import edit_readthrough
from .updates import get_notification_count, get_unread_status_string 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 .relationships import Relationships
from .wellknown import * from .wellknown import *
from .annual_summary 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.utils.decorators import method_decorator
from django.views import View from django.views import View
from bookwyrm import emailing, forms, models from bookwyrm import forms, models
# pylint: disable= no-self-use # pylint: disable= no-self-use
@ -35,20 +35,55 @@ class Site(View):
return TemplateResponse(request, "settings/site.html", data) return TemplateResponse(request, "settings/site.html", data)
@login_required @method_decorator(login_required, name="dispatch")
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True) @method_decorator(
def email_preview(request): permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
"""for development, renders and example email template""" name="dispatch",
template = request.GET.get("email") )
data = emailing.email_data() class RegistrationLimited(View):
data["subject_path"] = f"email/{template}/subject.html" """Things related to registering that non-admins owners can change"""
data["html_content_path"] = f"email/{template}/html_content.html"
data["text_content_path"] = f"email/{template}/text_content.html" def get(self, request):
data["reset_link"] = "https://example.com/link" """edit form"""
data["invite_link"] = "https://example.com/link" site = models.SiteSettings.objects.get()
data["confirmation_link"] = "https://example.com/link" data = {"form": forms.RegistrationLimitedForm(instance=site)}
data["confirmation_code"] = "AKJHKDGKJSDFG" return TemplateResponse(request, "settings/registration_limited.html", data)
data["reporter"] = "ConcernedUser"
data["reportee"] = "UserName" def post(self, request):
data["report_link"] = "https://example.com/link" """edit the site settings"""
return TemplateResponse(request, "email/preview.html", data) 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 # pylint: disable= no-self-use
@method_decorator(login_required, name="dispatch") @method_decorator(login_required, name="dispatch")
@method_decorator( @method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True), permission_required("bookwyrm.system_administration", raise_exception=True),
name="dispatch", name="dispatch",
) )
class Themes(View): class Themes(View):
@ -46,7 +46,7 @@ def get_view_data():
@require_POST @require_POST
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True) @permission_required("bookwyrm.system_administration", raise_exception=True)
# pylint: disable=unused-argument # pylint: disable=unused-argument
def delete_theme(request, theme_id): def delete_theme(request, theme_id):
"""Remove a theme""" """Remove a theme"""

View file

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

View file

@ -1,5 +1,6 @@
""" non-interactive pages """ """ non-interactive pages """
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from django.http import Http404
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.utils import timezone from django.utils import timezone
from django.views.decorators.http import require_GET from django.views.decorators.http import require_GET
@ -36,3 +37,12 @@ def conduct(request):
def privacy(request): def privacy(request):
"""more information about the instance""" """more information about the instance"""
return TemplateResponse(request, "about/privacy.html") 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 """ """ class views for login/register views """
import pytz
from django.contrib.auth import login from django.contrib.auth import login
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
@ -55,6 +56,10 @@ class Register(View):
localname = form.data["localname"].strip() localname = form.data["localname"].strip()
email = form.data["email"] email = form.data["email"]
password = form.data["password"] 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 # make sure the email isn't blocked as spam
email_domain = email.split("@")[-1] email_domain = email.split("@")[-1]
@ -71,6 +76,7 @@ class Register(View):
local=True, local=True,
deactivation_reason="pending" if settings.require_confirm_email else None, deactivation_reason="pending" if settings.require_confirm_email else None,
is_active=not settings.require_confirm_email, is_active=not settings.require_confirm_email,
preferred_timezone=preferred_timezone,
) )
if invite: if invite:
invite.times_used += 1 invite.times_used += 1
@ -105,9 +111,7 @@ class ConfirmEmailCode(View):
request, "confirm_email/confirm_email.html", {"valid": False} request, "confirm_email/confirm_email.html", {"valid": False}
) )
# update the user # update the user
user.is_active = True user.reactivate()
user.deactivation_reason = None
user.save(broadcast=False, update_fields=["is_active", "deactivation_reason"])
# direct the user to log in # direct the user to log in
return redirect("login", confirmed="confirmed") return redirect("login", confirmed="confirmed")

View file

@ -1,6 +1,7 @@
""" The user profile """ """ The user profile """
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db.models import Q
from django.http import Http404 from django.http import Http404
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
@ -100,6 +101,49 @@ class User(View):
return TemplateResponse(request, "user/user.html", data) 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 @require_POST
@login_required @login_required
def hide_suggestions(request): def hide_suggestions(request):

10
bw-dev
View file

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

View file

@ -1,5 +1,5 @@
# bw-dev auto-completions for fish-shell. # 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`. # this will only work if renamed to `bw-dev.fish`.
set -l commands up \ set -l commands up \
@ -22,6 +22,7 @@ build \
clean \ clean \
black \ black \
prettier \ prettier \
eslint \
stylelint \ stylelint \
formatters \ formatters \
collectstatic_watch \ collectstatic_watch \
@ -34,6 +35,8 @@ copy_media_to_s3 \
set_cors_to_s3 \ set_cors_to_s3 \
setup \ setup \
admin_code \ admin_code \
remove_2fa \
confirm_email \
runweb runweb
function __bw_complete -a cmds cmd desc 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" "clean" "bring the cluster down and remove all containers"
__bw_complete "$commands" "black" "run Python code formatting tool" __bw_complete "$commands" "black" "run Python code formatting tool"
__bw_complete "$commands" "prettier" "run JavaScript 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" "stylelint" "run SCSS linting tool"
__bw_complete "$commands" "formatters" "run multiple formatter tools" __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_streams" "populate the main streams"
__bw_complete "$commands" "populate_lists_streams" "populate streams for book lists" __bw_complete "$commands" "populate_lists_streams" "populate streams for book lists"
__bw_complete "$commands" "populate_suggestions" "populate book suggestions" __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" "set_cors_to_s3" "push a CORS configuration defined in .json to s3"
__bw_complete "$commands" "setup" "perform first-time setup" __bw_complete "$commands" "setup" "perform first-time setup"
__bw_complete "$commands" "admin_code" "get the admin code" __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" __bw_complete "$commands" "runweb" "run a command on the web container"

View file

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

View file

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

View file

@ -86,10 +86,8 @@ services:
restart: on-failure restart: on-failure
flower: flower:
build: . 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 env_file: .env
ports:
- ${FLOWER_PORT}:${FLOWER_PORT}
volumes: volumes:
- .:/app - .:/app
networks: networks:

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-10 21:42+0000\n" "POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-11-13 16:05\n" "PO-Revision-Date: 2022-12-05 03:56\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Catalan\n" "Language-Team: Catalan\n"
"Language: ca\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." 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." 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." 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." 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" msgid "Private"
msgstr "Privat" msgstr "Privat"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140 #: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:19 #: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28 #: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active" msgid "Active"
msgstr "Actiu" 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" msgid "Complete"
msgstr "Complet" msgstr "Complet"
@ -316,19 +316,19 @@ msgstr "Citacions"
msgid "Everything else" msgid "Everything else"
msgstr "Tota la resta" msgstr "Tota la resta"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home Timeline" msgid "Home Timeline"
msgstr "Línia de temps Inici" msgstr "Línia de temps Inici"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home" msgid "Home"
msgstr "Inici" msgstr "Inici"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
msgid "Books Timeline" msgid "Books Timeline"
msgstr "Cronologia dels llibres" msgstr "Cronologia dels llibres"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43 #: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Cronologia dels llibres"
msgid "Books" msgid "Books"
msgstr "Llibres" msgstr "Llibres"
#: bookwyrm/settings.py:282 #: bookwyrm/settings.py:286
msgid "English" msgid "English"
msgstr "English (Anglès)" msgstr "English (Anglès)"
#: bookwyrm/settings.py:283 #: bookwyrm/settings.py:287
msgid "Català (Catalan)" msgid "Català (Catalan)"
msgstr "Català" msgstr "Català"
#: bookwyrm/settings.py:284 #: bookwyrm/settings.py:288
msgid "Deutsch (German)" msgid "Deutsch (German)"
msgstr "Deutsch (Alemany)" msgstr "Deutsch (Alemany)"
#: bookwyrm/settings.py:285 #: bookwyrm/settings.py:289
msgid "Español (Spanish)" msgid "Español (Spanish)"
msgstr "Español (espanyol)" msgstr "Español (espanyol)"
#: bookwyrm/settings.py:286 #: bookwyrm/settings.py:290
msgid "Galego (Galician)" msgid "Galego (Galician)"
msgstr "Galego (gallec)" msgstr "Galego (gallec)"
#: bookwyrm/settings.py:287 #: bookwyrm/settings.py:291
msgid "Italiano (Italian)" msgid "Italiano (Italian)"
msgstr "Italiano (italià)" msgstr "Italiano (italià)"
#: bookwyrm/settings.py:288 #: bookwyrm/settings.py:292
msgid "Suomi (Finnish)" msgid "Suomi (Finnish)"
msgstr "Suomi (finès)" msgstr "Suomi (finès)"
#: bookwyrm/settings.py:289 #: bookwyrm/settings.py:293
msgid "Français (French)" msgid "Français (French)"
msgstr "Français (francès)" msgstr "Français (francès)"
#: bookwyrm/settings.py:290 #: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)" msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituà)" msgstr "Lietuvių (Lituà)"
#: bookwyrm/settings.py:291 #: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)" msgid "Norsk (Norwegian)"
msgstr "Norsk (noruec)" msgstr "Norsk (noruec)"
#: bookwyrm/settings.py:292 #: bookwyrm/settings.py:296
msgid "Polski (Polish)" msgid "Polski (Polish)"
msgstr "Polski (polonès)" msgstr "Polski (polonès)"
#: bookwyrm/settings.py:293 #: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)" msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portuguès del Brasil)" msgstr "Português do Brasil (portuguès del Brasil)"
#: bookwyrm/settings.py:294 #: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)" msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portuguès europeu)" msgstr "Português Europeu (Portuguès europeu)"
#: bookwyrm/settings.py:295 #: bookwyrm/settings.py:299
msgid "Română (Romanian)" msgid "Română (Romanian)"
msgstr "Română (romanès)" msgstr "Română (romanès)"
#: bookwyrm/settings.py:296 #: bookwyrm/settings.py:300
msgid "Svenska (Swedish)" msgid "Svenska (Swedish)"
msgstr "Svenska (suec)" msgstr "Svenska (suec)"
#: bookwyrm/settings.py:297 #: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)" msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (xinès simplificat)" msgstr "简体中文 (xinès simplificat)"
#: bookwyrm/settings.py:298 #: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)" msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (xinès tradicional)" 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." 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." 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" msgid "Meet your admins"
msgstr "Coneix les persones que administren la instància" msgstr "Coneix les persones que administren la instància"
#: bookwyrm/templates/about/about.html:106 #: bookwyrm/templates/about/about.html:107
#, python-format #, 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." 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." 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" msgid "Moderator"
msgstr "Moderació" 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" msgid "Admin"
msgstr "Administració" 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/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14 #: 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:4
#: bookwyrm/templates/about/conduct.html:9 #: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41 #: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct" msgid "Code of Conduct"
msgstr "Codi de Conducta" msgstr "Codi de Conducta"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Versió de programari:" msgstr "Versió de programari:"
#: bookwyrm/templates/about/layout.html:30 #: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200 #: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/2fa_footer.html:8 #: bookwyrm/templates/snippets/footer.html:8
#, python-format #, python-format
msgid "About %(site_name)s" msgid "About %(site_name)s"
msgstr "Sobre %(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/layout.html:47
#: bookwyrm/templates/about/privacy.html:4 #: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9 #: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "Política de privacitat" 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/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8 #: bookwyrm/templates/feed/summary_card.html:8
#, python-format #, python-format
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120 #: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98 #: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105 #: 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/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25 #: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18 #: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Desa"
#: bookwyrm/templates/preferences/disable-2fa.html:19 #: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80 #: 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/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16 #: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52 #: 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/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17 #: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm" msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Domini" msgstr "Domini"
#: bookwyrm/templates/book/file_links/edit_links.html:36 #: 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/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48 #: 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/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112 #: 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/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99 #: bookwyrm/templates/settings/themes.html:99
msgid "Actions" msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Usuari desconegut"
msgid "Report spam" msgid "Report spam"
msgstr "Marqueu com a brossa" 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." msgid "No links available for this book."
msgstr "No hi ha enllaços disponibles per aquest llibre." 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 #: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file" msgid "Add link to file"
msgstr "Afegiu enllaç a fitxer" 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" msgid "Reset your %(site_name)s password"
msgstr "Reinicia el teu password de %(site_name)s " 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/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18 #: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.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" msgid "%(site_name)s home page"
msgstr "Pàgina principal de %(site_name)s" msgstr "Pàgina principal de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204 #: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/2fa_footer.html:12 #: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin" msgid "Contact site admin"
msgstr "Contacteu l'administració del lloc" msgstr "Contacteu l'administració del lloc"
#: bookwyrm/templates/embed-layout.html:46 #: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm" msgid "Join BookWyrm"
msgstr "Uniu-vos a 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:17
#: bookwyrm/templates/guided_tour/home.html:39 #: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212 #: bookwyrm/templates/snippets/footer.html:20
#: bookwyrm/templates/snippets/2fa_footer.html:20
msgid "Guided Tour" msgid "Guided Tour"
msgstr "Visita guiada" msgstr "Visita guiada"
@ -2625,81 +2631,89 @@ msgstr "Troba un llibre"
msgid "Import Books" msgid "Import Books"
msgstr "Importa Llibres" 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 #, python-format
msgid "On average, recent imports have taken %(hours)s hours." msgid "On average, recent imports have taken %(hours)s hours."
msgstr "Les importacions recents han durat %(hours)s de mitjana." msgstr "Les importacions recents han durat %(hours)s de mitjana."
#: bookwyrm/templates/import/import.html:19 #: bookwyrm/templates/import/import.html:26
#, python-format #, python-format
msgid "On average, recent imports have taken %(minutes)s minutes." msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "Les importacions recents han durat %(minutes)s de mitjana." 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:" msgid "Data source:"
msgstr "Font de la informació:" msgstr "Font de la informació:"
#: bookwyrm/templates/import/import.html:40 #: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)" msgid "Goodreads (CSV)"
msgstr "Goodreads (CSV)" msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43 #: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)" msgid "Storygraph (CSV)"
msgstr "Storygraph (CSV)" msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46 #: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)" msgid "LibraryThing (TSV)"
msgstr "LibraryThing (TSV)" msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49 #: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)" msgid "OpenLibrary (CSV)"
msgstr "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)" msgid "Calibre (CSV)"
msgstr "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." 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." 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:" msgid "Data file:"
msgstr "Arxiu de dades:" msgstr "Arxiu de dades:"
#: bookwyrm/templates/import/import.html:75 #: bookwyrm/templates/import/import.html:82
msgid "Include reviews" msgid "Include reviews"
msgstr "Inclou ressenyes" msgstr "Inclou ressenyes"
#: bookwyrm/templates/import/import.html:80 #: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Configuració de privacitat per les ressenyes importades:" 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/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78 #: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import" msgid "Import"
msgstr "Importa" 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" msgid "Recent Imports"
msgstr "Importacions recents" msgstr "Importacions recents"
#: bookwyrm/templates/import/import.html:96 #: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:41 #: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created" msgid "Date Created"
msgstr "Data de creació" msgstr "Data de creació"
#: bookwyrm/templates/import/import.html:99 #: bookwyrm/templates/import/import.html:116
msgid "Last Updated" msgid "Last Updated"
msgstr "Darrera actualització" msgstr "Darrera actualització"
#: bookwyrm/templates/import/import.html:102 #: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:50 #: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items" msgid "Items"
msgstr "Items" msgstr "Items"
#: bookwyrm/templates/import/import.html:111 #: bookwyrm/templates/import/import.html:128
msgid "No recent imports" msgid "No recent imports"
msgstr "No hi ha cap importació recent" msgstr "No hi ha cap importació recent"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Refresca" msgstr "Refresca"
#: bookwyrm/templates/import/import_status.html:72 #: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82 #: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import" msgid "Stop import"
msgstr "Atura la importació" msgstr "Atura la importació"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rebutja" msgstr "Rebutja"
#: bookwyrm/templates/import/troubleshoot.html:7 #: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59 #: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items" msgid "Failed items"
msgstr "Elements fallits" msgstr "Elements fallits"
@ -2958,7 +2972,7 @@ msgstr "Nom d'usuari:"
#: bookwyrm/templates/landing/password_reset.html:26 #: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23 #: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32 #: 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 #: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:" msgid "Password:"
msgstr "Contrasenya:" msgstr "Contrasenya:"
@ -3038,22 +3052,6 @@ msgstr "S'ha publicat l'estat amb èxit"
msgid "Error posting status" msgid "Error posting status"
msgstr "Hi ha hagut un error mentre es publicava l'estat" 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 #: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format #, python-format
msgid "Add \"<em>%(title)s</em>\" to this list" msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Suprimir aquesta llista?" msgstr "Suprimir aquesta llista?"
#: bookwyrm/templates/lists/edit_form.html:5 #: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17 #: bookwyrm/templates/lists/layout.html:18
msgid "Edit List" msgid "Edit List"
msgstr "Edita la llista" msgstr "Edita la llista"
@ -3128,13 +3126,12 @@ msgstr "Edita la llista"
msgid "%(list_name)s, a list by %(owner)s" msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, una llista de %(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 #, python-format
msgid "on <a href=\"/\">%(site_name)s</a>" msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "a <a href=\"/\">%(site_name)s</a>" msgstr "a <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27 #: bookwyrm/templates/lists/embed-list.html:29
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty" msgid "This list is currently empty"
msgstr "Aquesta llista és buida" 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!" msgid "You successfully added a book to this list!"
msgstr "Has afegit un llibre a aquesta llista amb èxit!" 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 #: bookwyrm/templates/lists/list.html:104
msgid "Edit notes" msgid "Edit notes"
msgstr "Edita les 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 #: bookwyrm/templates/notifications/items/add.html:66
#, python-format #, 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 "<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>\"" 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[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>\"" 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 #, 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 "<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>\"" 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." 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." 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:" msgid "Enter the code from your app:"
msgstr "Introduïu el codi de la vostra 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." 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ó." 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." msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirmeu la vostra contrasenya per començar a configurar 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 #: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA" msgid "Set up 2FA"
msgstr "Configura 2FA" msgstr "Configura 2FA"
@ -3870,7 +3888,7 @@ msgstr "Perfil"
#: bookwyrm/templates/preferences/edit_user.html:13 #: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64 #: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11 #: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77 #: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91 #: bookwyrm/templates/setup/config.html:91
msgid "Display" msgid "Display"
msgstr "Mostra" msgstr "Mostra"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Scan Barcode\n" " Scan Barcode\n"
" " " "
#: bookwyrm/templates/search/barcode_modal.html:23 #: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..." msgid "Requesting camera..."
msgstr "Sol·licitant permisos per a la càmera..." 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." 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." 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" msgid "Could not access camera"
msgstr "No s'ha pogut accedir a la càmera" 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" msgctxt "barcode scanner"
msgid "Scanning..." msgid "Scanning..."
msgstr "S'està escanejant..." 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." msgid "Align your book's barcode with the camera."
msgstr "Alinea el codi de barres del teu llibre amb la càmera." 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" msgctxt "barcode scanner"
msgid "ISBN scanned" msgid "ISBN scanned"
msgstr "S'ha escanejat l'ISBN" msgstr "S'ha escanejat l'ISBN"
#: bookwyrm/templates/search/barcode_modal.html:39 #: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN" msgctxt "followed by ISBN"
msgid "Searching for book:" msgid "Searching for book:"
msgstr "Cercant el llibre:" 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" msgid "Results from"
msgstr "Resultats de" msgstr "Resultats de"
#: bookwyrm/templates/search/book.html:78 #: bookwyrm/templates/search/book.html:89
msgid "Import book" msgid "Import book"
msgstr "Importa un llibre" msgstr "Importa un llibre"
#: bookwyrm/templates/search/book.html:102 #: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues" msgid "Load results from other catalogues"
msgstr "Carrega resultats d'altres catàlegs" msgstr "Carrega resultats d'altres catàlegs"
#: bookwyrm/templates/search/book.html:106 #: bookwyrm/templates/search/book.html:117
msgid "Manually add book" msgid "Manually add book"
msgstr "Afegeix manualment un llibre" 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." msgid "Log in to import or add books."
msgstr "Inicia la sessió per importar o afegir llibres." 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:24
#: bookwyrm/templates/search/layout.html:47 #: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27 #: 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/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13 #: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5 #: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Crea un anunci" msgstr "Crea un anunci"
#: bookwyrm/templates/settings/announcements/announcements.html:21 #: 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" msgid "Date added"
msgstr "Data en què va ser afegit" msgstr "Data en què va ser afegit"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Tasques actives" msgstr "Tasques actives"
#: bookwyrm/templates/settings/celery.html:53 #: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34 #: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Ha fallat:" msgstr "Ha fallat:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62 #: 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:" 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 "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:" 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 #: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name" msgid "Instance name"
msgstr "Nom de la instància" 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" msgid "Last updated"
msgstr "Darrera actualització" 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 #: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software" msgid "Software"
msgstr "Programari" msgstr "Programari"
#: bookwyrm/templates/settings/federation/instance_list.html:69 #: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found" msgid "No instances found"
msgstr "No s'ha trobat cap instància" msgstr "No s'ha trobat cap instància"
@ -4690,27 +4720,51 @@ msgstr "No s'ha trobat cap instància"
msgid "Stop import?" msgid "Stop import?"
msgstr "Atura la importació?" 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" msgid "Completed"
msgstr "Completat" msgstr "Completat"
#: bookwyrm/templates/settings/imports/imports.html:37 #: bookwyrm/templates/settings/imports/imports.html:85
msgid "User" msgid "User"
msgstr "Usuari" msgstr "Usuari"
#: bookwyrm/templates/settings/imports/imports.html:46 #: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated" msgid "Date Updated"
msgstr "Data actualització" msgstr "Data actualització"
#: bookwyrm/templates/settings/imports/imports.html:53 #: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items" msgid "Pending items"
msgstr "Elements pendents" msgstr "Elements pendents"
#: bookwyrm/templates/settings/imports/imports.html:56 #: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items" msgid "Successful items"
msgstr "Ítems amb èxit" msgstr "Ítems amb èxit"
#: bookwyrm/templates/settings/imports/imports.html:91 #: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found." msgid "No matching imports found."
msgstr "No s'han trobat importacions coincidents." msgstr "No s'han trobat importacions coincidents."
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Configuració del lloc" msgstr "Configuració del lloc"
#: bookwyrm/templates/settings/layout.html:106 #: 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:4
#: bookwyrm/templates/settings/themes.html:6 #: bookwyrm/templates/settings/themes.html:6
msgid "Themes" msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Informació de la instància" msgstr "Informació de la instància"
#: bookwyrm/templates/settings/site.html:12 #: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110 #: bookwyrm/templates/settings/site.html:123
msgid "Footer Content" msgid "Footer Content"
msgstr "Contingut del peu de pàgina" msgstr "Contingut del peu de pàgina"
#: bookwyrm/templates/settings/site.html:13 #: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134 #: bookwyrm/templates/settings/site.html:147
msgid "Registration" msgid "Registration"
msgstr "Registre" msgstr "Registre"
@ -5093,71 +5147,79 @@ msgstr "Codi de conducta:"
msgid "Privacy Policy:" msgid "Privacy Policy:"
msgstr "Política de privacitat:" 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" msgid "Images"
msgstr "Imatges" msgstr "Imatges"
#: bookwyrm/templates/settings/site.html:82 #: bookwyrm/templates/settings/site.html:95
msgid "Logo:" msgid "Logo:"
msgstr "Logo:" msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86 #: bookwyrm/templates/settings/site.html:99
msgid "Logo small:" msgid "Logo small:"
msgstr "Logo petit:" msgstr "Logo petit:"
#: bookwyrm/templates/settings/site.html:90 #: bookwyrm/templates/settings/site.html:103
msgid "Favicon:" msgid "Favicon:"
msgstr "Favicon:" msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98 #: bookwyrm/templates/settings/site.html:111
msgid "Default theme:" msgid "Default theme:"
msgstr "Tema per defecte:" msgstr "Tema per defecte:"
#: bookwyrm/templates/settings/site.html:113 #: bookwyrm/templates/settings/site.html:126
msgid "Support link:" msgid "Support link:"
msgstr "Enllaç de suport:" msgstr "Enllaç de suport:"
#: bookwyrm/templates/settings/site.html:117 #: bookwyrm/templates/settings/site.html:130
msgid "Support title:" msgid "Support title:"
msgstr "Títol de suport:" msgstr "Títol de suport:"
#: bookwyrm/templates/settings/site.html:121 #: bookwyrm/templates/settings/site.html:134
msgid "Admin email:" msgid "Admin email:"
msgstr "Correu electrònic de l'administrador:" msgstr "Correu electrònic de l'administrador:"
#: bookwyrm/templates/settings/site.html:125 #: bookwyrm/templates/settings/site.html:138
msgid "Additional info:" msgid "Additional info:"
msgstr "Informació addicional:" msgstr "Informació addicional:"
#: bookwyrm/templates/settings/site.html:139 #: bookwyrm/templates/settings/site.html:152
msgid "Allow registration" msgid "Allow registration"
msgstr "Permet el registre" msgstr "Permet el registre"
#: bookwyrm/templates/settings/site.html:145 #: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address" msgid "Require users to confirm email address"
msgstr "Requereix els usuaris que confirmin les seves adreces de correu" 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)" msgid "(Recommended if registration is open)"
msgstr "(Recomanat si el registre està obert)" msgstr "(Recomanat si el registre està obert)"
#: bookwyrm/templates/settings/site.html:152 #: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests" msgid "Allow invite requests"
msgstr "Permet peticions d'invitació" msgstr "Permet peticions d'invitació"
#: bookwyrm/templates/settings/site.html:158 #: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests" msgid "Set a question for invite requests"
msgstr "Estableix una pregunta per les sol·licituds d'invitació" msgstr "Estableix una pregunta per les sol·licituds d'invitació"
#: bookwyrm/templates/settings/site.html:163 #: bookwyrm/templates/settings/site.html:176
msgid "Question:" msgid "Question:"
msgstr "Pregunta:" msgstr "Pregunta:"
#: bookwyrm/templates/settings/site.html:168 #: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:" msgid "Registration closed text:"
msgstr "Text de registre tancat:" msgstr "Text de registre tancat:"
#: bookwyrm/templates/settings/site.html:172 #: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:" msgid "Invite request text:"
msgstr "Text de sol·licitud d'invitació:" msgstr "Text de sol·licitud d'invitació:"
@ -5712,6 +5774,19 @@ msgstr "Deixa de seguir"
msgid "Accept" msgid "Accept"
msgstr "Accepta" 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/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13 #: bookwyrm/templates/snippets/stars.html:13
msgid "No rating" msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Objectiu de lectura del %(current_year)s"
msgid "User Activity" msgid "User Activity"
msgstr "Activitat d'usuari" msgstr "Activitat d'usuari"
#: bookwyrm/templates/user/user.html:70 #: bookwyrm/templates/user/user.html:71
msgid "RSS feed" msgid "RSS feed"
msgstr "Canal RSS" msgstr "Canal RSS"
#: bookwyrm/templates/user/user.html:81 #: bookwyrm/templates/user/user.html:83
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Encara no hi ha activitats." msgstr "Encara no hi ha activitats."
@ -6252,10 +6327,6 @@ msgstr "El fitxer sobrepassa la mida màxima: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "No és un fitxer csv vàlid"
#: bookwyrm/views/rss_feed.py:34 #: bookwyrm/views/rss_feed.py:34
#, python-brace-format #, python-brace-format
msgid "Status updates from {obj.display_name}" 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 "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-10 21:42+0000\n" "POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-11-19 03:57\n" "PO-Revision-Date: 2022-12-05 03:56\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"Language: es\n" "Language: es\n"
@ -90,7 +90,7 @@ msgstr "Código incorrecto"
msgid "This domain is blocked. Please contact your administrator if you think this is an error." 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." 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." 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." 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" msgid "Private"
msgstr "Privado" msgstr "Privado"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140 #: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:19 #: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28 #: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active" msgid "Active"
msgstr "Activo" 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" msgid "Complete"
msgstr "Completado" msgstr "Completado"
@ -316,19 +316,19 @@ msgstr "Citas"
msgid "Everything else" msgid "Everything else"
msgstr "Todo lo demás" msgstr "Todo lo demás"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home Timeline" msgid "Home Timeline"
msgstr "Línea de tiempo principal" msgstr "Línea de tiempo principal"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home" msgid "Home"
msgstr "Inicio" msgstr "Inicio"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
msgid "Books Timeline" msgid "Books Timeline"
msgstr "Línea temporal de libros" msgstr "Línea temporal de libros"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43 #: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Línea temporal de libros"
msgid "Books" msgid "Books"
msgstr "Libros" msgstr "Libros"
#: bookwyrm/settings.py:282 #: bookwyrm/settings.py:286
msgid "English" msgid "English"
msgstr "English (Inglés)" msgstr "English (Inglés)"
#: bookwyrm/settings.py:283 #: bookwyrm/settings.py:287
msgid "Català (Catalan)" msgid "Català (Catalan)"
msgstr "Català (Catalán)" msgstr "Català (Catalán)"
#: bookwyrm/settings.py:284 #: bookwyrm/settings.py:288
msgid "Deutsch (German)" msgid "Deutsch (German)"
msgstr "Deutsch (Alemán)" msgstr "Deutsch (Alemán)"
#: bookwyrm/settings.py:285 #: bookwyrm/settings.py:289
msgid "Español (Spanish)" msgid "Español (Spanish)"
msgstr "Español" msgstr "Español"
#: bookwyrm/settings.py:286 #: bookwyrm/settings.py:290
msgid "Galego (Galician)" msgid "Galego (Galician)"
msgstr "Galego (gallego)" msgstr "Galego (gallego)"
#: bookwyrm/settings.py:287 #: bookwyrm/settings.py:291
msgid "Italiano (Italian)" msgid "Italiano (Italian)"
msgstr "Italiano" msgstr "Italiano"
#: bookwyrm/settings.py:288 #: bookwyrm/settings.py:292
msgid "Suomi (Finnish)" msgid "Suomi (Finnish)"
msgstr "Suomi (finés)" msgstr "Suomi (finés)"
#: bookwyrm/settings.py:289 #: bookwyrm/settings.py:293
msgid "Français (French)" msgid "Français (French)"
msgstr "Français (Francés)" msgstr "Français (Francés)"
#: bookwyrm/settings.py:290 #: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)" msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituano)" msgstr "Lietuvių (Lituano)"
#: bookwyrm/settings.py:291 #: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)" msgid "Norsk (Norwegian)"
msgstr "Norsk (noruego)" msgstr "Norsk (noruego)"
#: bookwyrm/settings.py:292 #: bookwyrm/settings.py:296
msgid "Polski (Polish)" msgid "Polski (Polish)"
msgstr "Polski (Polaco)" msgstr "Polski (Polaco)"
#: bookwyrm/settings.py:293 #: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)" msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (portugués brasileño)" msgstr "Português do Brasil (portugués brasileño)"
#: bookwyrm/settings.py:294 #: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)" msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)" msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:295 #: bookwyrm/settings.py:299
msgid "Română (Romanian)" msgid "Română (Romanian)"
msgstr "Română (rumano)" msgstr "Română (rumano)"
#: bookwyrm/settings.py:296 #: bookwyrm/settings.py:300
msgid "Svenska (Swedish)" msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)" msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:297 #: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)" msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chino simplificado)" msgstr "简体中文 (Chino simplificado)"
#: bookwyrm/settings.py:298 #: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)" msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chino tradicional)" 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." 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." 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" msgid "Meet your admins"
msgstr "Conoce a tus administradores" msgstr "Conoce a tus administradores"
#: bookwyrm/templates/about/about.html:106 #: bookwyrm/templates/about/about.html:107
#, python-format #, 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." 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." 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" msgid "Moderator"
msgstr "Moderador" 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" msgid "Admin"
msgstr "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/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14 #: 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:4
#: bookwyrm/templates/about/conduct.html:9 #: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41 #: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct" msgid "Code of Conduct"
msgstr "Código de conducta" msgstr "Código de conducta"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Versión del software:" msgstr "Versión del software:"
#: bookwyrm/templates/about/layout.html:30 #: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200 #: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/2fa_footer.html:8 #: bookwyrm/templates/snippets/footer.html:8
#, python-format #, python-format
msgid "About %(site_name)s" msgid "About %(site_name)s"
msgstr "Sobre %(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/layout.html:47
#: bookwyrm/templates/about/privacy.html:4 #: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9 #: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "Política de privacidad" 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/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8 #: bookwyrm/templates/feed/summary_card.html:8
#, python-format #, python-format
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120 #: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98 #: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105 #: 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/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25 #: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18 #: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Guardar"
#: bookwyrm/templates/preferences/disable-2fa.html:19 #: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80 #: 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/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16 #: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52 #: 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/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17 #: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm" msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Dominio" msgstr "Dominio"
#: bookwyrm/templates/book/file_links/edit_links.html:36 #: 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/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48 #: 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/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112 #: 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/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99 #: bookwyrm/templates/settings/themes.html:99
msgid "Actions" msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Usuario/a desconocido/a"
msgid "Report spam" msgid "Report spam"
msgstr "Denunciar 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." msgid "No links available for this book."
msgstr "Ningún enlace disponible para este libro." 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 #: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file" msgid "Add link to file"
msgstr "Añadir enlace a archivo" 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" msgid "Reset your %(site_name)s password"
msgstr "Reestablece tu contraseña de %(site_name)s" 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/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18 #: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.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" msgid "%(site_name)s home page"
msgstr "Página de inicio de %(site_name)s" msgstr "Página de inicio de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204 #: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/2fa_footer.html:12 #: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin" msgid "Contact site admin"
msgstr "Comuníquese con el administrador del sitio" msgstr "Comuníquese con el administrador del sitio"
#: bookwyrm/templates/embed-layout.html:46 #: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm" msgid "Join BookWyrm"
msgstr "Únete a 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:17
#: bookwyrm/templates/guided_tour/home.html:39 #: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212 #: bookwyrm/templates/snippets/footer.html:20
#: bookwyrm/templates/snippets/2fa_footer.html:20
msgid "Guided Tour" msgid "Guided Tour"
msgstr "Visita guiada" msgstr "Visita guiada"
@ -2625,81 +2631,89 @@ msgstr "Encontrar un libro"
msgid "Import Books" msgid "Import Books"
msgstr "Importar libros" 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 #, python-format
msgid "On average, recent imports have taken %(hours)s hours." msgid "On average, recent imports have taken %(hours)s hours."
msgstr "En promedio, las importaciones recientes han tomado %(hours)s horas." 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 #, python-format
msgid "On average, recent imports have taken %(minutes)s minutes." msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "En promedio, las importaciones recientes han tomado %(minutes)s minutos." 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:" msgid "Data source:"
msgstr "Fuente de datos:" msgstr "Fuente de datos:"
#: bookwyrm/templates/import/import.html:40 #: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)" msgid "Goodreads (CSV)"
msgstr "" msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43 #: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)" msgid "Storygraph (CSV)"
msgstr "" msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46 #: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)" msgid "LibraryThing (TSV)"
msgstr "" msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49 #: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)" msgid "OpenLibrary (CSV)"
msgstr "" msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)" 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." 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." 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:" msgid "Data file:"
msgstr "Archivo de datos:" msgstr "Archivo de datos:"
#: bookwyrm/templates/import/import.html:75 #: bookwyrm/templates/import/import.html:82
msgid "Include reviews" msgid "Include reviews"
msgstr "Incluir reseñas" msgstr "Incluir reseñas"
#: bookwyrm/templates/import/import.html:80 #: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Configuración de privacidad para las reseñas importadas:" msgstr "Configuración de privacidad para las reseñas importadas:"
#: bookwyrm/templates/import/import.html:86 #: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35 #: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78 #: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import" msgid "Import"
msgstr "Importar" 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" msgid "Recent Imports"
msgstr "Importaciones recientes" msgstr "Importaciones recientes"
#: bookwyrm/templates/import/import.html:96 #: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:41 #: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created" msgid "Date Created"
msgstr "Fecha de Creación" msgstr "Fecha de Creación"
#: bookwyrm/templates/import/import.html:99 #: bookwyrm/templates/import/import.html:116
msgid "Last Updated" msgid "Last Updated"
msgstr "Última Actualización" msgstr "Última Actualización"
#: bookwyrm/templates/import/import.html:102 #: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:50 #: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items" msgid "Items"
msgstr "" msgstr "Elementos"
#: bookwyrm/templates/import/import.html:111 #: bookwyrm/templates/import/import.html:128
msgid "No recent imports" msgid "No recent imports"
msgstr "No hay ninguna importación reciente" msgstr "No hay ninguna importación reciente"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Refrescar" msgstr "Refrescar"
#: bookwyrm/templates/import/import_status.html:72 #: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82 #: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import" msgid "Stop import"
msgstr "Parar la importación" 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 #: bookwyrm/templates/import/import_status.html:150
msgid "No items currently need review" msgid "No items currently need review"
msgstr "" msgstr "Ningún elemento requiere reseña actualmente"
#: bookwyrm/templates/import/import_status.html:186 #: bookwyrm/templates/import/import_status.html:186
msgid "View imported review" msgid "View imported review"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rechazar" msgstr "Rechazar"
#: bookwyrm/templates/import/troubleshoot.html:7 #: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59 #: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items" msgid "Failed items"
msgstr "Elementos fallidos" msgstr "Elementos fallidos"
@ -2958,7 +2972,7 @@ msgstr "Nombre de usuario:"
#: bookwyrm/templates/landing/password_reset.html:26 #: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23 #: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32 #: 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 #: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:" msgid "Password:"
msgstr "Contraseña:" msgstr "Contraseña:"
@ -3038,22 +3052,6 @@ msgstr "Estado publicado con éxito"
msgid "Error posting status" msgid "Error posting status"
msgstr "Error al publicar el estado" 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 #: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format #, python-format
msgid "Add \"<em>%(title)s</em>\" to this list" msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "¿Eliminar esta lista?" msgstr "¿Eliminar esta lista?"
#: bookwyrm/templates/lists/edit_form.html:5 #: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17 #: bookwyrm/templates/lists/layout.html:18
msgid "Edit List" msgid "Edit List"
msgstr "Editar lista" msgstr "Editar lista"
@ -3128,13 +3126,12 @@ msgstr "Editar lista"
msgid "%(list_name)s, a list by %(owner)s" msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, una lista de %(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 #, python-format
msgid "on <a href=\"/\">%(site_name)s</a>" msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "en <a href=\"/\">%(site_name)s</a>" msgstr "en <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27 #: bookwyrm/templates/lists/embed-list.html:29
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty" msgid "This list is currently empty"
msgstr "Esta lista está vacia" 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!" msgid "You successfully added a book to this list!"
msgstr "¡Has agregado un libro a esta lista exitosamente!" 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 #: bookwyrm/templates/lists/list.html:104
msgid "Edit notes" msgid "Edit notes"
msgstr "Editar notas" 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 #: bookwyrm/templates/notifications/items/add.html:66
#, python-format #, 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 "<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>\"" 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[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>\"" 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 #, 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 "<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>\"" 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>\"" 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 #: 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." 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." 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:" msgid "Enter the code from your app:"
msgstr "Introduce el código de tu aplicación:" 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." 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." 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." msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirme su contraseña para empezar a configurar 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 #: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA" msgid "Set up 2FA"
msgstr "Configurar 2FA" msgstr "Configurar 2FA"
@ -3870,7 +3888,7 @@ msgstr "Perfil"
#: bookwyrm/templates/preferences/edit_user.html:13 #: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64 #: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11 #: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77 #: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91 #: bookwyrm/templates/setup/config.html:91
msgid "Display" msgid "Display"
msgstr "Apariencia" msgstr "Apariencia"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Escanear código de barras\n" " Escanear código de barras\n"
" " " "
#: bookwyrm/templates/search/barcode_modal.html:23 #: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..." msgid "Requesting camera..."
msgstr "Solicitando acceso a cámara..." 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." 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." 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" msgid "Could not access camera"
msgstr "No se ha podido acceder a la cámara." 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" msgctxt "barcode scanner"
msgid "Scanning..." msgid "Scanning..."
msgstr "Escaneando..." 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." msgid "Align your book's barcode with the camera."
msgstr "Alinea el código de barras del libro con la cámara." 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" msgctxt "barcode scanner"
msgid "ISBN scanned" msgid "ISBN scanned"
msgstr "Se ha escaneado el ISBN." msgstr "Se ha escaneado el ISBN."
#: bookwyrm/templates/search/barcode_modal.html:39 #: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN" msgctxt "followed by ISBN"
msgid "Searching for book:" msgid "Searching for book:"
msgstr "Buscando libro:" 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" msgid "Results from"
msgstr "Resultados de" msgstr "Resultados de"
#: bookwyrm/templates/search/book.html:78 #: bookwyrm/templates/search/book.html:89
msgid "Import book" msgid "Import book"
msgstr "Importar libro" msgstr "Importar libro"
#: bookwyrm/templates/search/book.html:102 #: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues" msgid "Load results from other catalogues"
msgstr "Cargar resultados de otros catálogos" msgstr "Cargar resultados de otros catálogos"
#: bookwyrm/templates/search/book.html:106 #: bookwyrm/templates/search/book.html:117
msgid "Manually add book" msgid "Manually add book"
msgstr "Agregar libro a mano" 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." msgid "Log in to import or add books."
msgstr "Iniciar una sesión para importar o agregar libros." 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:24
#: bookwyrm/templates/search/layout.html:47 #: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27 #: 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/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13 #: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5 #: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Crear anuncio" msgstr "Crear anuncio"
#: bookwyrm/templates/settings/announcements/announcements.html:21 #: 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" msgid "Date added"
msgstr "Fecha agregada" msgstr "Fecha agregada"
@ -4327,7 +4357,7 @@ msgstr "Quitar regla"
#: bookwyrm/templates/settings/celery.html:6 #: bookwyrm/templates/settings/celery.html:6
#: bookwyrm/templates/settings/celery.html:8 #: bookwyrm/templates/settings/celery.html:8
msgid "Celery Status" msgid "Celery Status"
msgstr "" msgstr "Estado de Celery"
#: bookwyrm/templates/settings/celery.html:14 #: bookwyrm/templates/settings/celery.html:14
msgid "Queues" msgid "Queues"
@ -4347,14 +4377,14 @@ msgstr "Prioridad alta"
#: bookwyrm/templates/settings/celery.html:40 #: bookwyrm/templates/settings/celery.html:40
msgid "Could not connect to Redis broker" msgid "Could not connect to Redis broker"
msgstr "" msgstr "No se ha podido conectar al broker de Redis"
#: bookwyrm/templates/settings/celery.html:48 #: bookwyrm/templates/settings/celery.html:48
msgid "Active Tasks" msgid "Active Tasks"
msgstr "Tareas activas" msgstr "Tareas activas"
#: bookwyrm/templates/settings/celery.html:53 #: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34 #: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -4376,15 +4406,15 @@ msgstr "Sin tareas activas"
#: bookwyrm/templates/settings/celery.html:79 #: bookwyrm/templates/settings/celery.html:79
msgid "Workers" msgid "Workers"
msgstr "" msgstr "Trabajadores"
#: bookwyrm/templates/settings/celery.html:84 #: bookwyrm/templates/settings/celery.html:84
msgid "Uptime:" msgid "Uptime:"
msgstr "" msgstr "Tiempo ejecutándose:"
#: bookwyrm/templates/settings/celery.html:94 #: bookwyrm/templates/settings/celery.html:94
msgid "Could not connect to Celery" msgid "Could not connect to Celery"
msgstr "" msgstr "No se puede conectar a Celery"
#: bookwyrm/templates/settings/celery.html:101 #: bookwyrm/templates/settings/celery.html:101
msgid "Errors" msgid "Errors"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Falló:" msgstr "Falló:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62 #: 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:" 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 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:" 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 #: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name" msgid "Instance name"
msgstr "Nombre de instancia" msgstr "Nombre de instancia"
#: bookwyrm/templates/settings/federation/instance_list.html:43 #: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated" msgid "Last updated"
msgstr "Última actualización" 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 #: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software" msgid "Software"
msgstr "Software" msgstr "Software"
#: bookwyrm/templates/settings/federation/instance_list.html:69 #: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found" msgid "No instances found"
msgstr "No se encontró ningun anuncio" msgstr "No se encontró ningun anuncio"
@ -4690,27 +4720,51 @@ msgstr "No se encontró ningun anuncio"
msgid "Stop import?" msgid "Stop import?"
msgstr "¿Parar la importación?" 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" msgid "Completed"
msgstr "Completado" msgstr "Completado"
#: bookwyrm/templates/settings/imports/imports.html:37 #: bookwyrm/templates/settings/imports/imports.html:85
msgid "User" msgid "User"
msgstr "Usuario" msgstr "Usuario"
#: bookwyrm/templates/settings/imports/imports.html:46 #: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated" msgid "Date Updated"
msgstr "Fecha Actualizada" msgstr "Fecha Actualizada"
#: bookwyrm/templates/settings/imports/imports.html:53 #: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items" msgid "Pending items"
msgstr "" msgstr "Elementos pendientes"
#: bookwyrm/templates/settings/imports/imports.html:56 #: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items" 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." msgid "No matching imports found."
msgstr "No se han encontrado importaciones coincidentes." msgstr "No se han encontrado importaciones coincidentes."
@ -4894,7 +4948,7 @@ msgstr "Sistema"
#: bookwyrm/templates/settings/layout.html:88 #: bookwyrm/templates/settings/layout.html:88
msgid "Celery status" msgid "Celery status"
msgstr "" msgstr "Estado de Celery"
#: bookwyrm/templates/settings/layout.html:93 #: bookwyrm/templates/settings/layout.html:93
msgid "Instance Settings" msgid "Instance Settings"
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Configurar sitio" msgstr "Configurar sitio"
#: bookwyrm/templates/settings/layout.html:106 #: 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:4
#: bookwyrm/templates/settings/themes.html:6 #: bookwyrm/templates/settings/themes.html:6
msgid "Themes" msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Información de instancia" msgstr "Información de instancia"
#: bookwyrm/templates/settings/site.html:12 #: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110 #: bookwyrm/templates/settings/site.html:123
msgid "Footer Content" msgid "Footer Content"
msgstr "Contenido del pie de página" msgstr "Contenido del pie de página"
#: bookwyrm/templates/settings/site.html:13 #: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134 #: bookwyrm/templates/settings/site.html:147
msgid "Registration" msgid "Registration"
msgstr "Registración" msgstr "Registración"
@ -5093,71 +5147,79 @@ msgstr "Código de conducta:"
msgid "Privacy Policy:" msgid "Privacy Policy:"
msgstr "Política de privacidad:" 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" msgid "Images"
msgstr "Imagenes" msgstr "Imagenes"
#: bookwyrm/templates/settings/site.html:82 #: bookwyrm/templates/settings/site.html:95
msgid "Logo:" msgid "Logo:"
msgstr "Logo:" msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86 #: bookwyrm/templates/settings/site.html:99
msgid "Logo small:" msgid "Logo small:"
msgstr "Logo pequeño:" msgstr "Logo pequeño:"
#: bookwyrm/templates/settings/site.html:90 #: bookwyrm/templates/settings/site.html:103
msgid "Favicon:" msgid "Favicon:"
msgstr "Favicon:" msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98 #: bookwyrm/templates/settings/site.html:111
msgid "Default theme:" msgid "Default theme:"
msgstr "Tema por defecto:" msgstr "Tema por defecto:"
#: bookwyrm/templates/settings/site.html:113 #: bookwyrm/templates/settings/site.html:126
msgid "Support link:" msgid "Support link:"
msgstr "Enlace de apoyo:" msgstr "Enlace de apoyo:"
#: bookwyrm/templates/settings/site.html:117 #: bookwyrm/templates/settings/site.html:130
msgid "Support title:" msgid "Support title:"
msgstr "Título de apoyo:" msgstr "Título de apoyo:"
#: bookwyrm/templates/settings/site.html:121 #: bookwyrm/templates/settings/site.html:134
msgid "Admin email:" msgid "Admin email:"
msgstr "Correo electrónico de administradorx:" msgstr "Correo electrónico de administradorx:"
#: bookwyrm/templates/settings/site.html:125 #: bookwyrm/templates/settings/site.html:138
msgid "Additional info:" msgid "Additional info:"
msgstr "Más informacion:" msgstr "Más informacion:"
#: bookwyrm/templates/settings/site.html:139 #: bookwyrm/templates/settings/site.html:152
msgid "Allow registration" msgid "Allow registration"
msgstr "Permitir registración" msgstr "Permitir registración"
#: bookwyrm/templates/settings/site.html:145 #: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address" msgid "Require users to confirm email address"
msgstr "Requerir a usuarios a confirmar dirección de correo electrónico" 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)" msgid "(Recommended if registration is open)"
msgstr "(Recomendado si la registración es abierta)" msgstr "(Recomendado si la registración es abierta)"
#: bookwyrm/templates/settings/site.html:152 #: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests" msgid "Allow invite requests"
msgstr "Permitir solicitudes de invitación" 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" msgid "Set a question for invite requests"
msgstr "Establece una pregunta para las solicitudes de invitación." msgstr "Establece una pregunta para las solicitudes de invitación."
#: bookwyrm/templates/settings/site.html:163 #: bookwyrm/templates/settings/site.html:176
msgid "Question:" msgid "Question:"
msgstr "Pregunta:" msgstr "Pregunta:"
#: bookwyrm/templates/settings/site.html:168 #: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:" msgid "Registration closed text:"
msgstr "Texto de registración cerrada:" msgstr "Texto de registración cerrada:"
#: bookwyrm/templates/settings/site.html:172 #: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:" msgid "Invite request text:"
msgstr "Texto de solicitud de invitación:" msgstr "Texto de solicitud de invitación:"
@ -5712,6 +5774,19 @@ msgstr "Dejar de seguir"
msgid "Accept" msgid "Accept"
msgstr "Aceptar" 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/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13 #: bookwyrm/templates/snippets/stars.html:13
msgid "No rating" msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Objetivo de Lectura de %(current_year)s"
msgid "User Activity" msgid "User Activity"
msgstr "Actividad del usuario" msgstr "Actividad del usuario"
#: bookwyrm/templates/user/user.html:70 #: bookwyrm/templates/user/user.html:71
msgid "RSS feed" msgid "RSS feed"
msgstr "Feed RSS" msgstr "Feed RSS"
#: bookwyrm/templates/user/user.html:81 #: bookwyrm/templates/user/user.html:83
msgid "No activities yet!" msgid "No activities yet!"
msgstr "¡Aún no actividades!" msgstr "¡Aún no actividades!"
@ -6252,10 +6327,6 @@ msgstr "Archivo excede el tamaño máximo: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "No un archivo csv válido"
#: bookwyrm/views/rss_feed.py:34 #: bookwyrm/views/rss_feed.py:34
#, python-brace-format #, python-brace-format
msgid "Status updates from {obj.display_name}" msgid "Status updates from {obj.display_name}"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-10 21:42+0000\n" "POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-11-10 22:54\n" "PO-Revision-Date: 2022-12-05 03:56\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"Language: fi\n" "Language: fi\n"
@ -90,7 +90,7 @@ msgstr "Virheellinen koodi"
msgid "This domain is blocked. Please contact your administrator if you think this is an error." 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." 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." 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." 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" msgid "Private"
msgstr "Yksityinen" msgstr "Yksityinen"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140 #: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:19 #: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28 #: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active" msgid "Active"
msgstr "Aktiivinen" 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" msgid "Complete"
msgstr "" msgstr ""
@ -316,19 +316,19 @@ msgstr "Lainaukset"
msgid "Everything else" msgid "Everything else"
msgstr "Muut" msgstr "Muut"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home Timeline" msgid "Home Timeline"
msgstr "Oma aikajana" msgstr "Oma aikajana"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home" msgid "Home"
msgstr "Etusivu" msgstr "Etusivu"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
msgid "Books Timeline" msgid "Books Timeline"
msgstr "Kirjavirta" msgstr "Kirjavirta"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43 #: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Kirjavirta"
msgid "Books" msgid "Books"
msgstr "Kirjat" msgstr "Kirjat"
#: bookwyrm/settings.py:282 #: bookwyrm/settings.py:286
msgid "English" msgid "English"
msgstr "English (englanti)" msgstr "English (englanti)"
#: bookwyrm/settings.py:283 #: bookwyrm/settings.py:287
msgid "Català (Catalan)" msgid "Català (Catalan)"
msgstr "Català (katalaani)" msgstr "Català (katalaani)"
#: bookwyrm/settings.py:284 #: bookwyrm/settings.py:288
msgid "Deutsch (German)" msgid "Deutsch (German)"
msgstr "Deutsch (saksa)" msgstr "Deutsch (saksa)"
#: bookwyrm/settings.py:285 #: bookwyrm/settings.py:289
msgid "Español (Spanish)" msgid "Español (Spanish)"
msgstr "Español (espanja)" msgstr "Español (espanja)"
#: bookwyrm/settings.py:286 #: bookwyrm/settings.py:290
msgid "Galego (Galician)" msgid "Galego (Galician)"
msgstr "Galego (galego)" msgstr "Galego (galego)"
#: bookwyrm/settings.py:287 #: bookwyrm/settings.py:291
msgid "Italiano (Italian)" msgid "Italiano (Italian)"
msgstr "Italiano (italia)" msgstr "Italiano (italia)"
#: bookwyrm/settings.py:288 #: bookwyrm/settings.py:292
msgid "Suomi (Finnish)" msgid "Suomi (Finnish)"
msgstr "suomi" msgstr "suomi"
#: bookwyrm/settings.py:289 #: bookwyrm/settings.py:293
msgid "Français (French)" msgid "Français (French)"
msgstr "Français (ranska)" msgstr "Français (ranska)"
#: bookwyrm/settings.py:290 #: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)" msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (liettua)" msgstr "Lietuvių (liettua)"
#: bookwyrm/settings.py:291 #: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)" msgid "Norsk (Norwegian)"
msgstr "Norsk (norja)" msgstr "Norsk (norja)"
#: bookwyrm/settings.py:292 #: bookwyrm/settings.py:296
msgid "Polski (Polish)" msgid "Polski (Polish)"
msgstr "Polski (puola)" msgstr "Polski (puola)"
#: bookwyrm/settings.py:293 #: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)" msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (brasilianportugali)" msgstr "Português do Brasil (brasilianportugali)"
#: bookwyrm/settings.py:294 #: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)" msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (portugali)" msgstr "Português Europeu (portugali)"
#: bookwyrm/settings.py:295 #: bookwyrm/settings.py:299
msgid "Română (Romanian)" msgid "Română (Romanian)"
msgstr "Română (romania)" msgstr "Română (romania)"
#: bookwyrm/settings.py:296 #: bookwyrm/settings.py:300
msgid "Svenska (Swedish)" msgid "Svenska (Swedish)"
msgstr "Svenska (ruotsi)" msgstr "Svenska (ruotsi)"
#: bookwyrm/settings.py:297 #: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)" msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (yksinkertaistettu kiina)" msgstr "简体中文 (yksinkertaistettu kiina)"
#: bookwyrm/settings.py:298 #: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)" msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (perinteinen kiina)" 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." 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>." 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" msgid "Meet your admins"
msgstr "Ylläpitäjät" msgstr "Ylläpitäjät"
#: bookwyrm/templates/about/about.html:106 #: bookwyrm/templates/about/about.html:107
#, python-format #, 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." 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." 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" msgid "Moderator"
msgstr "Moderaattori" 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" msgid "Admin"
msgstr "Ylläpitäjä" 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/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14 #: 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:4
#: bookwyrm/templates/about/conduct.html:9 #: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41 #: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct" msgid "Code of Conduct"
msgstr "Käyttöehdot" msgstr "Käyttöehdot"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Ohjelmistoversio:" msgstr "Ohjelmistoversio:"
#: bookwyrm/templates/about/layout.html:30 #: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200 #: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/2fa_footer.html:8 #: bookwyrm/templates/snippets/footer.html:8
#, python-format #, python-format
msgid "About %(site_name)s" msgid "About %(site_name)s"
msgstr "%(site_name)s — tietoja" msgstr "%(site_name)s — tietoja"
@ -512,9 +513,15 @@ msgstr "%(site_name)s — tietoja"
#: bookwyrm/templates/about/layout.html:47 #: bookwyrm/templates/about/layout.html:47
#: bookwyrm/templates/about/privacy.html:4 #: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9 #: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "Tietosuojakäytäntö" 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/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8 #: bookwyrm/templates/feed/summary_card.html:8
#, python-format #, python-format
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120 #: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98 #: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105 #: 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/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25 #: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18 #: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Tallenna"
#: bookwyrm/templates/preferences/disable-2fa.html:19 #: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80 #: 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/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16 #: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52 #: 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/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17 #: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm" msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Verkkotunnus" msgstr "Verkkotunnus"
#: bookwyrm/templates/book/file_links/edit_links.html:36 #: 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/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48 #: 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/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112 #: 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/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99 #: bookwyrm/templates/settings/themes.html:99
msgid "Actions" msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Tuntematon käyttäjä"
msgid "Report spam" msgid "Report spam"
msgstr "Ilmoita roskapostiksi" 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." msgid "No links available for this book."
msgstr "Tähän kirjaan ei liity linkkejä." 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 #: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file" msgid "Add link to file"
msgstr "Lisää linkki tiedostoon" 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" msgid "Reset your %(site_name)s password"
msgstr "Palauta %(site_name)s-salasanasi" 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/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18 #: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.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" msgid "%(site_name)s home page"
msgstr "%(site_name)s — etusivu" msgstr "%(site_name)s — etusivu"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204 #: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/2fa_footer.html:12 #: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin" msgid "Contact site admin"
msgstr "Ota yhteyttä ylläpitäjään" msgstr "Ota yhteyttä ylläpitäjään"
#: bookwyrm/templates/embed-layout.html:46 #: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm" msgid "Join BookWyrm"
msgstr "Liity BookWyrmiin" 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:17
#: bookwyrm/templates/guided_tour/home.html:39 #: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212 #: bookwyrm/templates/snippets/footer.html:20
#: bookwyrm/templates/snippets/2fa_footer.html:20
msgid "Guided Tour" msgid "Guided Tour"
msgstr "Esittelykierros" msgstr "Esittelykierros"
@ -2625,81 +2631,89 @@ msgstr "Etsi kirja"
msgid "Import Books" msgid "Import Books"
msgstr "Tuo kirjoja" 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 #, python-format
msgid "On average, recent imports have taken %(hours)s hours." msgid "On average, recent imports have taken %(hours)s hours."
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:19 #: bookwyrm/templates/import/import.html:26
#, python-format #, python-format
msgid "On average, recent imports have taken %(minutes)s minutes." msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:34 #: bookwyrm/templates/import/import.html:41
msgid "Data source:" msgid "Data source:"
msgstr "Tietolähde:" msgstr "Tietolähde:"
#: bookwyrm/templates/import/import.html:40 #: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)" msgid "Goodreads (CSV)"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:43 #: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)" msgid "Storygraph (CSV)"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:46 #: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)" msgid "LibraryThing (TSV)"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:49 #: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)" msgid "OpenLibrary (CSV)"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)" msgid "Calibre (CSV)"
msgstr "" 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." 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." 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:" msgid "Data file:"
msgstr "Datatiedosto:" msgstr "Datatiedosto:"
#: bookwyrm/templates/import/import.html:75 #: bookwyrm/templates/import/import.html:82
msgid "Include reviews" msgid "Include reviews"
msgstr "Myös arviot" msgstr "Myös arviot"
#: bookwyrm/templates/import/import.html:80 #: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Tuotavien arvioiden yksityisyysvalinta:" msgstr "Tuotavien arvioiden yksityisyysvalinta:"
#: bookwyrm/templates/import/import.html:86 #: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35 #: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78 #: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import" msgid "Import"
msgstr "Tuo" 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" msgid "Recent Imports"
msgstr "Viimeksi tuotu" msgstr "Viimeksi tuotu"
#: bookwyrm/templates/import/import.html:96 #: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:41 #: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created" msgid "Date Created"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:99 #: bookwyrm/templates/import/import.html:116
msgid "Last Updated" msgid "Last Updated"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:102 #: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:50 #: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items" msgid "Items"
msgstr "" msgstr ""
#: bookwyrm/templates/import/import.html:111 #: bookwyrm/templates/import/import.html:128
msgid "No recent imports" msgid "No recent imports"
msgstr "Ei viimeaikaisia tuonteja" msgstr "Ei viimeaikaisia tuonteja"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Päivitä" msgstr "Päivitä"
#: bookwyrm/templates/import/import_status.html:72 #: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82 #: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import" msgid "Stop import"
msgstr "" msgstr ""
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Hylkää" msgstr "Hylkää"
#: bookwyrm/templates/import/troubleshoot.html:7 #: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59 #: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items" msgid "Failed items"
msgstr "Epäonnistuneet kohteet" msgstr "Epäonnistuneet kohteet"
@ -2958,7 +2972,7 @@ msgstr "Käyttäjänimi:"
#: bookwyrm/templates/landing/password_reset.html:26 #: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23 #: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32 #: 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 #: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:" msgid "Password:"
msgstr "Salasana:" msgstr "Salasana:"
@ -3038,22 +3052,6 @@ msgstr "Tilapäivitys onnistui"
msgid "Error posting status" msgid "Error posting status"
msgstr "Virhe tilapäivityksessä" 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 #: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format #, python-format
msgid "Add \"<em>%(title)s</em>\" to this list" msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Poistetaanko lista?" msgstr "Poistetaanko lista?"
#: bookwyrm/templates/lists/edit_form.html:5 #: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17 #: bookwyrm/templates/lists/layout.html:18
msgid "Edit List" msgid "Edit List"
msgstr "Muokkaa listaa" msgstr "Muokkaa listaa"
@ -3128,13 +3126,12 @@ msgstr "Muokkaa listaa"
msgid "%(list_name)s, a list by %(owner)s" msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s (lista), tehnyt %(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 #, python-format
msgid "on <a href=\"/\">%(site_name)s</a>" msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "— <a href=\"/\">%(site_name)s</a>" msgstr "— <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27 #: bookwyrm/templates/lists/embed-list.html:29
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty" msgid "This list is currently empty"
msgstr "Lista on tyhjä" msgstr "Lista on tyhjä"
@ -3216,6 +3213,10 @@ msgstr "Kirjan ehdottaminen listaan onnistui."
msgid "You successfully added a book to this list!" msgid "You successfully added a book to this list!"
msgstr "Kirjan lisääminen listaan onnistui." 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 #: bookwyrm/templates/lists/list.html:104
msgid "Edit notes" msgid "Edit notes"
msgstr "Muokkaa merkintöjä" 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 #: bookwyrm/templates/notifications/items/add.html:66
#, python-format #, 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 "<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>\"" 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[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>" 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 #, 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 "<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>\"" 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." 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." 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:" msgid "Enter the code from your app:"
msgstr "Syötä sovelluksen antama koodi:" 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." 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>." 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." msgid "Confirm your password to begin setting up 2FA."
msgstr "Aloita kaksivaiheisen tunnistautumisen käyttöönotto syöttämällä salasanasi." 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 #: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA" msgid "Set up 2FA"
msgstr "Ota kaksivaiheinen tunnistautuminen käyttöön" 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:13
#: bookwyrm/templates/preferences/edit_user.html:64 #: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11 #: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77 #: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91 #: bookwyrm/templates/setup/config.html:91
msgid "Display" msgid "Display"
msgstr "Näyttövalinnat" msgstr "Näyttövalinnat"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Skannaa viivakoodi\n" " Skannaa viivakoodi\n"
" " " "
#: bookwyrm/templates/search/barcode_modal.html:23 #: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..." msgid "Requesting camera..."
msgstr "Pyydetään kameraa..." 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." msgid "Grant access to the camera to scan a book's barcode."
msgstr "Anna lupa käyttää kameraa, jotta viivakoodi voidaan skannata." 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" msgid "Could not access camera"
msgstr "Kameraa ei löytynyt" msgstr "Kameraa ei löytynyt"
#: bookwyrm/templates/search/barcode_modal.html:33 #: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner" msgctxt "barcode scanner"
msgid "Scanning..." msgid "Scanning..."
msgstr "Skannataan..." 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." msgid "Align your book's barcode with the camera."
msgstr "Kohdista kirjan viivakoodi kameraan." msgstr "Kohdista kirjan viivakoodi kameraan."
#: bookwyrm/templates/search/barcode_modal.html:38 #: bookwyrm/templates/search/barcode_modal.html:36
msgctxt "barcode scanner" msgctxt "barcode scanner"
msgid "ISBN scanned" msgid "ISBN scanned"
msgstr "ISBN skannattu" msgstr "ISBN skannattu"
#: bookwyrm/templates/search/barcode_modal.html:39 #: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN" msgctxt "followed by ISBN"
msgid "Searching for book:" msgid "Searching for book:"
msgstr "Haetaan kirjaa:" 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" msgid "Results from"
msgstr "Tulokset lähteestä" msgstr "Tulokset lähteestä"
#: bookwyrm/templates/search/book.html:78 #: bookwyrm/templates/search/book.html:89
msgid "Import book" msgid "Import book"
msgstr "Tuo kirja" msgstr "Tuo kirja"
#: bookwyrm/templates/search/book.html:102 #: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues" msgid "Load results from other catalogues"
msgstr "Lataa tuloksia muista katalogeista" msgstr "Lataa tuloksia muista katalogeista"
#: bookwyrm/templates/search/book.html:106 #: bookwyrm/templates/search/book.html:117
msgid "Manually add book" msgid "Manually add book"
msgstr "Lisää kirja käsin" 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." msgid "Log in to import or add books."
msgstr "Kirjojen tuonti tai lisääminen edellyttää sisäänkirjautumista." 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:24
#: bookwyrm/templates/search/layout.html:47 #: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27 #: 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/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13 #: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5 #: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Luo tiedote" msgstr "Luo tiedote"
#: bookwyrm/templates/settings/announcements/announcements.html:21 #: 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" msgid "Date added"
msgstr "Lisätty" msgstr "Lisätty"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Aktiiviset tehtävät" msgstr "Aktiiviset tehtävät"
#: bookwyrm/templates/settings/celery.html:53 #: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34 #: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID" msgid "ID"
msgstr "Tunniste" msgstr "Tunniste"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Epäonnistuneet:" msgstr "Epäonnistuneet:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62 #: 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:" 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 "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:" 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 #: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name" msgid "Instance name"
msgstr "Palvelimen nimi" msgstr "Palvelimen nimi"
#: bookwyrm/templates/settings/federation/instance_list.html:43 #: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated" msgid "Last updated"
msgstr "Viimeisin päivitys" 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 #: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software" msgid "Software"
msgstr "Ohjelmisto" msgstr "Ohjelmisto"
#: bookwyrm/templates/settings/federation/instance_list.html:69 #: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found" msgid "No instances found"
msgstr "Palvelimia ei löytynyt" msgstr "Palvelimia ei löytynyt"
@ -4690,27 +4720,51 @@ msgstr "Palvelimia ei löytynyt"
msgid "Stop import?" msgid "Stop import?"
msgstr "" 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" msgid "Completed"
msgstr "" msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:37 #: bookwyrm/templates/settings/imports/imports.html:85
msgid "User" msgid "User"
msgstr "" msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:46 #: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated" msgid "Date Updated"
msgstr "" msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:53 #: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items" msgid "Pending items"
msgstr "" msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:56 #: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items" msgid "Successful items"
msgstr "" msgstr ""
#: bookwyrm/templates/settings/imports/imports.html:91 #: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found." msgid "No matching imports found."
msgstr "" msgstr ""
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Sivuston asetukset" msgstr "Sivuston asetukset"
#: bookwyrm/templates/settings/layout.html:106 #: 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:4
#: bookwyrm/templates/settings/themes.html:6 #: bookwyrm/templates/settings/themes.html:6
msgid "Themes" msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Tietoja palvelimesta" msgstr "Tietoja palvelimesta"
#: bookwyrm/templates/settings/site.html:12 #: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110 #: bookwyrm/templates/settings/site.html:123
msgid "Footer Content" msgid "Footer Content"
msgstr "Alatunnisteen sisältö" msgstr "Alatunnisteen sisältö"
#: bookwyrm/templates/settings/site.html:13 #: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134 #: bookwyrm/templates/settings/site.html:147
msgid "Registration" msgid "Registration"
msgstr "Käyttäjätilien avaaminen" msgstr "Käyttäjätilien avaaminen"
@ -5093,71 +5147,79 @@ msgstr "Käyttöehdot:"
msgid "Privacy Policy:" msgid "Privacy Policy:"
msgstr "Tietosuojakäytäntö:" 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" msgid "Images"
msgstr "Kuvat" msgstr "Kuvat"
#: bookwyrm/templates/settings/site.html:82 #: bookwyrm/templates/settings/site.html:95
msgid "Logo:" msgid "Logo:"
msgstr "Logo:" msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86 #: bookwyrm/templates/settings/site.html:99
msgid "Logo small:" msgid "Logo small:"
msgstr "Pieni logo:" msgstr "Pieni logo:"
#: bookwyrm/templates/settings/site.html:90 #: bookwyrm/templates/settings/site.html:103
msgid "Favicon:" msgid "Favicon:"
msgstr "Favicon:" msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98 #: bookwyrm/templates/settings/site.html:111
msgid "Default theme:" msgid "Default theme:"
msgstr "Oletusteema:" msgstr "Oletusteema:"
#: bookwyrm/templates/settings/site.html:113 #: bookwyrm/templates/settings/site.html:126
msgid "Support link:" msgid "Support link:"
msgstr "Rahankeruulinkki:" msgstr "Rahankeruulinkki:"
#: bookwyrm/templates/settings/site.html:117 #: bookwyrm/templates/settings/site.html:130
msgid "Support title:" msgid "Support title:"
msgstr "Rahankeruulinkin otsikko:" msgstr "Rahankeruulinkin otsikko:"
#: bookwyrm/templates/settings/site.html:121 #: bookwyrm/templates/settings/site.html:134
msgid "Admin email:" msgid "Admin email:"
msgstr "Ylläpitäjän sähköpostiosoite:" msgstr "Ylläpitäjän sähköpostiosoite:"
#: bookwyrm/templates/settings/site.html:125 #: bookwyrm/templates/settings/site.html:138
msgid "Additional info:" msgid "Additional info:"
msgstr "Lisätietoja:" msgstr "Lisätietoja:"
#: bookwyrm/templates/settings/site.html:139 #: bookwyrm/templates/settings/site.html:152
msgid "Allow registration" msgid "Allow registration"
msgstr "Salli käyttäjätilien avaaminen" 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" msgid "Require users to confirm email address"
msgstr "Vaadi käyttäjiä vahvistamaan sähköpostiosoitteensa" 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)" msgid "(Recommended if registration is open)"
msgstr "(Suositellaan, jos käyttäjätilejä voi avata vapaasti)" 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" msgid "Allow invite requests"
msgstr "Salli kutsulinkin pyytäminen" msgstr "Salli kutsulinkin pyytäminen"
#: bookwyrm/templates/settings/site.html:158 #: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests" msgid "Set a question for invite requests"
msgstr "Kutsupyyntöjen lisätietokysymys" msgstr "Kutsupyyntöjen lisätietokysymys"
#: bookwyrm/templates/settings/site.html:163 #: bookwyrm/templates/settings/site.html:176
msgid "Question:" msgid "Question:"
msgstr "Kysymys:" msgstr "Kysymys:"
#: bookwyrm/templates/settings/site.html:168 #: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:" msgid "Registration closed text:"
msgstr "Teksti, joka näytetään, kun käyttäjätilin avaaminen ei ole mahdollista:" 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:" msgid "Invite request text:"
msgstr "Kutsupyyntökehote ja -ohje:" msgstr "Kutsupyyntökehote ja -ohje:"
@ -5712,6 +5774,19 @@ msgstr "Lopeta seuraaminen"
msgid "Accept" msgid "Accept"
msgstr "Hyväksy" 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/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13 #: bookwyrm/templates/snippets/stars.html:13
msgid "No rating" msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Lukutavoite vuodelle %(current_year)s"
msgid "User Activity" msgid "User Activity"
msgstr "Käyttäjän toiminta" msgstr "Käyttäjän toiminta"
#: bookwyrm/templates/user/user.html:70 #: bookwyrm/templates/user/user.html:71
msgid "RSS feed" msgid "RSS feed"
msgstr "RSS-syöte" msgstr "RSS-syöte"
#: bookwyrm/templates/user/user.html:81 #: bookwyrm/templates/user/user.html:83
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Ei toimintaa!" msgstr "Ei toimintaa!"
@ -6252,10 +6327,6 @@ msgstr "Tiedosto on enimmäiskokoa 10 Mt suurempi"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "Epäkelpo csv-tiedosto"
#: bookwyrm/views/rss_feed.py:34 #: bookwyrm/views/rss_feed.py:34
#, python-brace-format #, python-brace-format
msgid "Status updates from {obj.display_name}" msgid "Status updates from {obj.display_name}"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-10 21:42+0000\n" "POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-11-13 11:57\n" "PO-Revision-Date: 2022-12-05 06:26\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: French\n" "Language-Team: French\n"
"Language: fr\n" "Language: fr\n"
@ -90,7 +90,7 @@ msgstr "Code incorrect"
msgid "This domain is blocked. Please contact your administrator if you think this is an error." 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." 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." 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." 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" msgid "Private"
msgstr "Privé" msgstr "Privé"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140 #: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:19 #: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28 #: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active" msgid "Active"
msgstr "Actif" 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" msgid "Complete"
msgstr "Terminé" msgstr "Terminé"
@ -316,19 +316,19 @@ msgstr "Citations"
msgid "Everything else" msgid "Everything else"
msgstr "Tout le reste" msgstr "Tout le reste"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home Timeline" msgid "Home Timeline"
msgstr "Mon fil dactualité" msgstr "Mon fil dactualité"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home" msgid "Home"
msgstr "Accueil" msgstr "Accueil"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
msgid "Books Timeline" msgid "Books Timeline"
msgstr "Actualité de mes livres" msgstr "Actualité de mes livres"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43 #: bookwyrm/templates/search/layout.html:43
@ -336,73 +336,73 @@ msgstr "Actualité de mes livres"
msgid "Books" msgid "Books"
msgstr "Livres" msgstr "Livres"
#: bookwyrm/settings.py:282 #: bookwyrm/settings.py:286
msgid "English" msgid "English"
msgstr "English" msgstr "English"
#: bookwyrm/settings.py:283 #: bookwyrm/settings.py:287
msgid "Català (Catalan)" msgid "Català (Catalan)"
msgstr "Català (Catalan)" msgstr "Català (Catalan)"
#: bookwyrm/settings.py:284 #: bookwyrm/settings.py:288
msgid "Deutsch (German)" msgid "Deutsch (German)"
msgstr "Deutsch" msgstr "Deutsch"
#: bookwyrm/settings.py:285 #: bookwyrm/settings.py:289
msgid "Español (Spanish)" msgid "Español (Spanish)"
msgstr "Español" msgstr "Español"
#: bookwyrm/settings.py:286 #: bookwyrm/settings.py:290
msgid "Galego (Galician)" msgid "Galego (Galician)"
msgstr "Galego (Galicien)" msgstr "Galego (Galicien)"
#: bookwyrm/settings.py:287 #: bookwyrm/settings.py:291
msgid "Italiano (Italian)" msgid "Italiano (Italian)"
msgstr "Italiano (Italien)" msgstr "Italiano (Italien)"
#: bookwyrm/settings.py:288 #: bookwyrm/settings.py:292
msgid "Suomi (Finnish)" msgid "Suomi (Finnish)"
msgstr "Suomi (Finnois)" msgstr "Suomi (Finnois)"
#: bookwyrm/settings.py:289 #: bookwyrm/settings.py:293
msgid "Français (French)" msgid "Français (French)"
msgstr "Français" msgstr "Français"
#: bookwyrm/settings.py:290 #: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)" msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituanien)" msgstr "Lietuvių (Lituanien)"
#: bookwyrm/settings.py:291 #: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)" msgid "Norsk (Norwegian)"
msgstr "Norsk (Norvégien)" msgstr "Norsk (Norvégien)"
#: bookwyrm/settings.py:292 #: bookwyrm/settings.py:296
msgid "Polski (Polish)" msgid "Polski (Polish)"
msgstr "Polski (Polonais)" msgstr "Polski (Polonais)"
#: bookwyrm/settings.py:293 #: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)" msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portugais brésilien)" msgstr "Português do Brasil (Portugais brésilien)"
#: bookwyrm/settings.py:294 #: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)" msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugais européen)" msgstr "Português Europeu (Portugais européen)"
#: bookwyrm/settings.py:295 #: bookwyrm/settings.py:299
msgid "Română (Romanian)" msgid "Română (Romanian)"
msgstr "Română (Roumain)" msgstr "Română (Roumain)"
#: bookwyrm/settings.py:296 #: bookwyrm/settings.py:300
msgid "Svenska (Swedish)" msgid "Svenska (Swedish)"
msgstr "Svenska (Suédois)" msgstr "Svenska (Suédois)"
#: bookwyrm/settings.py:297 #: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)" msgid "简体中文 (Simplified Chinese)"
msgstr "简化字" msgstr "简化字"
#: bookwyrm/settings.py:298 #: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)" msgid "繁體中文 (Traditional Chinese)"
msgstr "Infos supplémentaires:" msgstr "繁體中文 (chinois traditionnel)"
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found" 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." 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." 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" msgid "Meet your admins"
msgstr "Rencontrez vos admins" msgstr "Rencontrez vos admins"
#: bookwyrm/templates/about/about.html:106 #: bookwyrm/templates/about/about.html:107
#, python-format #, 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." 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." 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" msgid "Moderator"
msgstr "Modérateur/modératrice" 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" msgid "Admin"
msgstr "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/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14 #: 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:4
#: bookwyrm/templates/about/conduct.html:9 #: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41 #: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct" msgid "Code of Conduct"
msgstr "Code de conduite" msgstr "Code de conduite"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Version logicielle :" msgstr "Version logicielle :"
#: bookwyrm/templates/about/layout.html:30 #: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200 #: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/2fa_footer.html:8 #: bookwyrm/templates/snippets/footer.html:8
#, python-format #, python-format
msgid "About %(site_name)s" msgid "About %(site_name)s"
msgstr "À propos de %(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/layout.html:47
#: bookwyrm/templates/about/privacy.html:4 #: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9 #: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "Politique de vie privée" 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/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8 #: bookwyrm/templates/feed/summary_card.html:8
#, python-format #, python-format
@ -812,7 +819,7 @@ msgstr "ISNI :"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120 #: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98 #: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105 #: 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/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25 #: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18 #: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Enregistrer"
#: bookwyrm/templates/preferences/disable-2fa.html:19 #: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80 #: 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/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16 #: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52 #: 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/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17 #: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm" msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Domaine" msgstr "Domaine"
#: bookwyrm/templates/book/file_links/edit_links.html:36 #: 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/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48 #: 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/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112 #: 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/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99 #: bookwyrm/templates/settings/themes.html:99
msgid "Actions" msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Compte inconnu"
msgid "Report spam" msgid "Report spam"
msgstr "Signaler un 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." msgid "No links available for this book."
msgstr "Aucun lien disponible pour ce livre." 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 #: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file" msgid "Add link to file"
msgstr "Ajouter un lien vers un fichier" 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" msgid "Reset your %(site_name)s password"
msgstr "Réinitialiser votre mot de passe sur %(site_name)s" 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/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18 #: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.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" msgid "%(site_name)s home page"
msgstr "%(site_name)s page d'accueil" msgstr "%(site_name)s page d'accueil"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204 #: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/2fa_footer.html:12 #: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin" msgid "Contact site admin"
msgstr "Contacter ladministrateur du site" msgstr "Contacter ladministrateur du site"
#: bookwyrm/templates/embed-layout.html:46 #: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm" msgid "Join BookWyrm"
msgstr "Rejoindre 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:17
#: bookwyrm/templates/guided_tour/home.html:39 #: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212 #: bookwyrm/templates/snippets/footer.html:20
#: bookwyrm/templates/snippets/2fa_footer.html:20
msgid "Guided Tour" msgid "Guided Tour"
msgstr "Visite guidée" msgstr "Visite guidée"
@ -2625,81 +2631,89 @@ msgstr "Trouver un livre"
msgid "Import Books" msgid "Import Books"
msgstr "Importer des livres" 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 #, python-format
msgid "On average, recent imports have taken %(hours)s hours." msgid "On average, recent imports have taken %(hours)s hours."
msgstr "En moyenne, les dernières importations ont pris %(hours)s heures." 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 #, python-format
msgid "On average, recent imports have taken %(minutes)s minutes." msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "En moyenne, les dernières importations ont pris %(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:" msgid "Data source:"
msgstr "Source de données:" msgstr "Source de données:"
#: bookwyrm/templates/import/import.html:40 #: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)" msgid "Goodreads (CSV)"
msgstr "Goodreads (CSV)" msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43 #: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)" msgid "Storygraph (CSV)"
msgstr "Storygraph (CSV)" msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46 #: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)" msgid "LibraryThing (TSV)"
msgstr "LibraryThing (TSV)" msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49 #: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)" msgid "OpenLibrary (CSV)"
msgstr "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)" msgid "Calibre (CSV)"
msgstr "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." 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." 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:" msgid "Data file:"
msgstr "Fichier de données:" msgstr "Fichier de données:"
#: bookwyrm/templates/import/import.html:75 #: bookwyrm/templates/import/import.html:82
msgid "Include reviews" msgid "Include reviews"
msgstr "Importer les critiques" msgstr "Importer les critiques"
#: bookwyrm/templates/import/import.html:80 #: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Confidentialité des critiques importées:" msgstr "Confidentialité des critiques importées:"
#: bookwyrm/templates/import/import.html:86 #: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35 #: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78 #: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import" msgid "Import"
msgstr "Importer" 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" msgid "Recent Imports"
msgstr "Importations récentes" msgstr "Importations récentes"
#: bookwyrm/templates/import/import.html:96 #: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:41 #: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created" msgid "Date Created"
msgstr "Date de Création" msgstr "Date de Création"
#: bookwyrm/templates/import/import.html:99 #: bookwyrm/templates/import/import.html:116
msgid "Last Updated" msgid "Last Updated"
msgstr "Dernière Mise à jour" msgstr "Dernière Mise à jour"
#: bookwyrm/templates/import/import.html:102 #: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:50 #: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items" msgid "Items"
msgstr "Éléments" msgstr "Éléments"
#: bookwyrm/templates/import/import.html:111 #: bookwyrm/templates/import/import.html:128
msgid "No recent imports" msgid "No recent imports"
msgstr "Aucune importation récente" msgstr "Aucune importation récente"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Actualiser" msgstr "Actualiser"
#: bookwyrm/templates/import/import_status.html:72 #: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82 #: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import" msgid "Stop import"
msgstr "Arrêter l'import" msgstr "Arrêter l'import"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rejeter" msgstr "Rejeter"
#: bookwyrm/templates/import/troubleshoot.html:7 #: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59 #: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items" msgid "Failed items"
msgstr "Éléments dont l'importation a échoué" 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/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23 #: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32 #: 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 #: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:" msgid "Password:"
msgstr "Mot de passe:" msgstr "Mot de passe:"
@ -3038,22 +3052,6 @@ msgstr "Publié !"
msgid "Error posting status" msgid "Error posting status"
msgstr "Erreur lors de la publication" 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 #: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format #, python-format
msgid "Add \"<em>%(title)s</em>\" to this list" msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Supprimer cette liste ?" msgstr "Supprimer cette liste ?"
#: bookwyrm/templates/lists/edit_form.html:5 #: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17 #: bookwyrm/templates/lists/layout.html:18
msgid "Edit List" msgid "Edit List"
msgstr "Modifier la liste" msgstr "Modifier la liste"
@ -3128,13 +3126,12 @@ msgstr "Modifier la liste"
msgid "%(list_name)s, a list by %(owner)s" msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, une liste de %(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 #, python-format
msgid "on <a href=\"/\">%(site_name)s</a>" msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "sur <a href=\"/\">%(site_name)s</a>" msgstr "sur <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27 #: bookwyrm/templates/lists/embed-list.html:29
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty" msgid "This list is currently empty"
msgstr "Cette liste est actuellement vide" 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!" msgid "You successfully added a book to this list!"
msgstr "Vous avez ajouté un livre à cette liste!" 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 #: bookwyrm/templates/lists/list.html:104
msgid "Edit notes" msgid "Edit notes"
msgstr "Modifier les 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 #: bookwyrm/templates/notifications/items/add.html:66
#, python-format #, 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 "<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>\"" 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[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>\"" 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 #, 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 "<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>\"" 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." 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." 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:" msgid "Enter the code from your app:"
msgstr "Entrez le code de votre 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." 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." msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirmez votre mot de passe pour commencer à configurer lauthentification à deux facteur." 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 #: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA" msgid "Set up 2FA"
msgstr "Configurer lauthentification à deux facteurs" msgstr "Configurer lauthentification à deux facteurs"
@ -3870,7 +3888,7 @@ msgstr "Profil"
#: bookwyrm/templates/preferences/edit_user.html:13 #: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64 #: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11 #: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77 #: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91 #: bookwyrm/templates/setup/config.html:91
msgid "Display" msgid "Display"
msgstr "Affichage" msgstr "Affichage"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Scanner le code-barres\n" " Scanner le code-barres\n"
" " " "
#: bookwyrm/templates/search/barcode_modal.html:23 #: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..." msgid "Requesting camera..."
msgstr "En attente de la caméra…" 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." 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." 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" msgid "Could not access camera"
msgstr "Impossible daccéder à la caméra" msgstr "Impossible daccéder à la caméra"
#: bookwyrm/templates/search/barcode_modal.html:33 #: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner" msgctxt "barcode scanner"
msgid "Scanning..." msgid "Scanning..."
msgstr "Scan en cours…" 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." msgid "Align your book's barcode with the camera."
msgstr "Alignez le code-barres de votre livre avec la caméra." 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" msgctxt "barcode scanner"
msgid "ISBN scanned" msgid "ISBN scanned"
msgstr "ISBN scanné" msgstr "ISBN scanné"
#: bookwyrm/templates/search/barcode_modal.html:39 #: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN" msgctxt "followed by ISBN"
msgid "Searching for book:" msgid "Searching for book:"
msgstr "Recherche du livre :" 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" msgid "Results from"
msgstr "Résultats de" msgstr "Résultats de"
#: bookwyrm/templates/search/book.html:78 #: bookwyrm/templates/search/book.html:89
msgid "Import book" msgid "Import book"
msgstr "Importer le livre" msgstr "Importer le livre"
#: bookwyrm/templates/search/book.html:102 #: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues" msgid "Load results from other catalogues"
msgstr "Charger les résultats dautres catalogues" msgstr "Charger les résultats dautres catalogues"
#: bookwyrm/templates/search/book.html:106 #: bookwyrm/templates/search/book.html:117
msgid "Manually add book" msgid "Manually add book"
msgstr "Ajouter un livre manuellement" 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." msgid "Log in to import or add books."
msgstr "Authentifiez-vous pour importer ou ajouter des livres." 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:24
#: bookwyrm/templates/search/layout.html:47 #: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27 #: 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/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13 #: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5 #: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Ajouter une annonce" msgstr "Ajouter une annonce"
#: bookwyrm/templates/settings/announcements/announcements.html:21 #: 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" msgid "Date added"
msgstr "Date dajout" msgstr "Date dajout"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Tâches actives" msgstr "Tâches actives"
#: bookwyrm/templates/settings/celery.html:53 #: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34 #: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Échec:" msgstr "Échec:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62 #: 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:" 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 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 :" 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 #: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name" msgid "Instance name"
msgstr "Nom de linstance" msgstr "Nom de linstance"
#: bookwyrm/templates/settings/federation/instance_list.html:43 #: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated" msgid "Last updated"
msgstr "Dernière modification" 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 #: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software" msgid "Software"
msgstr "Logiciel" msgstr "Logiciel"
#: bookwyrm/templates/settings/federation/instance_list.html:69 #: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found" msgid "No instances found"
msgstr "Aucune instance trouvée" msgstr "Aucune instance trouvée"
@ -4690,27 +4720,51 @@ msgstr "Aucune instance trouvée"
msgid "Stop import?" msgid "Stop import?"
msgstr "Arrêter l'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" msgid "Completed"
msgstr "Terminé" msgstr "Terminé"
#: bookwyrm/templates/settings/imports/imports.html:37 #: bookwyrm/templates/settings/imports/imports.html:85
msgid "User" msgid "User"
msgstr "Utilisateur" msgstr "Utilisateur"
#: bookwyrm/templates/settings/imports/imports.html:46 #: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated" msgid "Date Updated"
msgstr "Date de Mise à jour" msgstr "Date de Mise à jour"
#: bookwyrm/templates/settings/imports/imports.html:53 #: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items" msgid "Pending items"
msgstr "Éléments en attente" msgstr "Éléments en attente"
#: bookwyrm/templates/settings/imports/imports.html:56 #: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items" msgid "Successful items"
msgstr "Éléments réussis" msgstr "Éléments réussis"
#: bookwyrm/templates/settings/imports/imports.html:91 #: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found." msgid "No matching imports found."
msgstr "Aucun import correspondant trouvé." msgstr "Aucun import correspondant trouvé."
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Paramètres du site" msgstr "Paramètres du site"
#: bookwyrm/templates/settings/layout.html:106 #: 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:4
#: bookwyrm/templates/settings/themes.html:6 #: bookwyrm/templates/settings/themes.html:6
msgid "Themes" msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Information sur linstance" msgstr "Information sur linstance"
#: bookwyrm/templates/settings/site.html:12 #: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110 #: bookwyrm/templates/settings/site.html:123
msgid "Footer Content" msgid "Footer Content"
msgstr "Contenu du pied de page" msgstr "Contenu du pied de page"
#: bookwyrm/templates/settings/site.html:13 #: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134 #: bookwyrm/templates/settings/site.html:147
msgid "Registration" msgid "Registration"
msgstr "Inscription" msgstr "Inscription"
@ -5093,71 +5147,79 @@ msgstr "Code de conduite:"
msgid "Privacy Policy:" msgid "Privacy Policy:"
msgstr "Politique de vie privée:" 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" msgid "Images"
msgstr "Images" msgstr "Images"
#: bookwyrm/templates/settings/site.html:82 #: bookwyrm/templates/settings/site.html:95
msgid "Logo:" msgid "Logo:"
msgstr "Logo:" msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86 #: bookwyrm/templates/settings/site.html:99
msgid "Logo small:" msgid "Logo small:"
msgstr "Logo réduit:" msgstr "Logo réduit:"
#: bookwyrm/templates/settings/site.html:90 #: bookwyrm/templates/settings/site.html:103
msgid "Favicon:" msgid "Favicon:"
msgstr "Favicon:" msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98 #: bookwyrm/templates/settings/site.html:111
msgid "Default theme:" msgid "Default theme:"
msgstr "Thème par défaut :" msgstr "Thème par défaut :"
#: bookwyrm/templates/settings/site.html:113 #: bookwyrm/templates/settings/site.html:126
msgid "Support link:" msgid "Support link:"
msgstr "URL pour soutenir linstance:" msgstr "URL pour soutenir linstance:"
#: bookwyrm/templates/settings/site.html:117 #: bookwyrm/templates/settings/site.html:130
msgid "Support title:" msgid "Support title:"
msgstr "Titre pour soutenir linstance:" msgstr "Titre pour soutenir linstance:"
#: bookwyrm/templates/settings/site.html:121 #: bookwyrm/templates/settings/site.html:134
msgid "Admin email:" msgid "Admin email:"
msgstr "Email de ladministrateur:" msgstr "Email de ladministrateur:"
#: bookwyrm/templates/settings/site.html:125 #: bookwyrm/templates/settings/site.html:138
msgid "Additional info:" msgid "Additional info:"
msgstr "Infos supplémentaires:" msgstr "Infos supplémentaires:"
#: bookwyrm/templates/settings/site.html:139 #: bookwyrm/templates/settings/site.html:152
msgid "Allow registration" msgid "Allow registration"
msgstr "Autoriser les inscriptions" msgstr "Autoriser les inscriptions"
#: bookwyrm/templates/settings/site.html:145 #: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address" msgid "Require users to confirm email address"
msgstr "Demander aux utilisateurs et utilisatrices de confirmer leur adresse email" 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)" msgid "(Recommended if registration is open)"
msgstr "(Recommandé si les inscriptions sont ouvertes)" msgstr "(Recommandé si les inscriptions sont ouvertes)"
#: bookwyrm/templates/settings/site.html:152 #: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests" msgid "Allow invite requests"
msgstr "Autoriser les demandes dinvitation" msgstr "Autoriser les demandes dinvitation"
#: bookwyrm/templates/settings/site.html:158 #: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests" msgid "Set a question for invite requests"
msgstr "Définir une question pour les demandes dinvitation" msgstr "Définir une question pour les demandes dinvitation"
#: bookwyrm/templates/settings/site.html:163 #: bookwyrm/templates/settings/site.html:176
msgid "Question:" msgid "Question:"
msgstr "Question :" msgstr "Question :"
#: bookwyrm/templates/settings/site.html:168 #: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:" msgid "Registration closed text:"
msgstr "Texte affiché lorsque les inscriptions sont closes:" msgstr "Texte affiché lorsque les inscriptions sont closes:"
#: bookwyrm/templates/settings/site.html:172 #: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:" msgid "Invite request text:"
msgstr "Texte de la demande d'invitation :" msgstr "Texte de la demande d'invitation :"
@ -5712,6 +5774,19 @@ msgstr "Se désabonner"
msgid "Accept" msgid "Accept"
msgstr "Accepter" 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/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13 #: bookwyrm/templates/snippets/stars.html:13
msgid "No rating" msgid "No rating"
@ -6199,11 +6274,11 @@ msgstr "Défi lecture pour %(current_year)s"
msgid "User Activity" msgid "User Activity"
msgstr "Activité du compte" msgstr "Activité du compte"
#: bookwyrm/templates/user/user.html:70 #: bookwyrm/templates/user/user.html:71
msgid "RSS feed" msgid "RSS feed"
msgstr "Flux RSS" msgstr "Flux RSS"
#: bookwyrm/templates/user/user.html:81 #: bookwyrm/templates/user/user.html:83
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Aucune activité pour linstant!" msgstr "Aucune activité pour linstant!"
@ -6252,10 +6327,6 @@ msgstr "Ce fichier dépasse la taille limite: 10Mo"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s (%(subtitle)s)" msgstr "%(title)s (%(subtitle)s)"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "Fichier CSV non valide"
#: bookwyrm/views/rss_feed.py:34 #: bookwyrm/views/rss_feed.py:34
#, python-brace-format #, python-brace-format
msgid "Status updates from {obj.display_name}" msgid "Status updates from {obj.display_name}"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bookwyrm\n" "Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-10 21:42+0000\n" "POT-Creation-Date: 2022-12-05 02:21+0000\n"
"PO-Revision-Date: 2022-11-25 14:49\n" "PO-Revision-Date: 2022-12-05 18:13\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Galician\n" "Language-Team: Galician\n"
"Language: gl\n" "Language: gl\n"
@ -60,11 +60,11 @@ msgstr "A data final da lectura non pode ser anterior á de inicio."
#: bookwyrm/forms/forms.py:59 #: bookwyrm/forms/forms.py:59
msgid "Reading stopped date cannot be before start date." 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 #: bookwyrm/forms/forms.py:67
msgid "Reading stopped date cannot be in the future." 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 #: bookwyrm/forms/forms.py:74
msgid "Reading finished date cannot be in the future." 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." 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." 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." 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." 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/shelf/shelf.html:188
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating" msgid "Rating"
msgstr "Puntuación" msgstr "Valoración"
#: bookwyrm/forms/lists.py:30 bookwyrm/templates/lists/list.html:185 #: bookwyrm/forms/lists.py:30 bookwyrm/templates/lists/list.html:185
msgid "Sort By" msgid "Sort By"
@ -256,14 +256,14 @@ msgstr "Seguidoras"
msgid "Private" msgid "Private"
msgstr "Privado" msgstr "Privado"
#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:140 #: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:157
#: bookwyrm/templates/settings/imports/imports.html:19 #: bookwyrm/templates/settings/imports/imports.html:67
#: bookwyrm/templates/settings/users/user_admin.html:81 #: bookwyrm/templates/settings/users/user_admin.html:81
#: bookwyrm/templates/settings/users/user_info.html:28 #: bookwyrm/templates/settings/users/user_info.html:28
msgid "Active" msgid "Active"
msgstr "Activa" 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" msgid "Complete"
msgstr "Completa" msgstr "Completa"
@ -316,19 +316,19 @@ msgstr "Citas"
msgid "Everything else" msgid "Everything else"
msgstr "As outras cousas" msgstr "As outras cousas"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home Timeline" msgid "Home Timeline"
msgstr "Cronoloxía de Inicio" msgstr "Cronoloxía de Inicio"
#: bookwyrm/settings.py:209 #: bookwyrm/settings.py:213
msgid "Home" msgid "Home"
msgstr "Inicio" msgstr "Inicio"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
msgid "Books Timeline" msgid "Books Timeline"
msgstr "Cronoloxía de libros" msgstr "Cronoloxía de libros"
#: bookwyrm/settings.py:210 #: bookwyrm/settings.py:214
#: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/guided_tour/user_profile.html:101
#: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:22
#: bookwyrm/templates/search/layout.html:43 #: bookwyrm/templates/search/layout.html:43
@ -336,71 +336,71 @@ msgstr "Cronoloxía de libros"
msgid "Books" msgid "Books"
msgstr "Libros" msgstr "Libros"
#: bookwyrm/settings.py:282 #: bookwyrm/settings.py:286
msgid "English" msgid "English"
msgstr "English (Inglés)" msgstr "English (Inglés)"
#: bookwyrm/settings.py:283 #: bookwyrm/settings.py:287
msgid "Català (Catalan)" msgid "Català (Catalan)"
msgstr "Català (Catalan)" msgstr "Català (Catalan)"
#: bookwyrm/settings.py:284 #: bookwyrm/settings.py:288
msgid "Deutsch (German)" msgid "Deutsch (German)"
msgstr "Deutsch (Alemán)" msgstr "Deutsch (Alemán)"
#: bookwyrm/settings.py:285 #: bookwyrm/settings.py:289
msgid "Español (Spanish)" msgid "Español (Spanish)"
msgstr "Español (Español)" msgstr "Español (Español)"
#: bookwyrm/settings.py:286 #: bookwyrm/settings.py:290
msgid "Galego (Galician)" msgid "Galego (Galician)"
msgstr "Galego (Galego)" msgstr "Galego (Galego)"
#: bookwyrm/settings.py:287 #: bookwyrm/settings.py:291
msgid "Italiano (Italian)" msgid "Italiano (Italian)"
msgstr "Italiano (Italiano)" msgstr "Italiano (Italiano)"
#: bookwyrm/settings.py:288 #: bookwyrm/settings.py:292
msgid "Suomi (Finnish)" msgid "Suomi (Finnish)"
msgstr "Suomi (Finés)" msgstr "Suomi (Finés)"
#: bookwyrm/settings.py:289 #: bookwyrm/settings.py:293
msgid "Français (French)" msgid "Français (French)"
msgstr "Français (Francés)" msgstr "Français (Francés)"
#: bookwyrm/settings.py:290 #: bookwyrm/settings.py:294
msgid "Lietuvių (Lithuanian)" msgid "Lietuvių (Lithuanian)"
msgstr "Lietuvių (Lituano)" msgstr "Lietuvių (Lituano)"
#: bookwyrm/settings.py:291 #: bookwyrm/settings.py:295
msgid "Norsk (Norwegian)" msgid "Norsk (Norwegian)"
msgstr "Norsk (Noruegués)" msgstr "Norsk (Noruegués)"
#: bookwyrm/settings.py:292 #: bookwyrm/settings.py:296
msgid "Polski (Polish)" msgid "Polski (Polish)"
msgstr "Polski (Polaco)" msgstr "Polski (Polaco)"
#: bookwyrm/settings.py:293 #: bookwyrm/settings.py:297
msgid "Português do Brasil (Brazilian Portuguese)" msgid "Português do Brasil (Brazilian Portuguese)"
msgstr "Português do Brasil (Portugués brasileiro)" msgstr "Português do Brasil (Portugués brasileiro)"
#: bookwyrm/settings.py:294 #: bookwyrm/settings.py:298
msgid "Português Europeu (European Portuguese)" msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)" msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:295 #: bookwyrm/settings.py:299
msgid "Română (Romanian)" msgid "Română (Romanian)"
msgstr "Română (Rumanés)" msgstr "Română (Rumanés)"
#: bookwyrm/settings.py:296 #: bookwyrm/settings.py:300
msgid "Svenska (Swedish)" msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)" msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:297 #: bookwyrm/settings.py:301
msgid "简体中文 (Simplified Chinese)" msgid "简体中文 (Simplified Chinese)"
msgstr "简体中文 (Chinés simplificado)" msgstr "简体中文 (Chinés simplificado)"
#: bookwyrm/settings.py:298 #: bookwyrm/settings.py:302
msgid "繁體中文 (Traditional Chinese)" msgid "繁體中文 (Traditional Chinese)"
msgstr "繁體中文 (Chinés tradicional)" 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." 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." 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" msgid "Meet your admins"
msgstr "Contacta coa administración" msgstr "Contacta coa administración"
#: bookwyrm/templates/about/about.html:106 #: bookwyrm/templates/about/about.html:107
#, python-format #, 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." 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." 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" msgid "Moderator"
msgstr "Moderación" 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" msgid "Admin"
msgstr "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/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14 #: 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:4
#: bookwyrm/templates/about/conduct.html:9 #: bookwyrm/templates/about/conduct.html:9
#: bookwyrm/templates/about/layout.html:41 #: bookwyrm/templates/about/layout.html:41
#: bookwyrm/templates/snippets/footer.html:27
msgid "Code of Conduct" msgid "Code of Conduct"
msgstr "Código de Conduta" msgstr "Código de Conduta"
@ -503,8 +504,8 @@ msgid "Software version:"
msgstr "Versión do software:" msgstr "Versión do software:"
#: bookwyrm/templates/about/layout.html:30 #: bookwyrm/templates/about/layout.html:30
#: bookwyrm/templates/embed-layout.html:34 bookwyrm/templates/layout.html:200 #: bookwyrm/templates/embed-layout.html:33
#: bookwyrm/templates/snippets/2fa_footer.html:8 #: bookwyrm/templates/snippets/footer.html:8
#, python-format #, python-format
msgid "About %(site_name)s" msgid "About %(site_name)s"
msgstr "Acerca de %(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/layout.html:47
#: bookwyrm/templates/about/privacy.html:4 #: bookwyrm/templates/about/privacy.html:4
#: bookwyrm/templates/about/privacy.html:9 #: bookwyrm/templates/about/privacy.html:9
#: bookwyrm/templates/snippets/footer.html:30
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "Política de Privacidade" 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/annual_summary/layout.html:7
#: bookwyrm/templates/feed/summary_card.html:8 #: bookwyrm/templates/feed/summary_card.html:8
#, python-format #, 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 "%(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" 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[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 #: bookwyrm/templates/annual_summary/layout.html:238
msgid "Their best rated review" msgid "Their best rated review"
@ -812,7 +819,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/announcements/edit_announcement.html:120 #: bookwyrm/templates/settings/announcements/edit_announcement.html:120
#: bookwyrm/templates/settings/federation/edit_instance.html:98 #: bookwyrm/templates/settings/federation/edit_instance.html:98
#: bookwyrm/templates/settings/federation/instance.html:105 #: 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/settings/users/user_moderation_actions.html:69
#: bookwyrm/templates/shelf/form.html:25 #: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18 #: bookwyrm/templates/snippets/reading_modals/layout.html:18
@ -834,7 +841,7 @@ msgstr "Gardar"
#: bookwyrm/templates/preferences/disable-2fa.html:19 #: bookwyrm/templates/preferences/disable-2fa.html:19
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27
#: bookwyrm/templates/readthrough/readthrough_modal.html:80 #: 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/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16 #: bookwyrm/templates/settings/imports/complete_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 #: 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/book/sync_modal.html:24
#: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/groups/members.html:29
#: bookwyrm/templates/landing/password_reset.html:52 #: 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/settings/imports/complete_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17 #: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm" msgid "Confirm"
@ -1320,7 +1327,7 @@ msgid "Domain"
msgstr "Dominio" msgstr "Dominio"
#: bookwyrm/templates/book/file_links/edit_links.html:36 #: 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/import/import_status.html:134
#: bookwyrm/templates/settings/announcements/announcements.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48 #: 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/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112 #: 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/reports/report_links_table.html:6
#: bookwyrm/templates/settings/themes.html:99 #: bookwyrm/templates/settings/themes.html:99
msgid "Actions" msgid "Actions"
@ -1349,11 +1356,11 @@ msgstr "Usuaria descoñecida"
msgid "Report spam" msgid "Report spam"
msgstr "Denunciar 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." msgid "No links available for this book."
msgstr "Sen ligazóns para para este libro." 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 #: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file" msgid "Add link to file"
msgstr "Engadir ligazón ao ficheiro" 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" msgid "Reset your %(site_name)s password"
msgstr "Restablece o contrasinal en %(site_name)s" 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/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18 #: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.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" msgid "%(site_name)s home page"
msgstr "Páxina de inicio de %(site_name)s" msgstr "Páxina de inicio de %(site_name)s"
#: bookwyrm/templates/embed-layout.html:40 bookwyrm/templates/layout.html:204 #: bookwyrm/templates/embed-layout.html:39
#: bookwyrm/templates/snippets/2fa_footer.html:12 #: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin" msgid "Contact site admin"
msgstr "Contacta coa administración" msgstr "Contacta coa administración"
#: bookwyrm/templates/embed-layout.html:46 #: bookwyrm/templates/embed-layout.html:45
msgid "Join BookWyrm" msgid "Join BookWyrm"
msgstr "Únete a BookWyrm" msgstr "Únete a BookWyrm"
@ -1827,7 +1834,7 @@ msgstr "Ver directorio"
#: bookwyrm/templates/feed/summary_card.html:21 #: 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!" 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 #: bookwyrm/templates/feed/summary_card.html:26
#, python-format #, python-format
@ -1867,7 +1874,7 @@ msgstr "Lidos"
#: bookwyrm/templates/get_started/book_preview.html:13 #: bookwyrm/templates/get_started/book_preview.html:13
#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36 #: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:36
msgid "Stopped Reading" msgid "Stopped Reading"
msgstr "Deixei de ler" msgstr "Abandonados"
#: bookwyrm/templates/get_started/books.html:6 #: bookwyrm/templates/get_started/books.html:6
msgid "What are you reading?" 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:17
#: bookwyrm/templates/guided_tour/home.html:39 #: bookwyrm/templates/guided_tour/home.html:39
#: bookwyrm/templates/layout.html:212 #: bookwyrm/templates/snippets/footer.html:20
#: bookwyrm/templates/snippets/2fa_footer.html:20
msgid "Guided Tour" msgid "Guided Tour"
msgstr "Titorial" msgstr "Titorial"
@ -2625,81 +2631,89 @@ msgstr "Atopa un libro"
msgid "Import Books" msgid "Import Books"
msgstr "Importar libros" 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 #, python-format
msgid "On average, recent imports have taken %(hours)s hours." msgid "On average, recent imports have taken %(hours)s hours."
msgstr "De media, ás importacións recentes levoulles %(hours)s horas." 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 #, python-format
msgid "On average, recent imports have taken %(minutes)s minutes." msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr "De media, ás importacións recentes levoulles %(minutes)s minutos." 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:" msgid "Data source:"
msgstr "Fonte de datos:" msgstr "Fonte de datos:"
#: bookwyrm/templates/import/import.html:40 #: bookwyrm/templates/import/import.html:47
msgid "Goodreads (CSV)" msgid "Goodreads (CSV)"
msgstr "Goodreads (CSV)" msgstr "Goodreads (CSV)"
#: bookwyrm/templates/import/import.html:43 #: bookwyrm/templates/import/import.html:50
msgid "Storygraph (CSV)" msgid "Storygraph (CSV)"
msgstr "Storygraph (CSV)" msgstr "Storygraph (CSV)"
#: bookwyrm/templates/import/import.html:46 #: bookwyrm/templates/import/import.html:53
msgid "LibraryThing (TSV)" msgid "LibraryThing (TSV)"
msgstr "LibraryThing (TSV)" msgstr "LibraryThing (TSV)"
#: bookwyrm/templates/import/import.html:49 #: bookwyrm/templates/import/import.html:56
msgid "OpenLibrary (CSV)" msgid "OpenLibrary (CSV)"
msgstr "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)"
#: bookwyrm/templates/import/import.html:52 #: bookwyrm/templates/import/import.html:59
msgid "Calibre (CSV)" msgid "Calibre (CSV)"
msgstr "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." 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." 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:" msgid "Data file:"
msgstr "Ficheiro de datos:" msgstr "Ficheiro de datos:"
#: bookwyrm/templates/import/import.html:75 #: bookwyrm/templates/import/import.html:82
msgid "Include reviews" msgid "Include reviews"
msgstr "Incluír recensións" msgstr "Incluír recensións"
#: bookwyrm/templates/import/import.html:80 #: bookwyrm/templates/import/import.html:87
msgid "Privacy setting for imported reviews:" msgid "Privacy setting for imported reviews:"
msgstr "Axuste de privacidade para recensións importadas:" msgstr "Axuste de privacidade para recensións importadas:"
#: bookwyrm/templates/import/import.html:86 #: bookwyrm/templates/import/import.html:93
#: bookwyrm/templates/preferences/layout.html:35 #: bookwyrm/templates/preferences/layout.html:35
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78 #: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import" msgid "Import"
msgstr "Importar" 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" msgid "Recent Imports"
msgstr "Importacións recentes" msgstr "Importacións recentes"
#: bookwyrm/templates/import/import.html:96 #: bookwyrm/templates/import/import.html:113
#: bookwyrm/templates/settings/imports/imports.html:41 #: bookwyrm/templates/settings/imports/imports.html:89
msgid "Date Created" msgid "Date Created"
msgstr "Data de creación" msgstr "Data de creación"
#: bookwyrm/templates/import/import.html:99 #: bookwyrm/templates/import/import.html:116
msgid "Last Updated" msgid "Last Updated"
msgstr "Última actualización" msgstr "Última actualización"
#: bookwyrm/templates/import/import.html:102 #: bookwyrm/templates/import/import.html:119
#: bookwyrm/templates/settings/imports/imports.html:50 #: bookwyrm/templates/settings/imports/imports.html:98
msgid "Items" msgid "Items"
msgstr "Elementos" msgstr "Elementos"
#: bookwyrm/templates/import/import.html:111 #: bookwyrm/templates/import/import.html:128
msgid "No recent imports" msgid "No recent imports"
msgstr "Sen importacións recentes" msgstr "Sen importacións recentes"
@ -2734,7 +2748,7 @@ msgid "Refresh"
msgstr "Actualizar" msgstr "Actualizar"
#: bookwyrm/templates/import/import_status.html:72 #: bookwyrm/templates/import/import_status.html:72
#: bookwyrm/templates/settings/imports/imports.html:82 #: bookwyrm/templates/settings/imports/imports.html:130
msgid "Stop import" msgid "Stop import"
msgstr "Deter a importación" msgstr "Deter a importación"
@ -2852,7 +2866,7 @@ msgid "Reject"
msgstr "Rexeitar" msgstr "Rexeitar"
#: bookwyrm/templates/import/troubleshoot.html:7 #: bookwyrm/templates/import/troubleshoot.html:7
#: bookwyrm/templates/settings/imports/imports.html:59 #: bookwyrm/templates/settings/imports/imports.html:107
msgid "Failed items" msgid "Failed items"
msgstr "Elementos fallidos" msgstr "Elementos fallidos"
@ -2958,7 +2972,7 @@ msgstr "Nome de usuaria:"
#: bookwyrm/templates/landing/password_reset.html:26 #: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23 #: bookwyrm/templates/landing/reactivate.html:23
#: bookwyrm/templates/layout.html:144 bookwyrm/templates/ostatus/error.html:32 #: 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 #: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:" msgid "Password:"
msgstr "Contrasinal:" msgstr "Contrasinal:"
@ -3038,22 +3052,6 @@ msgstr "Publicación correcta"
msgid "Error posting status" msgid "Error posting status"
msgstr "Erro ao publicar" 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 #: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format #, python-format
msgid "Add \"<em>%(title)s</em>\" to this list" msgid "Add \"<em>%(title)s</em>\" to this list"
@ -3119,7 +3117,7 @@ msgid "Delete this list?"
msgstr "Eliminar esta lista?" msgstr "Eliminar esta lista?"
#: bookwyrm/templates/lists/edit_form.html:5 #: bookwyrm/templates/lists/edit_form.html:5
#: bookwyrm/templates/lists/layout.html:17 #: bookwyrm/templates/lists/layout.html:18
msgid "Edit List" msgid "Edit List"
msgstr "Editar lista" msgstr "Editar lista"
@ -3128,13 +3126,12 @@ msgstr "Editar lista"
msgid "%(list_name)s, a list by %(owner)s" msgid "%(list_name)s, a list by %(owner)s"
msgstr "%(list_name)s, unha lista de %(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 #, python-format
msgid "on <a href=\"/\">%(site_name)s</a>" msgid "on <a href=\"/\">%(site_name)s</a>"
msgstr "en <a href=\"/\">%(site_name)s</a>" msgstr "en <a href=\"/\">%(site_name)s</a>"
#: bookwyrm/templates/lists/embed-list.html:27 #: bookwyrm/templates/lists/embed-list.html:29
#: bookwyrm/templates/lists/list.html:54
msgid "This list is currently empty" msgid "This list is currently empty"
msgstr "A lista está baleira neste intre" 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!" msgid "You successfully added a book to this list!"
msgstr "Engadiches correctamente un libro a esta lista!" 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 #: bookwyrm/templates/lists/list.html:104
msgid "Edit notes" msgid "Edit notes"
msgstr "Editar notas" 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 #: bookwyrm/templates/notifications/items/add.html:66
#, python-format #, 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 "<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>\"" 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[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>\"" 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 #, 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 "<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>\"" 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." 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." 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:" msgid "Enter the code from your app:"
msgstr "Escribe o código da túa 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." 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." 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." msgid "Confirm your password to begin setting up 2FA."
msgstr "Confirma o teu contrasinal para comezar a usar 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 #: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
msgid "Set up 2FA" msgid "Set up 2FA"
msgstr "Configurar 2FA" msgstr "Configurar 2FA"
@ -3870,7 +3888,7 @@ msgstr "Perfil"
#: bookwyrm/templates/preferences/edit_user.html:13 #: bookwyrm/templates/preferences/edit_user.html:13
#: bookwyrm/templates/preferences/edit_user.html:64 #: bookwyrm/templates/preferences/edit_user.html:64
#: bookwyrm/templates/settings/site.html:11 #: bookwyrm/templates/settings/site.html:11
#: bookwyrm/templates/settings/site.html:77 #: bookwyrm/templates/settings/site.html:90
#: bookwyrm/templates/setup/config.html:91 #: bookwyrm/templates/setup/config.html:91
msgid "Display" msgid "Display"
msgstr "Axustes" msgstr "Axustes"
@ -4050,54 +4068,66 @@ msgstr "\n"
" Escanear Código de barras\n" " Escanear Código de barras\n"
" " " "
#: bookwyrm/templates/search/barcode_modal.html:23 #: bookwyrm/templates/search/barcode_modal.html:21
msgid "Requesting camera..." msgid "Requesting camera..."
msgstr "Accedendo á cámara..." 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." 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." 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" msgid "Could not access camera"
msgstr "Non hai acceso á cámara" msgstr "Non hai acceso á cámara"
#: bookwyrm/templates/search/barcode_modal.html:33 #: bookwyrm/templates/search/barcode_modal.html:31
msgctxt "barcode scanner" msgctxt "barcode scanner"
msgid "Scanning..." msgid "Scanning..."
msgstr "Escaneando..." 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." msgid "Align your book's barcode with the camera."
msgstr "Aliña o código de barras do libro coa cámara." 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" msgctxt "barcode scanner"
msgid "ISBN scanned" msgid "ISBN scanned"
msgstr "ISBN escaneado" msgstr "ISBN escaneado"
#: bookwyrm/templates/search/barcode_modal.html:39 #: bookwyrm/templates/search/barcode_modal.html:37
msgctxt "followed by ISBN" msgctxt "followed by ISBN"
msgid "Searching for book:" msgid "Searching for book:"
msgstr "Buscando o libro:" 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" msgid "Results from"
msgstr "Resultados de" msgstr "Resultados de"
#: bookwyrm/templates/search/book.html:78 #: bookwyrm/templates/search/book.html:89
msgid "Import book" msgid "Import book"
msgstr "Importar libro" msgstr "Importar libro"
#: bookwyrm/templates/search/book.html:102 #: bookwyrm/templates/search/book.html:113
msgid "Load results from other catalogues" msgid "Load results from other catalogues"
msgstr "Cargar resultados desde outros catálogos" msgstr "Cargar resultados desde outros catálogos"
#: bookwyrm/templates/search/book.html:106 #: bookwyrm/templates/search/book.html:117
msgid "Manually add book" msgid "Manually add book"
msgstr "Engadir un libro manualmente" 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." msgid "Log in to import or add books."
msgstr "Accede para importar ou engadir libros." 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:24
#: bookwyrm/templates/search/layout.html:47 #: bookwyrm/templates/search/layout.html:47
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27 #: 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/layout.html:36
#: bookwyrm/templates/settings/users/user.html:13 #: bookwyrm/templates/settings/users/user.html:13
#: bookwyrm/templates/settings/users/user_admin.html:5 #: bookwyrm/templates/settings/users/user_admin.html:5
@ -4186,7 +4216,7 @@ msgid "Create Announcement"
msgstr "Crear Anuncio" msgstr "Crear Anuncio"
#: bookwyrm/templates/settings/announcements/announcements.html:21 #: 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" msgid "Date added"
msgstr "Data engadida" msgstr "Data engadida"
@ -4354,7 +4384,7 @@ msgid "Active Tasks"
msgstr "Tarefas activas" msgstr "Tarefas activas"
#: bookwyrm/templates/settings/celery.html:53 #: bookwyrm/templates/settings/celery.html:53
#: bookwyrm/templates/settings/imports/imports.html:34 #: bookwyrm/templates/settings/imports/imports.html:82
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -4665,24 +4695,24 @@ msgid "Failed:"
msgstr "Fallou:" msgstr "Fallou:"
#: bookwyrm/templates/settings/federation/instance_blocklist.html:62 #: 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:" 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 "É 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:" 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 #: bookwyrm/templates/settings/users/server_filter.html:5
msgid "Instance name" msgid "Instance name"
msgstr "Nome da instancia" msgstr "Nome da instancia"
#: bookwyrm/templates/settings/federation/instance_list.html:43 #: bookwyrm/templates/settings/federation/instance_list.html:44
msgid "Last updated" msgid "Last updated"
msgstr "Última actualización" 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 #: bookwyrm/templates/settings/federation/software_filter.html:5
msgid "Software" msgid "Software"
msgstr "Software" msgstr "Software"
#: bookwyrm/templates/settings/federation/instance_list.html:69 #: bookwyrm/templates/settings/federation/instance_list.html:70
msgid "No instances found" msgid "No instances found"
msgstr "Non hai instancias" msgstr "Non hai instancias"
@ -4690,27 +4720,51 @@ msgstr "Non hai instancias"
msgid "Stop import?" msgid "Stop import?"
msgstr "Deter a importación?" 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" msgid "Completed"
msgstr "Completada" msgstr "Completada"
#: bookwyrm/templates/settings/imports/imports.html:37 #: bookwyrm/templates/settings/imports/imports.html:85
msgid "User" msgid "User"
msgstr "Usuaria" msgstr "Usuaria"
#: bookwyrm/templates/settings/imports/imports.html:46 #: bookwyrm/templates/settings/imports/imports.html:94
msgid "Date Updated" msgid "Date Updated"
msgstr "Data de actualización" msgstr "Data de actualización"
#: bookwyrm/templates/settings/imports/imports.html:53 #: bookwyrm/templates/settings/imports/imports.html:101
msgid "Pending items" msgid "Pending items"
msgstr "Elementos pendentes" msgstr "Elementos pendentes"
#: bookwyrm/templates/settings/imports/imports.html:56 #: bookwyrm/templates/settings/imports/imports.html:104
msgid "Successful items" msgid "Successful items"
msgstr "Elementos correctos" msgstr "Elementos correctos"
#: bookwyrm/templates/settings/imports/imports.html:91 #: bookwyrm/templates/settings/imports/imports.html:139
msgid "No matching imports found." msgid "No matching imports found."
msgstr "Non se atopan importacións que concorden." msgstr "Non se atopan importacións que concorden."
@ -4907,7 +4961,7 @@ msgid "Site Settings"
msgstr "Axustes da web" msgstr "Axustes da web"
#: bookwyrm/templates/settings/layout.html:106 #: 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:4
#: bookwyrm/templates/settings/themes.html:6 #: bookwyrm/templates/settings/themes.html:6
msgid "Themes" msgid "Themes"
@ -5048,12 +5102,12 @@ msgid "Instance Info"
msgstr "Info da instancia" msgstr "Info da instancia"
#: bookwyrm/templates/settings/site.html:12 #: bookwyrm/templates/settings/site.html:12
#: bookwyrm/templates/settings/site.html:110 #: bookwyrm/templates/settings/site.html:123
msgid "Footer Content" msgid "Footer Content"
msgstr "Contido web do pé" msgstr "Contido web do pé"
#: bookwyrm/templates/settings/site.html:13 #: bookwyrm/templates/settings/site.html:13
#: bookwyrm/templates/settings/site.html:134 #: bookwyrm/templates/settings/site.html:147
msgid "Registration" msgid "Registration"
msgstr "Rexistro" msgstr "Rexistro"
@ -5093,71 +5147,79 @@ msgstr "Código de conduta:"
msgid "Privacy Policy:" msgid "Privacy Policy:"
msgstr "Política de privacidade:" 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" msgid "Images"
msgstr "Imaxes" msgstr "Imaxes"
#: bookwyrm/templates/settings/site.html:82 #: bookwyrm/templates/settings/site.html:95
msgid "Logo:" msgid "Logo:"
msgstr "Logo:" msgstr "Logo:"
#: bookwyrm/templates/settings/site.html:86 #: bookwyrm/templates/settings/site.html:99
msgid "Logo small:" msgid "Logo small:"
msgstr "Logo pequeno:" msgstr "Logo pequeno:"
#: bookwyrm/templates/settings/site.html:90 #: bookwyrm/templates/settings/site.html:103
msgid "Favicon:" msgid "Favicon:"
msgstr "Favicon:" msgstr "Favicon:"
#: bookwyrm/templates/settings/site.html:98 #: bookwyrm/templates/settings/site.html:111
msgid "Default theme:" msgid "Default theme:"
msgstr "Decorado por defecto:" msgstr "Decorado por defecto:"
#: bookwyrm/templates/settings/site.html:113 #: bookwyrm/templates/settings/site.html:126
msgid "Support link:" msgid "Support link:"
msgstr "Ligazón de axuda:" msgstr "Ligazón de axuda:"
#: bookwyrm/templates/settings/site.html:117 #: bookwyrm/templates/settings/site.html:130
msgid "Support title:" msgid "Support title:"
msgstr "Título de axuda:" msgstr "Título de axuda:"
#: bookwyrm/templates/settings/site.html:121 #: bookwyrm/templates/settings/site.html:134
msgid "Admin email:" msgid "Admin email:"
msgstr "Email de Admin:" msgstr "Email de Admin:"
#: bookwyrm/templates/settings/site.html:125 #: bookwyrm/templates/settings/site.html:138
msgid "Additional info:" msgid "Additional info:"
msgstr "Info adicional:" msgstr "Info adicional:"
#: bookwyrm/templates/settings/site.html:139 #: bookwyrm/templates/settings/site.html:152
msgid "Allow registration" msgid "Allow registration"
msgstr "Abrir rexistro" msgstr "Abrir rexistro"
#: bookwyrm/templates/settings/site.html:145 #: bookwyrm/templates/settings/site.html:158
msgid "Require users to confirm email address" msgid "Require users to confirm email address"
msgstr "Requerir que a usuaria confirme o enderezo de email" 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)" msgid "(Recommended if registration is open)"
msgstr "(Recomendable se o rexistro está aberto)" msgstr "(Recomendable se o rexistro está aberto)"
#: bookwyrm/templates/settings/site.html:152 #: bookwyrm/templates/settings/site.html:165
msgid "Allow invite requests" msgid "Allow invite requests"
msgstr "Permitir solicitudes de convite" msgstr "Permitir solicitudes de convite"
#: bookwyrm/templates/settings/site.html:158 #: bookwyrm/templates/settings/site.html:171
msgid "Set a question for invite requests" msgid "Set a question for invite requests"
msgstr "Escribe a pregunta para as solicitudes de convite" msgstr "Escribe a pregunta para as solicitudes de convite"
#: bookwyrm/templates/settings/site.html:163 #: bookwyrm/templates/settings/site.html:176
msgid "Question:" msgid "Question:"
msgstr "Pregunta:" msgstr "Pregunta:"
#: bookwyrm/templates/settings/site.html:168 #: bookwyrm/templates/settings/site.html:181
msgid "Registration closed text:" msgid "Registration closed text:"
msgstr "Texto se o rexistro está pechado:" msgstr "Texto se o rexistro está pechado:"
#: bookwyrm/templates/settings/site.html:172 #: bookwyrm/templates/settings/site.html:185
msgid "Invite request text:" msgid "Invite request text:"
msgstr "Texto para a solicitude do convite:" msgstr "Texto para a solicitude do convite:"
@ -5712,6 +5774,19 @@ msgstr "Non seguir"
msgid "Accept" msgid "Accept"
msgstr "Aceptar" 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/form_rate_stars.html:20
#: bookwyrm/templates/snippets/stars.html:13 #: bookwyrm/templates/snippets/stars.html:13
msgid "No rating" 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/shelf_selector.html:54
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21
msgid "Stopped reading" msgid "Stopped reading"
msgstr "Deixei de ler" msgstr "Abandonados"
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format #, python-format
@ -6199,11 +6274,11 @@ msgstr "Obxectivo de Lectura para %(current_year)s"
msgid "User Activity" msgid "User Activity"
msgstr "Actividade da usuaria" msgstr "Actividade da usuaria"
#: bookwyrm/templates/user/user.html:70 #: bookwyrm/templates/user/user.html:71
msgid "RSS feed" msgid "RSS feed"
msgstr "Fonte RSS" msgstr "Fonte RSS"
#: bookwyrm/templates/user/user.html:81 #: bookwyrm/templates/user/user.html:83
msgid "No activities yet!" msgid "No activities yet!"
msgstr "Sen actividade!" msgstr "Sen actividade!"
@ -6252,10 +6327,6 @@ msgstr "O ficheiro supera o tamaño máximo: 10MB"
msgid "%(title)s: %(subtitle)s" msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/imports/import_data.py:86
msgid "Not a valid csv file"
msgstr "Non é un ficheiro csv válido"
#: bookwyrm/views/rss_feed.py:34 #: bookwyrm/views/rss_feed.py:34
#, python-brace-format #, python-brace-format
msgid "Status updates from {obj.display_name}" 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