Merge branch 'main' into openlibrary-author-fields

This commit is contained in:
Mouse Reeve 2022-02-16 18:06:04 -08:00
commit 39691bed3a
90 changed files with 1841 additions and 2557 deletions

View file

@ -89,3 +89,19 @@ PREVIEW_TEXT_COLOR=#363636
PREVIEW_IMG_WIDTH=1200
PREVIEW_IMG_HEIGHT=630
PREVIEW_DEFAULT_COVER_COLOR=#002549
# Below are example keys if you want to enable automatically
# sending telemetry to an OTLP-compatible service. Many of
# the main monitoring apps have OLTP collectors, including
# NewRelic, DataDog, and Honeycomb.io - consult their
# documentation for setup instructions, and what exactly to
# put below!
#
# Service name is an arbitrary tag that is attached to any
# data sent, used to distinguish different sources. Useful
# for sending prod and dev metrics to the same place and
# keeping them separate, for instance!
OTEL_EXPORTER_OTLP_ENDPOINT= # API endpoint for your provider
OTEL_EXPORTER_OTLP_HEADERS= # Any headers required, usually authentication info
OTEL_SERVICE_NAME= # Service name to identify your app

View file

@ -1,5 +1,5 @@
# @url https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
name: Lint Frontend
name: Lint Frontend (run `./bw-dev stylelint` to fix css errors)
on:
push:
@ -8,7 +8,7 @@ on:
- '.github/workflows/**'
- 'static/**'
- '.eslintrc'
- '.stylelintrc'
- '.stylelintrc.js'
pull_request:
branches: [ main, ci, frontend ]
@ -22,17 +22,16 @@ jobs:
- uses: actions/checkout@v2
- name: Install modules
run: yarn
run: npm install stylelint stylelint-config-recommended stylelint-config-standard stylelint-order eslint
# See .stylelintignore for files that are not linted.
- name: Run stylelint
run: >
yarn stylelint bookwyrm/static/**/*.css \
--report-needless-disables \
--report-invalid-scope-disables
npx stylelint bookwyrm/static/css/*.css \
--config dev-tools/.stylelintrc.js
# See .eslintignore for files that are not linted.
- name: Run ESLint
run: >
yarn eslint bookwyrm/static \
npx eslint bookwyrm/static \
--ext .js,.jsx,.ts,.tsx

View file

@ -17,8 +17,7 @@ jobs:
- uses: actions/checkout@v2
- name: Install modules
run: npm install .
run: npm install prettier
# See .stylelintignore for files that are not linted.
- name: Run Prettier
run: npx prettier --check bookwyrm/static/js/*.js

4
.gitignore vendored
View file

@ -24,7 +24,9 @@
.idea
#Node tools
/node_modules/
node_modules/
package-lock.json
yarn.lock
#nginx
nginx/default.conf

View file

@ -227,7 +227,7 @@ def set_related_field(
model_field = getattr(model, related_field_name)
if hasattr(model_field, "activitypub_field"):
setattr(activity, getattr(model_field, "activitypub_field"), instance.remote_id)
item = activity.to_model()
item = activity.to_model(model=model)
# if the related field isn't serialized (attachments on Status), then
# we have to set it post-creation
@ -298,6 +298,7 @@ class Link(ActivityObject):
mediaType: str = None
id: str = None
attributedTo: str = None
availability: str = None
type: str = "Link"
def serialize(self, **kwargs):

54
bookwyrm/apps.py Normal file
View file

@ -0,0 +1,54 @@
"""Do further startup configuration and initialization"""
import os
import urllib
import logging
from django.apps import AppConfig
from bookwyrm import settings
logger = logging.getLogger(__name__)
def download_file(url, destination):
"""Downloads a file to the given path"""
try:
# Ensure our destination directory exists
os.makedirs(os.path.dirname(destination))
with urllib.request.urlopen(url) as stream:
with open(destination, "b+w") as outfile:
outfile.write(stream.read())
except (urllib.error.HTTPError, urllib.error.URLError):
logger.error("Failed to download file %s", url)
except OSError:
logger.error("Couldn't open font file %s for writing", destination)
except: # pylint: disable=bare-except
logger.exception("Unknown error in file download")
class BookwyrmConfig(AppConfig):
"""Handles additional configuration"""
name = "bookwyrm"
verbose_name = "BookWyrm"
# pylint: disable=no-self-use
def ready(self):
"""set up OTLP and preview image files, if desired"""
if settings.OTEL_EXPORTER_OTLP_ENDPOINT:
# pylint: disable=import-outside-toplevel
from bookwyrm.telemetry import open_telemetry
open_telemetry.instrumentDjango()
if settings.ENABLE_PREVIEW_IMAGES and settings.FONTS:
# Download any fonts that we don't have yet
logger.debug("Downloading fonts..")
for name, config in settings.FONTS.items():
font_path = os.path.join(
settings.FONT_DIR, config["directory"], config["filename"]
)
if "url" in config and not os.path.exists(font_path):
logger.info("Just a sec, downloading %s", name)
download_file(config["url"], font_path)

View file

@ -1,7 +1,11 @@
""" functionality outline for a book data connector """
from abc import ABC, abstractmethod
import imghdr
import ipaddress
import logging
from urllib.parse import urlparse
from django.core.files.base import ContentFile
from django.db import transaction
import requests
from requests.exceptions import RequestException
@ -248,6 +252,8 @@ def dict_from_mappings(data, mappings):
def get_data(url, params=None, timeout=10):
"""wrapper for request.get"""
# check if the url is blocked
raise_not_valid_url(url)
if models.FederatedServer.is_blocked(url):
raise ConnectorException(f"Attempting to load data from blocked url: {url}")
@ -280,6 +286,7 @@ def get_data(url, params=None, timeout=10):
def get_image(url, timeout=10):
"""wrapper for requesting an image"""
raise_not_valid_url(url)
try:
resp = requests.get(
url,
@ -290,10 +297,32 @@ def get_image(url, timeout=10):
)
except RequestException as err:
logger.exception(err)
return None
return None, None
if not resp.ok:
return None
return resp
return None, None
image_content = ContentFile(resp.content)
extension = imghdr.what(None, image_content.read())
if not extension:
logger.exception("File requested was not an image: %s", url)
return None, None
return image_content, extension
def raise_not_valid_url(url):
"""do some basic reality checks on the url"""
parsed = urlparse(url)
if not parsed.scheme in ["http", "https"]:
raise ConnectorException("Invalid scheme: ", url)
try:
ipaddress.ip_address(parsed.netloc)
raise ConnectorException("Provided url is an IP address: ", url)
except ValueError:
# it's not an IP address, which is good
pass
class Mapping:

View file

@ -1,6 +1,7 @@
""" using django model forms """
import datetime
from collections import defaultdict
from urllib.parse import urlparse
from django import forms
from django.forms import ModelForm, PasswordInput, widgets, ChoiceField
@ -227,6 +228,34 @@ class FileLinkForm(CustomForm):
model = models.FileLink
fields = ["url", "filetype", "availability", "book", "added_by"]
def clean(self):
"""make sure the domain isn't blocked or pending"""
cleaned_data = super().clean()
url = cleaned_data.get("url")
filetype = cleaned_data.get("filetype")
book = cleaned_data.get("book")
domain = urlparse(url).netloc
if models.LinkDomain.objects.filter(domain=domain).exists():
status = models.LinkDomain.objects.get(domain=domain).status
if status == "blocked":
# pylint: disable=line-too-long
self.add_error(
"url",
_(
"This domain is blocked. Please contact your administrator if you think this is an error."
),
)
elif models.FileLink.objects.filter(
url=url, book=book, filetype=filetype
).exists():
# pylint: disable=line-too-long
self.add_error(
"url",
_(
"This link with file type has already been added for this book. If it is not visible, the domain is still pending."
),
)
class EditionForm(CustomForm):
class Meta:

View file

@ -7,6 +7,7 @@ from bookwyrm import settings
r = redis.Redis(
host=settings.REDIS_ACTIVITY_HOST,
port=settings.REDIS_ACTIVITY_PORT,
password=settings.REDIS_ACTIVITY_PASSWORD,
db=settings.REDIS_ACTIVITY_DB_INDEX,
)

View file

@ -0,0 +1,37 @@
# Generated by Django 3.2.10 on 2022-02-02 20:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0131_merge_20220125_1644"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("gl-es", "Galego (Galician)"),
("it-it", "Italiano (Italian)"),
("fr-fr", "Français (French)"),
("lt-lt", "Lietuvių (Lithuanian)"),
("no-no", "Norsk (Norwegian)"),
("pt-br", "Português do Brasil (Brazilian Portuguese)"),
("pt-pt", "Português Europeu (European Portuguese)"),
("sv-se", "Svenska (Swedish)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -0,0 +1,21 @@
# Generated by Django 3.2.11 on 2022-02-04 20:06
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0132_alter_user_preferred_language"),
]
operations = [
migrations.AlterField(
model_name="listitem",
name="notes",
field=bookwyrm.models.fields.HtmlField(
blank=True, max_length=300, null=True
),
),
]

View file

@ -0,0 +1,29 @@
# Generated by Django 3.2.11 on 2022-02-11 18:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0133_alter_listitem_notes"),
]
operations = [
migrations.AddField(
model_name="announcement",
name="display_type",
field=models.CharField(
choices=[
("white-ter", "None"),
("primary-light", "Primary"),
("success-light", "Success"),
("link-light", "Link"),
("warning-light", "Warning"),
("danger-light", "Danger"),
],
default="white-ter",
max_length=20,
),
),
]

View file

@ -2,10 +2,21 @@
from django.db import models
from django.db.models import Q
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from .base_model import BookWyrmModel
DisplayTypes = [
("white-ter", _("None")),
("primary-light", _("Primary")),
("success-light", _("Success")),
("link-light", _("Link")),
("warning-light", _("Warning")),
("danger-light", _("Danger")),
]
class Announcement(BookWyrmModel):
"""The admin has something to say"""
@ -16,6 +27,13 @@ class Announcement(BookWyrmModel):
start_date = models.DateTimeField(blank=True, null=True)
end_date = models.DateTimeField(blank=True, null=True)
active = models.BooleanField(default=True)
display_type = models.CharField(
max_length=20,
blank=False,
null=False,
choices=DisplayTypes,
default="white-ter",
)
@classmethod
def active_announcements(cls):

View file

@ -1,6 +1,5 @@
""" activitypub-aware django model fields """
from dataclasses import MISSING
import imghdr
import re
from uuid import uuid4
from urllib.parse import urljoin
@ -9,7 +8,6 @@ import dateutil.parser
from dateutil.parser import ParserError
from django.contrib.postgres.fields import ArrayField as DjangoArrayField
from django.core.exceptions import ValidationError
from django.core.files.base import ContentFile
from django.db import models
from django.forms import ClearableFileInput, ImageField as DjangoImageField
from django.utils import timezone
@ -443,12 +441,10 @@ class ImageField(ActivitypubFieldMixin, models.ImageField):
except ValidationError:
return None
response = get_image(url)
if not response:
image_content, extension = get_image(url)
if not image_content:
return None
image_content = ContentFile(response.content)
extension = imghdr.what(None, image_content.read()) or ""
image_name = f"{uuid4()}.{extension}"
return [image_name, image_content]

View file

@ -142,7 +142,7 @@ class ListItem(CollectionItemMixin, BookWyrmModel):
user = fields.ForeignKey(
"User", on_delete=models.PROTECT, activitypub_field="actor"
)
notes = fields.TextField(blank=True, null=True, max_length=300)
notes = fields.HtmlField(blank=True, null=True, max_length=300)
approved = models.BooleanField(default=True)
order = fields.IntegerField()
endorsement = models.ManyToManyField("User", related_name="endorsers")

View file

@ -4,6 +4,7 @@ import os
import textwrap
from io import BytesIO
from uuid import uuid4
import logging
import colorsys
from colorthief import ColorThief
@ -17,34 +18,49 @@ from django.db.models import Avg
from bookwyrm import models, settings
from bookwyrm.tasks import app
logger = logging.getLogger(__name__)
IMG_WIDTH = settings.PREVIEW_IMG_WIDTH
IMG_HEIGHT = settings.PREVIEW_IMG_HEIGHT
BG_COLOR = settings.PREVIEW_BG_COLOR
TEXT_COLOR = settings.PREVIEW_TEXT_COLOR
DEFAULT_COVER_COLOR = settings.PREVIEW_DEFAULT_COVER_COLOR
DEFAULT_FONT = settings.PREVIEW_DEFAULT_FONT
TRANSPARENT_COLOR = (0, 0, 0, 0)
margin = math.floor(IMG_HEIGHT / 10)
gutter = math.floor(margin / 2)
inner_img_height = math.floor(IMG_HEIGHT * 0.8)
inner_img_width = math.floor(inner_img_height * 0.7)
font_dir = os.path.join(settings.STATIC_ROOT, "fonts/public_sans")
def get_font(font_name, size=28):
"""Loads custom font"""
if font_name == "light":
font_path = os.path.join(font_dir, "PublicSans-Light.ttf")
if font_name == "regular":
font_path = os.path.join(font_dir, "PublicSans-Regular.ttf")
elif font_name == "bold":
font_path = os.path.join(font_dir, "PublicSans-Bold.ttf")
def get_imagefont(name, size):
"""Loads an ImageFont based on config"""
try:
config = settings.FONTS[name]
path = os.path.join(settings.FONT_DIR, config["directory"], config["filename"])
return ImageFont.truetype(path, size)
except KeyError:
logger.error("Font %s not found in config", name)
except OSError:
logger.error("Could not load font %s from file", name)
return ImageFont.load_default()
def get_font(weight, size=28):
"""Gets a custom font with the given weight and size"""
font = get_imagefont(DEFAULT_FONT, size)
try:
font = ImageFont.truetype(font_path, size)
except OSError:
font = ImageFont.load_default()
if weight == "light":
font.set_variation_by_name("Light")
if weight == "bold":
font.set_variation_by_name("Bold")
if weight == "regular":
font.set_variation_by_name("Regular")
except AttributeError:
pass
return font

View file

@ -22,6 +22,7 @@ class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method
"ol",
"li",
]
self.allowed_attrs = ["href", "rel", "src", "alt"]
self.tag_stack = []
self.output = []
# if the html appears invalid, we just won't allow any at all
@ -30,7 +31,14 @@ class InputHtmlParser(HTMLParser): # pylint: disable=abstract-method
def handle_starttag(self, tag, attrs):
"""check if the tag is valid"""
if self.allow_html and tag in self.allowed_tags:
self.output.append(("tag", self.get_starttag_text()))
allowed_attrs = " ".join(
f'{a}="{v}"' for a, v in attrs if a in self.allowed_attrs
)
reconstructed = f"<{tag}"
if allowed_attrs:
reconstructed += " " + allowed_attrs
reconstructed += ">"
self.output.append(("tag", reconstructed))
self.tag_stack.append(tag)
else:
self.output.append(("data", ""))

View file

@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
env = Env()
env.read_env()
DOMAIN = env("DOMAIN")
VERSION = "0.2.0"
VERSION = "0.3.0"
PAGE_LENGTH = env("PAGE_LENGTH", 15)
DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English")
@ -35,6 +35,9 @@ LOCALE_PATHS = [
]
LANGUAGE_COOKIE_NAME = env.str("LANGUAGE_COOKIE_NAME", "django_language")
STATIC_ROOT = os.path.join(BASE_DIR, env("STATIC_ROOT", "static"))
MEDIA_ROOT = os.path.join(BASE_DIR, env("MEDIA_ROOT", "images"))
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
# Preview image
@ -44,6 +47,17 @@ PREVIEW_TEXT_COLOR = env.str("PREVIEW_TEXT_COLOR", "#363636")
PREVIEW_IMG_WIDTH = env.int("PREVIEW_IMG_WIDTH", 1200)
PREVIEW_IMG_HEIGHT = env.int("PREVIEW_IMG_HEIGHT", 630)
PREVIEW_DEFAULT_COVER_COLOR = env.str("PREVIEW_DEFAULT_COVER_COLOR", "#002549")
PREVIEW_DEFAULT_FONT = env.str("PREVIEW_DEFAULT_FONT", "Source Han Sans")
FONTS = {
# pylint: disable=line-too-long
"Source Han Sans": {
"directory": "source_han_sans",
"filename": "SourceHanSans-VF.ttf.ttc",
"url": "https://github.com/adobe-fonts/source-han-sans/raw/release/Variable/OTC/SourceHanSans-VF.ttf.ttc",
}
}
FONT_DIR = os.path.join(STATIC_ROOT, "fonts")
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
@ -150,6 +164,9 @@ LOGGING = {
"handlers": ["console", "mail_admins"],
"level": LOG_LEVEL,
},
"django.utils.autoreload": {
"level": "INFO",
},
# Add a bookwyrm-specific logger
"bookwyrm": {
"handlers": ["console"],
@ -255,7 +272,7 @@ LANGUAGES = [
("no-no", _("Norsk (Norwegian)")),
("pt-br", _("Português do Brasil (Brazilian Portuguese)")),
("pt-pt", _("Português Europeu (European Portuguese)")),
("sv-se", _("Swedish (Svenska)")),
("sv-se", _("Svenska (Swedish)")),
("zh-hans", _("简体中文 (Simplified Chinese)")),
("zh-hant", _("繁體中文 (Traditional Chinese)")),
]
@ -311,13 +328,12 @@ if USE_S3:
MEDIA_FULL_URL = MEDIA_URL
STATIC_FULL_URL = STATIC_URL
DEFAULT_FILE_STORAGE = "bookwyrm.storage_backends.ImagesStorage"
# I don't know if it's used, but the site crashes without it
STATIC_ROOT = os.path.join(BASE_DIR, env("STATIC_ROOT", "static"))
MEDIA_ROOT = os.path.join(BASE_DIR, env("MEDIA_ROOT", "images"))
else:
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, env("STATIC_ROOT", "static"))
MEDIA_URL = "/images/"
MEDIA_FULL_URL = f"{PROTOCOL}://{DOMAIN}{MEDIA_URL}"
STATIC_FULL_URL = f"{PROTOCOL}://{DOMAIN}{STATIC_URL}"
MEDIA_ROOT = os.path.join(BASE_DIR, env("MEDIA_ROOT", "images"))
OTEL_EXPORTER_OTLP_ENDPOINT = env("OTEL_EXPORTER_OTLP_ENDPOINT", None)
OTEL_EXPORTER_OTLP_HEADERS = env("OTEL_EXPORTER_OTLP_HEADERS", None)
OTEL_SERVICE_NAME = env("OTEL_SERVICE_NAME", None)

View file

@ -319,7 +319,7 @@ details.details-panel summary {
position: relative;
}
details.details-panel summary .details-close {
details summary .details-close {
position: absolute;
right: 0;
top: 0;
@ -327,7 +327,7 @@ details.details-panel summary .details-close {
transition: transform 0.2s ease;
}
details[open].details-panel summary .details-close {
details[open] summary .details-close {
transform: rotate(0deg);
}
@ -496,7 +496,7 @@ details[open].details-panel summary .details-close {
max-height: 100%;
/* Useful when stretching under-sized images. */
image-rendering: optimizeQuality;
image-rendering: optimizequality;
image-rendering: smooth;
}

View file

@ -0,0 +1,96 @@
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font
Name 'Source'. Source is a trademark of Adobe in the United States
and/or other countries.
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View file

@ -0,0 +1,9 @@
The font file itself is not included in the Git repository to avoid putting
large files in the repo history. The Docker image should download the correct
font into this folder automatically.
In case something goes wrong, the font used is the Variable OTC TTF, available
as of this writing from the Adobe Fonts GitHub repository:
https://github.com/adobe-fonts/source-han-sans/tree/release#user-content-variable-otcs
BookWyrm expects the file to be in this folder, named SourceHanSans-VF.ttf.ttc

View file

@ -0,0 +1,22 @@
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
def instrumentDjango():
from opentelemetry.instrumentation.django import DjangoInstrumentor
DjangoInstrumentor().instrument()
def instrumentCelery():
from opentelemetry.instrumentation.celery import CeleryInstrumentor
from celery.signals import worker_process_init
@worker_process_init.connect(weak=False)
def init_celery_tracing(*args, **kwargs):
CeleryInstrumentor().instrument()

View file

@ -28,7 +28,7 @@
<div class="columns">
{% if superlatives.top_rated %}
{% with book=superlatives.top_rated.default_edition rating=top_rated.rating %}
{% with book=superlatives.top_rated.default_edition rating=superlatives.top_rated.rating %}
<div class="column is-one-third is-flex">
<div class="media notification">
<div class="media-left">

View file

@ -356,10 +356,11 @@
<form name="list-add" method="post" action="{% url 'list-add-book' %}">
{% csrf_token %}
<input type="hidden" name="book" value="{{ book.id }}">
<input type="hidden" name="user" value="{{ request.user.id }}">
<label class="label" for="id_list">{% trans "Add to list" %}</label>
<div class="field has-addons">
<div class="select control is-clipped">
<select name="list" id="id_list">
<select name="book_list" id="id_list">
{% for list in user.list_set.all %}
<option value="{{ list.id }}">{{ list.name }}</option>
{% endfor %}

View file

@ -56,9 +56,7 @@
{% block modal-footer %}
<button class="button is-primary" type="submit">{% trans "Save" %}</button>
{% if not static %}
<button type="button" class="button" data-modal-close>{% trans "Cancel" %}</button>
{% endif %}
<button type="button" class="button" data-modal-close>{% trans "Cancel" %}</button>
{% endblock %}
{% block modal-form-close %}</form>{% endblock %}

View file

@ -6,24 +6,24 @@
{% block content %}
<header class="block content">
<header class="block">
<h1 class="title">
{% blocktrans with title=book|book_title %}
Links for "<em>{{ title }}</em>"
{% endblocktrans %}
</h1>
</header>
<nav class="breadcrumb subtitle" aria-label="breadcrumbs">
<ul>
<li><a href="{% url 'book' book.id %}">{{ book|book_title }}</a></li>
<li class="is-active">
<a href="#" aria-current="page">
{% trans "Edit links" %}
</a>
</li>
</ul>
</nav>
<nav class="breadcrumb subtitle" aria-label="breadcrumbs">
<ul>
<li><a href="{% url 'book' book.id %}">{{ book|book_title }}</a></li>
<li class="is-active">
<a href="#" aria-current="page">
{% trans "Edit links" %}
</a>
</li>
</ul>
</nav>
</header>
<section class="block content">
<div class="table-container">

View file

@ -47,7 +47,7 @@
<span class="icon icon-spinner is-pulled-left" aria-hidden="true"></span>
<span>{% trans "In progress" %}</span>
<span class="is-pulled-right">
<a href="#" class="button is-small">{% trans "Refresh" %}</a>
<a href="{% url 'import-status' job.id %}" class="button is-small">{% trans "Refresh" %}</a>
</span>
</div>
<div class="is-flex">
@ -230,7 +230,7 @@
{% if not legacy %}
<div>
{% include 'snippets/pagination.html' with page=items %}
{% include 'snippets/pagination.html' with page=items path=page_path %}
</div>
{% endif %}
{% endspaceless %}{% endblock %}

View file

@ -52,7 +52,7 @@
<div class="columns is-mobile">
<div class="column is-narrow is-cover">
<a href="{{ item.book.local_path }}" aria-hidden="true">
{% include 'snippets/book_cover.html' with cover_class='is-w-auto is-h-m-tablet is-align-items-flex-start' size='medium' %}
{% include 'snippets/book_cover.html' with cover_class='is-w-auto is-h-m-mobile is-h-m-tablet is-align-items-flex-start' size='medium' %}
</a>
</div>
@ -79,14 +79,12 @@
<div class="media-content">
<div class="content">
<header>
{% url 'user-feed' user|username as user_path %}
{% blocktrans trimmed with username=user.display_name %}
{% url 'user-feed' item.user|username as user_path %}
{% blocktrans trimmed with username=item.user.display_name %}
<a href="{{ user_path }}">{{ username }}</a> says:
{% endblocktrans %}
</header>
<p>
{{ item.notes|to_markdown|safe }}
</p>
{{ item.notes|to_markdown|safe }}
</div>
{% if item.user == request.user %}
<div>
@ -97,7 +95,7 @@
<span class="details-close icon icon-pencil" aria-hidden></span>
</span>
</summary>
{% include "lists/edit_item_form.html" %}
{% include "lists/edit_item_form.html" with book=item.book %}
</details>
</div>
{% endif %}
@ -112,7 +110,7 @@
<span class="details-close icon icon-plus" aria-hidden></span>
</span>
</summary>
{% include "lists/edit_item_form.html" %}
{% include "lists/edit_item_form.html" with book=item.book %}
</details>
</div>
{% endif %}

View file

@ -70,9 +70,7 @@
{% block modal-footer %}
<button class="button is-primary" type="submit">{% trans "Save" %}</button>
{% if not static %}
<button type="button" class="button" data-modal-close>{% trans "Cancel" %}</button>
{% endif %}
{% endblock %}
{% block modal-form-close %}

View file

@ -1,17 +1,20 @@
{% extends 'settings/layout.html' %}
{% load i18n %}{% load humanize %}
{% load i18n %}
{% load humanize %}
{% block title %}{% trans "Announcement" %} - {{ announcement.preview }}{% endblock %}
{% block header %}
{% trans "Announcement" %}
<a href="{% url 'settings-announcements' %}" class="has-text-weight-normal help">{% trans "Back to list" %}</a>
{% endblock %}
{% block edit-button %}
{% trans "Edit Announcement" as button_text %}
<div class="field has-addons">
<div class="control">
{% include 'snippets/toggle/open_button.html' with controls_text="edit_announcement" icon_with_text="pencil" text=button_text focus="edit_announcement_header" %}
<a class="button" href="{% url 'settings-announcements-edit' announcement.id %}">
<span class="icon icon-pencil m-0-mobile" aria-hidden="true"></span>
<span class="is-sr-only-mobile">{% trans "Edit" %}</span>
</a>
</div>
<form class="control" action="{% url 'settings-announcements-delete' announcement.id %}" method="post">
{% csrf_token %}
@ -23,12 +26,20 @@
</div>
{% endblock %}
{% block breadcrumbs %}
<nav class="breadcrumb subtitle" aria-label="breadcrumbs">
<ul>
<li><a href="{% url 'settings-announcements' %}">{% trans "Announcements" %}</a></li>
<li class="is-active">
<a href="#" aria-current="page">
{{ announcement.preview|truncatechars:30 }}
</a>
</li>
</ul>
</nav>
{% endblock %}
{% block panel %}
<form name="edit-announcement" method="post" action="{% url 'settings-announcements' announcement.id %}" class="block">
{% include 'settings/announcements/announcement_form.html' with controls_text="edit_announcement" %}
</form>
<div class="block content">
<dl>
<dt class="is-pulled-left mr-5 has-text-weight-bold">{% trans "Visible:" %}</dt>

View file

@ -1,80 +0,0 @@
{% extends 'components/inline_form.html' %}
{% load i18n %}
{% block header %}
{% if announcement %}
{% trans "Edit Announcement" %}
{% else %}
{% trans "Create Announcement" %}
{% endif %}
{% endblock %}
{% block form %}
{% csrf_token %}
<input type="hidden" name="user" value="{{ request.user.id }}">
<p>
<label class="label" for="id_preview">
{% trans "Preview:" %}
</label>
{{ form.preview }}
{% include 'snippets/form_errors.html' with errors_list=form.preview.errors id="desc_preview" %}
</p>
<p>
<label class="label" for="id_content">
{% trans "Content:" %}
</label>
{{ form.content }}
{% include 'snippets/form_errors.html' with errors_list=form.content.errors id="desc_content" %}
</p>
<p>
<label class="label" for="id_event_date">
{% trans "Event date:" %}
</label>
<input type="date" name="event_date" value="{{ form.event_date.value|date:'Y-m-d' }}" class="input" id="id_event_date">
{% include 'snippets/form_errors.html' with errors_list=form.event_date.errors id="desc_event_date" %}
</p>
<hr aria-hidden="true">
<div class="columns">
<div class="column">
<p>
<label class="label" for="id_start_date">
{% trans "Start date:" %}
</label>
<input type="date" name="start_date" class="input" value="{{ form.start_date.value|date:'Y-m-d' }}" id="id_start_date">
{% include 'snippets/form_errors.html' with errors_list=form.start_date.errors id="desc_start_date" %}
</p>
</div>
<div class="column">
<p>
<label class="label" for="id_end_date">
{% trans "End date:" %}
</label>
<input type="date" name="end_date" class="input" id="id_end_date" value="{{ form.end_date.value|date:'Y-m-d' }}">
{% include 'snippets/form_errors.html' with errors_list=form.end_date.errors id="desc_end_date" %}
</p>
</div>
<div class="column is-narrow">
<p>
<label class="label" for="id_active">
{% trans "Active:" %}
</label>
{{ form.active }}
{% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_active" %}
</p>
</div>
</div>
<div class="field has-addons">
<div class="control">
<button type="submit" class="button is-primary">
{% trans "Save" %}
</button>
</div>
</div>
{% endblock %}

View file

@ -5,16 +5,15 @@
{% block header %}{% trans "Announcements" %}{% endblock %}
{% block edit-button %}
{% trans "Create Announcement" as button_text %}
{% include 'snippets/toggle/open_button.html' with controls_text="create_announcement" icon_with_text="plus" text=button_text focus="create_announcement_header" %}
<a href="{% url 'settings-announcements-edit' %}">
{% trans "Create Announcement" as text %}
<span class="icon icon-plus" title="{{ text }}" aria-hidden="true"></span>
<span class="is-sr-only-mobile">{{ text }}</span>
</a>
{% endblock %}
{% block panel %}
<form name="create-announcement" method="post" action="{% url 'settings-announcements' %}" class="block">
{% include 'settings/announcements/announcement_form.html' with controls_text="create_announcement" %}
</form>
<div class="block">
<div class="block table-container">
<table class="table is-striped">
<tr>
<th>
@ -38,6 +37,9 @@
{% trans "Status" as text %}
{% include 'snippets/table-sort-header.html' with field="active" sort=sort text=text %}
</th>
<th>
{% trans "Actions" %}
</th>
</tr>
{% for announcement in announcements %}
<tr>
@ -46,6 +48,15 @@
<td>{{ announcement.start_date|naturaltime|default:'' }}</td>
<td>{{ announcement.end_date|naturaltime|default:'' }}</td>
<td>{% if announcement.active %}{% trans "active" %}{% else %}{% trans "inactive" %}{% endif %}</td>
<td>
<form class="control" action="{% url 'settings-announcements-delete' announcement.id %}" method="post">
{% csrf_token %}
<button type="submit" class="button is-danger is-light is-small">
<span class="icon icon-x m-0-mobile" aria-hidden="true"></span>
<span class="is-sr-only-mobile">{% trans "Delete" %}</span>
</button>
</form>
</td>
</tr>
{% endfor %}
{% if not announcements %}

View file

@ -0,0 +1,125 @@
{% extends 'settings/layout.html' %}
{% load i18n %}
{% block header %}
{% if announcement %}
{% trans "Edit Announcement" %}
{% else %}
{% trans "Create Announcement" %}
{% endif %}
{% endblock %}
{% block breadcrumbs %}
<nav class="breadcrumb subtitle" aria-label="breadcrumbs">
<ul>
<li><a href="{% url 'settings-announcements' %}">{% trans "Announcements" %}</a></li>
{% if announcement %}
<li>
<a href="{% url 'settings-announcements' announcement.id %}">
{{ announcement.preview|truncatechars:30 }}
</a>
</li>
{% endif %}
<li class="is-active">
<a href="#" aria-current="page">
Edit
</a>
</li>
</ul>
</nav>
{% endblock %}
{% block panel %}
<form
name="edit-announcement"
method="POST"
{% if announcement.id %}
action="{% url 'settings-announcements-edit' announcement.id %}"
{% else %}
action="{% url 'settings-announcements-edit' %}"
{% endif %}
class="block"
>
{% csrf_token %}
<input type="hidden" name="user" value="{{ request.user.id }}">
<h2 class="title is-4">{% trans "Announcement content" %}</h2>
<div class="box">
<p class="field">
<label class="label" for="id_preview">
{% trans "Summary:" %}
</label>
{{ form.preview }}
{% include 'snippets/form_errors.html' with errors_list=form.preview.errors id="desc_preview" %}
</p>
<p class="field">
<label class="label" for="id_content">
{% trans "Details:" %}
</label>
{{ form.content }}
{% include 'snippets/form_errors.html' with errors_list=form.content.errors id="desc_content" %}
</p>
<p class="field">
<label class="label" for="id_event_date">
{% trans "Event date:" %}
</label>
<input type="date" name="event_date" value="{{ form.event_date.value|date:'Y-m-d' }}" class="input" id="id_event_date">
{% include 'snippets/form_errors.html' with errors_list=form.event_date.errors id="desc_event_date" %}
</p>
</div>
<h2 class="title is-4">{% trans "Display settings" %}</h2>
<div class="box">
<div class="columns">
<div class="column">
<p>
<label class="label" for="id_start_date">
{% trans "Start date:" %}
</label>
<input type="date" name="start_date" class="input" value="{{ form.start_date.value|date:'Y-m-d' }}" id="id_start_date">
{% include 'snippets/form_errors.html' with errors_list=form.start_date.errors id="desc_start_date" %}
</p>
</div>
<div class="column">
<p>
<label class="label" for="id_end_date">
{% trans "End date:" %}
</label>
<input type="date" name="end_date" class="input" id="id_end_date" value="{{ form.end_date.value|date:'Y-m-d' }}">
{% include 'snippets/form_errors.html' with errors_list=form.end_date.errors id="desc_end_date" %}
</p>
</div>
<div class="column is-narrow">
<label class="label" for="id_active">
{% trans "Color:" %}
</label>
<div class="select">
{{ form.display_type }}
</div>
{% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_display_type" %}
</div>
</div>
<p class="field">
<label class="label" for="id_active">
{% trans "Active:" %}
{{ form.active }}
</label>
{% include 'snippets/form_errors.html' with errors_list=form.active.errors id="desc_active" %}
</p>
</div>
<div class="field has-addons">
<div class="control">
<button type="submit" class="button is-primary">
{% trans "Save" %}
</button>
</div>
</div>
</form>
{% endblock %}

View file

@ -9,6 +9,7 @@
<div class="columns is-mobile">
<div class="column">
<h1 class="title">{% block header %}{% endblock %}</h1>
{% block breadcrumbs %}{% endblock %}
</div>
<div class="column is-narrow">
{% block edit-button %}{% endblock %}
@ -16,6 +17,7 @@
</div>
</header>
<div class="block columns">
<nav class="menu column is-one-quarter">
<h2 class="menu-label">

View file

@ -45,7 +45,7 @@
href="{{ shelf_tab.local_path }}"
{% if shelf_tab.identifier == shelf.identifier %} aria-current="page"{% endif %}
>
{% include 'user/books_header.html' with shelf=shelf_tab %}
{% include "snippets/translated_shelf_name.html" with shelf=shelf_tab %}
</a>
</li>
{% endfor %}

View file

@ -1,32 +1,29 @@
{% load humanize %}{% load i18n %}{% load utilities %}
{% with announcement.id|uuid as uuid %}
<aside
class="notification mb-1 p-3{% if not admin_mode %} is-hidden{% endif %} transition-y"
class="notification mb-1 p-3{% if not admin_mode %} is-hidden{% endif %} transition-y has-background-{{ announcement.display_type }}"
{% if not admin_mode %}data-hide="hide_announcement_{{ announcement.id }}"{% endif %}
>
<div class="columns mb-0 is-mobile">
<div class="column pb-0">
<details>
<summary>
{% if announcement.event_date %}
<strong>{{ announcement.event_date|naturalday|title }}:</strong>
{% endif %}
{{ announcement.preview }}
</div>
{{ announcement.preview|safe }}
{% if announcement.content %}
<span class="details-close mt-4 mr-4 icon icon-x is-small" aria-hidden></span>
{% endif %}
</summary>
{% if announcement.content %}
<div class="column is-narrow pb-0">
{% trans "Open" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-down" %}
{% trans "Close" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-up" %}
<div class="mb-2 mt-2" id="announcement_{{ uuid }}">
<div class="box is-shadowless mb-0">
{{ announcement.content|safe }}
</div>
</div>
{% endif %}
</div>
{% if announcement.content %}
<div class="mb-2 mt-2 {% if not pressed %}is-hidden{% endif %}" id="announcement_{{ uuid }}">
<div class="box is-shadowless mb-0">
{{ announcement.content|safe }}
</div>
</div>
{% endif %}
</details>
<div class="is-flex mt-0 help">
<p>{% blocktrans with user_path=announcement.user.local_path username=announcement.user.display_name %}Posted by <a href="{{ user_path }}">{{ username }}</a>{% endblocktrans %}</p>
{% if not admin_mode %}

View file

@ -50,9 +50,7 @@
{% block modal-footer %}
<button class="button is-success" type="submit">{% trans "Submit" %}</button>
{% if not static %}
<button type="button" class="button" data-modal-close>{% trans "Cancel" %}</button>
{% endif %}
<button type="button" class="button" data-modal-close>{% trans "Cancel" %}</button>
{% endblock %}

View file

@ -1,6 +1,9 @@
""" testing activitystreams """
from datetime import datetime
from unittest.mock import patch
from django.test import TestCase
from django.utils import timezone
from bookwyrm import activitystreams, models
@ -51,13 +54,63 @@ class Activitystreams(TestCase):
"""the abstract base class for stream objects"""
self.assertEqual(
self.test_stream.stream_id(self.local_user),
"{}-test".format(self.local_user.id),
f"{self.local_user.id}-test",
)
self.assertEqual(
self.test_stream.unread_id(self.local_user),
"{}-test-unread".format(self.local_user.id),
f"{self.local_user.id}-test-unread",
)
def test_unread_by_status_type_id(self, *_):
"""stream for status type"""
self.assertEqual(
self.test_stream.unread_by_status_type_id(self.local_user),
f"{self.local_user.id}-test-unread-by-type",
)
def test_get_rank(self, *_):
"""sort order"""
date = datetime(2022, 1, 28, 0, 0, tzinfo=timezone.utc)
status = models.Status.objects.create(
user=self.remote_user,
content="hi",
privacy="direct",
published_date=date,
)
self.assertEqual(
str(self.test_stream.get_rank(status)),
"1643328000.0",
)
def test_get_activity_stream(self, *_):
"""load statuses"""
status = models.Status.objects.create(
user=self.remote_user,
content="hi",
privacy="direct",
)
status2 = models.Comment.objects.create(
user=self.remote_user,
content="hi",
privacy="direct",
book=self.book,
)
models.Comment.objects.create(
user=self.remote_user,
content="hi",
privacy="direct",
book=self.book,
)
with patch("bookwyrm.activitystreams.r.set"), patch(
"bookwyrm.activitystreams.r.delete"
), patch("bookwyrm.activitystreams.ActivityStream.get_store") as redis_mock:
redis_mock.return_value = [status.id, status2.id]
result = self.test_stream.get_activity_stream(self.local_user)
self.assertEqual(result.count(), 2)
self.assertEqual(result.first(), status2)
self.assertEqual(result.last(), status)
self.assertIsInstance(result.first(), models.Comment)
def test_abstractstream_get_audience(self, *_):
"""get a list of users that should see a status"""
status = models.Status.objects.create(

View file

@ -52,3 +52,29 @@ class Activitystreams(TestCase):
# yes book, yes audience
result = activitystreams.BooksStream().get_statuses_for_user(self.local_user)
self.assertEqual(list(result), [status])
def test_book_statuses(self, *_):
"""statuses about a book"""
alt_book = models.Edition.objects.create(
title="hi", parent_work=self.book.parent_work
)
status = models.Status.objects.create(
user=self.local_user, content="hi", privacy="public"
)
status = models.Comment.objects.create(
user=self.remote_user, content="hi", privacy="public", book=alt_book
)
models.ShelfBook.objects.create(
user=self.local_user,
shelf=self.local_user.shelf_set.first(),
book=self.book,
)
with patch(
"bookwyrm.activitystreams.BooksStream.bulk_add_objects_to_store"
) as redis_mock:
activitystreams.BooksStream().add_book_statuses(self.local_user, self.book)
args = redis_mock.call_args[0]
queryset = args[0]
self.assertEqual(queryset.count(), 1)
self.assertTrue(status in queryset)
self.assertEqual(args[1], f"{self.local_user.id}-books")

View file

@ -4,8 +4,8 @@ from django.test import TestCase
import responses
from bookwyrm import models
from bookwyrm.connectors import abstract_connector
from bookwyrm.connectors.abstract_connector import Mapping
from bookwyrm.connectors import abstract_connector, ConnectorException
from bookwyrm.connectors.abstract_connector import Mapping, get_data
from bookwyrm.settings import DOMAIN
@ -163,3 +163,11 @@ class AbstractConnector(TestCase):
author.refresh_from_db()
self.assertEqual(author.name, "Test")
self.assertEqual(author.isni, "hi")
def test_get_data_invalid_url(self):
"""load json data from an arbitrary url"""
with self.assertRaises(ConnectorException):
get_data("file://hello.com/image/jpg")
with self.assertRaises(ConnectorException):
get_data("http://127.0.0.1/image/jpg")

View file

@ -1,7 +1,6 @@
""" testing models """
from dateutil.parser import parse
from imagekit.models import ImageSpecField
from django.test import TestCase
from django.utils import timezone

View file

@ -443,18 +443,17 @@ class ModelFields(TestCase):
image_file = pathlib.Path(__file__).parent.joinpath(
"../../static/images/default_avi.jpg"
)
image = Image.open(image_file)
output = BytesIO()
image.save(output, format=image.format)
instance = fields.ImageField()
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=image.tobytes(),
status=200,
)
with open(image_file, "rb") as image_data:
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=image_data.read(),
status=200,
content_type="image/jpeg",
stream=True,
)
loaded_image = instance.field_from_activity("http://www.example.com/image.jpg")
self.assertIsInstance(loaded_image, list)
self.assertIsInstance(loaded_image[1], ContentFile)
@ -465,18 +464,18 @@ class ModelFields(TestCase):
image_file = pathlib.Path(__file__).parent.joinpath(
"../../static/images/default_avi.jpg"
)
image = Image.open(image_file)
output = BytesIO()
image.save(output, format=image.format)
instance = fields.ImageField(activitypub_field="cover", name="cover")
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=image.tobytes(),
status=200,
)
with open(image_file, "rb") as image_data:
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=image_data.read(),
content_type="image/jpeg",
status=200,
stream=True,
)
book = Edition.objects.create(title="hello")
MockActivity = namedtuple("MockActivity", ("cover"))
@ -491,18 +490,18 @@ class ModelFields(TestCase):
image_file = pathlib.Path(__file__).parent.joinpath(
"../../static/images/default_avi.jpg"
)
image = Image.open(image_file)
output = BytesIO()
image.save(output, format=image.format)
instance = fields.ImageField(activitypub_field="cover", name="cover")
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=image.tobytes(),
status=200,
)
with open(image_file, "rb") as image_data:
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=image_data.read(),
status=200,
content_type="image/jpeg",
stream=True,
)
book = Edition.objects.create(title="hello")
MockActivity = namedtuple("MockActivity", ("cover"))
@ -565,18 +564,18 @@ class ModelFields(TestCase):
another_image_file = pathlib.Path(__file__).parent.joinpath(
"../../static/images/logo.png"
)
another_image = Image.open(another_image_file)
another_output = BytesIO()
another_image.save(another_output, format=another_image.format)
instance = fields.ImageField(activitypub_field="cover", name="cover")
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=another_image.tobytes(),
status=200,
)
with open(another_image_file, "rb") as another_image:
responses.add(
responses.GET,
"http://www.example.com/image.jpg",
body=another_image.read(),
status=200,
content_type="image/jpeg",
stream=True,
)
MockActivity = namedtuple("MockActivity", ("cover"))
mock_activity = MockActivity("http://www.example.com/image.jpg")

View file

@ -24,13 +24,21 @@ class Sanitizer(TestCase):
self.assertEqual(input_text, output)
def test_valid_html_attrs(self):
"""and don't remove attributes"""
"""and don't remove useful attributes"""
input_text = '<a href="fish.com">yes </a> <i>html</i>'
parser = InputHtmlParser()
parser.feed(input_text)
output = parser.get_output()
self.assertEqual(input_text, output)
def test_valid_html_invalid_attrs(self):
"""do remove un-approved attributes"""
input_text = '<a href="fish.com" fish="hello">yes </a> <i>html</i>'
parser = InputHtmlParser()
parser.feed(input_text)
output = parser.get_output()
self.assertEqual(output, '<a href="fish.com">yes </a> <i>html</i>')
def test_invalid_html(self):
"""remove all html when the html is malformed"""
input_text = "<b>yes <i>html</i>"

View file

@ -74,11 +74,12 @@ class AnnouncementViews(TestCase):
def test_create_announcement(self):
"""create a new announcement"""
view = views.Announcements.as_view()
view = views.EditAnnouncement.as_view()
form = forms.AnnouncementForm()
form.data["preview"] = "hi hi"
form.data["start_date"] = "2021-05-20"
form.data["user"] = self.local_user.id
form.data["display_type"] = "warning-light"
request = self.factory.post("", form.data)
request.user = self.local_user
@ -97,11 +98,12 @@ class AnnouncementViews(TestCase):
announcement = models.Announcement.objects.create(
preview="hi", user=self.local_user
)
view = views.Announcement.as_view()
view = views.EditAnnouncement.as_view()
form = forms.AnnouncementForm(instance=announcement)
form.data["preview"] = "hi hi"
form.data["start_date"] = "2021-05-20"
form.data["user"] = self.local_user.id
form.data["display_type"] = "warning-light"
request = self.factory.post("", form.data)
request.user = self.local_user

View file

@ -80,6 +80,15 @@ class LinkViews(TestCase):
activity = json.loads(mock.call_args[1]["args"][1])
self.assertEqual(activity["type"], "Update")
self.assertEqual(activity["object"]["type"], "Edition")
self.assertIsInstance(activity["object"]["fileLinks"], list)
self.assertEqual(
activity["object"]["fileLinks"][0]["href"], "https://www.example.com"
)
self.assertEqual(activity["object"]["fileLinks"][0]["mediaType"], "HTML")
self.assertEqual(
activity["object"]["fileLinks"][0]["attributedTo"],
self.local_user.remote_id,
)
link = models.FileLink.objects.get()
self.assertEqual(link.name, "www.example.com")

View file

@ -6,7 +6,6 @@ from unittest.mock import patch
from django.test import TestCase
from bookwyrm import models, views
from bookwyrm.activitypub.base_activity import set_related_field
# pylint: disable=too-many-public-methods

View file

@ -85,6 +85,7 @@ class ListViews(TestCase):
user=self.local_user,
book=self.book,
approved=True,
notes="hello",
order=1,
)
@ -178,6 +179,7 @@ class ListViews(TestCase):
book_list=self.list,
user=self.local_user,
book=self.book,
notes="hi hello",
approved=True,
order=1,
)

View file

@ -67,4 +67,4 @@ class ListItemViews(TestCase):
self.assertEqual(mock.call_count, 1)
item.refresh_from_db()
self.assertEqual(item.notes, "beep boop")
self.assertEqual(item.notes, "<p>beep boop</p>")

View file

@ -50,6 +50,43 @@ class AuthorViews(TestCase):
models.SiteSettings.objects.create()
def test_author_page(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Author.as_view()
author = models.Author.objects.create(name="Jessica")
self.book.authors.add(author)
request = self.factory.get("")
request.user = self.local_user
with patch("bookwyrm.views.author.is_api_request") as is_api:
is_api.return_value = False
result = view(request, author.id)
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
self.assertEqual(result.status_code, 200)
def test_author_page_edition_author(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Author.as_view()
another_book = models.Edition.objects.create(
title="Example Edition",
remote_id="https://example.com/book/1",
parent_work=self.work,
isbn_13="9780300112511",
)
author = models.Author.objects.create(name="Jessica")
self.book.authors.add(author)
request = self.factory.get("")
request.user = self.local_user
with patch("bookwyrm.views.author.is_api_request") as is_api:
is_api.return_value = False
result = view(request, author.id)
books = result.context_data["books"]
self.assertEqual(books.object_list.count(), 1)
self.assertIsInstance(result, TemplateResponse)
validate_html(result.render())
self.assertEqual(result.status_code, 200)
def test_author_page_empty(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Author.as_view()
author = models.Author.objects.create(name="Jessica")

View file

@ -93,6 +93,16 @@ urlpatterns = [
views.Announcement.as_view(),
name="settings-announcements",
),
re_path(
r"^settings/announcements/create/?$",
views.EditAnnouncement.as_view(),
name="settings-announcements-edit",
),
re_path(
r"^settings/announcements/(?P<announcement_id>\d+)/edit/?$",
views.EditAnnouncement.as_view(),
name="settings-announcements-edit",
),
re_path(
r"^settings/announcements/(?P<announcement_id>\d+)/delete/?$",
views.delete_announcement,

View file

@ -1,6 +1,7 @@
""" make sure all our nice views are available """
# site admin
from .admin.announcements import Announcements, Announcement, delete_announcement
from .admin.announcements import Announcements, Announcement
from .admin.announcements import EditAnnouncement, delete_announcement
from .admin.dashboard import Dashboard
from .admin.federation import Federation, FederatedServer
from .admin.federation import AddFederatedServer, ImportServerBlocklist

View file

@ -45,23 +45,6 @@ class Announcements(View):
request, "settings/announcements/announcements.html", data
)
def post(self, request):
"""edit the site settings"""
form = forms.AnnouncementForm(request.POST)
if form.is_valid():
form.save()
# reset the create form
form = forms.AnnouncementForm()
data = {
"announcements": Paginator(
models.Announcement.objects.order_by("-created_date"), PAGE_LENGTH
).get_page(request.GET.get("page")),
"form": form,
}
return TemplateResponse(
request, "settings/announcements/announcements.html", data
)
@method_decorator(login_required, name="dispatch")
@method_decorator(
@ -76,27 +59,52 @@ class Announcement(View):
announcement = get_object_or_404(models.Announcement, id=announcement_id)
data = {
"announcement": announcement,
"form": forms.AnnouncementForm(instance=announcement),
}
return TemplateResponse(
request, "settings/announcements/announcement.html", data
)
def post(self, request, announcement_id):
"""edit announcement"""
announcement = get_object_or_404(models.Announcement, id=announcement_id)
form = forms.AnnouncementForm(request.POST, instance=announcement)
if form.is_valid():
announcement = form.save()
form = forms.AnnouncementForm(instance=announcement)
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
name="dispatch",
)
class EditAnnouncement(View):
"""Create of edit an announcement"""
def get(self, request, announcement_id=None):
"""announcement forms"""
announcement = None
if announcement_id:
announcement = get_object_or_404(models.Announcement, id=announcement_id)
data = {
"announcement": announcement,
"form": form,
"form": forms.AnnouncementForm(instance=announcement),
}
return TemplateResponse(
request, "settings/announcements/announcement.html", data
request, "settings/announcements/edit_announcement.html", data
)
def post(self, request, announcement_id=None):
"""edit announcement"""
announcement = None
if announcement_id:
announcement = get_object_or_404(models.Announcement, id=announcement_id)
form = forms.AnnouncementForm(request.POST, instance=announcement)
if not form.is_valid():
data = {
"announcement": announcement,
"form": form,
}
return TemplateResponse(
request, "settings/announcements/edit_announcement.html", data
)
announcement = form.save()
return redirect("settings-announcements", announcement.id)
@login_required
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)

View file

@ -1,6 +1,7 @@
""" the good people stuff! the authors! """
from django.contrib.auth.decorators import login_required, permission_required
from django.core.paginator import Paginator
from django.db.models import Q
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
@ -25,9 +26,11 @@ class Author(View):
if is_api_request(request):
return ActivitypubResponse(author.to_activity())
books = models.Work.objects.filter(
authors=author, editions__authors=author
).distinct()
books = (
models.Work.objects.filter(Q(authors=author) | Q(editions__authors=author))
.order_by("-published_date")
.distinct()
)
paginated = Paginator(books, PAGE_LENGTH)
page = paginated.get_page(request.GET.get("page"))

View file

@ -2,7 +2,6 @@
from uuid import uuid4
from django.contrib.auth.decorators import login_required, permission_required
from django.core.files.base import ContentFile
from django.core.paginator import Paginator
from django.db.models import Avg, Q
from django.http import Http404
@ -144,13 +143,12 @@ def upload_cover(request, book_id):
def set_cover_from_url(url):
"""load it from a url"""
try:
image_file = get_image(url)
image_content, extension = get_image(url)
except: # pylint: disable=bare-except
return None
if not image_file:
if not image_content:
return None
image_name = str(uuid4()) + "." + url.split(".")[-1]
image_content = ContentFile(image_file.content)
image_name = str(uuid4()) + "." + extension
return [image_name, image_content]

View file

@ -5,6 +5,7 @@ from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.urls import reverse
from django.views import View
from bookwyrm import models
@ -35,6 +36,7 @@ class ImportTroubleshoot(View):
page.number, on_each_side=2, on_ends=1
),
"complete": True,
"page_path": reverse("import-troubleshoot", args=[job.id]),
}
return TemplateResponse(request, "import/troubleshoot.html", data)

View file

@ -5,6 +5,7 @@ from django.utils.decorators import method_decorator
from django.views import View
from bookwyrm import forms, models
from bookwyrm.views.status import to_markdown
# pylint: disable=no-self-use
@ -18,5 +19,9 @@ class ListItem(View):
list_item.raise_not_editable(request.user)
form = forms.ListItemForm(request.POST, instance=list_item)
if form.is_valid():
form.save()
item = form.save(commit=False)
item.notes = to_markdown(item.notes)
item.save()
else:
raise Exception(form.errors)
return redirect("list", list_item.book_list.id)

View file

@ -31,12 +31,17 @@ class User(View):
shelf_preview = []
# only show shelves that should be visible
shelves = user.shelf_set
is_self = request.user.id == user.id
if not is_self:
shelves = models.Shelf.privacy_filter(
request.user, privacy_levels=["public", "followers"]
).filter(user=user, books__isnull=False)
shelves = (
models.Shelf.privacy_filter(
request.user, privacy_levels=["public", "followers"]
)
.filter(user=user, books__isnull=False)
.distinct()
)
else:
shelves = user.shelf_set.filter(books__isnull=False).distinct()
for user_shelf in shelves.all()[:3]:
shelf_preview.append(

25
bw-dev
View file

@ -30,12 +30,12 @@ function execweb {
}
function initdb {
execweb python manage.py migrate
execweb python manage.py initdb "$@"
runweb python manage.py migrate
runweb python manage.py initdb "$@"
}
function makeitblack {
docker-compose run --rm web black celerywyrm bookwyrm
docker-compose run --rm dev-tools black celerywyrm bookwyrm
}
function awscommand {
@ -97,7 +97,7 @@ case "$CMD" in
docker-compose restart celery_worker
;;
pytest)
execweb pytest --no-cov-on-fail "$@"
runweb pytest --no-cov-on-fail "$@"
;;
collectstatic)
runweb python manage.py collectstatic --no-input
@ -135,7 +135,17 @@ case "$CMD" in
makeitblack
;;
prettier)
npx prettier --write bookwyrm/static/js/*.js
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
;;
stylelint)
docker-compose run --rm dev-tools npx stylelint \
bookwyrm/static/css/*.css --fix \
--config dev-tools/.stylelintrc.js
;;
formatters)
docker-compose run --rm dev-tools black celerywyrm bookwyrm && \
npx prettier --write bookwyrm/static/js/*.js && \
npx stylelint bookwyrm/static/css/*.css --fix --config dev-tools/.stylelintrc.js
;;
update)
git pull
@ -143,6 +153,8 @@ case "$CMD" in
runweb python manage.py migrate
runweb python manage.py collectstatic --no-input
docker-compose up -d
docker-compose restart web
docker-compose restart celery_worker
;;
populate_streams)
runweb python manage.py populate_streams "$@"
@ -209,6 +221,9 @@ case "$CMD" in
echo " build"
echo " clean"
echo " black"
echo " prettier"
echo " stylelint"
echo " formatters"
echo " populate_streams [--stream=<stream name>]"
echo " populate_suggestions"
echo " generate_thumbnails"

13
celerywyrm/apps.py Normal file
View file

@ -0,0 +1,13 @@
from django.apps import AppConfig
from celerywyrm import settings
class CelerywyrmConfig(AppConfig):
name = "celerywyrm"
verbose_name = "BookWyrm Celery"
def ready(self):
if settings.OTEL_EXPORTER_OTLP_ENDPOINT:
from bookwyrm.telemetry import open_telemetry
open_telemetry.instrumentCelery()

View file

@ -1,19 +0,0 @@
#!/usr/bin/env bash
source .env;
if [ "$CERTBOT_INIT" = "true" ]
then
certonly \
--webroot \
--webroot-path=/var/www/certbot \
--email ${EMAIL} \
--agree-tos \
--no-eff-email \
-d ${DOMAIN} \
-d www.${DOMAIN}
else
renew \
--webroot \
--webroot-path \
/var/www/certbot
fi

View file

@ -21,6 +21,8 @@ build
clean
black
prettier
stylelint
formatters
populate_streams
populate_lists_streams
populate_suggestions

14
dev-tools/Dockerfile Normal file
View file

@ -0,0 +1,14 @@
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/
RUN pip install -r requirements.txt
RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install -y nodejs
RUN npm install .

View file

@ -3,15 +3,16 @@
"watch:static": "yarn watch \"./bw-dev collectstatic\" bookwyrm/static/**"
},
"devDependencies": {
"eslint": "^7.23.0",
"eslint": "^8.9.0",
"prettier": "2.5.1",
"stylelint": "^14.2.0",
"stylelint-config-standard": "^24.0.0",
"stylelint-order": "^5.0.0",
"stylelint": "^14.5.0",
"watch": "^0.13.0"
},
"dependencies": {
"merge": "2.1.1",
"postcss": "8.2.13"
"postcss": "^8.4.6",
"stylelint-config-recommended": "^7.0.0",
"stylelint-config-standard": "^25.0.0",
"stylelint-order": "^5.0.0"
}
}

View file

@ -0,0 +1 @@
black==21.4b2

View file

@ -35,29 +35,27 @@ services:
networks:
- main
ports:
- 8000:8000
- 8000
redis_activity:
image: redis
command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT}
env_file: .env
networks:
- main
restart: on-failure
volumes:
- ./redis.conf:/etc/redis/redis.conf
- redis_activity_data:/data
redis_broker:
image: redis
command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT}
env_file: .env
ports:
- 6379:6379
networks:
- main
restart: on-failure
redis_broker:
image: redis
command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT}
volumes:
- ./redis.conf:/etc/redis/redis.conf
- redis_broker_data:/data
env_file: .env
networks:
- main
restart: on-failure
celery_worker:
env_file: .env
build: .
@ -74,10 +72,10 @@ services:
restart: on-failure
flower:
build: .
command: celery -A celerywyrm flower
command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD}
env_file: .env
ports:
- ${FLOWER_PORT}:${FLOWER_PORT}
- ${FLOWER_PORT}
volumes:
- .:/app
networks:
@ -86,6 +84,11 @@ services:
- db
- redis_broker
restart: on-failure
dev-tools:
build: dev-tools
env_file: .env
volumes:
- .:/app
volumes:
pgdata:
static_volume:

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-29 14:28\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:01\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: German\n"
"Language: de\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Es existiert bereits ein Benutzer*inkonto mit dieser E-Mail-Adresse."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Ein Tag"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Eine Woche"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Ein Monat"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Läuft nicht ab"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i}-mal verwendbar"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Unbegrenzt"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Reihenfolge der Liste"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Buchtitel"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Bewertung"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Sortieren nach"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Aufsteigend"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Absteigend"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "Enddatum darf nicht vor dem Startdatum liegen."
@ -140,26 +148,26 @@ msgstr "Föderiert"
msgid "Blocked"
msgstr "Blockiert"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s ist keine gültige remote_id"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s ist kein gültiger Benutzer*inname"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "Benutzer*inname"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Dieser Benutzer*inname ist bereits vergeben."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Dieser Benutzer*inname ist bereits vergeben."
msgid "Public"
msgstr "Öffentlich"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Öffentlich"
msgid "Unlisted"
msgstr "Ungelistet"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Follower*innen"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugiesisch)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr ""
msgid "Svenska (Swedish)"
msgstr "Svenska (Schwedisch)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Administration"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Direktnachricht senden"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Physikalische Eigenschaften"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Format:"
@ -1055,17 +1063,17 @@ msgstr "Ausgaben von %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Ausgaben von <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Beliebig(e)"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Sprache:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Ausgaben suchen"
@ -3574,23 +3582,31 @@ msgstr "Keine Links für diese Domain vorhanden."
msgid "Back to reports"
msgstr "Zurück zu den Meldungen"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Gemeldete Statusmeldungen"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "Statusmeldung gelöscht"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Gemeldete Links"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Moderator*innenkommentare"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Kommentieren"
@ -4015,14 +4031,14 @@ msgstr "Prozent"
msgid "of %(pages)s pages"
msgstr "von %(pages)s Seiten"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Antworten"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Inhalt"
@ -4100,7 +4116,7 @@ msgstr "Filter werden angewendet"
msgid "Clear filters"
msgstr "Filter zurücksetzen"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Filter anwenden"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-30 18:17+0000\n"
"POT-Creation-Date: 2022-02-05 02:20+0000\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: English <LL@li.org>\n"
@ -18,62 +18,70 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:245
msgid "This domain is blocked. Please contact your administrator if you think this is an error."
msgstr ""
#: bookwyrm/forms.py:255
msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending."
msgstr ""
#: bookwyrm/forms.py:394
msgid "A user with this email already exists."
msgstr ""
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:408
msgid "One Day"
msgstr ""
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:409
msgid "One Week"
msgstr ""
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:410
msgid "One Month"
msgstr ""
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:411
msgid "Does Not Expire"
msgstr ""
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:415
#, python-brace-format
msgid "{i} uses"
msgstr ""
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:416
msgid "Unlimited"
msgstr ""
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:518
msgid "List Order"
msgstr ""
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:519
msgid "Book Title"
msgstr ""
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:520 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr ""
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:522 bookwyrm/templates/lists/list.html:175
msgid "Sort By"
msgstr ""
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:526
msgid "Ascending"
msgstr ""
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:527
msgid "Descending"
msgstr ""
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:540
msgid "Reading finish date cannot be before start date."
msgstr ""
@ -141,26 +149,26 @@ msgstr ""
msgid "Blocked"
msgstr ""
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr ""
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr ""
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr ""
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr ""
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -168,7 +176,7 @@ msgstr ""
msgid "Public"
msgstr ""
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -176,14 +184,14 @@ msgstr ""
msgid "Unlisted"
msgstr ""
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr ""
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -225,73 +233,73 @@ msgstr ""
msgid "Everything else"
msgstr ""
#: bookwyrm/settings.py:173
#: bookwyrm/settings.py:190
msgid "Home Timeline"
msgstr ""
#: bookwyrm/settings.py:173
#: bookwyrm/settings.py:190
msgid "Home"
msgstr ""
#: bookwyrm/settings.py:174
#: bookwyrm/settings.py:191
msgid "Books Timeline"
msgstr ""
#: bookwyrm/settings.py:174 bookwyrm/templates/search/layout.html:21
#: bookwyrm/settings.py:191 bookwyrm/templates/search/layout.html:21
#: bookwyrm/templates/search/layout.html:42
#: bookwyrm/templates/user/layout.html:91
msgid "Books"
msgstr ""
#: bookwyrm/settings.py:248
#: bookwyrm/settings.py:265
msgid "English"
msgstr ""
#: bookwyrm/settings.py:249
#: bookwyrm/settings.py:266
msgid "Deutsch (German)"
msgstr ""
#: bookwyrm/settings.py:250
#: bookwyrm/settings.py:267
msgid "Español (Spanish)"
msgstr ""
#: bookwyrm/settings.py:251
#: bookwyrm/settings.py:268
msgid "Galego (Galician)"
msgstr ""
#: bookwyrm/settings.py:252
#: bookwyrm/settings.py:269
msgid "Italiano (Italian)"
msgstr ""
#: bookwyrm/settings.py:253
#: bookwyrm/settings.py:270
msgid "Français (French)"
msgstr ""
#: bookwyrm/settings.py:254
#: bookwyrm/settings.py:271
msgid "Lietuvių (Lithuanian)"
msgstr ""
#: bookwyrm/settings.py:255
#: bookwyrm/settings.py:272
msgid "Norsk (Norwegian)"
msgstr ""
#: bookwyrm/settings.py:256
#: bookwyrm/settings.py:273
msgid "Português do Brasil (Brazilian Portuguese)"
msgstr ""
#: bookwyrm/settings.py:257
#: bookwyrm/settings.py:274
msgid "Português Europeu (European Portuguese)"
msgstr ""
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
#: bookwyrm/settings.py:275
msgid "Svenska (Swedish)"
msgstr ""
#: bookwyrm/settings.py:259
#: bookwyrm/settings.py:276
msgid "简体中文 (Simplified Chinese)"
msgstr ""
#: bookwyrm/settings.py:260
#: bookwyrm/settings.py:277
msgid "繁體中文 (Traditional Chinese)"
msgstr ""
@ -370,7 +378,7 @@ msgstr ""
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr ""
@ -429,7 +437,7 @@ msgid "Copy address"
msgstr ""
#: bookwyrm/templates/annual_summary/layout.html:68
#: bookwyrm/templates/lists/list.html:269
#: bookwyrm/templates/lists/list.html:267
msgid "Copied!"
msgstr ""
@ -714,17 +722,17 @@ msgstr ""
#: bookwyrm/templates/book/cover_add_modal.html:32
#: bookwyrm/templates/book/edit/edit_book.html:123
#: bookwyrm/templates/book/edit/edit_book.html:126
#: bookwyrm/templates/book/file_links/add_link_modal.html:60
#: bookwyrm/templates/book/file_links/add_link_modal.html:59
#: bookwyrm/templates/book/file_links/verification_modal.html:21
#: bookwyrm/templates/book/sync_modal.html:23
#: bookwyrm/templates/groups/delete_group_modal.html:17
#: bookwyrm/templates/lists/add_item_modal.html:42
#: bookwyrm/templates/lists/delete_list_modal.html:18
#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:23
#: bookwyrm/templates/readthrough/readthrough_modal.html:74
#: bookwyrm/templates/readthrough/readthrough_modal.html:73
#: bookwyrm/templates/settings/federation/instance.html:88
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
#: bookwyrm/templates/snippets/report_modal.html:54
#: bookwyrm/templates/snippets/report_modal.html:53
msgid "Cancel"
msgstr ""
@ -831,14 +839,14 @@ msgstr ""
msgid "Lists"
msgstr ""
#: bookwyrm/templates/book/book.html:359
#: bookwyrm/templates/book/book.html:360
msgid "Add to list"
msgstr ""
#: bookwyrm/templates/book/book.html:369
#: bookwyrm/templates/book/book.html:370
#: bookwyrm/templates/book/cover_add_modal.html:31
#: bookwyrm/templates/lists/add_item_modal.html:37
#: bookwyrm/templates/lists/list.html:247
#: bookwyrm/templates/lists/list.html:245
#: bookwyrm/templates/settings/email_blocklist/domain_form.html:24
#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:31
msgid "Add"
@ -1018,7 +1026,7 @@ msgid "Physical Properties"
msgstr ""
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr ""
@ -1056,17 +1064,17 @@ msgstr ""
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr ""
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr ""
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr ""
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr ""
@ -1651,7 +1659,7 @@ msgid "What are you reading?"
msgstr ""
#: bookwyrm/templates/get_started/books.html:9
#: bookwyrm/templates/layout.html:47 bookwyrm/templates/lists/list.html:205
#: bookwyrm/templates/layout.html:47 bookwyrm/templates/lists/list.html:203
msgid "Search for a book"
msgstr ""
@ -1671,7 +1679,7 @@ msgstr ""
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:53
#: bookwyrm/templates/layout.html:54 bookwyrm/templates/lists/list.html:209
#: bookwyrm/templates/layout.html:54 bookwyrm/templates/lists/list.html:207
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
msgid "Search"
@ -1687,7 +1695,7 @@ msgid "Popular on %(site_name)s"
msgstr ""
#: bookwyrm/templates/get_started/books.html:58
#: bookwyrm/templates/lists/list.html:222
#: bookwyrm/templates/lists/list.html:220
msgid "No books found"
msgstr ""
@ -2258,7 +2266,7 @@ msgid "Suggest \"<em>%(title)s</em>\" for this list"
msgstr ""
#: bookwyrm/templates/lists/add_item_modal.html:39
#: bookwyrm/templates/lists/list.html:249
#: bookwyrm/templates/lists/list.html:247
msgid "Suggest"
msgstr ""
@ -2405,72 +2413,72 @@ msgstr ""
msgid "You successfully added a book to this list!"
msgstr ""
#: bookwyrm/templates/lists/list.html:96
#: bookwyrm/templates/lists/list.html:94
msgid "Edit notes"
msgstr ""
#: bookwyrm/templates/lists/list.html:111
#: bookwyrm/templates/lists/list.html:109
msgid "Add notes"
msgstr ""
#: bookwyrm/templates/lists/list.html:123
#: bookwyrm/templates/lists/list.html:121
#, python-format
msgid "Added by <a href=\"%(user_path)s\">%(username)s</a>"
msgstr ""
#: bookwyrm/templates/lists/list.html:138
#: bookwyrm/templates/lists/list.html:136
msgid "List position"
msgstr ""
#: bookwyrm/templates/lists/list.html:144
#: bookwyrm/templates/lists/list.html:142
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:21
msgid "Set"
msgstr ""
#: bookwyrm/templates/lists/list.html:159
#: bookwyrm/templates/lists/list.html:157
#: bookwyrm/templates/snippets/remove_from_group_button.html:20
msgid "Remove"
msgstr ""
#: bookwyrm/templates/lists/list.html:173
#: bookwyrm/templates/lists/list.html:190
#: bookwyrm/templates/lists/list.html:171
#: bookwyrm/templates/lists/list.html:188
msgid "Sort List"
msgstr ""
#: bookwyrm/templates/lists/list.html:183
#: bookwyrm/templates/lists/list.html:181
msgid "Direction"
msgstr ""
#: bookwyrm/templates/lists/list.html:197
#: bookwyrm/templates/lists/list.html:195
msgid "Add Books"
msgstr ""
#: bookwyrm/templates/lists/list.html:199
#: bookwyrm/templates/lists/list.html:197
msgid "Suggest Books"
msgstr ""
#: bookwyrm/templates/lists/list.html:210
#: bookwyrm/templates/lists/list.html:208
msgid "search"
msgstr ""
#: bookwyrm/templates/lists/list.html:216
#: bookwyrm/templates/lists/list.html:214
msgid "Clear search"
msgstr ""
#: bookwyrm/templates/lists/list.html:221
#: bookwyrm/templates/lists/list.html:219
#, python-format
msgid "No books found matching the query \"%(query)s\""
msgstr ""
#: bookwyrm/templates/lists/list.html:260
#: bookwyrm/templates/lists/list.html:258
msgid "Embed this list on a website"
msgstr ""
#: bookwyrm/templates/lists/list.html:268
#: bookwyrm/templates/lists/list.html:266
msgid "Copy embed code"
msgstr ""
#: bookwyrm/templates/lists/list.html:270
#: bookwyrm/templates/lists/list.html:268
#, python-format
msgid "%(list_name)s, a list by %(owner)s on %(site_name)s"
msgstr ""
@ -4108,7 +4116,7 @@ msgstr ""
msgid "Clear filters"
msgstr ""
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr ""

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 08:06\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 22:13\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Spanish\n"
"Language: es\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr "El dominio está bloqueado. No vuelva a intentar esta url."
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr "El dominio ya está pendiente. Inténtalo más tarde."
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Ya existe un usuario con ese correo electrónico."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Un día"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Una semana"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Un mes"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "No expira"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} usos"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Sin límite"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Orden de la lista"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Título"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Valoración"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Ordenar por"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Ascendente"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Descendente"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio."
@ -140,26 +148,26 @@ msgstr "Federalizado"
msgid "Blocked"
msgstr "Bloqueado"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s no es un remote_id válido"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s no es un usuario válido"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "nombre de usuario"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Ya existe un usuario con ese nombre."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Ya existe un usuario con ese nombre."
msgid "Public"
msgstr "Público"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Público"
msgid "Unlisted"
msgstr "No listado"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Seguidores"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr "Sueco (Svenska)"
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Administrador"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Enviar mensaje directo"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Propiedades físicas"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Formato:"
@ -1055,17 +1063,17 @@ msgstr "Ediciones de %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Ediciones de <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Cualquier"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Idioma:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Buscar ediciones"
@ -3574,23 +3582,31 @@ msgstr "Ningún enlace disponible para este dominio."
msgid "Back to reports"
msgstr "Volver a los informes"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Estados reportados"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "El estado ha sido eliminado"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Enlaces denunciados"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Comentarios de moderador"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Comentario"
@ -4015,14 +4031,14 @@ msgstr "por ciento"
msgid "of %(pages)s pages"
msgstr "de %(pages)s páginas"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Responder"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Contenido"
@ -4100,7 +4116,7 @@ msgstr "Filtros aplicados"
msgid "Clear filters"
msgstr "Borrar filtros"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Aplicar filtros"

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 11:29\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:01\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: French\n"
"Language: fr\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Cet email est déjà associé à un compte."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Un jour"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Une semaine"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Un mois"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Sans expiration"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} utilisations"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Sans limite"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Ordre de la liste"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Titre du livre"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Note"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Trier par"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Ordre croissant"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Ordre décroissant"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "La date de fin de lecture ne peut pas être antérieure à la date de début."
@ -140,26 +148,26 @@ msgstr "Fédéré"
msgid "Blocked"
msgstr "Bloqué"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s nest pas une remote_id valide."
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s nest pas un nom de compte valide."
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "nom du compte:"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Ce nom est déjà associé à un compte."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Ce nom est déjà associé à un compte."
msgid "Public"
msgstr "Public"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Public"
msgid "Unlisted"
msgstr "Non listé"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Abonné(e)s"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugais européen)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr "Suédois (Svenska)"
msgid "Svenska (Swedish)"
msgstr "Svenska (Suédois)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Admin"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Envoyer un message direct"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Propriétés physiques"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Format:"
@ -1055,17 +1063,17 @@ msgstr "Éditions de %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Éditions de <a href=\"%(work_path)s\">« %(work_title)s»</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Tou(te)s"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Langue:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Rechercher des éditions"
@ -3574,23 +3582,31 @@ msgstr "Aucun lien nest disponible pour ce domaine."
msgid "Back to reports"
msgstr "Retour aux signalements"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Rapporteur du message"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Mise à jour de votre rapport :"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Statuts signalés"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "Le statut a été supprimé"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Liens signalés"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Commentaires de léquipe de modération"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Commentaire"
@ -4015,14 +4031,14 @@ msgstr "pourcent"
msgid "of %(pages)s pages"
msgstr "sur %(pages)s pages"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Répondre"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Contenu"
@ -4100,7 +4116,7 @@ msgstr "Des filtres sont appliqués"
msgid "Clear filters"
msgstr "Annuler les filtres"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Appliquer les filtres"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 05:04\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:01\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Galician\n"
"Language: gl\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Xa existe unha usuaria con este email."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Un día"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Unha semana"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Un mes"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Non caduca"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} usos"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Sen límite"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Orde da listaxe"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Título do libro"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Puntuación"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Ordenar por"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Ascendente"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Descendente"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "A data final da lectura non pode ser anterior á de inicio."
@ -140,26 +148,26 @@ msgstr "Federado"
msgid "Blocked"
msgstr "Bloqueado"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s non é un remote_id válido"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s non é un nome de usuaria válido"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "nome de usuaria"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Xa existe unha usuaria con ese nome."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Xa existe unha usuaria con ese nome."
msgid "Public"
msgstr "Público"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Público"
msgid "Unlisted"
msgstr "Non listado"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Seguidoras"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portugués europeo)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr "Sueco (Svenska)"
msgid "Svenska (Swedish)"
msgstr "Sueco (Swedish)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Admin"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Enviar mensaxe directa"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Propiedades físicas"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Formato:"
@ -1055,17 +1063,17 @@ msgstr "Edicións de %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Edicións de <a href=\"%(work_path)s\">%(work_title)s</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Calquera"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Idioma:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Buscar edicións"
@ -3574,23 +3582,31 @@ msgstr "Non hai ligazóns dispoñibles para este dominio."
msgid "Back to reports"
msgstr "Volver a denuncias"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Denunciante"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Actualiza a denuncia:"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Estados dununciados"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "O estado foi eliminado"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Ligazóns denunciadas"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Comentarios da moderación"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Comentario"
@ -4015,14 +4031,14 @@ msgstr "porcentaxe"
msgid "of %(pages)s pages"
msgstr "de %(pages)s páxinas"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Responder"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Contido"
@ -4100,7 +4116,7 @@ msgstr "Filtros aplicados"
msgid "Clear filters"
msgstr "Limpar filtros"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Aplicar filtros"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 19:04\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:01\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Italian\n"
"Language: it\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Esiste già un'utenza con questo indirizzo email."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Un giorno"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Una settimana"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Un mese"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Non scade"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} usi"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Illimitato"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Ordina Lista"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Titolo del libro"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Valutazione"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Ordina per"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Crescente"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Decrescente"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "La data di fine lettura non può essere precedente alla data di inizio."
@ -140,26 +148,26 @@ msgstr "Federato"
msgid "Blocked"
msgstr "Bloccato"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s non è un Id remoto valido"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s non è un nome utente valido"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "nome utente"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Un utente con questo nome utente esiste già."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Un utente con questo nome utente esiste già."
msgid "Public"
msgstr "Pubblico"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Pubblico"
msgid "Unlisted"
msgstr "Non in lista"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Followers"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Portoghese europeo)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr "Swedish (Svedese)"
msgid "Svenska (Swedish)"
msgstr "Svenska (Svedese)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Admin"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Invia messaggio diretto"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Caratteristiche"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Formato:"
@ -1055,17 +1063,17 @@ msgstr "Edizioni di %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Edizioni di <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Qualsiasi"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Lingua:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Ricerca edizioni"
@ -3574,23 +3582,31 @@ msgstr "Nessun collegamento disponibile per questo libro."
msgid "Back to reports"
msgstr "Tornare all'elenco dei report"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Messaggio segnalato"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Aggiornamento sul tuo rapporto:"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Stati segnalati"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "Lo stato è stato eliminato"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Collegamenti segnalati"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Commenti del moderatore"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Commenta"
@ -4015,14 +4031,14 @@ msgstr "percentuale"
msgid "of %(pages)s pages"
msgstr "di %(pages)s pagine"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Rispondi"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Contenuto"
@ -4100,7 +4116,7 @@ msgstr "Filtri applicati"
msgid "Clear filters"
msgstr "Rimuovi filtri"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Applica filtri"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-30 17:27\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:00\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Lithuanian\n"
"Language: lt\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Vartotojas su šiuo el. pašto adresu jau yra."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Diena"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Savaitė"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Mėnuo"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Galiojimas nesibaigia"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} naudoja"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Neribota"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Kaip pridėta į sąrašą"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Knygos antraštė"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Įvertinimas"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Rūšiuoti pagal"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Didėjančia tvarka"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Mažėjančia tvarka"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "Skaitymo pabaigos data negali būti prieš skaitymo pradžios datą."
@ -140,26 +148,26 @@ msgstr "Susijungę"
msgid "Blocked"
msgstr "Užblokuoti"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s yra negaliojantis remote_id"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s yra negaliojantis naudotojo vardas"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "naudotojo vardas"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Toks naudotojo vardas jau egzistuoja."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Toks naudotojo vardas jau egzistuoja."
msgid "Public"
msgstr "Viešas"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Viešas"
msgid "Unlisted"
msgstr "Slaptas"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Sekėjai"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Europos portugalų)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr "Švedų (Swedish)"
msgid "Svenska (Swedish)"
msgstr "Svenska (Švedų)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -347,7 +355,7 @@ msgstr "<a href=\"%(book_path)s\"><em>%(title)s</em></a> labiausiai kontroversi
#: bookwyrm/templates/about/about.html:89
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'>reach out</a> and make yourself heard."
msgstr ""
msgstr "Sekite savo skaitymus, kalbėkite apie knygas, rašykite atsiliepimus ir atraskite, ką dar perskaityti. „BookWyrm“ tai programinė įranga, kurioje nėra reklamų, biurokratijos. Tai bendruomenei orientuota, nedidelė ir asmeninė įranga, kurią lengva plėsti. Jei norite papildomų funkcijų, įgyvendinti savo svajones ar tiesiog pranešti apie klaidą, <a href='https://joinbookwyrm.com/get-involved' target='_blank'>susisiekite</a> ir jus išgirsime."
#: bookwyrm/templates/about/about.html:96
msgid "Meet your admins"
@ -356,7 +364,7 @@ msgstr "Šio serverio administratoriai"
#: bookwyrm/templates/about/about.html:99
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"coc_path\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr ""
msgstr "Svetainės %(site_name)s moderatoriai ir administratoriai nuolat atnaujina puslapį, laikosi <a href=\"coc_path\">elgsenos susitarimo</a> ir atsako, kai naudotojai praneša apie brukalą ir blogą elgesį."
#: bookwyrm/templates/about/about.html:113
msgid "Moderator"
@ -369,7 +377,7 @@ msgstr "Administravimas"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Siųsti asmeninę žinutę"
@ -1027,7 +1035,7 @@ msgid "Physical Properties"
msgstr "Fizinės savybės"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Formatas:"
@ -1065,17 +1073,17 @@ msgstr "Knygos %(book_title)s leidimai"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> leidimai"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Bet kas"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Kalba:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Paieškos leidimai"
@ -2919,7 +2927,7 @@ msgstr "Trinate tai, kas perskaityta ir %(count)s susietų progreso naujinių."
#: bookwyrm/templates/readthrough/readthrough_modal.html:8
#, python-format
msgid "Update read dates for \"<em>%(title)s</em>\""
msgstr ""
msgstr "Atnaujinkite knygos „<em>%(title)s</em>“ skaitymo datas"
#: bookwyrm/templates/readthrough/readthrough_form.html:10
#: bookwyrm/templates/readthrough/readthrough_modal.html:31
@ -2970,7 +2978,7 @@ msgstr "Ištrinti šias skaitymo datas"
#: bookwyrm/templates/readthrough/readthrough_modal.html:12
#, python-format
msgid "Add read dates for \"<em>%(title)s</em>\""
msgstr ""
msgstr "Pridėkite knygos „<em>%(title)s</em>“ skaitymo datas"
#: bookwyrm/templates/report.html:5
#: bookwyrm/templates/snippets/report_button.html:13
@ -3154,10 +3162,10 @@ msgstr[3] "%(display_count)s atvirų ataskaitų"
#, python-format
msgid "%(display_count)s domain needs review"
msgid_plural "%(display_count)s domains need review"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[0] "%(display_count)s domeną reikia peržiūrėti"
msgstr[1] "%(display_count)s domenus reikia peržiūrėti"
msgstr[2] "%(display_count)s domenus reikia peržiūrėti"
msgstr[3] "%(display_count)s domenus reikia peržiūrėti"
#: bookwyrm/templates/settings/dashboard/dashboard.html:65
#, python-format
@ -3569,11 +3577,11 @@ msgstr "Puslapio nustatymai"
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:5
#, python-format
msgid "Set display name for %(url)s"
msgstr ""
msgstr "Nurodykite pavadinimą puslapiui %(url)s"
#: bookwyrm/templates/settings/link_domains/link_domains.html:11
msgid "Link domains must be approved before they are shown on book pages. Please make sure that the domains are not hosting spam, malicious code, or deceptive links before approving."
msgstr ""
msgstr "Prieš parodant susietus domenus knygų puslapiuose, juos reikia patvirtinti. Užtikrinkite, kad domenai nenukreipia į brukalo ar kenkėjiškas svetaines ir tai nėra apgaulingos nuorodos."
#: bookwyrm/templates/settings/link_domains/link_domains.html:45
msgid "Set display name"
@ -3597,29 +3605,37 @@ msgstr "Šiuo metu užblokuotų domenų nėra"
#: bookwyrm/templates/settings/link_domains/link_table.html:39
msgid "No links available for this domain."
msgstr ""
msgstr "Šiam domenui nuorodų nėra."
#: bookwyrm/templates/settings/reports/report.html:11
msgid "Back to reports"
msgstr "Atgal į pranešimus"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Žinučių pranešėjas"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Naujausia informacija apie jūsų pranešimą:"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Praneštos būsenos"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "Būsena ištrinta"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Raportuotos nuorodos"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Moderatoriaus komentarai"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Komentuoti"
@ -3627,17 +3643,17 @@ msgstr "Komentuoti"
#: bookwyrm/templates/settings/reports/report_header.html:6
#, python-format
msgid "Report #%(report_id)s: Status posted by @%(username)s"
msgstr ""
msgstr "Pranešimas #%(report_id)s: publikavo @%(username)s"
#: bookwyrm/templates/settings/reports/report_header.html:12
#, python-format
msgid "Report #%(report_id)s: Link added by @%(username)s"
msgstr ""
msgstr "Pranešimas #%(report_id)s: nuorodą pridėjo @%(username)s"
#: bookwyrm/templates/settings/reports/report_header.html:18
#, python-format
msgid "Report #%(report_id)s: User @%(username)s"
msgstr ""
msgstr "Pranešimas #%(report_id)s: naudotojas @%(username)s"
#: bookwyrm/templates/settings/reports/report_links_table.html:17
msgid "Block domain"
@ -3650,7 +3666,7 @@ msgstr "Užrašų nepateikta"
#: bookwyrm/templates/settings/reports/report_preview.html:24
#, python-format
msgid "Reported by <a href=\"%(path)s\">@%(username)s</a>"
msgstr ""
msgstr "Pranešė <a href=\"%(path)s\">@%(username)s</a>"
#: bookwyrm/templates/settings/reports/report_preview.html:34
msgid "Re-open"
@ -4048,14 +4064,14 @@ msgstr "procentai"
msgid "of %(pages)s pages"
msgstr "iš %(pages)s psl."
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Atsakyti"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Turinys"
@ -4133,7 +4149,7 @@ msgstr "Taikyti filtrai"
msgid "Clear filters"
msgstr "Valyti filtrus"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Taikyti filtrus"
@ -4210,15 +4226,15 @@ msgstr[3] "įvertinta <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rat
#, python-format
msgid "Review of \"%(book_title)s\" (%(display_rating)s star): %(review_title)s"
msgid_plural "Review of \"%(book_title)s\" (%(display_rating)s stars): %(review_title)s"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[0] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždutė): %(review_title)s"
msgstr[1] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždutės): %(review_title)s"
msgstr[2] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždučių): %(review_title)s"
msgstr[3] "Knygos „%(book_title)s“ apžvalga (%(display_rating)s žvaigždutės): %(review_title)s"
#: bookwyrm/templates/snippets/generated_status/review_pure_name.html:12
#, python-format
msgid "Review of \"%(book_title)s\": %(review_title)s"
msgstr ""
msgstr "Knygos „%(book_title)s“ apžvalga: %(review_title)s"
#: bookwyrm/templates/snippets/goal_form.html:4
#, python-format
@ -4327,12 +4343,12 @@ msgstr "Registruotis"
#: bookwyrm/templates/snippets/report_modal.html:8
#, python-format
msgid "Report @%(username)s's status"
msgstr ""
msgstr "Pranešti apie @%(username)s būseną"
#: bookwyrm/templates/snippets/report_modal.html:10
#, python-format
msgid "Report %(domain)s link"
msgstr ""
msgstr "Pranešti apie %(domain)s nuorodą"
#: bookwyrm/templates/snippets/report_modal.html:12
#, python-format
@ -4346,7 +4362,7 @@ msgstr "Šis pranešimas bus nusiųstas peržiūrėti %(site_name)s puslapio mod
#: bookwyrm/templates/snippets/report_modal.html:36
msgid "Links from this domain will be removed until your report has been reviewed."
msgstr ""
msgstr "Kol neperžiūrėsime jūsų pranešimo, nuoroda iš šio domeno bus pašalinta."
#: bookwyrm/templates/snippets/report_modal.html:41
msgid "More info about this report:"
@ -4420,7 +4436,7 @@ msgstr "redaguota %(date)s"
#: bookwyrm/templates/snippets/status/headers/comment.html:8
#, python-format
msgid "commented on <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
msgstr "pakomentavo autoriaus <a href=\"%(author_path)s\">%(author_name)s</a> knygą <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/comment.html:15
#, python-format
@ -4435,7 +4451,7 @@ msgstr "atsakė į <a href=\"%(user_path)s\">%(username)s</a> <a href=\"%(status
#: bookwyrm/templates/snippets/status/headers/quotation.html:8
#, python-format
msgid "quoted <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
msgstr "pacitavo <a href=\"%(author_path)s\">%(author_name)s</a> knygą <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/quotation.html:15
#, python-format
@ -4450,7 +4466,7 @@ msgstr "įvertino <a href=\"%(book_path)s\">%(book)s</a>:"
#: bookwyrm/templates/snippets/status/headers/read.html:10
#, python-format
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr "pabaigė skaityti <a href=\"%(author_path)s\">%(author_name)s</a> autoriaus knygą <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "pabaigė skaityti <a href=\"%(author_path)s\">%(author_name)s</a> knygą <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/read.html:17
#, python-format
@ -4460,7 +4476,7 @@ msgstr "baigė skaityti <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:10
#, python-format
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr "pradėjo skaityti <a href=\"%(author_path)s\">%(author_name)s</a> autoriaus knygą <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "pradėjo skaityti <a href=\"%(author_path)s\">%(author_name)s</a> knygą <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:17
#, python-format
@ -4480,12 +4496,12 @@ msgstr "apžvelgė <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a> by <a href=\"%(author_path)s\">%(author_name)s</a>"
msgstr ""
msgstr "nori perskaityti <a href=\"%(author_path)s\">%(author_name)s</a> knygą <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:17
#, python-format
msgid "wants to read <a href=\"%(book_path)s\">%(book)s</a>"
msgstr ""
msgstr "nori perskaityti <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/layout.html:24
#: bookwyrm/templates/snippets/status/status_options.html:17
@ -4714,8 +4730,8 @@ msgstr "Būsenos atnaujinimai iš {obj.display_name}"
#, python-format
msgid "Load %(count)d unread status"
msgid_plural "Load %(count)d unread statuses"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[0] "Įkelti %(count)d neperskaitytą statusą"
msgstr[1] "Įkelti %(count)d neperskaitytus statusus"
msgstr[2] "Įkelti %(count)d neperskaitytą statusą"
msgstr[3] "Įkelti %(count)d neperskaitytą statusą"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 04:03\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:00\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Norwegian\n"
"Language: no\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Den e-postadressen er allerede registrert."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Én dag"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Én uke"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Én måned"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Uendelig"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} ganger"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Ubegrenset"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Liste rekkefølge"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Boktittel"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Vurdering"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Sorter etter"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Stigende"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Synkende"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "Sluttdato kan ikke være før startdato."
@ -140,26 +148,26 @@ msgstr "Føderert"
msgid "Blocked"
msgstr "Blokkert"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s er en ugyldig remote_id"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s er et ugyldig brukernavn"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "brukernavn"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "En bruker med det brukernavnet eksisterer allerede."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "En bruker med det brukernavnet eksisterer allerede."
msgid "Public"
msgstr "Offentlig"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Offentlig"
msgid "Unlisted"
msgstr "Uoppført"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Følgere"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -193,20 +201,20 @@ msgstr "Privat"
#: bookwyrm/models/link.py:51
msgid "Free"
msgstr ""
msgstr "Gratis"
#: bookwyrm/models/link.py:52
msgid "Purchasable"
msgstr ""
msgstr "Tilgjengelig for kjøp"
#: bookwyrm/models/link.py:53
msgid "Available for loan"
msgstr ""
msgstr "Tilgjengelig for utlån"
#: bookwyrm/models/link.py:70
#: bookwyrm/templates/settings/link_domains/link_domains.html:23
msgid "Approved"
msgstr ""
msgstr "Godkjent"
#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:272
msgid "Reviews"
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Europeisk Portugisisk)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr ""
msgid "Svenska (Swedish)"
msgstr "Svenska (Svensk)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -328,7 +336,7 @@ msgstr "Velkommen til %(site_name)s!"
#: bookwyrm/templates/about/about.html:23
#, python-format
msgid "%(site_name)s is part of <em>BookWyrm</em>, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the <a href=\"https://joinbookwyrm.com/instances/\" target=\"_blank\">BookWyrm network</a>, this community is unique."
msgstr ""
msgstr "%(site_name)s er en del av <em>BookWyrm</em>, et nettverk av selvstendige, selvstyrte samfunn for lesere. Du kan kommunisere sømløst med brukere hvor som helst i <a href=\"https://joinbookwyrm.com/instances/\" target=\"_blank\">BookWyrm nettverket</a>, men hvert samfunn er unikt."
#: bookwyrm/templates/about/about.html:40
#, python-format
@ -356,7 +364,7 @@ msgstr "Møt administratorene"
#: bookwyrm/templates/about/about.html:99
#, python-format
msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the <a href=\"coc_path\">code of conduct</a>, and respond when users report spam and bad behavior."
msgstr ""
msgstr "%(site_name)s sine moderatorer og administratorer holder nettsida oppe og tilgjengelig, håndhever <a href=\"coc_path\">adferdskoden</a>, og svarer på brukernes rapporterer om spam og dårlig atferd."
#: bookwyrm/templates/about/about.html:113
msgid "Moderator"
@ -369,7 +377,7 @@ msgstr "Admin"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Send direktemelding"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Fysiske egenskaper"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Format:"
@ -1055,67 +1063,69 @@ msgstr "Utgaver av %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Utgaver av <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Alle"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Språk:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Søk etter utgaver"
#: bookwyrm/templates/book/file_links/add_link_modal.html:6
msgid "Add file link"
msgstr ""
msgstr "Legg til fillenke"
#: bookwyrm/templates/book/file_links/add_link_modal.html:19
msgid "Links from unknown domains will need to be approved by a moderator before they are added."
msgstr ""
msgstr "Lenker fra ukjente domener må være godkjent av en moderator før de kan legges til."
#: bookwyrm/templates/book/file_links/add_link_modal.html:24
msgid "URL:"
msgstr ""
msgstr "URL:"
#: bookwyrm/templates/book/file_links/add_link_modal.html:29
msgid "File type:"
msgstr ""
msgstr "Filtype:"
#: bookwyrm/templates/book/file_links/add_link_modal.html:48
msgid "Availability:"
msgstr ""
msgstr "Tilgjengelighet:"
#: bookwyrm/templates/book/file_links/edit_links.html:5
#: bookwyrm/templates/book/file_links/edit_links.html:22
#: bookwyrm/templates/book/file_links/links.html:53
msgid "Edit links"
msgstr ""
msgstr "Rediger lenker"
#: bookwyrm/templates/book/file_links/edit_links.html:11
#, python-format
msgid "\n"
" Links for \"<em>%(title)s</em>\"\n"
" "
msgstr ""
msgstr "\n"
" Lenker for \"<em>%(title)s</em>\"\n"
" "
#: bookwyrm/templates/book/file_links/edit_links.html:32
#: bookwyrm/templates/settings/link_domains/link_table.html:6
msgid "URL"
msgstr ""
msgstr "URL"
#: bookwyrm/templates/book/file_links/edit_links.html:33
#: bookwyrm/templates/settings/link_domains/link_table.html:7
msgid "Added by"
msgstr ""
msgstr "Lagt til av"
#: bookwyrm/templates/book/file_links/edit_links.html:34
#: bookwyrm/templates/settings/link_domains/link_table.html:8
msgid "Filetype"
msgstr ""
msgstr "Filtype"
#: bookwyrm/templates/book/file_links/edit_links.html:35
#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:25
@ -1143,41 +1153,41 @@ msgstr "Handlinger"
#: bookwyrm/templates/book/file_links/edit_links.html:53
#: bookwyrm/templates/book/file_links/verification_modal.html:25
msgid "Report spam"
msgstr ""
msgstr "Rapporter spam"
#: bookwyrm/templates/book/file_links/edit_links.html:97
msgid "No links available for this book."
msgstr ""
msgstr "Ingen lenker er tilgjengelig for denne boka."
#: bookwyrm/templates/book/file_links/edit_links.html:108
#: bookwyrm/templates/book/file_links/links.html:18
msgid "Add link to file"
msgstr ""
msgstr "Legg til lenke til fil"
#: bookwyrm/templates/book/file_links/file_link_page.html:6
msgid "File Links"
msgstr ""
msgstr "Fillenker"
#: bookwyrm/templates/book/file_links/links.html:9
msgid "Get a copy"
msgstr ""
msgstr "Få en kopi"
#: bookwyrm/templates/book/file_links/links.html:47
msgid "No links available"
msgstr ""
msgstr "Ingen tilgjengelige lenker"
#: bookwyrm/templates/book/file_links/verification_modal.html:5
msgid "Leaving BookWyrm"
msgstr ""
msgstr "Forlater BookWyrm"
#: bookwyrm/templates/book/file_links/verification_modal.html:11
#, python-format
msgid "This link is taking you to: <code>%(link_url)s</code>.<br> Is that where you'd like to go?"
msgstr ""
msgstr "Denne lenka sender deg til: <code>%(link_url)s</code>.<br> Er det dit du vil dra?"
#: bookwyrm/templates/book/file_links/verification_modal.html:20
msgid "Continue"
msgstr ""
msgstr "Fortsett"
#: bookwyrm/templates/book/publisher_info.html:23
#, python-format
@ -2045,7 +2055,7 @@ msgstr "Avslå"
#: bookwyrm/templates/import/tooltip.html:6
msgid "You can download your Goodreads data from the <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export page</a> of your Goodreads account."
msgstr ""
msgstr "Du kan laste ned Goodread-dataene dine fra <a href=\"https://www.goodreads.com/review/import\" target=\"_blank\" rel=\"noopener noreferrer\">Import/Export sida</a> på Goodread-kontoen din."
#: bookwyrm/templates/import/troubleshoot.html:7
msgid "Failed items"
@ -2248,12 +2258,12 @@ msgstr "BookWyrms kildekode er fritt tilgjengelig. Du kan bidra eller rapportere
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
msgstr ""
msgstr "Legg til \"<em>%(title)s</em>\" på denne lista"
#: bookwyrm/templates/lists/add_item_modal.html:12
#, python-format
msgid "Suggest \"<em>%(title)s</em>\" for this list"
msgstr ""
msgstr "Foreslå \"<em>%(title)s</em>\" for denne lista"
#: bookwyrm/templates/lists/add_item_modal.html:39
#: bookwyrm/templates/lists/list.html:249
@ -2295,7 +2305,7 @@ msgstr "Nå er du klar!"
#: bookwyrm/templates/lists/list.html:83
#, python-format
msgid "<a href=\"%(user_path)s\">%(username)s</a> says:"
msgstr ""
msgstr "<a href=\"%(user_path)s\">%(username)s</a> sier:"
#: bookwyrm/templates/lists/curate.html:55
msgid "Suggested by"
@ -2393,7 +2403,7 @@ msgstr "Notater:"
#: bookwyrm/templates/lists/item_notes_field.html:19
msgid "An optional note that will be displayed with the book."
msgstr ""
msgstr "En valgfri merknad som vil vises sammen med boken."
#: bookwyrm/templates/lists/list.html:36
msgid "You successfully suggested a book for this list!"
@ -2405,11 +2415,11 @@ msgstr "Du har nå lagt til ei bok i denne lista!"
#: bookwyrm/templates/lists/list.html:96
msgid "Edit notes"
msgstr ""
msgstr "Rediger merknader"
#: bookwyrm/templates/lists/list.html:111
msgid "Add notes"
msgstr ""
msgstr "Legg til merknader"
#: bookwyrm/templates/lists/list.html:123
#, python-format
@ -3129,8 +3139,8 @@ msgstr[1] "%(display_count)s åpne rapporter"
#, python-format
msgid "%(display_count)s domain needs review"
msgid_plural "%(display_count)s domains need review"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "%(display_count)s domene må godkjennes"
msgstr[1] "%(display_count)s domener må godkjennes"
#: bookwyrm/templates/settings/dashboard/dashboard.html:65
#, python-format
@ -3523,7 +3533,7 @@ msgstr "Rapporter"
#: bookwyrm/templates/settings/link_domains/link_domains.html:5
#: bookwyrm/templates/settings/link_domains/link_domains.html:7
msgid "Link Domains"
msgstr ""
msgstr "Lenkedomener"
#: bookwyrm/templates/settings/layout.html:72
msgid "Instance Settings"
@ -3538,57 +3548,65 @@ msgstr "Sideinnstillinger"
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:5
#, python-format
msgid "Set display name for %(url)s"
msgstr ""
msgstr "Angi visningsnavn for %(url)s"
#: bookwyrm/templates/settings/link_domains/link_domains.html:11
msgid "Link domains must be approved before they are shown on book pages. Please make sure that the domains are not hosting spam, malicious code, or deceptive links before approving."
msgstr ""
msgstr "Nettstedsdomener må godkjennes før de kan vises på boksidene. Vennligst sjekk at domenene ikke fører spam, ondsinnet kode eller lurelenker før du godkjenner."
#: bookwyrm/templates/settings/link_domains/link_domains.html:45
msgid "Set display name"
msgstr ""
msgstr "Angi visningsnavn"
#: bookwyrm/templates/settings/link_domains/link_domains.html:53
msgid "View links"
msgstr ""
msgstr "Vis lenker"
#: bookwyrm/templates/settings/link_domains/link_domains.html:96
msgid "No domains currently approved"
msgstr ""
msgstr "Ingen domener er hittil godkjent"
#: bookwyrm/templates/settings/link_domains/link_domains.html:98
msgid "No domains currently pending"
msgstr ""
msgstr "Ingen domener venter for tiden på godkjenning"
#: bookwyrm/templates/settings/link_domains/link_domains.html:100
msgid "No domains currently blocked"
msgstr ""
msgstr "Ingen domener er for øyeblikket blokkert"
#: bookwyrm/templates/settings/link_domains/link_table.html:39
msgid "No links available for this domain."
msgstr ""
msgstr "Ingen lenker tilgjengelig til dette domenet."
#: bookwyrm/templates/settings/reports/report.html:11
msgid "Back to reports"
msgstr "Tilbake til rapporter"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Send melding til rapportør"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Oppdatering på din rapport:"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Rapporterte statuser"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "Status er slettet"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr ""
msgstr "Rapporterte lenker"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Moderatorkommentarer"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Kommentar"
@ -3596,21 +3614,21 @@ msgstr "Kommentar"
#: bookwyrm/templates/settings/reports/report_header.html:6
#, python-format
msgid "Report #%(report_id)s: Status posted by @%(username)s"
msgstr ""
msgstr "Rapportér #%(report_id)s: Status postet av @%(username)s"
#: bookwyrm/templates/settings/reports/report_header.html:12
#, python-format
msgid "Report #%(report_id)s: Link added by @%(username)s"
msgstr ""
msgstr "Rapportér #%(report_id)s: Lenke lagt til av @%(username)s"
#: bookwyrm/templates/settings/reports/report_header.html:18
#, python-format
msgid "Report #%(report_id)s: User @%(username)s"
msgstr ""
msgstr "Rapportér #%(report_id)s: bruker @%(username)s"
#: bookwyrm/templates/settings/reports/report_links_table.html:17
msgid "Block domain"
msgstr ""
msgstr "Blokkér domene"
#: bookwyrm/templates/settings/reports/report_preview.html:17
msgid "No notes provided"
@ -3619,7 +3637,7 @@ msgstr "Ingen merknader finnes"
#: bookwyrm/templates/settings/reports/report_preview.html:24
#, python-format
msgid "Reported by <a href=\"%(path)s\">@%(username)s</a>"
msgstr ""
msgstr "Rapportert av <a href=\"%(path)s\">%(username)s</a>"
#: bookwyrm/templates/settings/reports/report_preview.html:34
msgid "Re-open"
@ -3865,7 +3883,7 @@ msgstr "Slettet for godt"
#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
msgid "User Actions"
msgstr ""
msgstr "Brukerhandlinger"
#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
msgid "Suspend user"
@ -4013,14 +4031,14 @@ msgstr "prosent"
msgid "of %(pages)s pages"
msgstr "av %(pages)s sider"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Svar"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Innhold"
@ -4098,7 +4116,7 @@ msgstr "Filtrert visning"
msgid "Clear filters"
msgstr "Tøm filtre"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Bruk filtre"
@ -4167,13 +4185,13 @@ msgstr[1] "vurderte <em><a href=\"%(path)s\">%(title)s</a></em> til: %(display_r
#, python-format
msgid "Review of \"%(book_title)s\" (%(display_rating)s star): %(review_title)s"
msgid_plural "Review of \"%(book_title)s\" (%(display_rating)s stars): %(review_title)s"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Anmeldelse av \"%(book_title)s\" (%(display_rating)s stjerne): %(review_title)s"
msgstr[1] "Anmeldelse av \"%(book_title)s\" (%(display_rating)s stjerner): %(review_title)s"
#: bookwyrm/templates/snippets/generated_status/review_pure_name.html:12
#, python-format
msgid "Review of \"%(book_title)s\": %(review_title)s"
msgstr ""
msgstr "Anmeldelse av \"%(book_title)s\": %(review_title)s"
#: bookwyrm/templates/snippets/goal_form.html:4
#, python-format
@ -4282,12 +4300,12 @@ msgstr "Registrer deg"
#: bookwyrm/templates/snippets/report_modal.html:8
#, python-format
msgid "Report @%(username)s's status"
msgstr ""
msgstr "Rapportér @%(username)s sin status"
#: bookwyrm/templates/snippets/report_modal.html:10
#, python-format
msgid "Report %(domain)s link"
msgstr ""
msgstr "Rapportér %(domain)s lenke"
#: bookwyrm/templates/snippets/report_modal.html:12
#, python-format
@ -4301,7 +4319,7 @@ msgstr "Denne rapporten vil bli sendt til %(site_name)s sine moderatorer for gje
#: bookwyrm/templates/snippets/report_modal.html:36
msgid "Links from this domain will be removed until your report has been reviewed."
msgstr ""
msgstr "Lenker fra dette domenet vil fjernes fram til rapporten din er ferbigbehandlet."
#: bookwyrm/templates/snippets/report_modal.html:41
msgid "More info about this report:"
@ -4665,6 +4683,6 @@ msgstr "Statusoppdateringer fra {obj.display_name}"
#, python-format
msgid "Load %(count)d unread status"
msgid_plural "Load %(count)d unread statuses"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Last inn %(count)d ulest status"
msgstr[1] "Last inn %(count)d uleste statuser"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-29 14:28\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 22:13\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr "Domínio bloqueado. Não tente adicionar este endereço novamente."
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr "Domínio já pendente. Por favor, tente novamente mais tarde."
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Já existe um usuário com este endereço de e-mail."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Um dia"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Uma semana"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Um mês"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Não expira"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} usos"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Ilimitado"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Ordem de inserção"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Título do livro"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Avaliação"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Organizar por"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Crescente"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Decrescente"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "A data de término da leitura não pode ser anterior a de início."
@ -140,26 +148,26 @@ msgstr "Federado"
msgid "Blocked"
msgstr "Bloqueado"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s não é um remote_id válido"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s não é um nome de usuário válido"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "nome de usuário"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Já existe um usuário com este nome."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Já existe um usuário com este nome."
msgid "Public"
msgstr "Público"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Público"
msgid "Unlisted"
msgstr "Não listado"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Seguidores"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Português Europeu)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr "Sueco (Svenska)"
msgid "Svenska (Swedish)"
msgstr "Svenska (Sueco)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Admin"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Enviar mensagem direta"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Propriedades físicas"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Formato:"
@ -1055,17 +1063,17 @@ msgstr "Edições de %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Edições de <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Qualquer um"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Idioma:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Procurar edições"
@ -3574,23 +3582,31 @@ msgstr "Nenhum link disponível para este domínio."
msgid "Back to reports"
msgstr "Voltar às denúncias"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Enviar mensagem a quem denunciou"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Atualização sobre sua denúncia:"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Publicações denunciadas"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "A publicação foi excluída"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Links denunciados"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Comentários da moderação"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Comentar"
@ -4015,14 +4031,14 @@ msgstr "porcentagem"
msgid "of %(pages)s pages"
msgstr "de %(pages)s páginas"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Responder"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Conteúdo"
@ -4100,7 +4116,7 @@ msgstr "Filtros aplicados"
msgid "Clear filters"
msgstr "Limpar filtros"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Aplicar filtros"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 04:03\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:00\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Portuguese\n"
"Language: pt\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "Já existe um utilizador com este E-Mail."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "Um Dia"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "Uma Semana"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "Um Mês"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Não Expira"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} utilizações"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Ilimitado"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Ordem da Lista"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Título do livro"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Classificação"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Ordenar Por"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Ascendente"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Descendente"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr ""
@ -140,26 +148,26 @@ msgstr "Federado"
msgid "Blocked"
msgstr "Bloqueado"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s não é um remote_id válido"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s não é um nome de utilizador válido"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "nome de utilizador"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "Um utilizador com o mesmo nome de utilizador já existe."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "Um utilizador com o mesmo nome de utilizador já existe."
msgid "Public"
msgstr "Público"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Público"
msgid "Unlisted"
msgstr "Não listado"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Seguidores"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,7 +291,7 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português (Português Europeu)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgid "Svenska (Swedish)"
msgstr ""
#: bookwyrm/settings.py:259
@ -369,7 +377,7 @@ msgstr "Admin"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Enviar mensagem direta"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Propriedades físicas"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Formato:"
@ -1055,17 +1063,17 @@ msgstr "Edições de %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Edições de <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Qualquer"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Idioma:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Pesquisar edições"
@ -3572,23 +3580,31 @@ msgstr ""
msgid "Back to reports"
msgstr "Voltar para denúncias"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Estados denunciados"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "O estado foi eliminado"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Comentários do Moderador"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Comentar"
@ -4013,14 +4029,14 @@ msgstr "porcento"
msgid "of %(pages)s pages"
msgstr "%(pages)s páginas"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Responder"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Conteúdo"
@ -4098,7 +4114,7 @@ msgstr "Filtros aplicados"
msgid "Clear filters"
msgstr "Limpar filtros"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Aplicar filtros"

Binary file not shown.

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 04:03\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:00\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Swedish\n"
"Language: sv\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "En användare med den här e-postadressen existerar redan."
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "En dag"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "En vecka"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "En månad"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "Slutar inte gälla"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} använder"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "Obegränsad"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "Listordning"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "Bokens titel"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "Betyg"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "Sortera efter"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "Stigande"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "Fallande"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr "Slutdatum för läsning kan inte vara före startdatum."
@ -140,26 +148,26 @@ msgstr "Federerad"
msgid "Blocked"
msgstr "Blockerad"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s är inte ett giltigt remote_id"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s är inte ett giltigt användarnamn"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "användarnamn"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "En användare med det användarnamnet existerar redan."
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "En användare med det användarnamnet existerar redan."
msgid "Public"
msgstr "Publik"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "Publik"
msgid "Unlisted"
msgstr "Ej listad"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "Följare"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,8 +291,8 @@ msgid "Português Europeu (European Portuguese)"
msgstr "Português Europeu (Europeisk Portugisiska)"
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgstr ""
msgid "Svenska (Swedish)"
msgstr "Svenska (Svenska)"
#: bookwyrm/settings.py:259
msgid "简体中文 (Simplified Chinese)"
@ -369,7 +377,7 @@ msgstr "Administratör"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "Skicka direktmeddelande"
@ -1017,7 +1025,7 @@ msgid "Physical Properties"
msgstr "Fysiska egenskaper"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "Format:"
@ -1055,17 +1063,17 @@ msgstr "Utgåvor av %(book_title)s"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "Utgåvor av <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "Alla"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "Språk:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "Sök efter utgåvor"
@ -2020,7 +2028,7 @@ msgstr "Försök igen"
#: bookwyrm/templates/import/import_status.html:223
msgid "This import is in an old format that is no longer supported. If you would like to troubleshoot missing items from this import, click the button below to update the import format."
msgstr ""
msgstr "Den här importen är i ett gammalt format som inte längre stöds. Om du vill felsöka saknade objekt från denna import, klicka på knappen nedan för att uppdatera importformat."
#: bookwyrm/templates/import/import_status.html:225
msgid "Update import"
@ -2250,12 +2258,12 @@ msgstr "BookWyrm's källkod är fritt tillgängligt. Du kan bidra eller rapporte
#: bookwyrm/templates/lists/add_item_modal.html:8
#, python-format
msgid "Add \"<em>%(title)s</em>\" to this list"
msgstr ""
msgstr "Lägg till \"<em>%(title)s</em>\" i den här listan"
#: bookwyrm/templates/lists/add_item_modal.html:12
#, python-format
msgid "Suggest \"<em>%(title)s</em>\" for this list"
msgstr ""
msgstr "Föreslå \"<em>%(title)s</em>\" för den här listan"
#: bookwyrm/templates/lists/add_item_modal.html:39
#: bookwyrm/templates/lists/list.html:249
@ -2297,7 +2305,7 @@ msgstr "Nu är du klar!"
#: bookwyrm/templates/lists/list.html:83
#, python-format
msgid "<a href=\"%(user_path)s\">%(username)s</a> says:"
msgstr ""
msgstr "<a href=\"%(user_path)s\">%(username)s</a> säger:"
#: bookwyrm/templates/lists/curate.html:55
msgid "Suggested by"
@ -2395,7 +2403,7 @@ msgstr "Anteckningar:"
#: bookwyrm/templates/lists/item_notes_field.html:19
msgid "An optional note that will be displayed with the book."
msgstr ""
msgstr "En valfri anteckning som kommer att visas med boken."
#: bookwyrm/templates/lists/list.html:36
msgid "You successfully suggested a book for this list!"
@ -2407,11 +2415,11 @@ msgstr "Du lade framgångsrikt till en bok i här listan!"
#: bookwyrm/templates/lists/list.html:96
msgid "Edit notes"
msgstr ""
msgstr "Redigera anteckningar"
#: bookwyrm/templates/lists/list.html:111
msgid "Add notes"
msgstr ""
msgstr "Lägg till anteckningar"
#: bookwyrm/templates/lists/list.html:123
#, python-format
@ -3574,23 +3582,31 @@ msgstr "Inga länkar tillgängliga för den här domänen."
msgid "Back to reports"
msgstr "Tillbaka till rapporter"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr "Meddela rapportören"
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr "Uppdatering av din rapport:"
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "Rapporterade statusar"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "Statusen har tagits bort"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr "Rapporterade länkar"
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "Moderatorns kommentarer"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "Kommentar"
@ -4015,14 +4031,14 @@ msgstr "procent"
msgid "of %(pages)s pages"
msgstr "av %(pages)s sidor"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "Svara"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "Innehåll"
@ -4100,7 +4116,7 @@ msgstr "Filtren är verkställda"
msgid "Clear filters"
msgstr "Rensa filtren"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "Verkställ filtren"

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 04:03\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:01\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Chinese Simplified\n"
"Language: zh\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "已经存在使用该邮箱的用户。"
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "一天"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "一周"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "一个月"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "永不失效"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr "{i} 次使用"
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "不受限"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "列表顺序"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "书名"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "评价"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "排序方式"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "升序"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "降序"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr ""
@ -140,26 +148,26 @@ msgstr "跨站"
msgid "Blocked"
msgstr "已屏蔽"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s 不是有效的 remote_id"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s 不是有效的用户名"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "用户名"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "已经存在使用该用户名的用户。"
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "已经存在使用该用户名的用户。"
msgid "Public"
msgstr "公开"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "公开"
msgid "Unlisted"
msgstr "不公开"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "关注者"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,7 +291,7 @@ msgid "Português Europeu (European Portuguese)"
msgstr ""
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgid "Svenska (Swedish)"
msgstr ""
#: bookwyrm/settings.py:259
@ -369,7 +377,7 @@ msgstr "管理员"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "发送私信"
@ -1012,7 +1020,7 @@ msgid "Physical Properties"
msgstr "实体性质"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "格式:"
@ -1050,17 +1058,17 @@ msgstr "%(book_title)s 的各版本"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "<a href=\"%(work_path)s\">《%(work_title)s》</a> 的各版本"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "所有"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "语言:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr "搜索版本"
@ -3557,23 +3565,31 @@ msgstr ""
msgid "Back to reports"
msgstr "回到报告"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "被报告的状态"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "状态已被删除"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "监察员评论"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "评论"
@ -3996,14 +4012,14 @@ msgstr "百分比"
msgid "of %(pages)s pages"
msgstr "全书 %(pages)s 页"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "回复"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "内容"
@ -4081,7 +4097,7 @@ msgstr ""
msgid "Clear filters"
msgstr "清除过滤器"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "应用过滤器"

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-28 02:50+0000\n"
"PO-Revision-Date: 2022-01-28 04:03\n"
"POT-Creation-Date: 2022-02-02 20:09+0000\n"
"PO-Revision-Date: 2022-02-04 21:01\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: Chinese Traditional\n"
"Language: zh\n"
@ -17,62 +17,70 @@ msgstr ""
"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n"
"X-Crowdin-File-ID: 1553\n"
#: bookwyrm/forms.py:365
#: bookwyrm/forms.py:239
msgid "Domain is blocked. Don't try this url again."
msgstr ""
#: bookwyrm/forms.py:241
msgid "Domain already pending. Please try later."
msgstr ""
#: bookwyrm/forms.py:378
msgid "A user with this email already exists."
msgstr "已經存在使用該郵箱的使用者。"
#: bookwyrm/forms.py:379
#: bookwyrm/forms.py:392
msgid "One Day"
msgstr "一天"
#: bookwyrm/forms.py:380
#: bookwyrm/forms.py:393
msgid "One Week"
msgstr "一週"
#: bookwyrm/forms.py:381
#: bookwyrm/forms.py:394
msgid "One Month"
msgstr "一個月"
#: bookwyrm/forms.py:382
#: bookwyrm/forms.py:395
msgid "Does Not Expire"
msgstr "永不失效"
#: bookwyrm/forms.py:386
#: bookwyrm/forms.py:399
#, python-brace-format
msgid "{i} uses"
msgstr ""
#: bookwyrm/forms.py:387
#: bookwyrm/forms.py:400
msgid "Unlimited"
msgstr "不受限"
#: bookwyrm/forms.py:489
#: bookwyrm/forms.py:502
msgid "List Order"
msgstr "列表順序"
#: bookwyrm/forms.py:490
#: bookwyrm/forms.py:503
msgid "Book Title"
msgstr "書名"
#: bookwyrm/forms.py:491 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/forms.py:504 bookwyrm/templates/shelf/shelf.html:155
#: bookwyrm/templates/shelf/shelf.html:187
#: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Rating"
msgstr "評價"
#: bookwyrm/forms.py:493 bookwyrm/templates/lists/list.html:177
#: bookwyrm/forms.py:506 bookwyrm/templates/lists/list.html:177
msgid "Sort By"
msgstr "排序方式"
#: bookwyrm/forms.py:497
#: bookwyrm/forms.py:510
msgid "Ascending"
msgstr "升序"
#: bookwyrm/forms.py:498
#: bookwyrm/forms.py:511
msgid "Descending"
msgstr "降序"
#: bookwyrm/forms.py:511
#: bookwyrm/forms.py:524
msgid "Reading finish date cannot be before start date."
msgstr ""
@ -140,26 +148,26 @@ msgstr "跨站"
msgid "Blocked"
msgstr "已封鎖"
#: bookwyrm/models/fields.py:29
#: bookwyrm/models/fields.py:27
#, python-format
msgid "%(value)s is not a valid remote_id"
msgstr "%(value)s 不是有效的 remote_id"
#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
#: bookwyrm/models/fields.py:36 bookwyrm/models/fields.py:45
#, python-format
msgid "%(value)s is not a valid username"
msgstr "%(value)s 不是有效的使用者名稱"
#: bookwyrm/models/fields.py:183 bookwyrm/templates/layout.html:170
#: bookwyrm/models/fields.py:181 bookwyrm/templates/layout.html:170
#: bookwyrm/templates/ostatus/error.html:29
msgid "username"
msgstr "使用者名稱"
#: bookwyrm/models/fields.py:188
#: bookwyrm/models/fields.py:186
msgid "A user with that username already exists."
msgstr "已經存在使用該名稱的使用者。"
#: bookwyrm/models/fields.py:207
#: bookwyrm/models/fields.py:205
#: bookwyrm/templates/snippets/privacy-icons.html:3
#: bookwyrm/templates/snippets/privacy-icons.html:4
#: bookwyrm/templates/snippets/privacy_select.html:11
@ -167,7 +175,7 @@ msgstr "已經存在使用該名稱的使用者。"
msgid "Public"
msgstr "公開"
#: bookwyrm/models/fields.py:208
#: bookwyrm/models/fields.py:206
#: bookwyrm/templates/snippets/privacy-icons.html:7
#: bookwyrm/templates/snippets/privacy-icons.html:8
#: bookwyrm/templates/snippets/privacy_select.html:14
@ -175,14 +183,14 @@ msgstr "公開"
msgid "Unlisted"
msgstr "不公開"
#: bookwyrm/models/fields.py:209
#: bookwyrm/models/fields.py:207
#: bookwyrm/templates/snippets/privacy_select.html:17
#: bookwyrm/templates/user/relationships/followers.html:6
#: bookwyrm/templates/user/relationships/layout.html:11
msgid "Followers"
msgstr "關注者"
#: bookwyrm/models/fields.py:210
#: bookwyrm/models/fields.py:208
#: bookwyrm/templates/snippets/create_status/post_options_block.html:8
#: bookwyrm/templates/snippets/privacy-icons.html:15
#: bookwyrm/templates/snippets/privacy-icons.html:16
@ -283,7 +291,7 @@ msgid "Português Europeu (European Portuguese)"
msgstr ""
#: bookwyrm/settings.py:258
msgid "Swedish (Svenska)"
msgid "Svenska (Swedish)"
msgstr ""
#: bookwyrm/settings.py:259
@ -369,7 +377,7 @@ msgstr "管理員"
#: bookwyrm/templates/about/about.html:131
#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:13
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
msgstr "發送私信"
@ -1012,7 +1020,7 @@ msgid "Physical Properties"
msgstr "實體性質"
#: bookwyrm/templates/book/edit/edit_book_form.html:199
#: bookwyrm/templates/book/editions/format_filter.html:5
#: bookwyrm/templates/book/editions/format_filter.html:6
msgid "Format:"
msgstr "格式:"
@ -1050,17 +1058,17 @@ msgstr "%(book_title)s 的各版本"
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> 的各版本"
#: bookwyrm/templates/book/editions/format_filter.html:8
#: bookwyrm/templates/book/editions/language_filter.html:8
#: bookwyrm/templates/book/editions/format_filter.html:9
#: bookwyrm/templates/book/editions/language_filter.html:9
msgid "Any"
msgstr "所有"
#: bookwyrm/templates/book/editions/language_filter.html:5
#: bookwyrm/templates/book/editions/language_filter.html:6
#: bookwyrm/templates/preferences/edit_user.html:95
msgid "Language:"
msgstr "語言:"
#: bookwyrm/templates/book/editions/search_filter.html:5
#: bookwyrm/templates/book/editions/search_filter.html:6
msgid "Search editions"
msgstr ""
@ -3557,23 +3565,31 @@ msgstr ""
msgid "Back to reports"
msgstr "回到舉報"
#: bookwyrm/templates/settings/reports/report.html:22
#: bookwyrm/templates/settings/reports/report.html:23
msgid "Message reporter"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:27
msgid "Update on your report:"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:35
msgid "Reported statuses"
msgstr "被舉報的狀態"
#: bookwyrm/templates/settings/reports/report.html:27
#: bookwyrm/templates/settings/reports/report.html:40
msgid "Status has been deleted"
msgstr "狀態已被刪除"
#: bookwyrm/templates/settings/reports/report.html:39
#: bookwyrm/templates/settings/reports/report.html:52
msgid "Reported links"
msgstr ""
#: bookwyrm/templates/settings/reports/report.html:55
#: bookwyrm/templates/settings/reports/report.html:68
msgid "Moderator Comments"
msgstr "監察員評論"
#: bookwyrm/templates/settings/reports/report.html:73
#: bookwyrm/templates/settings/reports/report.html:89
#: bookwyrm/templates/snippets/create_status.html:28
msgid "Comment"
msgstr "評論"
@ -3996,14 +4012,14 @@ msgstr "百分比"
msgid "of %(pages)s pages"
msgstr "全書 %(pages)s 頁"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
#: bookwyrm/templates/snippets/status/layout.html:34
#: bookwyrm/templates/snippets/status/layout.html:53
#: bookwyrm/templates/snippets/status/layout.html:54
msgid "Reply"
msgstr "回覆"
#: bookwyrm/templates/snippets/create_status/content_field.html:17
#: bookwyrm/templates/snippets/create_status/content_field.html:18
msgid "Content"
msgstr "內容"
@ -4081,7 +4097,7 @@ msgstr ""
msgid "Clear filters"
msgstr "清除過濾器"
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:42
#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
msgid "Apply filters"
msgstr "使用過濾器"

View file

@ -1,12 +1,12 @@
celery==5.2.2
colorthief==0.2.1
Django==3.2.11
Django==3.2.12
django-imagekit==4.1.0
django-model-utils==4.0.0
environs==9.3.4
flower==1.0.0
Markdown==3.3.3
Pillow>=8.2.0
Pillow>=9.0.0
psycopg2==2.8.4
pycryptodome==3.9.4
python-dateutil==2.8.1
@ -18,9 +18,13 @@ pytz>=2021.1
boto3==1.17.88
django-storages==1.11.1
django-redis==5.2.0
opentelemetry-api==1.8.0
opentelemetry-sdk==1.8.0
opentelemetry-exporter-otlp-proto-grpc==1.8.0
opentelemetry-instrumentation-django==0.27b0
opentelemetry-instrumentation-celery==0.27b0
# Dev
black==21.4b2
pytest-django==4.1.0
pytest==6.1.2
pytest-cov==2.10.1

1583
yarn.lock

File diff suppressed because it is too large Load diff