diff --git a/.env.example b/.env.example index fb0f7308d1..1bf6d5406f 100644 --- a/.env.example +++ b/.env.example @@ -137,3 +137,10 @@ TWO_FACTOR_LOGIN_MAX_SECONDS=60 # and AWS_S3_CUSTOM_DOMAIN (if used) are added by default. # Value should be a comma-separated list of host names. CSP_ADDITIONAL_HOSTS= + +# Time before being logged out (in seconds) +# SESSION_COOKIE_AGE=2592000 # current default: 30 days + +# Maximum allowed memory for file uploads (increase if users are having trouble +# uploading BookWyrm export files). +# DATA_UPLOAD_MAX_MEMORY_MiB=100 diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml deleted file mode 100644 index 4e7be4af37..0000000000 --- a/.github/workflows/black.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Python Formatting (run ./bw-dev black to fix) - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - - uses: psf/black@22.12.0 - with: - version: 22.12.0 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 68bb05d7e5..51316ef627 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/curlylint.yaml b/.github/workflows/curlylint.yaml index 8d5c6b4f7b..10ad04ce14 100644 --- a/.github/workflows/curlylint.yaml +++ b/.github/workflows/curlylint.yaml @@ -10,7 +10,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install curlylint run: pip install curlylint diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml deleted file mode 100644 index 78b6e142ed..0000000000 --- a/.github/workflows/django-tests.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Run Python Tests -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - runs-on: ubuntu-20.04 - services: - postgres: - image: postgres:13 - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: hunter2 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.9 - - name: Install Dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - name: Check migrations up-to-date - run: | - python ./manage.py makemigrations --check - env: - SECRET_KEY: beepbeep - DOMAIN: your.domain.here - EMAIL_HOST: "" - EMAIL_HOST_USER: "" - EMAIL_HOST_PASSWORD: "" - - name: Run Tests - env: - SECRET_KEY: beepbeep - DEBUG: false - USE_HTTPS: true - DOMAIN: your.domain.here - BOOKWYRM_DATABASE_BACKEND: postgres - MEDIA_ROOT: images/ - POSTGRES_PASSWORD: hunter2 - POSTGRES_USER: postgres - POSTGRES_DB: github_actions - POSTGRES_HOST: 127.0.0.1 - CELERY_BROKER: "" - REDIS_BROKER_PORT: 6379 - REDIS_BROKER_PASSWORD: beep - USE_DUMMY_CACHE: true - FLOWER_PORT: 8888 - EMAIL_HOST: "smtp.mailgun.org" - EMAIL_PORT: 587 - EMAIL_HOST_USER: "" - EMAIL_HOST_PASSWORD: "" - EMAIL_USE_TLS: true - ENABLE_PREVIEW_IMAGES: false - ENABLE_THUMBNAIL_GENERATION: true - HTTP_X_FORWARDED_PROTO: false - run: | - pytest -n 3 diff --git a/.github/workflows/lint-frontend.yaml b/.github/workflows/lint-frontend.yaml index 0d0559e406..21f11ebf3f 100644 --- a/.github/workflows/lint-frontend.yaml +++ b/.github/workflows/lint-frontend.yaml @@ -19,7 +19,7 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it. - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install modules run: npm install stylelint stylelint-config-recommended stylelint-config-standard stylelint-order eslint diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml deleted file mode 100644 index 1a641edd28..0000000000 --- a/.github/workflows/mypy.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Mypy - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.9 - uses: actions/setup-python@v4 - with: - python-version: 3.9 - - name: Install Dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - name: Analysing the code with mypy - env: - SECRET_KEY: beepbeep - DEBUG: false - USE_HTTPS: true - DOMAIN: your.domain.here - BOOKWYRM_DATABASE_BACKEND: postgres - MEDIA_ROOT: images/ - POSTGRES_PASSWORD: hunter2 - POSTGRES_USER: postgres - POSTGRES_DB: github_actions - POSTGRES_HOST: 127.0.0.1 - CELERY_BROKER: "" - REDIS_BROKER_PORT: 6379 - REDIS_BROKER_PASSWORD: beep - USE_DUMMY_CACHE: true - FLOWER_PORT: 8888 - EMAIL_HOST: "smtp.mailgun.org" - EMAIL_PORT: 587 - EMAIL_HOST_USER: "" - EMAIL_HOST_PASSWORD: "" - EMAIL_USE_TLS: true - ENABLE_PREVIEW_IMAGES: false - ENABLE_THUMBNAIL_GENERATION: true - HTTP_X_FORWARDED_PROTO: false - run: | - mypy bookwyrm celerywyrm diff --git a/.github/workflows/prettier.yaml b/.github/workflows/prettier.yaml index 501516ae18..9c05c7476b 100644 --- a/.github/workflows/prettier.yaml +++ b/.github/workflows/prettier.yaml @@ -14,7 +14,7 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it. - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install modules run: npm install prettier@2.5.1 diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml deleted file mode 100644 index 3811c97d38..0000000000 --- a/.github/workflows/pylint.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Pylint - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.9 - uses: actions/setup-python@v4 - with: - python-version: 3.9 - - name: Install Dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - name: Analysing the code with pylint - run: | - pylint bookwyrm/ - diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml new file mode 100644 index 0000000000..dcbe05aee1 --- /dev/null +++ b/.github/workflows/python.yml @@ -0,0 +1,99 @@ +name: Python +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +# overrides for .env.example +env: + POSTGRES_HOST: 127.0.0.1 + PGPORT: 5432 + POSTGRES_USER: postgres + POSTGRES_PASSWORD: hunter2 + POSTGRES_DB: github_actions + SECRET_KEY: beepbeep + EMAIL_HOST_USER: "" + EMAIL_HOST_PASSWORD: "" + +jobs: + pytest: + name: Tests (pytest) + runs-on: ubuntu-latest + services: + postgres: + image: postgres:13 + env: # does not inherit from jobs.build.env + POSTGRES_USER: postgres + POSTGRES_PASSWORD: hunter2 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + cache: pip + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pytest-github-actions-annotate-failures + - name: Set up .env + run: cp .env.example .env + - name: Check migrations up-to-date + run: python ./manage.py makemigrations --check + - name: Run Tests + run: pytest -n 3 + + pylint: + name: Linting (pylint) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + cache: pip + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Analyse code with pylint + run: pylint bookwyrm/ + + mypy: + name: Typing (mypy) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + cache: pip + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Set up .env + run: cp .env.example .env + - name: Analyse code with mypy + run: mypy bookwyrm celerywyrm + + black: + name: Formatting (black; run ./bw-dev black to fix) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + - uses: psf/black@22.12.0 + with: + version: 22.12.0 diff --git a/Dockerfile b/Dockerfile index b3cd26e887..82b0c92c50 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.11 ENV PYTHONUNBUFFERED 1 diff --git a/VERSION b/VERSION index faef31a435..7486fdbc50 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.0 +0.7.2 diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index aa4b5b6877..efc9d8da2f 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -20,6 +20,7 @@ logger = logging.getLogger(__name__) +# pylint: disable=invalid-name TBookWyrmModel = TypeVar("TBookWyrmModel", bound=base_model.BookWyrmModel) @@ -236,7 +237,7 @@ def serialize(self, **kwargs): omit = kwargs.get("omit", ()) data = self.__dict__.copy() # recursively serialize - for (k, v) in data.items(): + for k, v in data.items(): try: if issubclass(type(v), ActivityObject): data[k] = v.serialize() @@ -397,18 +398,14 @@ def resolve_remote_id( def get_representative(): """Get or create an actor representing the instance to sign outgoing HTTP GET requests""" - username = f"{INSTANCE_ACTOR_USERNAME}@{DOMAIN}" - email = "bookwyrm@localhost" - try: - user = models.User.objects.get(username=username) - except models.User.DoesNotExist: - user = models.User.objects.create_user( - username=username, - email=email, + return models.User.objects.get_or_create( + username=f"{INSTANCE_ACTOR_USERNAME}@{DOMAIN}", + defaults=dict( + email="bookwyrm@localhost", local=True, localname=INSTANCE_ACTOR_USERNAME, - ) - return user + ), + )[0] def get_activitypub_data(url): @@ -427,6 +424,7 @@ def get_activitypub_data(url): "Date": now, "Signature": make_signature("get", sender, url, now), }, + timeout=15, ) except requests.RequestException: raise ConnectorException() diff --git a/bookwyrm/activitypub/person.py b/bookwyrm/activitypub/person.py index 85cf444099..dfec92e4cf 100644 --- a/bookwyrm/activitypub/person.py +++ b/bookwyrm/activitypub/person.py @@ -1,5 +1,5 @@ """ actor serializer """ -from dataclasses import dataclass, field +from dataclasses import dataclass from typing import Dict from .base_activity import ActivityObject @@ -35,7 +35,7 @@ class Person(ActivityObject): endpoints: Dict = None name: str = None summary: str = None - icon: Image = field(default_factory=lambda: {}) + icon: Image = None bookwyrmUser: bool = False manuallyApprovesFollowers: str = False discoverable: str = False diff --git a/bookwyrm/activitypub/verbs.py b/bookwyrm/activitypub/verbs.py index 00c9524fef..a365f4cc07 100644 --- a/bookwyrm/activitypub/verbs.py +++ b/bookwyrm/activitypub/verbs.py @@ -171,9 +171,19 @@ class Reject(Verb): type: str = "Reject" def action(self, allow_external_connections=True): - """reject a follow request""" - obj = self.object.to_model(save=False, allow_create=False) - obj.reject() + """reject a follow or follow request""" + + for model_name in ["UserFollowRequest", "UserFollows", None]: + model = apps.get_model(f"bookwyrm.{model_name}") if model_name else None + if obj := self.object.to_model( + model=model, + save=False, + allow_create=False, + allow_external_connections=allow_external_connections, + ): + # Reject the first model that can be built. + obj.reject() + break @dataclass(init=False) diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index ceb228f40c..cf48f4832e 100644 --- a/bookwyrm/book_search.py +++ b/bookwyrm/book_search.py @@ -43,6 +43,7 @@ def search( min_confidence: float = 0, filters: Optional[list[Any]] = None, return_first: bool = False, + books: Optional[QuerySet[models.Edition]] = None, ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: """search your local database""" filters = filters or [] @@ -54,13 +55,15 @@ def search( # first, try searching unique identifiers # unique identifiers never have spaces, title/author usually do if not " " in query: - results = search_identifiers(query, *filters, return_first=return_first) + results = search_identifiers( + query, *filters, return_first=return_first, books=books + ) # if there were no identifier results... if not results: # then try searching title/author results = search_title_author( - query, min_confidence, *filters, return_first=return_first + query, min_confidence, *filters, return_first=return_first, books=books ) return results @@ -98,9 +101,17 @@ def format_search_result(search_result): def search_identifiers( - query, *filters, return_first=False + query, + *filters, + return_first=False, + books=None, ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: - """tries remote_id, isbn; defined as dedupe fields on the model""" + """search Editions by deduplication fields + + Best for cases when we can assume someone is searching for an exact match on + commonly unique data identifiers like isbn or specific library ids. + """ + books = books or models.Edition.objects if connectors.maybe_isbn(query): # Oh did you think the 'S' in ISBN stood for 'standard'? normalized_isbn = query.strip().upper().rjust(10, "0") @@ -111,7 +122,7 @@ def search_identifiers( for f in models.Edition._meta.get_fields() if hasattr(f, "deduplication_field") and f.deduplication_field ] - results = models.Edition.objects.filter( + results = books.filter( *filters, reduce(operator.or_, (Q(**f) for f in or_filters)) ).distinct() @@ -121,12 +132,17 @@ def search_identifiers( def search_title_author( - query, min_confidence, *filters, return_first=False + query, + min_confidence, + *filters, + return_first=False, + books=None, ) -> QuerySet[models.Edition]: """searches for title and author""" + books = books or models.Edition.objects query = SearchQuery(query, config="simple") | SearchQuery(query, config="english") results = ( - models.Edition.objects.filter(*filters, search_vector=query) + books.filter(*filters, search_vector=query) .annotate(rank=SearchRank(F("search_vector"), query)) .filter(rank__gt=min_confidence) .order_by("-rank") @@ -137,7 +153,7 @@ def search_title_author( # filter out multiple editions of the same work list_results = [] - for work_id in set(editions_of_work[:30]): + for work_id in editions_of_work[:30]: result = ( results.filter(parent_work=work_id) .order_by("-rank", "-edition_rank") diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 8b6dcb8858..aa8edbeae9 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -3,7 +3,9 @@ from abc import ABC, abstractmethod from typing import Optional, TypedDict, Any, Callable, Union, Iterator from urllib.parse import quote_plus -import imghdr + +# pylint: disable-next=deprecated-module +import imghdr # Deprecated in 3.11 for removal in 3.13; no good alternative yet import logging import re import asyncio diff --git a/bookwyrm/forms/books.py b/bookwyrm/forms/books.py index 4885dc0632..f73ce3f5a3 100644 --- a/bookwyrm/forms/books.py +++ b/bookwyrm/forms/books.py @@ -1,8 +1,9 @@ """ using django model forms """ from django import forms +from file_resubmit.widgets import ResubmitImageWidget + from bookwyrm import models -from bookwyrm.models.fields import ClearableFileInputWithWarning from .custom_form import CustomForm from .widgets import ArrayWidget, SelectDateWidget, Select @@ -70,9 +71,7 @@ class Meta: "published_date": SelectDateWidget( attrs={"aria-describedby": "desc_published_date"} ), - "cover": ClearableFileInputWithWarning( - attrs={"aria-describedby": "desc_cover"} - ), + "cover": ResubmitImageWidget(attrs={"aria-describedby": "desc_cover"}), "physical_format": Select( attrs={"aria-describedby": "desc_physical_format"} ), diff --git a/bookwyrm/forms/forms.py b/bookwyrm/forms/forms.py index ea60937500..3d555f308d 100644 --- a/bookwyrm/forms/forms.py +++ b/bookwyrm/forms/forms.py @@ -25,6 +25,10 @@ class ImportForm(forms.Form): csv_file = forms.FileField() +class ImportUserForm(forms.Form): + archive_file = forms.FileField() + + class ShelfForm(CustomForm): class Meta: model = models.Shelf diff --git a/bookwyrm/forms/links.py b/bookwyrm/forms/links.py index d2fd5f1162..345c5c1d4f 100644 --- a/bookwyrm/forms/links.py +++ b/bookwyrm/forms/links.py @@ -1,4 +1,5 @@ """ using django model forms """ + from urllib.parse import urlparse from django.utils.translation import gettext_lazy as _ @@ -37,10 +38,9 @@ def clean(self): ), ) if ( - not self.instance - and models.FileLink.objects.filter( - url=url, book=book, filetype=filetype - ).exists() + models.FileLink.objects.filter(url=url, book=book, filetype=filetype) + .exclude(pk=self.instance) + .exists() ): # pylint: disable=line-too-long self.add_error( diff --git a/bookwyrm/importers/__init__.py b/bookwyrm/importers/__init__.py index 6ce50f160b..8e92872f25 100644 --- a/bookwyrm/importers/__init__.py +++ b/bookwyrm/importers/__init__.py @@ -1,6 +1,7 @@ """ import classes """ from .importer import Importer +from .bookwyrm_import import BookwyrmImporter from .calibre_import import CalibreImporter from .goodreads_import import GoodreadsImporter from .librarything_import import LibrarythingImporter diff --git a/bookwyrm/importers/bookwyrm_import.py b/bookwyrm/importers/bookwyrm_import.py new file mode 100644 index 0000000000..206cd62197 --- /dev/null +++ b/bookwyrm/importers/bookwyrm_import.py @@ -0,0 +1,24 @@ +"""Import data from Bookwyrm export files""" +from django.http import QueryDict + +from bookwyrm.models import User +from bookwyrm.models.bookwyrm_import_job import BookwyrmImportJob + + +class BookwyrmImporter: + """Import a Bookwyrm User export file. + This is kind of a combination of an importer and a connector. + """ + + # pylint: disable=no-self-use + def process_import( + self, user: User, archive_file: bytes, settings: QueryDict + ) -> BookwyrmImportJob: + """import user data from a Bookwyrm export file""" + + required = [k for k in settings if settings.get(k) == "on"] + + job = BookwyrmImportJob.objects.create( + user=user, archive_file=archive_file, required=required + ) + return job diff --git a/bookwyrm/isbn/isbn.py b/bookwyrm/isbn/isbn.py index 56062ff7b8..d14dc26196 100644 --- a/bookwyrm/isbn/isbn.py +++ b/bookwyrm/isbn/isbn.py @@ -26,7 +26,7 @@ class IsbnHyphenator: def update_range_message(self) -> None: """Download the range message xml file and save it locally""" - response = requests.get(self.__range_message_url) + response = requests.get(self.__range_message_url, timeout=15) with open(self.__range_file_path, "w", encoding="utf-8") as file: file.write(response.text) self.__element_tree = None diff --git a/bookwyrm/management/commands/erase_deleted_user_data.py b/bookwyrm/management/commands/erase_deleted_user_data.py new file mode 100644 index 0000000000..40c3f042b3 --- /dev/null +++ b/bookwyrm/management/commands/erase_deleted_user_data.py @@ -0,0 +1,43 @@ +""" Erase any data stored about deleted users """ +import sys +from django.core.management.base import BaseCommand, CommandError +from bookwyrm import models +from bookwyrm.models.user import erase_user_data + +# pylint: disable=missing-function-docstring +class Command(BaseCommand): + """command-line options""" + + help = "Remove Two Factor Authorisation from user" + + def add_arguments(self, parser): # pylint: disable=no-self-use + parser.add_argument( + "--dryrun", + action="store_true", + help="Preview users to be cleared without altering the database", + ) + + def handle(self, *args, **options): # pylint: disable=unused-argument + + # Check for anything fishy + bad_state = models.User.objects.filter(is_deleted=True, is_active=True) + if bad_state.exists(): + raise CommandError( + f"{bad_state.count()} user(s) marked as both active and deleted" + ) + + deleted_users = models.User.objects.filter(is_deleted=True) + self.stdout.write(f"Found {deleted_users.count()} deleted users") + if options["dryrun"]: + self.stdout.write("\n".join(u.username for u in deleted_users[:5])) + if deleted_users.count() > 5: + self.stdout.write("... and more") + sys.exit() + + self.stdout.write("Erasing user data:") + for user_id in deleted_users.values_list("id", flat=True): + erase_user_data.delay(user_id) + self.stdout.write(".", ending="") + + self.stdout.write("") + self.stdout.write("Tasks created successfully") diff --git a/bookwyrm/management/commands/instance_version.py b/bookwyrm/management/commands/instance_version.py deleted file mode 100644 index ca150d6409..0000000000 --- a/bookwyrm/management/commands/instance_version.py +++ /dev/null @@ -1,54 +0,0 @@ -""" Get your admin code to allow install """ -from django.core.management.base import BaseCommand - -from bookwyrm import models -from bookwyrm.settings import VERSION - - -# pylint: disable=no-self-use -class Command(BaseCommand): - """command-line options""" - - help = "What version is this?" - - def add_arguments(self, parser): - """specify which function to run""" - parser.add_argument( - "--current", - action="store_true", - help="Version stored in database", - ) - parser.add_argument( - "--target", - action="store_true", - help="Version stored in settings", - ) - parser.add_argument( - "--update", - action="store_true", - help="Update database version", - ) - - # pylint: disable=unused-argument - def handle(self, *args, **options): - """execute init""" - site = models.SiteSettings.objects.get() - current = site.version or "0.0.1" - target = VERSION - if options.get("current"): - print(current) - return - - if options.get("target"): - print(target) - return - - if options.get("update"): - site.version = target - site.save() - return - - if current != target: - print(f"{current}/{target}") - else: - print(current) diff --git a/bookwyrm/middleware/__init__.py b/bookwyrm/middleware/__init__.py index 03843c5a30..85c3a56fe8 100644 --- a/bookwyrm/middleware/__init__.py +++ b/bookwyrm/middleware/__init__.py @@ -1,3 +1,4 @@ """ look at all this nice middleware! """ from .timezone_middleware import TimezoneMiddleware from .ip_middleware import IPBlocklistMiddleware +from .file_too_big import FileTooBig diff --git a/bookwyrm/middleware/file_too_big.py b/bookwyrm/middleware/file_too_big.py new file mode 100644 index 0000000000..de1349d96a --- /dev/null +++ b/bookwyrm/middleware/file_too_big.py @@ -0,0 +1,30 @@ +"""Middleware to display a custom 413 error page""" + +from django.http import HttpResponse +from django.shortcuts import render +from django.core.exceptions import RequestDataTooBig + + +class FileTooBig: + """Middleware to display a custom page when a + RequestDataTooBig exception is thrown""" + + def __init__(self, get_response): + """boilerplate __init__ from Django docs""" + + self.get_response = get_response + + def __call__(self, request): + """If RequestDataTooBig is thrown, render the 413 error page""" + + try: + body = request.body # pylint: disable=unused-variable + + except RequestDataTooBig: + + rendered = render(request, "413.html") + response = HttpResponse(rendered) + return response + + response = self.get_response(request) + return response diff --git a/bookwyrm/migrations/0184_auto_20231106_0421.py b/bookwyrm/migrations/0184_auto_20231106_0421.py index e8197dea13..23bacc5026 100644 --- a/bookwyrm/migrations/0184_auto_20231106_0421.py +++ b/bookwyrm/migrations/0184_auto_20231106_0421.py @@ -22,17 +22,6 @@ def update_deleted_users(apps, schema_editor): ).update(is_deleted=True) -def erase_deleted_user_data(apps, schema_editor): - """Retroactively clear user data""" - for user in User.objects.filter(is_deleted=True): - user.erase_user_data() - user.save( - broadcast=False, - update_fields=["email", "avatar", "preview_image", "summary", "name"], - ) - user.erase_user_statuses(broadcast=False) - - class Migration(migrations.Migration): dependencies = [ @@ -43,7 +32,4 @@ class Migration(migrations.Migration): migrations.RunPython( update_deleted_users, reverse_code=migrations.RunPython.noop ), - migrations.RunPython( - erase_deleted_user_data, reverse_code=migrations.RunPython.noop - ), ] diff --git a/bookwyrm/migrations/0186_auto_20231116_0048.py b/bookwyrm/migrations/0186_auto_20231116_0048.py new file mode 100644 index 0000000000..e3b9da4fed --- /dev/null +++ b/bookwyrm/migrations/0186_auto_20231116_0048.py @@ -0,0 +1,212 @@ +# Generated by Django 3.2.20 on 2023-11-16 00:48 + +from django.conf import settings +import django.contrib.postgres.fields +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0185_alter_notification_notification_type"), + ] + + operations = [ + migrations.CreateModel( + name="ParentJob", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("task_id", models.UUIDField(blank=True, null=True, unique=True)), + ( + "created_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ( + "updated_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ("complete", models.BooleanField(default=False)), + ( + "status", + models.CharField( + choices=[ + ("pending", "Pending"), + ("active", "Active"), + ("complete", "Complete"), + ("stopped", "Stopped"), + ("failed", "Failed"), + ], + default="pending", + max_length=50, + null=True, + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.AddField( + model_name="sitesettings", + name="user_import_time_limit", + field=models.IntegerField(default=48), + ), + migrations.AlterField( + model_name="notification", + name="notification_type", + field=models.CharField( + choices=[ + ("FAVORITE", "Favorite"), + ("BOOST", "Boost"), + ("REPLY", "Reply"), + ("MENTION", "Mention"), + ("TAG", "Tag"), + ("FOLLOW", "Follow"), + ("FOLLOW_REQUEST", "Follow Request"), + ("IMPORT", "Import"), + ("USER_IMPORT", "User Import"), + ("USER_EXPORT", "User Export"), + ("ADD", "Add"), + ("REPORT", "Report"), + ("LINK_DOMAIN", "Link Domain"), + ("INVITE", "Invite"), + ("ACCEPT", "Accept"), + ("JOIN", "Join"), + ("LEAVE", "Leave"), + ("REMOVE", "Remove"), + ("GROUP_PRIVACY", "Group Privacy"), + ("GROUP_NAME", "Group Name"), + ("GROUP_DESCRIPTION", "Group Description"), + ("MOVE", "Move"), + ], + max_length=255, + ), + ), + migrations.CreateModel( + name="BookwyrmExportJob", + fields=[ + ( + "parentjob_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="bookwyrm.parentjob", + ), + ), + ("export_data", models.FileField(null=True, upload_to="")), + ], + options={ + "abstract": False, + }, + bases=("bookwyrm.parentjob",), + ), + migrations.CreateModel( + name="BookwyrmImportJob", + fields=[ + ( + "parentjob_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="bookwyrm.parentjob", + ), + ), + ("archive_file", models.FileField(blank=True, null=True, upload_to="")), + ("import_data", models.JSONField(null=True)), + ( + "required", + django.contrib.postgres.fields.ArrayField( + base_field=models.CharField(blank=True, max_length=50), + blank=True, + size=None, + ), + ), + ], + options={ + "abstract": False, + }, + bases=("bookwyrm.parentjob",), + ), + migrations.CreateModel( + name="ChildJob", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("task_id", models.UUIDField(blank=True, null=True, unique=True)), + ( + "created_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ( + "updated_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ("complete", models.BooleanField(default=False)), + ( + "status", + models.CharField( + choices=[ + ("pending", "Pending"), + ("active", "Active"), + ("complete", "Complete"), + ("stopped", "Stopped"), + ("failed", "Failed"), + ], + default="pending", + max_length=50, + null=True, + ), + ), + ( + "parent_job", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="child_jobs", + to="bookwyrm.parentjob", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.AddField( + model_name="notification", + name="related_user_export", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="bookwyrm.bookwyrmexportjob", + ), + ), + ] diff --git a/bookwyrm/migrations/0189_alter_user_preferred_language.py b/bookwyrm/migrations/0189_alter_user_preferred_language.py new file mode 100644 index 0000000000..d9d9777c7c --- /dev/null +++ b/bookwyrm/migrations/0189_alter_user_preferred_language.py @@ -0,0 +1,45 @@ +# Generated by Django 3.2.23 on 2023-12-12 23:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0188_theme_loads"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="preferred_language", + field=models.CharField( + blank=True, + choices=[ + ("en-us", "English"), + ("ca-es", "Català (Catalan)"), + ("de-de", "Deutsch (German)"), + ("eo-uy", "Esperanto (Esperanto)"), + ("es-es", "Español (Spanish)"), + ("eu-es", "Euskara (Basque)"), + ("gl-es", "Galego (Galician)"), + ("it-it", "Italiano (Italian)"), + ("fi-fi", "Suomi (Finnish)"), + ("fr-fr", "Français (French)"), + ("lt-lt", "Lietuvių (Lithuanian)"), + ("nl-nl", "Nederlands (Dutch)"), + ("no-no", "Norsk (Norwegian)"), + ("pl-pl", "Polski (Polish)"), + ("pt-br", "Português do Brasil (Brazilian Portuguese)"), + ("pt-pt", "Português Europeu (European Portuguese)"), + ("ro-ro", "Română (Romanian)"), + ("sv-se", "Svenska (Swedish)"), + ("uk-ua", "Українська (Ukrainian)"), + ("zh-hans", "简体中文 (Simplified Chinese)"), + ("zh-hant", "繁體中文 (Traditional Chinese)"), + ], + max_length=255, + null=True, + ), + ), + ] diff --git a/bookwyrm/migrations/0189_merge_0186_auto_20231116_0048_0188_theme_loads.py b/bookwyrm/migrations/0189_merge_0186_auto_20231116_0048_0188_theme_loads.py new file mode 100644 index 0000000000..eb6238f6e4 --- /dev/null +++ b/bookwyrm/migrations/0189_merge_0186_auto_20231116_0048_0188_theme_loads.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.23 on 2023-11-22 10:16 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0186_auto_20231116_0048"), + ("bookwyrm", "0188_theme_loads"), + ] + + operations = [] diff --git a/bookwyrm/migrations/0190_alter_notification_notification_type.py b/bookwyrm/migrations/0190_alter_notification_notification_type.py new file mode 100644 index 0000000000..aff54c77b2 --- /dev/null +++ b/bookwyrm/migrations/0190_alter_notification_notification_type.py @@ -0,0 +1,45 @@ +# Generated by Django 3.2.23 on 2023-11-23 19:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0189_merge_0186_auto_20231116_0048_0188_theme_loads"), + ] + + operations = [ + migrations.AlterField( + model_name="notification", + name="notification_type", + field=models.CharField( + choices=[ + ("FAVORITE", "Favorite"), + ("BOOST", "Boost"), + ("REPLY", "Reply"), + ("MENTION", "Mention"), + ("TAG", "Tag"), + ("FOLLOW", "Follow"), + ("FOLLOW_REQUEST", "Follow Request"), + ("IMPORT", "Import"), + ("USER_IMPORT", "User Import"), + ("USER_EXPORT", "User Export"), + ("ADD", "Add"), + ("REPORT", "Report"), + ("LINK_DOMAIN", "Link Domain"), + ("INVITE_REQUEST", "Invite Request"), + ("INVITE", "Invite"), + ("ACCEPT", "Accept"), + ("JOIN", "Join"), + ("LEAVE", "Leave"), + ("REMOVE", "Remove"), + ("GROUP_PRIVACY", "Group Privacy"), + ("GROUP_NAME", "Group Name"), + ("GROUP_DESCRIPTION", "Group Description"), + ("MOVE", "Move"), + ], + max_length=255, + ), + ), + ] diff --git a/bookwyrm/migrations/0191_merge_20240102_0326.py b/bookwyrm/migrations/0191_merge_20240102_0326.py new file mode 100644 index 0000000000..485c14af83 --- /dev/null +++ b/bookwyrm/migrations/0191_merge_20240102_0326.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.23 on 2024-01-02 03:26 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0189_alter_user_preferred_language"), + ("bookwyrm", "0190_alter_notification_notification_type"), + ] + + operations = [] diff --git a/bookwyrm/migrations/0192_make_page_positions_text.py b/bookwyrm/migrations/0192_make_page_positions_text.py new file mode 100644 index 0000000000..940a9e9413 --- /dev/null +++ b/bookwyrm/migrations/0192_make_page_positions_text.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.23 on 2024-01-04 23:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0191_merge_20240102_0326"), + ] + + operations = [ + migrations.AlterField( + model_name="quotation", + name="endposition", + field=models.TextField(blank=True, null=True), + ), + migrations.AlterField( + model_name="quotation", + name="position", + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py b/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py new file mode 100644 index 0000000000..db67b4e925 --- /dev/null +++ b/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2024-01-02 19:36 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0191_merge_20240102_0326"), + ] + + operations = [ + migrations.RenameField( + model_name="sitesettings", + old_name="version", + new_name="available_version", + ), + ] diff --git a/bookwyrm/migrations/0192_sitesettings_user_exports_enabled.py b/bookwyrm/migrations/0192_sitesettings_user_exports_enabled.py new file mode 100644 index 0000000000..ec5b411e2f --- /dev/null +++ b/bookwyrm/migrations/0192_sitesettings_user_exports_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2024-01-16 10:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0191_merge_20240102_0326"), + ] + + operations = [ + migrations.AddField( + model_name="sitesettings", + name="user_exports_enabled", + field=models.BooleanField(default=False), + ), + ] diff --git a/bookwyrm/migrations/0193_merge_20240203_1539.py b/bookwyrm/migrations/0193_merge_20240203_1539.py new file mode 100644 index 0000000000..a88568ba1f --- /dev/null +++ b/bookwyrm/migrations/0193_merge_20240203_1539.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.23 on 2024-02-03 15:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0192_make_page_positions_text"), + ("bookwyrm", "0192_sitesettings_user_exports_enabled"), + ] + + operations = [] diff --git a/bookwyrm/migrations/0194_merge_20240203_1619.py b/bookwyrm/migrations/0194_merge_20240203_1619.py new file mode 100644 index 0000000000..a5c18e3006 --- /dev/null +++ b/bookwyrm/migrations/0194_merge_20240203_1619.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.23 on 2024-02-03 16:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0192_rename_version_sitesettings_available_version"), + ("bookwyrm", "0193_merge_20240203_1539"), + ] + + operations = [] diff --git a/bookwyrm/migrations/0195_alter_user_preferred_language.py b/bookwyrm/migrations/0195_alter_user_preferred_language.py new file mode 100644 index 0000000000..1fbfa7304b --- /dev/null +++ b/bookwyrm/migrations/0195_alter_user_preferred_language.py @@ -0,0 +1,46 @@ +# Generated by Django 3.2.23 on 2024-02-21 00:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0194_merge_20240203_1619"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="preferred_language", + field=models.CharField( + blank=True, + choices=[ + ("en-us", "English"), + ("ca-es", "Català (Catalan)"), + ("de-de", "Deutsch (German)"), + ("eo-uy", "Esperanto (Esperanto)"), + ("es-es", "Español (Spanish)"), + ("eu-es", "Euskara (Basque)"), + ("gl-es", "Galego (Galician)"), + ("it-it", "Italiano (Italian)"), + ("ko-kr", "한국어 (Korean)"), + ("fi-fi", "Suomi (Finnish)"), + ("fr-fr", "Français (French)"), + ("lt-lt", "Lietuvių (Lithuanian)"), + ("nl-nl", "Nederlands (Dutch)"), + ("no-no", "Norsk (Norwegian)"), + ("pl-pl", "Polski (Polish)"), + ("pt-br", "Português do Brasil (Brazilian Portuguese)"), + ("pt-pt", "Português Europeu (European Portuguese)"), + ("ro-ro", "Română (Romanian)"), + ("sv-se", "Svenska (Swedish)"), + ("uk-ua", "Українська (Ukrainian)"), + ("zh-hans", "简体中文 (Simplified Chinese)"), + ("zh-hant", "繁體中文 (Traditional Chinese)"), + ], + max_length=255, + null=True, + ), + ), + ] diff --git a/bookwyrm/migrations/0196_merge_pr3134_into_main.py b/bookwyrm/migrations/0196_merge_pr3134_into_main.py new file mode 100644 index 0000000000..4967c18f26 --- /dev/null +++ b/bookwyrm/migrations/0196_merge_pr3134_into_main.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.23 on 2024-03-18 00:48 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0191_migrate_search_vec_triggers_to_pgtriggers'), + ('bookwyrm', '0195_alter_user_preferred_language'), + ] + + operations = [ + ] diff --git a/bookwyrm/models/__init__.py b/bookwyrm/models/__init__.py index e1c862f2b8..6bb99c7f25 100644 --- a/bookwyrm/models/__init__.py +++ b/bookwyrm/models/__init__.py @@ -26,6 +26,8 @@ from .group import Group, GroupMember, GroupMemberInvitation from .import_job import ImportJob, ImportItem +from .bookwyrm_import_job import BookwyrmImportJob +from .bookwyrm_export_job import BookwyrmExportJob from .move import MoveUser diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index 36317ad4ed..db737b8bc2 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -152,8 +152,9 @@ def get_recipients(self, software=None) -> list[str]: # find anyone who's tagged in a status, for example mentions = self.recipients if hasattr(self, "recipients") else [] - # we always send activities to explicitly mentioned users' inboxes - recipients = [u.inbox for u in mentions or [] if not u.local] + # we always send activities to explicitly mentioned users (using shared inboxes + # where available to avoid duplicate submissions to a given instance) + recipients = {u.shared_inbox or u.inbox for u in mentions if not u.local} # unless it's a dm, all the followers should receive the activity if privacy != "direct": @@ -173,18 +174,18 @@ def get_recipients(self, software=None) -> list[str]: if user: queryset = queryset.filter(following=user) - # ideally, we will send to shared inboxes for efficiency - shared_inboxes = ( - queryset.filter(shared_inbox__isnull=False) - .values_list("shared_inbox", flat=True) - .distinct() + # as above, we prefer shared inboxes if available + recipients.update( + queryset.filter(shared_inbox__isnull=False).values_list( + "shared_inbox", flat=True + ) ) - # but not everyone has a shared inbox - inboxes = queryset.filter(shared_inbox__isnull=True).values_list( - "inbox", flat=True + recipients.update( + queryset.filter(shared_inbox__isnull=True).values_list( + "inbox", flat=True + ) ) - recipients += list(shared_inboxes) + list(inboxes) - return list(set(recipients)) + return list(recipients) def to_activity_dataclass(self): """convert from a model to an activity""" @@ -602,7 +603,7 @@ def to_ordered_collection_page( if activity_page.has_next(): next_page = f"{remote_id}?page={activity_page.next_page_number()}" if activity_page.has_previous(): - prev_page = f"{remote_id}?page=%d{activity_page.previous_page_number()}" + prev_page = f"{remote_id}?page={activity_page.previous_page_number()}" return activitypub.OrderedCollectionPage( id=f"{remote_id}?page={page}", partOf=remote_id, diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py new file mode 100644 index 0000000000..2f32cbd29a --- /dev/null +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -0,0 +1,229 @@ +"""Export user account to tar.gz file for import into another Bookwyrm instance""" + +import dataclasses +import logging +from uuid import uuid4 + +from django.db.models import FileField +from django.db.models import Q +from django.core.serializers.json import DjangoJSONEncoder +from django.core.files.base import ContentFile + +from bookwyrm.models import AnnualGoal, ReadThrough, ShelfBook, List, ListItem +from bookwyrm.models import Review, Comment, Quotation +from bookwyrm.models import Edition +from bookwyrm.models import UserFollows, User, UserBlocks +from bookwyrm.models.job import ParentJob, ParentTask +from bookwyrm.tasks import app, IMPORTS +from bookwyrm.utils.tar import BookwyrmTarFile + +logger = logging.getLogger(__name__) + + +class BookwyrmExportJob(ParentJob): + """entry for a specific request to export a bookwyrm user""" + + export_data = FileField(null=True) + + def start_job(self): + """Start the job""" + start_export_task.delay(job_id=self.id, no_children=True) + + return self + + +@app.task(queue=IMPORTS, base=ParentTask) +def start_export_task(**kwargs): + """trigger the child tasks for each row""" + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + + # don't start the job if it was stopped from the UI + if job.complete: + return + try: + # This is where ChildJobs get made + job.export_data = ContentFile(b"", str(uuid4())) + json_data = json_export(job.user) + tar_export(json_data, job.user, job.export_data) + job.save(update_fields=["export_data"]) + except Exception as err: # pylint: disable=broad-except + logger.exception("User Export Job %s Failed with error: %s", job.id, err) + job.set_status("failed") + + job.set_status("complete") + + +def tar_export(json_data: str, user, file): + """wrap the export information in a tar file""" + file.open("wb") + with BookwyrmTarFile.open(mode="w:gz", fileobj=file) as tar: + tar.write_bytes(json_data.encode("utf-8")) + + # Add avatar image if present + if getattr(user, "avatar", False): + tar.add_image(user.avatar, filename="avatar") + + editions = get_books_for_user(user) + for book in editions: + if getattr(book, "cover", False): + tar.add_image(book.cover) + + file.close() + + +def json_export( + user, +): # pylint: disable=too-many-locals, too-many-statements, too-many-branches + """Generate an export for a user""" + + # User as AP object + exported_user = user.to_activity() + # I don't love this but it prevents a JSON encoding error + # when there is no user image + if exported_user.get("icon") in (None, dataclasses.MISSING): + exported_user["icon"] = {} + else: + # change the URL to be relative to the JSON file + file_type = exported_user["icon"]["url"].rsplit(".", maxsplit=1)[-1] + filename = f"avatar.{file_type}" + exported_user["icon"]["url"] = filename + + # Additional settings - can't be serialized as AP + vals = [ + "show_goal", + "preferred_timezone", + "default_post_privacy", + "show_suggested_users", + ] + exported_user["settings"] = {} + for k in vals: + exported_user["settings"][k] = getattr(user, k) + + # Reading goals - can't be serialized as AP + reading_goals = AnnualGoal.objects.filter(user=user).distinct() + exported_user["goals"] = [] + for goal in reading_goals: + exported_user["goals"].append( + {"goal": goal.goal, "year": goal.year, "privacy": goal.privacy} + ) + + # Reading history - can't be serialized as AP + readthroughs = ReadThrough.objects.filter(user=user).distinct().values() + readthroughs = list(readthroughs) + + # Books + editions = get_books_for_user(user) + exported_user["books"] = [] + + for edition in editions: + book = {} + book["work"] = edition.parent_work.to_activity() + book["edition"] = edition.to_activity() + + if book["edition"].get("cover"): + # change the URL to be relative to the JSON file + filename = book["edition"]["cover"]["url"].rsplit("/", maxsplit=1)[-1] + book["edition"]["cover"]["url"] = f"covers/{filename}" + + # authors + book["authors"] = [] + for author in edition.authors.all(): + book["authors"].append(author.to_activity()) + + # Shelves this book is on + # Every ShelfItem is this book so we don't other serializing + book["shelves"] = [] + shelf_books = ( + ShelfBook.objects.select_related("shelf") + .filter(user=user, book=edition) + .distinct() + ) + + for shelfbook in shelf_books: + book["shelves"].append(shelfbook.shelf.to_activity()) + + # Lists and ListItems + # ListItems include "notes" and "approved" so we need them + # even though we know it's this book + book["lists"] = [] + list_items = ListItem.objects.filter(book=edition, user=user).distinct() + + for item in list_items: + list_info = item.book_list.to_activity() + list_info[ + "privacy" + ] = item.book_list.privacy # this isn't serialized so we add it + list_info["list_item"] = item.to_activity() + book["lists"].append(list_info) + + # Statuses + # Can't use select_subclasses here because + # we need to filter on the "book" value, + # which is not available on an ordinary Status + for status in ["comments", "quotations", "reviews"]: + book[status] = [] + + comments = Comment.objects.filter(user=user, book=edition).all() + for status in comments: + obj = status.to_activity() + obj["progress"] = status.progress + obj["progress_mode"] = status.progress_mode + book["comments"].append(obj) + + quotes = Quotation.objects.filter(user=user, book=edition).all() + for status in quotes: + obj = status.to_activity() + obj["position"] = status.position + obj["endposition"] = status.endposition + obj["position_mode"] = status.position_mode + book["quotations"].append(obj) + + reviews = Review.objects.filter(user=user, book=edition).all() + for status in reviews: + obj = status.to_activity() + book["reviews"].append(obj) + + # readthroughs can't be serialized to activity + book_readthroughs = ( + ReadThrough.objects.filter(user=user, book=edition).distinct().values() + ) + book["readthroughs"] = list(book_readthroughs) + + # append everything + exported_user["books"].append(book) + + # saved book lists - just the remote id + saved_lists = List.objects.filter(id__in=user.saved_lists.all()).distinct() + exported_user["saved_lists"] = [l.remote_id for l in saved_lists] + + # follows - just the remote id + follows = UserFollows.objects.filter(user_subject=user).distinct() + following = User.objects.filter(userfollows_user_object__in=follows).distinct() + exported_user["follows"] = [f.remote_id for f in following] + + # blocks - just the remote id + blocks = UserBlocks.objects.filter(user_subject=user).distinct() + blocking = User.objects.filter(userblocks_user_object__in=blocks).distinct() + + exported_user["blocks"] = [b.remote_id for b in blocking] + + return DjangoJSONEncoder().encode(exported_user) + + +def get_books_for_user(user): + """Get all the books and editions related to a user""" + + editions = ( + Edition.objects.select_related("parent_work") + .filter( + Q(shelves__user=user) + | Q(readthrough__user=user) + | Q(review__user=user) + | Q(list__user=user) + | Q(comment__user=user) + | Q(quotation__user=user) + ) + .distinct() + ) + + return editions diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py new file mode 100644 index 0000000000..9a11fd932b --- /dev/null +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -0,0 +1,459 @@ +"""Import a user from another Bookwyrm instance""" + +import json +import logging + +from django.db.models import FileField, JSONField, CharField +from django.utils import timezone +from django.utils.html import strip_tags +from django.contrib.postgres.fields import ArrayField as DjangoArrayField + +from bookwyrm import activitypub +from bookwyrm import models +from bookwyrm.tasks import app, IMPORTS +from bookwyrm.models.job import ParentJob, ParentTask, SubTask +from bookwyrm.utils.tar import BookwyrmTarFile + +logger = logging.getLogger(__name__) + + +class BookwyrmImportJob(ParentJob): + """entry for a specific request for importing a bookwyrm user backup""" + + archive_file = FileField(null=True, blank=True) + import_data = JSONField(null=True) + required = DjangoArrayField(CharField(max_length=50, blank=True), blank=True) + + def start_job(self): + """Start the job""" + start_import_task.delay(job_id=self.id, no_children=True) + + +@app.task(queue=IMPORTS, base=ParentTask) +def start_import_task(**kwargs): + """trigger the child import tasks for each user data""" + job = BookwyrmImportJob.objects.get(id=kwargs["job_id"]) + archive_file = job.archive_file + + # don't start the job if it was stopped from the UI + if job.complete: + return + + try: + archive_file.open("rb") + with BookwyrmTarFile.open(mode="r:gz", fileobj=archive_file) as tar: + job.import_data = json.loads(tar.read("archive.json").decode("utf-8")) + + if "include_user_profile" in job.required: + update_user_profile(job.user, tar, job.import_data) + if "include_user_settings" in job.required: + update_user_settings(job.user, job.import_data) + if "include_goals" in job.required: + update_goals(job.user, job.import_data.get("goals")) + if "include_saved_lists" in job.required: + upsert_saved_lists(job.user, job.import_data.get("saved_lists")) + if "include_follows" in job.required: + upsert_follows(job.user, job.import_data.get("follows")) + if "include_blocks" in job.required: + upsert_user_blocks(job.user, job.import_data.get("blocks")) + + process_books(job, tar) + + job.set_status("complete") + archive_file.close() + + except Exception as err: # pylint: disable=broad-except + logger.exception("User Import Job %s Failed with error: %s", job.id, err) + job.set_status("failed") + + +def process_books(job, tar): + """ + Process user import data related to books + We always import the books even if not assigning + them to shelves, lists etc + """ + + books = job.import_data.get("books") + + for data in books: + book = get_or_create_edition(data, tar) + + if "include_shelves" in job.required: + upsert_shelves(book, job.user, data) + + if "include_readthroughs" in job.required: + upsert_readthroughs(data.get("readthroughs"), job.user, book.id) + + if "include_comments" in job.required: + upsert_statuses( + job.user, models.Comment, data.get("comments"), book.remote_id + ) + if "include_quotations" in job.required: + upsert_statuses( + job.user, models.Quotation, data.get("quotations"), book.remote_id + ) + + if "include_reviews" in job.required: + upsert_statuses( + job.user, models.Review, data.get("reviews"), book.remote_id + ) + + if "include_lists" in job.required: + upsert_lists(job.user, data.get("lists"), book.id) + + +def get_or_create_edition(book_data, tar): + """Take a JSON string of work and edition data, + find or create the edition and work in the database and + return an edition instance""" + + edition = book_data.get("edition") + existing = models.Edition.find_existing(edition) + if existing: + return existing + + # make sure we have the authors in the local DB + # replace the old author ids in the edition JSON + edition["authors"] = [] + for author in book_data.get("authors"): + parsed_author = activitypub.parse(author) + instance = parsed_author.to_model( + model=models.Author, save=True, overwrite=True + ) + + edition["authors"].append(instance.remote_id) + + # we will add the cover later from the tar + # don't try to load it from the old server + cover = edition.get("cover", {}) + cover_path = cover.get("url", None) + edition["cover"] = {} + + # first we need the parent work to exist + work = book_data.get("work") + work["editions"] = [] + parsed_work = activitypub.parse(work) + work_instance = parsed_work.to_model(model=models.Work, save=True, overwrite=True) + + # now we have a work we can add it to the edition + # and create the edition model instance + edition["work"] = work_instance.remote_id + parsed_edition = activitypub.parse(edition) + book = parsed_edition.to_model(model=models.Edition, save=True, overwrite=True) + + # set the cover image from the tar + if cover_path: + tar.write_image_to_file(cover_path, book.cover) + + return book + + +def upsert_readthroughs(data, user, book_id): + """Take a JSON string of readthroughs and + find or create the instances in the database""" + + for read_through in data: + + obj = {} + keys = [ + "progress_mode", + "start_date", + "finish_date", + "stopped_date", + "is_active", + ] + for key in keys: + obj[key] = read_through[key] + obj["user_id"] = user.id + obj["book_id"] = book_id + + existing = models.ReadThrough.objects.filter(**obj).first() + if not existing: + models.ReadThrough.objects.create(**obj) + + +def upsert_statuses(user, cls, data, book_remote_id): + """Take a JSON string of a status and + find or create the instances in the database""" + + for status in data: + if is_alias( + user, status["attributedTo"] + ): # don't let l33t hax0rs steal other people's posts + # update ids and remove replies + status["attributedTo"] = user.remote_id + status["to"] = update_followers_address(user, status["to"]) + status["cc"] = update_followers_address(user, status["cc"]) + status[ + "replies" + ] = ( + {} + ) # this parses incorrectly but we can't set it without knowing the new id + status["inReplyToBook"] = book_remote_id + parsed = activitypub.parse(status) + if not status_already_exists( + user, parsed + ): # don't duplicate posts on multiple import + + instance = parsed.to_model(model=cls, save=True, overwrite=True) + + for val in [ + "progress", + "progress_mode", + "position", + "endposition", + "position_mode", + ]: + if status.get(val): + instance.val = status[val] + + instance.remote_id = instance.get_remote_id() # update the remote_id + instance.save() # save and broadcast + + else: + logger.info("User does not have permission to import statuses") + + +def upsert_lists(user, lists, book_id): + """Take a list of objects each containing + a list and list item as AP objects + + Because we are creating new IDs we can't assume the id + will exist or be accurate, so we only use to_model for + adding new items after checking whether they exist . + + """ + + book = models.Edition.objects.get(id=book_id) + + for blist in lists: + booklist = models.List.objects.filter(name=blist["name"], user=user).first() + if not booklist: + + blist["owner"] = user.remote_id + parsed = activitypub.parse(blist) + booklist = parsed.to_model(model=models.List, save=True, overwrite=True) + + booklist.privacy = blist["privacy"] + booklist.save() + + item = models.ListItem.objects.filter(book=book, book_list=booklist).exists() + if not item: + count = booklist.books.count() + models.ListItem.objects.create( + book=book, + book_list=booklist, + user=user, + notes=blist["list_item"]["notes"], + approved=blist["list_item"]["approved"], + order=count + 1, + ) + + +def upsert_shelves(book, user, book_data): + """Take shelf JSON objects and create + DB entries if they don't already exist""" + + shelves = book_data["shelves"] + for shelf in shelves: + + book_shelf = models.Shelf.objects.filter(name=shelf["name"], user=user).first() + + if not book_shelf: + book_shelf = models.Shelf.objects.create(name=shelf["name"], user=user) + + # add the book as a ShelfBook if needed + if not models.ShelfBook.objects.filter( + book=book, shelf=book_shelf, user=user + ).exists(): + models.ShelfBook.objects.create( + book=book, shelf=book_shelf, user=user, shelved_date=timezone.now() + ) + + +def update_user_profile(user, tar, data): + """update the user's profile from import data""" + name = data.get("name", None) + username = data.get("preferredUsername") + user.name = name if name else username + user.summary = strip_tags(data.get("summary", None)) + user.save(update_fields=["name", "summary"]) + if data["icon"].get("url"): + avatar_filename = next(filter(lambda n: n.startswith("avatar"), tar.getnames())) + tar.write_image_to_file(avatar_filename, user.avatar) + + +def update_user_settings(user, data): + """update the user's settings from import data""" + + update_fields = ["manually_approves_followers", "hide_follows", "discoverable"] + + ap_fields = [ + ("manuallyApprovesFollowers", "manually_approves_followers"), + ("hideFollows", "hide_follows"), + ("discoverable", "discoverable"), + ] + + for (ap_field, bw_field) in ap_fields: + setattr(user, bw_field, data[ap_field]) + + bw_fields = [ + "show_goal", + "show_suggested_users", + "default_post_privacy", + "preferred_timezone", + ] + + for field in bw_fields: + update_fields.append(field) + setattr(user, field, data["settings"][field]) + + user.save(update_fields=update_fields) + + +@app.task(queue=IMPORTS, base=SubTask) +def update_user_settings_task(job_id): + """wrapper task for user's settings import""" + parent_job = BookwyrmImportJob.objects.get(id=job_id) + + return update_user_settings(parent_job.user, parent_job.import_data.get("user")) + + +def update_goals(user, data): + """update the user's goals from import data""" + + for goal in data: + # edit the existing goal if there is one + existing = models.AnnualGoal.objects.filter( + year=goal["year"], user=user + ).first() + if existing: + for k in goal.keys(): + setattr(existing, k, goal[k]) + existing.save() + else: + goal["user"] = user + models.AnnualGoal.objects.create(**goal) + + +@app.task(queue=IMPORTS, base=SubTask) +def update_goals_task(job_id): + """wrapper task for user's goals import""" + parent_job = BookwyrmImportJob.objects.get(id=job_id) + + return update_goals(parent_job.user, parent_job.import_data.get("goals")) + + +def upsert_saved_lists(user, values): + """Take a list of remote ids and add as saved lists""" + + for remote_id in values: + book_list = activitypub.resolve_remote_id(remote_id, models.List) + if book_list: + user.saved_lists.add(book_list) + + +@app.task(queue=IMPORTS, base=SubTask) +def upsert_saved_lists_task(job_id): + """wrapper task for user's saved lists import""" + parent_job = BookwyrmImportJob.objects.get(id=job_id) + + return upsert_saved_lists( + parent_job.user, parent_job.import_data.get("saved_lists") + ) + + +def upsert_follows(user, values): + """Take a list of remote ids and add as follows""" + + for remote_id in values: + followee = activitypub.resolve_remote_id(remote_id, models.User) + if followee: + (follow_request, created,) = models.UserFollowRequest.objects.get_or_create( + user_subject=user, + user_object=followee, + ) + + if not created: + # this request probably failed to connect with the remote + # and should save to trigger a re-broadcast + follow_request.save() + + +@app.task(queue=IMPORTS, base=SubTask) +def upsert_follows_task(job_id): + """wrapper task for user's follows import""" + parent_job = BookwyrmImportJob.objects.get(id=job_id) + + return upsert_follows(parent_job.user, parent_job.import_data.get("follows")) + + +def upsert_user_blocks(user, user_ids): + """block users""" + + for user_id in user_ids: + user_object = activitypub.resolve_remote_id(user_id, models.User) + if user_object: + exists = models.UserBlocks.objects.filter( + user_subject=user, user_object=user_object + ).exists() + if not exists: + models.UserBlocks.objects.create( + user_subject=user, user_object=user_object + ) + # remove the blocked users's lists from the groups + models.List.remove_from_group(user, user_object) + # remove the blocked user from all blocker's owned groups + models.GroupMember.remove(user, user_object) + + +@app.task(queue=IMPORTS, base=SubTask) +def upsert_user_blocks_task(job_id): + """wrapper task for user's blocks import""" + parent_job = BookwyrmImportJob.objects.get(id=job_id) + + return upsert_user_blocks( + parent_job.user, parent_job.import_data.get("blocked_users") + ) + + +def update_followers_address(user, field): + """statuses to or cc followers need to have the followers + address updated to the new local user""" + + for i, audience in enumerate(field): + if audience.rsplit("/")[-1] == "followers": + field[i] = user.followers_url + + return field + + +def is_alias(user, remote_id): + """check that the user is listed as movedTo or also_known_as + in the remote user's profile""" + + remote_user = activitypub.resolve_remote_id( + remote_id=remote_id, model=models.User, save=False + ) + + if remote_user: + + if remote_user.moved_to: + return user.remote_id == remote_user.moved_to + + if remote_user.also_known_as: + return user in remote_user.also_known_as.all() + + return False + + +def status_already_exists(user, status): + """check whether this status has already been published + by this user. We can't rely on to_model() because it + only matches on remote_id, which we have to change + *after* saving because it needs the primary key (id)""" + + return models.Status.objects.filter( + user=user, content=status.content, published_date=status.published + ).exists() diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 4bd5807059..55ec254669 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -482,7 +482,7 @@ def field_to_activity(self, value, alt=None): if not url: return None - return activitypub.Document(url=url, name=alt) + return activitypub.Image(url=url, name=alt) def field_from_activity(self, value, allow_external_connections=True): image_slug = value diff --git a/bookwyrm/models/job.py b/bookwyrm/models/job.py new file mode 100644 index 0000000000..4f5cb20935 --- /dev/null +++ b/bookwyrm/models/job.py @@ -0,0 +1,308 @@ +"""Everything needed for Celery to multi-thread complex tasks.""" + +from django.db import models +from django.db import transaction +from django.utils.translation import gettext_lazy as _ +from django.utils import timezone +from bookwyrm.models.user import User + +from bookwyrm.tasks import app + + +class Job(models.Model): + """Abstract model to store the state of a Task.""" + + class Status(models.TextChoices): + """Possible job states.""" + + PENDING = "pending", _("Pending") + ACTIVE = "active", _("Active") + COMPLETE = "complete", _("Complete") + STOPPED = "stopped", _("Stopped") + FAILED = "failed", _("Failed") + + task_id = models.UUIDField(unique=True, null=True, blank=True) + + created_date = models.DateTimeField(default=timezone.now) + updated_date = models.DateTimeField(default=timezone.now) + complete = models.BooleanField(default=False) + status = models.CharField( + max_length=50, choices=Status.choices, default=Status.PENDING, null=True + ) + + class Meta: + """Make it abstract""" + + abstract = True + + def complete_job(self): + """Report that the job has completed""" + if self.complete: + return + + self.status = self.Status.COMPLETE + self.complete = True + self.updated_date = timezone.now() + + self.save(update_fields=["status", "complete", "updated_date"]) + + def stop_job(self, reason=None): + """Stop the job""" + if self.complete: + return + + self.__terminate_job() + + if reason and reason == "failed": + self.status = self.Status.FAILED + else: + self.status = self.Status.STOPPED + self.complete = True + self.updated_date = timezone.now() + + self.save(update_fields=["status", "complete", "updated_date"]) + + def set_status(self, status): + """Set job status""" + if self.complete: + return + + if self.status == status: + return + + if status == self.Status.COMPLETE: + self.complete_job() + return + + if status == self.Status.STOPPED: + self.stop_job() + return + + if status == self.Status.FAILED: + self.stop_job(reason="failed") + return + + self.updated_date = timezone.now() + self.status = status + + self.save(update_fields=["status", "updated_date"]) + + def __terminate_job(self): + """Tell workers to ignore and not execute this task.""" + app.control.revoke(self.task_id, terminate=True) + + +class ParentJob(Job): + """Store the state of a Task which can spawn many :model:`ChildJob`s to spread + resource load. + + Intended to be sub-classed if necessary via proxy or + multi-table inheritance. + Extends :model:`Job`. + """ + + user = models.ForeignKey(User, on_delete=models.CASCADE) + + def complete_job(self): + """Report that the job has completed and stop pending + children. Extend. + """ + super().complete_job() + self.__terminate_pending_child_jobs() + + def notify_child_job_complete(self): + """let the job know when the items get work done""" + if self.complete: + return + + self.updated_date = timezone.now() + self.save(update_fields=["updated_date"]) + + if not self.complete and self.has_completed: + self.complete_job() + + def __terminate_job(self): # pylint: disable=unused-private-member + """Tell workers to ignore and not execute this task + & pending child tasks. Extend. + """ + super().__terminate_job() + self.__terminate_pending_child_jobs() + + def __terminate_pending_child_jobs(self): + """Tell workers to ignore and not execute any pending child tasks.""" + tasks = self.pending_child_jobs.filter(task_id__isnull=False).values_list( + "task_id", flat=True + ) + app.control.revoke(list(tasks)) + + for task in self.pending_child_jobs: + task.update(status=self.Status.STOPPED) + + @property + def has_completed(self): + """has this job finished""" + return not self.pending_child_jobs.exists() + + @property + def pending_child_jobs(self): + """items that haven't been processed yet""" + return self.child_jobs.filter(complete=False) + + +class ChildJob(Job): + """Stores the state of a Task for the related :model:`ParentJob`. + + Intended to be sub-classed if necessary via proxy or + multi-table inheritance. + Extends :model:`Job`. + """ + + parent_job = models.ForeignKey( + ParentJob, on_delete=models.CASCADE, related_name="child_jobs" + ) + + def set_status(self, status): + """Set job and parent_job status. Extend.""" + super().set_status(status) + + if ( + status == self.Status.ACTIVE + and self.parent_job.status == self.Status.PENDING + ): + self.parent_job.set_status(self.Status.ACTIVE) + + def complete_job(self): + """Report to parent_job that the job has completed. Extend.""" + super().complete_job() + self.parent_job.notify_child_job_complete() + + +class ParentTask(app.Task): + """Used with ParentJob, Abstract Tasks execute code at specific points in + a Task's lifecycle, applying to all Tasks with the same 'base'. + + All status & ParentJob.task_id assignment is managed here for you. + Usage e.g. @app.task(base=ParentTask) + """ + + def before_start( + self, task_id, args, kwargs + ): # pylint: disable=no-self-use, unused-argument + """Handler called before the task starts. Override. + + Prepare ParentJob before the task starts. + + Arguments: + task_id (str): Unique id of the task to execute. + args (Tuple): Original arguments for the task to execute. + kwargs (Dict): Original keyword arguments for the task to execute. + + Keyword Arguments: + job_id (int): Unique 'id' of the ParentJob. + no_children (bool): If 'True' this is the only Task expected to run + for the given ParentJob. + + Returns: + None: The return value of this handler is ignored. + """ + job = ParentJob.objects.get(id=kwargs["job_id"]) + job.task_id = task_id + job.save(update_fields=["task_id"]) + + if kwargs["no_children"]: + job.set_status(ChildJob.Status.ACTIVE) + + def on_success( + self, retval, task_id, args, kwargs + ): # pylint: disable=no-self-use, unused-argument + """Run by the worker if the task executes successfully. Override. + + Update ParentJob on Task complete. + + Arguments: + retval (Any): The return value of the task. + task_id (str): Unique id of the executed task. + args (Tuple): Original arguments for the executed task. + kwargs (Dict): Original keyword arguments for the executed task. + + Keyword Arguments: + job_id (int): Unique 'id' of the ParentJob. + no_children (bool): If 'True' this is the only Task expected to run + for the given ParentJob. + + Returns: + None: The return value of this handler is ignored. + """ + + if kwargs["no_children"]: + job = ParentJob.objects.get(id=kwargs["job_id"]) + job.complete_job() + + +class SubTask(app.Task): + """Used with ChildJob, Abstract Tasks execute code at specific points in + a Task's lifecycle, applying to all Tasks with the same 'base'. + + All status & ChildJob.task_id assignment is managed here for you. + Usage e.g. @app.task(base=SubTask) + """ + + def before_start( + self, task_id, args, kwargs + ): # pylint: disable=no-self-use, unused-argument + """Handler called before the task starts. Override. + + Prepare ChildJob before the task starts. + + Arguments: + task_id (str): Unique id of the task to execute. + args (Tuple): Original arguments for the task to execute. + kwargs (Dict): Original keyword arguments for the task to execute. + + Keyword Arguments: + job_id (int): Unique 'id' of the ParentJob. + child_id (int): Unique 'id' of the ChildJob. + + Returns: + None: The return value of this handler is ignored. + """ + child_job = ChildJob.objects.get(id=kwargs["child_id"]) + child_job.task_id = task_id + child_job.save(update_fields=["task_id"]) + child_job.set_status(ChildJob.Status.ACTIVE) + + def on_success( + self, retval, task_id, args, kwargs + ): # pylint: disable=no-self-use, unused-argument + """Run by the worker if the task executes successfully. Override. + + Notify ChildJob of task completion. + + Arguments: + retval (Any): The return value of the task. + task_id (str): Unique id of the executed task. + args (Tuple): Original arguments for the executed task. + kwargs (Dict): Original keyword arguments for the executed task. + + Keyword Arguments: + job_id (int): Unique 'id' of the ParentJob. + child_id (int): Unique 'id' of the ChildJob. + + Returns: + None: The return value of this handler is ignored. + """ + subtask = ChildJob.objects.get(id=kwargs["child_id"]) + subtask.complete_job() + + +@transaction.atomic +def create_child_job(parent_job, task_callback): + """Utility method for creating a ChildJob + and running a task to avoid DB race conditions + """ + child_job = ChildJob.objects.create(parent_job=parent_job) + transaction.on_commit( + lambda: task_callback.delay(job_id=parent_job.id, child_id=child_job.id) + ) + + return child_job diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index d056c05b30..ca1e2aeb05 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -1,8 +1,16 @@ """ alert a user to activity """ from django.db import models, transaction from django.dispatch import receiver +from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from .base_model import BookWyrmModel -from . import Boost, Favorite, GroupMemberInvitation, ImportJob, LinkDomain +from . import ( + Boost, + Favorite, + GroupMemberInvitation, + ImportJob, + BookwyrmImportJob, + LinkDomain, +) from . import ListItem, Report, Status, User, UserFollowRequest from .site import InviteRequest @@ -23,6 +31,8 @@ class NotificationType(models.TextChoices): # Imports IMPORT = "IMPORT" + USER_IMPORT = "USER_IMPORT" + USER_EXPORT = "USER_EXPORT" # List activity ADD = "ADD" @@ -63,6 +73,9 @@ class Notification(BookWyrmModel): ) related_status = models.ForeignKey("Status", on_delete=models.CASCADE, null=True) related_import = models.ForeignKey("ImportJob", on_delete=models.CASCADE, null=True) + related_user_export = models.ForeignKey( + "BookwyrmExportJob", on_delete=models.CASCADE, null=True + ) related_list_items = models.ManyToManyField( "ListItem", symmetrical=False, related_name="notifications" ) @@ -226,6 +239,36 @@ def notify_user_on_import_complete( ) +@receiver(models.signals.post_save, sender=BookwyrmImportJob) +# pylint: disable=unused-argument +def notify_user_on_user_import_complete( + sender, instance, *args, update_fields=None, **kwargs +): + """we imported your user details! aren't you proud of us""" + update_fields = update_fields or [] + if not instance.complete or "complete" not in update_fields: + return + Notification.objects.create( + user=instance.user, notification_type=NotificationType.USER_IMPORT + ) + + +@receiver(models.signals.post_save, sender=BookwyrmExportJob) +# pylint: disable=unused-argument +def notify_user_on_user_export_complete( + sender, instance, *args, update_fields=None, **kwargs +): + """we exported your user details! aren't you proud of us""" + update_fields = update_fields or [] + if not instance.complete or "complete" not in update_fields: + return + Notification.objects.create( + user=instance.user, + notification_type=NotificationType.USER_EXPORT, + related_user_export=instance, + ) + + @receiver(models.signals.post_save, sender=Report) @transaction.atomic # pylint: disable=unused-argument diff --git a/bookwyrm/models/relationship.py b/bookwyrm/models/relationship.py index 7af6ad5abd..3386a02dce 100644 --- a/bookwyrm/models/relationship.py +++ b/bookwyrm/models/relationship.py @@ -65,6 +65,13 @@ def get_remote_id(self): base_path = self.user_subject.remote_id return f"{base_path}#follows/{self.id}" + def get_accept_reject_id(self, status): + """get id for sending an accept or reject of a local user""" + + base_path = self.user_object.remote_id + status_id = self.id or 0 + return f"{base_path}#{status}/{status_id}" + class UserFollows(ActivityMixin, UserRelationship): """Following a user""" @@ -105,6 +112,20 @@ def from_request(cls, follow_request): ) return obj + def reject(self): + """generate a Reject for this follow. This would normally happen + when a user deletes a follow they previously accepted""" + + if self.user_object.local: + activity = activitypub.Reject( + id=self.get_accept_reject_id(status="rejects"), + actor=self.user_object.remote_id, + object=self.to_activity(), + ).serialize() + self.broadcast(activity, self.user_object) + + self.delete() + class UserFollowRequest(ActivitypubMixin, UserRelationship): """following a user requires manual or automatic confirmation""" @@ -148,13 +169,6 @@ def save(self, *args, broadcast=True, **kwargs): # pylint: disable=arguments-di if not manually_approves: self.accept() - def get_accept_reject_id(self, status): - """get id for sending an accept or reject of a local user""" - - base_path = self.user_object.remote_id - status_id = self.id or 0 - return f"{base_path}#{status}/{status_id}" - def accept(self, broadcast_only=False): """turn this request into the real deal""" user = self.user_object diff --git a/bookwyrm/models/site.py b/bookwyrm/models/site.py index b962d597b6..201a499e55 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -10,8 +10,11 @@ from django.utils import timezone from model_utils import FieldTracker +from bookwyrm.connectors.abstract_connector import get_data from bookwyrm.preview_images import generate_site_preview_image_task from bookwyrm.settings import DOMAIN, ENABLE_PREVIEW_IMAGES, STATIC_FULL_URL +from bookwyrm.settings import RELEASE_API +from bookwyrm.tasks import app, MISC from .base_model import BookWyrmModel, new_access_code from .user import User from .fields import get_absolute_url @@ -45,7 +48,7 @@ class SiteSettings(SiteModel): default_theme = models.ForeignKey( "Theme", null=True, blank=True, on_delete=models.SET_NULL ) - version = models.CharField(null=True, blank=True, max_length=10) + available_version = models.CharField(null=True, blank=True, max_length=10) # admin setup options install_mode = models.BooleanField(default=False) @@ -96,6 +99,8 @@ class SiteSettings(SiteModel): imports_enabled = models.BooleanField(default=True) import_size_limit = models.IntegerField(default=0) import_limit_reset = models.IntegerField(default=0) + user_exports_enabled = models.BooleanField(default=False) + user_import_time_limit = models.IntegerField(default=48) field_tracker = FieldTracker(fields=["name", "instance_tagline", "logo"]) @@ -243,3 +248,14 @@ def preview_image(instance, *args, **kwargs): if len(changed_fields) > 0: generate_site_preview_image_task.delay() + + +@app.task(queue=MISC) +def check_for_updates_task(): + """See if git remote knows about a new version""" + site = SiteSettings.objects.get() + release = get_data(RELEASE_API, timeout=3) + available_version = release.get("tag_name", None) + if available_version: + site.available_version = available_version + site.save(update_fields=["available_version"]) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index cc44fe2bf5..f6235dab6c 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -12,6 +12,8 @@ from django.dispatch import receiver from django.template.loader import get_template from django.utils import timezone +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ngettext_lazy from model_utils import FieldTracker from model_utils.managers import InheritanceManager @@ -107,14 +109,14 @@ def delete(self, *args, **kwargs): # pylint: disable=unused-argument @property def recipients(self): """tagged users who definitely need to get this status in broadcast""" - mentions = [u for u in self.mention_users.all() if not u.local] + mentions = {u for u in self.mention_users.all() if not u.local} if ( hasattr(self, "reply_parent") and self.reply_parent and not self.reply_parent.user.local ): - mentions.append(self.reply_parent.user) - return list(set(mentions)) + mentions.add(self.reply_parent.user) + return list(mentions) @classmethod def ignore_activity( @@ -178,6 +180,24 @@ def boostable(self): """you can't boost dms""" return self.privacy in ["unlisted", "public"] + @property + def page_title(self): + """title of the page when only this status is shown""" + return _("%(display_name)s's status") % {"display_name": self.user.display_name} + + @property + def page_description(self): + """description of the page in meta tags when only this status is shown""" + return None + + @property + def page_image(self): + """image to use as preview in meta tags when only this status is shown""" + if self.mention_books.exists(): + book = self.mention_books.first() + return book.preview_image or book.cover + return self.user.preview_image + def to_replies(self, **kwargs): """helper function for loading AP serialized replies to a status""" return self.to_ordered_collection( @@ -301,6 +321,10 @@ class Meta: abstract = True + @property + def page_image(self): + return self.book.preview_image or self.book.cover or super().page_image + class Comment(BookStatus): """like a review but without a rating and transient""" @@ -332,17 +356,26 @@ def pure_content(self): activity_serializer = activitypub.Comment + @property + def page_title(self): + return _("%(display_name)s's comment on %(book_title)s") % { + "display_name": self.user.display_name, + "book_title": self.book.title, + } + class Quotation(BookStatus): """like a review but without a rating and transient""" quote = fields.HtmlField() raw_quote = models.TextField(blank=True, null=True) - position = models.IntegerField( - validators=[MinValueValidator(0)], null=True, blank=True + position = models.TextField( + null=True, + blank=True, ) - endposition = models.IntegerField( - validators=[MinValueValidator(0)], null=True, blank=True + endposition = models.TextField( + null=True, + blank=True, ) position_mode = models.CharField( max_length=3, @@ -374,6 +407,13 @@ def pure_content(self): activity_serializer = activitypub.Quotation + @property + def page_title(self): + return _("%(display_name)s's quote from %(book_title)s") % { + "display_name": self.user.display_name, + "book_title": self.book.title, + } + class Review(BookStatus): """a book review""" @@ -403,6 +443,13 @@ def pure_content(self): """indicate the book in question for mastodon (or w/e) users""" return self.content + @property + def page_title(self): + return _("%(display_name)s's review of %(book_title)s") % { + "display_name": self.user.display_name, + "book_title": self.book.title, + } + activity_serializer = activitypub.Review pure_type = "Article" @@ -426,6 +473,18 @@ def pure_content(self): template = get_template("snippets/generated_status/rating.html") return template.render({"book": self.book, "rating": self.rating}).strip() + @property + def page_description(self): + return ngettext_lazy( + "%(display_name)s rated %(book_title)s: %(display_rating).1f star", + "%(display_name)s rated %(book_title)s: %(display_rating).1f stars", + "display_rating", + ) % { + "display_name": self.user.display_name, + "book_title": self.book.title, + "display_rating": self.rating, + } + activity_serializer = activitypub.Rating pure_type = "Note" diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 75ca1d527d..89fd39b738 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -523,6 +523,20 @@ def save(self, *args, **kwargs): return super().save(*args, **kwargs) +@app.task(queue=MISC) +def erase_user_data(user_id): + """Erase any custom data about this user asynchronously + This is for deleted historical user data that pre-dates data + being cleared automatically""" + user = User.objects.get(id=user_id) + user.erase_user_data() + user.save( + broadcast=False, + update_fields=["email", "avatar", "preview_image", "summary", "name"], + ) + user.erase_user_statuses(broadcast=False) + + @app.task(queue=MISC) def set_remote_server(user_id, allow_external_connections=False): """figure out the user's remote server in the background""" diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index aaa50c56dd..77bec0d8ed 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -30,8 +30,11 @@ PAGE_LENGTH = env.int("PAGE_LENGTH", 15) DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") +# TODO: extend maximum age to 1 year once termination of active sessions +# is implemented (see bookwyrm-social#2278, bookwyrm-social#3082). +SESSION_COOKIE_AGE = env.int("SESSION_COOKIE_AGE", 3600 * 24 * 30) # 1 month -JS_CACHE = "ac315a3b" +JS_CACHE = "8a89cad7" # email EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend") @@ -99,6 +102,7 @@ "django.contrib.messages", "django.contrib.staticfiles", "django.contrib.humanize", + "file_resubmit", "sass_processor", "bookwyrm", "celery", @@ -120,6 +124,7 @@ "bookwyrm.middleware.IPBlocklistMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", + "bookwyrm.middleware.FileTooBig", ] ROOT_URLCONF = "bookwyrm.urls" @@ -243,7 +248,11 @@ CACHES = { "default": { "BACKEND": "django.core.cache.backends.dummy.DummyCache", - } + }, + "file_resubmit": { + "BACKEND": "django.core.cache.backends.dummy.DummyCache", + "LOCATION": "/tmp/file_resubmit_tests/", + }, } else: CACHES = { @@ -253,7 +262,11 @@ "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", }, - } + }, + "file_resubmit": { + "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", + "LOCATION": "/tmp/file_resubmit/", + }, } SESSION_ENGINE = "django.contrib.sessions.backends.cache" @@ -309,6 +322,7 @@ ("eu-es", _("Euskara (Basque)")), ("gl-es", _("Galego (Galician)")), ("it-it", _("Italiano (Italian)")), + ("ko-kr", _("한국어 (Korean)")), ("fi-fi", _("Suomi (Finnish)")), ("fr-fr", _("Français (French)")), ("lt-lt", _("Lietuvių (Lithuanian)")), @@ -319,6 +333,7 @@ ("pt-pt", _("Português Europeu (European Portuguese)")), ("ro-ro", _("Română (Romanian)")), ("sv-se", _("Svenska (Swedish)")), + ("uk-ua", _("Українська (Ukrainian)")), ("zh-hans", _("简体中文 (Simplified Chinese)")), ("zh-hant", _("繁體中文 (Traditional Chinese)")), ] @@ -337,8 +352,7 @@ USE_TZ = True -agent = requests.utils.default_user_agent() -USER_AGENT = f"{agent} (BookWyrm/{VERSION}; +https://{DOMAIN}/)" +USER_AGENT = f"BookWyrm (BookWyrm/{VERSION}; +https://{DOMAIN}/)" # Imagekit generated thumbnails ENABLE_THUMBNAIL_GENERATION = env.bool("ENABLE_THUMBNAIL_GENERATION", False) @@ -432,3 +446,7 @@ # Do not change this setting unless you already have an existing # user with the same username - in which case you should change it! INSTANCE_ACTOR_USERNAME = "bookwyrm.instance.actor" + +# We only allow specifying DATA_UPLOAD_MAX_MEMORY_SIZE in MiB from .env +# (note the difference in variable names). +DATA_UPLOAD_MAX_MEMORY_SIZE = env.int("DATA_UPLOAD_MAX_MEMORY_MiB", 100) << 20 diff --git a/bookwyrm/static/js/autocomplete.js b/bookwyrm/static/js/autocomplete.js index a98cd96346..6836d356d8 100644 --- a/bookwyrm/static/js/autocomplete.js +++ b/bookwyrm/static/js/autocomplete.js @@ -111,6 +111,10 @@ const tries = { }, }, f: { + b: { + 2: "FB2", + 3: "FB3", + }, l: { a: { c: "FLAC", diff --git a/bookwyrm/templates/413.html b/bookwyrm/templates/413.html new file mode 100644 index 0000000000..337436aae5 --- /dev/null +++ b/bookwyrm/templates/413.html @@ -0,0 +1,16 @@ +{% extends 'layout.html' %} +{% load i18n %} + +{% block title %}{% trans "File too large" %}{% endblock %} + +{% block content %} +
{% trans "The file you are uploading is too large." %}
+
+ {% blocktrans %}
+ You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.
+ {% endblocktrans %}
+
{% trans "A confirmation code has been sent to the email address you used to register your account." %}
diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index 7ecf10b70f..1b6cf29ffb 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -41,7 +41,7 @@+ {% spaceless %} + {% trans "If you wish to migrate any statuses (comments, reviews, or quotes) you must either set this account as an alias of the one you are migrating from, or move that account to this one, before you import your user data." %} + {% endspaceless %} +
+ {% if not site.imports_enabled %} ++ +
++ {% trans "Imports are temporarily disabled; thank you for your patience." %} +
+{% blocktrans %}Currently you are allowed to import one user every {{ user_import_hours }} hours.{% endblocktrans %}
+{% blocktrans %}You will next be able to import a user file at {{ next_available }}{% endblocktrans %}
++ {% trans "Date Created" %} + | ++ {% trans "Last Updated" %} + | ++ {% trans "Status" %} + | +|
---|---|---|---|
+ {% trans "No recent imports" %} + | +|||
+ {{ job.created_date }} + |
+ {{ job.updated_date }} | ++ + {% if job.status %} + {{ job.status }} + {{ job.status_display }} + {% elif job.complete %} + {% trans "Complete" %} + {% else %} + {% trans "Active" %} + {% endif %} + + | +
{{ login_form.non_field_errors }}
{% endif %} @@ -20,13 +20,15 @@- {% trans "More about this site" %} + {% trans "More about this site" %}
{{ login_form.non_field_errors }}
{% endif %} @@ -16,13 +16,15 @@- {% trans "More about this site" %} + {% trans "More about this site" %}
- {% id_to_username request.user.moved_to as username %} + {% id_to_username request.user.moved_to as username %} {% blocktrans trimmed with moved_to=user.moved_to %} You have moved your account to {{ username }} {% endblocktrans %} diff --git a/bookwyrm/templates/notifications/item.html b/bookwyrm/templates/notifications/item.html index a69790f52a..ac60ad46f6 100644 --- a/bookwyrm/templates/notifications/item.html +++ b/bookwyrm/templates/notifications/item.html @@ -10,11 +10,13 @@ {% elif notification.notification_type == 'FOLLOW' %} {% include 'notifications/items/follow.html' %} {% elif notification.notification_type == 'FOLLOW_REQUEST' %} - {% if notification.related_users.0.is_active %} - {% include 'notifications/items/follow_request.html' %} - {% endif %} + {% include 'notifications/items/follow_request.html' %} {% elif notification.notification_type == 'IMPORT' %} {% include 'notifications/items/import.html' %} +{% elif notification.notification_type == 'USER_IMPORT' %} + {% include 'notifications/items/user_import.html' %} +{% elif notification.notification_type == 'USER_EXPORT' %} + {% include 'notifications/items/user_export.html' %} {% elif notification.notification_type == 'ADD' %} {% include 'notifications/items/add.html' %} {% elif notification.notification_type == 'REPORT' %} diff --git a/bookwyrm/templates/notifications/items/move_user.html b/bookwyrm/templates/notifications/items/move_user.html index b94d96dc49..3121d3f45b 100644 --- a/bookwyrm/templates/notifications/items/move_user.html +++ b/bookwyrm/templates/notifications/items/move_user.html @@ -14,7 +14,7 @@ {% block description %} {% if related_user_moved_to %} - {% id_to_username request.user.moved_to as username %} + {% id_to_username related_user_moved_to as username %} {% blocktrans trimmed %} {{ related_user }} has moved to {{ username }} {% endblocktrans %} diff --git a/bookwyrm/templates/notifications/items/user_export.html b/bookwyrm/templates/notifications/items/user_export.html new file mode 100644 index 0000000000..1df40dbac1 --- /dev/null +++ b/bookwyrm/templates/notifications/items/user_export.html @@ -0,0 +1,15 @@ +{% extends 'notifications/items/layout.html' %} +{% load i18n %} + +{% block primary_link %}{% spaceless %} +{% url 'prefs-user-export' %} +{% endspaceless %}{% endblock %} + +{% block icon %} + +{% endblock %} + +{% block description %} + {% url 'prefs-user-export' as url %} + {% blocktrans %}Your user export is ready.{% endblocktrans %} +{% endblock %} diff --git a/bookwyrm/templates/notifications/items/user_import.html b/bookwyrm/templates/notifications/items/user_import.html new file mode 100644 index 0000000000..27e3e975dc --- /dev/null +++ b/bookwyrm/templates/notifications/items/user_import.html @@ -0,0 +1,16 @@ +{% extends 'notifications/items/layout.html' %} +{% load i18n %} + +{% block primary_link %}{% spaceless %} +{% url 'user-import' %} +{% endspaceless %}{% endblock %} + +{% block icon %} + +{% endblock %} + +{% block description %} +{% url 'user-import' as import_url %} +{% blocktrans %}Your user import is complete.{% endblocktrans %} + +{% endblock %} diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html new file mode 100644 index 0000000000..955cff6561 --- /dev/null +++ b/bookwyrm/templates/preferences/export-user.html @@ -0,0 +1,147 @@ +{% extends 'preferences/layout.html' %} +{% load i18n %} +{% load utilities %} + +{% block title %}{% trans "Export BookWyrm Account" %}{% endblock %} + +{% block header %} +{% trans "Export BookWyrm Account" %} +{% endblock %} + +{% block panel %} +
{% trans "You can create an export file here. This will allow you to migrate your data to another BookWyrm account." %}
+{% trans "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." %}
++ {% spaceless %} + {% trans "If you wish to migrate any statuses (comments, reviews, or quotes) you must either set the account you are moving to as an alias of this one, or move this account to the new account, before you import your user data." %} + {% endspaceless %} +
+ {% if not site.user_exports_enabled %} +
+ {% trans "New user exports are currently disabled." %}
+ {% if perms.bookwyrm.edit_instance_settings %}
+
+ {% url 'settings-imports' as url %}
+ {% blocktrans trimmed %}
+ User exports settings can be changed from the Imports page in the Admin dashboard.
+ {% endblocktrans %}
+ {% endif%}
+
+ {% blocktrans trimmed %} + You will be able to create a new export file at {{ next_available }} + {% endblocktrans %} +
+ {% else %} + + {% endif %} + ++ {% trans "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." %} +
++ {% trans "Date" %} + | ++ {% trans "Status" %} + | ++ {% trans "Size" %} + | +|
---|---|---|---|
+ {% trans "No recent imports" %} + | +|||
{{ job.updated_date }} | ++ + {% if job.status %} + {{ job.status }} + {{ job.status_display }} + {% elif job.complete %} + {% trans "Complete" %} + {% else %} + {% trans "Active" %} + {% endif %} + + | ++ {{ job.export_data|get_file_size }} + | ++ {% if job.complete and not job.status == "stopped" and not job.status == "failed" %} + + {% endif %} + | +
- {% trans "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." %}
+ {% trans "Your CSV export file will include all the books on your shelves, books you have reviewed, and books with reading activity.
Use this to import into a service like Goodreads." %}
+ {% id_to_username user.moved_to as moved_to_name %} + {% blocktrans trimmed with user=user|username moved_to_link=user.moved_to %} + {{ user }} has moved to {{ moved_to_name }} + {% endblocktrans %} +
+{{ user.localname }} {% trans "has moved to" %} {% id_to_username user.moved_to %}
-I love to make soup in Paris and eat pizza in New York
", + "icon": { + "type": "Document", + "url": "avatar.png", + "name": "avatar for rat", + "@context": "https://www.w3.org/ns/activitystreams" + }, + "bookwyrmUser": true, + "manuallyApprovesFollowers": true, + "discoverable": false, + "hideFollows": true, + "alsoKnownAs": [], + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "alsoKnownAs": { + "@id": "as:alsoKnownAs", + "@type": "@id" + }, + "movedTo": { + "@id": "as:movedTo", + "@type": "@id" + } + } + ], + "settings": { + "show_goal": false, + "preferred_timezone": "Australia/Adelaide", + "default_post_privacy": "followers", + "show_suggested_users": false + }, + "goals": [ + { + "goal": 12, + "year": 2023, + "privacy": "followers" + } + ], + "books": [ + { + "work": { + "id": "https://www.example.com/book/1", + "type": "Work", + "title": "Seeing Like a State", + "description": "Examines how (sometimes quasi-) authoritarian high-modernist planning fails to deliver the goods, be they increased resources for the state or a better life for the people.
", + "languages": [ "English" ], + "series": "", + "seriesNumber": "", + "subjects": [], + "subjectPlaces": [], + "authors": [ + "https://www.example.com/author/1" + ], + "firstPublishedDate": "", + "publishedDate": "1998-03-30T00:00:00Z", + "fileLinks": [], + "lccn": "", + "editions": [ + "https://www.example.com/book/2" + ], + "@context": "https://www.w3.org/ns/activitystreams" + }, + "edition": { + "id": "https://www.example.com/book/2", + "type": "Edition", + "openlibraryKey": "OL680025M", + "title": "Seeking Like A State", + "sortTitle": "seeing like a state", + "subtitle": "", + "description": "Examines how (sometimes quasi-) authoritarian high-modernist planning fails to deliver the goods, be they increased resources for the state or a better life for the people.
", + "languages": ["English"], + "series": "", + "seriesNumber": "", + "subjects": [], + "subjectPlaces": [], + "authors": [ + "https://www.example.com/author/1" + ], + "firstPublishedDate": "", + "publishedDate": "", + "fileLinks": [], + "cover": { + "type": "Document", + "url": "covers/d273d638-191d-4ebf-b213-3c60dbf010fe.jpeg", + "name": "James C. Scott: Seeing like a state", + "@context": "https://www.w3.org/ns/activitystreams" + }, + "work": "https://www.example.com/book/1", + "isbn10": "", + "isbn13": "9780300070163", + "oclcNumber": "", + "physicalFormat": "", + "physicalFormatDetail": "", + "publishers": [], + "editionRank": 4, + "@context": "https://www.w3.org/ns/activitystreams" + }, + "authors": [ + { + "id": "https://www.example.com/author/1", + "type": "Author", + "name": "James C. Scott", + "aliases": [ + "James Campbell Scott", + "\u30b8\u30a7\u30fc\u30e0\u30ba\u30fbC. \u30b9\u30b3\u30c3\u30c8", + "\u30b8\u30a7\u30fc\u30e0\u30ba\u30fbC\u30fb\u30b9\u30b3\u30c3\u30c8", + "\u062c\u06cc\u0645\u0632 \u0633\u06cc. \u0627\u0633\u06a9\u0627\u062a", + "Jim Scott", + "\u062c\u064a\u0645\u0633 \u0633\u0643\u0648\u062a", + "James C. Scott", + "\u0414\u0436\u0435\u0439\u043c\u0441 \u0421\u043a\u043e\u0442\u0442", + "\u30b8\u30a7\u30fc\u30e0\u30b9\u30fbC \u30b9\u30b3\u30c3\u30c8", + "James Cameron Scott" + ], + "bio": "American political scientist and anthropologist
", + "wikipediaLink": "https://en.wikipedia.org/wiki/James_C._Scott", + "website": "", + "@context": "https://www.w3.org/ns/activitystreams" + } + ], + "shelves": [ + { + "id": "https://www.example.com/user/rat/books/read", + "type": "Shelf", + "totalItems": 1, + "first": "https://www.example.com/user/rat/books/read?page=1", + "last": "https://www.example.com/user/rat/books/read?page=1", + "name": "Read", + "owner": "https://www.example.com/user/rat", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://www.example.com/user/rat/followers" + ], + "@context": "https://www.w3.org/ns/activitystreams" + }, + { + "id": "https://www.example.com/user/rat/books/to-read", + "type": "Shelf", + "totalItems": 1, + "first": "https://www.example.com/user/rat/books/to-read?page=1", + "last": "https://www.example.com/user/rat/books/to-read?page=1", + "name": "To Read", + "owner": "https://www.example.com/user/rat", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://www.example.com/user/rat/followers" + ], + "@context": "https://www.w3.org/ns/activitystreams" + } + ], + "lists": [ + { + "id": "https://www.example.com/list/2", + "type": "BookList", + "totalItems": 1, + "first": "https://www.example.com/list/2?page=1", + "last": "https://www.example.com/list/2?page=1", + "name": "my list of books", + "owner": "https://www.example.com/user/rat", + "to": [ + "https://www.example.com/user/rat/followers" + ], + "cc": [], + "summary": "Here is a description of my list", + "curation": "closed", + "@context": "https://www.w3.org/ns/activitystreams", + "privacy": "followers", + "list_item": { + "id": "https://www.example.com/user/rat/listitem/3", + "type": "ListItem", + "actor": "https://www.example.com/user/rat", + "book": "https://www.example.com/book/2", + "notes": "It's fun.
", + "approved": true, + "order": 1, + "@context": "https://www.w3.org/ns/activitystreams" + } + } + ], + "comments": [], + "quotations": [], + "reviews": [ + { + "id": "https://www.example.com/user/rat/review/7", + "type": "Review", + "published": "2023-08-14T04:09:18.343+00:00", + "attributedTo": "https://www.example.com//user/rat", + "content": "I like it
", + "to": [ + "https://your.domain.here/user/rat/followers" + ], + "cc": [], + "replies": { + "id": "https://www.example.com/user/rat/review/7/replies", + "type": "OrderedCollection", + "totalItems": 0, + "first": "https://www.example.com/user/rat/review/7/replies?page=1", + "last": "https://www.example.com/user/rat/review/7/replies?page=1", + "@context": "https://www.w3.org/ns/activitystreams" + }, + "summary": "Here's a spoiler alert", + "tag": [], + "attachment": [], + "sensitive": true, + "inReplyToBook": "https://www.example.com/book/6", + "name": "great book", + "rating": 5.0, + "@context": "https://www.w3.org/ns/activitystreams", + "progress": 23, + "progress_mode": "PG" + } + ], + "readthroughs": [ + { + "id": 1, + "created_date": "2023-08-14T04:00:27.544Z", + "updated_date": "2023-08-14T04:00:27.546Z", + "remote_id": "https://www.example.com/user/rat/readthrough/1", + "user_id": 1, + "book_id": 4880, + "progress": null, + "progress_mode": "PG", + "start_date": "2018-01-01T00:00:00Z", + "finish_date": "2023-08-13T00:00:00Z", + "stopped_date": null, + "is_active": false + } + ] + }, + { + "work": { + "id": "https://www.example.com/book/3", + "type": "Work", + "title": "Sand Talk: How Indigenous Thinking Can Save the World", + "description": "", + "languages": [], + "series": "", + "seriesNumber": "", + "subjects": [], + "subjectPlaces": [], + "authors": [ + "https://www.example.com/author/2" + ], + "firstPublishedDate": "", + "publishedDate": "", + "fileLinks": [], + "lccn": "", + "openlibraryKey": "OL28216445M", + "editions": [ + "https://www.example.com/book/4" + ], + "@context": "https://www.w3.org/ns/activitystreams" + }, + "edition": { + "id": "https://www.example.com/book/4", + "type": "Edition", + "title": "Sand Talk", + "sortTitle": "sand talk", + "subtitle": "How Indigenous Thinking Can Save the World", + "description": "", + "languages": [], + "series": "", + "seriesNumber": "", + "subjects": [], + "subjectPlaces": [], + "authors": [ + "https://www.example.com/author/2" + ], + "firstPublishedDate": "", + "publishedDate": "", + "fileLinks": [], + "cover": { + "type": "Document", + "url": "covers/6a553a08-2641-42a1-baa4-960df9edbbfc.jpeg", + "name": "Tyson Yunkaporta - Sand Talk", + "@context": "https://www.w3.org/ns/activitystreams" + }, + "work": "https://www.example.com/book/3", + "isbn10": "", + "isbn13": "9780062975645", + "oclcNumber": "", + "inventaireId": "isbn:9780062975645", + "physicalFormat": "paperback", + "physicalFormatDetail": "", + "publishers": [], + "editionRank": 5, + "@context": "https://www.w3.org/ns/activitystreams" + }, + "authors": [ + { + "id": "https://www.example.com/author/2", + "type": "Author", + "name": "Tyson Yunkaporta", + "aliases": [], + "bio": "", + "wikipediaLink": "", + "website": "", + "@context": "https://www.w3.org/ns/activitystreams" + } + ], + "shelves": [], + "lists": [], + "comments": [ + { + "id": "https://www.example.com/user/rat/comment/4", + "type": "Comment", + "published": "2023-08-14T04:48:18.746+00:00", + "attributedTo": "https://www.example.com/user/rat", + "content": "this is a comment about an amazing book
", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://www.example.com/user/rat/followers" + ], + "replies": { + "id": "https://www.example.com/user/rat/comment/4/replies", + "type": "OrderedCollection", + "totalItems": 0, + "first": "https://www.example.com/user/rat/comment/4/replies?page=1", + "last": "https://www.example.com/user/rat/comment/4/replies?page=1", + "@context": "https://www.w3.org/ns/activitystreams" + }, + "tag": [], + "attachment": [], + "sensitive": false, + "inReplyToBook": "https://www.example.com/book/4", + "readingStatus": null, + "@context": "https://www.w3.org/ns/activitystreams" + } + ], + "quotations": [ + { + "id": "https://www.example.com/user/rat/quotation/2", + "type": "Quotation", + "published": "2023-11-12T04:29:38.370305+00:00", + "attributedTo": "https://www.example.com/user/rat", + "content": "not actually from this book lol
", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://www.example.com/user/rat/followers" + ], + "replies": { + "id": "https://www.example.com/user/rat/quotation/2/replies", + "type": "OrderedCollection", + "totalItems": 0, + "first": "https://www.example.com/user/rat/quotation/2/replies?page=1", + "last": "https://www.example.com/user/rat/quotation/2/replies?page=1", + "@context": "https://www.w3.org/ns/activitystreams" + }, + "tag": [], + "attachment": [], + "sensitive": false, + "summary": "spoiler ahead!", + "inReplyToBook": "https://www.example.com/book/2", + "quote": "To be or not to be
", + "@context": "https://www.w3.org/ns/activitystreams" + } + ], + "reviews": [], + "readthroughs": [] + } + ], + "saved_lists": [ + "https://local.lists/9999" + ], + "follows": [ + "https://your.domain.here/user/rat" + ], + "blocks": ["https://your.domain.here/user/badger"] +} \ No newline at end of file diff --git a/bookwyrm/tests/importers/test_calibre_import.py b/bookwyrm/tests/importers/test_calibre_import.py index 37b206458a..d549a75ed7 100644 --- a/bookwyrm/tests/importers/test_calibre_import.py +++ b/bookwyrm/tests/importers/test_calibre_import.py @@ -16,12 +16,15 @@ class CalibreImport(TestCase): """importing from Calibre csv""" - # pylint: disable=invalid-name def setUp(self): """use a test csv""" self.importer = CalibreImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/calibre.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) + + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """populate database""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/importers/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py index 88f8eb3f41..0b5fd5e2dd 100644 --- a/bookwyrm/tests/importers/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -23,12 +23,15 @@ def make_date(*args): class GoodreadsImport(TestCase): """importing from goodreads csv""" - # pylint: disable=invalid-name def setUp(self): """use a test csv""" self.importer = GoodreadsImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) + + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """populate database""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/importers/test_importer.py b/bookwyrm/tests/importers/test_importer.py index f48b979938..eb3041dc6f 100644 --- a/bookwyrm/tests/importers/test_importer.py +++ b/bookwyrm/tests/importers/test_importer.py @@ -26,13 +26,15 @@ def make_date(*args): class GenericImporter(TestCase): """importing from csv""" - # pylint: disable=invalid-name def setUp(self): """use a test csv""" - self.importer = Importer() datafile = pathlib.Path(__file__).parent.joinpath("../data/generic.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) + + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """populate database""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/importers/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py index 71a1c97962..c2fe7a9a8f 100644 --- a/bookwyrm/tests/importers/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -23,7 +23,6 @@ def make_date(*args): class LibrarythingImport(TestCase): """importing from librarything tsv""" - # pylint: disable=invalid-name def setUp(self): """use a test tsv""" self.importer = LibrarythingImporter() @@ -31,6 +30,10 @@ def setUp(self): # Librarything generates latin encoded exports... self.csv = open(datafile, "r", encoding=self.importer.encoding) + + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """populate database""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/importers/test_openlibrary_import.py b/bookwyrm/tests/importers/test_openlibrary_import.py index 82b5ec3eaf..2712930d9b 100644 --- a/bookwyrm/tests/importers/test_openlibrary_import.py +++ b/bookwyrm/tests/importers/test_openlibrary_import.py @@ -23,12 +23,15 @@ def make_date(*args): class OpenLibraryImport(TestCase): """importing from openlibrary csv""" - # pylint: disable=invalid-name def setUp(self): """use a test csv""" self.importer = OpenLibraryImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/openlibrary.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) + + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """populate database""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/importers/test_storygraph_import.py b/bookwyrm/tests/importers/test_storygraph_import.py index 0befbeb3f9..edc4846290 100644 --- a/bookwyrm/tests/importers/test_storygraph_import.py +++ b/bookwyrm/tests/importers/test_storygraph_import.py @@ -23,12 +23,15 @@ def make_date(*args): class StorygraphImport(TestCase): """importing from storygraph csv""" - # pylint: disable=invalid-name def setUp(self): """use a test csv""" self.importer = StorygraphImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/storygraph.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) + + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """populate database""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/lists_stream/test_signals.py b/bookwyrm/tests/lists_stream/test_signals.py index 96f1ae2310..51f0709b0e 100644 --- a/bookwyrm/tests/lists_stream/test_signals.py +++ b/bookwyrm/tests/lists_stream/test_signals.py @@ -8,8 +8,9 @@ class ListsStreamSignals(TestCase): """using redis to build activity streams""" - def setUp(self): - """use a test csv""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """database setup""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/lists_stream/test_stream.py b/bookwyrm/tests/lists_stream/test_stream.py index 0e87c74363..6dd6a1c8e4 100644 --- a/bookwyrm/tests/lists_stream/test_stream.py +++ b/bookwyrm/tests/lists_stream/test_stream.py @@ -15,8 +15,9 @@ class ListsStream(TestCase): """using redis to build activity streams""" - def setUp(self): - """use a test csv""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """database setup""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/lists_stream/test_tasks.py b/bookwyrm/tests/lists_stream/test_tasks.py index 2e01cecade..18ddecf18f 100644 --- a/bookwyrm/tests/lists_stream/test_tasks.py +++ b/bookwyrm/tests/lists_stream/test_tasks.py @@ -10,8 +10,9 @@ class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): - """use a test csv""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """database setup""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/management/test_populate_lists_streams.py b/bookwyrm/tests/management/test_populate_lists_streams.py index 2cce7b7a31..5990da4e36 100644 --- a/bookwyrm/tests/management/test_populate_lists_streams.py +++ b/bookwyrm/tests/management/test_populate_lists_streams.py @@ -12,7 +12,8 @@ class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need some stuff""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/management/test_populate_streams.py b/bookwyrm/tests/management/test_populate_streams.py index c20a21ac54..4d6bf688f7 100644 --- a/bookwyrm/tests/management/test_populate_streams.py +++ b/bookwyrm/tests/management/test_populate_streams.py @@ -10,7 +10,8 @@ class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need some stuff""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/migrations/test_0184.py b/bookwyrm/tests/migrations/test_0184.py deleted file mode 100644 index 4bf1b66c9f..0000000000 --- a/bookwyrm/tests/migrations/test_0184.py +++ /dev/null @@ -1,121 +0,0 @@ -""" testing migrations """ -from unittest.mock import patch - -from django.test import TestCase -from django.db.migrations.executor import MigrationExecutor -from django.db import connection - -from bookwyrm import models -from bookwyrm.management.commands import initdb -from bookwyrm.settings import DOMAIN - -# pylint: disable=missing-class-docstring -# pylint: disable=missing-function-docstring -class EraseDeletedUserDataMigration(TestCase): - - migrate_from = "0183_auto_20231105_1607" - migrate_to = "0184_auto_20231106_0421" - - # pylint: disable=invalid-name - def setUp(self): - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): - self.active_user = models.User.objects.create_user( - f"activeuser@{DOMAIN}", - "activeuser@activeuser.activeuser", - "activeuserword", - local=True, - localname="active", - name="a name", - ) - self.inactive_user = models.User.objects.create_user( - f"inactiveuser@{DOMAIN}", - "inactiveuser@inactiveuser.inactiveuser", - "inactiveuserword", - local=True, - localname="inactive", - is_active=False, - deactivation_reason="self_deactivation", - name="name name", - ) - self.deleted_user = models.User.objects.create_user( - f"deleteduser@{DOMAIN}", - "deleteduser@deleteduser.deleteduser", - "deleteduserword", - local=True, - localname="deleted", - is_active=False, - deactivation_reason="self_deletion", - name="cool name", - ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_status_task.delay"): - self.active_status = models.Status.objects.create( - user=self.active_user, content="don't delete me" - ) - self.inactive_status = models.Status.objects.create( - user=self.inactive_user, content="also don't delete me" - ) - self.deleted_status = models.Status.objects.create( - user=self.deleted_user, content="yes, delete me" - ) - - initdb.init_groups() - initdb.init_permissions() - - self.migrate_from = [("bookwyrm", self.migrate_from)] - self.migrate_to = [("bookwyrm", self.migrate_to)] - executor = MigrationExecutor(connection) - old_apps = executor.loader.project_state(self.migrate_from).apps - - # Reverse to the original migration - executor.migrate(self.migrate_from) - - self.setUpBeforeMigration(old_apps) - - # Run the migration to test - executor = MigrationExecutor(connection) - executor.loader.build_graph() # reload. - with patch("bookwyrm.activitystreams.remove_status_task.delay"): - executor.migrate(self.migrate_to) - - self.apps = executor.loader.project_state(self.migrate_to).apps - - def setUpBeforeMigration(self, apps): - pass - - def test_user_data_deleted(self): - """Make sure that only the right data was deleted""" - self.active_user.refresh_from_db() - self.inactive_user.refresh_from_db() - self.deleted_user.refresh_from_db() - self.active_status.refresh_from_db() - self.inactive_status.refresh_from_db() - self.deleted_status.refresh_from_db() - - self.assertTrue(self.active_user.is_active) - self.assertFalse(self.active_user.is_deleted) - self.assertEqual(self.active_user.name, "a name") - self.assertNotEqual(self.deleted_user.email, "activeuser@activeuser.activeuser") - self.assertFalse(self.active_status.deleted) - self.assertEqual(self.active_status.content, "don't delete me") - - self.assertFalse(self.inactive_user.is_active) - self.assertFalse(self.inactive_user.is_deleted) - self.assertEqual(self.inactive_user.name, "name name") - self.assertNotEqual( - self.deleted_user.email, "inactiveuser@inactiveuser.inactiveuser" - ) - self.assertFalse(self.inactive_status.deleted) - self.assertEqual(self.inactive_status.content, "also don't delete me") - - self.assertFalse(self.deleted_user.is_active) - self.assertTrue(self.deleted_user.is_deleted) - self.assertIsNone(self.deleted_user.name) - self.assertNotEqual( - self.deleted_user.email, "deleteduser@deleteduser.deleteduser" - ) - self.assertTrue(self.deleted_status.deleted) - self.assertIsNone(self.deleted_status.content) diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index 645a6546bb..2f6fad76d1 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -26,7 +26,8 @@ class ActivitypubMixins(TestCase): """functionality shared across models""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """shared data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -47,6 +48,8 @@ def setUp(self): outbox="https://example.com/users/rat/outbox", ) + def setUp(self): + """test data""" self.object_mock = { "to": "to field", "cc": "cc field", @@ -224,14 +227,18 @@ def test_get_recipients_combine_inboxes(self, *_): shared_inbox="http://example.com/inbox", outbox="https://example.com/users/nutria/outbox", ) - MockSelf = namedtuple("Self", ("privacy", "user")) - mock_self = MockSelf("public", self.local_user) + MockSelf = namedtuple("Self", ("privacy", "user", "recipients")) self.local_user.followers.add(self.remote_user) self.local_user.followers.add(another_remote_user) + mock_self = MockSelf("public", self.local_user, []) recipients = ActivitypubMixin.get_recipients(mock_self) - self.assertEqual(len(recipients), 1) - self.assertEqual(recipients[0], "http://example.com/inbox") + self.assertCountEqual(recipients, ["http://example.com/inbox"]) + + # should also work with recipient that is a follower + mock_self.recipients.append(another_remote_user) + recipients = ActivitypubMixin.get_recipients(mock_self) + self.assertCountEqual(recipients, ["http://example.com/inbox"]) def test_get_recipients_software(self, *_): """should differentiate between bookwyrm and other remote users""" @@ -391,11 +398,13 @@ def test_to_undo_activity(self, *_): def test_to_ordered_collection_page(self, *_): """make sure the paged results of an ordered collection work""" self.assertEqual(PAGE_LENGTH, 15) - for number in range(0, 2 * PAGE_LENGTH): - models.Status.objects.create( + models.Status.objects.bulk_create( + models.Status( user=self.local_user, content=f"test status {number}", ) + for number in range(2 * PAGE_LENGTH) + ) page_1 = to_ordered_collection_page( models.Status.objects.all(), "http://fish.com/", page=1 ) @@ -416,13 +425,13 @@ def test_to_ordered_collection_page(self, *_): def test_to_ordered_collection(self, *_): """convert a queryset into an ordered collection object""" self.assertEqual(PAGE_LENGTH, 15) - - for number in range(0, 2 * PAGE_LENGTH): - models.Status.objects.create( + models.Status.objects.bulk_create( + models.Status( user=self.local_user, content=f"test status {number}", ) - + for number in range(2 * PAGE_LENGTH) + ) MockSelf = namedtuple("Self", ("remote_id")) mock_self = MockSelf("") diff --git a/bookwyrm/tests/models/test_automod.py b/bookwyrm/tests/models/test_automod.py index 9de7e64882..1ad139886f 100644 --- a/bookwyrm/tests/models/test_automod.py +++ b/bookwyrm/tests/models/test_automod.py @@ -14,10 +14,9 @@ class AutomodModel(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -30,6 +29,9 @@ def setUp(self): is_superuser=True, ) + def setUp(self): + self.factory = RequestFactory() + def test_automod_task_no_rules(self, *_): """nothing to see here""" self.assertFalse(models.Report.objects.exists()) diff --git a/bookwyrm/tests/models/test_base_model.py b/bookwyrm/tests/models/test_base_model.py index b94592571c..f1f465b736 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -12,7 +12,8 @@ class BaseModel(TestCase): """functionality shared across models""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """shared data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -31,6 +32,7 @@ def setUp(self): outbox="https://example.com/users/rat/outbox", ) + def setUp(self): class BookWyrmTestModel(base_model.BookWyrmModel): """just making it not abstract""" diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 4347efcb68..c6b8541806 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -18,7 +18,8 @@ class Book(TestCase): """not too much going on in the books model but here we are""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we'll need some books""" self.work = models.Work.objects.create( title="Example Work", remote_id="https://example.com/book/1" diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py new file mode 100644 index 0000000000..b5f2520a9e --- /dev/null +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -0,0 +1,231 @@ +"""test bookwyrm user export functions""" +import datetime +import json +from unittest.mock import patch + +from django.core.serializers.json import DjangoJSONEncoder +from django.test import TestCase +from django.utils import timezone + +from bookwyrm import models +import bookwyrm.models.bookwyrm_export_job as export_job + + +class BookwyrmExport(TestCase): + """testing user export functions""" + + def setUp(self): + """lots of stuff to set up for a user export""" + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"), patch( + "bookwyrm.suggested_users.rerank_user_task.delay" + ), patch( + "bookwyrm.lists_stream.remove_list_task.delay" + ), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch( + "bookwyrm.activitystreams.add_book_statuses_task" + ): + + self.local_user = models.User.objects.create_user( + "mouse", + "mouse@mouse.mouse", + "password", + local=True, + localname="mouse", + name="Mouse", + summary="I'm a real bookmouse", + manually_approves_followers=False, + hide_follows=False, + show_goal=False, + show_suggested_users=False, + discoverable=True, + preferred_timezone="America/Los Angeles", + default_post_privacy="followers", + ) + + self.rat_user = models.User.objects.create_user( + "rat", "rat@rat.rat", "ratword", local=True, localname="rat" + ) + + self.badger_user = models.User.objects.create_user( + "badger", + "badger@badger.badger", + "badgerword", + local=True, + localname="badger", + ) + + models.AnnualGoal.objects.create( + user=self.local_user, + year=timezone.now().year, + goal=128937123, + privacy="followers", + ) + + self.list = models.List.objects.create( + name="My excellent list", + user=self.local_user, + remote_id="https://local.lists/1111", + ) + + self.saved_list = models.List.objects.create( + name="My cool list", + user=self.rat_user, + remote_id="https://local.lists/9999", + ) + + self.local_user.saved_lists.add(self.saved_list) + self.local_user.blocks.add(self.badger_user) + self.rat_user.followers.add(self.local_user) + + # book, edition, author + self.author = models.Author.objects.create(name="Sam Zhu") + self.work = models.Work.objects.create( + title="Example Work", remote_id="https://example.com/book/1" + ) + self.edition = models.Edition.objects.create( + title="Example Edition", parent_work=self.work + ) + + self.edition.authors.add(self.author) + + # readthrough + self.readthrough_start = timezone.now() + finish = self.readthrough_start + datetime.timedelta(days=1) + models.ReadThrough.objects.create( + user=self.local_user, + book=self.edition, + start_date=self.readthrough_start, + finish_date=finish, + ) + + # shelve + read_shelf = models.Shelf.objects.get( + user=self.local_user, identifier="read" + ) + models.ShelfBook.objects.create( + book=self.edition, shelf=read_shelf, user=self.local_user + ) + + # add to list + models.ListItem.objects.create( + book_list=self.list, + user=self.local_user, + book=self.edition, + approved=True, + order=1, + ) + + # review + models.Review.objects.create( + content="awesome", + name="my review", + rating=5, + user=self.local_user, + book=self.edition, + ) + # comment + models.Comment.objects.create( + content="ok so far", + user=self.local_user, + book=self.edition, + progress=15, + ) + # quote + models.Quotation.objects.create( + content="check this out", + quote="A rose by any other name", + user=self.local_user, + book=self.edition, + ) + + def test_json_export_user_settings(self): + """Test the json export function for basic user info""" + data = export_job.json_export(self.local_user) + user_data = json.loads(data) + self.assertEqual(user_data["preferredUsername"], "mouse") + self.assertEqual(user_data["name"], "Mouse") + self.assertEqual(user_data["summary"], "I'm a real bookmouse
") + self.assertEqual(user_data["manuallyApprovesFollowers"], False) + self.assertEqual(user_data["hideFollows"], False) + self.assertEqual(user_data["discoverable"], True) + self.assertEqual(user_data["settings"]["show_goal"], False) + self.assertEqual(user_data["settings"]["show_suggested_users"], False) + self.assertEqual( + user_data["settings"]["preferred_timezone"], "America/Los Angeles" + ) + self.assertEqual(user_data["settings"]["default_post_privacy"], "followers") + + def test_json_export_extended_user_data(self): + """Test the json export function for other non-book user info""" + data = export_job.json_export(self.local_user) + json_data = json.loads(data) + + # goal + self.assertEqual(len(json_data["goals"]), 1) + self.assertEqual(json_data["goals"][0]["goal"], 128937123) + self.assertEqual(json_data["goals"][0]["year"], timezone.now().year) + self.assertEqual(json_data["goals"][0]["privacy"], "followers") + + # saved lists + self.assertEqual(len(json_data["saved_lists"]), 1) + self.assertEqual(json_data["saved_lists"][0], "https://local.lists/9999") + + # follows + self.assertEqual(len(json_data["follows"]), 1) + self.assertEqual(json_data["follows"][0], "https://your.domain.here/user/rat") + # blocked users + self.assertEqual(len(json_data["blocks"]), 1) + self.assertEqual(json_data["blocks"][0], "https://your.domain.here/user/badger") + + def test_json_export_books(self): + """Test the json export function for extended user info""" + + data = export_job.json_export(self.local_user) + json_data = json.loads(data) + start_date = json_data["books"][0]["readthroughs"][0]["start_date"] + + self.assertEqual(len(json_data["books"]), 1) + self.assertEqual(json_data["books"][0]["edition"]["title"], "Example Edition") + self.assertEqual(len(json_data["books"][0]["authors"]), 1) + self.assertEqual(json_data["books"][0]["authors"][0]["name"], "Sam Zhu") + + self.assertEqual( + f'"{start_date}"', DjangoJSONEncoder().encode(self.readthrough_start) + ) + + self.assertEqual(json_data["books"][0]["shelves"][0]["name"], "Read") + + self.assertEqual(len(json_data["books"][0]["lists"]), 1) + self.assertEqual(json_data["books"][0]["lists"][0]["name"], "My excellent list") + self.assertEqual( + json_data["books"][0]["lists"][0]["list_item"]["book"], + self.edition.remote_id, + self.edition.id, + ) + + self.assertEqual(len(json_data["books"][0]["reviews"]), 1) + self.assertEqual(len(json_data["books"][0]["comments"]), 1) + self.assertEqual(len(json_data["books"][0]["quotations"]), 1) + + self.assertEqual(json_data["books"][0]["reviews"][0]["name"], "my review") + self.assertEqual( + json_data["books"][0]["reviews"][0]["content"], "awesome
" + ) + self.assertEqual(json_data["books"][0]["reviews"][0]["rating"], 5.0) + + self.assertEqual( + json_data["books"][0]["comments"][0]["content"], "ok so far
" + ) + self.assertEqual(json_data["books"][0]["comments"][0]["progress"], 15) + self.assertEqual(json_data["books"][0]["comments"][0]["progress_mode"], "PG") + + self.assertEqual( + json_data["books"][0]["quotations"][0]["content"], "check this out
" + ) + self.assertEqual( + json_data["books"][0]["quotations"][0]["quote"], + "A rose by any other name
", + ) diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py new file mode 100644 index 0000000000..adc04706ca --- /dev/null +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -0,0 +1,545 @@ +""" testing models """ + +import json +import pathlib +from unittest.mock import patch + +from django.db.models import Q +from django.utils.dateparse import parse_datetime +from django.test import TestCase + +from bookwyrm import models +from bookwyrm.utils.tar import BookwyrmTarFile +from bookwyrm.models import bookwyrm_import_job + + +class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods + """testing user import functions""" + + def setUp(self): + """setting stuff up""" + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"), patch( + "bookwyrm.suggested_users.rerank_user_task.delay" + ): + + self.local_user = models.User.objects.create_user( + "mouse", + "mouse@mouse.mouse", + "password", + local=True, + localname="mouse", + name="Mouse", + summary="I'm a real bookmouse", + manually_approves_followers=False, + hide_follows=False, + show_goal=True, + show_suggested_users=True, + discoverable=True, + preferred_timezone="America/Los Angeles", + default_post_privacy="public", + ) + + self.rat_user = models.User.objects.create_user( + "rat", "rat@rat.rat", "password", local=True, localname="rat" + ) + + self.badger_user = models.User.objects.create_user( + "badger", + "badger@badger.badger", + "password", + local=True, + localname="badger", + ) + + self.work = models.Work.objects.create(title="Sand Talk") + + self.book = models.Edition.objects.create( + title="Sand Talk", + remote_id="https://example.com/book/1234", + openlibrary_key="OL28216445M", + inventaire_id="isbn:9780062975645", + isbn_13="9780062975645", + parent_work=self.work, + ) + + self.json_file = pathlib.Path(__file__).parent.joinpath( + "../data/user_import.json" + ) + + with open(self.json_file, "r", encoding="utf-8") as jsonfile: + self.json_data = json.loads(jsonfile.read()) + + self.archive_file = pathlib.Path(__file__).parent.joinpath( + "../data/bookwyrm_account_export.tar.gz" + ) + + def test_update_user_profile(self): + """Test update the user's profile from import data""" + + with patch("bookwyrm.suggested_users.remove_user_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.suggested_users.rerank_user_task.delay"): + + with open(self.archive_file, "rb") as fileobj: + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: + + models.bookwyrm_import_job.update_user_profile( + self.local_user, tarfile, self.json_data + ) + + self.local_user.refresh_from_db() + + self.assertEqual( + self.local_user.username, "mouse" + ) # username should not change + self.assertEqual(self.local_user.name, "Rat") + self.assertEqual( + self.local_user.summary, + "I love to make soup in Paris and eat pizza in New York", + ) + + def test_update_user_settings(self): + """Test updating the user's settings from import data""" + + with patch("bookwyrm.suggested_users.remove_user_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.suggested_users.rerank_user_task.delay"): + + models.bookwyrm_import_job.update_user_settings( + self.local_user, self.json_data + ) + self.local_user.refresh_from_db() + + self.assertEqual(self.local_user.manually_approves_followers, True) + self.assertEqual(self.local_user.hide_follows, True) + self.assertEqual(self.local_user.show_goal, False) + self.assertEqual(self.local_user.show_suggested_users, False) + self.assertEqual(self.local_user.discoverable, False) + self.assertEqual(self.local_user.preferred_timezone, "Australia/Adelaide") + self.assertEqual(self.local_user.default_post_privacy, "followers") + + def test_update_goals(self): + """Test update the user's goals from import data""" + + models.AnnualGoal.objects.create( + user=self.local_user, + year=2023, + goal=999, + privacy="public", + ) + + goals = [{"goal": 12, "year": 2023, "privacy": "followers"}] + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + + models.bookwyrm_import_job.update_goals(self.local_user, goals) + + self.local_user.refresh_from_db() + goal = models.AnnualGoal.objects.get() + self.assertEqual(goal.year, 2023) + self.assertEqual(goal.goal, 12) + self.assertEqual(goal.privacy, "followers") + + def test_upsert_saved_lists_existing(self): + """Test upserting an existing saved list""" + + with patch("bookwyrm.lists_stream.remove_list_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + book_list = models.List.objects.create( + name="My cool list", + user=self.rat_user, + remote_id="https://local.lists/9999", + ) + + self.assertFalse(self.local_user.saved_lists.filter(id=book_list.id).exists()) + + self.local_user.saved_lists.add(book_list) + + self.assertTrue(self.local_user.saved_lists.filter(id=book_list.id).exists()) + + with patch("bookwyrm.activitypub.base_activity.resolve_remote_id"): + models.bookwyrm_import_job.upsert_saved_lists( + self.local_user, ["https://local.lists/9999"] + ) + saved_lists = self.local_user.saved_lists.filter( + remote_id="https://local.lists/9999" + ).all() + self.assertEqual(len(saved_lists), 1) + + def test_upsert_saved_lists_not_existing(self): + """Test upserting a new saved list""" + + with patch("bookwyrm.lists_stream.remove_list_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + book_list = models.List.objects.create( + name="My cool list", + user=self.rat_user, + remote_id="https://local.lists/9999", + ) + + self.assertFalse(self.local_user.saved_lists.filter(id=book_list.id).exists()) + + with patch("bookwyrm.activitypub.base_activity.resolve_remote_id"): + models.bookwyrm_import_job.upsert_saved_lists( + self.local_user, ["https://local.lists/9999"] + ) + + self.assertTrue(self.local_user.saved_lists.filter(id=book_list.id).exists()) + + def test_upsert_follows(self): + """Test take a list of remote ids and add as follows""" + + before_follow = models.UserFollows.objects.filter( + user_subject=self.local_user, user_object=self.rat_user + ).exists() + + self.assertFalse(before_follow) + + with patch("bookwyrm.activitystreams.add_user_statuses_task.delay"), patch( + "bookwyrm.lists_stream.add_user_lists_task.delay" + ), patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + models.bookwyrm_import_job.upsert_follows( + self.local_user, self.json_data.get("follows") + ) + + after_follow = models.UserFollows.objects.filter( + user_subject=self.local_user, user_object=self.rat_user + ).exists() + self.assertTrue(after_follow) + + def test_upsert_user_blocks(self): + """test adding blocked users""" + + blocked_before = models.UserBlocks.objects.filter( + Q( + user_subject=self.local_user, + user_object=self.badger_user, + ) + ).exists() + self.assertFalse(blocked_before) + + with patch("bookwyrm.suggested_users.remove_suggestion_task.delay"), patch( + "bookwyrm.activitystreams.remove_user_statuses_task.delay" + ), patch("bookwyrm.lists_stream.remove_user_lists_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + models.bookwyrm_import_job.upsert_user_blocks( + self.local_user, self.json_data.get("blocks") + ) + + blocked_after = models.UserBlocks.objects.filter( + Q( + user_subject=self.local_user, + user_object=self.badger_user, + ) + ).exists() + self.assertTrue(blocked_after) + + def test_get_or_create_edition_existing(self): + """Test take a JSON string of books and editions, + find or create the editions in the database and + return a list of edition instances""" + + self.assertEqual(models.Edition.objects.count(), 1) + + with open(self.archive_file, "rb") as fileobj: + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: + + bookwyrm_import_job.get_or_create_edition( + self.json_data["books"][1], tarfile + ) # Sand Talk + + self.assertEqual(models.Edition.objects.count(), 1) + + def test_get_or_create_edition_not_existing(self): + """Test take a JSON string of books and editions, + find or create the editions in the database and + return a list of edition instances""" + + self.assertEqual(models.Edition.objects.count(), 1) + + with open(self.archive_file, "rb") as fileobj: + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: + + bookwyrm_import_job.get_or_create_edition( + self.json_data["books"][0], tarfile + ) # Seeing like a state + + self.assertTrue(models.Edition.objects.filter(isbn_13="9780300070163").exists()) + self.assertEqual(models.Edition.objects.count(), 2) + + def test_upsert_readthroughs(self): + """Test take a JSON string of readthroughs, find or create the + instances in the database and return a list of saved instances""" + + readthroughs = [ + { + "id": 1, + "created_date": "2023-08-24T10:18:45.923Z", + "updated_date": "2023-08-24T10:18:45.928Z", + "remote_id": "https://example.com/mouse/readthrough/1", + "user_id": 1, + "book_id": 1234, + "progress": 23, + "progress_mode": "PG", + "start_date": "2022-12-31T13:30:00Z", + "finish_date": "2023-08-23T14:30:00Z", + "stopped_date": None, + "is_active": False, + } + ] + + self.assertEqual(models.ReadThrough.objects.count(), 0) + bookwyrm_import_job.upsert_readthroughs( + readthroughs, self.local_user, self.book.id + ) + + self.assertEqual(models.ReadThrough.objects.count(), 1) + self.assertEqual(models.ReadThrough.objects.first().progress_mode, "PG") + self.assertEqual( + models.ReadThrough.objects.first().start_date, + parse_datetime("2022-12-31T13:30:00Z"), + ) + self.assertEqual(models.ReadThrough.objects.first().book_id, self.book.id) + self.assertEqual(models.ReadThrough.objects.first().user, self.local_user) + + def test_get_or_create_review(self): + """Test get_or_create_review_status with a review""" + + self.assertEqual(models.Review.objects.filter(user=self.local_user).count(), 0) + reviews = self.json_data["books"][0]["reviews"] + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.models.bookwyrm_import_job.is_alias", return_value=True): + + bookwyrm_import_job.upsert_statuses( + self.local_user, models.Review, reviews, self.book.remote_id + ) + + self.assertEqual(models.Review.objects.filter(user=self.local_user).count(), 1) + self.assertEqual( + models.Review.objects.filter(book=self.book).first().content, + "I like it
", + ) + self.assertEqual( + models.Review.objects.filter(book=self.book).first().content_warning, + "Here's a spoiler alert", + ) + self.assertEqual( + models.Review.objects.filter(book=self.book).first().sensitive, True + ) + self.assertEqual( + models.Review.objects.filter(book=self.book).first().name, "great book" + ) + self.assertAlmostEqual( + models.Review.objects.filter(book=self.book).first().rating, 5.00 + ) + + self.assertEqual( + models.Review.objects.filter(book=self.book).first().privacy, "followers" + ) + + def test_get_or_create_comment(self): + """Test get_or_create_review_status with a comment""" + + self.assertEqual(models.Comment.objects.filter(user=self.local_user).count(), 0) + comments = self.json_data["books"][1]["comments"] + + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.models.bookwyrm_import_job.is_alias", return_value=True): + + bookwyrm_import_job.upsert_statuses( + self.local_user, models.Comment, comments, self.book.remote_id + ) + self.assertEqual(models.Comment.objects.filter(user=self.local_user).count(), 1) + self.assertEqual( + models.Comment.objects.filter(book=self.book).first().content, + "this is a comment about an amazing book
", + ) + self.assertEqual( + models.Comment.objects.filter(book=self.book).first().content_warning, None + ) + self.assertEqual( + models.Comment.objects.filter(book=self.book).first().sensitive, False + ) + self.assertEqual( + models.Comment.objects.filter(book=self.book).first().progress_mode, "PG" + ) + + def test_get_or_create_quote(self): + """Test get_or_create_review_status with a quote""" + + self.assertEqual( + models.Quotation.objects.filter(user=self.local_user).count(), 0 + ) + quotes = self.json_data["books"][1]["quotations"] + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.models.bookwyrm_import_job.is_alias", return_value=True): + + bookwyrm_import_job.upsert_statuses( + self.local_user, models.Quotation, quotes, self.book.remote_id + ) + self.assertEqual( + models.Quotation.objects.filter(user=self.local_user).count(), 1 + ) + self.assertEqual( + models.Quotation.objects.filter(book=self.book).first().content, + "not actually from this book lol
", + ) + self.assertEqual( + models.Quotation.objects.filter(book=self.book).first().content_warning, + "spoiler ahead!", + ) + self.assertEqual( + models.Quotation.objects.filter(book=self.book).first().quote, + "To be or not to be
", + ) + self.assertEqual( + models.Quotation.objects.filter(book=self.book).first().position_mode, "PG" + ) + + def test_get_or_create_quote_unauthorized(self): + """Test get_or_create_review_status with a quote but not authorized""" + + self.assertEqual( + models.Quotation.objects.filter(user=self.local_user).count(), 0 + ) + quotes = self.json_data["books"][1]["quotations"] + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.models.bookwyrm_import_job.is_alias", return_value=False): + + bookwyrm_import_job.upsert_statuses( + self.local_user, models.Quotation, quotes, self.book.remote_id + ) + self.assertEqual( + models.Quotation.objects.filter(user=self.local_user).count(), 0 + ) + + def test_upsert_list_existing(self): + """Take a list and ListItems as JSON and create DB entries + if they don't already exist""" + + book_data = self.json_data["books"][0] + + other_book = models.Edition.objects.create( + title="Another Book", remote_id="https://example.com/book/9876" + ) + + with patch("bookwyrm.lists_stream.remove_list_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + book_list = models.List.objects.create( + name="my list of books", user=self.local_user + ) + + models.ListItem.objects.create( + book=self.book, book_list=book_list, user=self.local_user, order=1 + ) + + self.assertTrue(models.List.objects.filter(id=book_list.id).exists()) + self.assertEqual(models.List.objects.filter(user=self.local_user).count(), 1) + self.assertEqual( + models.ListItem.objects.filter( + user=self.local_user, book_list=book_list + ).count(), + 1, + ) + + with patch("bookwyrm.lists_stream.remove_list_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + bookwyrm_import_job.upsert_lists( + self.local_user, + book_data["lists"], + other_book.id, + ) + + self.assertEqual(models.List.objects.filter(user=self.local_user).count(), 1) + self.assertEqual(models.List.objects.filter(user=self.local_user).count(), 1) + self.assertEqual( + models.ListItem.objects.filter( + user=self.local_user, book_list=book_list + ).count(), + 2, + ) + + def test_upsert_list_not_existing(self): + """Take a list and ListItems as JSON and create DB entries + if they don't already exist""" + + book_data = self.json_data["books"][0] + + self.assertEqual(models.List.objects.filter(user=self.local_user).count(), 0) + self.assertFalse(models.ListItem.objects.filter(book=self.book.id).exists()) + + with patch("bookwyrm.lists_stream.remove_list_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + bookwyrm_import_job.upsert_lists( + self.local_user, + book_data["lists"], + self.book.id, + ) + + self.assertEqual(models.List.objects.filter(user=self.local_user).count(), 1) + self.assertEqual( + models.ListItem.objects.filter(user=self.local_user).count(), 1 + ) + + def test_upsert_shelves_existing(self): + """Take shelf and ShelfBooks JSON objects and create + DB entries if they don't already exist""" + + self.assertEqual( + models.ShelfBook.objects.filter(user=self.local_user.id).count(), 0 + ) + + shelf = models.Shelf.objects.get(name="Read", user=self.local_user) + + with patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + models.ShelfBook.objects.create( + book=self.book, shelf=shelf, user=self.local_user + ) + + book_data = self.json_data["books"][0] + with patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + bookwyrm_import_job.upsert_shelves(self.book, self.local_user, book_data) + + self.assertEqual( + models.ShelfBook.objects.filter(user=self.local_user.id).count(), 2 + ) + + def test_upsert_shelves_not_existing(self): + """Take shelf and ShelfBooks JSON objects and create + DB entries if they don't already exist""" + + self.assertEqual( + models.ShelfBook.objects.filter(user=self.local_user.id).count(), 0 + ) + + book_data = self.json_data["books"][0] + + with patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + bookwyrm_import_job.upsert_shelves(self.book, self.local_user, book_data) + + self.assertEqual( + models.ShelfBook.objects.filter(user=self.local_user.id).count(), 2 + ) + + # check we didn't create an extra shelf + self.assertEqual( + models.Shelf.objects.filter(user=self.local_user.id).count(), 4 + ) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index d04178d4a1..cc8c54113d 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -438,7 +438,7 @@ def test_image_field_to_activity(self, *_): ) ) self.assertEqual(output.name, "") - self.assertEqual(output.type, "Document") + self.assertEqual(output.type, "Image") @responses.activate def test_image_field_from_activity(self, *_): diff --git a/bookwyrm/tests/models/test_group.py b/bookwyrm/tests/models/test_group.py index 86cafaa394..6f5388b19d 100644 --- a/bookwyrm/tests/models/test_group.py +++ b/bookwyrm/tests/models/test_group.py @@ -9,7 +9,8 @@ class Group(TestCase): """some activitypub oddness ahead""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """Set up for tests""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( diff --git a/bookwyrm/tests/models/test_import_model.py b/bookwyrm/tests/models/test_import_model.py index d1ff209f48..7ca36d2237 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -16,7 +16,8 @@ class ImportJob(TestCase): """this is a fancy one!!!""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """data is from a goodreads export of The Raven Tower""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -24,6 +25,8 @@ def setUp(self): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) + + def setUp(self): self.job = models.ImportJob.objects.create(user=self.local_user, mappings={}) def test_isbn(self): diff --git a/bookwyrm/tests/models/test_link.py b/bookwyrm/tests/models/test_link.py index 8afecd6cec..f72bdc2396 100644 --- a/bookwyrm/tests/models/test_link.py +++ b/bookwyrm/tests/models/test_link.py @@ -9,17 +9,6 @@ class Link(TestCase): """some activitypub oddness ahead""" - def setUp(self): - """look, a list""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): - self.local_user = models.User.objects.create_user( - "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" - ) - work = models.Work.objects.create(title="hello") - self.book = models.Edition.objects.create(title="hi", parent_work=work) - def test_create_domain(self, _): """generated default name""" domain = models.LinkDomain.objects.create(domain="beep.com") diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index f7e64c6f2e..83d7ed6a54 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -11,7 +11,8 @@ class List(TestCase): """some activitypub oddness ahead""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """look, a list""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/models/test_notification.py b/bookwyrm/tests/models/test_notification.py index 352b7631d9..93422640bf 100644 --- a/bookwyrm/tests/models/test_notification.py +++ b/bookwyrm/tests/models/test_notification.py @@ -7,7 +7,8 @@ class Notification(TestCase): """let people know things""" - def setUp(self): # pylint: disable=invalid-name + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """useful things for creating a notification""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -197,7 +198,8 @@ def test_unnotify_multiple_users(self): class NotifyInviteRequest(TestCase): """let admins know of invite requests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """ensure there is one admin""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/models/test_readthrough_model.py b/bookwyrm/tests/models/test_readthrough_model.py index 7e3963cff0..d34a06aafb 100644 --- a/bookwyrm/tests/models/test_readthrough_model.py +++ b/bookwyrm/tests/models/test_readthrough_model.py @@ -11,7 +11,8 @@ class ReadThrough(TestCase): """some activitypub oddness ahead""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """look, a shelf""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/models/test_relationship_models.py b/bookwyrm/tests/models/test_relationship_models.py index a5b4dbffd9..8f849bc3b4 100644 --- a/bookwyrm/tests/models/test_relationship_models.py +++ b/bookwyrm/tests/models/test_relationship_models.py @@ -14,7 +14,8 @@ class Relationship(TestCase): """following, blocking, stuff like that""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need some users for this""" with patch("bookwyrm.models.user.set_remote_server.delay"): self.remote_user = models.User.objects.create_user( diff --git a/bookwyrm/tests/models/test_shelf_model.py b/bookwyrm/tests/models/test_shelf_model.py index 4f7f358903..88b1fad06e 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -15,7 +15,8 @@ class Shelf(TestCase): """some activitypub oddness ahead""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """look, a shelf""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/models/test_site.py b/bookwyrm/tests/models/test_site.py index 05882268e5..f4accc04be 100644 --- a/bookwyrm/tests/models/test_site.py +++ b/bookwyrm/tests/models/test_site.py @@ -12,7 +12,8 @@ class SiteModels(TestCase): """tests for site models""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index d1f07b44e5..9899f6bf30 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -24,8 +24,8 @@ class Status(TestCase): """lotta types of statuses""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """useful things for creating a status""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -45,6 +45,10 @@ def setUp(self): ) self.book = models.Edition.objects.create(title="Test Edition") + def setUp(self): + """individual test setup""" + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False image_file = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) @@ -54,9 +58,6 @@ def setUp(self): image.save(output, format=image.format) self.book.cover.save("test.jpg", ContentFile(output.getvalue())) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False - def test_status_generated_fields(self, *_): """setting remote id""" status = models.Status.objects.create(content="bleh", user=self.local_user) diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 30d7918c08..47a662e491 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -18,8 +18,8 @@ class User(TestCase): protocol = "https://" if USE_HTTPS else "http://" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): diff --git a/bookwyrm/tests/templatetags/test_book_display_tags.py b/bookwyrm/tests/templatetags/test_book_display_tags.py index 54ae8806bf..dcff01a80e 100644 --- a/bookwyrm/tests/templatetags/test_book_display_tags.py +++ b/bookwyrm/tests/templatetags/test_book_display_tags.py @@ -13,7 +13,8 @@ class BookDisplayTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/templatetags/test_date_ext.py b/bookwyrm/tests/templatetags/test_date_ext.py index f7ea738919..bd31a95c9c 100644 --- a/bookwyrm/tests/templatetags/test_date_ext.py +++ b/bookwyrm/tests/templatetags/test_date_ext.py @@ -2,9 +2,15 @@ from dateutil.parser import isoparse from django.test import TestCase, override_settings +from django.utils import timezone from bookwyrm.templatetags import date_ext -from bookwyrm.utils.partial_date import MonthParts, YearParts, from_partial_isoformat +from bookwyrm.utils.partial_date import ( + MonthParts, + PartialDate, + YearParts, + from_partial_isoformat, +) @override_settings(LANGUAGE_CODE="en-AU") @@ -60,3 +66,20 @@ def test_nonstandard_formats_passthru(self): self.assertEqual( "December.31", date_ext.naturalday_partial(self._partial_year, "F.j") ) + + def test_natural_format(self): + """today and yesterday are handled correctly""" + today = timezone.now() + today_date = today.date() + today_exact = PartialDate.from_datetime(today) + + # exact dates can be naturalized + self.assertEqual("today", date_ext.naturalday_partial(today)) + self.assertEqual("today", date_ext.naturalday_partial(today_date)) + self.assertEqual("today", date_ext.naturalday_partial(today_exact)) + + # dates with missing parts can't + today_year = YearParts.from_datetime(today) + today_month = MonthParts.from_datetime(today) + self.assertEqual(str(today.year), date_ext.naturalday_partial(today_year)) + self.assertEqual(str(today.year), date_ext.naturalday_partial(today_month, "Y")) diff --git a/bookwyrm/tests/templatetags/test_feed_page_tags.py b/bookwyrm/tests/templatetags/test_feed_page_tags.py index 5e5dc2357b..d0a895f365 100644 --- a/bookwyrm/tests/templatetags/test_feed_page_tags.py +++ b/bookwyrm/tests/templatetags/test_feed_page_tags.py @@ -12,7 +12,8 @@ class FeedPageTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/templatetags/test_interaction.py b/bookwyrm/tests/templatetags/test_interaction.py index a48b3364df..a9d1267c08 100644 --- a/bookwyrm/tests/templatetags/test_interaction.py +++ b/bookwyrm/tests/templatetags/test_interaction.py @@ -12,7 +12,8 @@ class InteractionTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/templatetags/test_notification_page_tags.py b/bookwyrm/tests/templatetags/test_notification_page_tags.py index 3c92181b28..94f839ec57 100644 --- a/bookwyrm/tests/templatetags/test_notification_page_tags.py +++ b/bookwyrm/tests/templatetags/test_notification_page_tags.py @@ -12,7 +12,8 @@ class NotificationPageTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/templatetags/test_rating_tags.py b/bookwyrm/tests/templatetags/test_rating_tags.py index 8c07eeb8f3..5225d57a66 100644 --- a/bookwyrm/tests/templatetags/test_rating_tags.py +++ b/bookwyrm/tests/templatetags/test_rating_tags.py @@ -12,7 +12,8 @@ class RatingTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/templatetags/test_shelf_tags.py b/bookwyrm/tests/templatetags/test_shelf_tags.py index 5a88604dd4..7c456c8156 100644 --- a/bookwyrm/tests/templatetags/test_shelf_tags.py +++ b/bookwyrm/tests/templatetags/test_shelf_tags.py @@ -15,9 +15,9 @@ class ShelfTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -41,6 +41,10 @@ def setUp(self): parent_work=models.Work.objects.create(title="Test work"), ) + def setUp(self): + """test data""" + self.factory = RequestFactory() + def test_get_is_book_on_shelf(self, *_): """check if a book is on a shelf""" shelf = self.local_user.shelf_set.first() diff --git a/bookwyrm/tests/templatetags/test_status_display.py b/bookwyrm/tests/templatetags/test_status_display.py index af2fc94209..a9bab0b681 100644 --- a/bookwyrm/tests/templatetags/test_status_display.py +++ b/bookwyrm/tests/templatetags/test_status_display.py @@ -14,7 +14,8 @@ class StatusDisplayTags(TestCase): """lotta different things here""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/templatetags/test_utilities.py b/bookwyrm/tests/templatetags/test_utilities.py index c9e1c744f8..1bf98fda83 100644 --- a/bookwyrm/tests/templatetags/test_utilities.py +++ b/bookwyrm/tests/templatetags/test_utilities.py @@ -14,8 +14,8 @@ class UtilitiesTags(TestCase): """lotta different things here""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create some filler objects""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index 42e57f7739..439d2edbf2 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -11,7 +11,8 @@ class BookSearch(TestCase): """look for some books""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" self.work = models.Work.objects.create(title="Example Work") @@ -27,10 +28,10 @@ def setUp(self): parent_work=self.work, isbn_10="1111111111", openlibrary_key="hello", + pages=150, ) - self.third_edition = models.Edition.objects.create( - title="Edition with annoying ISBN", + title="Another Edition with annoying ISBN", parent_work=self.work, isbn_10="022222222X", ) @@ -77,16 +78,21 @@ def test_search_identifiers_return_first(self): def test_search_title_author(self): """search by unique identifiers""" - results = book_search.search_title_author("Another", min_confidence=0) + results = book_search.search_title_author("annoying", min_confidence=0) self.assertEqual(len(results), 1) - self.assertEqual(results[0], self.second_edition) + self.assertEqual(results[0], self.third_edition) def test_search_title_author_return_first(self): - """search by unique identifiers""" - results = book_search.search_title_author( + """sorts by edition rank""" + result = book_search.search_title_author( "Another", min_confidence=0, return_first=True ) - self.assertEqual(results, self.second_edition) + self.assertEqual(result, self.second_edition) # highest edition rank + + def test_search_title_author_one_edition_per_work(self): + """at most one edition per work""" + results = book_search.search_title_author("Edition", 0) + self.assertEqual(results, [self.first_edition]) # highest edition rank def test_format_search_result(self): """format a search result""" diff --git a/bookwyrm/tests/test_context_processors.py b/bookwyrm/tests/test_context_processors.py index 3d634aaf2f..614db681cd 100644 --- a/bookwyrm/tests/test_context_processors.py +++ b/bookwyrm/tests/test_context_processors.py @@ -11,9 +11,9 @@ class ContextProcessor(TestCase): """pages you land on without really trying""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -28,6 +28,10 @@ def setUp(self): self.anonymous_user.is_authenticated = False self.site = models.SiteSettings.objects.create() + def setUp(self): + """other test data""" + self.factory = RequestFactory() + def test_theme_unset(self): """logged in user, no selected theme""" request = self.factory.get("") diff --git a/bookwyrm/tests/test_emailing.py b/bookwyrm/tests/test_emailing.py index b2af59f4fe..119941e857 100644 --- a/bookwyrm/tests/test_emailing.py +++ b/bookwyrm/tests/test_emailing.py @@ -11,10 +11,9 @@ class Emailing(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -27,6 +26,10 @@ def setUp(self): ) models.SiteSettings.objects.create() + def setUp(self): + """other test data""" + self.factory = RequestFactory() + def test_invite_email(self, email_mock): """load the invite email""" invite_request = models.InviteRequest.objects.create( diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index d61c32df5a..b539f089bb 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -35,8 +35,8 @@ def get_follow_activity(follower, followee): class Signature(TestCase): """signature test""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create users and test data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -54,15 +54,15 @@ def setUp(self): self.cat = models.User.objects.create_user( f"cat@{DOMAIN}", "cat@example.com", "", local=True, localname="cat" ) + models.SiteSettings.objects.create() + def setUp(self): + """test data""" private_key, public_key = create_key_pair() - self.fake_remote = Sender( "http://localhost/user/remote", KeyPair(private_key, public_key) ) - models.SiteSettings.objects.create() - def send(self, signature, now, data, digest): """test request""" client = Client() diff --git a/bookwyrm/tests/utils/test_tar.py b/bookwyrm/tests/utils/test_tar.py new file mode 100644 index 0000000000..be52575428 --- /dev/null +++ b/bookwyrm/tests/utils/test_tar.py @@ -0,0 +1,25 @@ +import os +import pytest +from bookwyrm.utils.tar import BookwyrmTarFile + + +@pytest.fixture +def read_tar(): + archive_path = "../data/bookwyrm_account_export.tar.gz" + with open(archive_path, "rb") as archive_file: + with BookwyrmTarFile.open(mode="r:gz", fileobj=archive_file) as tar: + yield tar + + +@pytest.fixture +def write_tar(): + archive_path = "/tmp/test.tar.gz" + with open(archive_path, "wb") as archive_file: + with BookwyrmTarFile.open(mode="w:gz", fileobj=archive_file) as tar: + yield tar + + os.remove(archive_path) + + +def test_write_bytes(write_tar): + write_tar.write_bytes(b"ABCDEF") diff --git a/bookwyrm/tests/validate_html.py b/bookwyrm/tests/validate_html.py index 423a86586b..748b94d5fd 100644 --- a/bookwyrm/tests/validate_html.py +++ b/bookwyrm/tests/validate_html.py @@ -8,20 +8,31 @@ def validate_html(html): _, errors = tidy_document( html.content, options={ + "doctype": "html5", "drop-empty-elements": False, "warn-proprietary-attributes": False, }, ) - # idk how else to filter out these unescape amp errs + # Tidy's parser is strict when validating unescaped/encoded ampersands found within + # the html document that are notpart of a character or entity reference + # (eg: `&` or `&`). Despite the fact the HTML5 spec no longer recommends + # escaping ampersands in URLs, Tidy will still complain if they are used as query + # param keys. Unfortunately, there is no way currently to configure tidy to ignore + # this so we must explictly redlist related strings that will appear in Tidy's + # errors output. + # + # See further discussion: https://github.com/htacg/tidy-html5/issues/1017 + excluded = [ + "&book", + "&type", + "&resolved", + "id and name attribute", + "illegal characters found in URI", + "escaping malformed URI reference", + "&filter", + ] errors = "\n".join( - e - for e in errors.split("\n") - if "&book" not in e - and "&type" not in e - and "&resolved" not in e - and "id and name attribute" not in e - and "illegal characters found in URI" not in e - and "escaping malformed URI reference" not in e + e for e in errors.split("\n") if not any(exclude in e for exclude in excluded) ) if errors: raise Exception(errors) diff --git a/bookwyrm/tests/views/admin/test_announcements.py b/bookwyrm/tests/views/admin/test_announcements.py index 94f7484823..30bc94a1f4 100644 --- a/bookwyrm/tests/views/admin/test_announcements.py +++ b/bookwyrm/tests/views/admin/test_announcements.py @@ -11,9 +11,9 @@ class AnnouncementViews(TestCase): """every response to a get request, html or json""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -27,6 +27,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_announcements_page(self): """there are so many views, this just makes sure it LOADS""" models.Announcement.objects.create(preview="hi", user=self.local_user) diff --git a/bookwyrm/tests/views/admin/test_automod.py b/bookwyrm/tests/views/admin/test_automod.py index a1c03d436d..1835a24ee9 100644 --- a/bookwyrm/tests/views/admin/test_automod.py +++ b/bookwyrm/tests/views/admin/test_automod.py @@ -15,10 +15,9 @@ class AutomodViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -35,6 +34,10 @@ def setUp(self): self.local_user.groups.set([group]) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_automod_rules_get(self): """there are so many views, this just makes sure it LOADS""" schedule = IntervalSchedule.objects.create(every=1, period="days") diff --git a/bookwyrm/tests/views/admin/test_celery.py b/bookwyrm/tests/views/admin/test_celery.py index f9429c4c07..d215a96570 100644 --- a/bookwyrm/tests/views/admin/test_celery.py +++ b/bookwyrm/tests/views/admin/test_celery.py @@ -14,10 +14,9 @@ class CeleryStatusViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +33,10 @@ def setUp(self): self.local_user.groups.set([group]) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_celery_status_get(self): """there are so many views, this just makes sure it LOADS""" view = views.CeleryStatus.as_view() diff --git a/bookwyrm/tests/views/admin/test_dashboard.py b/bookwyrm/tests/views/admin/test_dashboard.py index c36e2918fd..8eeb754a89 100644 --- a/bookwyrm/tests/views/admin/test_dashboard.py +++ b/bookwyrm/tests/views/admin/test_dashboard.py @@ -14,9 +14,9 @@ class DashboardViews(TestCase): """every response to a get request, html or json""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +34,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_dashboard(self): """there are so many views, this just makes sure it LOADS""" view = views.Dashboard.as_view() diff --git a/bookwyrm/tests/views/admin/test_email_blocks.py b/bookwyrm/tests/views/admin/test_email_blocks.py index 3c0f548e6e..75c0be9292 100644 --- a/bookwyrm/tests/views/admin/test_email_blocks.py +++ b/bookwyrm/tests/views/admin/test_email_blocks.py @@ -14,9 +14,9 @@ class EmailBlocklistViews(TestCase): """every response to a get request, html or json""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +34,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_blocklist_page_get(self): """there are so many views, this just makes sure it LOADS""" view = views.EmailBlocklist.as_view() diff --git a/bookwyrm/tests/views/admin/test_email_config.py b/bookwyrm/tests/views/admin/test_email_config.py index 3aa16cb1de..63d85cbef8 100644 --- a/bookwyrm/tests/views/admin/test_email_config.py +++ b/bookwyrm/tests/views/admin/test_email_config.py @@ -14,10 +14,9 @@ class EmailConfigViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +33,10 @@ def setUp(self): self.local_user.groups.set([group]) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_email_config_get(self): """there are so many views, this just makes sure it LOADS""" view = views.EmailConfig.as_view() diff --git a/bookwyrm/tests/views/admin/test_federation.py b/bookwyrm/tests/views/admin/test_federation.py index 95b3225d5f..1a50672993 100644 --- a/bookwyrm/tests/views/admin/test_federation.py +++ b/bookwyrm/tests/views/admin/test_federation.py @@ -17,10 +17,9 @@ class FederationViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -48,6 +47,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_federation_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Federation.as_view() diff --git a/bookwyrm/tests/views/admin/test_imports.py b/bookwyrm/tests/views/admin/test_imports.py index eaa9fd84ac..5a55995197 100644 --- a/bookwyrm/tests/views/admin/test_imports.py +++ b/bookwyrm/tests/views/admin/test_imports.py @@ -14,10 +14,9 @@ class ImportsAdminViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +33,10 @@ def setUp(self): self.local_user.groups.set([group]) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_celery_status_get(self): """there are so many views, this just makes sure it LOADS""" view = views.ImportList.as_view() diff --git a/bookwyrm/tests/views/admin/test_ip_blocklist.py b/bookwyrm/tests/views/admin/test_ip_blocklist.py index a15a4d3680..06c110a063 100644 --- a/bookwyrm/tests/views/admin/test_ip_blocklist.py +++ b/bookwyrm/tests/views/admin/test_ip_blocklist.py @@ -14,9 +14,9 @@ class IPBlocklistViews(TestCase): """every response to a get request, html or json""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +34,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_blocklist_page_get(self): """there are so many views, this just makes sure it LOADS""" view = views.IPBlocklist.as_view() diff --git a/bookwyrm/tests/views/admin/test_link_domains.py b/bookwyrm/tests/views/admin/test_link_domains.py index 5b2b8e025a..14eed419bd 100644 --- a/bookwyrm/tests/views/admin/test_link_domains.py +++ b/bookwyrm/tests/views/admin/test_link_domains.py @@ -14,9 +14,9 @@ class LinkDomainViews(TestCase): """every response to a get request, html or json""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -41,6 +41,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_domain_page_get(self): """there are so many views, this just makes sure it LOADS""" view = views.LinkDomain.as_view() diff --git a/bookwyrm/tests/views/admin/test_reports.py b/bookwyrm/tests/views/admin/test_reports.py index a74e8b0e1e..4334eeed96 100644 --- a/bookwyrm/tests/views/admin/test_reports.py +++ b/bookwyrm/tests/views/admin/test_reports.py @@ -15,10 +15,9 @@ class ReportViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -42,6 +41,10 @@ def setUp(self): self.local_user.groups.set([group]) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_reports_page(self): """there are so many views, this just makes sure it LOADS""" view = views.ReportsAdmin.as_view() diff --git a/bookwyrm/tests/views/admin/test_site.py b/bookwyrm/tests/views/admin/test_site.py index 8eda6a2fb9..b7c687e098 100644 --- a/bookwyrm/tests/views/admin/test_site.py +++ b/bookwyrm/tests/views/admin/test_site.py @@ -14,10 +14,9 @@ class SiteSettingsViews(TestCase): """Edit site settings""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -35,6 +34,10 @@ def setUp(self): self.site = models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_site_get(self): """there are so many views, this just makes sure it LOADS""" view = views.Site.as_view() diff --git a/bookwyrm/tests/views/admin/test_themes.py b/bookwyrm/tests/views/admin/test_themes.py index 296cd4d8d3..66384f5fc4 100644 --- a/bookwyrm/tests/views/admin/test_themes.py +++ b/bookwyrm/tests/views/admin/test_themes.py @@ -15,10 +15,9 @@ class AdminThemesViews(TestCase): """Edit site settings""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -43,6 +42,10 @@ def setUp(self): self.site = models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_themes_get(self): """there are so many views, this just makes sure it LOADS""" view = views.Themes.as_view() diff --git a/bookwyrm/tests/views/admin/test_user_admin.py b/bookwyrm/tests/views/admin/test_user_admin.py index 1d11c73388..99c6305269 100644 --- a/bookwyrm/tests/views/admin/test_user_admin.py +++ b/bookwyrm/tests/views/admin/test_user_admin.py @@ -15,9 +15,9 @@ class UserAdminViews(TestCase): """every response to a get request, html or json""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -34,6 +34,10 @@ def setUp(self): self.local_user.groups.set([group]) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_user_admin_list_page(self): """there are so many views, this just makes sure it LOADS""" view = views.UserAdminList.as_view() diff --git a/bookwyrm/tests/views/books/test_book.py b/bookwyrm/tests/views/books/test_book.py index a829c4a4b5..4d41eaa5d8 100644 --- a/bookwyrm/tests/views/books/test_book.py +++ b/bookwyrm/tests/views/books/test_book.py @@ -23,9 +23,9 @@ class BookViews(TestCase): """books books books""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -54,6 +54,10 @@ def setUp(self): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_book_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Book.as_view() @@ -268,8 +272,8 @@ def test_quotation_endposition(self, *_): book=self.book, content="hi", quote="wow", - position=12, - endposition=13, + position="12", + endposition="13", ) request = self.factory.get("") @@ -282,7 +286,9 @@ def test_quotation_endposition(self, *_): validate_html(result.render()) print(result.render()) self.assertEqual(result.status_code, 200) - self.assertEqual(result.context_data["statuses"].object_list[0].endposition, 13) + self.assertEqual( + result.context_data["statuses"].object_list[0].endposition, "13" + ) def _setup_cover_url(): diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index 49e8c7cdbe..169112bab4 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -19,9 +19,9 @@ class EditBookViews(TestCase): """books books books""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): @@ -47,10 +47,13 @@ def setUp(self): remote_id="https://example.com/book/1", parent_work=self.work, ) - # pylint: disable=line-too-long - self.authors_body = "%(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "No trobat"
@@ -476,6 +496,20 @@ msgstr "No trobat"
msgid "The page you requested doesn't seem to exist!"
msgstr "La pàgina que heu sol·licitat no existeix"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Vaja!"
@@ -536,12 +570,12 @@ msgstr "Les persones moderadores i administradores de %(site_name)s mantenen en
msgid "Moderator"
msgstr "Moderació"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administració"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versió de programari:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "La seva lectura més breu d'aquest any…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -701,8 +735,8 @@ msgstr "… i la més llarga"
#, python-format
msgid "%(display_name)s set a goal of reading %(goal)s book in %(year)s,bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Copia el fitxer del tema a la carpeta bookwyrm/static/css/themes
del teu servidor des de la línia d'ordres."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Executa ./bw-dev compile_themes
i ./bw-dev collectstatic
."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Afegeix el nom del fitxer a partir del formulari de sota per fer-lo disponible a la interfície de l'aplicació."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Afegeix tema"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "No s'ha pogut desar el tema"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Nom del tema"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Nom del fitxer del tema"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Temes disponibles"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Fitxer"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Elimina el tema"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Suprimeix l'usuari de manera permanent"
@@ -5676,25 +5826,20 @@ msgstr "Actiu per última vegada"
msgid "Remote instance"
msgstr "Instància remota"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Eliminat"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Inactiu"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "No s'ha configurat"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Veure perfil d'Usuari"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Ves a administració d'usuàries"
@@ -5750,27 +5895,39 @@ msgstr "Detalls de la instància"
msgid "View instance"
msgstr "Mostra la instància"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Eliminat permanentment"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Accions d'usuari"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Activa l'usuari/a"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Suspèn usuari"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Deixa de suspendre l'usuari"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Nivell d'accés:"
@@ -5826,7 +5983,7 @@ msgstr "El vostre domini sembla que no està ben configurat. No hauria d'inclour
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "Esteu executant BookWyrm en mode producció sense https. USE_HTTPS hauria d'estar activat a producció."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Configuració"
@@ -5883,7 +6040,7 @@ msgid "Need help?"
msgstr "Necessiteu ajuda?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Crea un prestatge"
@@ -5891,58 +6048,58 @@ msgstr "Crea un prestatge"
msgid "Edit Shelf"
msgstr "Edita el prestatge"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Perfil d'usuari"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Tots els llibres"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s llibre"
msgstr[1] "%(formatted_count)s llibres"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(mostrant %(start)s-%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Edita el prestatge"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Elimina el prestatge"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Arxivat"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Començat"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Finalitzat"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Fins"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Aquest prestatge és buit."
@@ -6248,6 +6405,15 @@ msgstr "Heu llegit %(read_count)s de %(goal_count)s llibres
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s ha llegit %(read_count)s de %(goal_count)s llibres."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Seguiu al compte nou"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6389,35 +6555,35 @@ msgstr "Deixa de llegir"
msgid "Finish reading"
msgstr "Acaba de llegir"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Mostra l'estat"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Pàgina %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Obre imatge en una finestra nova"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Amaga l'estat"
@@ -6550,6 +6716,18 @@ msgstr "Mostra'n més"
msgid "Show less"
msgstr "Mostra'n menys"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Mogut"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Eliminat"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Inactiu"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "Comprovació 2FA"
@@ -6608,11 +6786,11 @@ msgstr "Els teus grups"
msgid "Groups: %(username)s"
msgstr "Grups: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Peticions de seguiment"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6627,7 +6805,13 @@ msgstr "Llistes: %(username)s"
msgid "Create list"
msgstr "Crea una llista"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Unit el %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s no té seguidors"
@@ -6698,17 +6882,12 @@ msgstr "Només comentaris"
msgid "No activities yet!"
msgstr "Encara no hi ha activitats."
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Unit el %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
msgid_plural "%(display_count)s followers"
msgstr[0] "%(display_count)s seguidor"
-msgstr[1] ""
+msgstr[1] "%(display_count)s seguidors"
#: bookwyrm/templates/user/user_preview.html:31
#, python-format
@@ -6730,10 +6909,6 @@ msgstr "No hi ha seguidors que segueixis"
msgid "View profile and more"
msgstr "Mostra el perfil i més"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Desconnecta"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "El fitxer sobrepassa la mida màxima: 10MB"
@@ -6750,7 +6925,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "%(num)d llibre - per %(user)s"
msgstr[1] "%(num)d llibres - per %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo
index 4ce83f72b3..57ec9f361d 100644
Binary files a/locale/de_DE/LC_MESSAGES/django.mo and b/locale/de_DE/LC_MESSAGES/django.mo differ
diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po
index 63cdbd8fcf..c88645d949 100644
--- a/locale/de_DE/LC_MESSAGES/django.po
+++ b/locale/de_DE/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 18:13\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Nicht gefunden"
@@ -476,6 +496,20 @@ msgstr "Nicht gefunden"
msgid "The page you requested doesn't seem to exist!"
msgstr "Die Seite, die du angefordert hast, scheint nicht zu existieren!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Ups!"
@@ -536,12 +570,12 @@ msgstr "Die Moderator*innen und Administrator*innen von %(site_name)s halten die
msgid "Moderator"
msgstr "Moderator*in"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administration"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Softwareversion:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Das am schnellsten gelesene Buch dieses Jahr…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "ISNI-Datensatz anzeigen"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Auf ISFDB ansehen"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Lade Daten"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Auf OpenLibrary ansehen"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Auf Inventaire anzeigen"
@@ -797,11 +831,7 @@ msgstr "Auf LibraryThing anzeigen"
msgid "View on Goodreads"
msgstr "Auf Goodreads ansehen"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "ISFDB Eintrag ansehen"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Bücher von %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Bestätigen"
msgid "Unable to connect to remote source."
msgstr "Verbindung zum Server konnte nicht hergestellt werden."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Buch bearbeiten"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Cover durch Klicken hinzufügen"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Fehler beim Laden des Titelbilds"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Zum Vergrößern anklicken"
@@ -1046,13 +1076,13 @@ msgstr "Orte"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listen"
@@ -1117,8 +1147,8 @@ msgstr "Titelbild hochladen:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Titelbild von URL laden:"
+msgid "Load cover from URL:"
+msgstr "Titelbild via URL herunterladen:"
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1245,7 +1275,7 @@ msgstr "Titel:"
#: bookwyrm/templates/book/edit/edit_book_form.html:35
msgid "Sort Title:"
-msgstr ""
+msgstr "Sortieren nach Titel:"
#: bookwyrm/templates/book/edit/edit_book_form.html:44
msgid "Subtitle:"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Weitere*n Autor*in hinzufügen"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Cover"
@@ -1373,7 +1403,7 @@ msgstr "Ausgaben von %(book_title)s"
#: bookwyrm/templates/book/editions/editions.html:8
#, python-format
msgid "Editions of %(work_title)s"
-msgstr ""
+msgstr "Ausgaben von %(work_title)s"
#: bookwyrm/templates/book/editions/editions.html:55
msgid "Can't find the edition you're looking for?"
@@ -1455,8 +1485,9 @@ msgstr "Domain"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Status"
@@ -1465,7 +1496,7 @@ msgstr "Status"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Aktionen"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s Seiten"
msgid "%(languages)s language"
msgstr "Sprache: %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Am %(date)s von %(publisher)s veröffentlicht."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Veröffentlicht von %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Erschienen am %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Veröffentlicht von %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "bewertet es mit"
@@ -1552,12 +1583,12 @@ msgstr "bewertet es mit"
msgid "Series by"
msgstr "Serie von"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Buch %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Nicht einsortiertes Buch"
@@ -1681,6 +1712,7 @@ msgstr "Empfohlen"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s hat %(username)s"
msgstr "Direktnachrichten mit %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Direktnachrichten"
@@ -1948,7 +1980,7 @@ msgstr "Updates"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Deine Bücher"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Zu deinen Büchern hinzufügen"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Leseliste"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Liest gerade"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Gelesen"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Aufgehört zu lesen"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Was liest du gerade?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Nach einem Buch suchen"
@@ -2046,8 +2078,8 @@ msgstr "Du kannst Bücher hinzufügen, wenn du %(site_name)s benutzt."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2368,7 +2400,7 @@ msgstr "Hier kannst du eine Rezension, einen Kommentar oder ein Zitat veröffent
#: bookwyrm/templates/guided_tour/book.html:103
msgid "Share your thoughts"
-msgstr "Teile deine Gedanken"
+msgstr "Teile deine Gedanken mit anderen"
#: bookwyrm/templates/guided_tour/book.html:127
msgid "If you have read this book you can post a review including an optional star rating"
@@ -2388,7 +2420,7 @@ msgstr "Kommentieren"
#: bookwyrm/templates/guided_tour/book.html:175
msgid "Just read some perfect prose? Let the world know by sharing a quote!"
-msgstr "Du hast gerade einige perfekte Zeilen gelesen? Lass es die Welt wissen, indem Du ein Zitat teilst!"
+msgstr "Du hast gerade ein perfektes Stück Prosa gelesen? Lass es die Welt wissen, indem Du ein Zitat teilst!"
#: bookwyrm/templates/guided_tour/book.html:176
msgid "Share a quote"
@@ -2396,7 +2428,7 @@ msgstr "Ein Zitat teilen"
#: bookwyrm/templates/guided_tour/book.html:199
msgid "If your review or comment might ruin the book for someone who hasn't read it yet, you can hide your post behind a spoiler alert"
-msgstr "Falls deine Rezension oder dein Kommentar das Buch für andere verderben würden, die es noch nicht gelesen haben, kannst du sie hinter einer Spoiler-Warnung verstecken"
+msgstr "Falls deine Rezension oder dein Kommentar das Buch für Leute, die es noch nicht gelesen haben, verderben würde, kannst du sie hinter einer Spoiler-Warnung verstecken."
#: bookwyrm/templates/guided_tour/book.html:200
msgid "Spoiler alerts"
@@ -2414,7 +2446,7 @@ msgstr "Beitragssichtbarkeit"
#: bookwyrm/templates/guided_tour/book.html:248
msgid "Some ebooks can be downloaded for free from external sources. They will be shown here."
-msgstr "Einige E-Books können kostenlos von externen Quellen heruntergeladen werden. Sie werden hier angezeigt."
+msgstr "Einige E-Books können kostenlos aus externen Quellen heruntergeladen werden. Sie werden hier angezeigt."
#: bookwyrm/templates/guided_tour/book.html:249
msgid "Download links"
@@ -2436,7 +2468,7 @@ msgstr "Ok"
#: bookwyrm/templates/guided_tour/group.html:10
msgid "Welcome to the page for your group! This is where you can add and remove users, create user-curated lists, and edit the group details."
-msgstr "Willkommen auf der Seite Deiner Gruppe! Hier kannst Du Benutzer*innen hinzufügen und entfernen, eigene Listen erstellen und die Gruppendetails bearbeiten."
+msgstr "Willkommen auf der Seite deiner Gruppe! Hier kannst du Benutzer*innen hinzufügen und entfernen, benutzerdefinierte Listen erstellen und die Gruppendetails bearbeiten."
#: bookwyrm/templates/guided_tour/group.html:11
msgid "Your group"
@@ -2448,7 +2480,7 @@ msgstr "Benutze dieses Suchfeld, um neue Mitglieder für deine Gruppe zu finden.
#: bookwyrm/templates/guided_tour/group.html:32
msgid "Find users"
-msgstr "Finde Benutzer*innen"
+msgstr "Benutzer*innen finden"
#: bookwyrm/templates/guided_tour/group.html:54
msgid "Your group members will appear here. The group owner is marked with a star symbol."
@@ -2464,7 +2496,7 @@ msgstr "Neben der Erstellung von Listen auf der Listenseite kannst du hier auch
#: bookwyrm/templates/guided_tour/group.html:78
msgid "Group lists"
-msgstr "Gruppenliste"
+msgstr "Gruppenlisten"
#: bookwyrm/templates/guided_tour/group.html:100
msgid "Congratulations, you've finished the tour! Now you know the basics, but there is lots more to explore on your own. Happy reading!"
@@ -2476,7 +2508,7 @@ msgstr "Tour beenden"
#: bookwyrm/templates/guided_tour/home.html:16
msgid "Welcome to Bookwyrm!bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Kopiere die Design-Datei in das bookwyrm/static/css/themes
-Verzeichnis auf deinem Server mittels der Kommandozeile."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Führe ./bw-dev compile_themes
und ./bw-dev collectstatic
aus."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Füge den Dateinamen mit dem untenstehenden Formular hinzu, um ihn in der Anwendung verfügbar zu machen."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Design hinzufügen"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Design konnte nicht gespeichert werden"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Name des Designs"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Design-Dateiname"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Verfügbare Designs"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Datei"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Design löschen"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Benutzer*in dauerhaft löschen"
@@ -5676,25 +5826,20 @@ msgstr "Zuletzt aktiv"
msgid "Remote instance"
msgstr "Entfernte Instanz"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Gelöscht"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Inaktiv"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "Nicht festgelegt"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Profil anzeigen"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Gehe zur Benutzerverwaltung"
@@ -5750,27 +5895,39 @@ msgstr "Instanzdetails"
msgid "View instance"
msgstr "Instanz anzeigen"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Dauerhaft gelöscht"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Benutzeraktionen"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Benutzer aktivieren"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Benutzer*in vorläufig sperren"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Vorläufige Sperre für Benutzer*in aufheben"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Zugriffsstufe:"
@@ -5826,7 +5983,7 @@ msgstr "Deine Domain scheint falsch konfiguriert zu sein. Es sollte kein Protoko
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "Du verwendest BookWyrm im Produktionsmodus ohne https. USE_HTTPS sollte in der Produktion aktiviert werden."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Einstellungen"
@@ -5883,7 +6040,7 @@ msgid "Need help?"
msgstr "Brauchst du Hilfe?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Regal erstellen"
@@ -5891,58 +6048,58 @@ msgstr "Regal erstellen"
msgid "Edit Shelf"
msgstr "Regal bearbeiten"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Profil"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Alle Bücher"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s Buch"
msgstr[1] "%(formatted_count)s Bücher"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(Anzeige: %(start)s&endash;%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Regal bearbeiten"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Regal löschen"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Ins Regal gestellt"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Gestartet"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Abgeschlossen"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Bis"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Dieses Regal ist leer."
@@ -6248,6 +6405,15 @@ msgstr "Du hast %(read_count)s von %(goal_count)s Büchern<
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s hat %(read_count)s von %(goal_count)s Büchern gelesen."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Folgen Sie beim neuen Konto"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6389,35 +6555,35 @@ msgstr "Aufhören zu lesen"
msgid "Finish reading"
msgstr "Lesen abschließen"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Status anzeigen"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Seite %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Bild in neuem Fenster öffnen"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Status ausblenden"
@@ -6550,6 +6716,18 @@ msgstr "Mehr anzeigen"
msgid "Show less"
msgstr "Weniger anzeigen"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Umgezogen"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Gelöscht"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Inaktiv"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "2FA-Prüfung"
@@ -6608,11 +6786,11 @@ msgstr "Deine Gruppen"
msgid "Groups: %(username)s"
msgstr "Gruppen: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Folgeanfragen"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6627,7 +6805,13 @@ msgstr "Listen: %(username)s"
msgid "Create list"
msgstr "Liste erstellen"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Beitritt %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "niemand folgt %(username)s "
@@ -6698,17 +6882,12 @@ msgstr "Nur Kommentare"
msgid "No activities yet!"
msgstr "Noch keine Aktivitäten!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Beitritt %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
msgid_plural "%(display_count)s followers"
-msgstr[0] ""
-msgstr[1] "%(display_count)s Follower"
+msgstr[0] "%(display_count)s Follower*in"
+msgstr[1] "%(display_count)s Follower*innen"
#: bookwyrm/templates/user/user_preview.html:31
#, python-format
@@ -6730,10 +6909,6 @@ msgstr "Keine Follower*innen, denen du folgst"
msgid "View profile and more"
msgstr "Profil und mehr ansehen"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Abmelden"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Datei überschreitet die maximale Größe von 10MB"
@@ -6750,7 +6925,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "%(num)d Bücher - von %(user)s"
msgstr[1] "%(num)d Bücher - von %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po
index e1196a49b5..9c51fbbd53 100644
--- a/locale/en_US/LC_MESSAGES/django.po
+++ b/locale/en_US/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-02 21:32+0000\n"
+"POT-Creation-Date: 2024-01-02 03:27+0000\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr ""
@@ -477,6 +509,21 @@ msgstr ""
msgid "The page you requested doesn't seem to exist!"
msgstr ""
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid ""
+"\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr ""
@@ -537,12 +584,12 @@ msgstr ""
msgid "Moderator"
msgstr ""
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr ""
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -907,7 +954,7 @@ msgstr ""
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -931,6 +978,7 @@ msgstr ""
#: bookwyrm/templates/search/barcode_modal.html:43
#: bookwyrm/templates/settings/federation/instance.html:106
#: bookwyrm/templates/settings/imports/complete_import_modal.html:16
+#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:16
#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22
#: bookwyrm/templates/snippets/report_modal.html:52
msgid "Cancel"
@@ -948,6 +996,7 @@ msgstr ""
#: bookwyrm/templates/landing/password_reset.html:52
#: bookwyrm/templates/preferences/2fa.html:77
#: bookwyrm/templates/settings/imports/complete_import_modal.html:19
+#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:19
#: bookwyrm/templates/snippets/remove_from_group_button.html:17
msgid "Confirm"
msgstr ""
@@ -1043,13 +1092,13 @@ msgstr ""
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:91 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:106 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr ""
@@ -1325,7 +1374,7 @@ msgid "Add Another Author"
msgstr ""
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:162
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr ""
@@ -1447,22 +1496,27 @@ msgid "Domain"
msgstr ""
#: bookwyrm/templates/book/file_links/edit_links.html:36
-#: bookwyrm/templates/import/import.html:139
+#: bookwyrm/templates/import/import.html:138
#: bookwyrm/templates/import/import_status.html:134
+#: bookwyrm/templates/import/import_user.html:177
+#: bookwyrm/templates/preferences/export-user.html:78
#: bookwyrm/templates/settings/announcements/announcements.html:37
+#: bookwyrm/templates/settings/imports/imports.html:255
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr ""
#: bookwyrm/templates/book/file_links/edit_links.html:37
#: bookwyrm/templates/settings/announcements/announcements.html:41
#: bookwyrm/templates/settings/federation/instance.html:112
-#: bookwyrm/templates/settings/imports/imports.html:141
+#: bookwyrm/templates/settings/imports/imports.html:174
+#: bookwyrm/templates/settings/imports/imports.html:253
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr ""
@@ -1584,7 +1638,7 @@ msgid "Sorry! We couldn't find that code."
msgstr ""
#: bookwyrm/templates/confirm_email/confirm_email.html:19
-#: bookwyrm/templates/settings/users/user_info.html:98
+#: bookwyrm/templates/settings/users/user_info.html:92
msgid "Confirmation code:"
msgstr ""
@@ -1753,7 +1807,7 @@ msgstr ""
#: bookwyrm/templates/discover/discover.html:4
#: bookwyrm/templates/discover/discover.html:10
-#: bookwyrm/templates/layout.html:94
+#: bookwyrm/templates/layout.html:91
msgid "Discover"
msgstr ""
@@ -1908,7 +1962,7 @@ msgid "Direct Messages with %(username)s"
msgstr ""
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr ""
@@ -1946,7 +2000,7 @@ msgstr ""
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr ""
@@ -1994,19 +2048,19 @@ msgid "Add to your books"
msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:101 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:102 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:103
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2015,7 +2069,7 @@ msgid "Read"
msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:104 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr ""
@@ -2512,7 +2566,7 @@ msgid "Barcode reader"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
@@ -2544,7 +2598,7 @@ msgid "Notifications"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
@@ -2700,8 +2754,7 @@ msgstr ""
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6
-#: bookwyrm/templates/user/layout.html:100
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr ""
@@ -2755,7 +2808,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:94
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr ""
@@ -2793,111 +2846,121 @@ msgid "No activities for this hashtag yet!"
msgstr ""
#: bookwyrm/templates/import/import.html:5
-#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:79
-msgid "Import Books"
+#: bookwyrm/templates/import/import.html:6
+#: bookwyrm/templates/preferences/layout.html:43
+msgid "Import Book List"
msgstr ""
-#: bookwyrm/templates/import/import.html:13
+#: bookwyrm/templates/import/import.html:12
msgid "Not a valid CSV file"
msgstr ""
-#: bookwyrm/templates/import/import.html:21
+#: bookwyrm/templates/import/import.html:20
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
-#: bookwyrm/templates/import/import.html:27
+#: bookwyrm/templates/import/import.html:26
#, python-format
msgid "You have %(display_left)s left."
msgstr ""
-#: bookwyrm/templates/import/import.html:34
+#: bookwyrm/templates/import/import.html:33
#, python-format
msgid "On average, recent imports have taken %(hours)s hours."
msgstr ""
-#: bookwyrm/templates/import/import.html:38
+#: bookwyrm/templates/import/import.html:37
#, python-format
msgid "On average, recent imports have taken %(minutes)s minutes."
msgstr ""
-#: bookwyrm/templates/import/import.html:53
+#: bookwyrm/templates/import/import.html:52
msgid "Data source:"
msgstr ""
-#: bookwyrm/templates/import/import.html:59
+#: bookwyrm/templates/import/import.html:58
msgid "Goodreads (CSV)"
msgstr ""
-#: bookwyrm/templates/import/import.html:62
+#: bookwyrm/templates/import/import.html:61
msgid "Storygraph (CSV)"
msgstr ""
-#: bookwyrm/templates/import/import.html:65
+#: bookwyrm/templates/import/import.html:64
msgid "LibraryThing (TSV)"
msgstr ""
-#: bookwyrm/templates/import/import.html:68
+#: bookwyrm/templates/import/import.html:67
msgid "OpenLibrary (CSV)"
msgstr ""
-#: bookwyrm/templates/import/import.html:71
+#: bookwyrm/templates/import/import.html:70
msgid "Calibre (CSV)"
msgstr ""
-#: bookwyrm/templates/import/import.html:77
+#: bookwyrm/templates/import/import.html:76
msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account."
msgstr ""
-#: bookwyrm/templates/import/import.html:86
+#: bookwyrm/templates/import/import.html:85
+#: bookwyrm/templates/import/import_user.html:49
msgid "Data file:"
msgstr ""
-#: bookwyrm/templates/import/import.html:94
+#: bookwyrm/templates/import/import.html:93
msgid "Include reviews"
msgstr ""
-#: bookwyrm/templates/import/import.html:99
+#: bookwyrm/templates/import/import.html:98
msgid "Privacy setting for imported reviews:"
msgstr ""
-#: bookwyrm/templates/import/import.html:106
-#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:43
+#: bookwyrm/templates/import/import.html:105
+#: bookwyrm/templates/import/import.html:107
+#: bookwyrm/templates/import/import_user.html:155
+#: bookwyrm/templates/import/import_user.html:157
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr ""
-#: bookwyrm/templates/import/import.html:109
+#: bookwyrm/templates/import/import.html:108
+#: bookwyrm/templates/import/import_user.html:158
msgid "You've reached the import limit."
msgstr ""
-#: bookwyrm/templates/import/import.html:118
+#: bookwyrm/templates/import/import.html:117
+#: bookwyrm/templates/import/import_user.html:27
msgid "Imports are temporarily disabled; thank you for your patience."
msgstr ""
-#: bookwyrm/templates/import/import.html:125
+#: bookwyrm/templates/import/import.html:124
+#: bookwyrm/templates/import/import_user.html:166
msgid "Recent Imports"
msgstr ""
-#: bookwyrm/templates/import/import.html:130
-#: bookwyrm/templates/settings/imports/imports.html:120
+#: bookwyrm/templates/import/import.html:129
+#: bookwyrm/templates/import/import_user.html:171
+#: bookwyrm/templates/settings/imports/imports.html:153
+#: bookwyrm/templates/settings/imports/imports.html:243
msgid "Date Created"
msgstr ""
-#: bookwyrm/templates/import/import.html:133
+#: bookwyrm/templates/import/import.html:132
+#: bookwyrm/templates/import/import_user.html:174
msgid "Last Updated"
msgstr ""
-#: bookwyrm/templates/import/import.html:136
-#: bookwyrm/templates/settings/imports/imports.html:129
+#: bookwyrm/templates/import/import.html:135
+#: bookwyrm/templates/settings/imports/imports.html:162
msgid "Items"
msgstr ""
-#: bookwyrm/templates/import/import.html:145
+#: bookwyrm/templates/import/import.html:144
+#: bookwyrm/templates/import/import_user.html:183
+#: bookwyrm/templates/preferences/export-user.html:87
msgid "No recent imports"
msgstr ""
@@ -2933,7 +2996,8 @@ msgid "Refresh"
msgstr ""
#: bookwyrm/templates/import/import_status.html:72
-#: bookwyrm/templates/settings/imports/imports.html:161
+#: bookwyrm/templates/settings/imports/imports.html:194
+#: bookwyrm/templates/settings/imports/imports.html:271
msgid "Stop import"
msgstr ""
@@ -2965,8 +3029,8 @@ msgid "Row"
msgstr ""
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:163
-#: bookwyrm/templates/shelf/shelf.html:185
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr ""
@@ -2979,8 +3043,8 @@ msgid "Openlibrary key"
msgstr ""
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:164
-#: bookwyrm/templates/shelf/shelf.html:188
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr ""
@@ -3031,6 +3095,133 @@ msgstr ""
msgid "Update import"
msgstr ""
+#: bookwyrm/templates/import/import_user.html:5
+#: bookwyrm/templates/import/import_user.html:6
+#: bookwyrm/templates/preferences/layout.html:51
+msgid "Import BookWyrm Account"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:13
+msgid "Not a valid import file"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:18
+msgid "If you wish to migrate any statuses (comments, reviews, or quotes) you must either set this account as an alias of the one you are migrating from, or move that account to this one, before you import your user data."
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:32
+#, python-format
+msgid "Currently you are allowed to import one user every %(user_import_hours)s hours."
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:33
+#, python-format
+msgid "You will next be able to import a user file at %(next_available)s"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:41
+msgid "Step 1:"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:43
+msgid "Select an export file generated from another BookWyrm account. The file format should be .tar.gz
."
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:58
+msgid "Step 2:"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:60
+msgid "Deselect any checkboxes for data you do not wish to include in your import."
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:71
+#: bookwyrm/templates/shelf/shelf.html:26
+#: bookwyrm/templates/user/relationships/followers.html:18
+#: bookwyrm/templates/user/relationships/following.html:18
+msgid "User profile"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:74
+msgid "Overwrites display name, summary, and avatar"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:80
+msgid "User settings"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:83
+msgid "Overwrites:"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:86
+msgid "Whether manual approval is required for other users to follow your account"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:89
+msgid "Whether following/followers are shown on your profile"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:92
+msgid "Whether your reading goal is shown on your profile"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:95
+msgid "Whether you see user follow suggestions"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:98
+msgid "Whether your account is suggested to others"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:101
+msgid "Your timezone"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:104
+msgid "Your default post privacy setting"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:112
+msgid "Followers and following"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:116
+msgid "User blocks"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:123
+msgid "Reading goals"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:126
+msgid "Overwrites reading goals for all years listed in the import file"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:130
+msgid "Shelves"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:133
+msgid "Reading history"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:136
+msgid "Book reviews"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:142
+msgid "Comments about books"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:145
+msgid "Book lists"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:148
+msgid "Saved lists"
+msgstr ""
+
#: bookwyrm/templates/import/manual_review.html:5
#: bookwyrm/templates/import/troubleshoot.html:4
msgid "Import Troubleshooting"
@@ -3051,7 +3242,7 @@ msgid "Reject"
msgstr ""
#: bookwyrm/templates/import/troubleshoot.html:7
-#: bookwyrm/templates/settings/imports/imports.html:138
+#: bookwyrm/templates/settings/imports/imports.html:171
msgid "Failed items"
msgstr ""
@@ -3086,10 +3277,6 @@ msgstr ""
msgid "Create an Account"
msgstr ""
-#: bookwyrm/templates/landing/invite.html:21
-msgid "Permission Denied"
-msgstr ""
-
#: bookwyrm/templates/landing/invite.html:22
msgid "Sorry! This invite code is no longer valid."
msgstr ""
@@ -3217,10 +3404,6 @@ msgstr ""
msgid "Main navigation menu"
msgstr ""
-#: bookwyrm/templates/layout.html:88
-msgid "Feed"
-msgstr ""
-
#: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33
msgid "password"
msgstr ""
@@ -3429,6 +3612,7 @@ msgid "Set"
msgstr ""
#: bookwyrm/templates/lists/list.html:167
+#: bookwyrm/templates/snippets/remove_follower_button.html:4
#: bookwyrm/templates/snippets/remove_from_group_button.html:20
msgid "Remove"
msgstr ""
@@ -3505,11 +3689,11 @@ msgstr ""
msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
msgstr ""
-#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32
+#: bookwyrm/templates/moved.html:42
msgid "Undo move"
msgstr ""
-#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
msgid "Log out"
msgstr ""
@@ -3717,6 +3901,13 @@ msgstr ""
msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
msgstr ""
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+msgstr[1] ""
+
#: bookwyrm/templates/notifications/items/join.html:16
#, python-format
msgid "has joined your group \"%(group_name)s\""
@@ -3831,6 +4022,16 @@ msgstr ""
msgid "has changed the description of %(group_name)s"
msgstr ""
+#: bookwyrm/templates/notifications/items/user_export.html:14
+#, python-format
+msgid "Your user export is ready."
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/user_import.html:14
+#, python-format
+msgid "Your user import is complete."
+msgstr ""
+
#: bookwyrm/templates/notifications/notifications_page.html:19
msgid "Delete notifications"
msgstr ""
@@ -4074,7 +4275,7 @@ msgstr ""
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:54
+#: bookwyrm/templates/preferences/layout.html:62
msgid "Blocked Users"
msgstr ""
@@ -4149,7 +4350,7 @@ msgstr ""
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr ""
@@ -4209,13 +4410,65 @@ msgstr ""
msgid "Looking for shelf privacy? You can set a separate visibility level for each of your shelves. Go to Your Books, pick a shelf from the tab bar, and click \"Edit shelf.\""
msgstr ""
+#: bookwyrm/templates/preferences/export-user.html:5
+#: bookwyrm/templates/preferences/export-user.html:8
+#: bookwyrm/templates/preferences/layout.html:55
+msgid "Export BookWyrm Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/export-user.html:14
+msgid "You can create an export file here. This will allow you to migrate your data to another BookWyrm account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/export-user.html:17
+msgid "bookwyrm/static/css/themes
directory on your server from the command line."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr ""
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr ""
@@ -5775,106 +6083,108 @@ msgstr ""
msgid "Remote instance"
msgstr ""
-#: bookwyrm/templates/settings/users/user_admin.html:82
-#: bookwyrm/templates/settings/users/user_info.html:29
-msgid "Moved"
-msgstr ""
-
-#: bookwyrm/templates/settings/users/user_admin.html:93
-msgid "Deleted"
-msgstr ""
-
-#: bookwyrm/templates/settings/users/user_admin.html:99
-#: bookwyrm/templates/settings/users/user_info.html:38
-msgid "Inactive"
+#: bookwyrm/templates/settings/users/user_admin.html:84
+#: bookwyrm/templates/settings/users/user_info.html:127
+msgid "Not set"
msgstr ""
-#: bookwyrm/templates/settings/users/user_admin.html:108
-#: bookwyrm/templates/settings/users/user_info.html:133
-msgid "Not set"
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:46
+#: bookwyrm/templates/settings/users/user_info.html:40
msgid "Local"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:48
+#: bookwyrm/templates/settings/users/user_info.html:42
msgid "Remote"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:57
+#: bookwyrm/templates/settings/users/user_info.html:51
msgid "User details"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:61
+#: bookwyrm/templates/settings/users/user_info.html:55
msgid "Email:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:71
+#: bookwyrm/templates/settings/users/user_info.html:65
msgid "(View reports)"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:77
+#: bookwyrm/templates/settings/users/user_info.html:71
msgid "Blocked by count:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:80
+#: bookwyrm/templates/settings/users/user_info.html:74
msgid "Date added:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:83
+#: bookwyrm/templates/settings/users/user_info.html:77
msgid "Last active date:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:86
+#: bookwyrm/templates/settings/users/user_info.html:80
msgid "Manually approved followers:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:89
+#: bookwyrm/templates/settings/users/user_info.html:83
msgid "Discoverable:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:93
+#: bookwyrm/templates/settings/users/user_info.html:87
msgid "Deactivation reason:"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:108
+#: bookwyrm/templates/settings/users/user_info.html:102
msgid "Instance details"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:130
+#: bookwyrm/templates/settings/users/user_info.html:124
msgid "View instance"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr ""
@@ -5930,7 +6240,7 @@ msgstr ""
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr ""
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr ""
@@ -5987,7 +6297,7 @@ msgid "Need help?"
msgstr ""
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:87
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr ""
@@ -5995,66 +6305,56 @@ msgstr ""
msgid "Edit Shelf"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:25
-msgid "You have have moved to"
-msgstr ""
-
-#: bookwyrm/templates/shelf/shelf.html:28
-msgid "You can undo this move to restore full functionality, but some followers may have already unfollowed this account."
-msgstr ""
-
-#: bookwyrm/templates/shelf/shelf.html:39
-#: bookwyrm/templates/user/relationships/followers.html:18
-#: bookwyrm/templates/user/relationships/following.html:18
-msgid "User profile"
-msgstr ""
-
-#: bookwyrm/templates/shelf/shelf.html:54
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:112
+#: bookwyrm/templates/shelf/shelf.html:66
+msgid "Import Books"
+msgstr ""
+
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] ""
msgstr[1] ""
-#: bookwyrm/templates/shelf/shelf.html:119
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:131
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:139
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:167
-#: bookwyrm/templates/shelf/shelf.html:193
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:168
-#: bookwyrm/templates/shelf/shelf.html:196
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:169
-#: bookwyrm/templates/shelf/shelf.html:199
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:169
-#: bookwyrm/templates/shelf/shelf.html:199
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:225
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr ""
@@ -6364,6 +6664,11 @@ msgstr ""
msgid "Follow at new account"
msgstr ""
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6666,6 +6971,18 @@ msgstr ""
msgid "Show less"
msgstr ""
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr ""
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr ""
@@ -6724,15 +7041,11 @@ msgstr ""
msgid "Groups: %(username)s"
msgstr ""
-#: bookwyrm/templates/user/layout.html:50
-msgid "has moved to"
-msgstr ""
-
-#: bookwyrm/templates/user/layout.html:64
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr ""
-#: bookwyrm/templates/user/layout.html:88
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6753,7 +7066,7 @@ msgstr ""
msgid "Joined %(date)s"
msgstr ""
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr ""
@@ -6867,7 +7180,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] ""
msgstr[1] ""
-#: bookwyrm/templatetags/utilities.py:48
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr ""
diff --git a/locale/eo_UY/LC_MESSAGES/django.mo b/locale/eo_UY/LC_MESSAGES/django.mo
index 6795f2e82d..5f0b83ecbc 100644
Binary files a/locale/eo_UY/LC_MESSAGES/django.mo and b/locale/eo_UY/LC_MESSAGES/django.mo differ
diff --git a/locale/eo_UY/LC_MESSAGES/django.po b/locale/eo_UY/LC_MESSAGES/django.po
index 1a95d47661..2b04f98b6a 100644
--- a/locale/eo_UY/LC_MESSAGES/django.po
+++ b/locale/eo_UY/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 19:32\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Ne trovita"
@@ -476,6 +496,20 @@ msgstr "Ne trovita"
msgid "The page you requested doesn't seem to exist!"
msgstr "La paĝo kiun vi petis ŝajne ne ekzistas!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Ups!"
@@ -536,12 +570,12 @@ msgstr "La kontrolantoj de %(site_name)s kaj la administrantoj certigas la daŭr
msgid "Moderator"
msgstr "Kontrolanto"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administranto"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versio de la programo:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Ria plej mallonga legaĵo ĉi-jare…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Vidi la ISNI-registraĵon"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Vidi ĉe ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Ŝarĝi per la datumaro"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Vidi ĉe OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Vidi ĉe Inventaire"
@@ -797,11 +831,7 @@ msgstr "Vidi ĉe LibraryThing"
msgid "View on Goodreads"
msgstr "Vidi ĉe Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Vidi la ISFDB-registraĵon"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Libroj de %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Konfirmi"
msgid "Unable to connect to remote source."
msgstr "La konekto al la fora fonto malsukcesis."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Modifi libron"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Alklaku por aldoni kovrilon"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Elŝuto de la kovrilo malsukcesis"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Alklaku por grandigi"
@@ -1046,13 +1076,13 @@ msgstr "Lokoj"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listoj"
@@ -1076,11 +1106,11 @@ msgstr "ISBN:"
#: bookwyrm/templates/book/book_identifiers.html:12
#: bookwyrm/templates/book/book_identifiers.html:13
msgid "Copy ISBN"
-msgstr ""
+msgstr "Kopii la ISBN"
#: bookwyrm/templates/book/book_identifiers.html:16
msgid "Copied ISBN!"
-msgstr ""
+msgstr "Kopiis la ISBN!"
#: bookwyrm/templates/book/book_identifiers.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:352
@@ -1117,8 +1147,8 @@ msgstr "Alŝuti kovrilon:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Elŝuti kovrilon de URL:"
+msgid "Load cover from URL:"
+msgstr "Ŝarĝi la kovrilon el URL:"
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1245,7 +1275,7 @@ msgstr "Titolo:"
#: bookwyrm/templates/book/edit/edit_book_form.html:35
msgid "Sort Title:"
-msgstr ""
+msgstr "Ordiga titolo:"
#: bookwyrm/templates/book/edit/edit_book_form.html:44
msgid "Subtitle:"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Aldoni alian aŭtoron"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Kovrilo"
@@ -1455,8 +1485,9 @@ msgstr "Domajno"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Stato"
@@ -1465,7 +1496,7 @@ msgstr "Stato"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Agoj"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s paĝoj"
msgid "%(languages)s language"
msgstr "Lingvo: %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Eldonita je %(date)s de %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Eldonita de %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Eldonita je %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Eldonita de %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "taksis ĝin"
@@ -1552,12 +1583,12 @@ msgstr "taksis ĝin"
msgid "Series by"
msgstr "Serio de"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Libro %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Sennumera libro"
@@ -1681,6 +1712,7 @@ msgstr "Sugestita"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s citis %(username)s"
msgstr "Rektaj mesaĝoj kun %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Rektaj mesaĝoj"
@@ -1948,7 +1980,7 @@ msgstr "Ĝisdatigoj"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Viaj libroj"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Aldoni al viaj libroj"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Legota"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Legata"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Legita"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Haltigita legado"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Kion vi legas?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Serĉi libron"
@@ -2046,8 +2078,8 @@ msgstr "Vi povos aldoni librojn kiam vi komencos uzi %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2268,7 +2300,7 @@ msgstr "Estro"
#: bookwyrm/templates/groups/user_groups.html:35
msgid "No groups found."
-msgstr ""
+msgstr "Neniu grupo troviĝis."
#: bookwyrm/templates/guided_tour/book.html:10
msgid "This is home page of a book. Let's see what you can do while you're here!"
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Strikodolegilo"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Uzu la ligilojn Fluo, Listoj kaj Malkovri por malkovri la plej lastajn novaĵojn de via fluo, listojn de libroj laŭ temo, kaj la lastajn okazaĵojn ĉe ĉi tiu servilo de Bookwyrm!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "La sonorilo briliĝos kiam vi havos novan atentigon. Kiam ĝi estos brila, alklaku ĝin por scii kia interesa afero okazis!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Atentigoj"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Viaj profilo, libroj, rektaj mesaĝoj kaj agordoj estas alireblaj per alklako de via nomo en ĉi tiu menuo."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Vi povas krei grupon aŭ aliĝi al grupo kun aliaj uzantoj. Grupoj povas
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupoj"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Jen via profilpaĝo. Ĉiuj viaj lastaj agoj listiĝos ĉi tie. Ankaŭ aliaj uzantoj de Bookwyrm povas vidi partojn de ĉi tiu paĝo – tio kion ili vidis dependas de viaj agordoj de privateco."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Profilo"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Ĉi tiu langeto montras ĉion kion vi legis por atingi vian jaran legocelon, aŭ ĝi permesas al vi agordi celon. Agordi legocelon ne estas devige se tio ne interesas vin!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Legocelo"
@@ -2795,7 +2827,7 @@ msgstr "Ankoraŭ neniu agado por ĉi tiu kradvorto!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importi librojn"
@@ -2806,14 +2838,14 @@ msgstr "La CSV-a dosiero ne validas"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] "Aktuale vi rajtas importi %(display_size)s librojn ĉiun %(import_limit_reset)s tagon."
-msgstr[1] "Aktuale vi rajtas importi %(import_size_limit)s librojn ĉiujn %(import_limit_reset)s tagojn."
+msgstr[1] "Aktuale vi rajtas importi %(display_size)s librojn ĉiujn %(import_limit_reset)s tagojn."
#: bookwyrm/templates/import/import.html:27
#, python-format
msgid "You have %(display_left)s left."
-msgstr ""
+msgstr "Restas al vi %(display_left)s."
#: bookwyrm/templates/import/import.html:34
#, python-format
@@ -2867,7 +2899,7 @@ msgstr "Agordo de privateco por importitaj recenzoj:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importi"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Linio"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Titolo"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Ŝlosilo de Openlibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Aŭtoro"
@@ -3087,10 +3119,6 @@ msgstr "Kontaktu vian administranton aŭ DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "¡Ups!"
@@ -536,12 +570,12 @@ msgstr "Los moderadores y administradores de %(site_name)s mantienen el sitio en
msgid "Moderator"
msgstr "Moderador"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versión del software:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "El libro más corto que ha leído este año…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Ver registro ISNI"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Ver en ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Cargar datos"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Ver en OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Ver en Inventaire"
@@ -797,11 +831,7 @@ msgstr "Ver en LibraryThing"
msgid "View on Goodreads"
msgstr "Ver en Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Ver entrada en ISFDB"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Libros de %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Confirmar"
msgid "Unable to connect to remote source."
msgstr "No se ha podido conectar con la fuente remota."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Editar Libro"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Haz clic para añadir portada"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "No se pudo cargar la portada"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Haz clic para ampliar"
@@ -1046,13 +1076,13 @@ msgstr "Lugares"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listas"
@@ -1117,8 +1147,8 @@ msgstr "Subir portada:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Agregar portada de url:"
+msgid "Load cover from URL:"
+msgstr "Cargar portada desde URL:"
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Añadir Otro Autor"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Portada"
@@ -1455,8 +1485,9 @@ msgstr "Dominio"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Estado"
@@ -1465,7 +1496,7 @@ msgstr "Estado"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Acciones"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s páginas"
msgid "%(languages)s language"
msgstr "Idioma %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publicado el %(date)s por %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publicado por %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publicado el %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publicado por %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "lo valoró con"
@@ -1552,12 +1583,12 @@ msgstr "lo valoró con"
msgid "Series by"
msgstr "Series de"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Libro %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Libro sin clasificar"
@@ -1681,6 +1712,7 @@ msgstr "Sugerido"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s ha citado %(username)s"
msgstr "Mensajes directos con %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Mensajes directos"
@@ -1948,7 +1980,7 @@ msgstr "Actualizaciones"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Tus libros"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Añadir a tus libros"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Para leer"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Leyendo actualmente"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Leído"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Lectura interrumpida"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "¿Qué estás leyendo?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Buscar libros"
@@ -2046,8 +2078,8 @@ msgstr "Puedes agregar libros cuando comiences a usar %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Escáner de código de barras"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "¡Usa los enlaces Feed, Listas y Descubre para descubrir las últimas noticias de tu feed, listas de libros por temática, y los últimos acontecimientos en este servidor de Bookwyrm!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "La campana se encenderá cuando tengas una nueva notificación. ¡Cuando lo haga, haz clic en ella para saber qué cosa emocionante ha sucedido!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Notificaciones"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Puedes acceder a tu perfil, tus libros, tus mensajes directos y tu configuración haciendo clic en tu nombre en este menú."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Puedes crear o unirte a un grupo con otros usuarios. Los grupos pueden c
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupos"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Este es tu perfil de usuario. Todas tus últimas actividades aparecerán aquí. Otros usuarios de Bookwyrm también pueden ver partes de esta página (lo que ellos pueden ver depende de tu configuración de privacidad)."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Perfil de usuario"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Esta pestaña muestra todo lo que has leído hacia tu objetivo anual de lectura, o te permite establecer uno. ¡No tienes por qué establecer un objetivo de lectura si eso no es lo tuyo!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Objetivo de lectura"
@@ -2795,7 +2827,7 @@ msgstr "¡Esta etiqueta no tiene aún ninguna actividad!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importar libros"
@@ -2806,9 +2838,9 @@ msgstr "No es un archivo CSV válido"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] "Actualmente, puedes importar %(display_size)s libros cada %(import_limit_reset)s días."
-msgstr[1] "Actualmente, puedes importar %(import_size_limit)s libros cada %(import_limit_reset)s días."
+msgstr[1] "Actualmente, puedes importar %(display_size)s libros cada %(import_limit_reset)s días."
#: bookwyrm/templates/import/import.html:27
#, python-format
@@ -2867,7 +2899,7 @@ msgstr "Configuración de privacidad para las reseñas importadas:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importar"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Fila"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Título"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Clave de OpenLibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Autor/Autora"
@@ -3087,10 +3119,6 @@ msgstr "Póngase en contacto con su administrador o DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Hara!"
@@ -536,12 +570,12 @@ msgstr "%(site_name)s(e)ko moderatzaileek eta administratzaileek webgunea martxa
msgid "Moderator"
msgstr "Moderatzailea"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administratzailea"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Softwarearen bertsioa:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -602,7 +636,7 @@ msgstr "%(year)s liburuetan"
#: bookwyrm/templates/annual_summary/layout.html:47
#, python-format
msgid "%(display_name)s’s year of reading"
-msgstr "%(display_name)s(r)en irakurketa-urtea"
+msgstr "%(display_name)s erabiltzailearen irakurketa-urtea"
#: bookwyrm/templates/annual_summary/layout.html:53
msgid "Share this page"
@@ -619,7 +653,7 @@ msgstr "Kopiatuta!"
#: bookwyrm/templates/annual_summary/layout.html:77
msgid "Sharing status: public with key"
-msgstr "Egoeraren partekatzea: publikoa klabearekin"
+msgstr "Egoeraren partekatzea: publikoa gakoarekin"
#: bookwyrm/templates/annual_summary/layout.html:78
msgid "The page can be seen by anyone with the complete address."
@@ -680,7 +714,7 @@ msgstr "Aurtengo irakurketarik laburrena…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Ikusi ISNI erregistroa"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Ikus ISFDB webgunean"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Kargatu datuak"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "OpenLibraryn ikusi"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Inventairen ikusi"
@@ -797,11 +831,7 @@ msgstr "LibraryThing-en ikusi"
msgid "View on Goodreads"
msgstr "Goodreads-en ikusi"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Ikus ISFDB atala"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "%(name)s(e)k idatzitako liburuak"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Berretsi"
msgid "Unable to connect to remote source."
msgstr "Ezin izan da urruneko edukira konektatu."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Editatu liburua"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Egin klik azala gehitzeko"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Ezin izan da azala kargatu"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Egin click handitzeko"
@@ -1046,13 +1076,13 @@ msgstr "Lekuak"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Zerrendak"
@@ -1076,11 +1106,11 @@ msgstr "ISBN:"
#: bookwyrm/templates/book/book_identifiers.html:12
#: bookwyrm/templates/book/book_identifiers.html:13
msgid "Copy ISBN"
-msgstr ""
+msgstr "ISBN-a kopiatu"
#: bookwyrm/templates/book/book_identifiers.html:16
msgid "Copied ISBN!"
-msgstr ""
+msgstr "ISBN-a kopiatu!"
#: bookwyrm/templates/book/book_identifiers.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:352
@@ -1117,7 +1147,7 @@ msgstr "Kargatu azala:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
+msgid "Load cover from URL:"
msgstr "Kargatu azala URLtik:"
#: bookwyrm/templates/book/cover_show_modal.html:6
@@ -1245,7 +1275,7 @@ msgstr "Izenburua:"
#: bookwyrm/templates/book/edit/edit_book_form.html:35
msgid "Sort Title:"
-msgstr ""
+msgstr "Izenburuaren arabera ordenatu:"
#: bookwyrm/templates/book/edit/edit_book_form.html:44
msgid "Subtitle:"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Gehitu beste egile bat"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Azala"
@@ -1373,7 +1403,7 @@ msgstr "%(book_title)s(r)en edizioak"
#: bookwyrm/templates/book/editions/editions.html:8
#, python-format
msgid "Editions of %(work_title)s"
-msgstr ""
+msgstr "%(work_title)s lanaren edizioak"
#: bookwyrm/templates/book/editions/editions.html:55
msgid "Can't find the edition you're looking for?"
@@ -1455,8 +1485,9 @@ msgstr "Domeinua"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Egoera"
@@ -1465,7 +1496,7 @@ msgstr "Egoera"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Ekintzak"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s orrialde"
msgid "%(languages)s language"
msgstr "%(languages)s hizkuntza"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "%(date)s(e)an %(publisher)s(e)n argitaratua."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "%(publisher)s(e)k argitaratua."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "%(date)s(e)an argitaratua"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "%(publisher)s(e)k argitaratua."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "baloratu du"
@@ -1552,12 +1583,12 @@ msgstr "baloratu du"
msgid "Series by"
msgstr "Seriearen sortzailea: "
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "%(series_number)s. liburua"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Sailkatu gabeko liburua"
@@ -1681,6 +1712,7 @@ msgstr "Iradokizunak"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1726,7 +1758,7 @@ msgstr "%(username)s(e)k %(username)s finished reading %(book_title)s"
-msgstr "%(username)s(e)k %(book_title)s irakurtzen bukatu du"
+msgstr "%(username)s erabiltzaileak %(book_title)s irakurtzen bukatu du"
#: bookwyrm/templates/discover/card-header.html:18
#, python-format
@@ -1755,7 +1787,7 @@ msgstr "%(username)s(e)k %(username)s"
msgstr "%(username)s-rekin mezu zuzenak"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Mezu zuzenak"
@@ -1948,7 +1980,7 @@ msgstr "Eguneratzeak"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Zure liburuak"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Gehitu zure liburuetara"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Irakurtzeko"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Orain irakurtzen"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Irakurrita"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Irakurtzeari utzita"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Zer ari zara irakurtzen?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Bilatu liburu bat"
@@ -2046,8 +2078,8 @@ msgstr "Liburuak gehitu ditzakezu %(site_name)s erabiltzen hasten zarenean."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2060,7 +2092,7 @@ msgstr "Gomendatutako liburuak"
#: bookwyrm/templates/get_started/books.html:33
msgid "Search results"
-msgstr ""
+msgstr "Bilaketa-emaitzak"
#: bookwyrm/templates/get_started/books.html:46
#, python-format
@@ -2142,7 +2174,7 @@ msgstr "Zure kontua direktorioan agertuko da eta BookWyrmeko beste erabiltzaile
#: bookwyrm/templates/get_started/users.html:8
msgid "You can follow users on other BookWyrm instances and federated services like Mastodon."
-msgstr ""
+msgstr "Beste BookWyrm-en instantzietako eta Mastodon bezalako federatutako zerbitzuetako erabiltzaileak jarrai ditzakezu."
#: bookwyrm/templates/get_started/users.html:11
msgid "Search for a user"
@@ -2268,7 +2300,7 @@ msgstr "Kudeatzailea"
#: bookwyrm/templates/groups/user_groups.html:35
msgid "No groups found."
-msgstr ""
+msgstr "Ez da talderik aurkitu."
#: bookwyrm/templates/guided_tour/book.html:10
msgid "This is home page of a book. Let's see what you can do while you're here!"
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Bara-kode irakurgailua"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Erabili Jarioa, Zerrendak eta Deskubritu atalak zure jarioko azken berriak, gaikako liburu zerrendak eta Bookwyrm zerbitzari honetako azken jarduerak ezagutzeko!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Kanpaia piztu egingo da jakinarazpen berriren bat duzunean. Hala egiten duenean, klikatu ezazu zer gauza zirraragarri gertatu den jakiteko!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Jakinarazpenak"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Zure profila, liburuak, mezu zuzenak eta ezarpenak hemengo menuan zure izenean klik eginda dituzu eskuragarri."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2666,7 +2698,7 @@ msgstr "Zure liburuak"
#: bookwyrm/templates/guided_tour/user_books.html:31
msgid "To Read, Currently Reading, Read, and Stopped Reading are default shelves. When you change the reading status of a book it will automatically be moved to the matching shelf. A book can only be on one default shelf at a time."
-msgstr "Irakurtzeko, Irakurtzen, Irakurrita eta Irakurtzeari utzita lehenetsitako apalak dira. Liburu baten irakurketa-egoera aldatzen duzunean automatikoki aldatuko da dagokion apalera. Liburu bat lehentsitako apal bakarrean egon daiteke aldiko."
+msgstr "Irakurtzekoak, Orain irakurtzen, Irakurritakoak eta Irakurtzeari utzita lehenetsitako apalak dira. Liburu baten irakurketa-egoera aldatzen duzunean automatikoki aldatuko da dagokion apalera. Liburu bat lehentsitako apal bakarrean egon daiteke aldiko."
#: bookwyrm/templates/guided_tour/user_books.html:32
msgid "Reading status shelves"
@@ -2702,7 +2734,7 @@ msgstr "Talde berri bat sor dezakezu edo existitzen den batean sar zaitezke. Tal
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Taldeak"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Hau zure erabiltzaile profila da. Zure azken jarduerak hemen zerrendatuko dira. Bookwyrm-en beste erabiltzaile batzuek ere ikus ditzakete orrialde honen zatiak - ikus dezaketena pribatutasun ezarpenen araberakoa da."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Erabiltzailearen profila"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Fitxa honetan erakusten da irakurri duzun guztia urteko irakurketa-helburuari begira, edo irakurketa-helburu bat ezartzeko aukera ematen dizu. Ez duzu irakurketa-helbururik ezarri behar hori ez bada zure asmoetan!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Irakurketa-helburua"
@@ -2795,7 +2827,7 @@ msgstr "Ez dago aktibitaterik oraindik traola honentzat!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Inportatu liburuak"
@@ -2806,14 +2838,14 @@ msgstr "CSV fitxategia ez da baliozkoa"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
-msgstr[0] ""
-msgstr[1] ""
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
+msgstr[0] "Une honetan, %(display_size)s liburu inporta ditzakezu %(import_limit_reset)s egun bakoitzeko."
+msgstr[1] "Une honetan, %(display_size)s liburu inporta ditzakezu %(import_limit_reset)s egunero."
#: bookwyrm/templates/import/import.html:27
#, python-format
msgid "You have %(display_left)s left."
-msgstr ""
+msgstr "%(display_left)s geratzen zaizkizu."
#: bookwyrm/templates/import/import.html:34
#, python-format
@@ -2867,7 +2899,7 @@ msgstr "Inportatutako berrikuspenen pribatutasun ezarpena:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Inportatu"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Errenkada"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Izenburua"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary-ren giltza"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Egilea"
@@ -3087,10 +3119,6 @@ msgstr "Jar zaitez harremanetan zure administratzailearekin edo %(user)s opened this report"
-msgstr ""
+msgstr "%(user)s erabiltzaileak txosten hau ireki du"
#: bookwyrm/templates/settings/reports/report.html:86
#, python-format
msgid "%(user)s commented on this report:"
-msgstr ""
+msgstr "%(user)s erabiltzaileak txosten honetan iruzkindu du:"
#: bookwyrm/templates/settings/reports/report.html:90
#, python-format
msgid "%(user)s took an action on this report:"
-msgstr ""
+msgstr "%(user)s erabiltzaileak neurriak hartu ditu txosten honetan:"
#: bookwyrm/templates/settings/reports/report_header.html:6
#, python-format
@@ -5458,7 +5592,7 @@ msgstr "#%(report_id)s salaketa: @%(username)s erabiltzailea"
#: bookwyrm/templates/settings/reports/report_links_table.html:19
msgid "Approve domain"
-msgstr ""
+msgstr "Onartu domeinua"
#: bookwyrm/templates/settings/reports/report_links_table.html:26
msgid "Block domain"
@@ -5586,57 +5720,73 @@ msgid "Set instance default theme"
msgstr "Ezarri instantziaren lehenetsitako azala"
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr "Azala behar bezala gehitu da"
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr "Azal bat nola gehitu"
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Kopiatu azalaren fitxategia zure zerbitzarik bookwyrm/static/css/themes
direktoriora komando-lerrotik."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Exekutatu ./bw-dev compile_themes
eta ./bw-dev collectstatic
."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Gehitu fitxategiaren izena honako inprimakiaren bitartez aplikazioaren interfazean erabilgarri egon dadin."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Gehitu azala"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Ezin izan da azala gorde"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Azalaren izena"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Azalaren fitxategi-izena"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Azal erabilgarriak"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Fitxategia"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Ezabatu azala"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Behin-betirako ezabatu erabiltzailea"
@@ -5675,25 +5825,20 @@ msgstr "Azken jarduera"
msgid "Remote instance"
msgstr "Urruneko instantzia"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Ezabatuta"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Inaktiboa"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "Ezarri gabe"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Ikusi erablitzailearen profila"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Joan erabiltzaileen administraziora"
@@ -5749,27 +5894,39 @@ msgstr "Instantziaren xehetasunak"
msgid "View instance"
msgstr "Ikusi instantzia"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Behin-betirako ezabatuta"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Erabiltzailearen ekintzak"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Aktibatu erabiltzailea"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Bertan behera utzi erabiltzailea"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Desegin erabiltzailea bertan behera uztea"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Sarbide-maila:"
@@ -5825,7 +5982,7 @@ msgstr "Zure domeinua gaizki ezarria dagoela dirudi. Ez luke protokoloa edo barr
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "https gabe exekutatzen ari zara BookWyrm produkzio moduan. USE_HTTPS gaituta egon beharko litzateke produkzio testuinguruetan."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Ezarpenak"
@@ -5882,7 +6039,7 @@ msgid "Need help?"
msgstr "Laguntzarik behar?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Sortu apala"
@@ -5890,58 +6047,58 @@ msgstr "Sortu apala"
msgid "Edit Shelf"
msgstr "Editatu apala"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Erabiltzailearen profila"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Liburu guztiak"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "liburu %(formatted_count)s"
msgstr[1] "%(formatted_count)s liburu"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(%(start)s-%(end)s tartea bistaratzen)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Editatu apala"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Ezabatu apala"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Apalean jarrita"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Noiz hasia"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Amaituta"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Noiz arte"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Apal hau hutsik dago."
@@ -6048,7 +6205,7 @@ msgstr "Iruzkina:"
#: bookwyrm/templates/snippets/create_status/post_options_block.html:19
msgid "Update"
-msgstr ""
+msgstr "Eguneratu"
#: bookwyrm/templates/snippets/create_status/post_options_block.html:21
msgid "Post"
@@ -6077,7 +6234,7 @@ msgstr "Ehunekotan:"
#: bookwyrm/templates/snippets/create_status/quotation.html:69
msgid "to"
-msgstr ""
+msgstr "hona:"
#: bookwyrm/templates/snippets/create_status/review.html:24
#, python-format
@@ -6247,6 +6404,15 @@ msgstr "%(goal_count)s liburutik %(read_count)s irakurr
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s(e)k %(goal_count)s liburutik %(read_count)s irakurri ditu."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Jarraitu kontu berrian"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6327,7 +6493,7 @@ msgstr "Izena eman"
#: bookwyrm/templates/snippets/report_modal.html:8
#, python-format
msgid "Report @%(username)s's status"
-msgstr "Salatu @%(username)s(r)en egoera"
+msgstr "Salatu @%(username)s erabiltzailearen egoera"
#: bookwyrm/templates/snippets/report_modal.html:10
#, python-format
@@ -6388,35 +6554,35 @@ msgstr "Utzi irakurtzeari"
msgid "Finish reading"
msgstr "Bukatu irakurtzen"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Erakutsi egoera"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
-msgstr ""
+msgstr "(%(page)s. orria"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%%%(percent)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %%%(endpercent)s"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Ireki irudia leiho berrian"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Ezkutatu egoera"
@@ -6438,7 +6604,7 @@ msgstr "(e)k %(book)s(r)i buruzko iruzkina egin du
#: bookwyrm/templates/snippets/status/headers/note.html:8
#, python-format
msgid "replied to %(username)s's status"
-msgstr "%(username)s(r)en egoerari erantzun dio"
+msgstr "%(username)s erabiltzailearen egoerari erantzun diot"
#: bookwyrm/templates/snippets/status/headers/quotation.html:8
#, python-format
@@ -6453,17 +6619,17 @@ msgstr "%(book)s aipatu du"
#: bookwyrm/templates/snippets/status/headers/rating.html:3
#, python-format
msgid "rated %(book)s:"
-msgstr "%(book)s puntuatu du:"
+msgstr "(e)k %(book)s puntuatu du:"
#: bookwyrm/templates/snippets/status/headers/read.html:10
#, python-format
msgid "finished reading %(book)s by %(author_name)s"
-msgstr "(e)k %(author_name)s(r)en %(book)s irakurtzen bukatu du"
+msgstr "%(author_name)s egilearen %(book)s irakurtzen amaitu dut"
#: bookwyrm/templates/snippets/status/headers/read.html:17
#, python-format
msgid "finished reading %(book)s"
-msgstr "(e)k %(book)s irakurtzen bukatu du"
+msgstr "%(book)s irakurtzen amaitu dut"
#: bookwyrm/templates/snippets/status/headers/reading.html:10
#, python-format
@@ -6478,7 +6644,7 @@ msgstr ", %(book)s irakurtzen hasi da"
#: bookwyrm/templates/snippets/status/headers/review.html:8
#, python-format
msgid "reviewed %(book)s by %(author_name)s"
-msgstr "(e)k %(author_name)s(r)en %(book)s kritika egin du"
+msgstr "(e)k %(author_name)s(r)en %(book)s liburuaren kritika egin du"
#: bookwyrm/templates/snippets/status/headers/review.html:15
#, python-format
@@ -6488,12 +6654,12 @@ msgstr "(e)k %(book)s(r)en kritika egin du"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
#, python-format
msgid "stopped reading %(book)s by %(author_name)s"
-msgstr "%(author_name)s(r)en %(book)s irakurtzeari utzi dio"
+msgstr "%(author_name)s egilearen %(book)s irakurtzeari utzi diot"
#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
#, python-format
msgid "stopped reading %(book)s"
-msgstr "%(book)s irakurtzeari utzi dio"
+msgstr "%(book)s irakurtzeari utzi diot"
#: bookwyrm/templates/snippets/status/headers/to_read.html:10
#, python-format
@@ -6549,6 +6715,18 @@ msgstr "Erakutsi gehiago"
msgid "Show less"
msgstr "Erakutsi gutxiago"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Mugituta"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Ezabatuta"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Inaktiboa"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "2FA egiaztatzea"
@@ -6577,7 +6755,7 @@ msgstr "%(username)s(r)en liburuak"
#: bookwyrm/templates/user/goal.html:12
#, python-format
msgid "%(year)s Reading Progress"
-msgstr "%(year)s(e)ko irakurketa-aurerapena"
+msgstr "%(year)s urteko irakurketa-aurrerapena"
#: bookwyrm/templates/user/goal.html:16
msgid "Edit Goal"
@@ -6586,7 +6764,7 @@ msgstr "Editatu helburua"
#: bookwyrm/templates/user/goal.html:32
#, python-format
msgid "%(name)s hasn't set a reading goal for %(year)s."
-msgstr "%(name)s(e)k ez du irakurketa-helburu bat ezarri %(year)s(e)rako."
+msgstr "%(name)s erabiltzaileak ez du irakurketa-helburu bat ezarri %(year)s urtera begira."
#: bookwyrm/templates/user/goal.html:44
#, python-format
@@ -6607,11 +6785,11 @@ msgstr "Zure taldeak"
msgid "Groups: %(username)s"
msgstr "Taldeak: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Jarraitzeko eskaerak"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6626,7 +6804,13 @@ msgstr "Zerrendak: %(username)s"
msgid "Create list"
msgstr "Sortu zerrenda"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "%(date)s(e)an batu zen"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s erabiltzaileak ez du jarraitzailerik"
@@ -6663,7 +6847,7 @@ msgstr "Ikusi liburu guztiak"
#: bookwyrm/templates/user/user.html:69
#, python-format
msgid "%(current_year)s Reading Goal"
-msgstr "%(current_year)s Irakurketa xedea"
+msgstr "%(current_year)s urteko irakurketa-helburua"
#: bookwyrm/templates/user/user.html:76
msgid "User Activity"
@@ -6697,17 +6881,12 @@ msgstr "Iruzkinak bakarrik"
msgid "No activities yet!"
msgstr "Ez dago aktibitaterik oraindik!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "%(date)s(e)an batu zen"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
msgid_plural "%(display_count)s followers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "jarraitzaile %(display_count)s"
+msgstr[1] "%(display_count)s jarraitzaile"
#: bookwyrm/templates/user/user_preview.html:31
#, python-format
@@ -6729,10 +6908,6 @@ msgstr "Ez dago jarraitzen duzun jarraitzailerik"
msgid "View profile and more"
msgstr "Ikusi profila eta gehiago"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Amaitu saioa"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Fitxategiak gehienezko tamaina gainditzen du: 10 Mb"
@@ -6749,7 +6924,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "liburu %(num)d - %(user)s"
msgstr[1] "%(num)d liburu - %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
@@ -6757,7 +6932,7 @@ msgstr "%(title)s: %(subtitle)s"
#: bookwyrm/views/rss_feed.py:35
#, python-brace-format
msgid "Status updates from {obj.display_name}"
-msgstr "{obj.display_name}-ren egoera eguneratzeak"
+msgstr "{obj.display_name} erabiltzailearen egoera-eguneratzeak"
#: bookwyrm/views/rss_feed.py:80
#, python-brace-format
diff --git a/locale/fi_FI/LC_MESSAGES/django.mo b/locale/fi_FI/LC_MESSAGES/django.mo
index aef95bcc06..f0c7a156cd 100644
Binary files a/locale/fi_FI/LC_MESSAGES/django.mo and b/locale/fi_FI/LC_MESSAGES/django.mo differ
diff --git a/locale/fi_FI/LC_MESSAGES/django.po b/locale/fi_FI/LC_MESSAGES/django.po
index 67bd955a7c..df42e2b4c1 100644
--- a/locale/fi_FI/LC_MESSAGES/django.po
+++ b/locale/fi_FI/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 18:13\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Ei löydy"
@@ -476,6 +496,20 @@ msgstr "Ei löydy"
msgid "The page you requested doesn't seem to exist!"
msgstr "Pyytämääsi sivua ei ole olemassa."
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Hupsista!"
@@ -536,12 +570,12 @@ msgstr "%(site_name)s pyörii moderaattorien ja ylläpitäjien työllä. He myö
msgid "Moderator"
msgstr "Moderaattori"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Ylläpitäjä"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Ohjelmistoversio:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Vuoden lyhyin kirja…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Näytä ISNI-tietue"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Näytä ISFDB:ssä"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Lataa tiedot"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Näytä OpenLibraryssa"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Näytä Inventairessa"
@@ -797,11 +831,7 @@ msgstr "Näytä LibraryThingissä"
msgid "View on Goodreads"
msgstr "Näytä Goodreadsissa"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Näytä ISFDB-tietue"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Tekijän %(name)s kirjat"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Vahvista"
msgid "Unable to connect to remote source."
msgstr "Lähteeseen ei saada yhteyttä."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Muokkaa kirjaa"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Lisää kansikuva"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Kansikuvan lataus epäonnistui"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Suurenna"
@@ -1046,13 +1076,13 @@ msgstr "Paikat"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listat"
@@ -1117,8 +1147,8 @@ msgstr "Lataa kansikuva:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Lataa kansikuva osoitteesta:"
+msgid "Load cover from URL:"
+msgstr "Ladattavan kansikuvan URL:"
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Yksi tekijä lisää"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Kansikuva"
@@ -1455,8 +1485,9 @@ msgstr "Verkkotunnus"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Tila"
@@ -1465,7 +1496,7 @@ msgstr "Tila"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Toiminnot"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s sivua"
msgid "%(languages)s language"
msgstr "Kieli: %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Julkaisu: %(publisher)s, %(date)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Kustantaja: %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Julkaistu: %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Kustantaja: %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "antoi arvosanan"
@@ -1552,12 +1583,12 @@ msgstr "antoi arvosanan"
msgid "Series by"
msgstr "Sarja."
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Osa %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Lajittelematon kirja"
@@ -1681,6 +1712,7 @@ msgstr "Ehdotetut ensin"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s lainasi teosta %(username)s"
msgstr "Yksityisviestit käyttäjän %(username)s kanssa"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Yksityisviestit"
@@ -1948,7 +1980,7 @@ msgstr "Päivitykset"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Omat kirjat"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Lisää omiin kirjoihin"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Lukujono"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Luettavana"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Luettu"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Jäi kesken"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Mitä luet?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Hae kirjaa"
@@ -2046,8 +2078,8 @@ msgstr "Voit lisätä kirjoja, kun olet liittynyt %(site_name)s-yhteisöön."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Viivakoodinlukija"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Syöte, Listat ja Tutustu auttavat löytämään uusimmat kirjapäivitykset, aiheenmukaisia kirjalistoja sekä tämän BookWyrm-palvelimen uusimpia tapahtumia."
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Kellokuvake ilmoittaa uusista ilmoituksista. Ilmoituksia pääsee lukemaan kellokuvaketta painamalla."
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Ilmoitukset"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Omaa profiilia, kirjoja, yksityisviestejä ja asetuksia voi tarkastella tämän valikon kautta. Valikko avautuu nimeä painamalla."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Voit luoda ryhmän tai liittyä muiden käyttäjien ryhmiin. Ryhmissä v
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Ryhmät"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Tämä on käyttäjäprofiilisi. Tässä näytetään viimeaikainen toimintasi. Muut BookWyrm-käyttäjät voivat myös katsella tätä sivua, mutta näkyvyysasetuksistasi riippuu, mitä heille näytetään."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Käyttäjäprofiili"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Tällä välilehdellä asetetaan vuoden lukutavoite ja näytetään sen eteneminen. Lukutavoitetta ei tietenkään ole mikään pakko asettaa."
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Lukutavoite"
@@ -2795,7 +2827,7 @@ msgstr "Tätä aihetunnistetta ei ole vielä käytetty!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Tuo kirjoja"
@@ -2806,7 +2838,7 @@ msgstr "Epäkelpo CSV-tiedosto"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
@@ -2867,7 +2899,7 @@ msgstr "Tuotavien arvioiden yksityisyysvalinta:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Tuo"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Rivi"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Nimi"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary-avain"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Tekijä"
@@ -3087,10 +3119,6 @@ msgstr "Jos nimikkeiden tuonti epäonnistuu odottamattomalla tavalla, ota yhteyt
msgid "Create an Account"
msgstr "Avaa käyttäjätili"
-#: bookwyrm/templates/landing/invite.html:21
-msgid "Permission Denied"
-msgstr "Pääsy kielletty"
-
#: bookwyrm/templates/landing/invite.html:22
msgid "Sorry! This invite code is no longer valid."
msgstr "Kutsukoodi ei ole enää voimassa."
@@ -3138,7 +3166,7 @@ msgid "Login"
msgstr "Kirjaudu sisään"
#: bookwyrm/templates/landing/login.html:7
-#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:136
+#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:142
#: bookwyrm/templates/ostatus/error.html:37
msgid "Log in"
msgstr "Kirjaudu sisään"
@@ -3149,7 +3177,7 @@ msgstr "Sähköpostiosoite vahvistettu."
#: bookwyrm/templates/landing/login.html:21
#: bookwyrm/templates/landing/reactivate.html:17
-#: bookwyrm/templates/layout.html:127 bookwyrm/templates/ostatus/error.html:28
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/ostatus/error.html:28
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "Käyttäjänimi:"
@@ -3157,13 +3185,13 @@ msgstr "Käyttäjänimi:"
#: bookwyrm/templates/landing/login.html:27
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
-#: bookwyrm/templates/layout.html:131 bookwyrm/templates/ostatus/error.html:32
+#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Salasana:"
-#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:133
+#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:139
#: bookwyrm/templates/ostatus/error.html:34
msgid "Forgot your password?"
msgstr "Unohtuiko salasana?"
@@ -3206,35 +3234,35 @@ msgstr "Aktivoi tili uudelleen"
msgid "%(site_name)s search"
msgstr "%(site_name)s — haku"
-#: bookwyrm/templates/layout.html:37
+#: bookwyrm/templates/layout.html:39
msgid "Search for a book, user, or list"
msgstr "Hae kirjaa, käyttäjää tai listaa"
-#: bookwyrm/templates/layout.html:52 bookwyrm/templates/layout.html:53
+#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55
msgid "Scan Barcode"
msgstr "Skannaa viivakoodi"
-#: bookwyrm/templates/layout.html:67
+#: bookwyrm/templates/layout.html:69
msgid "Main navigation menu"
msgstr "Päävalikko"
-#: bookwyrm/templates/layout.html:87
-msgid "Feed"
-msgstr "Syöte"
-
-#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:33
+#: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33
msgid "password"
msgstr "salasana"
-#: bookwyrm/templates/layout.html:144
+#: bookwyrm/templates/layout.html:136
+msgid "Show/Hide password"
+msgstr "Näytä/piilota salasana"
+
+#: bookwyrm/templates/layout.html:150
msgid "Join"
msgstr "Liity"
-#: bookwyrm/templates/layout.html:179
+#: bookwyrm/templates/layout.html:196
msgid "Successfully posted status"
msgstr "Tilapäivitys onnistui"
-#: bookwyrm/templates/layout.html:180
+#: bookwyrm/templates/layout.html:197
msgid "Error posting status"
msgstr "Virhe tilapäivityksessä"
@@ -3426,6 +3454,7 @@ msgid "Set"
msgstr "Aseta"
#: bookwyrm/templates/lists/list.html:167
+#: bookwyrm/templates/snippets/remove_follower_button.html:4
#: bookwyrm/templates/snippets/remove_from_group_button.html:20
msgid "Remove"
msgstr "Poista"
@@ -3493,6 +3522,23 @@ msgstr "Kaikki listat"
msgid "Saved Lists"
msgstr "Tallennetut listat"
+#: bookwyrm/templates/moved.html:27
+#, python-format
+msgid "You have moved your account to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:32
+msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
+msgstr ""
+
+#: bookwyrm/templates/moved.html:42
+msgid "Undo move"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
+msgid "Log out"
+msgstr "Kirjaudu ulos"
+
#: bookwyrm/templates/notifications/items/accept.html:18
#, python-format
msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
@@ -3697,6 +3743,13 @@ msgstr "Tuonti valmis."
msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
msgstr "%(related_user)s kutsui sinut liittymään ryhmään ”%(group_name)s”"
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+msgstr[1] ""
+
#: bookwyrm/templates/notifications/items/join.html:16
#, python-format
msgid "has joined your group \"%(group_name)s\""
@@ -3744,6 +3797,16 @@ msgstr "%(related_user)s mainitsi sinut %(related_user)s mentioned you in a status"
msgstr "%(related_user)s mainitsi sinut tilapäivityksessään"
+#: bookwyrm/templates/notifications/items/move_user.html:18
+#, python-format
+msgid "%(related_user)s has moved to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:25
+#, python-format
+msgid "%(related_user)s has undone their move"
+msgstr ""
+
#: bookwyrm/templates/notifications/items/remove.html:17
#, python-format
msgid "has been removed from your group \"%(group_name)s\""
@@ -3782,7 +3845,7 @@ msgstr[0] "Uusi raportti odottaa tarkastusta"
msgstr[1] "%(display_count)s uutta raporttia odottaa tarkastusta"
#: bookwyrm/templates/notifications/items/status_preview.html:4
-#: bookwyrm/templates/snippets/status/content_status.html:73
+#: bookwyrm/templates/snippets/status/content_status.html:62
msgid "Content warning"
msgstr "Sisältövaroitus"
@@ -4000,9 +4063,51 @@ msgstr "Aloita kaksivaiheisen tunnistautumisen käyttöönotto syöttämällä s
msgid "Set up 2FA"
msgstr "Ota kaksivaiheinen tunnistautuminen käyttöön"
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr "Varmista salasanasi:"
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr "Muut nimet"
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr ""
+
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:46
+#: bookwyrm/templates/preferences/layout.html:54
msgid "Blocked Users"
msgstr "Estetyt käyttäjät"
@@ -4032,7 +4137,7 @@ msgstr "Uusi salasana:"
#: bookwyrm/templates/preferences/delete_user.html:4
#: bookwyrm/templates/preferences/delete_user.html:7
#: bookwyrm/templates/preferences/delete_user.html:40
-#: bookwyrm/templates/preferences/layout.html:28
+#: bookwyrm/templates/preferences/layout.html:36
#: bookwyrm/templates/settings/users/delete_user_form.html:22
msgid "Delete Account"
msgstr "Poista käyttäjätili"
@@ -4077,7 +4182,7 @@ msgstr "Muokkaa profiilia"
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr "Profiili"
@@ -4154,18 +4259,45 @@ msgstr "Lataa tiedosto"
msgid "Account"
msgstr "Käyttäjätili"
-#: bookwyrm/templates/preferences/layout.html:31
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:39
msgid "Data"
msgstr "Tiedot"
-#: bookwyrm/templates/preferences/layout.html:39
+#: bookwyrm/templates/preferences/layout.html:47
msgid "CSV export"
msgstr "CSV-vienti"
-#: bookwyrm/templates/preferences/layout.html:42
+#: bookwyrm/templates/preferences/layout.html:50
msgid "Relationships"
msgstr "Suhteet"
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr ""
+
#: bookwyrm/templates/reading_progress/finish.html:5
#, python-format
msgid "Finish \"%(book_title)s\""
@@ -4574,8 +4706,8 @@ msgid "Streams"
msgstr "Virrat"
#: bookwyrm/templates/settings/celery.html:32
-msgid "Broadcasts"
-msgstr "Lähetykset"
+msgid "Broadcast"
+msgstr ""
#: bookwyrm/templates/settings/celery.html:38
msgid "Inbox"
@@ -4925,7 +5057,7 @@ msgid "Details"
msgstr "Lisätiedot"
#: bookwyrm/templates/settings/federation/instance.html:53
-#: bookwyrm/templates/user/layout.html:69
+#: bookwyrm/templates/user/layout.html:79
msgid "Activity"
msgstr "Aktiivisuus"
@@ -5113,7 +5245,7 @@ msgstr "Kutsupyynnöt"
#: bookwyrm/templates/settings/invites/manage_invites.html:3
#: bookwyrm/templates/settings/invites/manage_invites.html:15
#: bookwyrm/templates/settings/layout.html:42
-#: bookwyrm/templates/user_menu.html:60
+#: bookwyrm/templates/user_menu.html:55
msgid "Invites"
msgstr "Kutsut"
@@ -5587,57 +5719,73 @@ msgid "Set instance default theme"
msgstr "Aseta palvelimen oletusteema"
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr "Teeman lisääminen onnistui"
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr "Teeman lisääminen — ohje"
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Kopioi teematiedosto komentorivillä palvelimen hakemistoon bookwyrm/static/css/themes
."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Suorita ./bw-dev compile_themes
ja ./bw-dev collectstatic
."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Lisää tiedostonimi alla olevalla lomakkeella, niin se on käytettävissä sovelluksen käyttöliittymän kautta."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Lisää teema"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Teemaa ei voi tallentaa"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Teeman nimi"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Teeman tiedostonimi"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Saatavilla olevat teemat"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Tiedosto"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Poista teema"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Poista käyttäjä pysyvästi"
@@ -5676,25 +5824,20 @@ msgstr "Viimeksi paikalla"
msgid "Remote instance"
msgstr "Etäpalvelin"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Poistettu"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Ei aktiivinen"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "Ei asetettu"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Näytä käyttäjäprofiili"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Siirry käyttäjien hallintaan"
@@ -5750,27 +5893,39 @@ msgstr "Palvelimen tiedot"
msgid "View instance"
msgstr "Näytä palvelin"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Poistettu pysyvästi"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Toiminnot"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Aktivoi käyttäjä"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Hyllytä käyttäjä"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Peru hyllytys"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Käyttöoikeustaso:"
@@ -5826,7 +5981,7 @@ msgstr "Verkkotunnus näyttää väärin muotoillulta. Siinä ei saa olla protok
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "BookWyrm on tuotantokäytössä ilman https-protokollaa. Tuotantokäytössä tulee ottaa käyttöön USE_HTTPS-valinta."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Asetukset"
@@ -5883,7 +6038,7 @@ msgid "Need help?"
msgstr "Tarvitsetko apua?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Luo hylly"
@@ -5891,58 +6046,58 @@ msgstr "Luo hylly"
msgid "Edit Shelf"
msgstr "Muokkaa hyllyä"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Käyttäjäprofiili"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Kaikki kirjat"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s kirja"
msgstr[1] "%(formatted_count)s kirjaa"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(näytetään %(start)s–%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Muokkaa hyllyä"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Poista hylly"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Hyllytetty"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Aloitettu"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Luettu"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
-msgstr "Saakka"
+msgstr "Lopetettu"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Hylly on tyhjä."
@@ -6248,6 +6403,15 @@ msgstr "Olet lukenut %(read_count)s/%(goal_count)s kirjaa
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s on lukenut %(read_count)s/%(goal_count)s kirjaa."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr ""
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6389,35 +6553,35 @@ msgstr "Keskeytä lukeminen"
msgid "Finish reading"
msgstr "Luettu kokonaan"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Näytä tilapäivitys"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Sivu %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s %%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr "–%(endpercent)s %%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Avaa kuva uudessa ikkunassa"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Piilota tilapäivitys"
@@ -6550,6 +6714,18 @@ msgstr "Näytä lisää"
msgid "Show less"
msgstr "Näytä vähemmän"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Poistettu"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Ei aktiivinen"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "Kaksivaiheisen tunnistautumisen tarkistus"
@@ -6608,11 +6784,11 @@ msgstr "Omat ryhmät"
msgid "Groups: %(username)s"
msgstr "Ryhmät: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Seuraamispyynnöt"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6627,7 +6803,13 @@ msgstr "Listat: %(username)s"
msgid "Create list"
msgstr "Luo lista"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Liittynyt %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "Käyttäjällä %(username)s ei ole seuraajia"
@@ -6698,11 +6880,6 @@ msgstr "Vain kommentit"
msgid "No activities yet!"
msgstr "Ei toimintaa!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Liittynyt %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6730,10 +6907,6 @@ msgstr "Ei seuraajia, joita seuraat itse"
msgid "View profile and more"
msgstr "Näytä profiili ja muita tietoja"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Kirjaudu ulos"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Tiedosto on enimmäiskokoa 10 Mt suurempi"
@@ -6750,7 +6923,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "%(num)d kirja — %(user)s"
msgstr[1] "%(num)d kirjaa — %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo
index 4cdcbf8ea2..1b3148f925 100644
Binary files a/locale/fr_FR/LC_MESSAGES/django.mo and b/locale/fr_FR/LC_MESSAGES/django.mo differ
diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po
index 1bd27f6909..8fa5f634e4 100644
--- a/locale/fr_FR/LC_MESSAGES/django.po
+++ b/locale/fr_FR/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-31 20:26\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:11\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Introuvable"
@@ -476,6 +496,20 @@ msgstr "Introuvable"
msgid "The page you requested doesn't seem to exist!"
msgstr "Il semblerait que la page que vous avez demandée n’existe pas !"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Oups !"
@@ -536,12 +570,12 @@ msgstr "L’administration et la modération de %(site_name)s maintiennent le si
msgid "Moderator"
msgstr "Modérateur/modératrice"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Version logicielle :"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Sa lecture la plus courte l’année…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Voir l’enregistrement ISNI"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Voir sur ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Charger les données"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Voir sur OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Voir sur Inventaire"
@@ -797,11 +831,7 @@ msgstr "Voir sur LibraryThing"
msgid "View on Goodreads"
msgstr "Voir sur Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Voir l’entrée ISFDB"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Livres de %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI :"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Confirmer"
msgid "Unable to connect to remote source."
msgstr "Impossible de se connecter au serveur distant."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Modifier le livre"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Cliquez pour ajouter une couverture"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "La couverture n’a pu être chargée"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Cliquez pour élargir"
@@ -1046,13 +1076,13 @@ msgstr "Lieux"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listes"
@@ -1117,7 +1147,7 @@ msgstr "Charger une couverture :"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
+msgid "Load cover from URL:"
msgstr "Charger la couverture depuis une URL :"
#: bookwyrm/templates/book/cover_show_modal.html:6
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Ajouter un autre auteur ou autrice"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Couverture"
@@ -1455,8 +1485,9 @@ msgstr "Domaine"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Statut"
@@ -1465,7 +1496,7 @@ msgstr "Statut"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Actions"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s pages"
msgid "%(languages)s language"
msgstr "Langue : %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publié %(date)s par %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publié par %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publié %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publié par %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "l’a noté"
@@ -1552,12 +1583,12 @@ msgstr "l’a noté"
msgid "Series by"
msgstr "Séries par"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Livre %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Livre hors classement"
@@ -1681,6 +1712,7 @@ msgstr "Suggéré"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s a cité un passage de %(username)s"
msgstr "Messages directs avec %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Messages directs"
@@ -1948,7 +1980,7 @@ msgstr "Mises à jour"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Vos Livres"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Ajouter à vos livres"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "À lire"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Lectures en cours"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Lu"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Lecture interrompue"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Que lisez‑vous ?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Chercher un livre"
@@ -2046,8 +2078,8 @@ msgstr "Vous pourrez ajouter des livres lorsque vous commencerez à utiliser %(s
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Lecteur de code-barres"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Utilisez les liens Flux, Listes et Découverte pour découvrir les dernières mises à jour de votre flux, de vos listes de livres, et les derniers événements sur ce serveur Bookwyrm !"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "La cloche s'allumera quand vous aurez une nouvelle notification. Quand elle sera activée, cliquez dessus pour savoir ce qui s'est passé !"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Notifications"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Vous pouvez accéder à votre profil, vos livres, vos messages directs et vos paramètres en cliquant sur votre nom dans ce menu-ci."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Vous pouvez créer ou rejoindre un groupe avec d'autres utilisateurs. Le
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Groupes"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Voici votre page de profil. Toutes vos dernières activités seront listées ici. D'autres membres de Bookwyrm peuvent également voir des parties de cette page—ce qu’il leur est possible de voir dépend de vos paramètres de confidentialité."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Profil"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Cet onglet montre tout ce que vous avez lu pour atteindre votre objectif de lecture annuel, ou vous permet d’en définir un. Vous n’avez pas à définir un objectif de lecture si ce n’est pas votre truc !"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Défi lecture"
@@ -2795,7 +2827,7 @@ msgstr "Pas encore d’activité pour ce hashtag !"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importer des livres"
@@ -2806,7 +2838,7 @@ msgstr "Fichier CSV non valide"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] "Vous êtes actuellement autorisé à importer %(display_size)s livres tous les %(import_limit_reset)s jours."
msgstr[1] "Vous avez le droit d’importer %(display_size)s livres chaque %(import_limit_reset)s jours actuellement."
@@ -2867,7 +2899,7 @@ msgstr "Confidentialité des critiques importées :"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importer"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Ligne"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Titre"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Clé Openlibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Auteur/autrice"
@@ -3087,10 +3119,6 @@ msgstr "Contactez votre administrateur·ice ou user@example.com) :"
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr "Confirmez votre mot de passe :"
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr "Alias de redirection"
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr "Supprimer l'alias de redirection"
+
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:46
+#: bookwyrm/templates/preferences/layout.html:54
msgid "Blocked Users"
msgstr "Comptes bloqués"
@@ -4032,7 +4137,7 @@ msgstr "Nouveau mot de passe :"
#: bookwyrm/templates/preferences/delete_user.html:4
#: bookwyrm/templates/preferences/delete_user.html:7
#: bookwyrm/templates/preferences/delete_user.html:40
-#: bookwyrm/templates/preferences/layout.html:28
+#: bookwyrm/templates/preferences/layout.html:36
#: bookwyrm/templates/settings/users/delete_user_form.html:22
msgid "Delete Account"
msgstr "Supprimer le compte"
@@ -4077,7 +4182,7 @@ msgstr "Modifier le profil"
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr "Profil"
@@ -4154,18 +4259,46 @@ msgstr "Télécharger le fichier"
msgid "Account"
msgstr "Compte"
-#: bookwyrm/templates/preferences/layout.html:31
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
+msgstr "Migrer le compte"
+
+#: bookwyrm/templates/preferences/layout.html:39
msgid "Data"
msgstr "Données"
-#: bookwyrm/templates/preferences/layout.html:39
+#: bookwyrm/templates/preferences/layout.html:47
msgid "CSV export"
msgstr "Export CSV"
-#: bookwyrm/templates/preferences/layout.html:42
+#: bookwyrm/templates/preferences/layout.html:50
msgid "Relationships"
msgstr "Relations"
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr "Migrer ce compte vers une autre instance"
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr "Migrer ce compte notifiera tou·te·s vos abonné·e·s et les redirigera vers votre nouveau compte."
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr "\n"
+"L'utilisateur %(user)s sera marqué comme migré et ne sera plus découvrable ou utilisable, à moins que vous n'annuliez la migration. "
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr "Pensez à déclarer cet utilisateur comme alias du compte cible avant d'initier la migration."
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr "Entrez le nom d'utilisateur du compte que vous souhaitez faire migrer (ex. : user@example.com) :"
+
#: bookwyrm/templates/reading_progress/finish.html:5
#, python-format
msgid "Finish \"%(book_title)s\""
@@ -4574,7 +4707,7 @@ msgid "Streams"
msgstr "Flux"
#: bookwyrm/templates/settings/celery.html:32
-msgid "Broadcasts"
+msgid "Broadcast"
msgstr "Diffusion"
#: bookwyrm/templates/settings/celery.html:38
@@ -4925,7 +5058,7 @@ msgid "Details"
msgstr "Détails"
#: bookwyrm/templates/settings/federation/instance.html:53
-#: bookwyrm/templates/user/layout.html:69
+#: bookwyrm/templates/user/layout.html:79
msgid "Activity"
msgstr "Activité"
@@ -5113,7 +5246,7 @@ msgstr "Demandes d’invitation"
#: bookwyrm/templates/settings/invites/manage_invites.html:3
#: bookwyrm/templates/settings/invites/manage_invites.html:15
#: bookwyrm/templates/settings/layout.html:42
-#: bookwyrm/templates/user_menu.html:60
+#: bookwyrm/templates/user_menu.html:55
msgid "Invites"
msgstr "Invitations"
@@ -5587,57 +5720,73 @@ msgid "Set instance default theme"
msgstr "Définir le thème par défaut de l'instance"
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr "Thème ajouté avec succès"
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr "Comment ajouter un thème"
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Copiez le fichier de thème dans le répertoire bookwyrm/static/css/themes
de votre serveur depuis la ligne de commande."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Exécutez ./bw-dev compile_themes
et ./bw-dev collectstatic
."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Ajoutez le nom du fichier à l'aide du formulaire ci-dessous pour le rendre disponible dans l'interface de l'application."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Ajouter un thème"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Impossible d’enregistrer le thème"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Nom du thème"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Nom de fichier du thème"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Thèmes disponibles"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Fichier"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Supprimer le thème"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Supprimer définitivement l'utilisateur"
@@ -5676,25 +5825,20 @@ msgstr "Dernière activité"
msgid "Remote instance"
msgstr "Instance distante"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Supprimé"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Inactif"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "Non défini"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Voir le profil"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Accéder à l’admininstration des comptes"
@@ -5750,27 +5894,39 @@ msgstr "Détails de l’instance"
msgid "View instance"
msgstr "Voir l’instance"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Supprimé définitivement"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Actions de l'utilisateur"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Activer le compte"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Suspendre le compte"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Rétablir le compte"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Niveau d’accès :"
@@ -5826,7 +5982,7 @@ msgstr "Votre domaine semble être mal configuré. Il ne doit pas inclure de pro
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "Vous utilisez BookWyrm en mode production sans https. USE_HTTPS doit être activé en production."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Paramètres"
@@ -5883,7 +6039,7 @@ msgid "Need help?"
msgstr "Besoin d’aide ?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Créer une étagère"
@@ -5891,58 +6047,58 @@ msgstr "Créer une étagère"
msgid "Edit Shelf"
msgstr "Modifier l’étagère"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Profil utilisateur·rice"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Tous les livres"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s livre"
msgstr[1] "%(formatted_count)s livres"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(affichage de %(start)s-%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Modifier l’étagère"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Supprimer l’étagère"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Date d’ajout"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Commencé"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Terminé"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Jusqu’à"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Cette étagère est vide"
@@ -6248,6 +6404,15 @@ msgstr "Vous avez lu %(read_count)s livres sur %(goal_count
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s a lu %(read_count)s sur %(goal_count)s livres."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Suivre le nouveau compte"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6389,35 +6554,35 @@ msgstr "Interrompre la lecture"
msgid "Finish reading"
msgstr "Terminer la lecture"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Afficher le statut"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Page %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Ouvrir l’image dans une nouvelle fenêtre"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Masquer le statut"
@@ -6550,6 +6715,18 @@ msgstr "Déplier"
msgid "Show less"
msgstr "Replier"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Déménagé"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Supprimé"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Inactif"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "Vérification 2FA"
@@ -6608,11 +6785,11 @@ msgstr "Vos Groupes"
msgid "Groups: %(username)s"
msgstr "Groupes : %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Demandes d’abonnement"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6627,7 +6804,13 @@ msgstr "Listes : %(username)s"
msgid "Create list"
msgstr "Créer une liste"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "A rejoint ce serveur %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s n’a pas d’abonné(e)"
@@ -6698,11 +6881,6 @@ msgstr "Seulement les commentaires"
msgid "No activities yet!"
msgstr "Aucune activité pour l’instant !"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "A rejoint ce serveur %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6730,10 +6908,6 @@ msgstr "Aucun·e abonné·e que vous suivez"
msgid "View profile and more"
msgstr "Voir le profil et plus"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Se déconnecter"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Ce fichier dépasse la taille limite : 10 Mo"
@@ -6750,7 +6924,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "%(num)d livre - par %(user)s"
msgstr[1] "%(num)d livres - par %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s (%(subtitle)s)"
diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo
index 780a8def4f..132cd95847 100644
Binary files a/locale/gl_ES/LC_MESSAGES/django.mo and b/locale/gl_ES/LC_MESSAGES/django.mo differ
diff --git a/locale/gl_ES/LC_MESSAGES/django.po b/locale/gl_ES/LC_MESSAGES/django.po
index 904c15a637..0212c0acd3 100644
--- a/locale/gl_ES/LC_MESSAGES/django.po
+++ b/locale/gl_ES/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-20 13:05\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:11\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Non se atopa"
@@ -476,6 +496,20 @@ msgstr "Non se atopa"
msgid "The page you requested doesn't seem to exist!"
msgstr "Parece que non existe a páxina solicitada!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Vaite!"
@@ -536,12 +570,12 @@ msgstr "A moderación e administración de %(site_name)s coidan e xestionan o si
msgid "Moderator"
msgstr "Moderación"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versión do software:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "A lectura máis curta deste ano…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -701,8 +735,8 @@ msgstr "…e a máis longa"
#, python-format
msgid "%(display_name)s set a goal of reading %(goal)s book in %(year)s,bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Copia il file del tema nella directory bookwyrm/static/css/themes
sul tuo server dalla riga di comando."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Esegui ./bw-dev compile_themes
e ./bw-dev collectstatic
."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Aggiungere il nome del file utilizzando il modulo sottostante per renderlo disponibile nell'interfaccia dell'applicazione."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Aggiungi tema"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Impossibile salvare il tema"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Nome tema"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Nome file del tema"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Temi disponibili"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "File"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Rimuovi tema"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Elimina definitivamente utente"
@@ -5676,25 +5826,20 @@ msgstr "Attivo l'ultima volta"
msgid "Remote instance"
msgstr "Istanza remota"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Elimina"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Inattivo"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "Non impostato"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Visualizza il profilo dell'utente"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Vai ad amministratore utente"
@@ -5750,27 +5895,39 @@ msgstr "Dettagli dell'istanza"
msgid "View instance"
msgstr "Visualizza istanza"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Elimina definitivamente"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Azioni dell'utente"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Attiva utente"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Sospendere utente"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Annulla sospensione utente"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Livello di accesso:"
@@ -5826,7 +5983,7 @@ msgstr "Il tuo dominio sembra essere mal configurato. Non dovrebbe includere pro
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "Stai eseguendo BookWyrm in modalità di produzione senza https. USE_HTTPS dovrebbe essere abilitato in produzione."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Impostazioni"
@@ -5883,7 +6040,7 @@ msgid "Need help?"
msgstr "Hai bisogno di aiuto?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Crea scaffale"
@@ -5891,58 +6048,58 @@ msgstr "Crea scaffale"
msgid "Edit Shelf"
msgstr "Modifica Scaffale"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Profilo utente"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Tutti i libri"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s libro"
msgstr[1] "%(formatted_count)s libri"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(mostra %(start)s-%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Modifica scaffale"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Elimina scaffale"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Scaffali"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Iniziato"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Completato"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Finito"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Questo scaffale è vuoto."
@@ -6248,6 +6405,15 @@ msgstr "Hai letto %(read_count)s di %(goal_count)s libri%(read_count)s of %(goal_count)s books."
msgstr "%(username)s ha letto %(read_count)s di %(goal_count)s libri."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Segui sul nuovo account"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6389,35 +6555,35 @@ msgstr "Interrompi la lettura"
msgid "Finish reading"
msgstr "Finito di leggere"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Mostra stato"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Pagina %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Apri immagine in una nuova finestra"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Nascondi lo stato"
@@ -6550,6 +6716,18 @@ msgstr "Mostra di più"
msgid "Show less"
msgstr "Mostra meno"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Trasferito"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Elimina"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Inattivo"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "Verifica 2FA"
@@ -6608,11 +6786,11 @@ msgstr "I tuoi gruppi"
msgid "Groups: %(username)s"
msgstr "Gruppi: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Richieste di seguirti"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6627,7 +6805,13 @@ msgstr "Liste: %(username)s"
msgid "Create list"
msgstr "Crea lista"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Registrato %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s non ha followers"
@@ -6698,11 +6882,6 @@ msgstr "Solo commenti"
msgid "No activities yet!"
msgstr "Ancora nessuna attività!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Registrato %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6730,10 +6909,6 @@ msgstr "Nessun follower che segui"
msgid "View profile and more"
msgstr "Visualizza profilo e altro"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Esci"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Il file supera la dimensione massima: 10MB"
@@ -6750,7 +6925,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] ""
msgstr[1] "%(num)d libri - di %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/ko_KR/LC_MESSAGES/django.mo b/locale/ko_KR/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..463d8e4c89
Binary files /dev/null and b/locale/ko_KR/LC_MESSAGES/django.mo differ
diff --git a/locale/ko_KR/LC_MESSAGES/django.po b/locale/ko_KR/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..9c01bea990
--- /dev/null
+++ b/locale/ko_KR/LC_MESSAGES/django.po
@@ -0,0 +1,7177 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: bookwyrm\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-02 03:27+0000\n"
+"PO-Revision-Date: 2024-02-06 16:05\n"
+"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
+#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
+msgid "Not Found"
+msgstr "찾을 수 없음"
+
+#: bookwyrm/templates/404.html:9
+msgid "The page you requested doesn't seem to exist!"
+msgstr ""
+
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr "너무 큰 파일"
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/500.html:4
+msgid "Oops!"
+msgstr "이런!"
+
+#: bookwyrm/templates/500.html:8
+msgid "Server Error"
+msgstr "서버 오류"
+
+#: bookwyrm/templates/500.html:9
+msgid "Something went wrong! Sorry about that."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:9
+#: bookwyrm/templates/about/layout.html:35
+msgid "About"
+msgstr "정보"
+
+#: bookwyrm/templates/about/about.html:21
+#: bookwyrm/templates/get_started/layout.html:22
+#, python-format
+msgid "Welcome to %(site_name)s!"
+msgstr "%(site_name)s에 어서오세요!"
+
+#: bookwyrm/templates/about/about.html:25
+#, python-format
+msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:45
+#, python-format
+msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:64
+#, python-format
+msgid "More %(site_name)s users want to read %(title)s than any other book."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:83
+#, python-format
+msgid "%(title)s has the most divisive ratings of any book on %(site_name)s."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:94
+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, reach out and make yourself heard."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:105
+msgid "Meet your admins"
+msgstr "여기 관리자 만나기"
+
+#: bookwyrm/templates/about/about.html:108
+#, python-format
+msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior."
+msgstr ""
+
+#: bookwyrm/templates/about/about.html:122
+msgid "Moderator"
+msgstr "중재자"
+
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
+msgid "Admin"
+msgstr "관리"
+
+#: bookwyrm/templates/about/about.html:140
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
+#: bookwyrm/templates/snippets/status/status_options.html:35
+#: bookwyrm/templates/snippets/user_options.html:14
+msgid "Send direct message"
+msgstr "디렉트 메시지 보내기"
+
+#: bookwyrm/templates/about/conduct.html:4
+#: bookwyrm/templates/about/conduct.html:9
+#: bookwyrm/templates/about/layout.html:41
+#: bookwyrm/templates/snippets/footer.html:27
+msgid "Code of Conduct"
+msgstr "행동 지침"
+
+#: bookwyrm/templates/about/impressum.html:4
+#: bookwyrm/templates/about/impressum.html:9
+#: bookwyrm/templates/about/layout.html:54
+#: bookwyrm/templates/snippets/footer.html:34
+msgid "Impressum"
+msgstr "법률 고지"
+
+#: bookwyrm/templates/about/layout.html:11
+msgid "Active users:"
+msgstr "활성 이용자"
+
+#: bookwyrm/templates/about/layout.html:15
+msgid "Statuses posted:"
+msgstr "게시한 기록:"
+
+#: bookwyrm/templates/about/layout.html:19
+#: bookwyrm/templates/setup/config.html:74
+msgid "Software version:"
+msgstr "소프트웨어 버전:"
+
+#: bookwyrm/templates/about/layout.html:30
+#: bookwyrm/templates/embed-layout.html:34
+#: bookwyrm/templates/snippets/footer.html:8
+#, python-format
+msgid "About %(site_name)s"
+msgstr "%(site_name)s에 관하여"
+
+#: bookwyrm/templates/about/layout.html:47
+#: bookwyrm/templates/about/privacy.html:4
+#: bookwyrm/templates/about/privacy.html:9
+#: bookwyrm/templates/snippets/footer.html:30
+msgid "Privacy Policy"
+msgstr "개인정보처리방침"
+
+#: bookwyrm/templates/annual_summary/layout.html:7
+#: bookwyrm/templates/feed/summary_card.html:8
+#, python-format
+msgid "%(year)s in the books"
+msgstr "%(year)s년의 책들"
+
+#: bookwyrm/templates/annual_summary/layout.html:43
+#, python-format
+msgid "%(year)s in the books"
+msgstr "%(year)s년의 책들"
+
+#: bookwyrm/templates/annual_summary/layout.html:47
+#, python-format
+msgid "%(display_name)s’s year of reading"
+msgstr "%(display_name)s의 올 해 독서"
+
+#: bookwyrm/templates/annual_summary/layout.html:53
+msgid "Share this page"
+msgstr "이 페이지 공유"
+
+#: bookwyrm/templates/annual_summary/layout.html:67
+msgid "Copy address"
+msgstr "주소 복사"
+
+#: bookwyrm/templates/annual_summary/layout.html:68
+#: bookwyrm/templates/lists/list.html:277
+msgid "Copied!"
+msgstr "복사함!"
+
+#: bookwyrm/templates/annual_summary/layout.html:77
+msgid "Sharing status: public with key"
+msgstr ""
+
+#: bookwyrm/templates/annual_summary/layout.html:78
+msgid "The page can be seen by anyone with the complete address."
+msgstr ""
+
+#: bookwyrm/templates/annual_summary/layout.html:83
+msgid "Make page private"
+msgstr "페이지 비공개하기"
+
+#: bookwyrm/templates/annual_summary/layout.html:89
+msgid "Sharing status: private"
+msgstr ""
+
+#: bookwyrm/templates/annual_summary/layout.html:90
+msgid "The page is private, only you can see it."
+msgstr "이 페이지는 비공개이므로 자신만 볼 수 있어요."
+
+#: bookwyrm/templates/annual_summary/layout.html:95
+msgid "Make page public"
+msgstr "페이지 공개하기"
+
+#: bookwyrm/templates/annual_summary/layout.html:99
+msgid "When you make your page private, the old key won’t give access to the page anymore. A new key will be created if the page is once again made public."
+msgstr ""
+
+#: bookwyrm/templates/annual_summary/layout.html:112
+#, python-format
+msgid "Sadly %(display_name)s didn’t finish any books in %(year)s"
+msgstr ""
+
+#: bookwyrm/templates/annual_summary/layout.html:118
+#, python-format
+msgid "In %(year)s, %(display_name)s read %(books_total)s book%(link_url)s
.%(confirmation_code)s
\" at login."
+msgstr ""
+
+#: bookwyrm/templates/email/confirm/subject.html:2
+msgid "Please confirm your email"
+msgstr "이메일 주소 확인하기"
+
+#: bookwyrm/templates/email/confirm/text_content.html:10
+#, python-format
+msgid "Or enter the code \"%(confirmation_code)s\" at login."
+msgstr ""
+
+#: bookwyrm/templates/email/html_layout.html:15
+#: bookwyrm/templates/email/text_layout.html:2
+msgid "Hi there,"
+msgstr ""
+
+#: bookwyrm/templates/email/html_layout.html:21
+#, python-format
+msgid "BookWyrm hosted on %(site_name)s"
+msgstr "%(site_name)s에서 호스트하는 BookWyrm"
+
+#: bookwyrm/templates/email/html_layout.html:23
+msgid "Email preference"
+msgstr "이메일 설정"
+
+#: bookwyrm/templates/email/invite/html_content.html:6
+#: bookwyrm/templates/email/invite/subject.html:2
+#, python-format
+msgid "You're invited to join %(site_name)s!"
+msgstr ""
+
+#: bookwyrm/templates/email/invite/html_content.html:9
+msgid "Join Now"
+msgstr "바로 참여하기"
+
+#: bookwyrm/templates/email/invite/html_content.html:15
+#, python-format
+msgid "Learn more about %(site_name)s."
+msgstr ""
+
+#: bookwyrm/templates/email/invite/text_content.html:4
+#, python-format
+msgid "You're invited to join %(site_name)s! Click the link below to create an account."
+msgstr ""
+
+#: bookwyrm/templates/email/invite/text_content.html:8
+#, python-format
+msgid "Learn more about %(site_name)s:"
+msgstr ""
+
+#: bookwyrm/templates/email/moderation_report/html_content.html:8
+#: bookwyrm/templates/email/moderation_report/text_content.html:6
+#, python-format
+msgid "@%(reporter)s has flagged a link domain for moderation."
+msgstr ""
+
+#: bookwyrm/templates/email/moderation_report/html_content.html:14
+#: bookwyrm/templates/email/moderation_report/text_content.html:10
+#, python-format
+msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation."
+msgstr ""
+
+#: bookwyrm/templates/email/moderation_report/html_content.html:21
+#: bookwyrm/templates/email/moderation_report/text_content.html:15
+msgid "View report"
+msgstr "제보 보기"
+
+#: bookwyrm/templates/email/moderation_report/subject.html:2
+#, python-format
+msgid "New report for %(site_name)s"
+msgstr ""
+
+#: bookwyrm/templates/email/password_reset/html_content.html:6
+#: bookwyrm/templates/email/password_reset/text_content.html:4
+#, python-format
+msgid "You requested to reset your %(site_name)s password. Click the link below to set a new password and log in to your account."
+msgstr ""
+
+#: bookwyrm/templates/email/password_reset/html_content.html:9
+#: bookwyrm/templates/landing/password_reset.html:4
+#: bookwyrm/templates/landing/password_reset.html:10
+#: bookwyrm/templates/landing/password_reset_request.html:4
+#: bookwyrm/templates/landing/password_reset_request.html:10
+msgid "Reset Password"
+msgstr "암호 재설정"
+
+#: bookwyrm/templates/email/password_reset/html_content.html:13
+#: bookwyrm/templates/email/password_reset/text_content.html:8
+msgid "If you didn't request to reset your password, you can ignore this email."
+msgstr ""
+
+#: bookwyrm/templates/email/password_reset/subject.html:2
+#, python-format
+msgid "Reset your %(site_name)s password"
+msgstr ""
+
+#: bookwyrm/templates/email/test/html_content.html:6
+#: bookwyrm/templates/email/test/text_content.html:4
+msgid "This is a test email."
+msgstr "시험 이메일입니다."
+
+#: bookwyrm/templates/email/test/subject.html:2
+msgid "Test email"
+msgstr "시험 이메일"
+
+#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:33
+#: bookwyrm/templates/layout.html:163 bookwyrm/templates/setup/layout.html:15
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
+#, python-format
+msgid "%(site_name)s home page"
+msgstr ""
+
+#: bookwyrm/templates/embed-layout.html:40
+#: bookwyrm/templates/snippets/footer.html:12
+msgid "Contact site admin"
+msgstr "사이트 관리자 연락하기"
+
+#: bookwyrm/templates/embed-layout.html:46
+msgid "Join BookWyrm"
+msgstr "BookWyrm 참여하기"
+
+#: bookwyrm/templates/feed/direct_messages.html:8
+#, python-format
+msgid "Direct Messages with %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/feed/direct_messages.html:10
+#: bookwyrm/templates/user_menu.html:39
+msgid "Direct Messages"
+msgstr "디렉트 메시지"
+
+#: bookwyrm/templates/feed/direct_messages.html:13
+msgid "All messages"
+msgstr "모든 메시지"
+
+#: bookwyrm/templates/feed/direct_messages.html:22
+msgid "You have no messages right now."
+msgstr ""
+
+#: bookwyrm/templates/feed/feed.html:55
+msgid "There aren't any activities right now! Try following a user to get started"
+msgstr ""
+
+#: bookwyrm/templates/feed/feed.html:56
+msgid "Alternatively, you can try enabling more status types"
+msgstr ""
+
+#: bookwyrm/templates/feed/goal_card.html:6
+#: bookwyrm/templates/feed/layout.html:14
+#: bookwyrm/templates/user/goal_form.html:6
+#, python-format
+msgid "%(year)s Reading Goal"
+msgstr "%(year)s 읽기 목표"
+
+#: bookwyrm/templates/feed/goal_card.html:18
+#, python-format
+msgid "You can set or change your reading goal any time from your profile page"
+msgstr ""
+
+#: bookwyrm/templates/feed/layout.html:4
+msgid "Updates"
+msgstr "업데이트"
+
+#: bookwyrm/templates/feed/suggested_books.html:6
+#: bookwyrm/templates/guided_tour/home.html:127
+#: bookwyrm/templates/layout.html:94
+msgid "Your Books"
+msgstr "내 도서"
+
+#: bookwyrm/templates/feed/suggested_books.html:10
+msgid "There are no books here right now! Try searching for a book to get started"
+msgstr ""
+
+#: bookwyrm/templates/feed/suggested_books.html:13
+msgid "Do you have book data from another service like GoodReads?"
+msgstr ""
+
+#: bookwyrm/templates/feed/suggested_books.html:16
+msgid "Import your reading history"
+msgstr "내가 읽은 내역 가져오기"
+
+#: bookwyrm/templates/feed/suggested_users.html:5
+#: bookwyrm/templates/get_started/users.html:6
+msgid "Who to follow"
+msgstr "팔로우할 만한 이"
+
+#: bookwyrm/templates/feed/suggested_users.html:9
+msgid "Don't show suggested users"
+msgstr "추천 이용자 보지 않음"
+
+#: bookwyrm/templates/feed/suggested_users.html:14
+msgid "View directory"
+msgstr "디렉터리 보기"
+
+#: bookwyrm/templates/feed/summary_card.html:21
+msgid "The end of the year is the best moment to take stock of all the books read during the last 12 months. How many pages have you read? Which book is your best-rated of the year? We compiled these stats, and more!"
+msgstr "연말은 지난 12개월 동안 읽은 모든 책을 점검하기에 가장 좋은 시기입니다. 몇 쪽이나 읽었나요? 올해 가장 높은 평점을 준 책은 무엇인가요? 이러한 통계 등을 정리해 보았습니다!"
+
+#: bookwyrm/templates/feed/summary_card.html:26
+#, python-format
+msgid "Discover your stats for %(year)s!"
+msgstr ""
+
+#: bookwyrm/templates/get_started/book_preview.html:6
+#, python-format
+msgid "Have you read %(book_title)s?"
+msgstr "%(book_title)s 읽어보았나요?"
+
+#: bookwyrm/templates/get_started/book_preview.html:7
+msgid "Add to your books"
+msgstr "내 도서 추가"
+
+#: bookwyrm/templates/get_started/book_preview.html:10
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templatetags/shelf_tags.py:14
+msgid "To Read"
+msgstr "읽을 것"
+
+#: bookwyrm/templates/get_started/book_preview.html:11
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templatetags/shelf_tags.py:15
+msgid "Currently Reading"
+msgstr "읽는 중"
+
+#: bookwyrm/templates/get_started/book_preview.html:12
+#: bookwyrm/templates/shelf/shelf.html:90
+#: bookwyrm/templates/snippets/shelf_selector.html:46
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
+#: bookwyrm/templates/user/user.html:39 bookwyrm/templatetags/shelf_tags.py:16
+msgid "Read"
+msgstr "읽음"
+
+#: bookwyrm/templates/get_started/book_preview.html:13
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templatetags/shelf_tags.py:17
+msgid "Stopped Reading"
+msgstr "읽다 멈춘 것"
+
+#: bookwyrm/templates/get_started/books.html:6
+msgid "What are you reading?"
+msgstr "무엇을 읽고 있나요?"
+
+#: bookwyrm/templates/get_started/books.html:9
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
+msgid "Search for a book"
+msgstr "도서 검색"
+
+#: bookwyrm/templates/get_started/books.html:11
+#, python-format
+msgid "No books found for \"%(query)s\""
+msgstr ""
+
+#: bookwyrm/templates/get_started/books.html:11
+#, python-format
+msgid "You can add books when you start using %(site_name)s."
+msgstr ""
+
+#: bookwyrm/templates/get_started/books.html:16
+#: bookwyrm/templates/get_started/books.html:17
+#: bookwyrm/templates/get_started/users.html:18
+#: bookwyrm/templates/get_started/users.html:19
+#: bookwyrm/templates/groups/members.html:15
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/search/layout.html:5
+#: bookwyrm/templates/search/layout.html:10
+#: bookwyrm/templates/search/layout.html:32
+msgid "Search"
+msgstr "검색"
+
+#: bookwyrm/templates/get_started/books.html:27
+msgid "Suggested Books"
+msgstr "추천 도서"
+
+#: bookwyrm/templates/get_started/books.html:33
+msgid "Search results"
+msgstr "검색 결과"
+
+#: bookwyrm/templates/get_started/books.html:46
+#, python-format
+msgid "Popular on %(site_name)s"
+msgstr ""
+
+#: bookwyrm/templates/get_started/books.html:58
+#: bookwyrm/templates/lists/list.html:230
+msgid "No books found"
+msgstr "도서를 찾을 수 없음"
+
+#: bookwyrm/templates/get_started/books.html:63
+#: bookwyrm/templates/get_started/profile.html:64
+msgid "Save & continue"
+msgstr "저장 & 계속하기"
+
+#: bookwyrm/templates/get_started/layout.html:5
+#: bookwyrm/templates/landing/layout.html:5
+msgid "Welcome"
+msgstr "환영"
+
+#: bookwyrm/templates/get_started/layout.html:24
+msgid "These are some first steps to get you started."
+msgstr ""
+
+#: bookwyrm/templates/get_started/layout.html:38
+#: bookwyrm/templates/get_started/profile.html:6
+msgid "Create your profile"
+msgstr "내 프로필 만들기"
+
+#: bookwyrm/templates/get_started/layout.html:42
+msgid "Add books"
+msgstr "도서 추가"
+
+#: bookwyrm/templates/get_started/layout.html:46
+msgid "Find friends"
+msgstr "친구 찾기"
+
+#: bookwyrm/templates/get_started/layout.html:52
+msgid "Skip this step"
+msgstr "이 과정을 생략"
+
+#: bookwyrm/templates/get_started/layout.html:56
+#: bookwyrm/templates/guided_tour/group.html:101
+msgid "Finish"
+msgstr "끝내기"
+
+#: bookwyrm/templates/get_started/profile.html:15
+#: bookwyrm/templates/preferences/edit_user.html:41
+msgid "Display name:"
+msgstr "나타낼 이름:"
+
+#: bookwyrm/templates/get_started/profile.html:29
+#: bookwyrm/templates/preferences/edit_user.html:47
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:49
+msgid "Summary:"
+msgstr "요약:"
+
+#: bookwyrm/templates/get_started/profile.html:34
+msgid "A little bit about you"
+msgstr ""
+
+#: bookwyrm/templates/get_started/profile.html:43
+#: bookwyrm/templates/preferences/edit_user.html:27
+msgid "Avatar:"
+msgstr "아바타:"
+
+#: bookwyrm/templates/get_started/profile.html:52
+msgid "Manually approve followers:"
+msgstr "수동으로 팔로워 승인:"
+
+#: bookwyrm/templates/get_started/profile.html:58
+msgid "Show this account in suggested users:"
+msgstr "이 계정을 추천 이용자에 보이기:"
+
+#: bookwyrm/templates/get_started/profile.html:62
+msgid "Your account will show up in the directory, and may be recommended to other BookWyrm users."
+msgstr ""
+
+#: bookwyrm/templates/get_started/users.html:8
+msgid "You can follow users on other BookWyrm instances and federated services like Mastodon."
+msgstr ""
+
+#: bookwyrm/templates/get_started/users.html:11
+msgid "Search for a user"
+msgstr "이용자 검색"
+
+#: bookwyrm/templates/get_started/users.html:13
+#, python-format
+msgid "No users found for \"%(query)s\""
+msgstr ""
+
+#: bookwyrm/templates/groups/create_form.html:5
+#: bookwyrm/templates/guided_tour/user_groups.html:32
+#: bookwyrm/templates/user/groups.html:22
+msgid "Create group"
+msgstr "그룹 만들기"
+
+#: bookwyrm/templates/groups/created_text.html:4
+#, python-format
+msgid "Managed by %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/groups/delete_group_modal.html:4
+msgid "Delete this group?"
+msgstr "이 그룹을 없앨까요?"
+
+#: bookwyrm/templates/groups/delete_group_modal.html:7
+#: bookwyrm/templates/lists/delete_list_modal.html:7
+#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:12
+#: bookwyrm/templates/settings/imports/complete_import_modal.html:7
+msgid "This action cannot be un-done"
+msgstr "이 행동은 되돌릴 수 없어요."
+
+#: bookwyrm/templates/groups/delete_group_modal.html:17
+#: bookwyrm/templates/lists/delete_list_modal.html:19
+#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:29
+#: bookwyrm/templates/settings/announcements/announcement.html:23
+#: bookwyrm/templates/settings/announcements/announcements.html:56
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:49
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:36
+#: bookwyrm/templates/snippets/follow_request_buttons.html:12
+#: bookwyrm/templates/snippets/join_invitation_buttons.html:14
+msgid "Delete"
+msgstr "지우기"
+
+#: bookwyrm/templates/groups/edit_form.html:5
+msgid "Edit Group"
+msgstr "그룹 편집"
+
+#: bookwyrm/templates/groups/form.html:8
+msgid "Group Name:"
+msgstr "그룹 이름:"
+
+#: bookwyrm/templates/groups/form.html:12
+msgid "Group Description:"
+msgstr "그룹 설명:"
+
+#: bookwyrm/templates/groups/form.html:21
+msgid "Delete group"
+msgstr "그룹 지우기"
+
+#: bookwyrm/templates/groups/group.html:21
+msgid "Members of this group can create group-curated lists."
+msgstr "이 그룹의 구성원은 그룹선정목록을 만들 수 있습니다."
+
+#: bookwyrm/templates/groups/group.html:26
+#: bookwyrm/templates/lists/create_form.html:5
+#: bookwyrm/templates/lists/lists.html:20
+msgid "Create List"
+msgstr "목록 만들기"
+
+#: bookwyrm/templates/groups/group.html:39
+msgid "This group has no lists"
+msgstr "이 그룹에는 목록이 없습니다."
+
+#: bookwyrm/templates/groups/layout.html:17
+msgid "Edit group"
+msgstr "그룹 편집"
+
+#: bookwyrm/templates/groups/members.html:11
+msgid "Search to add a user"
+msgstr "검색하여 이용자 추가하기"
+
+#: bookwyrm/templates/groups/members.html:32
+msgid "Leave group"
+msgstr "그룹 떠나기"
+
+#: bookwyrm/templates/groups/members.html:54
+#: bookwyrm/templates/groups/suggested_users.html:35
+#: bookwyrm/templates/snippets/suggested_users.html:31
+#: bookwyrm/templates/user/user_preview.html:39
+#: bookwyrm/templates/user/user_preview.html:47
+msgid "Follows you"
+msgstr "나를 팔로우"
+
+#: bookwyrm/templates/groups/suggested_users.html:7
+msgid "Add new members!"
+msgstr "새 구성원 추가하기!"
+
+#: bookwyrm/templates/groups/suggested_users.html:20
+#: bookwyrm/templates/snippets/suggested_users.html:16
+#, python-format
+msgid "%(mutuals)s follower you follow"
+msgid_plural "%(mutuals)s followers you follow"
+msgstr[0] ""
+
+#: bookwyrm/templates/groups/suggested_users.html:27
+#: bookwyrm/templates/snippets/suggested_users.html:23
+#, python-format
+msgid "%(shared_books)s book on your shelves"
+msgid_plural "%(shared_books)s books on your shelves"
+msgstr[0] ""
+
+#: bookwyrm/templates/groups/suggested_users.html:43
+#, python-format
+msgid "No potential members found for \"%(user_query)s\""
+msgstr ""
+
+#: bookwyrm/templates/groups/user_groups.html:15
+msgid "Manager"
+msgstr "매니저"
+
+#: bookwyrm/templates/groups/user_groups.html:35
+msgid "No groups found."
+msgstr "그룹이 없습니다."
+
+#: bookwyrm/templates/guided_tour/book.html:10
+msgid "This is home page of a book. Let's see what you can do while you're here!"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:11
+msgid "Book page"
+msgstr "책 페이지"
+
+#: bookwyrm/templates/guided_tour/book.html:19
+#: bookwyrm/templates/guided_tour/group.html:19
+#: bookwyrm/templates/guided_tour/lists.html:22
+#: bookwyrm/templates/guided_tour/search.html:29
+#: bookwyrm/templates/guided_tour/search.html:56
+#: bookwyrm/templates/guided_tour/user_books.html:19
+#: bookwyrm/templates/guided_tour/user_groups.html:19
+#: bookwyrm/templates/guided_tour/user_profile.html:19
+msgid "End Tour"
+msgstr "투어 끝내기"
+
+#: bookwyrm/templates/guided_tour/book.html:26
+#: bookwyrm/templates/guided_tour/book.html:50
+#: bookwyrm/templates/guided_tour/book.html:74
+#: bookwyrm/templates/guided_tour/book.html:97
+#: bookwyrm/templates/guided_tour/book.html:122
+#: bookwyrm/templates/guided_tour/book.html:146
+#: bookwyrm/templates/guided_tour/book.html:170
+#: bookwyrm/templates/guided_tour/book.html:194
+#: bookwyrm/templates/guided_tour/book.html:219
+#: bookwyrm/templates/guided_tour/book.html:243
+#: bookwyrm/templates/guided_tour/book.html:268
+#: bookwyrm/templates/guided_tour/book.html:274
+#: bookwyrm/templates/guided_tour/group.html:26
+#: bookwyrm/templates/guided_tour/group.html:49
+#: bookwyrm/templates/guided_tour/group.html:72
+#: bookwyrm/templates/guided_tour/group.html:95
+#: bookwyrm/templates/guided_tour/home.html:74
+#: bookwyrm/templates/guided_tour/home.html:97
+#: bookwyrm/templates/guided_tour/home.html:121
+#: bookwyrm/templates/guided_tour/home.html:146
+#: bookwyrm/templates/guided_tour/home.html:171
+#: bookwyrm/templates/guided_tour/home.html:195
+#: bookwyrm/templates/guided_tour/lists.html:29
+#: bookwyrm/templates/guided_tour/lists.html:53
+#: bookwyrm/templates/guided_tour/lists.html:76
+#: bookwyrm/templates/guided_tour/lists.html:100
+#: bookwyrm/templates/guided_tour/lists.html:123
+#: bookwyrm/templates/guided_tour/search.html:36
+#: bookwyrm/templates/guided_tour/search.html:63
+#: bookwyrm/templates/guided_tour/search.html:89
+#: bookwyrm/templates/guided_tour/search.html:116
+#: bookwyrm/templates/guided_tour/search.html:140
+#: bookwyrm/templates/guided_tour/user_books.html:26
+#: bookwyrm/templates/guided_tour/user_books.html:50
+#: bookwyrm/templates/guided_tour/user_books.html:73
+#: bookwyrm/templates/guided_tour/user_books.html:96
+#: bookwyrm/templates/guided_tour/user_groups.html:26
+#: bookwyrm/templates/guided_tour/user_groups.html:50
+#: bookwyrm/templates/guided_tour/user_groups.html:73
+#: bookwyrm/templates/guided_tour/user_groups.html:97
+#: bookwyrm/templates/guided_tour/user_profile.html:26
+#: bookwyrm/templates/guided_tour/user_profile.html:49
+#: bookwyrm/templates/guided_tour/user_profile.html:72
+#: bookwyrm/templates/guided_tour/user_profile.html:95
+#: bookwyrm/templates/guided_tour/user_profile.html:118
+#: bookwyrm/templates/snippets/pagination.html:30
+msgid "Next"
+msgstr "다음"
+
+#: bookwyrm/templates/guided_tour/book.html:31
+msgid "This is where you can set a reading status for this book. You can press the button to move to the next stage, or use the drop down button to select the reading status you want to set."
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:32
+msgid "Reading status"
+msgstr "읽은 기록"
+
+#: bookwyrm/templates/guided_tour/book.html:55
+msgid "You can also manually add reading dates here. Unlike changing the reading status using the previous method, adding dates manually will not automatically add them to your Read or Reading shelves."
+msgstr "여기에서 읽은 날짜를 직접 추가할 수도 있습니다. 앞서 설명한 방법으로 읽기 상태를 변경하는 것과 달리 수동으로 날짜를 추가해도 읽음 또는 읽는 중 책꽂이에 자동으로 추가되지 않습니다."
+
+#: bookwyrm/templates/guided_tour/book.html:55
+msgid "Got a favourite you re-read every year? We've got you covered - you can add multiple read dates for the same book 😀"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:79
+msgid "There can be multiple editions of a book, in various formats or languages. You can choose which edition you want to use."
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:80
+msgid "Other editions"
+msgstr "그 밖의 판"
+
+#: bookwyrm/templates/guided_tour/book.html:102
+msgid "You can post a review, comment, or quote here."
+msgstr "이곳에서 서평, 해설, 인용을 게시할 수 있어요."
+
+#: bookwyrm/templates/guided_tour/book.html:103
+msgid "Share your thoughts"
+msgstr "함께 사유하기"
+
+#: bookwyrm/templates/guided_tour/book.html:127
+msgid "If you have read this book you can post a review including an optional star rating"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:128
+msgid "Post a review"
+msgstr "서펑 게시하기"
+
+#: bookwyrm/templates/guided_tour/book.html:151
+msgid "You can share your thoughts on this book generally with a simple comment"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:152
+msgid "Post a comment"
+msgstr "코멘트 발행하기"
+
+#: bookwyrm/templates/guided_tour/book.html:175
+msgid "Just read some perfect prose? Let the world know by sharing a quote!"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:176
+msgid "Share a quote"
+msgstr "인용 공유하기"
+
+#: bookwyrm/templates/guided_tour/book.html:199
+msgid "If your review or comment might ruin the book for someone who hasn't read it yet, you can hide your post behind a spoiler alert"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:200
+msgid "Spoiler alerts"
+msgstr "스포일러 경고"
+
+#: bookwyrm/templates/guided_tour/book.html:224
+msgid "Choose who can see your post here. Post privacy can be Public (everyone can see), Unlisted (everyone can see, but it doesn't appear in public feeds or discovery pages), Followers (only your followers can see), or Private (only you can see)"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:225
+#: bookwyrm/templates/snippets/privacy_select.html:6
+#: bookwyrm/templates/snippets/privacy_select_no_followers.html:6
+msgid "Post privacy"
+msgstr "게시물 개인정보처리"
+
+#: bookwyrm/templates/guided_tour/book.html:248
+msgid "Some ebooks can be downloaded for free from external sources. They will be shown here."
+msgstr "어떤 전자책은 외부 출처에서 무료로 내려받을 수 있어요. 여기에 나타납니다."
+
+#: bookwyrm/templates/guided_tour/book.html:249
+msgid "Download links"
+msgstr "내려받기 링크"
+
+#: bookwyrm/templates/guided_tour/book.html:273
+msgid "Continue the tour by selecting Your books from the drop down menu."
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/book.html:296
+#: bookwyrm/templates/guided_tour/home.html:50
+#: bookwyrm/templates/guided_tour/home.html:218
+#: bookwyrm/templates/guided_tour/search.html:161
+#: bookwyrm/templates/guided_tour/user_books.html:124
+#: bookwyrm/templates/guided_tour/user_groups.html:116
+#: bookwyrm/templates/guided_tour/user_profile.html:141
+msgid "Ok"
+msgstr "알겠어요"
+
+#: bookwyrm/templates/guided_tour/group.html:10
+msgid "Welcome to the page for your group! This is where you can add and remove users, create user-curated lists, and edit the group details."
+msgstr "그룹 페이지에 방문하셨습니다! 이 곳에서는 이용자를 더하거나 뺄 수 있고, 이용자 선정 목록을 만들고, 그룹 세부사항도 변경할 수 있습니다."
+
+#: bookwyrm/templates/guided_tour/group.html:11
+msgid "Your group"
+msgstr "내 그룹"
+
+#: bookwyrm/templates/guided_tour/group.html:31
+msgid "Use this search box to find users to join your group. Currently users must be members of the same Bookwyrm instance and be invited by the group owner."
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/group.html:32
+msgid "Find users"
+msgstr "이용자 찾기"
+
+#: bookwyrm/templates/guided_tour/group.html:54
+msgid "Your group members will appear here. The group owner is marked with a star symbol."
+msgstr "그룹 구성원이 여기에 표시됩니다. 그룹 소유자에게는 별 기호가 표시됩니다."
+
+#: bookwyrm/templates/guided_tour/group.html:55
+msgid "Group members"
+msgstr "그룹 구성원"
+
+#: bookwyrm/templates/guided_tour/group.html:77
+msgid "As well as creating lists from the Lists page, you can create a group-curated list here on the group's homepage. Any member of the group can create a list curated by group members."
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/group.html:78
+msgid "Group lists"
+msgstr "그룹 목록"
+
+#: bookwyrm/templates/guided_tour/group.html:100
+msgid "Congratulations, you've finished the tour! Now you know the basics, but there is lots more to explore on your own. Happy reading!"
+msgstr ""
+
+#: bookwyrm/templates/guided_tour/group.html:115
+msgid "End tour"
+msgstr "투어 끝내기"
+
+#: bookwyrm/templates/guided_tour/home.html:16
+msgid "Welcome to Bookwyrm!.tar.gz
."
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:58
+msgid "Step 2:"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:60
+msgid "Deselect any checkboxes for data you do not wish to include in your import."
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:71
+#: bookwyrm/templates/shelf/shelf.html:26
+#: bookwyrm/templates/user/relationships/followers.html:18
+#: bookwyrm/templates/user/relationships/following.html:18
+msgid "User profile"
+msgstr "이용자 프로필"
+
+#: bookwyrm/templates/import/import_user.html:74
+msgid "Overwrites display name, summary, and avatar"
+msgstr "나타낼 이름과 요약, 아바타를 덮어쓰기"
+
+#: bookwyrm/templates/import/import_user.html:80
+msgid "User settings"
+msgstr "이용자 설정"
+
+#: bookwyrm/templates/import/import_user.html:83
+msgid "Overwrites:"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:86
+msgid "Whether manual approval is required for other users to follow your account"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:89
+msgid "Whether following/followers are shown on your profile"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:92
+msgid "Whether your reading goal is shown on your profile"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:95
+msgid "Whether you see user follow suggestions"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:98
+msgid "Whether your account is suggested to others"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:101
+msgid "Your timezone"
+msgstr "내 시간대"
+
+#: bookwyrm/templates/import/import_user.html:104
+msgid "Your default post privacy setting"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:112
+msgid "Followers and following"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:116
+msgid "User blocks"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:123
+msgid "Reading goals"
+msgstr "읽기 목표"
+
+#: bookwyrm/templates/import/import_user.html:126
+msgid "Overwrites reading goals for all years listed in the import file"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:130
+msgid "Shelves"
+msgstr "책꽂이"
+
+#: bookwyrm/templates/import/import_user.html:133
+msgid "Reading history"
+msgstr "읽은 내역"
+
+#: bookwyrm/templates/import/import_user.html:136
+msgid "Book reviews"
+msgstr "책 평가"
+
+#: bookwyrm/templates/import/import_user.html:142
+msgid "Comments about books"
+msgstr ""
+
+#: bookwyrm/templates/import/import_user.html:145
+msgid "Book lists"
+msgstr "책 목록"
+
+#: bookwyrm/templates/import/import_user.html:148
+msgid "Saved lists"
+msgstr ""
+
+#: bookwyrm/templates/import/manual_review.html:5
+#: bookwyrm/templates/import/troubleshoot.html:4
+msgid "Import Troubleshooting"
+msgstr "가져오기 문제해결"
+
+#: bookwyrm/templates/import/manual_review.html:21
+msgid "Approving a suggestion will permanently add the suggested book to your shelves and associate your reading dates, reviews, and ratings with that book."
+msgstr ""
+
+#: bookwyrm/templates/import/manual_review.html:58
+#: bookwyrm/templates/lists/curate.html:71
+#: bookwyrm/templates/settings/link_domains/link_domains.html:76
+msgid "Approve"
+msgstr "승인하기"
+
+#: bookwyrm/templates/import/manual_review.html:66
+msgid "Reject"
+msgstr "거절"
+
+#: bookwyrm/templates/import/troubleshoot.html:7
+#: bookwyrm/templates/settings/imports/imports.html:171
+msgid "Failed items"
+msgstr "실패한 항목"
+
+#: bookwyrm/templates/import/troubleshoot.html:12
+msgid "Troubleshooting"
+msgstr "문제해결"
+
+#: bookwyrm/templates/import/troubleshoot.html:20
+msgid "Re-trying an import can fix missing items in cases such as:"
+msgstr "가져오기를 다시 시도하면 다음의 경우에 누락된 항목이 수정될 수 있습니다."
+
+#: bookwyrm/templates/import/troubleshoot.html:23
+msgid "The book has been added to the instance since this import"
+msgstr "이 가져오기 이후 책이 서버에 추가된 경우."
+
+#: bookwyrm/templates/import/troubleshoot.html:24
+msgid "A transient error or timeout caused the external data source to be unavailable."
+msgstr "일시적인 오류 또는 시간 초과로 인해 외부 데이터 소스를 사용할 수 없었던 경우."
+
+#: bookwyrm/templates/import/troubleshoot.html:25
+msgid "BookWyrm has been updated since this import with a bug fix"
+msgstr "이 가져오기 이후 BookWyrm이 버그 수정과 함께 업데이트된 경우."
+
+#: bookwyrm/templates/import/troubleshoot.html:28
+msgid "Contact your admin or open an issue if you are seeing unexpected failed items."
+msgstr "예상치 못한 실패 항목이 표시되는 경우에는 관리자에게 문의하거나 이슈를 열어주세요."
+
+#: bookwyrm/templates/landing/invite.html:4
+#: bookwyrm/templates/landing/invite.html:8
+#: bookwyrm/templates/landing/login.html:48
+#: bookwyrm/templates/landing/reactivate.html:41
+msgid "Create an Account"
+msgstr "계정 만들기"
+
+#: bookwyrm/templates/landing/invite.html:22
+msgid "Sorry! This invite code is no longer valid."
+msgstr ""
+
+#: bookwyrm/templates/landing/landing.html:9
+msgid "Recent Books"
+msgstr "최근 도서"
+
+#: bookwyrm/templates/landing/layout.html:17
+msgid "Decentralized"
+msgstr "탈중앙화"
+
+#: bookwyrm/templates/landing/layout.html:23
+msgid "Friendly"
+msgstr "친근함"
+
+#: bookwyrm/templates/landing/layout.html:29
+msgid "Anti-Corporate"
+msgstr "반기업"
+
+#: bookwyrm/templates/landing/layout.html:46
+#, python-format
+msgid "Join %(name)s"
+msgstr "%(name)s 서버에서 참여하기"
+
+#: bookwyrm/templates/landing/layout.html:48
+msgid "Request an Invitation"
+msgstr "초대장 요청하기"
+
+#: bookwyrm/templates/landing/layout.html:50
+#, python-format
+msgid "%(name)s registration is closed"
+msgstr ""
+
+#: bookwyrm/templates/landing/layout.html:61
+msgid "Thank you! Your request has been received."
+msgstr ""
+
+#: bookwyrm/templates/landing/layout.html:90
+msgid "Your Account"
+msgstr "내 계정"
+
+#: bookwyrm/templates/landing/login.html:4
+msgid "Login"
+msgstr "로그인"
+
+#: bookwyrm/templates/landing/login.html:7
+#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:142
+#: bookwyrm/templates/ostatus/error.html:37
+msgid "Log in"
+msgstr "로그인"
+
+#: bookwyrm/templates/landing/login.html:15
+msgid "Success! Email address confirmed."
+msgstr "성공! 이메일 주소 확인을 마쳤습니다."
+
+#: bookwyrm/templates/landing/login.html:21
+#: bookwyrm/templates/landing/reactivate.html:17
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/ostatus/error.html:28
+#: bookwyrm/templates/snippets/register_form.html:4
+msgid "Username:"
+msgstr "이용자명:"
+
+#: bookwyrm/templates/landing/login.html:27
+#: bookwyrm/templates/landing/password_reset.html:26
+#: bookwyrm/templates/landing/reactivate.html:23
+#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:32
+#: bookwyrm/templates/preferences/2fa.html:91
+#: bookwyrm/templates/snippets/register_form.html:45
+msgid "Password:"
+msgstr "암호:"
+
+#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:139
+#: bookwyrm/templates/ostatus/error.html:34
+msgid "Forgot your password?"
+msgstr "암호를 잊었나요?"
+
+#: bookwyrm/templates/landing/login.html:61
+#: bookwyrm/templates/landing/reactivate.html:54
+msgid "More about this site"
+msgstr "이 사이트 더 알아보기"
+
+#: bookwyrm/templates/landing/password_reset.html:43
+#: bookwyrm/templates/preferences/change_password.html:33
+#: bookwyrm/templates/preferences/delete_user.html:35
+msgid "Confirm password:"
+msgstr "암호 확인:"
+
+#: bookwyrm/templates/landing/password_reset_request.html:14
+#, python-format
+msgid "A password reset link will be sent to %(email)s if there is an account using that email address."
+msgstr ""
+
+#: bookwyrm/templates/landing/password_reset_request.html:20
+msgid "A link to reset your password will be sent to your email address"
+msgstr ""
+
+#: bookwyrm/templates/landing/password_reset_request.html:34
+msgid "Reset password"
+msgstr "암호 재설정"
+
+#: bookwyrm/templates/landing/reactivate.html:4
+#: bookwyrm/templates/landing/reactivate.html:7
+msgid "Reactivate Account"
+msgstr "계정 휴면 해제하기"
+
+#: bookwyrm/templates/landing/reactivate.html:32
+msgid "Reactivate account"
+msgstr "계정 휴면 해제하기"
+
+#: bookwyrm/templates/layout.html:13
+#, python-format
+msgid "%(site_name)s search"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:39
+msgid "Search for a book, user, or list"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55
+msgid "Scan Barcode"
+msgstr "바코드 스캔하기"
+
+#: bookwyrm/templates/layout.html:69
+msgid "Main navigation menu"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33
+msgid "password"
+msgstr "암호"
+
+#: bookwyrm/templates/layout.html:136
+msgid "Show/Hide password"
+msgstr "암호 보이기/숨기기"
+
+#: bookwyrm/templates/layout.html:150
+msgid "Join"
+msgstr "참여하기"
+
+#: bookwyrm/templates/layout.html:196
+msgid "Successfully posted status"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:197
+msgid "Error posting status"
+msgstr "기록을 게시하는 중 오류가 발생했습니다."
+
+#: bookwyrm/templates/lists/add_item_modal.html:8
+#, python-format
+msgid "Add \"%(title)s\" to this list"
+msgstr ""
+
+#: bookwyrm/templates/lists/add_item_modal.html:12
+#, python-format
+msgid "Suggest \"%(title)s\" for this list"
+msgstr ""
+
+#: bookwyrm/templates/lists/add_item_modal.html:41
+#: bookwyrm/templates/lists/list.html:257
+msgid "Suggest"
+msgstr "제안사항"
+
+#: bookwyrm/templates/lists/bookmark_button.html:30
+msgid "Un-save"
+msgstr ""
+
+#: bookwyrm/templates/lists/created_text.html:5
+#, python-format
+msgid "Created by %(username)s and managed by %(groupname)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/created_text.html:7
+#, python-format
+msgid "Created and curated by %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/created_text.html:9
+#, python-format
+msgid "Created by %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/curate.html:12
+msgid "Curate"
+msgstr ""
+
+#: bookwyrm/templates/lists/curate.html:21
+msgid "Pending Books"
+msgstr ""
+
+#: bookwyrm/templates/lists/curate.html:24
+msgid "You're all set!"
+msgstr ""
+
+#: bookwyrm/templates/lists/curate.html:45
+#: bookwyrm/templates/lists/list.html:93
+#, python-format
+msgid "%(username)s says:"
+msgstr ""
+
+#: bookwyrm/templates/lists/curate.html:55
+msgid "Suggested by"
+msgstr ""
+
+#: bookwyrm/templates/lists/curate.html:77
+msgid "Discard"
+msgstr "버리기"
+
+#: bookwyrm/templates/lists/delete_list_modal.html:4
+msgid "Delete this list?"
+msgstr "이 목록을 지울까요?"
+
+#: bookwyrm/templates/lists/edit_form.html:5
+#: bookwyrm/templates/lists/layout.html:23
+msgid "Edit List"
+msgstr "목록 편집"
+
+#: bookwyrm/templates/lists/embed-list.html:8
+#, python-format
+msgid "%(list_name)s, a list by %(owner)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/embed-list.html:20
+#, python-format
+msgid "on %(site_name)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/embed-list.html:29
+msgid "This list is currently empty"
+msgstr ""
+
+#: bookwyrm/templates/lists/form.html:19
+msgid "List curation:"
+msgstr "목록 큐레이션:"
+
+#: bookwyrm/templates/lists/form.html:31
+msgid "Closed"
+msgstr "닫힘"
+
+#: bookwyrm/templates/lists/form.html:34
+msgid "Only you can add and remove books to this list"
+msgstr "작성자만 이 목록에 책을 추가하고 제거할 수 있습니다."
+
+#: bookwyrm/templates/lists/form.html:48
+msgid "Curated"
+msgstr "선정"
+
+#: bookwyrm/templates/lists/form.html:51
+msgid "Anyone can suggest books, subject to your approval"
+msgstr "누구나 책을 제안할 수 있으며, 승인을 받아야 합니다."
+
+#: bookwyrm/templates/lists/form.html:65
+msgctxt "curation type"
+msgid "Open"
+msgstr "열기"
+
+#: bookwyrm/templates/lists/form.html:68
+msgid "Anyone can add books to this list"
+msgstr "누구나 이 목록에 책을 추가할 수 있습니다."
+
+#: bookwyrm/templates/lists/form.html:82
+msgid "Group"
+msgstr "그룹"
+
+#: bookwyrm/templates/lists/form.html:85
+msgid "Group members can add to and remove from this list"
+msgstr "그룹 구성원이 이 목록에 더하거나 뺄 수 있습니다."
+
+#: bookwyrm/templates/lists/form.html:90
+msgid "Select Group"
+msgstr "그룹 선택하기"
+
+#: bookwyrm/templates/lists/form.html:94
+msgid "Select a group"
+msgstr ""
+
+#: bookwyrm/templates/lists/form.html:105
+msgid "You don't have any Groups yet!"
+msgstr ""
+
+#: bookwyrm/templates/lists/form.html:107
+msgid "Create a Group"
+msgstr ""
+
+#: bookwyrm/templates/lists/form.html:121
+msgid "Delete list"
+msgstr ""
+
+#: bookwyrm/templates/lists/item_notes_field.html:7
+#: bookwyrm/templates/settings/federation/edit_instance.html:86
+msgid "Notes:"
+msgstr ""
+
+#: bookwyrm/templates/lists/item_notes_field.html:19
+msgid "An optional note that will be displayed with the book."
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:37
+msgid "That book is already on this list."
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:45
+msgid "You successfully suggested a book for this list!"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:47
+msgid "You successfully added a book to this list!"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:54
+msgid "This list is currently empty."
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:104
+msgid "Edit notes"
+msgstr "노트 편집"
+
+#: bookwyrm/templates/lists/list.html:119
+msgid "Add notes"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:131
+#, python-format
+msgid "Added by %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:146
+msgid "List position"
+msgstr "목록 위치"
+
+#: bookwyrm/templates/lists/list.html:152
+#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:23
+msgid "Set"
+msgstr "설정"
+
+#: bookwyrm/templates/lists/list.html:167
+#: bookwyrm/templates/snippets/remove_follower_button.html:4
+#: bookwyrm/templates/snippets/remove_from_group_button.html:20
+msgid "Remove"
+msgstr "제거"
+
+#: bookwyrm/templates/lists/list.html:181
+#: bookwyrm/templates/lists/list.html:198
+msgid "Sort List"
+msgstr "목록 정렬"
+
+#: bookwyrm/templates/lists/list.html:191
+msgid "Direction"
+msgstr "방향"
+
+#: bookwyrm/templates/lists/list.html:205
+msgid "Add Books"
+msgstr "책 추가하기"
+
+#: bookwyrm/templates/lists/list.html:207
+msgid "Suggest Books"
+msgstr "읽을 책 제안"
+
+#: bookwyrm/templates/lists/list.html:218
+msgid "search"
+msgstr "검색"
+
+#: bookwyrm/templates/lists/list.html:224
+msgid "Clear search"
+msgstr "검색 초기화"
+
+#: bookwyrm/templates/lists/list.html:229
+#, python-format
+msgid "No books found matching the query \"%(query)s\""
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:268
+msgid "Embed this list on a website"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:276
+msgid "Copy embed code"
+msgstr ""
+
+#: bookwyrm/templates/lists/list.html:278
+#, python-format
+msgid "%(list_name)s, a list by %(owner)s on %(site_name)s"
+msgstr ""
+
+#: bookwyrm/templates/lists/list_items.html:15
+msgid "Saved"
+msgstr "저장함"
+
+#: bookwyrm/templates/lists/list_items.html:50
+msgid "No lists found."
+msgstr "목록이 없습니다."
+
+#: bookwyrm/templates/lists/lists.html:14 bookwyrm/templates/user/lists.html:14
+msgid "Your Lists"
+msgstr "내 목록"
+
+#: bookwyrm/templates/lists/lists.html:36
+msgid "All Lists"
+msgstr "모든 목록"
+
+#: bookwyrm/templates/lists/lists.html:40
+msgid "Saved Lists"
+msgstr "저장한 목록"
+
+#: bookwyrm/templates/moved.html:27
+#, python-format
+msgid "You have moved your account to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:32
+msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
+msgstr ""
+
+#: bookwyrm/templates/moved.html:42
+msgid "Undo move"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
+msgid "Log out"
+msgstr "로그아웃"
+
+#: bookwyrm/templates/notifications/items/accept.html:18
+#, python-format
+msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/accept.html:26
+#, python-format
+msgid "%(related_user)s and %(second_user)s accepted your invitation to join group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/accept.html:36
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others accepted your invitation to join group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/add.html:33
+#, python-format
+msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/add.html:39
+#, python-format
+msgid "%(related_user)s suggested adding %(book_title)s to your list \"%(list_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/add.html:47
+#, python-format
+msgid "%(related_user)s added %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/add.html:54
+#, python-format
+msgid "%(related_user)s suggested adding %(book_title)s and %(second_book_title)s to your list \"%(list_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/add.html:66
+#, python-format
+msgid "%(related_user)s added a book to one of your lists"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/add.html:72
+#, python-format
+msgid "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\""
+msgid_plural "%(related_user)s added %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\""
+msgstr[0] ""
+
+#: bookwyrm/templates/notifications/items/add.html:88
+#, python-format
+msgid "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other book to your list \"%(list_name)s\""
+msgid_plural "%(related_user)s suggested adding %(book_title)s, %(second_book_title)s, and %(display_count)s other books to your list \"%(list_name)s\""
+msgstr[0] ""
+
+#: bookwyrm/templates/notifications/items/boost.html:21
+#, python-format
+msgid "%(related_user)s boosted your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:27
+#, python-format
+msgid "%(related_user)s and %(second_user)s boosted your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:36
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others boosted your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:44
+#, python-format
+msgid "%(related_user)s boosted your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:50
+#, python-format
+msgid "%(related_user)s and %(second_user)s boosted your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:59
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others boosted your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:67
+#, python-format
+msgid "%(related_user)s boosted your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:73
+#, python-format
+msgid "%(related_user)s and %(second_user)s boosted your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:82
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others boosted your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:90
+#, python-format
+msgid "%(related_user)s boosted your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:96
+#, python-format
+msgid "%(related_user)s and %(second_user)s boosted your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/boost.html:105
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others boosted your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:21
+#, python-format
+msgid "%(related_user)s liked your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:27
+#, python-format
+msgid "%(related_user)s and %(second_user)s liked your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:36
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others liked your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:44
+#, python-format
+msgid "%(related_user)s liked your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:50
+#, python-format
+msgid "%(related_user)s and %(second_user)s liked your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:59
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others liked your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:67
+#, python-format
+msgid "%(related_user)s liked your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:73
+#, python-format
+msgid "%(related_user)s and %(second_user)s liked your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:82
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others liked your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:90
+#, python-format
+msgid "%(related_user)s liked your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:96
+#, python-format
+msgid "%(related_user)s and %(second_user)s liked your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/fav.html:105
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others liked your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/follow.html:16
+#, python-format
+msgid "%(related_user)s followed you"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/follow.html:20
+#, python-format
+msgid "%(related_user)s and %(second_user)s followed you"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/follow.html:25
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others followed you"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/follow_request.html:15
+#, python-format
+msgid "%(related_user)s sent you a follow request"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/import.html:14
+#, python-format
+msgid "Your import completed."
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/invite.html:16
+#, python-format
+msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+
+#: bookwyrm/templates/notifications/items/join.html:16
+#, python-format
+msgid "has joined your group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/leave.html:18
+#, python-format
+msgid "%(related_user)s has left your group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/leave.html:26
+#, python-format
+msgid "%(related_user)s and %(second_user)s have left your group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/leave.html:36
+#, python-format
+msgid "%(related_user)s and %(other_user_display_count)s others have left your group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/link_domain.html:15
+#, python-format
+msgid "A new link domain needs review"
+msgid_plural "%(display_count)s new link domains need moderation"
+msgstr[0] "검토해야 할 새로운 link domain이 있습니다."
+
+#: bookwyrm/templates/notifications/items/mention.html:20
+#, python-format
+msgid "%(related_user)s mentioned you in a review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/mention.html:26
+#, python-format
+msgid "%(related_user)s mentioned you in a comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/mention.html:32
+#, python-format
+msgid "%(related_user)s mentioned you in a quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/mention.html:38
+#, python-format
+msgid "%(related_user)s mentioned you in a status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:18
+#, python-format
+msgid "%(related_user)s has moved to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:25
+#, python-format
+msgid "%(related_user)s has undone their move"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/remove.html:17
+#, python-format
+msgid "has been removed from your group \"%(group_name)s\""
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/remove.html:23
+#, python-format
+msgid "You have been removed from the \"%(group_name)s\" group"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/reply.html:21
+#, python-format
+msgid "%(related_user)s replied to your review of %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/reply.html:27
+#, python-format
+msgid "%(related_user)s replied to your comment on %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/reply.html:33
+#, python-format
+msgid "%(related_user)s replied to your quote from %(book_title)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/reply.html:39
+#, python-format
+msgid "%(related_user)s replied to your status"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/report.html:15
+#, python-format
+msgid "A new report needs moderation"
+msgid_plural "%(display_count)s new reports need moderation"
+msgstr[0] ""
+
+#: bookwyrm/templates/notifications/items/status_preview.html:4
+#: bookwyrm/templates/snippets/status/content_status.html:62
+msgid "Content warning"
+msgstr "내용 경고"
+
+#: bookwyrm/templates/notifications/items/update.html:16
+#, python-format
+msgid "has changed the privacy level for %(group_name)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/update.html:20
+#, python-format
+msgid "has changed the name of %(group_name)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/update.html:24
+#, python-format
+msgid "has changed the description of %(group_name)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/user_export.html:14
+#, python-format
+msgid "Your user export is ready."
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/user_import.html:14
+#, python-format
+msgid "Your user import is complete."
+msgstr ""
+
+#: bookwyrm/templates/notifications/notifications_page.html:19
+msgid "Delete notifications"
+msgstr ""
+
+#: bookwyrm/templates/notifications/notifications_page.html:31
+msgid "All"
+msgstr "모두"
+
+#: bookwyrm/templates/notifications/notifications_page.html:35
+msgid "Mentions"
+msgstr "멘션"
+
+#: bookwyrm/templates/notifications/notifications_page.html:47
+msgid "You're all caught up!"
+msgstr "모두 따라잡았습니다!"
+
+#: bookwyrm/templates/ostatus/error.html:7
+#, python-format
+msgid "%(account)s is not a valid username"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:8
+#: bookwyrm/templates/ostatus/error.html:13
+msgid "Check you have the correct username before trying again"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:12
+#, python-format
+msgid "%(account)s could not be found or %(remote_domain)s
does not support identity discovery"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:17
+#, python-format
+msgid "%(account)s was found but %(remote_domain)s
does not support 'remote follow'"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:18
+#, python-format
+msgid "Try searching for %(user)s on %(remote_domain)s
instead"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:46
+#, python-format
+msgid "Something went wrong trying to follow %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:47
+msgid "Check you have the correct username before trying again."
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:51
+#, python-format
+msgid "You have blocked %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:55
+#, python-format
+msgid "%(account)s has blocked you"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:59
+#, python-format
+msgid "You are already following %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:63
+#, python-format
+msgid "You have already requested to follow %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:6
+#, python-format
+msgid "Follow %(username)s on the fediverse"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:33
+#, python-format
+msgid "Follow %(username)s from another Fediverse account like BookWyrm, Mastodon, or Pleroma."
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:40
+msgid "User handle to follow from:"
+msgstr "팔로우하려는 이용자의 핸들:"
+
+#: bookwyrm/templates/ostatus/remote_follow.html:42
+msgid "Follow!"
+msgstr "팔로우!"
+
+#: bookwyrm/templates/ostatus/remote_follow_button.html:15
+msgid "Follow on Fediverse"
+msgstr "페디버스에서 팔로우하기"
+
+#: bookwyrm/templates/ostatus/remote_follow_button.html:19
+msgid "This link opens in a pop-up window"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:8
+#, python-format
+msgid "Log in to %(sitename)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:10
+#, python-format
+msgid "Error following from %(sitename)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:12
+#: bookwyrm/templates/ostatus/subscribe.html:22
+#, python-format
+msgid "Follow from %(sitename)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:18
+msgid "Uh oh..."
+msgstr "어랏…"
+
+#: bookwyrm/templates/ostatus/subscribe.html:20
+msgid "Let's log in first..."
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:51
+#, python-format
+msgid "Follow %(username)s"
+msgstr "%(username)s 팔로우"
+
+#: bookwyrm/templates/ostatus/success.html:28
+#, python-format
+msgid "You are now following %(display_name)s!"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:4
+#: bookwyrm/templates/preferences/2fa.html:7
+#: bookwyrm/templates/preferences/layout.html:24
+msgid "Two Factor Authentication"
+msgstr "2단계 인증"
+
+#: bookwyrm/templates/preferences/2fa.html:16
+msgid "Successfully updated 2FA settings"
+msgstr "2FA 설정 업데이트를 잘 마쳤습니다."
+
+#: bookwyrm/templates/preferences/2fa.html:24
+msgid "Write down or copy and paste these codes somewhere safe."
+msgstr "이 코드를 적어 두거나 안전한 곳에 복사하여 붙여넣습니다."
+
+#: bookwyrm/templates/preferences/2fa.html:25
+msgid "You must use them in order, and they will not be displayed again."
+msgstr "순서대로 써야 하고, 다시 표시되지 않습니다."
+
+#: bookwyrm/templates/preferences/2fa.html:35
+msgid "Two Factor Authentication is active on your account."
+msgstr "계정에 2단계 인증이 활성 상태입니다."
+
+#: bookwyrm/templates/preferences/2fa.html:36
+#: bookwyrm/templates/preferences/disable-2fa.html:4
+#: bookwyrm/templates/preferences/disable-2fa.html:7
+msgid "Disable 2FA"
+msgstr "2FA 비활성화하기"
+
+#: bookwyrm/templates/preferences/2fa.html:39
+msgid "You can generate backup codes to use in case you do not have access to your authentication app. If you generate new codes, any backup codes previously generated will no longer work."
+msgstr "인증 앱에 액세스할 수 없는 경우에 대비하여 백업 코드를 생성하여 이용할 수 있습니다. 새 코드를 생성하면 이전에 생성한 백업 코드는 더 이상 기능하지 않습니다."
+
+#: bookwyrm/templates/preferences/2fa.html:40
+msgid "Generate backup codes"
+msgstr "백업 코드 생성하기"
+
+#: bookwyrm/templates/preferences/2fa.html:45
+msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
+msgstr "인증 앱으로 QR 코드를 스캔한 다음 아래에 앱의 코드를 입력하여 앱이 설정되었는지 확인합니다."
+
+#: bookwyrm/templates/preferences/2fa.html:52
+msgid "Use setup key"
+msgstr "셋업 키 사용하기"
+
+#: bookwyrm/templates/preferences/2fa.html:58
+msgid "Account name:"
+msgstr "계정 이름:"
+
+#: bookwyrm/templates/preferences/2fa.html:65
+msgid "Code:"
+msgstr "코드:"
+
+#: bookwyrm/templates/preferences/2fa.html:73
+msgid "Enter the code from your app:"
+msgstr "2FA앱의 코드 기입:"
+
+#: bookwyrm/templates/preferences/2fa.html:83
+msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like Authy, Google Authenticator or Microsoft Authenticator each time you log in."
+msgstr "2단계 인증 (2FA)를 이용해 계정을 더욱 안전하게 보호할 수 있습니다. 로그인할 때마다 Authy나Google 인증기, Microsoft 인증기와 같은 휴대전화 앱을 이용해 일회용 코드를 입력해야 합니다."
+
+#: bookwyrm/templates/preferences/2fa.html:85
+msgid "Confirm your password to begin setting up 2FA."
+msgstr "2단계 인증 설정을 시작하려면 암호를 확인해 주시기 바랍니다."
+
+#: bookwyrm/templates/preferences/2fa.html:95
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
+msgid "Set up 2FA"
+msgstr "2FA 설정하기"
+
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr "계정 옮기기"
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr "별칭 만들기"
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr "다른 계정을 별칭으로 추가하기"
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr "암호 확인:"
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr "별칭"
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr "별칭 제거하기"
+
+#: bookwyrm/templates/preferences/blocks.html:4
+#: bookwyrm/templates/preferences/blocks.html:7
+#: bookwyrm/templates/preferences/layout.html:62
+msgid "Blocked Users"
+msgstr "차단한 이용자"
+
+#: bookwyrm/templates/preferences/blocks.html:12
+msgid "No users currently blocked."
+msgstr "차단한 이용자가 없습니다."
+
+#: bookwyrm/templates/preferences/change_password.html:4
+#: bookwyrm/templates/preferences/change_password.html:7
+#: bookwyrm/templates/preferences/change_password.html:37
+#: bookwyrm/templates/preferences/layout.html:20
+msgid "Change Password"
+msgstr "암호 변경"
+
+#: bookwyrm/templates/preferences/change_password.html:15
+msgid "Successfully changed password"
+msgstr "암호 변경 성공"
+
+#: bookwyrm/templates/preferences/change_password.html:22
+msgid "Current password:"
+msgstr "현재 암호:"
+
+#: bookwyrm/templates/preferences/change_password.html:28
+msgid "New password:"
+msgstr "새 암호:"
+
+#: bookwyrm/templates/preferences/delete_user.html:4
+#: bookwyrm/templates/preferences/delete_user.html:7
+#: bookwyrm/templates/preferences/delete_user.html:40
+#: bookwyrm/templates/preferences/layout.html:36
+#: bookwyrm/templates/settings/users/delete_user_form.html:22
+msgid "Delete Account"
+msgstr "계정 삭제하기"
+
+#: bookwyrm/templates/preferences/delete_user.html:12
+msgid "Deactivate account"
+msgstr "계정 휴면하기"
+
+#: bookwyrm/templates/preferences/delete_user.html:15
+msgid "Your account will be hidden. You can log back in at any time to re-activate your account."
+msgstr "계정을 숨겨둬요. 언제든 다시 돌아와 계정을 휴면 해제할 수 있어요."
+
+#: bookwyrm/templates/preferences/delete_user.html:20
+msgid "Deactivate Account"
+msgstr "계정 휴면"
+
+#: bookwyrm/templates/preferences/delete_user.html:26
+msgid "Permanently delete account"
+msgstr "계정 영구히 지우기"
+
+#: bookwyrm/templates/preferences/delete_user.html:29
+msgid "Deleting your account cannot be undone. The username will not be available to register in the future."
+msgstr "계정을 지우면 되돌릴 수 없어요. 이 이용자 이름은 앞으로 가입 시에 쓸 수 없어요."
+
+#: bookwyrm/templates/preferences/disable-2fa.html:12
+msgid "Disable Two Factor Authentication"
+msgstr "2단계 인증 비활성하기"
+
+#: bookwyrm/templates/preferences/disable-2fa.html:14
+msgid "Disabling 2FA will allow anyone with your username and password to log in to your account."
+msgstr "2FA를 비활성화하면 내 이용자명과 암호만으로 누구나 내 계정에 로그인할 수 있습니다."
+
+#: bookwyrm/templates/preferences/disable-2fa.html:20
+msgid "Turn off 2FA"
+msgstr "2FA 끄기"
+
+#: bookwyrm/templates/preferences/edit_user.html:4
+#: bookwyrm/templates/preferences/edit_user.html:7
+#: bookwyrm/templates/preferences/layout.html:15
+msgid "Edit Profile"
+msgstr "프로필 편집"
+
+#: bookwyrm/templates/preferences/edit_user.html:12
+#: bookwyrm/templates/preferences/edit_user.html:25
+#: bookwyrm/templates/settings/users/user_info.html:8
+#: bookwyrm/templates/user_menu.html:29
+msgid "Profile"
+msgstr "프로필"
+
+#: bookwyrm/templates/preferences/edit_user.html:13
+#: bookwyrm/templates/preferences/edit_user.html:64
+#: bookwyrm/templates/settings/site.html:11
+#: bookwyrm/templates/settings/site.html:89
+#: bookwyrm/templates/setup/config.html:91
+msgid "Display"
+msgstr "표시"
+
+#: bookwyrm/templates/preferences/edit_user.html:14
+#: bookwyrm/templates/preferences/edit_user.html:112
+msgid "Privacy"
+msgstr "개인정보"
+
+#: bookwyrm/templates/preferences/edit_user.html:69
+msgid "Show reading goal prompt in feed"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:75
+msgid "Show suggested users"
+msgstr "추천 이용자 보기"
+
+#: bookwyrm/templates/preferences/edit_user.html:81
+msgid "Show this account in suggested users"
+msgstr "이 계정을 추천 이용자에 보이기"
+
+#: bookwyrm/templates/preferences/edit_user.html:85
+#, python-format
+msgid "Your account will show up in the directory, and may be recommended to other BookWyrm users."
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:89
+msgid "Preferred Timezone: "
+msgstr "선호하는 시간대: "
+
+#: bookwyrm/templates/preferences/edit_user.html:101
+msgid "Theme:"
+msgstr "테마:"
+
+#: bookwyrm/templates/preferences/edit_user.html:117
+msgid "Manually approve followers"
+msgstr "수동으로 팔로워 승인"
+
+#: bookwyrm/templates/preferences/edit_user.html:123
+msgid "Hide followers and following on profile"
+msgstr "프로필에서 팔로워 및 팔로잉 숨기기"
+
+#: bookwyrm/templates/preferences/edit_user.html:128
+msgid "Default post privacy:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:136
+#, python-format
+msgid "Looking for shelf privacy? You can set a separate visibility level for each of your shelves. Go to Your Books, pick a shelf from the tab bar, and click \"Edit shelf.\""
+msgstr "개인정보 보호되는 책꽂이를 찾나요? 각 책꽂이 별로 가시성 수준을 설정할 수 있어요. 내 도서로 이동 후, 탭 바에서 책꽂이를 골라 \"책꽂이 편집\"을 클릭하세요."
+
+#: bookwyrm/templates/preferences/export-user.html:5
+#: bookwyrm/templates/preferences/export-user.html:8
+#: bookwyrm/templates/preferences/layout.html:55
+msgid "Export BookWyrm Account"
+msgstr "BookWyrm 계정 내보내기"
+
+#: bookwyrm/templates/preferences/export-user.html:14
+msgid "You can create an export file here. This will allow you to migrate your data to another BookWyrm account."
+msgstr "이곳에서는 내보낼 파일을 만들 수 있습니다. 그러면 데이터를 다른 BookWyrm 계정으로 이전할 수 있습니다."
+
+#: bookwyrm/templates/preferences/export-user.html:17
+msgid "%(email_sender)s
, may be misconfigured."
+msgstr ""
+
+#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11
+msgid "Check the EMAIL_SENDER_NAME
and EMAIL_SENDER_DOMAIN
in your .env
file."
+msgstr ""
+
+#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9
+#, python-format
+msgid "%(display_count)s invite request"
+msgid_plural "%(display_count)s invite requests"
+msgstr[0] ""
+
+#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8
+msgid "Your instance is missing a code of conduct."
+msgstr "귀하의 인스턴스는 행동 지침이 누락됐습니다."
+
+#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8
+msgid "Your instance is missing a privacy policy."
+msgstr ""
+
+#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9
+#, python-format
+msgid "%(display_count)s open report"
+msgid_plural "%(display_count)s open reports"
+msgstr[0] ""
+
+#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8
+#, python-format
+msgid "An update is available! You're running v%(current)s and the latest release is %(available)s."
+msgstr ""
+
+#: bookwyrm/templates/settings/email_blocklist/domain_form.html:5
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10
+msgid "Add domain"
+msgstr "도메인 추가"
+
+#: bookwyrm/templates/settings/email_blocklist/domain_form.html:11
+msgid "Domain:"
+msgstr "도메인:"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:5
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:7
+#: bookwyrm/templates/settings/layout.html:65
+msgid "Email Blocklist"
+msgstr "이메일 차단록"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:18
+msgid "When someone tries to register with an email from this domain, no account will be created. The registration process will appear to have worked."
+msgstr ""
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:29
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:27
+msgid "Options"
+msgstr "선택 사항"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:38
+#, python-format
+msgid "%(display_count)s user"
+msgid_plural "%(display_count)s users"
+msgstr[0] ""
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:59
+msgid "No email domains currently blocked"
+msgstr ""
+
+#: bookwyrm/templates/settings/email_config.html:6
+#: bookwyrm/templates/settings/email_config.html:8
+#: bookwyrm/templates/settings/layout.html:90
+msgid "Email Configuration"
+msgstr "이메일 구성"
+
+#: bookwyrm/templates/settings/email_config.html:16
+msgid "Error sending test email:"
+msgstr ""
+
+#: bookwyrm/templates/settings/email_config.html:24
+msgid "Successfully sent test email."
+msgstr ""
+
+#: bookwyrm/templates/settings/email_config.html:32
+#: bookwyrm/templates/setup/config.html:102
+msgid "Email sender:"
+msgstr ""
+
+#: bookwyrm/templates/settings/email_config.html:39
+msgid "Email backend:"
+msgstr ""
+
+#: bookwyrm/templates/settings/email_config.html:46
+msgid "Host:"
+msgstr "호스트:"
+
+#: bookwyrm/templates/settings/email_config.html:53
+msgid "Host user:"
+msgstr "호스트 이용자:"
+
+#: bookwyrm/templates/settings/email_config.html:60
+msgid "Port:"
+msgstr "포트:"
+
+#: bookwyrm/templates/settings/email_config.html:67
+msgid "Use TLS:"
+msgstr "TLS 사용:"
+
+#: bookwyrm/templates/settings/email_config.html:74
+msgid "Use SSL:"
+msgstr "SSL 사용:"
+
+#: bookwyrm/templates/settings/email_config.html:83
+#, python-format
+msgid "Send test email to %(email)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/email_config.html:90
+msgid "Send test email"
+msgstr "시험용 이메일 보내기"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:3
+#: bookwyrm/templates/settings/federation/edit_instance.html:6
+#: bookwyrm/templates/settings/federation/edit_instance.html:15
+#: bookwyrm/templates/settings/federation/edit_instance.html:32
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:3
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:32
+#: bookwyrm/templates/settings/federation/instance_list.html:9
+#: bookwyrm/templates/settings/federation/instance_list.html:10
+msgid "Add instance"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:12
+#: bookwyrm/templates/settings/federation/instance.html:24
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:12
+#: bookwyrm/templates/settings/federation/instance_list.html:3
+#: bookwyrm/templates/settings/federation/instance_list.html:5
+#: bookwyrm/templates/settings/layout.html:47
+msgid "Federated Instances"
+msgstr "연합한 인스턴스"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:28
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:28
+msgid "Import block list"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:43
+msgid "Instance:"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:52
+#: bookwyrm/templates/settings/federation/instance.html:46
+#: bookwyrm/templates/settings/users/user_info.html:113
+msgid "Status:"
+msgstr "상태:"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:66
+#: bookwyrm/templates/settings/federation/instance.html:40
+#: bookwyrm/templates/settings/users/user_info.html:107
+msgid "Software:"
+msgstr "소프트웨어:"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:76
+#: bookwyrm/templates/settings/federation/instance.html:43
+#: bookwyrm/templates/settings/users/user_info.html:110
+msgid "Version:"
+msgstr "버전:"
+
+#: bookwyrm/templates/settings/federation/instance.html:17
+msgid "Refresh data"
+msgstr "데이터 새로고침"
+
+#: bookwyrm/templates/settings/federation/instance.html:37
+msgid "Details"
+msgstr "세부 사항"
+
+#: bookwyrm/templates/settings/federation/instance.html:53
+#: bookwyrm/templates/user/layout.html:79
+msgid "Activity"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance.html:56
+msgid "Users:"
+msgstr "이용자:"
+
+#: bookwyrm/templates/settings/federation/instance.html:59
+#: bookwyrm/templates/settings/federation/instance.html:65
+msgid "View all"
+msgstr "모두 보기"
+
+#: bookwyrm/templates/settings/federation/instance.html:62
+#: bookwyrm/templates/settings/users/user_info.html:60
+msgid "Reports:"
+msgstr "제보:"
+
+#: bookwyrm/templates/settings/federation/instance.html:68
+msgid "Followed by us:"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance.html:73
+msgid "Followed by them:"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance.html:78
+msgid "Blocked by us:"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance.html:90
+#: bookwyrm/templates/settings/users/user_info.html:117
+msgid "Notes"
+msgstr "노트"
+
+#: bookwyrm/templates/settings/federation/instance.html:97
+msgid "No notes"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance.html:116
+#: bookwyrm/templates/settings/link_domains/link_domains.html:87
+#: bookwyrm/templates/snippets/block_button.html:5
+msgid "Block"
+msgstr "차단하기"
+
+#: bookwyrm/templates/settings/federation/instance.html:117
+msgid "All users from this instance will be deactivated."
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance.html:122
+#: bookwyrm/templates/snippets/block_button.html:10
+msgid "Un-block"
+msgstr "차단 해제하기"
+
+#: bookwyrm/templates/settings/federation/instance.html:123
+msgid "All users from this instance will be re-activated."
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:6
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:15
+msgid "Import Blocklist"
+msgstr "차단목록 가져오기"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:38
+msgid "Success!"
+msgstr "성공!"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:42
+msgid "Successfully blocked:"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:44
+msgid "Failed:"
+msgstr "실패:"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
+msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have instance
and url
fields. For example:"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance_list.html:36
+#: bookwyrm/templates/settings/users/server_filter.html:5
+msgid "Instance name"
+msgstr "인스턴스 이름"
+
+#: bookwyrm/templates/settings/federation/instance_list.html:44
+msgid "Last updated"
+msgstr ""
+
+#: bookwyrm/templates/settings/federation/instance_list.html:48
+#: bookwyrm/templates/settings/federation/software_filter.html:5
+msgid "Software"
+msgstr "소프트웨어"
+
+#: bookwyrm/templates/settings/federation/instance_list.html:70
+msgid "No instances found"
+msgstr "인스턴스를 찾을 수 없음"
+
+#: bookwyrm/templates/settings/imports/complete_import_modal.html:4
+#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4
+msgid "Stop import?"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:7
+msgid "This action will stop the user import before it is complete and cannot be un-done"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:19
+msgid "Disable starting new imports"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:30
+msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:31
+msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:32
+msgid "This setting prevents both book imports and user imports."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:37
+msgid "Disable imports"
+msgstr "가져오기 비활성화"
+
+#: bookwyrm/templates/settings/imports/imports.html:51
+msgid "Users are currently unable to start new imports"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:56
+msgid "Enable imports"
+msgstr "가져오기 활성화"
+
+#: bookwyrm/templates/settings/imports/imports.html:64
+msgid "Limit the amount of imports"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:75
+msgid "Some users might try to import a large number of books, which you want to limit."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:76
+#: bookwyrm/templates/settings/imports/imports.html:108
+msgid "Set the value to 0 to not enforce any limit."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:79
+msgid "Set import limit to"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:81
+msgid "books every"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:83
+msgid "days."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:87
+msgid "Set limit"
+msgstr "제한 설정"
+
+#: bookwyrm/templates/settings/imports/imports.html:96
+msgid "Limit how often users can import and export"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:107
+msgid "Some users might try to run user imports or exports very frequently, which you want to limit."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:111
+msgid "Restrict user imports and exports to once every "
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:113
+msgid "hours"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:117
+msgid "Change limit"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:125
+msgid "Book Imports"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:135
+#: bookwyrm/templates/settings/imports/imports.html:225
+msgid "Completed"
+msgstr "완료됨"
+
+#: bookwyrm/templates/settings/imports/imports.html:149
+#: bookwyrm/templates/settings/imports/imports.html:239
+msgid "User"
+msgstr "이용자"
+
+#: bookwyrm/templates/settings/imports/imports.html:158
+#: bookwyrm/templates/settings/imports/imports.html:248
+msgid "Date Updated"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:165
+msgid "Pending items"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:168
+msgid "Successful items"
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:203
+#: bookwyrm/templates/settings/imports/imports.html:295
+msgid "No matching imports found."
+msgstr ""
+
+#: bookwyrm/templates/settings/imports/imports.html:215
+msgid "User Imports"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:4
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:11
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:25
+#: bookwyrm/templates/settings/invites/manage_invites.html:11
+msgid "Invite Requests"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:15
+#: bookwyrm/templates/settings/invites/manage_invites.html:3
+#: bookwyrm/templates/settings/invites/manage_invites.html:15
+#: bookwyrm/templates/settings/layout.html:42
+#: bookwyrm/templates/user_menu.html:55
+msgid "Invites"
+msgstr "초대"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:23
+msgid "Ignored Invite Requests"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:36
+msgid "Date requested"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:40
+msgid "Date accepted"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:45
+msgid "Answer"
+msgstr "답변"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:51
+msgid "Action"
+msgstr "수행"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:54
+msgid "No requests"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:66
+#: bookwyrm/templates/settings/invites/status_filter.html:16
+msgid "Accepted"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:68
+#: bookwyrm/templates/settings/invites/status_filter.html:12
+msgid "Sent"
+msgstr "보냄"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:70
+#: bookwyrm/templates/settings/invites/status_filter.html:8
+msgid "Requested"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:80
+msgid "Send invite"
+msgstr "초대 보내기"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:82
+msgid "Re-send invite"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:102
+msgid "Ignore"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:104
+msgid "Un-ignore"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:116
+msgid "Back to pending requests"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:118
+msgid "View ignored requests"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:21
+msgid "Generate New Invite"
+msgstr "새 초대장 생성하기"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:27
+msgid "Expiry:"
+msgstr "만료일:"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:33
+msgid "Use limit:"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:40
+msgid "Create Invite"
+msgstr "초대장 만들기"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:48
+msgid "Expires"
+msgstr "만료"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:49
+msgid "Max uses"
+msgstr "최대 이용"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:50
+msgid "Times used"
+msgstr ""
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:53
+msgid "No active invites"
+msgstr ""
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:5
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:10
+msgid "Add IP address"
+msgstr ""
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:11
+msgid "Use IP address blocks with caution, and consider using blocks only temporarily, as IP addresses are often shared or change hands. If you block your own IP, you will not be able to access this page."
+msgstr ""
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:18
+msgid "IP Address:"
+msgstr "IP 주소:"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:24
+msgid "You can block IP ranges using CIDR syntax."
+msgstr ""
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:5
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:7
+#: bookwyrm/templates/settings/layout.html:69
+msgid "IP Address Blocklist"
+msgstr "IP 주소 차단목록"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:18
+msgid "Any traffic from this IP address will get a 404 response when trying to access any part of the application."
+msgstr ""
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:24
+msgid "Address"
+msgstr "주소"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:46
+msgid "No IP addresses currently blocked"
+msgstr "차단한 IP 주소 없음"
+
+#: bookwyrm/templates/settings/layout.html:4
+msgid "Administration"
+msgstr "관리"
+
+#: bookwyrm/templates/settings/layout.html:31
+msgid "Manage Users"
+msgstr "이용자 관리"
+
+#: bookwyrm/templates/settings/layout.html:53
+msgid "Moderation"
+msgstr "중재"
+
+#: bookwyrm/templates/settings/layout.html:57
+#: bookwyrm/templates/settings/reports/reports.html:8
+#: bookwyrm/templates/settings/reports/reports.html:17
+msgid "Reports"
+msgstr "제보"
+
+#: bookwyrm/templates/settings/layout.html:73
+#: bookwyrm/templates/settings/link_domains/link_domains.html:5
+#: bookwyrm/templates/settings/link_domains/link_domains.html:7
+msgid "Link Domains"
+msgstr "링크 도메인"
+
+#: bookwyrm/templates/settings/layout.html:78
+msgid "System"
+msgstr "시스템"
+
+#: bookwyrm/templates/settings/layout.html:86
+msgid "Celery status"
+msgstr ""
+
+#: bookwyrm/templates/settings/layout.html:95
+msgid "Instance Settings"
+msgstr "인스턴스 설정"
+
+#: bookwyrm/templates/settings/layout.html:103
+#: bookwyrm/templates/settings/site.html:4
+#: bookwyrm/templates/settings/site.html:6
+msgid "Site Settings"
+msgstr "사이트 설정"
+
+#: bookwyrm/templates/settings/layout.html:109
+#: bookwyrm/templates/settings/layout.html:112
+#: bookwyrm/templates/settings/registration.html:4
+#: bookwyrm/templates/settings/registration.html:6
+#: bookwyrm/templates/settings/registration_limited.html:4
+#: bookwyrm/templates/settings/registration_limited.html:6
+msgid "Registration"
+msgstr "등록"
+
+#: bookwyrm/templates/settings/layout.html:118
+#: bookwyrm/templates/settings/site.html:107
+#: bookwyrm/templates/settings/themes.html:4
+#: bookwyrm/templates/settings/themes.html:6
+msgid "Themes"
+msgstr "테마"
+
+#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:5
+#, python-format
+msgid "Set display name for %(url)s"
+msgstr ""
+
+#: 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 ""
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:45
+msgid "Set display name"
+msgstr "나타낼 이름 설정"
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:53
+msgid "View links"
+msgstr "링크 보기"
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:96
+msgid "No domains currently approved"
+msgstr "승인한 도메인이 없습니다."
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:98
+msgid "No domains currently pending"
+msgstr "계류 중인 도메인은 없습니다."
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:100
+msgid "No domains currently blocked"
+msgstr "현재 차단한 도메인 없음"
+
+#: bookwyrm/templates/settings/link_domains/link_table.html:43
+msgid "No links available for this domain."
+msgstr ""
+
+#: bookwyrm/templates/settings/registration.html:13
+#: bookwyrm/templates/settings/registration_limited.html:13
+#: bookwyrm/templates/settings/site.html:21
+msgid "Settings saved"
+msgstr "설정 저장함"
+
+#: bookwyrm/templates/settings/registration.html:22
+#: bookwyrm/templates/settings/registration_limited.html:22
+#: bookwyrm/templates/settings/site.html:30
+msgid "Unable to save settings"
+msgstr "설정을 저장할 수 없음"
+
+#: bookwyrm/templates/settings/registration.html:38
+msgid "Allow registration"
+msgstr "이용자 등록 허용"
+
+#: bookwyrm/templates/settings/registration.html:43
+msgid "Default access level:"
+msgstr "기본 접근 레벨:"
+
+#: bookwyrm/templates/settings/registration.html:61
+msgid "Require users to confirm email address"
+msgstr ""
+
+#: bookwyrm/templates/settings/registration.html:63
+msgid "(Recommended if registration is open)"
+msgstr ""
+
+#: bookwyrm/templates/settings/registration.html:68
+msgid "Allow invite requests"
+msgstr "초대 요청 허용"
+
+#: bookwyrm/templates/settings/registration.html:72
+#: bookwyrm/templates/settings/registration_limited.html:42
+msgid "Invite request text:"
+msgstr ""
+
+#: bookwyrm/templates/settings/registration.html:80
+#: bookwyrm/templates/settings/registration_limited.html:50
+msgid "Set a question for invite requests"
+msgstr ""
+
+#: bookwyrm/templates/settings/registration.html:85
+#: bookwyrm/templates/settings/registration_limited.html:55
+msgid "Question:"
+msgstr "물음:"
+
+#: bookwyrm/templates/settings/registration.html:90
+#: bookwyrm/templates/settings/registration_limited.html:67
+msgid "Registration closed text:"
+msgstr "이용자 등록 중단 안내:"
+
+#: bookwyrm/templates/settings/registration_limited.html:29
+msgid "Registration is enabled on this instance"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report.html:13
+msgid "Back to reports"
+msgstr "제보로 돌아가기"
+
+#: bookwyrm/templates/settings/reports/report.html:25
+msgid "Message reporter"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report.html:29
+msgid "Update on your report:"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report.html:37
+msgid "Reported status"
+msgstr "제보된 기록"
+
+#: bookwyrm/templates/settings/reports/report.html:39
+msgid "Status has been deleted"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report.html:48
+msgid "Reported links"
+msgstr "제보된 링크"
+
+#: bookwyrm/templates/settings/reports/report.html:66
+msgid "Moderation Activity"
+msgstr "중재 활동"
+
+#: bookwyrm/templates/settings/reports/report.html:73
+#, python-format
+msgid "%(user)s opened this report"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report.html:86
+#, python-format
+msgid "%(user)s commented on this report:"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report.html:90
+#, python-format
+msgid "%(user)s took an action on this report:"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_header.html:6
+#, python-format
+msgid "Report #%(report_id)s: Status posted by @%(username)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_header.html:13
+#, python-format
+msgid "Report #%(report_id)s: Link added by @%(username)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_header.html:17
+#, python-format
+msgid "Report #%(report_id)s: Link domain"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_header.html:24
+#, python-format
+msgid "Report #%(report_id)s: User @%(username)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_links_table.html:19
+msgid "Approve domain"
+msgstr "허용한 도메인"
+
+#: bookwyrm/templates/settings/reports/report_links_table.html:26
+msgid "Block domain"
+msgstr "차단한 도메인"
+
+#: bookwyrm/templates/settings/reports/report_preview.html:17
+msgid "No notes provided"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_preview.html:24
+#, python-format
+msgid "Reported by @%(username)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/report_preview.html:34
+msgid "Re-open"
+msgstr "다시 열기"
+
+#: bookwyrm/templates/settings/reports/report_preview.html:36
+msgid "Resolve"
+msgstr "해결"
+
+#: bookwyrm/templates/settings/reports/reports.html:6
+#, python-format
+msgid "Reports: %(instance_name)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/reports.html:14
+#, python-format
+msgid "Reports: %(instance_name)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/reports/reports.html:25
+msgid "Open"
+msgstr "열림"
+
+#: bookwyrm/templates/settings/reports/reports.html:28
+msgid "Resolved"
+msgstr "해결"
+
+#: bookwyrm/templates/settings/reports/reports.html:37
+msgid "No reports found."
+msgstr "제보가 없습니다."
+
+#: bookwyrm/templates/settings/site.html:10
+#: bookwyrm/templates/settings/site.html:43
+msgid "Instance Info"
+msgstr "인스턴스 정보"
+
+#: bookwyrm/templates/settings/site.html:12
+#: bookwyrm/templates/settings/site.html:122
+msgid "Footer Content"
+msgstr "푸터 컨텐트"
+
+#: bookwyrm/templates/settings/site.html:46
+msgid "Instance Name:"
+msgstr "인스턴스 이름:"
+
+#: bookwyrm/templates/settings/site.html:50
+msgid "Tagline:"
+msgstr "태그라인:"
+
+#: bookwyrm/templates/settings/site.html:54
+msgid "Instance description:"
+msgstr "인스턴스 설명:"
+
+#: bookwyrm/templates/settings/site.html:58
+msgid "Short description:"
+msgstr "짧은 설명:"
+
+#: bookwyrm/templates/settings/site.html:59
+msgid "Used when the instance is previewed on joinbookwyrm.com. Does not support HTML or Markdown."
+msgstr "서버를 joinbookwyrm.com에서 미리 볼 때 사용됩니다. HTML 또는 마크다운은 지원하지 않습니다."
+
+#: bookwyrm/templates/settings/site.html:63
+msgid "Code of conduct:"
+msgstr "행동 지침:"
+
+#: bookwyrm/templates/settings/site.html:67
+msgid "Privacy Policy:"
+msgstr "개인정보처리방침:"
+
+#: bookwyrm/templates/settings/site.html:72
+msgid "Impressum:"
+msgstr "법률 고지:"
+
+#: bookwyrm/templates/settings/site.html:77
+msgid "Include impressum:"
+msgstr "법률 고지 포함시키기:"
+
+#: bookwyrm/templates/settings/site.html:94
+msgid "Logo:"
+msgstr "로고:"
+
+#: bookwyrm/templates/settings/site.html:98
+msgid "Logo small:"
+msgstr "작은 로고:"
+
+#: bookwyrm/templates/settings/site.html:102
+msgid "Favicon:"
+msgstr "파비콘:"
+
+#: bookwyrm/templates/settings/site.html:110
+msgid "Default theme:"
+msgstr "기본 테마"
+
+#: bookwyrm/templates/settings/site.html:125
+msgid "Support link:"
+msgstr "후원 링크:"
+
+#: bookwyrm/templates/settings/site.html:129
+msgid "Support title:"
+msgstr "후원 제목:"
+
+#: bookwyrm/templates/settings/site.html:133
+msgid "Admin email:"
+msgstr "관리자 이메일:"
+
+#: bookwyrm/templates/settings/site.html:137
+msgid "Additional info:"
+msgstr "부가정보:"
+
+#: bookwyrm/templates/settings/themes.html:10
+msgid "Set instance default theme"
+msgstr "인스턴스 기본 테마 설정"
+
+#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
+msgid "Successfully added theme"
+msgstr "테마 추가에 성공함"
+
+#: bookwyrm/templates/settings/themes.html:35
+msgid "How to add a theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:38
+msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:41
+msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:44
+msgid "Add the file name using the form below to make it available in the application interface."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
+msgid "Add theme"
+msgstr "테마 더하기"
+
+#: bookwyrm/templates/settings/themes.html:57
+msgid "Unable to save theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
+msgid "Theme name"
+msgstr "테마 이름"
+
+#: bookwyrm/templates/settings/themes.html:82
+msgid "Theme filename"
+msgstr "테마 파일 이름"
+
+#: bookwyrm/templates/settings/themes.html:97
+msgid "Available Themes"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:105
+msgid "File"
+msgstr "파일"
+
+#: bookwyrm/templates/settings/themes.html:123
+msgid "Remove theme"
+msgstr "테마 제거"
+
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/delete_user_form.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
+msgid "Permanently delete user"
+msgstr "이용자 영구 삭제"
+
+#: bookwyrm/templates/settings/users/delete_user_form.html:12
+#, python-format
+msgid "Are you sure you want to delete %(username)s's account? This action cannot be undone. To proceed, please enter your password to confirm deletion."
+msgstr "%(username)s 계정을 지울까요? 이 동작은 돌이킬 수 없습니다. 계속 진행하려면 암호를 입력하여 지우기를 확인해 주세요."
+
+#: bookwyrm/templates/settings/users/delete_user_form.html:17
+msgid "Your password:"
+msgstr "내 암호:"
+
+#: bookwyrm/templates/settings/users/user_admin.html:9
+#, python-format
+msgid "Users: %(instance_name)s"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_admin.html:29
+msgid "Deleted users"
+msgstr "지운 이용자"
+
+#: bookwyrm/templates/settings/users/user_admin.html:44
+#: bookwyrm/templates/settings/users/username_filter.html:5
+msgid "Username"
+msgstr "이용자명"
+
+#: bookwyrm/templates/settings/users/user_admin.html:48
+msgid "Date Added"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_admin.html:52
+msgid "Last Active"
+msgstr "최근 활동"
+
+#: bookwyrm/templates/settings/users/user_admin.html:61
+msgid "Remote instance"
+msgstr "리모트 인스턴스"
+
+#: bookwyrm/templates/settings/users/user_admin.html:84
+#: bookwyrm/templates/settings/users/user_info.html:127
+msgid "Not set"
+msgstr "설정 안함"
+
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
+msgid "View user profile"
+msgstr "이용자 프로필 보기"
+
+#: bookwyrm/templates/settings/users/user_info.html:30
+msgid "Go to user admin"
+msgstr "이용자 관리로 이동"
+
+#: bookwyrm/templates/settings/users/user_info.html:40
+msgid "Local"
+msgstr "로컬"
+
+#: bookwyrm/templates/settings/users/user_info.html:42
+msgid "Remote"
+msgstr "리모트"
+
+#: bookwyrm/templates/settings/users/user_info.html:51
+msgid "User details"
+msgstr "이용자 상세"
+
+#: bookwyrm/templates/settings/users/user_info.html:55
+msgid "Email:"
+msgstr "이메일:"
+
+#: bookwyrm/templates/settings/users/user_info.html:65
+msgid "(View reports)"
+msgstr "(제보 보기)"
+
+#: bookwyrm/templates/settings/users/user_info.html:71
+msgid "Blocked by count:"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:74
+msgid "Date added:"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:77
+msgid "Last active date:"
+msgstr "최근 활동일:"
+
+#: bookwyrm/templates/settings/users/user_info.html:80
+msgid "Manually approved followers:"
+msgstr "수동으로 팔로워 승인:"
+
+#: bookwyrm/templates/settings/users/user_info.html:83
+msgid "Discoverable:"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:87
+msgid "Deactivation reason:"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:102
+msgid "Instance details"
+msgstr "인스턴스 상세:"
+
+#: bookwyrm/templates/settings/users/user_info.html:124
+msgid "View instance"
+msgstr "인스턴스 보기"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
+msgid "Permanently deleted"
+msgstr "영구 삭제"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
+msgid "User Actions"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
+msgid "Activate user"
+msgstr "활성 이용자"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
+msgid "Suspend user"
+msgstr "정지 이용자"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
+msgid "Un-suspend user"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
+msgid "Access level:"
+msgstr "접근 레벨:"
+
+#: bookwyrm/templates/setup/admin.html:5
+msgid "Set up BookWyrm"
+msgstr ""
+
+#: bookwyrm/templates/setup/admin.html:7
+msgid "Your account as a user and an admin"
+msgstr ""
+
+#: bookwyrm/templates/setup/admin.html:13
+msgid "Create your account"
+msgstr "내 계정 만들기"
+
+#: bookwyrm/templates/setup/admin.html:20
+msgid "Admin key:"
+msgstr "관리 키:"
+
+#: bookwyrm/templates/setup/admin.html:32
+msgid "An admin key was created when you installed BookWyrm. You can get your admin key by running ./bw-dev admin_code
from the command line on your server."
+msgstr ""
+
+#: bookwyrm/templates/setup/admin.html:45
+msgid "As an admin, you'll be able to configure the instance name and information, and moderate your instance. This means you will have access to private information about your users, and are responsible for responding to reports of bad behavior or spam."
+msgstr ""
+
+#: bookwyrm/templates/setup/admin.html:51
+msgid "Once the instance is set up, you can promote other users to moderator or admin roles from the admin panel."
+msgstr ""
+
+#: bookwyrm/templates/setup/admin.html:55
+msgid "Learn more about moderation"
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:5
+msgid "Instance Configuration"
+msgstr "인스턴스 구성"
+
+#: bookwyrm/templates/setup/config.html:7
+msgid "Make sure everything looks right before proceeding"
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:18
+msgid "You are running BookWyrm in debug mode. This should never be used in a production environment."
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:30
+msgid "Your domain appears to be misconfigured. It should not include protocol or slashes."
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:42
+msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
+msgid "Settings"
+msgstr "설정"
+
+#: bookwyrm/templates/setup/config.html:56
+msgid "Instance domain:"
+msgstr "인스턴스 도메인:"
+
+#: bookwyrm/templates/setup/config.html:63
+msgid "Protocol:"
+msgstr "프로토콜:"
+
+#: bookwyrm/templates/setup/config.html:81
+msgid "Using S3:"
+msgstr "S3 사용:"
+
+#: bookwyrm/templates/setup/config.html:95
+msgid "Default interface language:"
+msgstr "기본 인터페이스 언어:"
+
+#: bookwyrm/templates/setup/config.html:109
+msgid "Enable preview images:"
+msgstr "미리보기 이미지 활성화:"
+
+#: bookwyrm/templates/setup/config.html:116
+msgid "Enable image thumbnails:"
+msgstr "이미지 섬네일 활성화:"
+
+#: bookwyrm/templates/setup/config.html:128
+msgid "Does everything look right?"
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:130
+msgid "This is your last chance to set your domain and protocol."
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:144
+msgid "You can change your instance settings in the .env
file on your server."
+msgstr ""
+
+#: bookwyrm/templates/setup/config.html:148
+msgid "View installation instructions"
+msgstr "설치 과정 설명 보기"
+
+#: bookwyrm/templates/setup/layout.html:5
+msgid "Instance Setup"
+msgstr "인스턴스 설정"
+
+#: bookwyrm/templates/setup/layout.html:21
+msgid "Installing BookWyrm"
+msgstr "BookWyrm 설치 중"
+
+#: bookwyrm/templates/setup/layout.html:24
+msgid "Need help?"
+msgstr ""
+
+#: bookwyrm/templates/shelf/create_shelf_form.html:5
+#: bookwyrm/templates/shelf/shelf.html:74
+msgid "Create shelf"
+msgstr "책꽃이 만들기"
+
+#: bookwyrm/templates/shelf/edit_shelf_form.html:5
+msgid "Edit Shelf"
+msgstr "책꽂이 편집"
+
+#: bookwyrm/templates/shelf/shelf.html:41
+#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
+msgid "All books"
+msgstr "모든 도서"
+
+#: bookwyrm/templates/shelf/shelf.html:66
+msgid "Import Books"
+msgstr "도서 가져오기"
+
+#: bookwyrm/templates/shelf/shelf.html:99
+#, python-format
+msgid "%(formatted_count)s book"
+msgid_plural "%(formatted_count)s books"
+msgstr[0] ""
+
+#: bookwyrm/templates/shelf/shelf.html:106
+#, python-format
+msgid "(showing %(start)s-%(end)s)"
+msgstr "(%(start)s-%(end)s 보임)"
+
+#: bookwyrm/templates/shelf/shelf.html:118
+msgid "Edit shelf"
+msgstr "책꽂이 편집"
+
+#: bookwyrm/templates/shelf/shelf.html:126
+msgid "Delete shelf"
+msgstr "책꽂이 지우기"
+
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
+msgid "Shelved"
+msgstr "책 가져온 날"
+
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
+msgid "Started"
+msgstr "시작한 날"
+
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
+msgid "Finished"
+msgstr "마침"
+
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
+msgid "Until"
+msgstr "끝낸 날"
+
+#: bookwyrm/templates/shelf/shelf.html:212
+msgid "This shelf is empty."
+msgstr "이 책꽂이는 비었어요."
+
+#: bookwyrm/templates/snippets/add_to_group_button.html:16
+msgid "Invite"
+msgstr ""
+
+#: bookwyrm/templates/snippets/add_to_group_button.html:25
+msgid "Uninvite"
+msgstr ""
+
+#: bookwyrm/templates/snippets/add_to_group_button.html:29
+#, python-format
+msgid "Remove @%(username)s"
+msgstr "@%(username)s 제거"
+
+#: bookwyrm/templates/snippets/announcement.html:28
+#, python-format
+msgid "Posted by %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/authors.html:22
+#: bookwyrm/templates/snippets/trimmed_list.html:14
+#, python-format
+msgid "and %(remainder_count_display)s other"
+msgid_plural "and %(remainder_count_display)s others"
+msgstr[0] ""
+
+#: bookwyrm/templates/snippets/book_cover.html:63
+msgid "No cover"
+msgstr "표지 없음"
+
+#: bookwyrm/templates/snippets/book_titleby.html:11
+#, python-format
+msgid "%(title)s by"
+msgstr ""
+
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
+msgid "Boost"
+msgstr "부스트"
+
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
+msgid "Un-boost"
+msgstr ""
+
+#: bookwyrm/templates/snippets/create_status.html:36
+msgid "Quote"
+msgstr "인용"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:15
+msgid "Some thoughts on the book"
+msgstr "책에 대한 몇몇 생각"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:27
+#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:18
+msgid "Progress:"
+msgstr "진도:"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:53
+#: bookwyrm/templates/snippets/progress_field.html:18
+msgid "pages"
+msgstr "쪽"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:59
+#: bookwyrm/templates/snippets/progress_field.html:23
+msgid "percent"
+msgstr "퍼센트"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:66
+#, python-format
+msgid "of %(pages)s pages"
+msgstr ""
+
+#: 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:18
+msgid "Content"
+msgstr "컨텐트"
+
+#: bookwyrm/templates/snippets/create_status/content_warning_field.html:9
+msgid "Include spoiler alert"
+msgstr "스포일러 경고 포함"
+
+#: bookwyrm/templates/snippets/create_status/content_warning_field.html:18
+msgid "Spoilers/content warnings:"
+msgstr "스포일러/내용경고:"
+
+#: bookwyrm/templates/snippets/create_status/content_warning_field.html:27
+msgid "Spoilers ahead!"
+msgstr "스포일러 있음!"
+
+#: bookwyrm/templates/snippets/create_status/layout.html:45
+#: bookwyrm/templates/snippets/reading_modals/form.html:7
+msgid "Comment:"
+msgstr "코멘트:"
+
+#: bookwyrm/templates/snippets/create_status/post_options_block.html:19
+msgid "Update"
+msgstr "업데이트"
+
+#: bookwyrm/templates/snippets/create_status/post_options_block.html:21
+msgid "Post"
+msgstr "게시"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:16
+msgid "Quote:"
+msgstr "인용:"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:24
+#, python-format
+msgid "An excerpt from '%(book_title)s'"
+msgstr ""
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:31
+msgid "Position:"
+msgstr ""
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:44
+msgid "On page:"
+msgstr ""
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:50
+msgid "At percent:"
+msgstr "퍼센트:"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:69
+msgid "to"
+msgstr ""
+
+#: bookwyrm/templates/snippets/create_status/review.html:24
+#, python-format
+msgid "Your review of '%(book_title)s'"
+msgstr ""
+
+#: bookwyrm/templates/snippets/create_status/review.html:39
+msgid "Review:"
+msgstr "서평:"
+
+#: bookwyrm/templates/snippets/fav_button.html:16
+#: bookwyrm/templates/snippets/fav_button.html:17
+msgid "Like"
+msgstr "좋아요"
+
+#: bookwyrm/templates/snippets/fav_button.html:30
+#: bookwyrm/templates/snippets/fav_button.html:31
+msgid "Un-like"
+msgstr "좋아요 해제"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:5
+msgid "Filters"
+msgstr "필터"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:10
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:17
+msgid "Filters are applied"
+msgstr "필터 적용함"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:20
+msgid "Clear filters"
+msgstr "필터 해제하기"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
+msgid "Apply filters"
+msgstr "필터 적용"
+
+#: bookwyrm/templates/snippets/follow_button.html:20
+#, python-format
+msgid "Follow @%(username)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/follow_button.html:22
+msgid "Follow"
+msgstr "팔로우"
+
+#: bookwyrm/templates/snippets/follow_button.html:31
+msgid "Undo follow request"
+msgstr "팔로우 요청을 취소"
+
+#: bookwyrm/templates/snippets/follow_button.html:36
+#, python-format
+msgid "Unfollow @%(username)s"
+msgstr "@%(username)s 언팔로우"
+
+#: bookwyrm/templates/snippets/follow_button.html:38
+msgid "Unfollow"
+msgstr "언팔로우"
+
+#: bookwyrm/templates/snippets/follow_request_buttons.html:7
+#: bookwyrm/templates/snippets/join_invitation_buttons.html:9
+msgid "Accept"
+msgstr "수락"
+
+#: bookwyrm/templates/snippets/footer.html:16
+msgid "Documentation"
+msgstr "문서"
+
+#: bookwyrm/templates/snippets/footer.html:42
+#, python-format
+msgid "Support %(site_name)s on %(support_title)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/footer.html:49
+msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub."
+msgstr "BookWyrm의 소스 코드는 자유롭게 사용할 수 있습니다. GitHub에서 기여하거나 이슈를 제보할 수 있습니다."
+
+#: bookwyrm/templates/snippets/form_rate_stars.html:20
+#: bookwyrm/templates/snippets/stars.html:23
+msgid "No rating"
+msgstr "별점 없음"
+
+#: bookwyrm/templates/snippets/form_rate_stars.html:28
+#, python-format
+msgid "%(half_rating)s star"
+msgid_plural "%(half_rating)s stars"
+msgstr[0] ""
+
+#: bookwyrm/templates/snippets/form_rate_stars.html:64
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] ""
+
+#: bookwyrm/templates/snippets/generated_status/goal.html:2
+#, python-format
+msgid "set a goal to read %(counter)s book in %(year)s"
+msgid_plural "set a goal to read %(counter)s books in %(year)s"
+msgstr[0] ""
+
+#: bookwyrm/templates/snippets/generated_status/rating.html:3
+#, python-format
+msgid "rated %(title)s: %(display_rating)s star"
+msgid_plural "rated %(title)s: %(display_rating)s stars"
+msgstr[0] ""
+
+#: bookwyrm/templates/snippets/generated_status/review_pure_name.html:4
+#, 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] ""
+
+#: bookwyrm/templates/snippets/generated_status/review_pure_name.html:12
+#, python-format
+msgid "Review of \"%(book_title)s\": %(review_title)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/goal_form.html:4
+#, python-format
+msgid "Set a goal for how many books you'll finish reading in %(year)s, and track your progress throughout the year."
+msgstr "%(year)s년에 몇 권의 책을 끝까지 읽을 것인지 목표를 설정하고 한 해 동안의 성과를 추적합시다."
+
+#: bookwyrm/templates/snippets/goal_form.html:16
+msgid "Reading goal:"
+msgstr "읽기 목표:"
+
+#: bookwyrm/templates/snippets/goal_form.html:21
+msgid "books"
+msgstr "책"
+
+#: bookwyrm/templates/snippets/goal_form.html:26
+msgid "Goal privacy:"
+msgstr "목표의 프라이버시:"
+
+#: bookwyrm/templates/snippets/goal_form.html:33
+#: bookwyrm/templates/snippets/reading_modals/layout.html:13
+msgid "Post to feed"
+msgstr "피드에 게시"
+
+#: bookwyrm/templates/snippets/goal_form.html:37
+msgid "Set goal"
+msgstr "목표 설정"
+
+#: bookwyrm/templates/snippets/goal_progress.html:7
+msgctxt "Goal successfully completed"
+msgid "Success!"
+msgstr "성공!"
+
+#: bookwyrm/templates/snippets/goal_progress.html:9
+#, python-format
+msgid "%(percent)s%% complete!"
+msgstr ""
+
+#: bookwyrm/templates/snippets/goal_progress.html:12
+#, python-format
+msgid "You've read %(read_count)s of %(goal_count)s books."
+msgstr ""
+
+#: bookwyrm/templates/snippets/goal_progress.html:14
+#, python-format
+msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
+msgstr ""
+
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "새 계정에서 팔로우하기"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/page_text.html:8
+#, python-format
+msgid "page %(page)s of %(total_pages)s"
+msgstr "%(total_pages)s쪽 중 %(page)s쪽"
+
+#: bookwyrm/templates/snippets/page_text.html:14
+#, python-format
+msgid "page %(page)s"
+msgstr "%(page)s쪽"
+
+#: bookwyrm/templates/snippets/pagination.html:13
+msgid "Newer"
+msgstr ""
+
+#: bookwyrm/templates/snippets/pagination.html:15
+msgid "Previous"
+msgstr ""
+
+#: bookwyrm/templates/snippets/pagination.html:28
+msgid "Older"
+msgstr ""
+
+#: bookwyrm/templates/snippets/privacy-icons.html:12
+msgid "Followers-only"
+msgstr "팔로워만"
+
+#: bookwyrm/templates/snippets/rate_action.html:5
+msgid "Leave a rating"
+msgstr "별점 남기기"
+
+#: bookwyrm/templates/snippets/rate_action.html:20
+msgid "Rate"
+msgstr "별점"
+
+#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
+#, python-format
+msgid "Finish \"%(book_title)s\""
+msgstr ""
+
+#: bookwyrm/templates/snippets/reading_modals/form.html:9
+msgid "(Optional)"
+msgstr ""
+
+#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61
+msgid "Update progress"
+msgstr ""
+
+#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
+#, python-format
+msgid "Start \"%(book_title)s\""
+msgstr ""
+
+#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
+#, python-format
+msgid "Stop Reading \"%(book_title)s\""
+msgstr ""
+
+#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32
+#: bookwyrm/templates/snippets/shelf_selector.html:53
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21
+msgid "Stopped reading"
+msgstr "읽다 멈춘 것"
+
+#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
+#, python-format
+msgid "Want to Read \"%(book_title)s\""
+msgstr ""
+
+#: bookwyrm/templates/snippets/register_form.html:18
+msgid "Choose wisely! Your username cannot be changed."
+msgstr "신중히 고르세요! 이용자명은 바꿀 수 없어요."
+
+#: bookwyrm/templates/snippets/register_form.html:66
+msgid "Sign Up"
+msgstr "가입하기"
+
+#: bookwyrm/templates/snippets/report_modal.html:8
+#, python-format
+msgid "Report @%(username)s's status"
+msgstr "@%(username)s의 게시물을 제보"
+
+#: bookwyrm/templates/snippets/report_modal.html:10
+#, python-format
+msgid "Report %(domain)s link"
+msgstr ""
+
+#: bookwyrm/templates/snippets/report_modal.html:12
+#, python-format
+msgid "Report @%(username)s"
+msgstr "@%(username)s를 제보"
+
+#: bookwyrm/templates/snippets/report_modal.html:34
+#, python-format
+msgid "This report will be sent to %(site_name)s's moderators for review."
+msgstr ""
+
+#: bookwyrm/templates/snippets/report_modal.html:36
+msgid "Links from this domain will be removed until your report has been reviewed."
+msgstr ""
+
+#: bookwyrm/templates/snippets/report_modal.html:41
+msgid "More info about this report:"
+msgstr ""
+
+#: bookwyrm/templates/snippets/shelf_selector.html:7
+msgid "Move book"
+msgstr "책 정리"
+
+#: bookwyrm/templates/snippets/shelf_selector.html:38
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33
+msgid "Start reading"
+msgstr "읽기 시작"
+
+#: bookwyrm/templates/snippets/shelf_selector.html:60
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
+msgid "Want to read"
+msgstr ""
+
+#: bookwyrm/templates/snippets/shelf_selector.html:81
+#: bookwyrm/templates/snippets/shelf_selector.html:95
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
+#, python-format
+msgid "Remove from %(name)s"
+msgstr "%(name)s에서 제거"
+
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
+msgid "More shelves"
+msgstr "더 많은 책꽂이"
+
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48
+msgid "Stop reading"
+msgstr "읽기 멈춤"
+
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40
+msgid "Finish reading"
+msgstr "읽기 마치기"
+
+#: bookwyrm/templates/snippets/status/content_status.html:69
+msgid "Show status"
+msgstr "기록 보기"
+
+#: bookwyrm/templates/snippets/status/content_status.html:91
+#, python-format
+msgid "(Page %(page)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/content_status.html:91
+#, python-format
+msgid "%(endpage)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/content_status.html:93
+#, python-format
+msgid "(%(percent)s%%"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/content_status.html:93
+#, python-format
+msgid " - %(endpercent)s%%"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/content_status.html:116
+msgid "Open image in new window"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/content_status.html:137
+msgid "Hide status"
+msgstr "숨기기"
+
+#: bookwyrm/templates/snippets/status/header.html:45
+#, python-format
+msgid "edited %(date)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/comment.html:8
+#, python-format
+msgid "commented on %(book)s by %(author_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/comment.html:15
+#, python-format
+msgid "commented on %(book)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/note.html:8
+#, python-format
+msgid "replied to %(username)s's status"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/quotation.html:8
+#, python-format
+msgid "quoted %(book)s by %(author_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/quotation.html:15
+#, python-format
+msgid "quoted %(book)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/rating.html:3
+#, python-format
+msgid "rated %(book)s:"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/read.html:10
+#, python-format
+msgid "finished reading %(book)s by %(author_name)s"
+msgstr "님이 %(author_name)s의 %(book)s 읽기 마침"
+
+#: bookwyrm/templates/snippets/status/headers/read.html:17
+#, python-format
+msgid "finished reading %(book)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/reading.html:10
+#, python-format
+msgid "started reading %(book)s by %(author_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/reading.html:17
+#, python-format
+msgid "started reading %(book)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/review.html:8
+#, python-format
+msgid "reviewed %(book)s by %(author_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/review.html:15
+#, python-format
+msgid "reviewed %(book)s"
+msgstr "님이 서평한 %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
+#, python-format
+msgid "stopped reading %(book)s by %(author_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
+#, python-format
+msgid "stopped reading %(book)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/to_read.html:10
+#, python-format
+msgid "wants to read %(book)s by %(author_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/headers/to_read.html:17
+#, python-format
+msgid "wants to read %(book)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/layout.html:24
+#: bookwyrm/templates/snippets/status/status_options.html:17
+msgid "Delete status"
+msgstr "기록 지우기"
+
+#: bookwyrm/templates/snippets/status/layout.html:57
+#: bookwyrm/templates/snippets/status/layout.html:58
+msgid "Boost status"
+msgstr "기록 부스트"
+
+#: bookwyrm/templates/snippets/status/layout.html:61
+#: bookwyrm/templates/snippets/status/layout.html:62
+msgid "Like status"
+msgstr ""
+
+#: bookwyrm/templates/snippets/status/status.html:10
+msgid "boosted"
+msgstr "부스트함"
+
+#: bookwyrm/templates/snippets/status/status_options.html:7
+#: bookwyrm/templates/snippets/user_options.html:7
+msgid "More options"
+msgstr ""
+
+#: bookwyrm/templates/snippets/switch_edition_button.html:5
+msgid "Switch to this edition"
+msgstr "이 판으로 바꾸기"
+
+#: bookwyrm/templates/snippets/table-sort-header.html:6
+msgid "Sorted ascending"
+msgstr ""
+
+#: bookwyrm/templates/snippets/table-sort-header.html:10
+msgid "Sorted descending"
+msgstr ""
+
+#: bookwyrm/templates/snippets/trimmed_text.html:17
+msgid "Show more"
+msgstr "더 보기"
+
+#: bookwyrm/templates/snippets/trimmed_text.html:35
+msgid "Show less"
+msgstr "덜 보기"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "지움"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "비활성화"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
+msgid "2FA check"
+msgstr "2FA 체크"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:37
+msgid "Enter the code from your authenticator app:"
+msgstr ""
+
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:41
+msgid "Confirm and Log In"
+msgstr ""
+
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:29
+msgid "2FA is available"
+msgstr "2FA 쓸 수 있음"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:34
+msgid "You can secure your account by setting up two factor authentication in your user preferences. This will require a one-time code from your phone in addition to your password each time you log in."
+msgstr ""
+
+#: bookwyrm/templates/user/books_header.html:9
+#, python-format
+msgid "%(username)s's books"
+msgstr ""
+
+#: bookwyrm/templates/user/goal.html:12
+#, python-format
+msgid "%(year)s Reading Progress"
+msgstr ""
+
+#: bookwyrm/templates/user/goal.html:16
+msgid "Edit Goal"
+msgstr "목표 수정"
+
+#: bookwyrm/templates/user/goal.html:32
+#, python-format
+msgid "%(name)s hasn't set a reading goal for %(year)s."
+msgstr ""
+
+#: bookwyrm/templates/user/goal.html:44
+#, python-format
+msgid "Your %(year)s Books"
+msgstr ""
+
+#: bookwyrm/templates/user/goal.html:46
+#, python-format
+msgid "%(username)s's %(year)s Books"
+msgstr ""
+
+#: bookwyrm/templates/user/groups.html:14
+msgid "Your Groups"
+msgstr "내 그룹"
+
+#: bookwyrm/templates/user/groups.html:16
+#, python-format
+msgid "Groups: %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/user/layout.html:59
+msgid "Follow Requests"
+msgstr ""
+
+#: bookwyrm/templates/user/layout.html:83
+#: bookwyrm/templates/user/reviews_comments.html:6
+#: bookwyrm/templates/user/reviews_comments.html:12
+msgid "Reviews and Comments"
+msgstr "서평과 코멘트"
+
+#: bookwyrm/templates/user/lists.html:16
+#, python-format
+msgid "Lists: %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/user/lists.html:22 bookwyrm/templates/user/lists.html:34
+msgid "Create list"
+msgstr "목록 만들기"
+
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "참여: %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
+#, python-format
+msgid "%(username)s has no followers"
+msgstr ""
+
+#: bookwyrm/templates/user/relationships/following.html:6
+#: bookwyrm/templates/user/relationships/following.html:11
+#: bookwyrm/templates/user/relationships/following.html:21
+#: bookwyrm/templates/user/relationships/layout.html:15
+msgid "Following"
+msgstr "팔로잉"
+
+#: bookwyrm/templates/user/relationships/following.html:30
+#, python-format
+msgid "%(username)s isn't following any users"
+msgstr ""
+
+#: bookwyrm/templates/user/reviews_comments.html:26
+msgid "No reviews or comments yet!"
+msgstr "아직 서평 혹은 코멘트가 없어요!"
+
+#: bookwyrm/templates/user/user.html:20
+msgid "Edit profile"
+msgstr "프로필 수정"
+
+#: bookwyrm/templates/user/user.html:42
+#, python-format
+msgid "View all %(size)s"
+msgstr "%(size)s권 모두 보기"
+
+#: bookwyrm/templates/user/user.html:61
+msgid "View all books"
+msgstr "모든 도서 보기"
+
+#: bookwyrm/templates/user/user.html:69
+#, python-format
+msgid "%(current_year)s Reading Goal"
+msgstr ""
+
+#: bookwyrm/templates/user/user.html:76
+msgid "User Activity"
+msgstr "이용자 활동"
+
+#: bookwyrm/templates/user/user.html:82
+msgid "Show RSS Options"
+msgstr "RSS 옵션 보여주기"
+
+#: bookwyrm/templates/user/user.html:88
+msgid "RSS feed"
+msgstr "RSS 피드"
+
+#: bookwyrm/templates/user/user.html:104
+msgid "Complete feed"
+msgstr ""
+
+#: bookwyrm/templates/user/user.html:109
+msgid "Reviews only"
+msgstr "서평만"
+
+#: bookwyrm/templates/user/user.html:114
+msgid "Quotes only"
+msgstr "인용만"
+
+#: bookwyrm/templates/user/user.html:119
+msgid "Comments only"
+msgstr "코멘트만"
+
+#: bookwyrm/templates/user/user.html:135
+msgid "No activities yet!"
+msgstr ""
+
+#: bookwyrm/templates/user/user_preview.html:26
+#, python-format
+msgid "%(display_count)s follower"
+msgid_plural "%(display_count)s followers"
+msgstr[0] ""
+
+#: bookwyrm/templates/user/user_preview.html:31
+#, python-format
+msgid "%(counter)s following"
+msgstr ""
+
+#: bookwyrm/templates/user/user_preview.html:45
+#, python-format
+msgid "%(mutuals_display)s follower you follow"
+msgid_plural "%(mutuals_display)s followers you follow"
+msgstr[0] ""
+
+#: bookwyrm/templates/user/user_preview.html:49
+msgid "No followers you follow"
+msgstr "팔로워 없음"
+
+#: bookwyrm/templates/user_menu.html:7
+msgid "View profile and more"
+msgstr ""
+
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
+msgid "File exceeds maximum size: 10MB"
+msgstr ""
+
+#: bookwyrm/templatetags/list_page_tags.py:14
+#, python-format
+msgid "Book List: %(name)s"
+msgstr ""
+
+#: bookwyrm/templatetags/list_page_tags.py:22
+#, python-format
+msgid "%(num)d book - by %(user)s"
+msgid_plural "%(num)d books - by %(user)s"
+msgstr[0] ""
+
+#: bookwyrm/templatetags/utilities.py:49
+#, python-format
+msgid "%(title)s: %(subtitle)s"
+msgstr ""
+
+#: bookwyrm/views/rss_feed.py:35
+#, python-brace-format
+msgid "Status updates from {obj.display_name}"
+msgstr ""
+
+#: bookwyrm/views/rss_feed.py:80
+#, python-brace-format
+msgid "Reviews from {obj.display_name}"
+msgstr ""
+
+#: bookwyrm/views/rss_feed.py:122
+#, python-brace-format
+msgid "Quotes from {obj.display_name}"
+msgstr ""
+
+#: bookwyrm/views/rss_feed.py:164
+#, python-brace-format
+msgid "Comments from {obj.display_name}"
+msgstr ""
+
+#: bookwyrm/views/updates.py:45
+#, python-format
+msgid "Load %(count)d unread status"
+msgid_plural "Load %(count)d unread statuses"
+msgstr[0] ""
+
diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo
index 7f23c75a3a..1a92d92fe1 100644
Binary files a/locale/lt_LT/LC_MESSAGES/django.mo and b/locale/lt_LT/LC_MESSAGES/django.mo differ
diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po
index 771492f853..2b37a592e3 100644
--- a/locale/lt_LT/LC_MESSAGES/django.po
+++ b/locale/lt_LT/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 18:13\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Nerasta"
@@ -476,6 +496,20 @@ msgstr "Nerasta"
msgid "The page you requested doesn't seem to exist!"
msgstr "Jūsų ieškomas puslapis neegzistuoja."
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Oi!"
@@ -536,12 +570,12 @@ msgstr "Svetainės %(site_name)s moderatoriai ir administratoriai nuolat atnauji
msgid "Moderator"
msgstr "Moderatorius"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administravimas"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Serverio programinės įrangos versija:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -684,7 +718,7 @@ msgstr "Trumpiausias skaitinys tais metais…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -776,24 +810,24 @@ msgid "View ISNI record"
msgstr "Peržiūrėti ISNI įrašą"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Žiūrėti per ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Įkelti duomenis"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Žiūrėti „OpenLibrary“"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Žiūrėti „Inventaire“"
@@ -805,11 +839,7 @@ msgstr "Žiūrėti „LibraryThing“"
msgid "View on Goodreads"
msgstr "Žiūrėti „Goodreads“"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Peržiūrėti ISFDB įrašą"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "%(name)s knygos"
@@ -918,7 +948,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -967,19 +997,19 @@ msgstr "Patvirtinti"
msgid "Unable to connect to remote source."
msgstr "Nepavyksta prisijungti prie nuotolinio šaltinio."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Redaguoti knygą"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Spausti, kad pridėti viršelį"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Nepavyko įkelti viršelio"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Spustelėkite padidinti"
@@ -1058,13 +1088,13 @@ msgstr "Vietos"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Sąrašai"
@@ -1129,8 +1159,8 @@ msgstr "Įkelti viršelį:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Įkelti viršelį iš url:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1340,7 +1370,7 @@ msgid "Add Another Author"
msgstr "Pridėti dar vieną autorių"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Viršelis"
@@ -1467,8 +1497,9 @@ msgstr "Domenas"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Būsena"
@@ -1477,7 +1508,7 @@ msgstr "Būsena"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Veiksmai"
@@ -1541,22 +1572,22 @@ msgstr "%(pages)s psl."
msgid "%(languages)s language"
msgstr "%(languages)s kalba"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publikuota %(date)s, %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publikavo %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publikuota %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publikavo %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "įvertino"
@@ -1564,12 +1595,12 @@ msgstr "įvertino"
msgid "Series by"
msgstr "Serijos autorius"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "%(series_number)s knyga"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Nesurūšiuota knyga"
@@ -1693,6 +1724,7 @@ msgstr "Pasiūlyta"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1771,7 +1803,7 @@ msgstr "%(username)s citavo %(username)s"
msgstr "Asmeninis susirašinėjimas su %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Asmeninės žinutės"
@@ -1964,7 +1996,7 @@ msgstr "Atnaujinimai"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Mano knygos"
@@ -2012,19 +2044,19 @@ msgid "Add to your books"
msgstr "Pridėti prie savo knygų"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Norimos perskaityti"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Šiuo metu skaitomos"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2033,7 +2065,7 @@ msgid "Read"
msgstr "Perskaitytos"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Nustota skaityti"
@@ -2043,7 +2075,7 @@ msgid "What are you reading?"
msgstr "Ką skaitome?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Ieškoti knygos"
@@ -2062,8 +2094,8 @@ msgstr "Kai pradedate naudotis %(site_name)s, galite pridėti knygų."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2534,8 +2566,8 @@ msgid "Barcode reader"
msgstr "Brūkšninio kodo skaitytuvas"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Naudokite Srautą, Sąrašus ir Atraskite nuorodas bei skaitykite naujienas iš savo srauto, knygų sąrašų pagal temą bei kitą informaciją!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2558,16 +2590,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Kai gausite naują pranešimą, apsišvies varpelis. Galite ant jo paspausti ir sužinoti, kas įdomaus nutiko!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Pranešimai"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Savo paskyrą, knygas, tiesiogines žinutes ir nustatymus galite pasiekti, meniu spustelėdami savo vardą."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2722,7 +2754,7 @@ msgstr "Galite sukurti arba prisijungti prie grupės. Grupės prižiūri savo kn
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupės"
@@ -2767,7 +2799,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Tai jūsų profilis. Čia bus matomos jūsų naujausios veiklos. Kiti „Bookwyrm“ naudotojai taip pat gali matyti šio puslapio dalis, tačiau tai, ką jie gali matyti, priklauso nuo privatumo nustatymų."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Nario paskyra"
@@ -2776,7 +2808,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Šiame skirtuke rodoma viskas, ką perskaitėte, siekdami savo nusistatyto metinio tikslo. Taip pat galite jį čia nustatyti. To daryti nebūtina, jei manote, kad tai ne jums."
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Skaitymo tikslas"
@@ -2815,7 +2847,7 @@ msgstr "Šioje grotžymėje nėra aktyvumo!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importuoti knygas"
@@ -2826,7 +2858,7 @@ msgstr "Netinkamas CSV failas"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -2889,7 +2921,7 @@ msgstr "Privatumo nustatymai svarbiems atsiliepimams:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importuoti"
@@ -2992,8 +3024,8 @@ msgid "Row"
msgstr "Eilutė"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Pavadinimas"
@@ -3006,8 +3038,8 @@ msgid "Openlibrary key"
msgstr "„Openlibrary“ raktas"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Autorius"
@@ -3113,10 +3145,6 @@ msgstr "Jei matote netikėtų nesklandumų, susisiekite su administratoriumi arb
msgid "Create an Account"
msgstr "Kurti paskyrą"
-#: bookwyrm/templates/landing/invite.html:21
-msgid "Permission Denied"
-msgstr "Prieiga draudžiama"
-
#: bookwyrm/templates/landing/invite.html:22
msgid "Sorry! This invite code is no longer valid."
msgstr "Deja, šis pakvietimo kodas nebegalioja."
@@ -3164,7 +3192,7 @@ msgid "Login"
msgstr "Prisijungti"
#: bookwyrm/templates/landing/login.html:7
-#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:136
+#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:142
#: bookwyrm/templates/ostatus/error.html:37
msgid "Log in"
msgstr "Prisijunkite"
@@ -3175,7 +3203,7 @@ msgstr "Džiugu, el. pašto adresas patvirtintas."
#: bookwyrm/templates/landing/login.html:21
#: bookwyrm/templates/landing/reactivate.html:17
-#: bookwyrm/templates/layout.html:127 bookwyrm/templates/ostatus/error.html:28
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/ostatus/error.html:28
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "Naudotojo vardas:"
@@ -3183,13 +3211,13 @@ msgstr "Naudotojo vardas:"
#: bookwyrm/templates/landing/login.html:27
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
-#: bookwyrm/templates/layout.html:131 bookwyrm/templates/ostatus/error.html:32
+#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Slaptažodis:"
-#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:133
+#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:139
#: bookwyrm/templates/ostatus/error.html:34
msgid "Forgot your password?"
msgstr "Pamiršote slaptažodį?"
@@ -3232,35 +3260,35 @@ msgstr "Atstatyti paskyrą"
msgid "%(site_name)s search"
msgstr "%(site_name)s paieška"
-#: bookwyrm/templates/layout.html:37
+#: bookwyrm/templates/layout.html:39
msgid "Search for a book, user, or list"
msgstr "Ieškoti knygos, naudotojo arba sąrašo"
-#: bookwyrm/templates/layout.html:52 bookwyrm/templates/layout.html:53
+#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55
msgid "Scan Barcode"
msgstr "Skenuoti brūkšninį kodą"
-#: bookwyrm/templates/layout.html:67
+#: bookwyrm/templates/layout.html:69
msgid "Main navigation menu"
msgstr "Pagrindinis navigacijos meniu"
-#: bookwyrm/templates/layout.html:87
-msgid "Feed"
-msgstr "Srautas"
-
-#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:33
+#: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33
msgid "password"
msgstr "slaptažodis"
-#: bookwyrm/templates/layout.html:144
+#: bookwyrm/templates/layout.html:136
+msgid "Show/Hide password"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:150
msgid "Join"
msgstr "Prisijungti"
-#: bookwyrm/templates/layout.html:179
+#: bookwyrm/templates/layout.html:196
msgid "Successfully posted status"
msgstr "Būsena publikuota sėkmingai"
-#: bookwyrm/templates/layout.html:180
+#: bookwyrm/templates/layout.html:197
msgid "Error posting status"
msgstr "Klaida, publikuojant būseną"
@@ -3452,6 +3480,7 @@ msgid "Set"
msgstr "Nustatyti"
#: bookwyrm/templates/lists/list.html:167
+#: bookwyrm/templates/snippets/remove_follower_button.html:4
#: bookwyrm/templates/snippets/remove_from_group_button.html:20
msgid "Remove"
msgstr "Pašalinti"
@@ -3519,6 +3548,23 @@ msgstr "Visi sąrašai"
msgid "Saved Lists"
msgstr "Išsaugoti sąrašai"
+#: bookwyrm/templates/moved.html:27
+#, python-format
+msgid "You have moved your account to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:32
+msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
+msgstr ""
+
+#: bookwyrm/templates/moved.html:42
+msgid "Undo move"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
+msgid "Log out"
+msgstr "Atsijungti"
+
#: bookwyrm/templates/notifications/items/accept.html:18
#, python-format
msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
@@ -3727,6 +3773,15 @@ msgstr "Jūsų importas baigtas."
msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
msgstr "%(related_user)s pakvietė jus prisijungti prie grupės „%(group_name)s“"
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
#: bookwyrm/templates/notifications/items/join.html:16
#, python-format
msgid "has joined your group \"%(group_name)s\""
@@ -3776,6 +3831,16 @@ msgstr "%(related_user)s paminėjo jus %(related_user)s mentioned you in a status"
msgstr "%(related_user)s paminėjo jus būsenoje"
+#: bookwyrm/templates/notifications/items/move_user.html:18
+#, python-format
+msgid "%(related_user)s has moved to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:25
+#, python-format
+msgid "%(related_user)s has undone their move"
+msgstr ""
+
#: bookwyrm/templates/notifications/items/remove.html:17
#, python-format
msgid "has been removed from your group \"%(group_name)s\""
@@ -3816,7 +3881,7 @@ msgstr[2] "Reikia moderuoti %(display_count)s naujų ataska
msgstr[3] "Reikia moderuoti %(display_count)s naujas ataskaitas"
#: bookwyrm/templates/notifications/items/status_preview.html:4
-#: bookwyrm/templates/snippets/status/content_status.html:73
+#: bookwyrm/templates/snippets/status/content_status.html:62
msgid "Content warning"
msgstr "Įspėjimas dėl turinio"
@@ -4034,9 +4099,51 @@ msgstr "Prieš tvarkant 2FA reikia patvirinti slaptažodį."
msgid "Set up 2FA"
msgstr "Sutvarkyti 2FA"
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr ""
+
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:46
+#: bookwyrm/templates/preferences/layout.html:54
msgid "Blocked Users"
msgstr "Blokuoti nariai"
@@ -4066,7 +4173,7 @@ msgstr "Naujas slaptažodis:"
#: bookwyrm/templates/preferences/delete_user.html:4
#: bookwyrm/templates/preferences/delete_user.html:7
#: bookwyrm/templates/preferences/delete_user.html:40
-#: bookwyrm/templates/preferences/layout.html:28
+#: bookwyrm/templates/preferences/layout.html:36
#: bookwyrm/templates/settings/users/delete_user_form.html:22
msgid "Delete Account"
msgstr "Pašalinti paskyrą"
@@ -4111,7 +4218,7 @@ msgstr "Redaguoti paskyrą"
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr "Paskyra"
@@ -4188,18 +4295,45 @@ msgstr "Parsisiųsti failą"
msgid "Account"
msgstr "Paskyra"
-#: bookwyrm/templates/preferences/layout.html:31
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:39
msgid "Data"
msgstr "Duomenys"
-#: bookwyrm/templates/preferences/layout.html:39
+#: bookwyrm/templates/preferences/layout.html:47
msgid "CSV export"
msgstr "CSV eksportas"
-#: bookwyrm/templates/preferences/layout.html:42
+#: bookwyrm/templates/preferences/layout.html:50
msgid "Relationships"
msgstr "Sąsajos"
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr ""
+
#: bookwyrm/templates/reading_progress/finish.html:5
#, python-format
msgid "Finish \"%(book_title)s\""
@@ -4612,8 +4746,8 @@ msgid "Streams"
msgstr ""
#: bookwyrm/templates/settings/celery.html:32
-msgid "Broadcasts"
-msgstr "Transliacijos"
+msgid "Broadcast"
+msgstr ""
#: bookwyrm/templates/settings/celery.html:38
msgid "Inbox"
@@ -4971,7 +5105,7 @@ msgid "Details"
msgstr "Išsami informacija"
#: bookwyrm/templates/settings/federation/instance.html:53
-#: bookwyrm/templates/user/layout.html:69
+#: bookwyrm/templates/user/layout.html:79
msgid "Activity"
msgstr "Veikla"
@@ -5159,7 +5293,7 @@ msgstr "Kvietimo prašymai"
#: bookwyrm/templates/settings/invites/manage_invites.html:3
#: bookwyrm/templates/settings/invites/manage_invites.html:15
#: bookwyrm/templates/settings/layout.html:42
-#: bookwyrm/templates/user_menu.html:60
+#: bookwyrm/templates/user_menu.html:55
msgid "Invites"
msgstr "Pakvietimai"
@@ -5633,57 +5767,73 @@ msgid "Set instance default theme"
msgstr "Nustatyti numatytąją serverio temą"
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr "Tema pridėta sėkmingai"
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr "Kaip pridėti temą"
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Nukopijuokite fialus į serverio katalogą bookwyrm/static/css/themes
iš komandinės eilutės."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr "Paleisti ./bw-dev compile_themes
ir ./bw-dev collectstatic
."
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Pridėkite failo pavadinimą, naudodamiesi žemiau esančia forma, kad jis atsirastų programėlėje."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Pridėti temą"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Nepavyko išsaugoti temos"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Temos pavadinimas"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Temos failo vardas"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Galimos temos"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Failas"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Pašalinti temą"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Visam laikui ištrinti vartotoją"
@@ -5722,25 +5872,20 @@ msgstr "Paskutinį kartą aktyvus"
msgid "Remote instance"
msgstr "Nutolęs serveris"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Ištrinta"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Neaktyvus"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "Nenustatytas"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Peržiūrėti nario paskyrą"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "Eiti į administratoriaus naudotoją"
@@ -5796,27 +5941,39 @@ msgstr "Serverio informacija"
msgid "View instance"
msgstr "Peržiūrėti serverį"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Visam laikui ištrintas"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "Nario veiksmai"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr "Įjungti vartotoją"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Laikinai išjungti vartotoją"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Atblokuoti narį"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Priėjimo lygis:"
@@ -5872,7 +6029,7 @@ msgstr "Atrodo, kad jūsų domenas nesukonfigūruotas. Į jį neturėtų įeiti
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "„BookWyrm“ leidžiate produkcinėje būsenoje be https. Produkcinėje aplinkoje turi būti įjungtasUSE_HTTPS."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Nustatymai"
@@ -5929,7 +6086,7 @@ msgid "Need help?"
msgstr "Reikia pagalbos?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Sukurti lentyną"
@@ -5937,18 +6094,18 @@ msgstr "Sukurti lentyną"
msgid "Edit Shelf"
msgstr "Redaguoti lentyną"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Nario paskyra"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Visos knygos"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
@@ -5957,40 +6114,40 @@ msgstr[1] "%(formatted_count)s knygos"
msgstr[2] "%(formatted_count)s knygų"
msgstr[3] "%(formatted_count)s knygos"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(rodoma %(start)s–%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Redaguoti lentyną"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Ištrinti lentyną"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Sudėta į lentynas"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Pradėta"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Baigta"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Iki"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Ši lentyna tuščia."
@@ -6308,6 +6465,15 @@ msgstr "Perskaityta %(read_count)s iš %(goal_count)s knyg
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s perskaitė %(read_count)s iš %(goal_count)s knygų."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr ""
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6449,35 +6615,35 @@ msgstr "Nustoti skaityti"
msgid "Finish reading"
msgstr "Baigti skaityti"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Rodyti būseną"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Psl. %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Atidaryti paveikslėlį naujame lange"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Slėpti būseną"
@@ -6610,6 +6776,18 @@ msgstr "Rodyti daugiau"
msgid "Show less"
msgstr "Rodyti mažiau"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Ištrinta"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Neaktyvus"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "2FA patikra"
@@ -6668,11 +6846,11 @@ msgstr "Jūsų grupės"
msgid "Groups: %(username)s"
msgstr "Grupės: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Sekti prašymus"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6687,7 +6865,13 @@ msgstr "Sąrašai: %(username)s"
msgid "Create list"
msgstr "Sukurti sąrašą"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Prisijungė %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s neturi sekėjų"
@@ -6758,11 +6942,6 @@ msgstr "Tik komentarai"
msgid "No activities yet!"
msgstr "Įrašų dar nėra"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Prisijungė %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6794,10 +6973,6 @@ msgstr "Jūs kartu nieko nesekate"
msgid "View profile and more"
msgstr "Žiūrėti paskyrą ir dar daugiau"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Atsijungti"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Failas viršijo maksimalų dydį: 10 MB"
@@ -6816,7 +6991,7 @@ msgstr[1] "%(num)d knygos %(user)s"
msgstr[2] "%(num)d knygos %(user)s"
msgstr[3] "%(num)d knygos %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/nl_NL/LC_MESSAGES/django.mo b/locale/nl_NL/LC_MESSAGES/django.mo
index 088c596b16..2c66d828b4 100644
Binary files a/locale/nl_NL/LC_MESSAGES/django.mo and b/locale/nl_NL/LC_MESSAGES/django.mo differ
diff --git a/locale/nl_NL/LC_MESSAGES/django.po b/locale/nl_NL/LC_MESSAGES/django.po
index 0cb6c8ee53..06ff309e12 100644
--- a/locale/nl_NL/LC_MESSAGES/django.po
+++ b/locale/nl_NL/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 19:32\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Niet gevonden"
@@ -476,6 +496,20 @@ msgstr "Niet gevonden"
msgid "The page you requested doesn't seem to exist!"
msgstr "De pagina die u probeert te bezoeken lijkt niet te bestaan!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Oeps!"
@@ -536,12 +570,12 @@ msgstr "De moderators en beheerders van %(site_name)s houden de site online, bew
msgid "Moderator"
msgstr "Moderator"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Beheerder"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Software-versie:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Diens kortste lees dit jaar…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "ISNI vermelding bekijken"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Bekijk op ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Gegevens laden"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Bekijk op OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Bekijk op Inventaire"
@@ -797,11 +831,7 @@ msgstr "Bekijk op LibraryThing"
msgid "View on Goodreads"
msgstr "Bekijk op Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "ISFDB melding bekijken"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Boeken door %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Bevestigen"
msgid "Unable to connect to remote source."
msgstr "Verbinden met externe bron niet mogelijk."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Boek bewerken"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Klik om omslag toe te voegen"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Omslag laden mislukt"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Klik om te vergroten"
@@ -1046,13 +1076,13 @@ msgstr "Plaatsen"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Lijsten"
@@ -1117,8 +1147,8 @@ msgstr "Upload Omslag:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Omslag laden vanuit url:"
+msgid "Load cover from URL:"
+msgstr "Omslag laden vanuit URL:"
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Nog een auteur toevoegen"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Omslag"
@@ -1455,8 +1485,9 @@ msgstr "Domein"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Status"
@@ -1465,7 +1496,7 @@ msgstr "Status"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Handelingen"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s bladzijdes"
msgid "%(languages)s language"
msgstr "%(languages)s taal"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Gepubliceerd %(date)s door %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Gepubliceerd door %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Gepubliceerd %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Gepubliceerd door %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "beoordeelde het"
@@ -1552,12 +1583,12 @@ msgstr "beoordeelde het"
msgid "Series by"
msgstr "Reeksen van"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Boek %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Ongecategoriseerd boek"
@@ -1681,6 +1712,7 @@ msgstr "Aanbevolen"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s heeft %(username)s"
msgstr "Privéberichten met %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Privéberichten"
@@ -1948,7 +1980,7 @@ msgstr "Updates"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Jouw boeken"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Voeg toe aan je boeken"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Te lezen"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Aan het lezen"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Gelezen"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Gestopt met lezen"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Wat ben je aan het lezen?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Zoek naar een boek"
@@ -2046,8 +2078,8 @@ msgstr "Je kan boeken toevoegen zodra je begint met het gebruiken van %(site_nam
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Streepjescodelezer"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Gebruik de Feed, Lijsten en Ontdek links om het laatste nieuws van je feed, lijsten van boeken per onderwerp, en de laatste gebeurtenissen op deze BookWyrm server te ontdekken!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "De bel zal oplichten wanneer je een nieuwe melding hebt. Wanneer dit het geval is, klik erop om erachter te komen wat voor spannends er is gebeurd!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Meldingen"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Je profiel, boeken, privéberichten en instellingen kunnen worden geopend door op je naam te klikken in het menu hier."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Je kunt een groep aanmaken of lid worden van een groep met andere gebrui
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Groepen"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Dit is je gebruikersprofiel. Al je laatste activiteiten worden hier getoond. Andere Bookwyrm-gebruikers kunnen ook delen van deze pagina zien - wat ze kunnen zien hangt af van je privacy-instellingen."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Gebruikersprofiel"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Dit tabblad toont alles wat je hebt gelezen voor je jaarlijkse leesdoel, of stelt je in staat om er een in te stellen. Je hoeft geen leesdoel in te stellen als dat niet je ding is!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Leesdoel"
@@ -2795,7 +2827,7 @@ msgstr "Er zijn nog geen activiteiten voor deze hashtag!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importeer boeken"
@@ -2806,9 +2838,9 @@ msgstr "Geen geldig CSV-bestand"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] "Momenteel mag je %(display_size)s boek importeren elke %(import_limit_reset)s dagen."
-msgstr[1] "Momenteel mag je %(import_size_limit)s boeken importeren elke %(import_limit_reset)s dagen."
+msgstr[1] "Momenteel mag je %(display_size)s boeken importeren elke %(import_limit_reset)s dagen."
#: bookwyrm/templates/import/import.html:27
#, python-format
@@ -2867,7 +2899,7 @@ msgstr "Privacyinstelling voor geïmporteerde recensies:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importeren"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Rij"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Titel"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary sleutel"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Auteur"
@@ -3087,10 +3119,6 @@ msgstr "Neem contact op met je beheerder of USE_HTTPS should be enabled in production."
msgstr "Je draait BookWyrm in productie modus zonder https. USE_HTTPS zou moeten zijn ingeschakeld bij gebruik in productie."
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Instellingen"
@@ -5883,7 +6040,7 @@ msgid "Need help?"
msgstr "Hulp nodig?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Nieuwe boekenplank maken"
@@ -5891,58 +6048,58 @@ msgstr "Nieuwe boekenplank maken"
msgid "Edit Shelf"
msgstr "Bewerk boekenplank"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Gebruikersprofiel"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Alle boeken"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s boek"
msgstr[1] "%(formatted_count)s boeken"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(%(start)s-%(end)s getoond)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Bewerk boekenplank"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Verwijder boekenplank"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Op boekenplank gezet"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Begonnen"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Uitgelezen"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Tot"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Deze boekenplank is leeg."
@@ -6248,6 +6405,15 @@ msgstr "Je hebt %(read_count)s van %(goal_count)s boeken%(read_count)s of %(goal_count)s books."
msgstr "%(username)s heeft %(read_count)s van %(goal_count)s boeken gelezen."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Volg op nieuwe account"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6389,35 +6555,35 @@ msgstr "Stop met lezen"
msgid "Finish reading"
msgstr "Uitgelezen"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Toon status"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Pagina %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s%%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Afbeelding in nieuw venster openen"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Status verbergen"
@@ -6550,6 +6716,18 @@ msgstr "Meer weergeven"
msgid "Show less"
msgstr "Minder weergeven"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Verhuisd"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Verwijderd"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Inactief"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "2FA controle"
@@ -6608,11 +6786,11 @@ msgstr "Jouw groepen"
msgid "Groups: %(username)s"
msgstr "Groepen: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Volgverzoeken"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6627,7 +6805,13 @@ msgstr "Lijsten: %(username)s"
msgid "Create list"
msgstr "Lijst aanmaken"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Lid geworden %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s heeft geen volgers"
@@ -6698,11 +6882,6 @@ msgstr "Alleen reacties"
msgid "No activities yet!"
msgstr "Nog geen activiteiten!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Lid geworden %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6730,10 +6909,6 @@ msgstr "Geen volgers die jij volgt"
msgid "View profile and more"
msgstr "Bekijk profiel en meer"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Uitloggen"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Het bestand overschrijdt de maximale grootte: 10MB"
@@ -6750,7 +6925,7 @@ msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "%(num)d boek - van %(user)s"
msgstr[1] "%(num)d boeken - van %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo
index f2038692fe..9fad84bd22 100644
Binary files a/locale/no_NO/LC_MESSAGES/django.mo and b/locale/no_NO/LC_MESSAGES/django.mo differ
diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po
index 3c125d8aaa..3c3cc66c5c 100644
--- a/locale/no_NO/LC_MESSAGES/django.po
+++ b/locale/no_NO/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-09 19:52\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Fant ikke"
@@ -476,6 +496,20 @@ msgstr "Fant ikke"
msgid "The page you requested doesn't seem to exist!"
msgstr "Den siden synes ikke å eksistere!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Oops!"
@@ -536,12 +570,12 @@ msgstr "%(site_name)s sine moderatorer og administratorer holder nettsida oppe o
msgid "Moderator"
msgstr "Moderator"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Programvareversjon:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Den korteste teksten lest i år…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Vis ISNI -oppføring"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Vis på ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Last inn data"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Vis på OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Vis på Inventaire"
@@ -797,11 +831,7 @@ msgstr "Vis på LibraryThing"
msgid "View on Goodreads"
msgstr "Vis på Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Vis ISFDB-oppføring"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Bøker av %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Bekreft"
msgid "Unable to connect to remote source."
msgstr "Kunne ikke koble til ekstern kilde."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Rediger bok"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Klikk for å legge til omslag"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Klarte ikke å laste inn omslag"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Klikk for å forstørre"
@@ -1046,13 +1076,13 @@ msgstr "Steder"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Lister"
@@ -1117,8 +1147,8 @@ msgstr "Last opp omslag:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Last bilde av omslag fra nettadresse:"
+msgid "Load cover from URL:"
+msgstr "Last inn omslag fra hyperlenke:"
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Legg til enda en forfatter"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Omslag"
@@ -1455,8 +1485,9 @@ msgstr "Domene"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Status"
@@ -1465,7 +1496,7 @@ msgstr "Status"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Handlinger"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s sider"
msgid "%(languages)s language"
msgstr "%(languages)s språk"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Utgitt %(date)s av %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Utgitt av %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Utgitt %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Utgitt av %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "vurderte den"
@@ -1552,12 +1583,12 @@ msgstr "vurderte den"
msgid "Series by"
msgstr "En serie av"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Bok %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Usortert bok"
@@ -1681,6 +1712,7 @@ msgstr "Foreslått"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s siterte %(username)s"
msgstr "Direktemeldinger med %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Direktemeldinger"
@@ -1948,7 +1980,7 @@ msgstr "Oppdateringer"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Bøkene dine"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Legg til i bøkene dine"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Å lese"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Leser nå"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Lest"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Stoppet lesing"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Hva er det du leser nå?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Søk etter en bok"
@@ -2046,8 +2078,8 @@ msgstr "Du kan legge til bøker når du begynner å bruke %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Strekkodeleser"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Bruk lenkene Strøm, Lister og Oppdag for å få de seneste nyhetene fra strømmen din, lister over bøker etter emne, og siste nytt på denne BookWyrm-serveren!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Klokka lyser opp når du får ny varsel. Når det skjer, klikk på den for å finne ut hva spennende som har skjedd!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Varsler"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Din profil, bøker, direktemeldinger og innstillinger kan nås ved å klikke på navnet ditt i denne menyen."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Du kan opprette eller bli med i en gruppe med andre brukere. Grupper kan
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupper"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Brukerprofil"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Lesemål"
@@ -2795,7 +2827,7 @@ msgstr "Ingen aktiviteter for denne emneknaggen ennå!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importer bøker"
@@ -2806,7 +2838,7 @@ msgstr "Ikke en gyldig CSV-fil"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
@@ -2867,7 +2899,7 @@ msgstr "Personverninnstilling for importerte anmeldelser:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importér"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Rad"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Tittel"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary nøkkel"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Forfatter"
@@ -3087,10 +3119,6 @@ msgstr "Kontakt systemansvarlig eller DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Ups!"
@@ -536,12 +570,12 @@ msgstr "Moderatorzy oraz administratorzy %(site_name)s odpowiadają za prawidło
msgid "Moderator"
msgstr "Moderator"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administrator"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Wersja oprogramowania:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -684,7 +718,7 @@ msgstr "Najkrócej wczytano się w…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -776,24 +810,24 @@ msgid "View ISNI record"
msgstr "Zobacz wpis ISNI"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Zobacz na ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Wczytaj dane"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Pokaż na OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Pokaż na Inventaire"
@@ -805,11 +839,7 @@ msgstr "Pokaż na LibraryThing"
msgid "View on Goodreads"
msgstr "Pokaż na Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr ""
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Książki autorstwa %(name)s"
@@ -918,7 +948,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -967,19 +997,19 @@ msgstr "Zatwierdź"
msgid "Unable to connect to remote source."
msgstr "Błąd połączenia ze zdalnym źródłem."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Edytuj książkę"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Naciśnij, aby dodać okładkę"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Błąd wczytywania okładki"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Naciśnij, aby powiększyć"
@@ -1058,13 +1088,13 @@ msgstr "Miejsca"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listy"
@@ -1129,8 +1159,8 @@ msgstr "Prześlij okładkę:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Wczytaj okładkę z adresu URL:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1340,7 +1370,7 @@ msgid "Add Another Author"
msgstr "Dodaj kolejnego autora"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Okładka"
@@ -1467,8 +1497,9 @@ msgstr "Domena"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Status"
@@ -1477,7 +1508,7 @@ msgstr "Status"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Czynności"
@@ -1541,22 +1572,22 @@ msgstr "%(pages)s stron"
msgid "%(languages)s language"
msgstr "Język %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Opublikowane %(date)s przez %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Opublikowane przez %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Opublikowane %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Opublikowane przez %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "ocenia to"
@@ -1564,12 +1595,12 @@ msgstr "ocenia to"
msgid "Series by"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Książka%(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr ""
@@ -1693,6 +1724,7 @@ msgstr "Polecane"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1771,7 +1803,7 @@ msgstr "%(username)s cytuje %(username)s"
msgstr "Wiadomości bezpośrednie z %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Wiadomości bezpośrednie"
@@ -1964,7 +1996,7 @@ msgstr "Aktualizacje"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Twoje książki"
@@ -2012,19 +2044,19 @@ msgid "Add to your books"
msgstr "Dodaj do swoich książek"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Do przeczytania"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Obecnie czytane"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2033,7 +2065,7 @@ msgid "Read"
msgstr "Przeczytane"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Zaprzestano czytania"
@@ -2043,7 +2075,7 @@ msgid "What are you reading?"
msgstr "Co teraz czytasz?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Szukaj książkę"
@@ -2062,8 +2094,8 @@ msgstr "Możesz dodawać książki, gdy zaczniesz używać %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2534,7 +2566,7 @@ msgid "Barcode reader"
msgstr "Czytnik kodów kreskowych"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
@@ -2558,16 +2590,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Dzwonek podświetli się, gdy dostaniesz nowe powiadomienie. Gdy tak się stanie, naciśnij na niego, aby zobaczyć co ciekawego się wydarzyło!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Powiadomienia"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Dostęp do swojego profilu, książek, wiadomości oraz ustawień możesz uzyskać po naciśnięciu na swoją nazwę w menu."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2722,7 +2754,7 @@ msgstr "Możesz utworzyć lub dołączyć do grupy z pozostałymi użytkownikami
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupy"
@@ -2767,7 +2799,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "To jest Twój profil użytkownika. Wszystkie Twoje najnowsze aktywności będą tutaj widoczne. Pozostali użytkownicy BookWyrm mogą również widzieć części tej strony - to, co mogą zobaczyć zależy od Twoich ustawień prywatności."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Profil użytkownika"
@@ -2776,7 +2808,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Ta karta zawiera wszystko, co zostało przez Ciebie przeczytane w dążeniu do rocznego celu oraz umożliwia jego ustawienie. Nie musisz tego robić, jeśli to nie w Twoim stylu!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Cel czytania"
@@ -2815,7 +2847,7 @@ msgstr "Brak aktywności dla tej etykiety!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importuj książki"
@@ -2826,7 +2858,7 @@ msgstr "To nie jest prawidłowy plik CSV"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -2889,7 +2921,7 @@ msgstr "Ustawienia prywatności dla importowanych recenzji:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importuj"
@@ -2992,8 +3024,8 @@ msgid "Row"
msgstr "Wiersz"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Tytuł"
@@ -3006,8 +3038,8 @@ msgid "Openlibrary key"
msgstr "Klucz Openlibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Autor"
@@ -3113,10 +3145,6 @@ msgstr ""
msgid "Create an Account"
msgstr "Utwórz konto"
-#: bookwyrm/templates/landing/invite.html:21
-msgid "Permission Denied"
-msgstr "Odmowa dostępu"
-
#: bookwyrm/templates/landing/invite.html:22
msgid "Sorry! This invite code is no longer valid."
msgstr "Niestety, ale ten kod zaproszenia jest już nieważny."
@@ -3164,7 +3192,7 @@ msgid "Login"
msgstr "Login"
#: bookwyrm/templates/landing/login.html:7
-#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:136
+#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:142
#: bookwyrm/templates/ostatus/error.html:37
msgid "Log in"
msgstr "Zaloguj się"
@@ -3175,7 +3203,7 @@ msgstr "Udało się! Adres e-mail został potwierdzony."
#: bookwyrm/templates/landing/login.html:21
#: bookwyrm/templates/landing/reactivate.html:17
-#: bookwyrm/templates/layout.html:127 bookwyrm/templates/ostatus/error.html:28
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/ostatus/error.html:28
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "Nazwa użytkownika:"
@@ -3183,13 +3211,13 @@ msgstr "Nazwa użytkownika:"
#: bookwyrm/templates/landing/login.html:27
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
-#: bookwyrm/templates/layout.html:131 bookwyrm/templates/ostatus/error.html:32
+#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "Hasło:"
-#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:133
+#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:139
#: bookwyrm/templates/ostatus/error.html:34
msgid "Forgot your password?"
msgstr "Zapomniano hasła?"
@@ -3232,35 +3260,35 @@ msgstr "Ponownie aktywuj konto"
msgid "%(site_name)s search"
msgstr "Przeszukaj %(site_name)s"
-#: bookwyrm/templates/layout.html:37
+#: bookwyrm/templates/layout.html:39
msgid "Search for a book, user, or list"
msgstr "Szukaj książki, użytkownika lub listy"
-#: bookwyrm/templates/layout.html:52 bookwyrm/templates/layout.html:53
+#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55
msgid "Scan Barcode"
msgstr "Skanuj kod kreskowy"
-#: bookwyrm/templates/layout.html:67
+#: bookwyrm/templates/layout.html:69
msgid "Main navigation menu"
msgstr "Główne menu nawigacji"
-#: bookwyrm/templates/layout.html:87
-msgid "Feed"
-msgstr "Kanał"
-
-#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:33
+#: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33
msgid "password"
msgstr "hasło"
-#: bookwyrm/templates/layout.html:144
+#: bookwyrm/templates/layout.html:136
+msgid "Show/Hide password"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:150
msgid "Join"
msgstr "Dołącz"
-#: bookwyrm/templates/layout.html:179
+#: bookwyrm/templates/layout.html:196
msgid "Successfully posted status"
msgstr "Status został zamieszczony"
-#: bookwyrm/templates/layout.html:180
+#: bookwyrm/templates/layout.html:197
msgid "Error posting status"
msgstr "Błąd zamieszczania statusu"
@@ -3452,6 +3480,7 @@ msgid "Set"
msgstr ""
#: bookwyrm/templates/lists/list.html:167
+#: bookwyrm/templates/snippets/remove_follower_button.html:4
#: bookwyrm/templates/snippets/remove_from_group_button.html:20
msgid "Remove"
msgstr "Usuń"
@@ -3519,6 +3548,23 @@ msgstr "Wszystkie listy"
msgid "Saved Lists"
msgstr "Zapisane listy"
+#: bookwyrm/templates/moved.html:27
+#, python-format
+msgid "You have moved your account to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:32
+msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
+msgstr ""
+
+#: bookwyrm/templates/moved.html:42
+msgid "Undo move"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
+msgid "Log out"
+msgstr "Wyloguj się"
+
#: bookwyrm/templates/notifications/items/accept.html:18
#, python-format
msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
@@ -3727,6 +3773,15 @@ msgstr "Twój import został zakończony."
msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
msgstr "%(related_user)s zaprasza Cię do grupy \"%(group_name)s\""
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
#: bookwyrm/templates/notifications/items/join.html:16
#, python-format
msgid "has joined your group \"%(group_name)s\""
@@ -3776,6 +3831,16 @@ msgstr "%(related_user)s wspomina Cię w <
msgid "%(related_user)s mentioned you in a status"
msgstr "%(related_user)s wspomina Cię w statusie"
+#: bookwyrm/templates/notifications/items/move_user.html:18
+#, python-format
+msgid "%(related_user)s has moved to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:25
+#, python-format
+msgid "%(related_user)s has undone their move"
+msgstr ""
+
#: bookwyrm/templates/notifications/items/remove.html:17
#, python-format
msgid "has been removed from your group \"%(group_name)s\""
@@ -3816,7 +3881,7 @@ msgstr[2] "%(display_count)s nowych zgłoszeń wymaga u
msgstr[3] "%(display_count)s nowych zgłoszeń wymaga uwagi"
#: bookwyrm/templates/notifications/items/status_preview.html:4
-#: bookwyrm/templates/snippets/status/content_status.html:73
+#: bookwyrm/templates/snippets/status/content_status.html:62
msgid "Content warning"
msgstr ""
@@ -4034,9 +4099,51 @@ msgstr "Potwierdź hasło, aby skonfigurować 2FA."
msgid "Set up 2FA"
msgstr "Skonfiguruj 2FA"
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr ""
+
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:46
+#: bookwyrm/templates/preferences/layout.html:54
msgid "Blocked Users"
msgstr "Zablokowani użytkownicy"
@@ -4066,7 +4173,7 @@ msgstr "Nowe hasło:"
#: bookwyrm/templates/preferences/delete_user.html:4
#: bookwyrm/templates/preferences/delete_user.html:7
#: bookwyrm/templates/preferences/delete_user.html:40
-#: bookwyrm/templates/preferences/layout.html:28
+#: bookwyrm/templates/preferences/layout.html:36
#: bookwyrm/templates/settings/users/delete_user_form.html:22
msgid "Delete Account"
msgstr "Usuń konto"
@@ -4111,7 +4218,7 @@ msgstr "Edytuj profil"
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr "Profil"
@@ -4188,18 +4295,45 @@ msgstr "Pobierz plik"
msgid "Account"
msgstr "Konto"
-#: bookwyrm/templates/preferences/layout.html:31
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:39
msgid "Data"
msgstr "Dane"
-#: bookwyrm/templates/preferences/layout.html:39
+#: bookwyrm/templates/preferences/layout.html:47
msgid "CSV export"
msgstr "Eksport CSV"
-#: bookwyrm/templates/preferences/layout.html:42
+#: bookwyrm/templates/preferences/layout.html:50
msgid "Relationships"
msgstr "Relacje"
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr ""
+
#: bookwyrm/templates/reading_progress/finish.html:5
#, python-format
msgid "Finish \"%(book_title)s\""
@@ -4612,7 +4746,7 @@ msgid "Streams"
msgstr ""
#: bookwyrm/templates/settings/celery.html:32
-msgid "Broadcasts"
+msgid "Broadcast"
msgstr ""
#: bookwyrm/templates/settings/celery.html:38
@@ -4971,7 +5105,7 @@ msgid "Details"
msgstr "Szczegóły"
#: bookwyrm/templates/settings/federation/instance.html:53
-#: bookwyrm/templates/user/layout.html:69
+#: bookwyrm/templates/user/layout.html:79
msgid "Activity"
msgstr "Aktywność"
@@ -5159,7 +5293,7 @@ msgstr ""
#: bookwyrm/templates/settings/invites/manage_invites.html:3
#: bookwyrm/templates/settings/invites/manage_invites.html:15
#: bookwyrm/templates/settings/layout.html:42
-#: bookwyrm/templates/user_menu.html:60
+#: bookwyrm/templates/user_menu.html:55
msgid "Invites"
msgstr "Zaproszenia"
@@ -5633,57 +5767,73 @@ msgid "Set instance default theme"
msgstr "Ustaw domyślny motyw instancji"
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr "Motyw został dodany"
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr "Jak dodać motyw"
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "Skopiuj przez wiersz polecenia plik motywu do katalogu bookwyrm/static/css/themes
na swoim serwerze."
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "Dodaj nazwę plik używając formularza poniżej, aby udostępnić plik w interfejsie aplikacji."
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "Dodaj motyw"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "Nie można zapisać motywu"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "Nazwa motywu"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "Nazwa pliku motywu"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "Dostępne motywy"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "Plik"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "Usuń motyw"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "Trwale usuń użytkownika"
@@ -5722,25 +5872,20 @@ msgstr "Ostatnia aktywność"
msgid "Remote instance"
msgstr "Zdalna instancja"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "Usunięte"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "Nieaktywne"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr ""
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "Wyświetl profil użytkownika"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr ""
@@ -5796,27 +5941,39 @@ msgstr "Szczegóły instancji"
msgid "View instance"
msgstr "Zobacz instancję"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "Usunięte na zawsze"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "Zawieś użytkownika"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "Przywróć użytkownika"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "Poziom dostępu:"
@@ -5872,7 +6029,7 @@ msgstr "Wygląda na to, że Twoja domena jest niepoprawnie skonfigurowana. Nie p
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr ""
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "Ustawienia"
@@ -5929,7 +6086,7 @@ msgid "Need help?"
msgstr "Potrzebujesz pomocy?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "Utwórz półkę"
@@ -5937,18 +6094,18 @@ msgstr "Utwórz półkę"
msgid "Edit Shelf"
msgstr "Edytuj półkę"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "Profil użytkownika"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "Wszystkie książki"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
@@ -5957,40 +6114,40 @@ msgstr[1] "%(formatted_count)s książki"
msgstr[2] "%(formatted_count)s książek"
msgstr[3] "%(formatted_count)s książek"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(wyświetlanie %(start)s-%(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "Edytuj półkę"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "Usuń półkę"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "Na półce"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "Rozpoczęte"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "Ukończone"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "Do"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "Półka jest pusta."
@@ -6308,6 +6465,15 @@ msgstr "Przeczytano %(read_count)s z %(goal_count)s książ
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s ma przeczytane %(read_count)s z %(goal_count)s książek."
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr ""
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6449,35 +6615,35 @@ msgstr "Przerwij czytanie"
msgid "Finish reading"
msgstr "Ukończ czytanie"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "Pokaż status"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr "(Strona %(page)s"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr "%(endpage)s"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr "(%(percent)s %%"
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr " - %(endpercent)s %%"
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "Otwórz obraz w nowym oknie"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "Ukryj status"
@@ -6610,6 +6776,18 @@ msgstr "Pokaż więcej"
msgid "Show less"
msgstr "Pokaż mniej"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Usunięte"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Nieaktywne"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "Sprawdzanie 2FA"
@@ -6668,11 +6846,11 @@ msgstr "Twoje grupy"
msgid "Groups: %(username)s"
msgstr "Grupy: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "Prośby o obserwowanie"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6687,7 +6865,13 @@ msgstr "Listy: %(username)s"
msgid "Create list"
msgstr "Utwórz listę"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Dołączono %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s nie ma obserwujących"
@@ -6758,11 +6942,6 @@ msgstr "Tylko komentarze"
msgid "No activities yet!"
msgstr "Jeszcze brak aktywności!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "Dołączono %(date)s"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6794,10 +6973,6 @@ msgstr "Brak obserwujących, których obserwujesz"
msgid "View profile and more"
msgstr "Zobacz profil i więcej"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "Wyloguj się"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "Rozmiar pliku przekracza maksymalny rozmiar: 10MB"
@@ -6816,7 +6991,7 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s: %(subtitle)s"
diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo
index 42da17a08b..565cb0e0d0 100644
Binary files a/locale/pt_BR/LC_MESSAGES/django.mo and b/locale/pt_BR/LC_MESSAGES/django.mo differ
diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po
index 495ea43b34..a8965b1658 100644
--- a/locale/pt_BR/LC_MESSAGES/django.po
+++ b/locale/pt_BR/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 18:13\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "Não encontrado"
@@ -476,6 +496,20 @@ msgstr "Não encontrado"
msgid "The page you requested doesn't seem to exist!"
msgstr "A página que você procura não existe!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Opa!"
@@ -536,12 +570,12 @@ msgstr "Moderadores e administradores de %(site_name)s's mantêm o site funciona
msgid "Moderator"
msgstr "Moderador/a"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versão do software:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "A leitura mais curta do ano…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Ver registro ISNI"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Veja no ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Carregar informações"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Ver na OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Ver no Inventaire"
@@ -797,11 +831,7 @@ msgstr "Ver no LibraryThing"
msgid "View on Goodreads"
msgstr "Ver no Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Veja no ISFDB"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Livros de %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Confirmar"
msgid "Unable to connect to remote source."
msgstr "Não conseguimos nos conectar à fonte remota."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Editar livro"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Clique para adicionar uma capa"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Erro ao carregar capa"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Clique para aumentar"
@@ -1046,13 +1076,13 @@ msgstr "Lugares"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listas"
@@ -1117,8 +1147,8 @@ msgstr "Enviar capa:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Carregar capa do endereço:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Adicionar outro/a autor/a"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Capa"
@@ -1455,8 +1485,9 @@ msgstr "Domínio"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Publicação"
@@ -1465,7 +1496,7 @@ msgstr "Publicação"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Ações"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s páginas"
msgid "%(languages)s language"
msgstr "Língua: %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publicado em %(date)s por %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publicado por %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publicado em %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publicado por %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "avaliou este livro"
@@ -1552,12 +1583,12 @@ msgstr "avaliou este livro"
msgid "Series by"
msgstr "Séries de"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Livro %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Livro não ordenado"
@@ -1681,6 +1712,7 @@ msgstr "Sugerido"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s citou %(username)s"
msgstr "Mensagens diretas com %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Mensagens diretas"
@@ -1948,7 +1980,7 @@ msgstr "Atualizações"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Seus livros"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Adicionar aos seus livros"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Quero ler"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Lendo atualmente"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Lido"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Finalizar leitura"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "O que você está lendo?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Pesquisar livro"
@@ -2046,8 +2078,8 @@ msgstr "Você pode adicionar livros quando começar a usar o %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,7 +2546,7 @@ msgid "Barcode reader"
msgstr "Leitor de código de barras"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
@@ -2538,15 +2570,15 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Notificações"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
@@ -2702,7 +2734,7 @@ msgstr ""
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupos"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Perfil do usuário"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Meta de leitura"
@@ -2795,7 +2827,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importar livros"
@@ -2806,7 +2838,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
@@ -2867,7 +2899,7 @@ msgstr "Configurações de privacidade para resenhas importadas:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importar"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Linha"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Título"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Chave Openlibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Autor/a"
@@ -3087,10 +3119,6 @@ msgstr "Fale com a administração ou DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Ups!"
@@ -536,12 +570,12 @@ msgstr "Os moderadores e administradores do %(site_name)s mantêm o site atualiz
msgid "Moderator"
msgstr "Moderador"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versão do software:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "A sua menor leitura este ano…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Ver registro do ISNI"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Ver no ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Carregar dados"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Ver na OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Ver no Inventaire"
@@ -797,11 +831,7 @@ msgstr "Ver na LibraryThing"
msgid "View on Goodreads"
msgstr "Ver na Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Ver entrada ISFDB"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Livros por %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Confirmar"
msgid "Unable to connect to remote source."
msgstr "Não foi possível conectar à fonte remota."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Editar Livro"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Clica para adicionar capa"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Não foi possível carregar a capa"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Clica para ampliar"
@@ -1046,13 +1076,13 @@ msgstr "Lugares"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listas"
@@ -1117,8 +1147,8 @@ msgstr "Carregar uma capa:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Carregar capa através de um Url:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Adicionar outro autor(a)"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Capa"
@@ -1455,8 +1485,9 @@ msgstr "Domínio"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Estado"
@@ -1465,7 +1496,7 @@ msgstr "Estado"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Acções"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s páginas"
msgid "%(languages)s language"
msgstr "%(languages)s idioma"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publicado em %(date)s por %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publicado por %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publicado em %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publicado por %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "avalia-o"
@@ -1552,12 +1583,12 @@ msgstr "avalia-o"
msgid "Series by"
msgstr "Série por"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Livro %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Livro não organizado"
@@ -1681,6 +1712,7 @@ msgstr "Sugerido"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s citou %(username)s"
msgstr "Mensagens Diretas com %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Mensagens Diretas"
@@ -1948,7 +1980,7 @@ msgstr "Atualizações"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Os teus Livros"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Adicionar aos teus livros"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Para Ler"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Leituras atuais"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Lido"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Leitura Parada"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "O que andas a ler?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Pesquisar por um livro"
@@ -2046,8 +2078,8 @@ msgstr "Podes adicionar livros quando começas a usar %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Leitor de códigos de barras"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Usar o Feed, Listas e Descubra links para descobrir as últimas notícias do teu feed, listas de livros por tópico, e os últimos acontecimentos nesta instância de Bookwyrm!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "A campainha ficará iluminada quando tiveres uma nova notificação. Quando isso acontecer, carrega nela para descobrires o que de emocionante aconteceu!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Notificações"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "O teu perfil, livros, mensagens diretas e configurações podem ser acedidos carregando no teu nome no menu aqui."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Podes criar ou entrar num grupo com outros utilizadores. Grupos podem pa
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupos"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Este é o teu perfil de utilizador. Todas as tuas atividades mais recentes serão listadas aqui. Os outros utilizadores do Bookwyrm também poderão ver partes desta página - o que podem ver depende das tuas configurações de privacidade."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Perfil de Utilizador"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Este divisor mostra tudo o que leste e que conta para a tua meta de leitura anual, ou permite que definas uma meta. Não é preciso definir uma meta de leitura se não é a tua coisa!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Meta de leitura"
@@ -2795,7 +2827,7 @@ msgstr "Ainda não há atividades para esta hashtag!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importar livros"
@@ -2806,7 +2838,7 @@ msgstr "Não é um ficheiro CSV válido"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
@@ -2867,7 +2899,7 @@ msgstr "Configuração de privacidade para criticas importadas:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importar"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Linha"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Título"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Id da Openlibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Autor(a)"
@@ -3087,10 +3119,6 @@ msgstr "Entra em contato com o administrador do domínio ou DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Ups!"
@@ -536,12 +570,12 @@ msgstr "Moderatorii și administratorii %(site_name)s mențin site-ul în picioa
msgid "Moderator"
msgstr "Moderator"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Admin"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Versiunea programului:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -682,7 +716,7 @@ msgstr "Cea mai scurtă lectură a sa…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -772,24 +806,24 @@ msgid "View ISNI record"
msgstr "Vizualizați intrarea ISNI"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr ""
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Încărcați date"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Vizualizați în OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Vizualizați în Inventaire"
@@ -801,11 +835,7 @@ msgstr "Vizualizați în LibraryThing"
msgid "View on Goodreads"
msgstr "Vizualizați în Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr ""
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Cărți de %(name)s"
@@ -914,7 +944,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -963,19 +993,19 @@ msgstr "Confirmați"
msgid "Unable to connect to remote source."
msgstr "Nu s-a putut stabili conexiunea la distanță."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Editați carte"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Adăugați o copertă"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Eșec la încărcarea coperții"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Clic pentru a mări"
@@ -1052,13 +1082,13 @@ msgstr "Locuri"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Liste"
@@ -1123,8 +1153,8 @@ msgstr "Încărcați copertă:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Încărcați copertă de la URL-ul:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1334,7 +1364,7 @@ msgid "Add Another Author"
msgstr "Adăugați un alt autor"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Copertă"
@@ -1461,8 +1491,9 @@ msgstr "Domeniu"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Status"
@@ -1471,7 +1502,7 @@ msgstr "Status"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Acțiuni"
@@ -1535,22 +1566,22 @@ msgstr "%(pages)s pagini"
msgid "%(languages)s language"
msgstr "%(languages)s Limbă"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publicat în %(date)s de %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publicat de %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publicat în %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publicat de %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "a evaluat-o"
@@ -1558,12 +1589,12 @@ msgstr "a evaluat-o"
msgid "Series by"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr ""
@@ -1687,6 +1718,7 @@ msgstr "Sugerate"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1763,7 +1795,7 @@ msgstr "%(username)s a citat %(username)s"
msgstr "Mesajele directe cu %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Mesaje directe"
@@ -1956,7 +1988,7 @@ msgstr "Actualizări"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Cărțile dvs."
@@ -2004,19 +2036,19 @@ msgid "Add to your books"
msgstr "Adăugați la cărțile dvs."
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "De citit"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Lectură în curs"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2025,7 +2057,7 @@ msgid "Read"
msgstr "Citite"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Lectură oprită"
@@ -2035,7 +2067,7 @@ msgid "What are you reading?"
msgstr "Ce citiți?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Căutați o carte"
@@ -2054,8 +2086,8 @@ msgstr "Puteți adăuga cărți când începeți să folosiți %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2524,8 +2556,8 @@ msgid "Barcode reader"
msgstr "Cititor de cod de bare"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Folosiți legăturile Flux, Liste și Descoperiți pentru a descoperi ultimele știri de pe fluxul dvs., listele de cărți după subiect și ultimele întâmplări de pe acest server de Bookwyrm!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2548,16 +2580,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Clopoțelul se va aprinde când aveți o notificare nouă. Când o face, apăsați-l pentru a descoperi ce lucru interesant s-a întâmplat!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Notificări"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Profilul dvs., cărțile, mesajele directe și setările pot fi accesate făcând clic pe numele dvs. în meniul de aici."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2712,7 +2744,7 @@ msgstr "Puteți crea sau vă alătura unui grup cu alți utilizatori. Grupurile
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupuri"
@@ -2757,7 +2789,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Acesta este profilul dvs. de utilizator. Cele mai recente activități ale dvs. vor fi listate aici. Alți utilizatori BookWyrm pot vedea părți din această pagină de asemenea - ceea ce văd depinde de setările dvs. de confidențialitate."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Profilul utilizatorului"
@@ -2766,7 +2798,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Această fereastră arată tot ce ați citit pentru a vă atinge obiectivul dvs. anual de lectură sau vă permite să stabiliți unul. Nu trebuie să vă fixați un obiectiv de lectură dacă nu este genul vostru!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Obiectiv de lectură"
@@ -2805,7 +2837,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importați cărți"
@@ -2816,7 +2848,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -2878,7 +2910,7 @@ msgstr "Setare de confidențialitate pentru recenziile importate:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importați"
@@ -2979,8 +3011,8 @@ msgid "Row"
msgstr "Linie"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Titlu"
@@ -2993,8 +3025,8 @@ msgid "Openlibrary key"
msgstr "Cheie OpenLibrary"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Autor"
@@ -3100,10 +3132,6 @@ msgstr "Contactați-vă adminul sau DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "Hoppsan!"
@@ -536,12 +570,12 @@ msgstr "%(site_name)s's moderatorer och administratörer håller hemsidan uppe o
msgid "Moderator"
msgstr "Moderator"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "Administratör"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "Programvaruversion:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -680,7 +714,7 @@ msgstr "Det kortast lästa det här året…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -768,24 +802,24 @@ msgid "View ISNI record"
msgstr "Visa ISNI-samling"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "Visa på ISFDB"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "Ladda data"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "Visa i OpenLibrary"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "Visa i Inventaire"
@@ -797,11 +831,7 @@ msgstr "Visa i LibraryThing"
msgid "View on Goodreads"
msgstr "Visa i Goodreads"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "Visa ISFDB-post"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "Böcker av %(name)s"
@@ -910,7 +940,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -959,19 +989,19 @@ msgstr "Bekräfta"
msgid "Unable to connect to remote source."
msgstr "Kunde inte ansluta till fjärrkälla."
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "Redigera bok"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "Klicka för att lägga till omslag"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "Misslyckades med att ladda omslaget"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "Klicka för att förstora"
@@ -1046,13 +1076,13 @@ msgstr "Platser"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "Listor"
@@ -1117,8 +1147,8 @@ msgstr "Ladda upp omslag:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "Ladda omslag från url:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1328,7 +1358,7 @@ msgid "Add Another Author"
msgstr "Lägg till en annan författare"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "Omslag"
@@ -1455,8 +1485,9 @@ msgstr "Domän"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "Status"
@@ -1465,7 +1496,7 @@ msgstr "Status"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "Åtgärder"
@@ -1529,22 +1560,22 @@ msgstr "%(pages)s sidor"
msgid "%(languages)s language"
msgstr "På %(languages)s"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "Publicerades %(date)s av %(publisher)s."
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "Publicerades av %(publisher)s."
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "Publicerades %(date)s"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "Publicerades av %(publisher)s."
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "betygsatte den"
@@ -1552,12 +1583,12 @@ msgstr "betygsatte den"
msgid "Series by"
msgstr "Serier av"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr "Bok %(series_number)s"
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr "Osorterad bok"
@@ -1681,6 +1712,7 @@ msgstr "Föreslagna"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1755,7 +1787,7 @@ msgstr "%(username)s citerade %(username)s"
msgstr "Direktmeddelanden med %(username)s"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "Direktmeddelanden"
@@ -1948,7 +1980,7 @@ msgstr "Uppdateringar"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "Dina böcker"
@@ -1996,19 +2028,19 @@ msgid "Add to your books"
msgstr "Lägg till i dina böcker"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "Att läsa"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "Läser just nu"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2017,7 +2049,7 @@ msgid "Read"
msgstr "Lästa"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "Slutade läsa"
@@ -2027,7 +2059,7 @@ msgid "What are you reading?"
msgstr "Vad läser du?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "Sök efter en bok"
@@ -2046,8 +2078,8 @@ msgstr "Du kan lägga till böcker när du börjar använda %(site_name)s."
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2514,8 +2546,8 @@ msgid "Barcode reader"
msgstr "Streckkodsläsare"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
-msgstr "Använd länkarna Flöde, Listor och Upptäck för att upptäcka de senaste nyheterna från ditt flöde, listor över böcker efter ämne, och de senaste händelserna på denna BookWyrm-server!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
msgid "Navigation Bar"
@@ -2538,16 +2570,16 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr "Klockan lyser upp när du har nya notiser. När den gör det kan du klicka på den för att ta reda på vad för spännande som har hänt!"
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "Aviseringar"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
-msgstr "Din profil, dina böcker, direktmeddelanden och inställningar kan nås genom att klicka på ditt namn i menyn här."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
msgid "Try selecting Profile from the drop down menu to continue the tour."
@@ -2702,7 +2734,7 @@ msgstr "Du kan skapa eller gå med i en grupp med andra användare. Grupper kan
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "Grupper"
@@ -2747,7 +2779,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr "Det här är din användarprofil. Alla dina senaste aktiviteter kommer visas här. Andra BookWyrm-användare kan också se delar av den här sidan, vad de kan se beror på dina sekretessinställningar."
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "Användarprofil"
@@ -2756,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr "Denna flik visar allt du har läst gentemot ditt årliga läsmål eller låter dig ställa in ett. Du behöver inte sätta upp ett läsmål om det inte är din grej!"
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "Läs-mål"
@@ -2795,7 +2827,7 @@ msgstr "Inga aktiviteter för den här hash-taggen än!"
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "Importera böcker"
@@ -2806,7 +2838,7 @@ msgstr "Inte en giltig CSV-fil"
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
msgstr[1] ""
@@ -2867,7 +2899,7 @@ msgstr "Integritetsinställning för importerade recensioner:"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "Importera"
@@ -2966,8 +2998,8 @@ msgid "Row"
msgstr "Rad"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "Titel"
@@ -2980,8 +3012,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary-nyckel"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "Författare"
@@ -3087,10 +3119,6 @@ msgstr "Kontakta din administratör eller %(level)s."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
+#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
+msgid "Not Found"
+msgstr "Не Знайдено"
+
+#: bookwyrm/templates/404.html:9
+msgid "The page you requested doesn't seem to exist!"
+msgstr "Вказана сторінка не існує!"
+
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/500.html:4
+msgid "Oops!"
+msgstr "От халепа!"
+
+#: bookwyrm/templates/500.html:8
+msgid "Server Error"
+msgstr "Помилка Сервера"
+
+#: bookwyrm/templates/500.html:9
+msgid "Something went wrong! Sorry about that."
+msgstr "Щось пішло не так! Вибачте."
+
+#: bookwyrm/templates/about/about.html:9
+#: bookwyrm/templates/about/layout.html:35
+msgid "About"
+msgstr "Про ресурс"
+
+#: bookwyrm/templates/about/about.html:21
+#: bookwyrm/templates/get_started/layout.html:22
+#, python-format
+msgid "Welcome to %(site_name)s!"
+msgstr "Вітаємо вас на %(site_name)s!"
+
+#: bookwyrm/templates/about/about.html:25
+#, python-format
+msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique."
+msgstr "%(site_name)s є частиною BookWyrm, мережі незалежних, самокерованих спільнот для читачів. Ви можете безперешкодно взаємодіяти з користувачами з будь-якого інстансу мережі BookWyrm, але саме ця спільнота унікальна."
+
+#: bookwyrm/templates/about/about.html:45
+#, python-format
+msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5."
+msgstr "%(title)s є найулюбленішою книгою на %(site_name)s. Її середній рейтинг дорівнює %(rating)s з 5."
+
+#: bookwyrm/templates/about/about.html:64
+#, python-format
+msgid "More %(site_name)s users want to read %(title)s than any other book."
+msgstr "Користувачі %(site_name)s хочуть прочитати %(title)s більше ніж будь-яку іншу книгу."
+
+#: bookwyrm/templates/about/about.html:83
+#, python-format
+msgid "%(title)s has the most divisive ratings of any book on %(site_name)s."
+msgstr "%(title)s має найсуперечливіші оцінки серед усіх книг на %(site_name)s."
+
+#: bookwyrm/templates/about/about.html:94
+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, reach out and make yourself heard."
+msgstr "Відстежуйте що читаєте, обговорюйте книги, пишіть рецензії та знаходьте що читати далі. BookWyrm - це програмне забезпечення для людей, а не прибутку. Завжди без реклами, анти-корпоративне та орієнтоване на спільноту. Воно спроектовано так, щоб залишатися невеличким та особистим. Якщо у вас є побажання, баг-репорти або великі задуми, зв'яжитесь з нами та розкажіть про них."
+
+#: bookwyrm/templates/about/about.html:105
+msgid "Meet your admins"
+msgstr "Адміністратори"
+
+#: bookwyrm/templates/about/about.html:108
+#, python-format
+msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior."
+msgstr "Модератори та адміністратори %(site_name)s підтримують працездатність сайту, слідкують за дотриманням правил поведінки та реагують на скарги користувачів про спам і погану поведінку."
+
+#: bookwyrm/templates/about/about.html:122
+msgid "Moderator"
+msgstr "Модератор"
+
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
+msgid "Admin"
+msgstr "Адміністратор"
+
+#: bookwyrm/templates/about/about.html:140
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
+#: bookwyrm/templates/snippets/status/status_options.html:35
+#: bookwyrm/templates/snippets/user_options.html:14
+msgid "Send direct message"
+msgstr "Надішліть особисте повідомлення"
+
+#: bookwyrm/templates/about/conduct.html:4
+#: bookwyrm/templates/about/conduct.html:9
+#: bookwyrm/templates/about/layout.html:41
+#: bookwyrm/templates/snippets/footer.html:27
+msgid "Code of Conduct"
+msgstr "Правила поведінки"
+
+#: bookwyrm/templates/about/impressum.html:4
+#: bookwyrm/templates/about/impressum.html:9
+#: bookwyrm/templates/about/layout.html:54
+#: bookwyrm/templates/snippets/footer.html:34
+msgid "Impressum"
+msgstr "Імпресум"
+
+#: bookwyrm/templates/about/layout.html:11
+msgid "Active users:"
+msgstr "Активні користувачі:"
+
+#: bookwyrm/templates/about/layout.html:15
+msgid "Statuses posted:"
+msgstr "Опубліковані статуси:"
+
+#: bookwyrm/templates/about/layout.html:19
+#: bookwyrm/templates/setup/config.html:74
+msgid "Software version:"
+msgstr "Версія програмного забезпечення:"
+
+#: bookwyrm/templates/about/layout.html:30
+#: bookwyrm/templates/embed-layout.html:34
+#: bookwyrm/templates/snippets/footer.html:8
+#, python-format
+msgid "About %(site_name)s"
+msgstr "Про %(site_name)s"
+
+#: bookwyrm/templates/about/layout.html:47
+#: bookwyrm/templates/about/privacy.html:4
+#: bookwyrm/templates/about/privacy.html:9
+#: bookwyrm/templates/snippets/footer.html:30
+msgid "Privacy Policy"
+msgstr "Політика Конфіденційності"
+
+#: bookwyrm/templates/annual_summary/layout.html:7
+#: bookwyrm/templates/feed/summary_card.html:8
+#, python-format
+msgid "%(year)s in the books"
+msgstr "%(year)s в книгах"
+
+#: bookwyrm/templates/annual_summary/layout.html:43
+#, python-format
+msgid "%(year)s in the books"
+msgstr "%(year)s в книгах"
+
+#: bookwyrm/templates/annual_summary/layout.html:47
+#, python-format
+msgid "%(display_name)s’s year of reading"
+msgstr "Рік читання для %(display_name)s"
+
+#: bookwyrm/templates/annual_summary/layout.html:53
+msgid "Share this page"
+msgstr "Поділитися цією сторінкою"
+
+#: bookwyrm/templates/annual_summary/layout.html:67
+msgid "Copy address"
+msgstr "Скопіювати адресу"
+
+#: bookwyrm/templates/annual_summary/layout.html:68
+#: bookwyrm/templates/lists/list.html:277
+msgid "Copied!"
+msgstr "Скопійовано!"
+
+#: bookwyrm/templates/annual_summary/layout.html:77
+msgid "Sharing status: public with key"
+msgstr "Статус шерінгу: публічний, за ключем"
+
+#: bookwyrm/templates/annual_summary/layout.html:78
+msgid "The page can be seen by anyone with the complete address."
+msgstr "Цю сторінку може переглянути будь-хто за повною адресою."
+
+#: bookwyrm/templates/annual_summary/layout.html:83
+msgid "Make page private"
+msgstr "Зробити сторінку приватною"
+
+#: bookwyrm/templates/annual_summary/layout.html:89
+msgid "Sharing status: private"
+msgstr "Статус шерінгу: приватний"
+
+#: bookwyrm/templates/annual_summary/layout.html:90
+msgid "The page is private, only you can see it."
+msgstr "Сторінка приватна, тільки ви можете її бачити."
+
+#: bookwyrm/templates/annual_summary/layout.html:95
+msgid "Make page public"
+msgstr "Зробити сторінку публічною"
+
+#: bookwyrm/templates/annual_summary/layout.html:99
+msgid "When you make your page private, the old key won’t give access to the page anymore. A new key will be created if the page is once again made public."
+msgstr "Якщо ви зробите свою сторінку приватною, старий ключ більше не надаватиме доступу до сторінки. Якщо сторінка знову стане публічною, буде створено новий ключ."
+
+#: bookwyrm/templates/annual_summary/layout.html:112
+#, python-format
+msgid "Sadly %(display_name)s didn’t finish any books in %(year)s"
+msgstr "На жаль, %(display_name)s не прочитав жодної книги в %(year)s"
+
+#: bookwyrm/templates/annual_summary/layout.html:118
+#, python-format
+msgid "In %(year)s, %(display_name)s read %(books_total)s book%(link_url)s
.%(link_url)s
. %(confirmation_code)s
\" at login."
+msgstr "Або введіть код \"%(confirmation_code)s
\" при вході в систему."
+
+#: bookwyrm/templates/email/confirm/subject.html:2
+msgid "Please confirm your email"
+msgstr "Будь ласка, підтвердьте свою email-адресу"
+
+#: bookwyrm/templates/email/confirm/text_content.html:10
+#, python-format
+msgid "Or enter the code \"%(confirmation_code)s\" at login."
+msgstr "Або введіть код \"%(confirmation_code)s\" при вході в систему."
+
+#: bookwyrm/templates/email/html_layout.html:15
+#: bookwyrm/templates/email/text_layout.html:2
+msgid "Hi there,"
+msgstr "Привіт,"
+
+#: bookwyrm/templates/email/html_layout.html:21
+#, python-format
+msgid "BookWyrm hosted on %(site_name)s"
+msgstr "BookWyrm розміщений на %(site_name)s"
+
+#: bookwyrm/templates/email/html_layout.html:23
+msgid "Email preference"
+msgstr "Налаштування Email"
+
+#: bookwyrm/templates/email/invite/html_content.html:6
+#: bookwyrm/templates/email/invite/subject.html:2
+#, python-format
+msgid "You're invited to join %(site_name)s!"
+msgstr "Вас запрошують приєднатися до %(site_name)s!"
+
+#: bookwyrm/templates/email/invite/html_content.html:9
+msgid "Join Now"
+msgstr "Приєднатися зараз"
+
+#: bookwyrm/templates/email/invite/html_content.html:15
+#, python-format
+msgid "Learn more about %(site_name)s."
+msgstr "Дізнайтеся більше про %(site_name)s."
+
+#: bookwyrm/templates/email/invite/text_content.html:4
+#, python-format
+msgid "You're invited to join %(site_name)s! Click the link below to create an account."
+msgstr "Вас запросили приєднатися до %(site_name)s! Перейдіть за посиланням нижче, щоб акаунт."
+
+#: bookwyrm/templates/email/invite/text_content.html:8
+#, python-format
+msgid "Learn more about %(site_name)s:"
+msgstr "Дізнайтеся більше про %(site_name)s:"
+
+#: bookwyrm/templates/email/moderation_report/html_content.html:8
+#: bookwyrm/templates/email/moderation_report/text_content.html:6
+#, python-format
+msgid "@%(reporter)s has flagged a link domain for moderation."
+msgstr "@%(reporter)s позначив домен посилання на модерацію."
+
+#: bookwyrm/templates/email/moderation_report/html_content.html:14
+#: bookwyrm/templates/email/moderation_report/text_content.html:10
+#, python-format
+msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation."
+msgstr "@%(reporter)s позначає поведінку @%(reportee)s на модерацію."
+
+#: bookwyrm/templates/email/moderation_report/html_content.html:21
+#: bookwyrm/templates/email/moderation_report/text_content.html:15
+msgid "View report"
+msgstr "Переглянути скаргу"
+
+#: bookwyrm/templates/email/moderation_report/subject.html:2
+#, python-format
+msgid "New report for %(site_name)s"
+msgstr "Нова скарга для %(site_name)s"
+
+#: bookwyrm/templates/email/password_reset/html_content.html:6
+#: bookwyrm/templates/email/password_reset/text_content.html:4
+#, python-format
+msgid "You requested to reset your %(site_name)s password. Click the link below to set a new password and log in to your account."
+msgstr "Ви надіслали запит на зміну пароля на сайті %(site_name)s. Перейдіть за посиланням нижче, щоб встановити новий пароль і увійти до свого облікового запису."
+
+#: bookwyrm/templates/email/password_reset/html_content.html:9
+#: bookwyrm/templates/landing/password_reset.html:4
+#: bookwyrm/templates/landing/password_reset.html:10
+#: bookwyrm/templates/landing/password_reset_request.html:4
+#: bookwyrm/templates/landing/password_reset_request.html:10
+msgid "Reset Password"
+msgstr "Скинути пароль"
+
+#: bookwyrm/templates/email/password_reset/html_content.html:13
+#: bookwyrm/templates/email/password_reset/text_content.html:8
+msgid "If you didn't request to reset your password, you can ignore this email."
+msgstr "Якщо ви не запитували зміну пароля, ви можете ігнорувати цей лист."
+
+#: bookwyrm/templates/email/password_reset/subject.html:2
+#, python-format
+msgid "Reset your %(site_name)s password"
+msgstr "Скинути пароль до %(site_name)s"
+
+#: bookwyrm/templates/email/test/html_content.html:6
+#: bookwyrm/templates/email/test/text_content.html:4
+msgid "This is a test email."
+msgstr "Це тест е-пошти."
+
+#: bookwyrm/templates/email/test/subject.html:2
+msgid "Test email"
+msgstr "Перевірка е-пошти"
+
+#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:33
+#: bookwyrm/templates/layout.html:163 bookwyrm/templates/setup/layout.html:15
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
+#, python-format
+msgid "%(site_name)s home page"
+msgstr "Головна сторінка %(site_name)s"
+
+#: bookwyrm/templates/embed-layout.html:40
+#: bookwyrm/templates/snippets/footer.html:12
+msgid "Contact site admin"
+msgstr "Зв'язатися з адміністратором сайту"
+
+#: bookwyrm/templates/embed-layout.html:46
+msgid "Join BookWyrm"
+msgstr "Приєднатися до BookWyrm"
+
+#: bookwyrm/templates/feed/direct_messages.html:8
+#, python-format
+msgid "Direct Messages with %(username)s"
+msgstr "Особисті Повідомлення з %(username)s"
+
+#: bookwyrm/templates/feed/direct_messages.html:10
+#: bookwyrm/templates/user_menu.html:39
+msgid "Direct Messages"
+msgstr "Особисті Повідомлення"
+
+#: bookwyrm/templates/feed/direct_messages.html:13
+msgid "All messages"
+msgstr "Усі повідомлення"
+
+#: bookwyrm/templates/feed/direct_messages.html:22
+msgid "You have no messages right now."
+msgstr "Наразі у вас немає повідомлень."
+
+#: bookwyrm/templates/feed/feed.html:55
+msgid "There aren't any activities right now! Try following a user to get started"
+msgstr "Немає жодних активностей! Для початку, спробуйте підписатися на якогось користувача"
+
+#: bookwyrm/templates/feed/feed.html:56
+msgid "Alternatively, you can try enabling more status types"
+msgstr "Або, ви можете спробувати увімкнути більше типів постів"
+
+#: bookwyrm/templates/feed/goal_card.html:6
+#: bookwyrm/templates/feed/layout.html:14
+#: bookwyrm/templates/user/goal_form.html:6
+#, python-format
+msgid "%(year)s Reading Goal"
+msgstr "Мета читання на %(year)s рік"
+
+#: bookwyrm/templates/feed/goal_card.html:18
+#, python-format
+msgid "You can set or change your reading goal any time from your profile page"
+msgstr "Ви можете задати або змінити ціль читання у будь-який час на сторінці профілю "
+
+#: bookwyrm/templates/feed/layout.html:4
+msgid "Updates"
+msgstr "Оновлення"
+
+#: bookwyrm/templates/feed/suggested_books.html:6
+#: bookwyrm/templates/guided_tour/home.html:127
+#: bookwyrm/templates/layout.html:94
+msgid "Your Books"
+msgstr "Ваші книги"
+
+#: bookwyrm/templates/feed/suggested_books.html:10
+msgid "There are no books here right now! Try searching for a book to get started"
+msgstr "Тут немає жодної книги! Спробуйте пошукати книгу, щоб почати"
+
+#: bookwyrm/templates/feed/suggested_books.html:13
+msgid "Do you have book data from another service like GoodReads?"
+msgstr "Чи є у вас дані книги з іншого сервісу, наприклад, GoodReads?"
+
+#: bookwyrm/templates/feed/suggested_books.html:16
+msgid "Import your reading history"
+msgstr "Імпортувати історію читання"
+
+#: bookwyrm/templates/feed/suggested_users.html:5
+#: bookwyrm/templates/get_started/users.html:6
+msgid "Who to follow"
+msgstr "На кого підписатися"
+
+#: bookwyrm/templates/feed/suggested_users.html:9
+msgid "Don't show suggested users"
+msgstr "Не показувати запропонованих користувачів"
+
+#: bookwyrm/templates/feed/suggested_users.html:14
+msgid "View directory"
+msgstr "Переглянути каталог"
+
+#: bookwyrm/templates/feed/summary_card.html:21
+msgid "The end of the year is the best moment to take stock of all the books read during the last 12 months. How many pages have you read? Which book is your best-rated of the year? We compiled these stats, and more!"
+msgstr "Кінець року - найкращий момент, щоб підбити підсумки всіх книг, прочитаних за останні 12 місяців. Скільки сторінок ви прочитали? Яка книга вам найбільше сподобалась? Ми зібрали цю статистику і не тільки!"
+
+#: bookwyrm/templates/feed/summary_card.html:26
+#, python-format
+msgid "Discover your stats for %(year)s!"
+msgstr "Дослідіть вашу статистику за %(year)s рік!"
+
+#: bookwyrm/templates/get_started/book_preview.html:6
+#, python-format
+msgid "Have you read %(book_title)s?"
+msgstr "Ви прочитали %(book_title)s?"
+
+#: bookwyrm/templates/get_started/book_preview.html:7
+msgid "Add to your books"
+msgstr "Додати до ваших книг"
+
+#: bookwyrm/templates/get_started/book_preview.html:10
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templatetags/shelf_tags.py:14
+msgid "To Read"
+msgstr "В \"Прочитати\""
+
+#: bookwyrm/templates/get_started/book_preview.html:11
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templatetags/shelf_tags.py:15
+msgid "Currently Reading"
+msgstr "Зараз Читаю"
+
+#: bookwyrm/templates/get_started/book_preview.html:12
+#: bookwyrm/templates/shelf/shelf.html:90
+#: bookwyrm/templates/snippets/shelf_selector.html:46
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
+#: bookwyrm/templates/user/user.html:39 bookwyrm/templatetags/shelf_tags.py:16
+msgid "Read"
+msgstr "Прочитано"
+
+#: bookwyrm/templates/get_started/book_preview.html:13
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templatetags/shelf_tags.py:17
+msgid "Stopped Reading"
+msgstr "Читання Зупинено"
+
+#: bookwyrm/templates/get_started/books.html:6
+msgid "What are you reading?"
+msgstr "Що ви читаєте?"
+
+#: bookwyrm/templates/get_started/books.html:9
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
+msgid "Search for a book"
+msgstr "Шукати книгу"
+
+#: bookwyrm/templates/get_started/books.html:11
+#, python-format
+msgid "No books found for \"%(query)s\""
+msgstr "Не знайдено книг по запиту \"%(query)s\""
+
+#: bookwyrm/templates/get_started/books.html:11
+#, python-format
+msgid "You can add books when you start using %(site_name)s."
+msgstr "Ви зможете додавати книги, коли почнете користуватися %(site_name)s."
+
+#: bookwyrm/templates/get_started/books.html:16
+#: bookwyrm/templates/get_started/books.html:17
+#: bookwyrm/templates/get_started/users.html:18
+#: bookwyrm/templates/get_started/users.html:19
+#: bookwyrm/templates/groups/members.html:15
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/search/layout.html:5
+#: bookwyrm/templates/search/layout.html:10
+#: bookwyrm/templates/search/layout.html:32
+msgid "Search"
+msgstr "Пошук"
+
+#: bookwyrm/templates/get_started/books.html:27
+msgid "Suggested Books"
+msgstr "Запропоновані Книги"
+
+#: bookwyrm/templates/get_started/books.html:33
+msgid "Search results"
+msgstr "Результати пошуку"
+
+#: bookwyrm/templates/get_started/books.html:46
+#, python-format
+msgid "Popular on %(site_name)s"
+msgstr "Популярне на %(site_name)s"
+
+#: bookwyrm/templates/get_started/books.html:58
+#: bookwyrm/templates/lists/list.html:230
+msgid "No books found"
+msgstr "Книжок не знайдено"
+
+#: bookwyrm/templates/get_started/books.html:63
+#: bookwyrm/templates/get_started/profile.html:64
+msgid "Save & continue"
+msgstr "Зберегти & продовжити"
+
+#: bookwyrm/templates/get_started/layout.html:5
+#: bookwyrm/templates/landing/layout.html:5
+msgid "Welcome"
+msgstr "Вітаємо"
+
+#: bookwyrm/templates/get_started/layout.html:24
+msgid "These are some first steps to get you started."
+msgstr "Це кілька перших кроків, які допоможуть вам розпочати роботу."
+
+#: bookwyrm/templates/get_started/layout.html:38
+#: bookwyrm/templates/get_started/profile.html:6
+msgid "Create your profile"
+msgstr "Створити свій профіль"
+
+#: bookwyrm/templates/get_started/layout.html:42
+msgid "Add books"
+msgstr "Додати книги"
+
+#: bookwyrm/templates/get_started/layout.html:46
+msgid "Find friends"
+msgstr "Знайти друзів"
+
+#: bookwyrm/templates/get_started/layout.html:52
+msgid "Skip this step"
+msgstr "Пропустити цей крок"
+
+#: bookwyrm/templates/get_started/layout.html:56
+#: bookwyrm/templates/guided_tour/group.html:101
+msgid "Finish"
+msgstr "Завершити"
+
+#: bookwyrm/templates/get_started/profile.html:15
+#: bookwyrm/templates/preferences/edit_user.html:41
+msgid "Display name:"
+msgstr "Відображуване ім'я:"
+
+#: bookwyrm/templates/get_started/profile.html:29
+#: bookwyrm/templates/preferences/edit_user.html:47
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:49
+msgid "Summary:"
+msgstr "Підсумок:"
+
+#: bookwyrm/templates/get_started/profile.html:34
+msgid "A little bit about you"
+msgstr "Трохи про вас"
+
+#: bookwyrm/templates/get_started/profile.html:43
+#: bookwyrm/templates/preferences/edit_user.html:27
+msgid "Avatar:"
+msgstr "Аватар:"
+
+#: bookwyrm/templates/get_started/profile.html:52
+msgid "Manually approve followers:"
+msgstr "Підтверджувати підписників вручну:"
+
+#: bookwyrm/templates/get_started/profile.html:58
+msgid "Show this account in suggested users:"
+msgstr "Показувати цей акаунт в запропонованих користувачах:"
+
+#: bookwyrm/templates/get_started/profile.html:62
+msgid "Your account will show up in the directory, and may be recommended to other BookWyrm users."
+msgstr "Ваш акаунт буде показуватися в каталозі, та може бути рекомендований іншим користувачам BookWyrm."
+
+#: bookwyrm/templates/get_started/users.html:8
+msgid "You can follow users on other BookWyrm instances and federated services like Mastodon."
+msgstr "Ви можете слідкувати за користувачами з інших інстансів BookWyrm або федеративних сервісів на кшталт Mastodon."
+
+#: bookwyrm/templates/get_started/users.html:11
+msgid "Search for a user"
+msgstr "Пошук користувача"
+
+#: bookwyrm/templates/get_started/users.html:13
+#, python-format
+msgid "No users found for \"%(query)s\""
+msgstr "По запиту \"%(query)s\" користувачів не знайдено"
+
+#: bookwyrm/templates/groups/create_form.html:5
+#: bookwyrm/templates/guided_tour/user_groups.html:32
+#: bookwyrm/templates/user/groups.html:22
+msgid "Create group"
+msgstr "Створити групу"
+
+#: bookwyrm/templates/groups/created_text.html:4
+#, python-format
+msgid "Managed by %(username)s"
+msgstr "Керує %(username)s"
+
+#: bookwyrm/templates/groups/delete_group_modal.html:4
+msgid "Delete this group?"
+msgstr "Видалити цю групу?"
+
+#: bookwyrm/templates/groups/delete_group_modal.html:7
+#: bookwyrm/templates/lists/delete_list_modal.html:7
+#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:12
+#: bookwyrm/templates/settings/imports/complete_import_modal.html:7
+msgid "This action cannot be un-done"
+msgstr "Цю дію не можна скасувати"
+
+#: bookwyrm/templates/groups/delete_group_modal.html:17
+#: bookwyrm/templates/lists/delete_list_modal.html:19
+#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:29
+#: bookwyrm/templates/settings/announcements/announcement.html:23
+#: bookwyrm/templates/settings/announcements/announcements.html:56
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:49
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:36
+#: bookwyrm/templates/snippets/follow_request_buttons.html:12
+#: bookwyrm/templates/snippets/join_invitation_buttons.html:14
+msgid "Delete"
+msgstr "Видалити"
+
+#: bookwyrm/templates/groups/edit_form.html:5
+msgid "Edit Group"
+msgstr "Редагувати групу"
+
+#: bookwyrm/templates/groups/form.html:8
+msgid "Group Name:"
+msgstr "Назва групи:"
+
+#: bookwyrm/templates/groups/form.html:12
+msgid "Group Description:"
+msgstr "Опис групи:"
+
+#: bookwyrm/templates/groups/form.html:21
+msgid "Delete group"
+msgstr "Видалити групу"
+
+#: bookwyrm/templates/groups/group.html:21
+msgid "Members of this group can create group-curated lists."
+msgstr "Учасники цієї групи можуть створювати списки, які куруються групою."
+
+#: bookwyrm/templates/groups/group.html:26
+#: bookwyrm/templates/lists/create_form.html:5
+#: bookwyrm/templates/lists/lists.html:20
+msgid "Create List"
+msgstr "Створити список"
+
+#: bookwyrm/templates/groups/group.html:39
+msgid "This group has no lists"
+msgstr "Ця група не має списків"
+
+#: bookwyrm/templates/groups/layout.html:17
+msgid "Edit group"
+msgstr "Редагувати групу"
+
+#: bookwyrm/templates/groups/members.html:11
+msgid "Search to add a user"
+msgstr "Пошук, щоб додати користувача"
+
+#: bookwyrm/templates/groups/members.html:32
+msgid "Leave group"
+msgstr "Покинути групу"
+
+#: bookwyrm/templates/groups/members.html:54
+#: bookwyrm/templates/groups/suggested_users.html:35
+#: bookwyrm/templates/snippets/suggested_users.html:31
+#: bookwyrm/templates/user/user_preview.html:39
+#: bookwyrm/templates/user/user_preview.html:47
+msgid "Follows you"
+msgstr "Слідкує за вами"
+
+#: bookwyrm/templates/groups/suggested_users.html:7
+msgid "Add new members!"
+msgstr "Додавайте нових учасників!"
+
+#: bookwyrm/templates/groups/suggested_users.html:20
+#: bookwyrm/templates/snippets/suggested_users.html:16
+#, python-format
+msgid "%(mutuals)s follower you follow"
+msgid_plural "%(mutuals)s followers you follow"
+msgstr[0] "%(mutuals)s підписник, за яким ви стежите"
+msgstr[1] "%(mutuals)s підписників, за якими ви стежите"
+msgstr[2] "%(mutuals)s підписників, за якими ви стежите"
+msgstr[3] "%(mutuals)s підписників, за якими ви стежите"
+
+#: bookwyrm/templates/groups/suggested_users.html:27
+#: bookwyrm/templates/snippets/suggested_users.html:23
+#, python-format
+msgid "%(shared_books)s book on your shelves"
+msgid_plural "%(shared_books)s books on your shelves"
+msgstr[0] "%(shared_books)s книга на ваших полицях"
+msgstr[1] "%(shared_books)s книги на ваших полицях"
+msgstr[2] "%(shared_books)s книг на ваших полицях"
+msgstr[3] "%(shared_books)s книг на ваших полицях"
+
+#: bookwyrm/templates/groups/suggested_users.html:43
+#, python-format
+msgid "No potential members found for \"%(user_query)s\""
+msgstr "Не знайдено потенційних учасників по запиту \"%(user_query)s\""
+
+#: bookwyrm/templates/groups/user_groups.html:15
+msgid "Manager"
+msgstr "Керівник"
+
+#: bookwyrm/templates/groups/user_groups.html:35
+msgid "No groups found."
+msgstr "Жодної групи не знайдено."
+
+#: bookwyrm/templates/guided_tour/book.html:10
+msgid "This is home page of a book. Let's see what you can do while you're here!"
+msgstr "Це домашня сторінка книги. Подивімось, що ви можете зробити, поки ви тут!"
+
+#: bookwyrm/templates/guided_tour/book.html:11
+msgid "Book page"
+msgstr "Сторінка книги"
+
+#: bookwyrm/templates/guided_tour/book.html:19
+#: bookwyrm/templates/guided_tour/group.html:19
+#: bookwyrm/templates/guided_tour/lists.html:22
+#: bookwyrm/templates/guided_tour/search.html:29
+#: bookwyrm/templates/guided_tour/search.html:56
+#: bookwyrm/templates/guided_tour/user_books.html:19
+#: bookwyrm/templates/guided_tour/user_groups.html:19
+#: bookwyrm/templates/guided_tour/user_profile.html:19
+msgid "End Tour"
+msgstr "Завершити тур"
+
+#: bookwyrm/templates/guided_tour/book.html:26
+#: bookwyrm/templates/guided_tour/book.html:50
+#: bookwyrm/templates/guided_tour/book.html:74
+#: bookwyrm/templates/guided_tour/book.html:97
+#: bookwyrm/templates/guided_tour/book.html:122
+#: bookwyrm/templates/guided_tour/book.html:146
+#: bookwyrm/templates/guided_tour/book.html:170
+#: bookwyrm/templates/guided_tour/book.html:194
+#: bookwyrm/templates/guided_tour/book.html:219
+#: bookwyrm/templates/guided_tour/book.html:243
+#: bookwyrm/templates/guided_tour/book.html:268
+#: bookwyrm/templates/guided_tour/book.html:274
+#: bookwyrm/templates/guided_tour/group.html:26
+#: bookwyrm/templates/guided_tour/group.html:49
+#: bookwyrm/templates/guided_tour/group.html:72
+#: bookwyrm/templates/guided_tour/group.html:95
+#: bookwyrm/templates/guided_tour/home.html:74
+#: bookwyrm/templates/guided_tour/home.html:97
+#: bookwyrm/templates/guided_tour/home.html:121
+#: bookwyrm/templates/guided_tour/home.html:146
+#: bookwyrm/templates/guided_tour/home.html:171
+#: bookwyrm/templates/guided_tour/home.html:195
+#: bookwyrm/templates/guided_tour/lists.html:29
+#: bookwyrm/templates/guided_tour/lists.html:53
+#: bookwyrm/templates/guided_tour/lists.html:76
+#: bookwyrm/templates/guided_tour/lists.html:100
+#: bookwyrm/templates/guided_tour/lists.html:123
+#: bookwyrm/templates/guided_tour/search.html:36
+#: bookwyrm/templates/guided_tour/search.html:63
+#: bookwyrm/templates/guided_tour/search.html:89
+#: bookwyrm/templates/guided_tour/search.html:116
+#: bookwyrm/templates/guided_tour/search.html:140
+#: bookwyrm/templates/guided_tour/user_books.html:26
+#: bookwyrm/templates/guided_tour/user_books.html:50
+#: bookwyrm/templates/guided_tour/user_books.html:73
+#: bookwyrm/templates/guided_tour/user_books.html:96
+#: bookwyrm/templates/guided_tour/user_groups.html:26
+#: bookwyrm/templates/guided_tour/user_groups.html:50
+#: bookwyrm/templates/guided_tour/user_groups.html:73
+#: bookwyrm/templates/guided_tour/user_groups.html:97
+#: bookwyrm/templates/guided_tour/user_profile.html:26
+#: bookwyrm/templates/guided_tour/user_profile.html:49
+#: bookwyrm/templates/guided_tour/user_profile.html:72
+#: bookwyrm/templates/guided_tour/user_profile.html:95
+#: bookwyrm/templates/guided_tour/user_profile.html:118
+#: bookwyrm/templates/snippets/pagination.html:30
+msgid "Next"
+msgstr "Далі"
+
+#: bookwyrm/templates/guided_tour/book.html:31
+msgid "This is where you can set a reading status for this book. You can press the button to move to the next stage, or use the drop down button to select the reading status you want to set."
+msgstr "Тут ви можете встановити статус читання для цієї книги. Ви можете натиснути кнопку, щоб перейти до наступного етапу, або скористатися випадаючим списком, щоб вибрати статус читання, який ви хочете встановити."
+
+#: bookwyrm/templates/guided_tour/book.html:32
+msgid "Reading status"
+msgstr "Статус читання"
+
+#: bookwyrm/templates/guided_tour/book.html:55
+msgid "You can also manually add reading dates here. Unlike changing the reading status using the previous method, adding dates manually will not automatically add them to your Read or Reading shelves."
+msgstr "Ви також можете додати дати читання вручну. На відміну від зміни статусу читання за допомогою попереднього методу, додавання дат вручну не додасть їх до полиць Прочитано або Читаю."
+
+#: bookwyrm/templates/guided_tour/book.html:55
+msgid "Got a favourite you re-read every year? We've got you covered - you can add multiple read dates for the same book 😀"
+msgstr "Є улюблена книга, яку ви перечитуєте щороку? Ми про це подбали - ви можете додати кілька дат читання однієї і тієї ж книги 😀"
+
+#: bookwyrm/templates/guided_tour/book.html:79
+msgid "There can be multiple editions of a book, in various formats or languages. You can choose which edition you want to use."
+msgstr "Може існувати кілька видань книги, у різних форматах або на різних мовах. Ви можете вибрати, яке видання ви хочете використовувати."
+
+#: bookwyrm/templates/guided_tour/book.html:80
+msgid "Other editions"
+msgstr "Інші видання"
+
+#: bookwyrm/templates/guided_tour/book.html:102
+msgid "You can post a review, comment, or quote here."
+msgstr "Тут ви можете залишити рецензію, коментар або цитату."
+
+#: bookwyrm/templates/guided_tour/book.html:103
+msgid "Share your thoughts"
+msgstr "Поділіться своїми думками"
+
+#: bookwyrm/templates/guided_tour/book.html:127
+msgid "If you have read this book you can post a review including an optional star rating"
+msgstr "Якщо ви прочитали цю книгу, ви можете написати рецензію та оцінити її в зірках"
+
+#: bookwyrm/templates/guided_tour/book.html:128
+msgid "Post a review"
+msgstr "Написати рецензію"
+
+#: bookwyrm/templates/guided_tour/book.html:151
+msgid "You can share your thoughts on this book generally with a simple comment"
+msgstr "Ви можете поділитися загальними думками про цю книжку за допомогою простого коментаря"
+
+#: bookwyrm/templates/guided_tour/book.html:152
+msgid "Post a comment"
+msgstr "Написати коментар"
+
+#: bookwyrm/templates/guided_tour/book.html:175
+msgid "Just read some perfect prose? Let the world know by sharing a quote!"
+msgstr "Щойно прочитали чудову книгу? Розкажіть про це всьому світу, поділившись цитатою!"
+
+#: bookwyrm/templates/guided_tour/book.html:176
+msgid "Share a quote"
+msgstr "Поділитися цитатою"
+
+#: bookwyrm/templates/guided_tour/book.html:199
+msgid "If your review or comment might ruin the book for someone who hasn't read it yet, you can hide your post behind a spoiler alert"
+msgstr "Якщо ваша рецензія або коментар може враження від книги для тих, хто її ще не читав, ви можете приховати свій пост під спойлером"
+
+#: bookwyrm/templates/guided_tour/book.html:200
+msgid "Spoiler alerts"
+msgstr "Попередження про спойлери"
+
+#: bookwyrm/templates/guided_tour/book.html:224
+msgid "Choose who can see your post here. Post privacy can be Public (everyone can see), Unlisted (everyone can see, but it doesn't appear in public feeds or discovery pages), Followers (only your followers can see), or Private (only you can see)"
+msgstr "Виберіть, хто може бачити ваш пост тут. Конфіденційність постів може бути Публічною (бачити може кожен), Не в стрічці (кожен може бачити, але пост не відображається в публічних стрічках або на сторінці \"Відкриття\"), Підписники (побачити можуть тільки ваші підписники), або Приватною (бачите тільки ви)"
+
+#: bookwyrm/templates/guided_tour/book.html:225
+#: bookwyrm/templates/snippets/privacy_select.html:6
+#: bookwyrm/templates/snippets/privacy_select_no_followers.html:6
+msgid "Post privacy"
+msgstr "Видимість постів"
+
+#: bookwyrm/templates/guided_tour/book.html:248
+msgid "Some ebooks can be downloaded for free from external sources. They will be shown here."
+msgstr "Деякі електронні книги можна завантажити безкоштовно з зовнішніх джерел. Вони будуть відображені тут."
+
+#: bookwyrm/templates/guided_tour/book.html:249
+msgid "Download links"
+msgstr "Посилання для завантаження"
+
+#: bookwyrm/templates/guided_tour/book.html:273
+msgid "Continue the tour by selecting Your books from the drop down menu."
+msgstr "Щоб продовжити тур, оберіть Ваші книги у випадаючому меню."
+
+#: bookwyrm/templates/guided_tour/book.html:296
+#: bookwyrm/templates/guided_tour/home.html:50
+#: bookwyrm/templates/guided_tour/home.html:218
+#: bookwyrm/templates/guided_tour/search.html:161
+#: bookwyrm/templates/guided_tour/user_books.html:124
+#: bookwyrm/templates/guided_tour/user_groups.html:116
+#: bookwyrm/templates/guided_tour/user_profile.html:141
+msgid "Ok"
+msgstr "Ок"
+
+#: bookwyrm/templates/guided_tour/group.html:10
+msgid "Welcome to the page for your group! This is where you can add and remove users, create user-curated lists, and edit the group details."
+msgstr "Ласкаво просимо на сторінку вашої групи! Тут ви можете додавати та видаляти користувачів, створювати користувацькі списки та редагувати інформацію про групу."
+
+#: bookwyrm/templates/guided_tour/group.html:11
+msgid "Your group"
+msgstr "Ваша група"
+
+#: bookwyrm/templates/guided_tour/group.html:31
+msgid "Use this search box to find users to join your group. Currently users must be members of the same Bookwyrm instance and be invited by the group owner."
+msgstr "Використовуйте це поле пошуку, щоб шукати користувачів, які можуть приєднатися до вашої групи. Наразі користувачі повинні бути учасниками одного інстансу Bookwyrm і бути запрошеними власником групи."
+
+#: bookwyrm/templates/guided_tour/group.html:32
+msgid "Find users"
+msgstr "Пошук користувачів"
+
+#: bookwyrm/templates/guided_tour/group.html:54
+msgid "Your group members will appear here. The group owner is marked with a star symbol."
+msgstr "Тут з'являться учасники вашої групи. Власник групи позначений символом зірочки."
+
+#: bookwyrm/templates/guided_tour/group.html:55
+msgid "Group members"
+msgstr "Учасники групи"
+
+#: bookwyrm/templates/guided_tour/group.html:77
+msgid "As well as creating lists from the Lists page, you can create a group-curated list here on the group's homepage. Any member of the group can create a list curated by group members."
+msgstr "Окрім створення списків зі сторінки \"Списки\", ви можете створити список, що буде куруватися групою, на головній сторінці групи. Кожен учасник групи може створити список, який буде куруватися іншими учасниками групи."
+
+#: bookwyrm/templates/guided_tour/group.html:78
+msgid "Group lists"
+msgstr "Списки груп"
+
+#: bookwyrm/templates/guided_tour/group.html:100
+msgid "Congratulations, you've finished the tour! Now you know the basics, but there is lots more to explore on your own. Happy reading!"
+msgstr "Вітаємо, ви закінчили тур! Тепер ви знаєте основи, але самостійне дослідження Bookwyrm набагато цікавіше. Приємного читання!"
+
+#: bookwyrm/templates/guided_tour/group.html:115
+msgid "End tour"
+msgstr "Завершити тур"
+
+#: bookwyrm/templates/guided_tour/home.html:16
+msgid "Welcome to Bookwyrm!%(remote_domain)s
does not support identity discovery"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:17
+#, python-format
+msgid "%(account)s was found but %(remote_domain)s
does not support 'remote follow'"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:18
+#, python-format
+msgid "Try searching for %(user)s on %(remote_domain)s
instead"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:46
+#, python-format
+msgid "Something went wrong trying to follow %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:47
+msgid "Check you have the correct username before trying again."
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:51
+#, python-format
+msgid "You have blocked %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:55
+#, python-format
+msgid "%(account)s has blocked you"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:59
+#, python-format
+msgid "You are already following %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/error.html:63
+#, python-format
+msgid "You have already requested to follow %(account)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:6
+#, python-format
+msgid "Follow %(username)s on the fediverse"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:33
+#, python-format
+msgid "Follow %(username)s from another Fediverse account like BookWyrm, Mastodon, or Pleroma."
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:40
+msgid "User handle to follow from:"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow.html:42
+msgid "Follow!"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow_button.html:15
+msgid "Follow on Fediverse"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/remote_follow_button.html:19
+msgid "This link opens in a pop-up window"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:8
+#, python-format
+msgid "Log in to %(sitename)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:10
+#, python-format
+msgid "Error following from %(sitename)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:12
+#: bookwyrm/templates/ostatus/subscribe.html:22
+#, python-format
+msgid "Follow from %(sitename)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:18
+msgid "Uh oh..."
+msgstr "От халепа..."
+
+#: bookwyrm/templates/ostatus/subscribe.html:20
+msgid "Let's log in first..."
+msgstr ""
+
+#: bookwyrm/templates/ostatus/subscribe.html:51
+#, python-format
+msgid "Follow %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/ostatus/success.html:28
+#, python-format
+msgid "You are now following %(display_name)s!"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:4
+#: bookwyrm/templates/preferences/2fa.html:7
+#: bookwyrm/templates/preferences/layout.html:24
+msgid "Two Factor Authentication"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:16
+msgid "Successfully updated 2FA settings"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:24
+msgid "Write down or copy and paste these codes somewhere safe."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:25
+msgid "You must use them in order, and they will not be displayed again."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:35
+msgid "Two Factor Authentication is active on your account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:36
+#: bookwyrm/templates/preferences/disable-2fa.html:4
+#: bookwyrm/templates/preferences/disable-2fa.html:7
+msgid "Disable 2FA"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:39
+msgid "You can generate backup codes to use in case you do not have access to your authentication app. If you generate new codes, any backup codes previously generated will no longer work."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:40
+msgid "Generate backup codes"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:45
+msgid "Scan the QR code with your authentication app and then enter the code from your app below to confirm your app is set up."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:52
+msgid "Use setup key"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:58
+msgid "Account name:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:65
+msgid "Code:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:73
+msgid "Enter the code from your app:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:83
+msgid "You can make your account more secure by using Two Factor Authentication (2FA). This will require you to enter a one-time code using a phone app like Authy, Google Authenticator or Microsoft Authenticator each time you log in."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:85
+msgid "Confirm your password to begin setting up 2FA."
+msgstr ""
+
+#: bookwyrm/templates/preferences/2fa.html:95
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:37
+msgid "Set up 2FA"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr "Перемістити обліковий запис"
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr "Створити псевдонім"
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr "Додайте інший обліковий запис як псевдонім"
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr "Позначення іншого облікового запису як псевдоніма потрібно, якщо ви хочете перемістити той обліковий запис до цього."
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr "Це дія, яку можна повернути, тому вона не змінить функціональність цього облікового запису."
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr "Введіть ім’я користувача для облікового запису, який ви хочете додати як псевдонім, наприклад user@example.com :"
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr "Підтвердити ваш пароль:"
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr "Псевдоніми"
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr "Видалити псевдонім"
+
+#: bookwyrm/templates/preferences/blocks.html:4
+#: bookwyrm/templates/preferences/blocks.html:7
+#: bookwyrm/templates/preferences/layout.html:54
+msgid "Blocked Users"
+msgstr ""
+
+#: bookwyrm/templates/preferences/blocks.html:12
+msgid "No users currently blocked."
+msgstr ""
+
+#: bookwyrm/templates/preferences/change_password.html:4
+#: bookwyrm/templates/preferences/change_password.html:7
+#: bookwyrm/templates/preferences/change_password.html:37
+#: bookwyrm/templates/preferences/layout.html:20
+msgid "Change Password"
+msgstr ""
+
+#: bookwyrm/templates/preferences/change_password.html:15
+msgid "Successfully changed password"
+msgstr ""
+
+#: bookwyrm/templates/preferences/change_password.html:22
+msgid "Current password:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/change_password.html:28
+msgid "New password:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/delete_user.html:4
+#: bookwyrm/templates/preferences/delete_user.html:7
+#: bookwyrm/templates/preferences/delete_user.html:40
+#: bookwyrm/templates/preferences/layout.html:36
+#: bookwyrm/templates/settings/users/delete_user_form.html:22
+msgid "Delete Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/delete_user.html:12
+msgid "Deactivate account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/delete_user.html:15
+msgid "Your account will be hidden. You can log back in at any time to re-activate your account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/delete_user.html:20
+msgid "Deactivate Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/delete_user.html:26
+msgid "Permanently delete account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/delete_user.html:29
+msgid "Deleting your account cannot be undone. The username will not be available to register in the future."
+msgstr ""
+
+#: bookwyrm/templates/preferences/disable-2fa.html:12
+msgid "Disable Two Factor Authentication"
+msgstr ""
+
+#: bookwyrm/templates/preferences/disable-2fa.html:14
+msgid "Disabling 2FA will allow anyone with your username and password to log in to your account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/disable-2fa.html:20
+msgid "Turn off 2FA"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:4
+#: bookwyrm/templates/preferences/edit_user.html:7
+#: bookwyrm/templates/preferences/layout.html:15
+msgid "Edit Profile"
+msgstr "Редагувати Профіль"
+
+#: bookwyrm/templates/preferences/edit_user.html:12
+#: bookwyrm/templates/preferences/edit_user.html:25
+#: bookwyrm/templates/settings/users/user_info.html:8
+#: bookwyrm/templates/user_menu.html:29
+msgid "Profile"
+msgstr "Профіль"
+
+#: bookwyrm/templates/preferences/edit_user.html:13
+#: bookwyrm/templates/preferences/edit_user.html:64
+#: bookwyrm/templates/settings/site.html:11
+#: bookwyrm/templates/settings/site.html:89
+#: bookwyrm/templates/setup/config.html:91
+msgid "Display"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:14
+#: bookwyrm/templates/preferences/edit_user.html:112
+msgid "Privacy"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:69
+msgid "Show reading goal prompt in feed"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:75
+msgid "Show suggested users"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:81
+msgid "Show this account in suggested users"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:85
+#, python-format
+msgid "Your account will show up in the directory, and may be recommended to other BookWyrm users."
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:89
+msgid "Preferred Timezone: "
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:101
+msgid "Theme:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:117
+msgid "Manually approve followers"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:123
+msgid "Hide followers and following on profile"
+msgstr "Приховати підписників і підписки в профілі"
+
+#: bookwyrm/templates/preferences/edit_user.html:128
+msgid "Default post privacy:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/edit_user.html:136
+#, python-format
+msgid "Looking for shelf privacy? You can set a separate visibility level for each of your shelves. Go to Your Books, pick a shelf from the tab bar, and click \"Edit shelf.\""
+msgstr ""
+
+#: bookwyrm/templates/preferences/export.html:4
+#: bookwyrm/templates/preferences/export.html:7
+msgid "CSV Export"
+msgstr "Експорт CSV"
+
+#: bookwyrm/templates/preferences/export.html:13
+msgid "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity."
+msgstr ""
+
+#: bookwyrm/templates/preferences/export.html:20
+msgid "Download file"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:11
+msgid "Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:39
+msgid "Data"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:47
+msgid "CSV export"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:50
+msgid "Relationships"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/reading_progress/finish.html:5
+#, python-format
+msgid "Finish \"%(book_title)s\""
+msgstr "Завершити Читати \"%(book_title)s\""
+
+#: bookwyrm/templates/reading_progress/start.html:5
+#, python-format
+msgid "Start \"%(book_title)s\""
+msgstr "Почати Читати \"%(book_title)s\""
+
+#: bookwyrm/templates/reading_progress/stop.html:5
+#, python-format
+msgid "Stop Reading \"%(book_title)s\""
+msgstr "Припинити Читати \"%(book_title)s\""
+
+#: bookwyrm/templates/reading_progress/want.html:5
+#, python-format
+msgid "Want to Read \"%(book_title)s\""
+msgstr "Хочу Прочитати \"%(book_title)s\""
+
+#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:4
+msgid "Delete these read dates?"
+msgstr "Видалити ці дати читання?"
+
+#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:8
+#, python-format
+msgid "You are deleting this readthrough and its %(count)s associated progress updates."
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough.html:6
+#: bookwyrm/templates/readthrough/readthrough_modal.html:8
+#, python-format
+msgid "Update read dates for \"%(title)s\""
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_form.html:10
+#: bookwyrm/templates/readthrough/readthrough_modal.html:38
+#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:24
+#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:21
+#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:24
+msgid "Started reading"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_form.html:18
+#: bookwyrm/templates/readthrough/readthrough_modal.html:56
+msgid "Progress"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_form.html:25
+#: bookwyrm/templates/readthrough/readthrough_modal.html:63
+#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:32
+msgid "Finished reading"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:9
+msgid "Progress Updates:"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:14
+msgid "finished"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:16
+msgid "stopped"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:27
+msgid "Show all updates"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:43
+msgid "Delete this progress update"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:55
+msgid "started"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:62
+msgid "Edit read dates"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_list.html:70
+msgid "Delete these read dates"
+msgstr ""
+
+#: bookwyrm/templates/readthrough/readthrough_modal.html:12
+#, python-format
+msgid "Add read dates for \"%(title)s\""
+msgstr ""
+
+#: bookwyrm/templates/report.html:5
+#: bookwyrm/templates/snippets/report_button.html:13
+msgid "Report"
+msgstr ""
+
+#: bookwyrm/templates/search/barcode_modal.html:5
+msgid "\n"
+" Scan Barcode\n"
+" "
+msgstr "\n"
+" Сканувати Штрих-код\n"
+" "
+
+#: bookwyrm/templates/search/barcode_modal.html:21
+msgid "Requesting camera..."
+msgstr "Запитуємо камеру..."
+
+#: bookwyrm/templates/search/barcode_modal.html:22
+msgid "Grant access to the camera to scan a book's barcode."
+msgstr ""
+
+#: bookwyrm/templates/search/barcode_modal.html:27
+msgid "Could not access camera"
+msgstr ""
+
+#: bookwyrm/templates/search/barcode_modal.html:31
+msgctxt "barcode scanner"
+msgid "Scanning..."
+msgstr "Сканування..."
+
+#: bookwyrm/templates/search/barcode_modal.html:32
+msgid "Align your book's barcode with the camera."
+msgstr ""
+
+#: bookwyrm/templates/search/barcode_modal.html:36
+msgctxt "barcode scanner"
+msgid "ISBN scanned"
+msgstr "ISBN відскановано"
+
+#: bookwyrm/templates/search/barcode_modal.html:37
+msgctxt "followed by ISBN"
+msgid "Searching for book:"
+msgstr ""
+
+#: bookwyrm/templates/search/book.html:25
+#, python-format
+msgid "%(formatted_review_count)s review"
+msgid_plural "%(formatted_review_count)s reviews"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: bookwyrm/templates/search/book.html:34
+#, python-format
+msgid "(published %(pub_year)s)"
+msgstr ""
+
+#: bookwyrm/templates/search/book.html:50
+msgid "Results from"
+msgstr ""
+
+#: bookwyrm/templates/search/book.html:89
+msgid "Import book"
+msgstr ""
+
+#: bookwyrm/templates/search/book.html:113
+msgid "Load results from other catalogues"
+msgstr ""
+
+#: bookwyrm/templates/search/book.html:117
+msgid "Manually add book"
+msgstr "Додати книгу вручну"
+
+#: bookwyrm/templates/search/book.html:122
+msgid "Log in to import or add books."
+msgstr ""
+
+#: bookwyrm/templates/search/layout.html:17
+msgid "Search query"
+msgstr ""
+
+#: bookwyrm/templates/search/layout.html:20
+msgid "Search type"
+msgstr ""
+
+#: bookwyrm/templates/search/layout.html:24
+#: bookwyrm/templates/search/layout.html:47
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27
+#: bookwyrm/templates/settings/federation/instance_list.html:52
+#: bookwyrm/templates/settings/layout.html:36
+#: bookwyrm/templates/settings/users/user.html:13
+#: bookwyrm/templates/settings/users/user_admin.html:5
+#: bookwyrm/templates/settings/users/user_admin.html:12
+msgid "Users"
+msgstr ""
+
+#: bookwyrm/templates/search/layout.html:59
+#, python-format
+msgid "No results found for \"%(query)s\""
+msgstr ""
+
+#: bookwyrm/templates/search/layout.html:61
+#, python-format
+msgid "%(result_count)s result found"
+msgid_plural "%(result_count)s results found"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:5
+#: bookwyrm/templates/settings/announcements/announcement.html:8
+msgid "Announcement"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:16
+#: bookwyrm/templates/settings/federation/instance.html:93
+#: bookwyrm/templates/snippets/status/status_options.html:25
+msgid "Edit"
+msgstr "Редагувати"
+
+#: bookwyrm/templates/settings/announcements/announcement.html:32
+#: bookwyrm/templates/settings/announcements/announcements.html:3
+#: bookwyrm/templates/settings/announcements/announcements.html:5
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:15
+#: bookwyrm/templates/settings/layout.html:99
+msgid "Announcements"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:45
+msgid "Visible:"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:49
+msgid "True"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:51
+msgid "False"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:57
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:79
+#: bookwyrm/templates/settings/dashboard/dashboard.html:80
+msgid "Start date:"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:62
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:89
+#: bookwyrm/templates/settings/dashboard/dashboard.html:86
+msgid "End date:"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcement.html:66
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:109
+msgid "Active:"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:9
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:8
+msgid "Create Announcement"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:21
+#: bookwyrm/templates/settings/federation/instance_list.html:40
+msgid "Date added"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:25
+msgid "Preview"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:29
+msgid "Start date"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:33
+msgid "End date"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:50
+msgid "active"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:50
+msgid "inactive"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/announcements.html:63
+msgid "No announcements found"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:6
+msgid "Edit Announcement"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:45
+msgid "Announcement content"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:57
+msgid "Details:"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:65
+msgid "Event date:"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:73
+msgid "Display settings"
+msgstr ""
+
+#: bookwyrm/templates/settings/announcements/edit_announcement.html:98
+msgid "Color:"
+msgstr "Колір:"
+
+#: bookwyrm/templates/settings/automod/rules.html:7
+#: bookwyrm/templates/settings/automod/rules.html:11
+#: bookwyrm/templates/settings/layout.html:61
+msgid "Auto-moderation rules"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:18
+msgid "Auto-moderation rules will create reports for any local user or status with fields matching the provided string."
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:19
+msgid "Users or statuses that have already been reported (regardless of whether the report was resolved) will not be flagged."
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:26
+msgid "Schedule:"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:33
+msgid "Last run:"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:40
+msgid "Total run count:"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:47
+msgid "Enabled:"
+msgstr "Увімкнено:"
+
+#: bookwyrm/templates/settings/automod/rules.html:59
+msgid "Delete schedule"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:63
+msgid "Run now"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:64
+msgid "Last run date will not be updated"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:69
+#: bookwyrm/templates/settings/automod/rules.html:92
+msgid "Schedule scan"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:101
+msgid "Successfully added rule"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:107
+msgid "Add Rule"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:116
+#: bookwyrm/templates/settings/automod/rules.html:160
+msgid "String match"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:126
+#: bookwyrm/templates/settings/automod/rules.html:163
+msgid "Flag users"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:133
+#: bookwyrm/templates/settings/automod/rules.html:166
+msgid "Flag statuses"
+msgstr ""
+
+#: bookwyrm/templates/settings/automod/rules.html:140
+msgid "Add rule"
+msgstr "Додати правило"
+
+#: bookwyrm/templates/settings/automod/rules.html:147
+msgid "Current Rules"
+msgstr "Поточні Правила"
+
+#: bookwyrm/templates/settings/automod/rules.html:151
+msgid "Show rules"
+msgstr "Показати правила"
+
+#: bookwyrm/templates/settings/automod/rules.html:188
+msgid "Remove rule"
+msgstr "Видалити правило"
+
+#: bookwyrm/templates/settings/celery.html:6
+#: bookwyrm/templates/settings/celery.html:8
+msgid "Celery Status"
+msgstr "Стан Celery"
+
+#: bookwyrm/templates/settings/celery.html:14
+msgid "You can set up monitoring to check if Celery is running by querying:"
+msgstr "Ви можете налаштувати моніторинг стану Celery використав цей URL:"
+
+#: bookwyrm/templates/settings/celery.html:22
+msgid "Queues"
+msgstr "Черги"
+
+#: bookwyrm/templates/settings/celery.html:26
+msgid "Streams"
+msgstr "Стріми"
+
+#: bookwyrm/templates/settings/celery.html:32
+msgid "Broadcast"
+msgstr "Широкомовлення"
+
+#: bookwyrm/templates/settings/celery.html:38
+msgid "Inbox"
+msgstr "Вхідні"
+
+#: bookwyrm/templates/settings/celery.html:51
+msgid "Import triggered"
+msgstr "Розпочаті імпорти"
+
+#: bookwyrm/templates/settings/celery.html:57
+msgid "Connectors"
+msgstr "Конектори"
+
+#: bookwyrm/templates/settings/celery.html:64
+#: bookwyrm/templates/settings/site.html:91
+msgid "Images"
+msgstr "Зображення"
+
+#: bookwyrm/templates/settings/celery.html:70
+msgid "Suggested Users"
+msgstr "Рекомендовані Користувачі"
+
+#: bookwyrm/templates/settings/celery.html:83
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:43
+#: bookwyrm/templates/settings/users/email_filter.html:5
+msgid "Email"
+msgstr "Пошта"
+
+#: bookwyrm/templates/settings/celery.html:89
+msgid "Misc"
+msgstr "Різне"
+
+#: bookwyrm/templates/settings/celery.html:96
+msgid "Low priority"
+msgstr "Низький пріоритет"
+
+#: bookwyrm/templates/settings/celery.html:102
+msgid "Medium priority"
+msgstr "Середній пріоритет"
+
+#: bookwyrm/templates/settings/celery.html:108
+msgid "High priority"
+msgstr "Високий пріоритет"
+
+#: bookwyrm/templates/settings/celery.html:118
+msgid "Could not connect to Redis broker"
+msgstr "Не вдалося підключитися до Redis"
+
+#: bookwyrm/templates/settings/celery.html:126
+msgid "Active Tasks"
+msgstr "Активні завдання"
+
+#: bookwyrm/templates/settings/celery.html:131
+#: bookwyrm/templates/settings/imports/imports.html:113
+msgid "ID"
+msgstr "ID"
+
+#: bookwyrm/templates/settings/celery.html:132
+msgid "Task name"
+msgstr "Назва завдання"
+
+#: bookwyrm/templates/settings/celery.html:133
+msgid "Run time"
+msgstr "Час виконання"
+
+#: bookwyrm/templates/settings/celery.html:134
+msgid "Priority"
+msgstr "Пріоритет"
+
+#: bookwyrm/templates/settings/celery.html:139
+msgid "No active tasks"
+msgstr "Немає активних завдань"
+
+#: bookwyrm/templates/settings/celery.html:157
+msgid "Workers"
+msgstr "Воркери"
+
+#: bookwyrm/templates/settings/celery.html:162
+msgid "Uptime:"
+msgstr "Працює безперебійно:"
+
+#: bookwyrm/templates/settings/celery.html:172
+msgid "Could not connect to Celery"
+msgstr "Не вдалося підключитися до Сelery"
+
+#: bookwyrm/templates/settings/celery.html:178
+#: bookwyrm/templates/settings/celery.html:201
+msgid "Clear Queues"
+msgstr "Очистити Черги"
+
+#: bookwyrm/templates/settings/celery.html:182
+msgid "Clearing queues can cause serious problems including data loss! Only play with this if you really know what you're doing. You must shut down the Celery worker before you do this."
+msgstr "Очищення черг може спричинити серйозні проблеми, включаючи втрату даних! Ця опція для тих, хто дійсно знає що робить. Перш ніж очистити черги, ви мусите зупинити Celery."
+
+#: bookwyrm/templates/settings/celery.html:208
+msgid "Errors"
+msgstr "Помилки"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:6
+#: bookwyrm/templates/settings/dashboard/dashboard.html:8
+#: bookwyrm/templates/settings/layout.html:28
+msgid "Dashboard"
+msgstr "Панель керування"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:15
+#: bookwyrm/templates/settings/dashboard/dashboard.html:109
+msgid "Total users"
+msgstr "Всього користувачів"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:21
+#: bookwyrm/templates/settings/dashboard/user_chart.html:16
+msgid "Active this month"
+msgstr "Активних у цьому місяці"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:27
+msgid "Statuses"
+msgstr "Статусів"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:33
+#: bookwyrm/templates/settings/dashboard/works_chart.html:11
+msgid "Works"
+msgstr "Творів"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:74
+msgid "Instance Activity"
+msgstr "Активність Інстансу"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:92
+msgid "Interval:"
+msgstr "Інтервал:"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:96
+msgid "Days"
+msgstr "Дні"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:97
+msgid "Weeks"
+msgstr "Тижні"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:115
+msgid "User signup activity"
+msgstr "Активність по реєстраціях"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:121
+msgid "Status activity"
+msgstr "Активність по статусах"
+
+#: bookwyrm/templates/settings/dashboard/dashboard.html:127
+msgid "Works created"
+msgstr "Творів створено"
+
+#: bookwyrm/templates/settings/dashboard/registration_chart.html:10
+msgid "Registrations"
+msgstr "Реєстрації"
+
+#: bookwyrm/templates/settings/dashboard/status_chart.html:11
+msgid "Statuses posted"
+msgstr "Опубліковані статуси"
+
+#: bookwyrm/templates/settings/dashboard/user_chart.html:11
+msgid "Total"
+msgstr "Загалом"
+
+#: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9
+#, python-format
+msgid "%(display_count)s domain needs review"
+msgid_plural "%(display_count)s domains need review"
+msgstr[0] "%(display_count)s домен потребує перевірки"
+msgstr[1] "%(display_count)s домена потребують перевірки"
+msgstr[2] "%(display_count)s доменів потребують перевірки"
+msgstr[3] "%(display_count)s доменів потребують перевірки"
+
+#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8
+#, python-format
+msgid "Your outgoing email address, %(email_sender)s
, may be misconfigured."
+msgstr "Ваша вихідна електронна адреса, %(email_sender)s
, може бути невірною."
+
+#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:11
+msgid "Check the EMAIL_SENDER_NAME
and EMAIL_SENDER_DOMAIN
in your .env
file."
+msgstr "Перевірте EMAIL_SENDER_NAME
та EMAIL_SENDER_DOMAIN
у вашому .env
файлі."
+
+#: bookwyrm/templates/settings/dashboard/warnings/invites.html:9
+#, python-format
+msgid "%(display_count)s invite request"
+msgid_plural "%(display_count)s invite requests"
+msgstr[0] "%(display_count)s запит на запрошення"
+msgstr[1] "%(display_count)s запита на запрошення"
+msgstr[2] "%(display_count)s запитів на запрошення"
+msgstr[3] "%(display_count)s запитів на запрошення"
+
+#: bookwyrm/templates/settings/dashboard/warnings/missing_conduct.html:8
+msgid "Your instance is missing a code of conduct."
+msgstr "Вашому інстансу бракує кодексу поведінки."
+
+#: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8
+msgid "Your instance is missing a privacy policy."
+msgstr "Вашому інстансу бракує політики конфіденційності."
+
+#: bookwyrm/templates/settings/dashboard/warnings/reports.html:9
+#, python-format
+msgid "%(display_count)s open report"
+msgid_plural "%(display_count)s open reports"
+msgstr[0] "%(display_count)s відкрита скарга"
+msgstr[1] "%(display_count)s відкриті скарги"
+msgstr[2] "%(display_count)s відкритих скарг"
+msgstr[3] "%(display_count)s відкритих скарг"
+
+#: bookwyrm/templates/settings/dashboard/warnings/update_version.html:8
+#, python-format
+msgid "An update is available! You're running v%(current)s and the latest release is %(available)s."
+msgstr "Доступне оновлення! Ви оперуєте v%(current)s, а останній реліз - v%(available)s."
+
+#: bookwyrm/templates/settings/email_blocklist/domain_form.html:5
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:10
+msgid "Add domain"
+msgstr "Додати домен"
+
+#: bookwyrm/templates/settings/email_blocklist/domain_form.html:11
+msgid "Domain:"
+msgstr "Домен:"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:5
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:7
+#: bookwyrm/templates/settings/layout.html:65
+msgid "Email Blocklist"
+msgstr "Заблоковані Email"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:18
+msgid "When someone tries to register with an email from this domain, no account will be created. The registration process will appear to have worked."
+msgstr "Коли хтось спробує зареєструвати адресу електронної пошти з цього домену, обліковий запис не буде створено, хоча сама реєстрація буде виглядати робочою."
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:29
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:27
+msgid "Options"
+msgstr "Опції"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:38
+#, python-format
+msgid "%(display_count)s user"
+msgid_plural "%(display_count)s users"
+msgstr[0] "%(display_count)s користувач"
+msgstr[1] "%(display_count)s користувача"
+msgstr[2] "%(display_count)s користувачів"
+msgstr[3] "%(display_count)s користувачів"
+
+#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:59
+msgid "No email domains currently blocked"
+msgstr "Наразі немає заблокованих доменів"
+
+#: bookwyrm/templates/settings/email_config.html:6
+#: bookwyrm/templates/settings/email_config.html:8
+#: bookwyrm/templates/settings/layout.html:90
+msgid "Email Configuration"
+msgstr "Налаштування електронної пошти"
+
+#: bookwyrm/templates/settings/email_config.html:16
+msgid "Error sending test email:"
+msgstr "При спробі надіслати email, сталася помилка:"
+
+#: bookwyrm/templates/settings/email_config.html:24
+msgid "Successfully sent test email."
+msgstr "Тестовий email успішно надісланий."
+
+#: bookwyrm/templates/settings/email_config.html:32
+#: bookwyrm/templates/setup/config.html:102
+msgid "Email sender:"
+msgstr "Відправник:"
+
+#: bookwyrm/templates/settings/email_config.html:39
+msgid "Email backend:"
+msgstr "Email-бекенд:"
+
+#: bookwyrm/templates/settings/email_config.html:46
+msgid "Host:"
+msgstr "Хост:"
+
+#: bookwyrm/templates/settings/email_config.html:53
+msgid "Host user:"
+msgstr "Користувач хоста:"
+
+#: bookwyrm/templates/settings/email_config.html:60
+msgid "Port:"
+msgstr "Порт:"
+
+#: bookwyrm/templates/settings/email_config.html:67
+msgid "Use TLS:"
+msgstr "Використовувати TLS:"
+
+#: bookwyrm/templates/settings/email_config.html:74
+msgid "Use SSL:"
+msgstr "Використовувати SSL:"
+
+#: bookwyrm/templates/settings/email_config.html:83
+#, python-format
+msgid "Send test email to %(email)s"
+msgstr "Відправити тестовий email на %(email)s"
+
+#: bookwyrm/templates/settings/email_config.html:90
+msgid "Send test email"
+msgstr "Відправити тестовий email"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:3
+#: bookwyrm/templates/settings/federation/edit_instance.html:6
+#: bookwyrm/templates/settings/federation/edit_instance.html:15
+#: bookwyrm/templates/settings/federation/edit_instance.html:32
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:3
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:32
+#: bookwyrm/templates/settings/federation/instance_list.html:9
+#: bookwyrm/templates/settings/federation/instance_list.html:10
+msgid "Add instance"
+msgstr "Додати інстанс"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:12
+#: bookwyrm/templates/settings/federation/instance.html:24
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:12
+#: bookwyrm/templates/settings/federation/instance_list.html:3
+#: bookwyrm/templates/settings/federation/instance_list.html:5
+#: bookwyrm/templates/settings/layout.html:47
+msgid "Federated Instances"
+msgstr "Інстанси У Федерації"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:28
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:28
+msgid "Import block list"
+msgstr "Імпортувати список заблокованих"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:43
+msgid "Instance:"
+msgstr "Інстанс:"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:52
+#: bookwyrm/templates/settings/federation/instance.html:46
+#: bookwyrm/templates/settings/users/user_info.html:113
+msgid "Status:"
+msgstr "Статус:"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:66
+#: bookwyrm/templates/settings/federation/instance.html:40
+#: bookwyrm/templates/settings/users/user_info.html:107
+msgid "Software:"
+msgstr "ПО:"
+
+#: bookwyrm/templates/settings/federation/edit_instance.html:76
+#: bookwyrm/templates/settings/federation/instance.html:43
+#: bookwyrm/templates/settings/users/user_info.html:110
+msgid "Version:"
+msgstr "Версія:"
+
+#: bookwyrm/templates/settings/federation/instance.html:17
+msgid "Refresh data"
+msgstr "Оновити дані"
+
+#: bookwyrm/templates/settings/federation/instance.html:37
+msgid "Details"
+msgstr "Подробиці"
+
+#: bookwyrm/templates/settings/federation/instance.html:53
+#: bookwyrm/templates/user/layout.html:79
+msgid "Activity"
+msgstr "Активність"
+
+#: bookwyrm/templates/settings/federation/instance.html:56
+msgid "Users:"
+msgstr "Користувачів:"
+
+#: bookwyrm/templates/settings/federation/instance.html:59
+#: bookwyrm/templates/settings/federation/instance.html:65
+msgid "View all"
+msgstr "Переглянути всіх"
+
+#: bookwyrm/templates/settings/federation/instance.html:62
+#: bookwyrm/templates/settings/users/user_info.html:60
+msgid "Reports:"
+msgstr "Скарг:"
+
+#: bookwyrm/templates/settings/federation/instance.html:68
+msgid "Followed by us:"
+msgstr "Ми підписані на:"
+
+#: bookwyrm/templates/settings/federation/instance.html:73
+msgid "Followed by them:"
+msgstr "Вони підписані на:"
+
+#: bookwyrm/templates/settings/federation/instance.html:78
+msgid "Blocked by us:"
+msgstr "Заблокованих нами:"
+
+#: bookwyrm/templates/settings/federation/instance.html:90
+#: bookwyrm/templates/settings/users/user_info.html:117
+msgid "Notes"
+msgstr "Нотатки"
+
+#: bookwyrm/templates/settings/federation/instance.html:97
+msgid "No notes"
+msgstr "Нема нотаток"
+
+#: bookwyrm/templates/settings/federation/instance.html:116
+#: bookwyrm/templates/settings/link_domains/link_domains.html:87
+#: bookwyrm/templates/snippets/block_button.html:5
+msgid "Block"
+msgstr "Заблокувати"
+
+#: bookwyrm/templates/settings/federation/instance.html:117
+msgid "All users from this instance will be deactivated."
+msgstr "Усіх користувачів з цього інстансу буде деактивовано."
+
+#: bookwyrm/templates/settings/federation/instance.html:122
+#: bookwyrm/templates/snippets/block_button.html:10
+msgid "Un-block"
+msgstr "Розблокувати"
+
+#: bookwyrm/templates/settings/federation/instance.html:123
+msgid "All users from this instance will be re-activated."
+msgstr "Усіх користувачів з цього інстансу буде реактивовано."
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:6
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:15
+msgid "Import Blocklist"
+msgstr "Імпортувати Список Заблокованих"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:38
+msgid "Success!"
+msgstr "Успішно!"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:42
+msgid "Successfully blocked:"
+msgstr "Успішно заблоковано:"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:44
+msgid "Failed:"
+msgstr "Помилка:"
+
+#: bookwyrm/templates/settings/federation/instance_blocklist.html:62
+msgid "Expects a json file in the format provided by FediBlock, with a list of entries that have instance
and url
fields. For example:"
+msgstr "Це має бути json-файл у форматі FediBlock, зі списком елементів, які мають поля instance
та url
. Наприклад:"
+
+#: bookwyrm/templates/settings/federation/instance_list.html:36
+#: bookwyrm/templates/settings/users/server_filter.html:5
+msgid "Instance name"
+msgstr "Назва інстансу"
+
+#: bookwyrm/templates/settings/federation/instance_list.html:44
+msgid "Last updated"
+msgstr "Останнє оновлення"
+
+#: bookwyrm/templates/settings/federation/instance_list.html:48
+#: bookwyrm/templates/settings/federation/software_filter.html:5
+msgid "Software"
+msgstr "ПО"
+
+#: bookwyrm/templates/settings/federation/instance_list.html:70
+msgid "No instances found"
+msgstr "Інстансів не знайдено"
+
+#: bookwyrm/templates/settings/imports/complete_import_modal.html:4
+msgid "Stop import?"
+msgstr "Зупинити імпорт?"
+
+#: bookwyrm/templates/settings/imports/imports.html:19
+msgid "Disable starting new imports"
+msgstr "Вимкнути створення нових імпортів"
+
+#: bookwyrm/templates/settings/imports/imports.html:30
+msgid "This is only intended to be used when things have gone very wrong with imports and you need to pause the feature while addressing issues."
+msgstr "Це потрібно лише у тих ситуаціях, коли з імпортами виникли великі проблеми та вам треба тимчасово вимкнути їх щоб розібратися у чому справа."
+
+#: bookwyrm/templates/settings/imports/imports.html:31
+msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected."
+msgstr "Поки імпорти вимкнені, користувачі не зможуть додавати нові, але на наявний імпорт це не вплине."
+
+#: bookwyrm/templates/settings/imports/imports.html:36
+msgid "Disable imports"
+msgstr "Вимкнути імпорти"
+
+#: bookwyrm/templates/settings/imports/imports.html:50
+msgid "Users are currently unable to start new imports"
+msgstr "Наразі користувачі не можуть додати новий імпорт"
+
+#: bookwyrm/templates/settings/imports/imports.html:55
+msgid "Enable imports"
+msgstr "Увімкнути імпорти"
+
+#: bookwyrm/templates/settings/imports/imports.html:63
+msgid "Limit the amount of imports"
+msgstr "Обмежити кількість імпортувань"
+
+#: bookwyrm/templates/settings/imports/imports.html:74
+msgid "Some users might try to import a large number of books, which you want to limit."
+msgstr "Деякі користувачі можуть спробувати імпортувати велику кількість книг, що не завадить обмежити."
+
+#: bookwyrm/templates/settings/imports/imports.html:75
+msgid "Set the value to 0 to not enforce any limit."
+msgstr "Встановіть значення 0, аби не встановлювати жодних обмежень."
+
+#: bookwyrm/templates/settings/imports/imports.html:78
+msgid "Set import limit to"
+msgstr "Встановити обмеження імпорту у"
+
+#: bookwyrm/templates/settings/imports/imports.html:80
+msgid "books every"
+msgstr "книг кожні"
+
+#: bookwyrm/templates/settings/imports/imports.html:82
+msgid "days."
+msgstr "днів."
+
+#: bookwyrm/templates/settings/imports/imports.html:86
+msgid "Set limit"
+msgstr "Встановити ліміт"
+
+#: bookwyrm/templates/settings/imports/imports.html:102
+msgid "Completed"
+msgstr "Завершені"
+
+#: bookwyrm/templates/settings/imports/imports.html:116
+msgid "User"
+msgstr "Користувач"
+
+#: bookwyrm/templates/settings/imports/imports.html:125
+msgid "Date Updated"
+msgstr "Останнє Оновлення"
+
+#: bookwyrm/templates/settings/imports/imports.html:132
+msgid "Pending items"
+msgstr "В очікуванні"
+
+#: bookwyrm/templates/settings/imports/imports.html:135
+msgid "Successful items"
+msgstr "Успішно імпортовано"
+
+#: bookwyrm/templates/settings/imports/imports.html:170
+msgid "No matching imports found."
+msgstr "Відповідних імпортів не знайдено."
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:4
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:11
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:25
+#: bookwyrm/templates/settings/invites/manage_invites.html:11
+msgid "Invite Requests"
+msgstr "Запити На Запрошення"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:15
+#: bookwyrm/templates/settings/invites/manage_invites.html:3
+#: bookwyrm/templates/settings/invites/manage_invites.html:15
+#: bookwyrm/templates/settings/layout.html:42
+#: bookwyrm/templates/user_menu.html:55
+msgid "Invites"
+msgstr "Запрошення"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:23
+msgid "Ignored Invite Requests"
+msgstr "Проігноровані Запити На Запрошення"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:36
+msgid "Date requested"
+msgstr "Дата звернення"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:40
+msgid "Date accepted"
+msgstr "Дата прийняття"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:45
+msgid "Answer"
+msgstr "Відповідь"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:51
+msgid "Action"
+msgstr "Дія"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:54
+msgid "No requests"
+msgstr "Немає запитів"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:66
+#: bookwyrm/templates/settings/invites/status_filter.html:16
+msgid "Accepted"
+msgstr "Прийнято"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:68
+#: bookwyrm/templates/settings/invites/status_filter.html:12
+msgid "Sent"
+msgstr "Відправлено"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:70
+#: bookwyrm/templates/settings/invites/status_filter.html:8
+msgid "Requested"
+msgstr "Запрошено користувачем"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:80
+msgid "Send invite"
+msgstr "Надіслати запрошення"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:82
+msgid "Re-send invite"
+msgstr "Надіслати запрошення ще раз"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:102
+msgid "Ignore"
+msgstr "Ігнорувати"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:104
+msgid "Un-ignore"
+msgstr "Скасувати ігнорування"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:116
+msgid "Back to pending requests"
+msgstr "Повернутися до запитів в процесі"
+
+#: bookwyrm/templates/settings/invites/manage_invite_requests.html:118
+msgid "View ignored requests"
+msgstr "Переглянути проігноровані запити"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:21
+msgid "Generate New Invite"
+msgstr "Згенерувати Нове Запрошення"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:27
+msgid "Expiry:"
+msgstr "Термін дії: "
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:33
+msgid "Use limit:"
+msgstr "Ліміт використань:"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:40
+msgid "Create Invite"
+msgstr "Створити Запрошення"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:48
+msgid "Expires"
+msgstr "Закінчення терміну дії"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:49
+msgid "Max uses"
+msgstr "Макс. кількість використань"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:50
+msgid "Times used"
+msgstr "Використань"
+
+#: bookwyrm/templates/settings/invites/manage_invites.html:53
+msgid "No active invites"
+msgstr "Немає активних запрошень"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:5
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:10
+msgid "Add IP address"
+msgstr "Додати IP-адресу"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:11
+msgid "Use IP address blocks with caution, and consider using blocks only temporarily, as IP addresses are often shared or change hands. If you block your own IP, you will not be able to access this page."
+msgstr "Використовуйте блокування IP-адрес обережно. Розгляньте тимчасове блокування, оскільки IP-адреси часто бувають спільними для кількох людей або змінюють власників. Якщо ви заблокуєте власну IP адресу, ви не зможете зайти на цю сторінку."
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:18
+msgid "IP Address:"
+msgstr "IP-адреса:"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:24
+msgid "You can block IP ranges using CIDR syntax."
+msgstr "Ви можете заблокувати діапазон IP за допомогою синтаксису CIDR."
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:5
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:7
+#: bookwyrm/templates/settings/layout.html:69
+msgid "IP Address Blocklist"
+msgstr "Список Заблокованих IP"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:18
+msgid "Any traffic from this IP address will get a 404 response when trying to access any part of the application."
+msgstr "Будь-який трафік з цієї IP-адреси отримає відповідь 404 при взаємодії з будь-якою частиною сервісу."
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:24
+msgid "Address"
+msgstr "Адреса"
+
+#: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:46
+msgid "No IP addresses currently blocked"
+msgstr "Наразі нема заблокованих IP адрес"
+
+#: bookwyrm/templates/settings/layout.html:4
+msgid "Administration"
+msgstr "Адміністрування"
+
+#: bookwyrm/templates/settings/layout.html:31
+msgid "Manage Users"
+msgstr "Керування Користувачами"
+
+#: bookwyrm/templates/settings/layout.html:53
+msgid "Moderation"
+msgstr "Модерація"
+
+#: bookwyrm/templates/settings/layout.html:57
+#: bookwyrm/templates/settings/reports/reports.html:8
+#: bookwyrm/templates/settings/reports/reports.html:17
+msgid "Reports"
+msgstr "Скарги"
+
+#: bookwyrm/templates/settings/layout.html:73
+#: bookwyrm/templates/settings/link_domains/link_domains.html:5
+#: bookwyrm/templates/settings/link_domains/link_domains.html:7
+msgid "Link Domains"
+msgstr "Домени Посилань"
+
+#: bookwyrm/templates/settings/layout.html:78
+msgid "System"
+msgstr "Система"
+
+#: bookwyrm/templates/settings/layout.html:86
+msgid "Celery status"
+msgstr "Стан Celery"
+
+#: bookwyrm/templates/settings/layout.html:95
+msgid "Instance Settings"
+msgstr "Налаштування Інстансу"
+
+#: bookwyrm/templates/settings/layout.html:103
+#: bookwyrm/templates/settings/site.html:4
+#: bookwyrm/templates/settings/site.html:6
+msgid "Site Settings"
+msgstr "Налаштування Сайту"
+
+#: bookwyrm/templates/settings/layout.html:109
+#: bookwyrm/templates/settings/layout.html:112
+#: bookwyrm/templates/settings/registration.html:4
+#: bookwyrm/templates/settings/registration.html:6
+#: bookwyrm/templates/settings/registration_limited.html:4
+#: bookwyrm/templates/settings/registration_limited.html:6
+msgid "Registration"
+msgstr "Реєстрація"
+
+#: bookwyrm/templates/settings/layout.html:118
+#: bookwyrm/templates/settings/site.html:107
+#: bookwyrm/templates/settings/themes.html:4
+#: bookwyrm/templates/settings/themes.html:6
+msgid "Themes"
+msgstr "Теми"
+
+#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:5
+#, python-format
+msgid "Set display name for %(url)s"
+msgstr "Встановити ім'я для %(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 "Домени посилань треба підтвердити перед тим, як вони з'являться на сторінках книжок. Будь ласка, переконайтеся, що сайти, на які вказують домени, не розміщують спам, віруси або оманливі посилання перед підтвердженням."
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:45
+msgid "Set display name"
+msgstr "Встановити ім'я для"
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:53
+msgid "View links"
+msgstr "Переглянути посилання"
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:96
+msgid "No domains currently approved"
+msgstr "Наразі немає підтверджених доменів"
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:98
+msgid "No domains currently pending"
+msgstr "Наразі немає доменів, які очікують підтвердження"
+
+#: bookwyrm/templates/settings/link_domains/link_domains.html:100
+msgid "No domains currently blocked"
+msgstr "Наразі немає заблокованих доменів"
+
+#: bookwyrm/templates/settings/link_domains/link_table.html:43
+msgid "No links available for this domain."
+msgstr "Немає посилань для цього домену."
+
+#: bookwyrm/templates/settings/registration.html:13
+#: bookwyrm/templates/settings/registration_limited.html:13
+#: bookwyrm/templates/settings/site.html:21
+msgid "Settings saved"
+msgstr "Налаштування збережено"
+
+#: bookwyrm/templates/settings/registration.html:22
+#: bookwyrm/templates/settings/registration_limited.html:22
+#: bookwyrm/templates/settings/site.html:30
+msgid "Unable to save settings"
+msgstr "Не вдалося зберегти налаштування"
+
+#: bookwyrm/templates/settings/registration.html:38
+msgid "Allow registration"
+msgstr "Дозволити реєстрацію"
+
+#: bookwyrm/templates/settings/registration.html:43
+msgid "Default access level:"
+msgstr "Рівень доступу за замовчуванням:"
+
+#: bookwyrm/templates/settings/registration.html:61
+msgid "Require users to confirm email address"
+msgstr "Вимагати від користувачів підтвердження email адреси"
+
+#: bookwyrm/templates/settings/registration.html:63
+msgid "(Recommended if registration is open)"
+msgstr "(Рекомендується при відкритій реєстрації)"
+
+#: bookwyrm/templates/settings/registration.html:68
+msgid "Allow invite requests"
+msgstr "Дозволити запити на запрошення"
+
+#: bookwyrm/templates/settings/registration.html:72
+#: bookwyrm/templates/settings/registration_limited.html:42
+msgid "Invite request text:"
+msgstr "Текст запиту запрошення:"
+
+#: bookwyrm/templates/settings/registration.html:80
+#: bookwyrm/templates/settings/registration_limited.html:50
+msgid "Set a question for invite requests"
+msgstr "Встановити питання для запиту запрошення"
+
+#: bookwyrm/templates/settings/registration.html:85
+#: bookwyrm/templates/settings/registration_limited.html:55
+msgid "Question:"
+msgstr "Питання:"
+
+#: bookwyrm/templates/settings/registration.html:90
+#: bookwyrm/templates/settings/registration_limited.html:67
+msgid "Registration closed text:"
+msgstr "Текст, якщо реєстрація закрита:"
+
+#: bookwyrm/templates/settings/registration_limited.html:29
+msgid "Registration is enabled on this instance"
+msgstr "На цьому інстансі увімкнена реєстрація"
+
+#: bookwyrm/templates/settings/reports/report.html:13
+msgid "Back to reports"
+msgstr "Назад до скарг"
+
+#: bookwyrm/templates/settings/reports/report.html:25
+msgid "Message reporter"
+msgstr "Написати повідомлення автору скарги"
+
+#: bookwyrm/templates/settings/reports/report.html:29
+msgid "Update on your report:"
+msgstr "Оновлення по вашій скарзі:"
+
+#: bookwyrm/templates/settings/reports/report.html:37
+msgid "Reported status"
+msgstr "Оскаржений статус"
+
+#: bookwyrm/templates/settings/reports/report.html:39
+msgid "Status has been deleted"
+msgstr "Статус було видалено"
+
+#: bookwyrm/templates/settings/reports/report.html:48
+msgid "Reported links"
+msgstr "Оскаржені посилання"
+
+#: bookwyrm/templates/settings/reports/report.html:66
+msgid "Moderation Activity"
+msgstr "Активність модераторів"
+
+#: bookwyrm/templates/settings/reports/report.html:73
+#, python-format
+msgid "%(user)s opened this report"
+msgstr "%(user)s відкрив(-ла) цю скаргу"
+
+#: bookwyrm/templates/settings/reports/report.html:86
+#, python-format
+msgid "%(user)s commented on this report:"
+msgstr "%(user)s прокоментував(-ла) цю скаргу:"
+
+#: bookwyrm/templates/settings/reports/report.html:90
+#, python-format
+msgid "%(user)s took an action on this report:"
+msgstr "%(user)s вжив(-ла) заходів по цій скарзі:"
+
+#: bookwyrm/templates/settings/reports/report_header.html:6
+#, python-format
+msgid "Report #%(report_id)s: Status posted by @%(username)s"
+msgstr "Скарга #%(report_id)s: Статус від @%(username)s"
+
+#: bookwyrm/templates/settings/reports/report_header.html:13
+#, python-format
+msgid "Report #%(report_id)s: Link added by @%(username)s"
+msgstr "Скарга #%(report_id)s: Посилання додане @%(username)s"
+
+#: bookwyrm/templates/settings/reports/report_header.html:17
+#, python-format
+msgid "Report #%(report_id)s: Link domain"
+msgstr "Скарга #%(report_id)s: Домен посилання"
+
+#: bookwyrm/templates/settings/reports/report_header.html:24
+#, python-format
+msgid "Report #%(report_id)s: User @%(username)s"
+msgstr "Скарга #%(report_id)s: Користувач @%(username)s"
+
+#: bookwyrm/templates/settings/reports/report_links_table.html:19
+msgid "Approve domain"
+msgstr "Підтвердити домен"
+
+#: bookwyrm/templates/settings/reports/report_links_table.html:26
+msgid "Block domain"
+msgstr "Заблокувати домен"
+
+#: bookwyrm/templates/settings/reports/report_preview.html:17
+msgid "No notes provided"
+msgstr "Нотатки відсутні"
+
+#: bookwyrm/templates/settings/reports/report_preview.html:24
+#, python-format
+msgid "Reported by @%(username)s"
+msgstr "Скарга від @%(username)s"
+
+#: bookwyrm/templates/settings/reports/report_preview.html:34
+msgid "Re-open"
+msgstr "Відкрийте знову"
+
+#: bookwyrm/templates/settings/reports/report_preview.html:36
+msgid "Resolve"
+msgstr "Розглянуто"
+
+#: bookwyrm/templates/settings/reports/reports.html:6
+#, python-format
+msgid "Reports: %(instance_name)s"
+msgstr "Скарги: %(instance_name)s"
+
+#: bookwyrm/templates/settings/reports/reports.html:14
+#, python-format
+msgid "Reports: %(instance_name)s"
+msgstr "Скарги: %(instance_name)s"
+
+#: bookwyrm/templates/settings/reports/reports.html:25
+msgid "Open"
+msgstr "Очікує розгляду"
+
+#: bookwyrm/templates/settings/reports/reports.html:28
+msgid "Resolved"
+msgstr "Розглянута"
+
+#: bookwyrm/templates/settings/reports/reports.html:37
+msgid "No reports found."
+msgstr "Скарг не знайдено."
+
+#: bookwyrm/templates/settings/site.html:10
+#: bookwyrm/templates/settings/site.html:43
+msgid "Instance Info"
+msgstr "Інформація про інстанс"
+
+#: bookwyrm/templates/settings/site.html:12
+#: bookwyrm/templates/settings/site.html:122
+msgid "Footer Content"
+msgstr "Вміст футера"
+
+#: bookwyrm/templates/settings/site.html:46
+msgid "Instance Name:"
+msgstr "Назва Інстансу:"
+
+#: bookwyrm/templates/settings/site.html:50
+msgid "Tagline:"
+msgstr "Підзаголовок:"
+
+#: bookwyrm/templates/settings/site.html:54
+msgid "Instance description:"
+msgstr "Опис інстансу:"
+
+#: bookwyrm/templates/settings/site.html:58
+msgid "Short description:"
+msgstr "Короткий опис:"
+
+#: bookwyrm/templates/settings/site.html:59
+msgid "Used when the instance is previewed on joinbookwyrm.com. Does not support HTML or Markdown."
+msgstr "Використовується при розміщенні на joinbookwyrm.com. Не підтримує HTML або Markdown."
+
+#: bookwyrm/templates/settings/site.html:63
+msgid "Code of conduct:"
+msgstr "Правила поведінки:"
+
+#: bookwyrm/templates/settings/site.html:67
+msgid "Privacy Policy:"
+msgstr "Політика Конфіденційності:"
+
+#: bookwyrm/templates/settings/site.html:72
+msgid "Impressum:"
+msgstr "Імпресум:"
+
+#: bookwyrm/templates/settings/site.html:77
+msgid "Include impressum:"
+msgstr "Включає імпресум:"
+
+#: bookwyrm/templates/settings/site.html:94
+msgid "Logo:"
+msgstr "Логотип:"
+
+#: bookwyrm/templates/settings/site.html:98
+msgid "Logo small:"
+msgstr "Маленький логотип:"
+
+#: bookwyrm/templates/settings/site.html:102
+msgid "Favicon:"
+msgstr "Favicon:"
+
+#: bookwyrm/templates/settings/site.html:110
+msgid "Default theme:"
+msgstr "Стандартна тема:"
+
+#: bookwyrm/templates/settings/site.html:125
+msgid "Support link:"
+msgstr "Посилання для підтримки:"
+
+#: bookwyrm/templates/settings/site.html:129
+msgid "Support title:"
+msgstr "Назва сервісу підтримки:"
+
+#: bookwyrm/templates/settings/site.html:133
+msgid "Admin email:"
+msgstr "Email адміністратора:"
+
+#: bookwyrm/templates/settings/site.html:137
+msgid "Additional info:"
+msgstr "Додаткова інформація:"
+
+#: bookwyrm/templates/settings/themes.html:10
+msgid "Set instance default theme"
+msgstr "Встановити стандартну тему інстансу"
+
+#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
+msgid "Successfully added theme"
+msgstr "Тему успішно додано"
+
+#: bookwyrm/templates/settings/themes.html:35
+msgid "How to add a theme"
+msgstr "Як додати тему"
+
+#: bookwyrm/templates/settings/themes.html:38
+msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
+msgstr "Скопіюйте файл теми в директорію bookwyrm/static/css/themes
на вашому сервері з командного рядка."
+
+#: bookwyrm/templates/settings/themes.html:41
+msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
+msgstr "Запустіть ./bw-dev compile_themes
та ./bw-dev collectstatic
."
+
+#: bookwyrm/templates/settings/themes.html:44
+msgid "Add the file name using the form below to make it available in the application interface."
+msgstr "Додайте назву файлу використовуючи форму нижче, щоб зробити її доступною в інтерфейсі BookWyrm."
+
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
+msgid "Add theme"
+msgstr "Додати тему"
+
+#: bookwyrm/templates/settings/themes.html:57
+msgid "Unable to save theme"
+msgstr "Не вдалося зберегти тему"
+
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
+msgid "Theme name"
+msgstr "Назва теми"
+
+#: bookwyrm/templates/settings/themes.html:82
+msgid "Theme filename"
+msgstr "Ім'я файлу теми"
+
+#: bookwyrm/templates/settings/themes.html:97
+msgid "Available Themes"
+msgstr "Доступні теми"
+
+#: bookwyrm/templates/settings/themes.html:105
+msgid "File"
+msgstr "Файл"
+
+#: bookwyrm/templates/settings/themes.html:123
+msgid "Remove theme"
+msgstr "Видалити тему"
+
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/delete_user_form.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
+msgid "Permanently delete user"
+msgstr "Видалити користувача назавжди"
+
+#: bookwyrm/templates/settings/users/delete_user_form.html:12
+#, python-format
+msgid "Are you sure you want to delete %(username)s's account? This action cannot be undone. To proceed, please enter your password to confirm deletion."
+msgstr "Ви впевнені, що хочете видалити обліковий запис %(username)s? Цю дію неможливо скасувати. Щоб продовжити, будь ласка, введіть свій пароль для підтвердження видалення."
+
+#: bookwyrm/templates/settings/users/delete_user_form.html:17
+msgid "Your password:"
+msgstr "Ваш пароль:"
+
+#: bookwyrm/templates/settings/users/user_admin.html:9
+#, python-format
+msgid "Users: %(instance_name)s"
+msgstr "Користувачі: %(instance_name)s"
+
+#: bookwyrm/templates/settings/users/user_admin.html:29
+msgid "Deleted users"
+msgstr "Видалені користувачі"
+
+#: bookwyrm/templates/settings/users/user_admin.html:44
+#: bookwyrm/templates/settings/users/username_filter.html:5
+msgid "Username"
+msgstr "Ім'я користувача"
+
+#: bookwyrm/templates/settings/users/user_admin.html:48
+msgid "Date Added"
+msgstr "Дата реєстрації / додавання"
+
+#: bookwyrm/templates/settings/users/user_admin.html:52
+msgid "Last Active"
+msgstr "Остання активність"
+
+#: bookwyrm/templates/settings/users/user_admin.html:61
+msgid "Remote instance"
+msgstr "Інший інстанс"
+
+#: bookwyrm/templates/settings/users/user_admin.html:84
+#: bookwyrm/templates/settings/users/user_info.html:127
+msgid "Not set"
+msgstr "Не встановлено"
+
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
+msgid "View user profile"
+msgstr "Переглянути профіль користувача"
+
+#: bookwyrm/templates/settings/users/user_info.html:30
+msgid "Go to user admin"
+msgstr "Перейти до адміністрування користувача"
+
+#: bookwyrm/templates/settings/users/user_info.html:40
+msgid "Local"
+msgstr "Місцевий"
+
+#: bookwyrm/templates/settings/users/user_info.html:42
+msgid "Remote"
+msgstr "З іншого сервера"
+
+#: bookwyrm/templates/settings/users/user_info.html:51
+msgid "User details"
+msgstr "Подробиці користувача"
+
+#: bookwyrm/templates/settings/users/user_info.html:55
+msgid "Email:"
+msgstr "Електронна пошта:"
+
+#: bookwyrm/templates/settings/users/user_info.html:65
+msgid "(View reports)"
+msgstr "(Переглянути скарги)"
+
+#: bookwyrm/templates/settings/users/user_info.html:71
+msgid "Blocked by count:"
+msgstr "Заблокували цього користувача:"
+
+#: bookwyrm/templates/settings/users/user_info.html:74
+msgid "Date added:"
+msgstr "Зареєструвався або було додано:"
+
+#: bookwyrm/templates/settings/users/user_info.html:77
+msgid "Last active date:"
+msgstr "Остання активність:"
+
+#: bookwyrm/templates/settings/users/user_info.html:80
+msgid "Manually approved followers:"
+msgstr "Підтверджує підписників вручну:"
+
+#: bookwyrm/templates/settings/users/user_info.html:83
+msgid "Discoverable:"
+msgstr "Видимий:"
+
+#: bookwyrm/templates/settings/users/user_info.html:87
+msgid "Deactivation reason:"
+msgstr "Причина деактивації:"
+
+#: bookwyrm/templates/settings/users/user_info.html:102
+msgid "Instance details"
+msgstr "Подробиці інстансу"
+
+#: bookwyrm/templates/settings/users/user_info.html:124
+msgid "View instance"
+msgstr "Переглянути інстанс"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
+msgid "Permanently deleted"
+msgstr "Видалено остаточно"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
+msgid "User Actions"
+msgstr "Керування користувачем"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
+msgid "Activate user"
+msgstr "Активувати користувача"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
+msgid "Suspend user"
+msgstr "Заблокувати користувача"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
+msgid "Un-suspend user"
+msgstr "Розблокувати користувача"
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
+msgid "Access level:"
+msgstr "Рівень доступу:"
+
+#: bookwyrm/templates/setup/admin.html:5
+msgid "Set up BookWyrm"
+msgstr "Налаштування BookWyrm"
+
+#: bookwyrm/templates/setup/admin.html:7
+msgid "Your account as a user and an admin"
+msgstr "Ваш обліковий запис як користувача та адміністратора"
+
+#: bookwyrm/templates/setup/admin.html:13
+msgid "Create your account"
+msgstr "Створення свого облікового запису"
+
+#: bookwyrm/templates/setup/admin.html:20
+msgid "Admin key:"
+msgstr "Ключ адміністратора:"
+
+#: bookwyrm/templates/setup/admin.html:32
+msgid "An admin key was created when you installed BookWyrm. You can get your admin key by running ./bw-dev admin_code
from the command line on your server."
+msgstr "Ключ адміністратора було створено при встановленні BookWyrm. Ви можете отримати його запустивши ./bw-dev admin_code
в командному рядку на вашому сервері."
+
+#: bookwyrm/templates/setup/admin.html:45
+msgid "As an admin, you'll be able to configure the instance name and information, and moderate your instance. This means you will have access to private information about your users, and are responsible for responding to reports of bad behavior or spam."
+msgstr "Як адміністратор, ви зможете налаштувати назву інстансу та інформацію про нього, а також модерувати його. Це значить, що у вас буде доступ до приватної інформації про ваших користувачів та ви будете відповідати за реагування на скарги на погану поведінку та спам."
+
+#: bookwyrm/templates/setup/admin.html:51
+msgid "Once the instance is set up, you can promote other users to moderator or admin roles from the admin panel."
+msgstr "Після налаштування інстансу ви зможете підвищити інших користувачів до ролі модератора або адміністратора з панелі адміністратора."
+
+#: bookwyrm/templates/setup/admin.html:55
+msgid "Learn more about moderation"
+msgstr "Дізнатися більше про модерацію"
+
+#: bookwyrm/templates/setup/config.html:5
+msgid "Instance Configuration"
+msgstr "Параметри інстансу"
+
+#: bookwyrm/templates/setup/config.html:7
+msgid "Make sure everything looks right before proceeding"
+msgstr "Перед продовженням переконайтеся, що все виглядає правильно"
+
+#: bookwyrm/templates/setup/config.html:18
+msgid "You are running BookWyrm in debug mode. This should never be used in a production environment."
+msgstr "BookWyrm працює в режимі налагодження. Ніколи не використовуйте цей режим в продакшені."
+
+#: bookwyrm/templates/setup/config.html:30
+msgid "Your domain appears to be misconfigured. It should not include protocol or slashes."
+msgstr "Ваш домен, здається, налаштований неправильно. Він не повинен містити протокол або слеш."
+
+#: bookwyrm/templates/setup/config.html:42
+msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
+msgstr "Ваш інстанс BookWyrm працює в режимі продакшену без https. Вам слід увімкнути USE_HTTPS."
+
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
+msgid "Settings"
+msgstr "Налаштування"
+
+#: bookwyrm/templates/setup/config.html:56
+msgid "Instance domain:"
+msgstr "Домен інстансу:"
+
+#: bookwyrm/templates/setup/config.html:63
+msgid "Protocol:"
+msgstr "Протокол:"
+
+#: bookwyrm/templates/setup/config.html:81
+msgid "Using S3:"
+msgstr "Використовує S3:"
+
+#: bookwyrm/templates/setup/config.html:95
+msgid "Default interface language:"
+msgstr "Стандартна мова інтерфейсу:"
+
+#: bookwyrm/templates/setup/config.html:109
+msgid "Enable preview images:"
+msgstr "Попередній перегляд зображень увімкнено:"
+
+#: bookwyrm/templates/setup/config.html:116
+msgid "Enable image thumbnails:"
+msgstr "Мініатюри зображень увімкнено:"
+
+#: bookwyrm/templates/setup/config.html:128
+msgid "Does everything look right?"
+msgstr "Все виглядає правильно?"
+
+#: bookwyrm/templates/setup/config.html:130
+msgid "This is your last chance to set your domain and protocol."
+msgstr "Це ваш останній шанс встановити домен та протокол."
+
+#: bookwyrm/templates/setup/config.html:144
+msgid "You can change your instance settings in the .env
file on your server."
+msgstr "Ви можете змінити налаштування вашого інстансу в файлі .env
на вашому сервері."
+
+#: bookwyrm/templates/setup/config.html:148
+msgid "View installation instructions"
+msgstr "Переглянути інструкції з встановлення"
+
+#: bookwyrm/templates/setup/layout.html:5
+msgid "Instance Setup"
+msgstr "Налаштування інстансу"
+
+#: bookwyrm/templates/setup/layout.html:21
+msgid "Installing BookWyrm"
+msgstr "Встановлення BookWyrm"
+
+#: bookwyrm/templates/setup/layout.html:24
+msgid "Need help?"
+msgstr "Потрібна допомога?"
+
+#: bookwyrm/templates/shelf/create_shelf_form.html:5
+#: bookwyrm/templates/shelf/shelf.html:74
+msgid "Create shelf"
+msgstr "Створити полицю"
+
+#: bookwyrm/templates/shelf/edit_shelf_form.html:5
+msgid "Edit Shelf"
+msgstr "Редагувати полицю"
+
+#: bookwyrm/templates/shelf/shelf.html:26
+#: bookwyrm/templates/user/relationships/followers.html:18
+#: bookwyrm/templates/user/relationships/following.html:18
+msgid "User profile"
+msgstr "Профіль користувача"
+
+#: bookwyrm/templates/shelf/shelf.html:41
+#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
+msgid "All books"
+msgstr "Усі книги"
+
+#: bookwyrm/templates/shelf/shelf.html:99
+#, python-format
+msgid "%(formatted_count)s book"
+msgid_plural "%(formatted_count)s books"
+msgstr[0] "%(formatted_count)s книга"
+msgstr[1] "%(formatted_count)s книги"
+msgstr[2] "%(formatted_count)s книг"
+msgstr[3] "%(formatted_count)s книг"
+
+#: bookwyrm/templates/shelf/shelf.html:106
+#, python-format
+msgid "(showing %(start)s-%(end)s)"
+msgstr "(показуються %(start)s-%(end)s)"
+
+#: bookwyrm/templates/shelf/shelf.html:118
+msgid "Edit shelf"
+msgstr "Редагувати полицю"
+
+#: bookwyrm/templates/shelf/shelf.html:126
+msgid "Delete shelf"
+msgstr "Видалити полицю"
+
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
+msgid "Shelved"
+msgstr "Додано до полиці"
+
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
+msgid "Started"
+msgstr "Почато"
+
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
+msgid "Finished"
+msgstr "Прочитано"
+
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
+msgid "Until"
+msgstr "До"
+
+#: bookwyrm/templates/shelf/shelf.html:212
+msgid "This shelf is empty."
+msgstr "Ця полиця порожня."
+
+#: bookwyrm/templates/snippets/add_to_group_button.html:16
+msgid "Invite"
+msgstr "Запросити"
+
+#: bookwyrm/templates/snippets/add_to_group_button.html:25
+msgid "Uninvite"
+msgstr "Скасувати запрошення"
+
+#: bookwyrm/templates/snippets/add_to_group_button.html:29
+#, python-format
+msgid "Remove @%(username)s"
+msgstr "Виключити @%(username)s"
+
+#: bookwyrm/templates/snippets/announcement.html:28
+#, python-format
+msgid "Posted by %(username)s"
+msgstr "Опубліковано %(username)s"
+
+#: bookwyrm/templates/snippets/authors.html:22
+#: bookwyrm/templates/snippets/trimmed_list.html:14
+#, python-format
+msgid "and %(remainder_count_display)s other"
+msgid_plural "and %(remainder_count_display)s others"
+msgstr[0] "та %(remainder_count_display)s інший"
+msgstr[1] "та %(remainder_count_display)s інших"
+msgstr[2] "та %(remainder_count_display)s інших"
+msgstr[3] "та %(remainder_count_display)s інших"
+
+#: bookwyrm/templates/snippets/book_cover.html:63
+msgid "No cover"
+msgstr "Немає обкладинки"
+
+#: bookwyrm/templates/snippets/book_titleby.html:11
+#, python-format
+msgid "%(title)s by"
+msgstr "%(title)s від"
+
+#: bookwyrm/templates/snippets/boost_button.html:20
+#: bookwyrm/templates/snippets/boost_button.html:21
+msgid "Boost"
+msgstr "Поширити"
+
+#: bookwyrm/templates/snippets/boost_button.html:33
+#: bookwyrm/templates/snippets/boost_button.html:34
+msgid "Un-boost"
+msgstr "Скасувати поширення"
+
+#: bookwyrm/templates/snippets/create_status.html:36
+msgid "Quote"
+msgstr "Процитувати"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:15
+msgid "Some thoughts on the book"
+msgstr "Деякі думки про книгу"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:27
+#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:18
+msgid "Progress:"
+msgstr "Прогрес:"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:53
+#: bookwyrm/templates/snippets/progress_field.html:18
+msgid "pages"
+msgstr "сторінок"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:59
+#: bookwyrm/templates/snippets/progress_field.html:23
+msgid "percent"
+msgstr "процентів"
+
+#: bookwyrm/templates/snippets/create_status/comment.html:66
+#, python-format
+msgid "of %(pages)s pages"
+msgstr "з %(pages)s сторінок"
+
+#: 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:18
+msgid "Content"
+msgstr "Зміст"
+
+#: bookwyrm/templates/snippets/create_status/content_warning_field.html:9
+msgid "Include spoiler alert"
+msgstr "Містить спойлер!"
+
+#: bookwyrm/templates/snippets/create_status/content_warning_field.html:18
+msgid "Spoilers/content warnings:"
+msgstr "Попередження про спойлери або зміст:"
+
+#: bookwyrm/templates/snippets/create_status/content_warning_field.html:27
+msgid "Spoilers ahead!"
+msgstr "Увага, спойлери!"
+
+#: bookwyrm/templates/snippets/create_status/layout.html:45
+#: bookwyrm/templates/snippets/reading_modals/form.html:7
+msgid "Comment:"
+msgstr "Коментар:"
+
+#: bookwyrm/templates/snippets/create_status/post_options_block.html:19
+msgid "Update"
+msgstr "Оновити"
+
+#: bookwyrm/templates/snippets/create_status/post_options_block.html:21
+msgid "Post"
+msgstr "Опублікувати"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:16
+msgid "Quote:"
+msgstr "Цитата:"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:24
+#, python-format
+msgid "An excerpt from '%(book_title)s'"
+msgstr "Уривок з '%(book_title)s'"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:31
+msgid "Position:"
+msgstr "Місце у книзі:"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:44
+msgid "On page:"
+msgstr "Сторінка:"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:50
+msgid "At percent:"
+msgstr "Відсоток:"
+
+#: bookwyrm/templates/snippets/create_status/quotation.html:69
+msgid "to"
+msgstr "по"
+
+#: bookwyrm/templates/snippets/create_status/review.html:24
+#, python-format
+msgid "Your review of '%(book_title)s'"
+msgstr "Ваша рецензія на '%(book_title)s'"
+
+#: bookwyrm/templates/snippets/create_status/review.html:39
+msgid "Review:"
+msgstr "Рецензія:"
+
+#: bookwyrm/templates/snippets/fav_button.html:16
+#: bookwyrm/templates/snippets/fav_button.html:17
+msgid "Like"
+msgstr "Подобається"
+
+#: bookwyrm/templates/snippets/fav_button.html:30
+#: bookwyrm/templates/snippets/fav_button.html:31
+msgid "Un-like"
+msgstr "Прибрати лайк"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:5
+msgid "Filters"
+msgstr "Фільтри"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:10
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:17
+msgid "Filters are applied"
+msgstr "Застосовано фільтри"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:20
+msgid "Clear filters"
+msgstr "Скинути фільтри"
+
+#: bookwyrm/templates/snippets/filters_panel/filters_panel.html:43
+msgid "Apply filters"
+msgstr "Застосувати фільтри"
+
+#: bookwyrm/templates/snippets/follow_button.html:20
+#, python-format
+msgid "Follow @%(username)s"
+msgstr "Підписатися на @%(username)s"
+
+#: bookwyrm/templates/snippets/follow_button.html:22
+msgid "Follow"
+msgstr "Підписатися"
+
+#: bookwyrm/templates/snippets/follow_button.html:31
+msgid "Undo follow request"
+msgstr "Скасувати запит на підписку"
+
+#: bookwyrm/templates/snippets/follow_button.html:36
+#, python-format
+msgid "Unfollow @%(username)s"
+msgstr "Відписатися від @%(username)s"
+
+#: bookwyrm/templates/snippets/follow_button.html:38
+msgid "Unfollow"
+msgstr "Відписатися"
+
+#: bookwyrm/templates/snippets/follow_request_buttons.html:7
+#: bookwyrm/templates/snippets/join_invitation_buttons.html:9
+msgid "Accept"
+msgstr "Прийняти"
+
+#: bookwyrm/templates/snippets/footer.html:16
+msgid "Documentation"
+msgstr "Документація"
+
+#: bookwyrm/templates/snippets/footer.html:42
+#, python-format
+msgid "Support %(site_name)s on %(support_title)s"
+msgstr "Підтримати %(site_name)s на %(support_title)s"
+
+#: bookwyrm/templates/snippets/footer.html:49
+msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub."
+msgstr "Код BookWyrm знаходиться у вільному доступі. Ви можете долучитися до розробки або повідомити про проблеми на GitHub."
+
+#: bookwyrm/templates/snippets/form_rate_stars.html:20
+#: bookwyrm/templates/snippets/stars.html:23
+msgid "No rating"
+msgstr "Без оцінки"
+
+#: bookwyrm/templates/snippets/form_rate_stars.html:28
+#, python-format
+msgid "%(half_rating)s star"
+msgid_plural "%(half_rating)s stars"
+msgstr[0] "%(half_rating)s зірка"
+msgstr[1] "%(half_rating)s зірок"
+msgstr[2] "%(half_rating)s зірок"
+msgstr[3] "%(half_rating)s зірок"
+
+#: bookwyrm/templates/snippets/form_rate_stars.html:64
+#: bookwyrm/templates/snippets/stars.html:7
+#, python-format
+msgid "%(rating)s star"
+msgid_plural "%(rating)s stars"
+msgstr[0] "%(rating)s зірка"
+msgstr[1] "%(rating)s зірок"
+msgstr[2] "%(rating)s зірок"
+msgstr[3] "%(rating)s зірок"
+
+#: bookwyrm/templates/snippets/generated_status/goal.html:2
+#, python-format
+msgid "set a goal to read %(counter)s book in %(year)s"
+msgid_plural "set a goal to read %(counter)s books in %(year)s"
+msgstr[0] "поставив(-ла) ціль прочитати %(counter)s книгу в %(year)s"
+msgstr[1] "поставив(-ла) ціль прочитати %(counter)s книг в %(year)s"
+msgstr[2] "поставив(-ла) ціль прочитати %(counter)s книг в %(year)s"
+msgstr[3] "поставив(-ла) ціль прочитати %(counter)s книг в %(year)s"
+
+#: bookwyrm/templates/snippets/generated_status/rating.html:3
+#, python-format
+msgid "rated %(title)s: %(display_rating)s star"
+msgid_plural "rated %(title)s: %(display_rating)s stars"
+msgstr[0] "оцінив(-ла) %(title)s: %(display_rating)s зірка"
+msgstr[1] "оцінив(-ла) %(title)s: %(display_rating)s зірки"
+msgstr[2] "оцінив(-ла) %(title)s: %(display_rating)s зірок"
+msgstr[3] "оцінив(-ла) %(title)s: %(display_rating)s зірок"
+
+#: bookwyrm/templates/snippets/generated_status/review_pure_name.html:4
+#, 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] "Рецензія на \"%(book_title)s\" (%(display_rating)s зірка): %(review_title)s"
+msgstr[1] "Рецензія на \"%(book_title)s\" (%(display_rating)s зірки): %(review_title)s"
+msgstr[2] "Рецензія на \"%(book_title)s\" (%(display_rating)s зірок): %(review_title)s"
+msgstr[3] "Рецензія на \"%(book_title)s\" (%(display_rating)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 "Рецензія на \"%(book_title)s\": %(review_title)s"
+
+#: bookwyrm/templates/snippets/goal_form.html:4
+#, python-format
+msgid "Set a goal for how many books you'll finish reading in %(year)s, and track your progress throughout the year."
+msgstr "Встановіть мету, скільки книг ви хочете прочитати в %(year)s та відстежуйте прогрес протягом року."
+
+#: bookwyrm/templates/snippets/goal_form.html:16
+msgid "Reading goal:"
+msgstr "Мета читання:"
+
+#: bookwyrm/templates/snippets/goal_form.html:21
+msgid "books"
+msgstr "книг"
+
+#: bookwyrm/templates/snippets/goal_form.html:26
+msgid "Goal privacy:"
+msgstr "Приватність мети:"
+
+#: bookwyrm/templates/snippets/goal_form.html:33
+#: bookwyrm/templates/snippets/reading_modals/layout.html:13
+msgid "Post to feed"
+msgstr "Опублікувати у стрічці"
+
+#: bookwyrm/templates/snippets/goal_form.html:37
+msgid "Set goal"
+msgstr "Встановити мету"
+
+#: bookwyrm/templates/snippets/goal_progress.html:7
+msgctxt "Goal successfully completed"
+msgid "Success!"
+msgstr "Успіх!"
+
+#: bookwyrm/templates/snippets/goal_progress.html:9
+#, python-format
+msgid "%(percent)s%% complete!"
+msgstr "%(percent)s%% завершено!"
+
+#: bookwyrm/templates/snippets/goal_progress.html:12
+#, python-format
+msgid "You've read %(read_count)s of %(goal_count)s books."
+msgstr "Ви прочитали %(read_count)s з %(goal_count)s книг."
+
+#: bookwyrm/templates/snippets/goal_progress.html:14
+#, python-format
+msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
+msgstr "%(username)s прочитав(-ла) %(read_count)s з %(goal_count)s книг."
+
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr "Підписатися на новий акаунт"
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
+#: bookwyrm/templates/snippets/page_text.html:8
+#, python-format
+msgid "page %(page)s of %(total_pages)s"
+msgstr "сторінка %(page)s з %(total_pages)s"
+
+#: bookwyrm/templates/snippets/page_text.html:14
+#, python-format
+msgid "page %(page)s"
+msgstr "сторінка %(page)s"
+
+#: bookwyrm/templates/snippets/pagination.html:13
+msgid "Newer"
+msgstr "Новіші"
+
+#: bookwyrm/templates/snippets/pagination.html:15
+msgid "Previous"
+msgstr "Попередня"
+
+#: bookwyrm/templates/snippets/pagination.html:28
+msgid "Older"
+msgstr "Давніші"
+
+#: bookwyrm/templates/snippets/privacy-icons.html:12
+msgid "Followers-only"
+msgstr "Лише для підписників"
+
+#: bookwyrm/templates/snippets/rate_action.html:5
+msgid "Leave a rating"
+msgstr "Поставити рейтинг"
+
+#: bookwyrm/templates/snippets/rate_action.html:20
+msgid "Rate"
+msgstr "Оцінити"
+
+#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
+#, python-format
+msgid "Finish \"%(book_title)s\""
+msgstr "Відмітити \"%(book_title)s\" як прочитане"
+
+#: bookwyrm/templates/snippets/reading_modals/form.html:9
+msgid "(Optional)"
+msgstr "(Необов'язково)"
+
+#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:6
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:61
+msgid "Update progress"
+msgstr "Оновити прогрес"
+
+#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
+#, python-format
+msgid "Start \"%(book_title)s\""
+msgstr "Почати читати \"%(book_title)s\""
+
+#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:6
+#, python-format
+msgid "Stop Reading \"%(book_title)s\""
+msgstr "Припинити Читати \"%(book_title)s\""
+
+#: bookwyrm/templates/snippets/reading_modals/stop_reading_modal.html:32
+#: bookwyrm/templates/snippets/shelf_selector.html:53
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21
+msgid "Stopped reading"
+msgstr "Читання зупинено"
+
+#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
+#, python-format
+msgid "Want to Read \"%(book_title)s\""
+msgstr "Хочу Прочитати \"%(book_title)s\""
+
+#: bookwyrm/templates/snippets/register_form.html:18
+msgid "Choose wisely! Your username cannot be changed."
+msgstr "Обирайте уважно! Ім'я користувача не може бути змінено потім."
+
+#: bookwyrm/templates/snippets/register_form.html:66
+msgid "Sign Up"
+msgstr "Реєстрація"
+
+#: bookwyrm/templates/snippets/report_modal.html:8
+#, python-format
+msgid "Report @%(username)s's status"
+msgstr "Поскаржитись на статус @%(username)s"
+
+#: bookwyrm/templates/snippets/report_modal.html:10
+#, python-format
+msgid "Report %(domain)s link"
+msgstr "Поскаржитись на %(domain)s"
+
+#: bookwyrm/templates/snippets/report_modal.html:12
+#, python-format
+msgid "Report @%(username)s"
+msgstr "Поскаржитись на @%(username)s"
+
+#: bookwyrm/templates/snippets/report_modal.html:34
+#, python-format
+msgid "This report will be sent to %(site_name)s's moderators for review."
+msgstr "Ця скарга буде надіслана модераторам %(site_name)s на перевірку."
+
+#: bookwyrm/templates/snippets/report_modal.html:36
+msgid "Links from this domain will be removed until your report has been reviewed."
+msgstr "Посилання на цей домен будуть видалені, поки ваша скарга не буде розглянута."
+
+#: bookwyrm/templates/snippets/report_modal.html:41
+msgid "More info about this report:"
+msgstr "Опишіть детальніше вашу скаргу:"
+
+#: bookwyrm/templates/snippets/shelf_selector.html:7
+msgid "Move book"
+msgstr "Перемістити книгу"
+
+#: bookwyrm/templates/snippets/shelf_selector.html:38
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:17
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:33
+msgid "Start reading"
+msgstr "Почати читати"
+
+#: bookwyrm/templates/snippets/shelf_selector.html:60
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:38
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:55
+msgid "Want to read"
+msgstr "Хочу прочитати"
+
+#: bookwyrm/templates/snippets/shelf_selector.html:81
+#: bookwyrm/templates/snippets/shelf_selector.html:95
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:73
+#, python-format
+msgid "Remove from %(name)s"
+msgstr "Видалити з %(name)s"
+
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
+msgid "More shelves"
+msgstr "Більше полиць"
+
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:31
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48
+msgid "Stop reading"
+msgstr "Припинити читання"
+
+#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40
+msgid "Finish reading"
+msgstr "Відмітити прочитаним"
+
+#: bookwyrm/templates/snippets/status/content_status.html:69
+msgid "Show status"
+msgstr "Переглянути статус"
+
+#: bookwyrm/templates/snippets/status/content_status.html:91
+#, python-format
+msgid "(Page %(page)s"
+msgstr "(Сторінка %(page)s"
+
+#: bookwyrm/templates/snippets/status/content_status.html:91
+#, python-format
+msgid "%(endpage)s"
+msgstr "%(endpage)s"
+
+#: bookwyrm/templates/snippets/status/content_status.html:93
+#, python-format
+msgid "(%(percent)s%%"
+msgstr "(%(percent)s%%"
+
+#: bookwyrm/templates/snippets/status/content_status.html:93
+#, python-format
+msgid " - %(endpercent)s%%"
+msgstr " - %(endpercent)s%%"
+
+#: bookwyrm/templates/snippets/status/content_status.html:116
+msgid "Open image in new window"
+msgstr "Відкрити зображення в новому вікні"
+
+#: bookwyrm/templates/snippets/status/content_status.html:137
+msgid "Hide status"
+msgstr "Приховати статус"
+
+#: bookwyrm/templates/snippets/status/header.html:45
+#, python-format
+msgid "edited %(date)s"
+msgstr "відредаговано %(date)s"
+
+#: bookwyrm/templates/snippets/status/headers/comment.html:8
+#, python-format
+msgid "commented on %(book)s by %(author_name)s"
+msgstr "прокоментував(-ла) %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/comment.html:15
+#, python-format
+msgid "commented on %(book)s"
+msgstr "прокоментував(-ла) %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/note.html:8
+#, python-format
+msgid "replied to %(username)s's status"
+msgstr "відповів(-ла) на статус від %(username)s"
+
+#: bookwyrm/templates/snippets/status/headers/quotation.html:8
+#, python-format
+msgid "quoted %(book)s by %(author_name)s"
+msgstr "процитував(-ла) %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/quotation.html:15
+#, python-format
+msgid "quoted %(book)s"
+msgstr "процитував(-ла) %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/rating.html:3
+#, python-format
+msgid "rated %(book)s:"
+msgstr "оцінив(-ла) %(book)s:"
+
+#: bookwyrm/templates/snippets/status/headers/read.html:10
+#, python-format
+msgid "finished reading %(book)s by %(author_name)s"
+msgstr "прочитав(-ла) %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/read.html:17
+#, python-format
+msgid "finished reading %(book)s"
+msgstr "прочитав(-ла) %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/reading.html:10
+#, python-format
+msgid "started reading %(book)s by %(author_name)s"
+msgstr "почав(-ла) читати %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/reading.html:17
+#, python-format
+msgid "started reading %(book)s"
+msgstr "почав(-ла) читати %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/review.html:8
+#, python-format
+msgid "reviewed %(book)s by %(author_name)s"
+msgstr "залишив(-ла) рецензію на %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/review.html:15
+#, python-format
+msgid "reviewed %(book)s"
+msgstr "залишив(-ла) рецензію на %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:10
+#, python-format
+msgid "stopped reading %(book)s by %(author_name)s"
+msgstr "припинив(-ла) читати %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/stopped_reading.html:17
+#, python-format
+msgid "stopped reading %(book)s"
+msgstr "припинив(-ла) читати %(book)s"
+
+#: bookwyrm/templates/snippets/status/headers/to_read.html:10
+#, python-format
+msgid "wants to read %(book)s by %(author_name)s"
+msgstr "хоче прочитати %(book)s від %(author_name)s"
+
+#: bookwyrm/templates/snippets/status/headers/to_read.html:17
+#, python-format
+msgid "wants to read %(book)s"
+msgstr "хоче прочитати %(book)s"
+
+#: bookwyrm/templates/snippets/status/layout.html:24
+#: bookwyrm/templates/snippets/status/status_options.html:17
+msgid "Delete status"
+msgstr "Видалити статус"
+
+#: bookwyrm/templates/snippets/status/layout.html:57
+#: bookwyrm/templates/snippets/status/layout.html:58
+msgid "Boost status"
+msgstr "Поширити статус"
+
+#: bookwyrm/templates/snippets/status/layout.html:61
+#: bookwyrm/templates/snippets/status/layout.html:62
+msgid "Like status"
+msgstr "Лайкнути статус"
+
+#: bookwyrm/templates/snippets/status/status.html:10
+msgid "boosted"
+msgstr "поширив(-ла)"
+
+#: bookwyrm/templates/snippets/status/status_options.html:7
+#: bookwyrm/templates/snippets/user_options.html:7
+msgid "More options"
+msgstr "Інші опції"
+
+#: bookwyrm/templates/snippets/switch_edition_button.html:5
+msgid "Switch to this edition"
+msgstr "Переключити на це видання"
+
+#: bookwyrm/templates/snippets/table-sort-header.html:6
+msgid "Sorted ascending"
+msgstr "Відсортовано за зростанням"
+
+#: bookwyrm/templates/snippets/table-sort-header.html:10
+msgid "Sorted descending"
+msgstr "Відсортовано за спаданням"
+
+#: bookwyrm/templates/snippets/trimmed_text.html:17
+msgid "Show more"
+msgstr "Розгорнути"
+
+#: bookwyrm/templates/snippets/trimmed_text.html:35
+msgid "Show less"
+msgstr "Згорнути"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr "Переміщено"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "Видалено"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "Неактивний"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
+msgid "2FA check"
+msgstr "Двофакторна аутентифікація"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:37
+msgid "Enter the code from your authenticator app:"
+msgstr "Введіть код з вашого додатку для аутентифікації:"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_login.html:41
+msgid "Confirm and Log In"
+msgstr "Підтвердити та увійти"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:29
+msgid "2FA is available"
+msgstr "Двофакторна аутентифікація доступна"
+
+#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:34
+msgid "You can secure your account by setting up two factor authentication in your user preferences. This will require a one-time code from your phone in addition to your password each time you log in."
+msgstr "Ви можете захистити свій обліковий запис, увімкнувши двофакторну аутентифікацію в налаштуваннях. Після цього, при кожному вході в систему, треба буде вводити одноразовий код з вашого телефону разом з паролем."
+
+#: bookwyrm/templates/user/books_header.html:9
+#, python-format
+msgid "%(username)s's books"
+msgstr "книги %(username)s"
+
+#: bookwyrm/templates/user/goal.html:12
+#, python-format
+msgid "%(year)s Reading Progress"
+msgstr "Прогрес читання за %(year)s"
+
+#: bookwyrm/templates/user/goal.html:16
+msgid "Edit Goal"
+msgstr "Змінити Мету"
+
+#: bookwyrm/templates/user/goal.html:32
+#, python-format
+msgid "%(name)s hasn't set a reading goal for %(year)s."
+msgstr "%(name)s не встановив(-ла) ціль для читання на %(year)s."
+
+#: bookwyrm/templates/user/goal.html:44
+#, python-format
+msgid "Your %(year)s Books"
+msgstr "Ваші книги за %(year)s"
+
+#: bookwyrm/templates/user/goal.html:46
+#, python-format
+msgid "%(username)s's %(year)s Books"
+msgstr "Книги користувача %(username)s за %(year)s"
+
+#: bookwyrm/templates/user/groups.html:14
+msgid "Your Groups"
+msgstr "Ваші Групи"
+
+#: bookwyrm/templates/user/groups.html:16
+#, python-format
+msgid "Groups: %(username)s"
+msgstr "Групи: %(username)s"
+
+#: bookwyrm/templates/user/layout.html:59
+msgid "Follow Requests"
+msgstr "Запити на підписку"
+
+#: bookwyrm/templates/user/layout.html:83
+#: bookwyrm/templates/user/reviews_comments.html:6
+#: bookwyrm/templates/user/reviews_comments.html:12
+msgid "Reviews and Comments"
+msgstr "Відгуки та Коментарі"
+
+#: bookwyrm/templates/user/lists.html:16
+#, python-format
+msgid "Lists: %(username)s"
+msgstr "Списки: %(username)s"
+
+#: bookwyrm/templates/user/lists.html:22 bookwyrm/templates/user/lists.html:34
+msgid "Create list"
+msgstr "Створити список"
+
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "Приєднався %(date)s"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
+#, python-format
+msgid "%(username)s has no followers"
+msgstr "%(username)s не має підписників"
+
+#: bookwyrm/templates/user/relationships/following.html:6
+#: bookwyrm/templates/user/relationships/following.html:11
+#: bookwyrm/templates/user/relationships/following.html:21
+#: bookwyrm/templates/user/relationships/layout.html:15
+msgid "Following"
+msgstr "Слідкує"
+
+#: bookwyrm/templates/user/relationships/following.html:30
+#, python-format
+msgid "%(username)s isn't following any users"
+msgstr "%(username)s не стежить за жодним користувачем"
+
+#: bookwyrm/templates/user/reviews_comments.html:26
+msgid "No reviews or comments yet!"
+msgstr "Жодних відгуків або коментарів!"
+
+#: bookwyrm/templates/user/user.html:20
+msgid "Edit profile"
+msgstr "Редагувати профіль"
+
+#: bookwyrm/templates/user/user.html:42
+#, python-format
+msgid "View all %(size)s"
+msgstr "Переглянути всі %(size)s"
+
+#: bookwyrm/templates/user/user.html:61
+msgid "View all books"
+msgstr "Переглянути всі книги"
+
+#: bookwyrm/templates/user/user.html:69
+#, python-format
+msgid "%(current_year)s Reading Goal"
+msgstr "Мета читання на %(current_year)s"
+
+#: bookwyrm/templates/user/user.html:76
+msgid "User Activity"
+msgstr "Діяльність користувача"
+
+#: bookwyrm/templates/user/user.html:82
+msgid "Show RSS Options"
+msgstr "Показати опції RSS"
+
+#: bookwyrm/templates/user/user.html:88
+msgid "RSS feed"
+msgstr "RSS-стрічка"
+
+#: bookwyrm/templates/user/user.html:104
+msgid "Complete feed"
+msgstr "Повна стрічка"
+
+#: bookwyrm/templates/user/user.html:109
+msgid "Reviews only"
+msgstr "Тільки рецензії"
+
+#: bookwyrm/templates/user/user.html:114
+msgid "Quotes only"
+msgstr "Тільки цитати"
+
+#: bookwyrm/templates/user/user.html:119
+msgid "Comments only"
+msgstr "Тільки коментарі"
+
+#: bookwyrm/templates/user/user.html:135
+msgid "No activities yet!"
+msgstr "Жодної активності наразі!"
+
+#: bookwyrm/templates/user/user_preview.html:26
+#, python-format
+msgid "%(display_count)s follower"
+msgid_plural "%(display_count)s followers"
+msgstr[0] "%(display_count)s підписник"
+msgstr[1] "%(display_count)s підписників"
+msgstr[2] "%(display_count)s підписників"
+msgstr[3] "%(display_count)s підписників"
+
+#: bookwyrm/templates/user/user_preview.html:31
+#, python-format
+msgid "%(counter)s following"
+msgstr "слідкує за %(counter)s "
+
+#: bookwyrm/templates/user/user_preview.html:45
+#, python-format
+msgid "%(mutuals_display)s follower you follow"
+msgid_plural "%(mutuals_display)s followers you follow"
+msgstr[0] "%(mutuals_display)s підписник, за яким ви слідкуєте"
+msgstr[1] "%(mutuals_display)s підписників, за якими ви слідкуєте"
+msgstr[2] "%(mutuals_display)s підписників, за якими ви слідкуєте"
+msgstr[3] "%(mutuals_display)s підписників, за якими ви слідкуєте"
+
+#: bookwyrm/templates/user/user_preview.html:49
+msgid "No followers you follow"
+msgstr "Немає підписників, за якими ви слідкуєте"
+
+#: bookwyrm/templates/user_menu.html:7
+msgid "View profile and more"
+msgstr "Перегляд профілю та багато іншого"
+
+#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
+msgid "File exceeds maximum size: 10MB"
+msgstr "Файл перевищує максимальний розмір: 10 Мб"
+
+#: bookwyrm/templatetags/list_page_tags.py:14
+#, python-format
+msgid "Book List: %(name)s"
+msgstr "Список Книг: %(name)s"
+
+#: bookwyrm/templatetags/list_page_tags.py:22
+#, python-format
+msgid "%(num)d book - by %(user)s"
+msgid_plural "%(num)d books - by %(user)s"
+msgstr[0] "%(num)d книга – від %(user)s"
+msgstr[1] "%(num)d книги – від %(user)s"
+msgstr[2] "%(num)d книг – від %(user)s"
+msgstr[3] "%(num)d книг – від %(user)s"
+
+#: bookwyrm/templatetags/utilities.py:49
+#, python-format
+msgid "%(title)s: %(subtitle)s"
+msgstr "%(title)s: %(subtitle)s"
+
+#: bookwyrm/views/rss_feed.py:35
+#, python-brace-format
+msgid "Status updates from {obj.display_name}"
+msgstr "Оновлення статусу від {obj.display_name}"
+
+#: bookwyrm/views/rss_feed.py:80
+#, python-brace-format
+msgid "Reviews from {obj.display_name}"
+msgstr "Рецензії від {obj.display_name}"
+
+#: bookwyrm/views/rss_feed.py:122
+#, python-brace-format
+msgid "Quotes from {obj.display_name}"
+msgstr "Цитати додані {obj.display_name}"
+
+#: bookwyrm/views/rss_feed.py:164
+#, python-brace-format
+msgid "Comments from {obj.display_name}"
+msgstr "Коментарі від {obj.display_name}"
+
+#: bookwyrm/views/updates.py:45
+#, python-format
+msgid "Load %(count)d unread status"
+msgid_plural "Load %(count)d unread statuses"
+msgstr[0] "Завантажено %(count)d непрочитаний статус"
+msgstr[1] "Завантажено %(count)d непрочитаних статусів"
+msgstr[2] "Завантажено %(count)d непрочитаних статусів"
+msgstr[3] "Завантажено %(count)d непрочитаних статусів"
+
diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo
index 1d1227f809..b365646885 100644
Binary files a/locale/zh_Hans/LC_MESSAGES/django.mo and b/locale/zh_Hans/LC_MESSAGES/django.mo differ
diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po
index 77591afa9d..3f8bd34d51 100644
--- a/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/locale/zh_Hans/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-02 18:13\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "未找到"
@@ -476,6 +496,20 @@ msgstr "未找到"
msgid "The page you requested doesn't seem to exist!"
msgstr "你请求的页面似乎并不存在!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "哎呀!"
@@ -536,12 +570,12 @@ msgstr "%(site_name)s 的仲裁员和管理员负责维持站点运行, 执行
msgid "Moderator"
msgstr "仲裁员"
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "管理员"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr "软件版本:"
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -678,7 +712,7 @@ msgstr "TA 今年阅读最短的…"
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -764,24 +798,24 @@ msgid "View ISNI record"
msgstr "查看 ISNI 记录"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "在 ISFDB 查看"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "加载数据"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "在 OpenLibrary 查看"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "在 Inventaire 查看"
@@ -793,11 +827,7 @@ msgstr "在 LibraryThing 查看"
msgid "View on Goodreads"
msgstr "在 Goodreads 查看"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "查看 ISFDB 条目"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "%(name)s 所著的书"
@@ -906,7 +936,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -955,19 +985,19 @@ msgstr "确认"
msgid "Unable to connect to remote source."
msgstr "无法联系远程资源。"
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "编辑书目"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "点击添加封面"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "加载封面失败"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "点击放大"
@@ -1040,13 +1070,13 @@ msgstr "地点"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "列表"
@@ -1111,8 +1141,8 @@ msgstr "上传封面:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "从网址加载封面:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1322,7 +1352,7 @@ msgid "Add Another Author"
msgstr "添加其他作者"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "封面"
@@ -1449,8 +1479,9 @@ msgstr "域名"
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "状态"
@@ -1459,7 +1490,7 @@ msgstr "状态"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "动作"
@@ -1523,22 +1554,22 @@ msgstr "%(pages)s 页"
msgid "%(languages)s language"
msgstr "%(languages)s 语言"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "%(publisher)s 于 %(date)s 出版。"
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "%(publisher)s 出版。"
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "于 %(date)s 出版"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "%(publisher)s 出版。"
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "评价了"
@@ -1546,12 +1577,12 @@ msgstr "评价了"
msgid "Series by"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr ""
@@ -1675,6 +1706,7 @@ msgstr "受推荐"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1747,7 +1779,7 @@ msgstr "%(username)s 引用了 %(username)s"
msgstr "与 %(username)s 私信"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "私信"
@@ -1940,7 +1972,7 @@ msgstr "更新"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "你的书目"
@@ -1988,19 +2020,19 @@ msgid "Add to your books"
msgstr "添加到您的书籍中"
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "想读"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "在读"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2009,7 +2041,7 @@ msgid "Read"
msgstr "读过"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr "已停止阅读"
@@ -2019,7 +2051,7 @@ msgid "What are you reading?"
msgstr "你在阅读什么?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "搜索书目"
@@ -2038,8 +2070,8 @@ msgstr "你可以在开始使用 %(site_name)s 后添加书目。"
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2504,7 +2536,7 @@ msgid "Barcode reader"
msgstr "条形码读取器"
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
@@ -2528,15 +2560,15 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "通知"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
@@ -2692,7 +2724,7 @@ msgstr "您可以与其他用户创建或加入一个群组。 群组可以共
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr "群组"
@@ -2737,7 +2769,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "用户个人资料"
@@ -2746,7 +2778,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "阅读目标"
@@ -2785,7 +2817,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "导入书目"
@@ -2796,7 +2828,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
#: bookwyrm/templates/import/import.html:27
@@ -2856,7 +2888,7 @@ msgstr "导入书评的隐私设定"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "导入"
@@ -2953,8 +2985,8 @@ msgid "Row"
msgstr "行"
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "标题"
@@ -2967,8 +2999,8 @@ msgid "Openlibrary key"
msgstr "Openlibrary key"
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "作者"
@@ -3074,10 +3106,6 @@ msgstr "如果您看到意外失败的项目,请联系您的管理员或 You have moved your account to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:32
+msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
+msgstr ""
+
+#: bookwyrm/templates/moved.html:42
+msgid "Undo move"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
+msgid "Log out"
+msgstr "登出"
+
#: bookwyrm/templates/notifications/items/accept.html:18
#, python-format
msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
@@ -3682,6 +3728,12 @@ msgstr "你的 导入 已完成。"
msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
msgstr ""
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+
#: bookwyrm/templates/notifications/items/join.html:16
#, python-format
msgid "has joined your group \"%(group_name)s\""
@@ -3728,6 +3780,16 @@ msgstr ""
msgid "%(related_user)s mentioned you in a status"
msgstr ""
+#: bookwyrm/templates/notifications/items/move_user.html:18
+#, python-format
+msgid "%(related_user)s has moved to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:25
+#, python-format
+msgid "%(related_user)s has undone their move"
+msgstr ""
+
#: bookwyrm/templates/notifications/items/remove.html:17
#, python-format
msgid "has been removed from your group \"%(group_name)s\""
@@ -3765,7 +3827,7 @@ msgid_plural "%(display_count)s new reports need modera
msgstr[0] ""
#: bookwyrm/templates/notifications/items/status_preview.html:4
-#: bookwyrm/templates/snippets/status/content_status.html:73
+#: bookwyrm/templates/snippets/status/content_status.html:62
msgid "Content warning"
msgstr "内容警告"
@@ -3983,9 +4045,51 @@ msgstr "确认密码以开始设置双重身份验证。"
msgid "Set up 2FA"
msgstr "设置双重身份验证"
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr ""
+
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:46
+#: bookwyrm/templates/preferences/layout.html:54
msgid "Blocked Users"
msgstr "屏蔽的用户"
@@ -4015,7 +4119,7 @@ msgstr "新密码:"
#: bookwyrm/templates/preferences/delete_user.html:4
#: bookwyrm/templates/preferences/delete_user.html:7
#: bookwyrm/templates/preferences/delete_user.html:40
-#: bookwyrm/templates/preferences/layout.html:28
+#: bookwyrm/templates/preferences/layout.html:36
#: bookwyrm/templates/settings/users/delete_user_form.html:22
msgid "Delete Account"
msgstr "删除帐号"
@@ -4060,7 +4164,7 @@ msgstr "编辑个人资料"
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr "个人资料"
@@ -4137,18 +4241,45 @@ msgstr "下载文件"
msgid "Account"
msgstr "帐号"
-#: bookwyrm/templates/preferences/layout.html:31
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:39
msgid "Data"
msgstr "数据"
-#: bookwyrm/templates/preferences/layout.html:39
+#: bookwyrm/templates/preferences/layout.html:47
msgid "CSV export"
msgstr "CSV 导出"
-#: bookwyrm/templates/preferences/layout.html:42
+#: bookwyrm/templates/preferences/layout.html:50
msgid "Relationships"
msgstr "关系"
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr ""
+
#: bookwyrm/templates/reading_progress/finish.html:5
#, python-format
msgid "Finish \"%(book_title)s\""
@@ -4555,7 +4686,7 @@ msgid "Streams"
msgstr ""
#: bookwyrm/templates/settings/celery.html:32
-msgid "Broadcasts"
+msgid "Broadcast"
msgstr ""
#: bookwyrm/templates/settings/celery.html:38
@@ -4902,7 +5033,7 @@ msgid "Details"
msgstr "详细"
#: bookwyrm/templates/settings/federation/instance.html:53
-#: bookwyrm/templates/user/layout.html:69
+#: bookwyrm/templates/user/layout.html:79
msgid "Activity"
msgstr "活动"
@@ -5090,7 +5221,7 @@ msgstr "邀请请求"
#: bookwyrm/templates/settings/invites/manage_invites.html:3
#: bookwyrm/templates/settings/invites/manage_invites.html:15
#: bookwyrm/templates/settings/layout.html:42
-#: bookwyrm/templates/user_menu.html:60
+#: bookwyrm/templates/user_menu.html:55
msgid "Invites"
msgstr "邀请"
@@ -5564,57 +5695,73 @@ msgid "Set instance default theme"
msgstr "设置实例默认主题"
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr "主题添加成功"
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr "如何添加一个主题"
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr "从命令行将主题文件复制到您服务器上的 bookwym/static/css/themes
目录。"
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr "使用下面的表格添加文件名以便在应用程序接口中可用。"
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr "添加主题"
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr "无法保存主题"
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr "主题名称"
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr "主题文件名"
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr "可用的主题"
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr "文件"
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr "删除主题"
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr "永久删除用户"
@@ -5653,25 +5800,20 @@ msgstr "最后或缺"
msgid "Remote instance"
msgstr "移除服务器"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr "已删除"
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "停用"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "未设置"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "查看用户个人资料"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr "转到用户管理员"
@@ -5727,27 +5869,39 @@ msgstr "实例详情"
msgid "View instance"
msgstr "查看实例"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr "已永久删除"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr "用户操作"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "停用用户"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "取消停用用户"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "访问级别:"
@@ -5803,7 +5957,7 @@ msgstr "你的域名似乎配置出错了。它不应该包括协议或斜杠。
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr "您正在没有https的实际使用模式下运行BookWyrm,USE_HTTPS应该在实际使用中启用。"
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "设置"
@@ -5860,7 +6014,7 @@ msgid "Need help?"
msgstr "需要帮助?"
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "创建书架"
@@ -5868,57 +6022,57 @@ msgstr "创建书架"
msgid "Edit Shelf"
msgstr "编辑书架"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr "用户个人资料"
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "所有书目"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] "%(formatted_count)s 本书籍"
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr "(正在显示 %(start)s 到 %(end)s)"
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "编辑书架"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "删除书架"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "上架时间"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "开始时间"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "完成时间"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr "直到"
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "此书架是空的。"
@@ -6218,6 +6372,15 @@ msgstr "你已经阅读了 %(goal_count)s 本书中的 %(re
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s 已经阅读了 %(goal_count)s 本书中的 %(read_count)s 本。"
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr ""
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6359,35 +6522,35 @@ msgstr ""
msgid "Finish reading"
msgstr "完成阅读"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr "显示状态"
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "在新窗口中打开图像"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr "隐藏状态"
@@ -6520,6 +6683,18 @@ msgstr "显示更多"
msgid "Show less"
msgstr "显示更少"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr "已删除"
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "停用"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr "双重身份验证检查"
@@ -6578,11 +6753,11 @@ msgstr "您的群组"
msgid "Groups: %(username)s"
msgstr "群组: %(username)s"
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "关注请求"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6597,7 +6772,13 @@ msgstr "列表: %(username)s"
msgid "Create list"
msgstr "创建列表"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "在 %(date)s 加入"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s 没有关注者"
@@ -6668,11 +6849,6 @@ msgstr "仅评论"
msgid "No activities yet!"
msgstr "还没有活动!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "在 %(date)s 加入"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6698,10 +6874,6 @@ msgstr "没有你关注的关注者"
msgid "View profile and more"
msgstr "查看档案和其他"
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "登出"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "文件超过了最大大小: 10MB"
@@ -6717,7 +6889,7 @@ msgid "%(num)d book - by %(user)s"
msgid_plural "%(num)d books - by %(user)s"
msgstr[0] "%(num)d 本书 - 来自 %(user)s"
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr "%(title)s:%(subtitle)s"
diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo
index f9ca27be9b..e9e223f74e 100644
Binary files a/locale/zh_Hant/LC_MESSAGES/django.mo and b/locale/zh_Hant/LC_MESSAGES/django.mo differ
diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po
index c6f7dc28bd..6b9e9a19b1 100644
--- a/locale/zh_Hant/LC_MESSAGES/django.po
+++ b/locale/zh_Hant/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: bookwyrm\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-02 16:40+0000\n"
-"PO-Revision-Date: 2023-10-29 07:42\n"
+"POT-Creation-Date: 2023-12-30 23:52+0000\n"
+"PO-Revision-Date: 2024-01-02 03:12\n"
"Last-Translator: Mouse Reeve %(level)s
."
+msgstr ""
+
+#: bookwyrm/templates/403.html:15
+msgid "If you think you should have access, please speak to your BookWyrm server administrator."
+msgstr ""
+
#: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8
msgid "Not Found"
msgstr "未找到"
@@ -476,6 +496,20 @@ msgstr "未找到"
msgid "The page you requested doesn't seem to exist!"
msgstr "你請求的頁面似乎並不存在!"
+#: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8
+msgid "File too large"
+msgstr ""
+
+#: bookwyrm/templates/413.html:9
+msgid "The file you are uploading is too large."
+msgstr ""
+
+#: bookwyrm/templates/413.html:11
+msgid "\n"
+" You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE
setting.\n"
+" "
+msgstr ""
+
#: bookwyrm/templates/500.html:4
msgid "Oops!"
msgstr "哎呀!"
@@ -536,12 +570,12 @@ msgstr ""
msgid "Moderator"
msgstr ""
-#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:67
+#: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62
msgid "Admin"
msgstr "管理員"
#: bookwyrm/templates/about/about.html:140
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:14
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:28
#: bookwyrm/templates/snippets/status/status_options.html:35
#: bookwyrm/templates/snippets/user_options.html:14
msgid "Send direct message"
@@ -575,7 +609,7 @@ msgid "Software version:"
msgstr ""
#: bookwyrm/templates/about/layout.html:30
-#: bookwyrm/templates/embed-layout.html:33
+#: bookwyrm/templates/embed-layout.html:34
#: bookwyrm/templates/snippets/footer.html:8
#, python-format
msgid "About %(site_name)s"
@@ -678,7 +712,7 @@ msgstr ""
#: bookwyrm/templates/annual_summary/layout.html:157
#: bookwyrm/templates/annual_summary/layout.html:178
#: bookwyrm/templates/annual_summary/layout.html:247
-#: bookwyrm/templates/book/book.html:63
+#: bookwyrm/templates/book/book.html:65
#: bookwyrm/templates/discover/large-book.html:22
#: bookwyrm/templates/landing/large-book.html:26
#: bookwyrm/templates/landing/small-book.html:18
@@ -764,24 +798,24 @@ msgid "View ISNI record"
msgstr "查看 ISNI 記錄"
#: bookwyrm/templates/author/author.html:95
-#: bookwyrm/templates/book/book.html:173
+#: bookwyrm/templates/book/book.html:175
msgid "View on ISFDB"
msgstr "在 ISFDB 查看"
#: bookwyrm/templates/author/author.html:100
#: bookwyrm/templates/author/sync_modal.html:5
-#: bookwyrm/templates/book/book.html:140
+#: bookwyrm/templates/book/book.html:142
#: bookwyrm/templates/book/sync_modal.html:5
msgid "Load data"
msgstr "載入資料"
#: bookwyrm/templates/author/author.html:104
-#: bookwyrm/templates/book/book.html:144
+#: bookwyrm/templates/book/book.html:146
msgid "View on OpenLibrary"
msgstr "在 OpenLibrary 檢視"
#: bookwyrm/templates/author/author.html:119
-#: bookwyrm/templates/book/book.html:158
+#: bookwyrm/templates/book/book.html:160
msgid "View on Inventaire"
msgstr "在 Inventaire 檢視"
@@ -793,11 +827,7 @@ msgstr "在 LibraryThing 查看"
msgid "View on Goodreads"
msgstr "在 Goodreads 查看"
-#: bookwyrm/templates/author/author.html:151
-msgid "View ISFDB entry"
-msgstr "查看 ISFDB 條目"
-
-#: bookwyrm/templates/author/author.html:166
+#: bookwyrm/templates/author/author.html:158
#, python-format
msgid "Books by %(name)s"
msgstr "%(name)s 所著的書"
@@ -906,7 +936,7 @@ msgstr "ISNI:"
#: bookwyrm/templates/settings/registration.html:96
#: bookwyrm/templates/settings/registration_limited.html:76
#: bookwyrm/templates/settings/site.html:144
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:75
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:89
#: bookwyrm/templates/shelf/form.html:25
#: bookwyrm/templates/snippets/reading_modals/layout.html:18
msgid "Save"
@@ -955,19 +985,19 @@ msgstr "確認"
msgid "Unable to connect to remote source."
msgstr "無法連接到遠程數據源。"
-#: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72
+#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74
msgid "Edit Book"
msgstr "編輯書目"
-#: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100
+#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102
msgid "Click to add cover"
msgstr "點擊添加封面"
-#: bookwyrm/templates/book/book.html:106
+#: bookwyrm/templates/book/book.html:108
msgid "Failed to load cover"
msgstr "載入封面失敗"
-#: bookwyrm/templates/book/book.html:117
+#: bookwyrm/templates/book/book.html:119
msgid "Click to enlarge"
msgstr "點擊放大"
@@ -1040,13 +1070,13 @@ msgstr "地點"
#: bookwyrm/templates/guided_tour/lists.html:14
#: bookwyrm/templates/guided_tour/user_books.html:102
#: bookwyrm/templates/guided_tour/user_profile.html:78
-#: bookwyrm/templates/layout.html:90 bookwyrm/templates/lists/curate.html:8
+#: bookwyrm/templates/layout.html:88 bookwyrm/templates/lists/curate.html:8
#: bookwyrm/templates/lists/list.html:12 bookwyrm/templates/lists/lists.html:5
#: bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:26
#: bookwyrm/templates/search/layout.html:51
#: bookwyrm/templates/settings/celery.html:77
-#: bookwyrm/templates/user/layout.html:91 bookwyrm/templates/user/lists.html:6
+#: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6
msgid "Lists"
msgstr "列表"
@@ -1111,8 +1141,8 @@ msgstr "上載封面:"
#: bookwyrm/templates/book/cover_add_modal.html:23
#: bookwyrm/templates/book/edit/edit_book_form.html:250
-msgid "Load cover from url:"
-msgstr "從網址載入封面:"
+msgid "Load cover from URL:"
+msgstr ""
#: bookwyrm/templates/book/cover_show_modal.html:6
msgid "Book cover preview"
@@ -1322,7 +1352,7 @@ msgid "Add Another Author"
msgstr "新增其他作者"
#: bookwyrm/templates/book/edit/edit_book_form.html:231
-#: bookwyrm/templates/shelf/shelf.html:147
+#: bookwyrm/templates/shelf/shelf.html:149
msgid "Cover"
msgstr "封面"
@@ -1449,8 +1479,9 @@ msgstr ""
#: bookwyrm/templates/settings/announcements/announcements.html:37
#: bookwyrm/templates/settings/invites/manage_invite_requests.html:48
#: bookwyrm/templates/settings/invites/status_filter.html:5
+#: bookwyrm/templates/settings/themes.html:111
#: bookwyrm/templates/settings/users/user_admin.html:56
-#: bookwyrm/templates/settings/users/user_info.html:24
+#: bookwyrm/templates/settings/users/user_info.html:35
msgid "Status"
msgstr "狀態"
@@ -1459,7 +1490,7 @@ msgstr "狀態"
#: bookwyrm/templates/settings/federation/instance.html:112
#: bookwyrm/templates/settings/imports/imports.html:141
#: bookwyrm/templates/settings/reports/report_links_table.html:6
-#: bookwyrm/templates/settings/themes.html:99
+#: bookwyrm/templates/settings/themes.html:108
msgid "Actions"
msgstr "動作"
@@ -1523,22 +1554,22 @@ msgstr "%(pages)s 頁"
msgid "%(languages)s language"
msgstr "%(languages)s 語言"
-#: bookwyrm/templates/book/publisher_info.html:65
+#: bookwyrm/templates/book/publisher_info.html:63
#, python-format
msgid "Published %(date)s by %(publisher)s."
msgstr "在 %(date)s 由 %(publisher)s 出版。"
+#: bookwyrm/templates/book/publisher_info.html:65
+#, python-format
+msgid "Published by %(publisher)s."
+msgstr "由 %(publisher)s 出版。"
+
#: bookwyrm/templates/book/publisher_info.html:67
#, python-format
msgid "Published %(date)s"
msgstr "於 %(date)s 出版"
-#: bookwyrm/templates/book/publisher_info.html:69
-#, python-format
-msgid "Published by %(publisher)s."
-msgstr "由 %(publisher)s 出版。"
-
-#: bookwyrm/templates/book/rating.html:13
+#: bookwyrm/templates/book/rating.html:19
msgid "rated it"
msgstr "評價了"
@@ -1546,12 +1577,12 @@ msgstr "評價了"
msgid "Series by"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
#, python-format
msgid "Book %(series_number)s"
msgstr ""
-#: bookwyrm/templates/book/series.html:27
+#: bookwyrm/templates/book/series.html:28
msgid "Unsorted Book"
msgstr ""
@@ -1675,6 +1706,7 @@ msgstr "受推薦"
#: bookwyrm/templates/ostatus/subscribe.html:42
#: bookwyrm/templates/ostatus/success.html:17
#: bookwyrm/templates/ostatus/success.html:18
+#: bookwyrm/templates/user/moved.html:19 bookwyrm/templates/user/moved.html:20
#: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17
msgid "Locked account"
@@ -1747,7 +1779,7 @@ msgstr ""
#: bookwyrm/templates/discover/discover.html:4
#: bookwyrm/templates/discover/discover.html:10
-#: bookwyrm/templates/layout.html:93
+#: bookwyrm/templates/layout.html:91
msgid "Discover"
msgstr ""
@@ -1879,20 +1911,20 @@ msgstr ""
msgid "Test email"
msgstr ""
-#: bookwyrm/templates/embed-layout.html:20 bookwyrm/templates/layout.html:31
-#: bookwyrm/templates/setup/layout.html:15
+#: bookwyrm/templates/embed-layout.html:21 bookwyrm/templates/layout.html:33
+#: bookwyrm/templates/layout.html:163 bookwyrm/templates/setup/layout.html:15
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:18
#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:18
#, python-format
msgid "%(site_name)s home page"
msgstr ""
-#: bookwyrm/templates/embed-layout.html:39
+#: bookwyrm/templates/embed-layout.html:40
#: bookwyrm/templates/snippets/footer.html:12
msgid "Contact site admin"
msgstr "聯絡網站管理員"
-#: bookwyrm/templates/embed-layout.html:45
+#: bookwyrm/templates/embed-layout.html:46
msgid "Join BookWyrm"
msgstr ""
@@ -1902,7 +1934,7 @@ msgid "Direct Messages with %(username)s"
msgstr "與 %(username)s 私信"
#: bookwyrm/templates/feed/direct_messages.html:10
-#: bookwyrm/templates/user_menu.html:44
+#: bookwyrm/templates/user_menu.html:39
msgid "Direct Messages"
msgstr "私信"
@@ -1940,7 +1972,7 @@ msgstr "更新"
#: bookwyrm/templates/feed/suggested_books.html:6
#: bookwyrm/templates/guided_tour/home.html:127
-#: bookwyrm/templates/user_menu.html:39
+#: bookwyrm/templates/layout.html:94
msgid "Your Books"
msgstr "你的書目"
@@ -1988,19 +2020,19 @@ msgid "Add to your books"
msgstr ""
#: bookwyrm/templates/get_started/book_preview.html:10
-#: bookwyrm/templates/shelf/shelf.html:86 bookwyrm/templates/user/user.html:37
+#: bookwyrm/templates/shelf/shelf.html:88 bookwyrm/templates/user/user.html:37
#: bookwyrm/templatetags/shelf_tags.py:14
msgid "To Read"
msgstr "想讀"
#: bookwyrm/templates/get_started/book_preview.html:11
-#: bookwyrm/templates/shelf/shelf.html:87 bookwyrm/templates/user/user.html:38
+#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:38
#: bookwyrm/templatetags/shelf_tags.py:15
msgid "Currently Reading"
msgstr "在讀"
#: bookwyrm/templates/get_started/book_preview.html:12
-#: bookwyrm/templates/shelf/shelf.html:88
+#: bookwyrm/templates/shelf/shelf.html:90
#: bookwyrm/templates/snippets/shelf_selector.html:46
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html:24
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12
@@ -2009,7 +2041,7 @@ msgid "Read"
msgstr "讀過"
#: bookwyrm/templates/get_started/book_preview.html:13
-#: bookwyrm/templates/shelf/shelf.html:89 bookwyrm/templates/user/user.html:40
+#: bookwyrm/templates/shelf/shelf.html:91 bookwyrm/templates/user/user.html:40
#: bookwyrm/templatetags/shelf_tags.py:17
msgid "Stopped Reading"
msgstr ""
@@ -2019,7 +2051,7 @@ msgid "What are you reading?"
msgstr "你在閱讀什麼?"
#: bookwyrm/templates/get_started/books.html:9
-#: bookwyrm/templates/layout.html:39 bookwyrm/templates/lists/list.html:213
+#: bookwyrm/templates/layout.html:41 bookwyrm/templates/lists/list.html:213
msgid "Search for a book"
msgstr "搜尋書目"
@@ -2038,8 +2070,8 @@ msgstr "你可以在開始使用 %(site_name)s 後新增書目。"
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/groups/members.html:15
-#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:45
-#: bookwyrm/templates/layout.html:46 bookwyrm/templates/lists/list.html:217
+#: bookwyrm/templates/groups/members.html:16 bookwyrm/templates/layout.html:47
+#: bookwyrm/templates/layout.html:48 bookwyrm/templates/lists/list.html:217
#: bookwyrm/templates/search/layout.html:5
#: bookwyrm/templates/search/layout.html:10
#: bookwyrm/templates/search/layout.html:32
@@ -2504,7 +2536,7 @@ msgid "Barcode reader"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:102
-msgid "Use the Feed, Lists and Discover links to discover the latest news from your feed, lists of books by topic, and the latest happenings on this Bookwyrm server!"
+msgid "Use the Lists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!"
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:103
@@ -2528,15 +2560,15 @@ msgid "The bell will light up when you have a new notification. When it does, cl
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:177
-#: bookwyrm/templates/layout.html:75 bookwyrm/templates/layout.html:106
-#: bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107
+#: bookwyrm/templates/layout.html:108
#: bookwyrm/templates/notifications/notifications_page.html:5
#: bookwyrm/templates/notifications/notifications_page.html:10
msgid "Notifications"
msgstr "通知"
#: bookwyrm/templates/guided_tour/home.html:200
-msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here."
+msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here."
msgstr ""
#: bookwyrm/templates/guided_tour/home.html:200
@@ -2692,7 +2724,7 @@ msgstr ""
#: bookwyrm/templates/guided_tour/user_groups.html:11
#: bookwyrm/templates/guided_tour/user_profile.html:55
-#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:85
+#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95
msgid "Groups"
msgstr ""
@@ -2737,7 +2769,7 @@ msgid "This is your user profile. All your latest activities will be listed here
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:11
-#: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:14
+#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14
msgid "User Profile"
msgstr "使用者使用者資料"
@@ -2746,7 +2778,7 @@ msgid "This tab shows everything you have read towards your annual reading goal,
msgstr ""
#: bookwyrm/templates/guided_tour/user_profile.html:32
-#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:79
+#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89
msgid "Reading Goal"
msgstr "閱讀目標"
@@ -2785,7 +2817,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:5
#: bookwyrm/templates/import/import.html:9
-#: bookwyrm/templates/shelf/shelf.html:64
+#: bookwyrm/templates/shelf/shelf.html:66
msgid "Import Books"
msgstr "匯入書目"
@@ -2796,7 +2828,7 @@ msgstr ""
#: bookwyrm/templates/import/import.html:21
#, python-format
msgid "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day."
-msgid_plural "Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days."
+msgid_plural "Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s days."
msgstr[0] ""
#: bookwyrm/templates/import/import.html:27
@@ -2856,7 +2888,7 @@ msgstr "匯入書評的私隱設定"
#: bookwyrm/templates/import/import.html:106
#: bookwyrm/templates/import/import.html:108
-#: bookwyrm/templates/preferences/layout.html:35
+#: bookwyrm/templates/preferences/layout.html:43
#: bookwyrm/templates/settings/federation/instance_blocklist.html:78
msgid "Import"
msgstr "匯入"
@@ -2953,8 +2985,8 @@ msgid "Row"
msgstr ""
#: bookwyrm/templates/import/import_status.html:110
-#: bookwyrm/templates/shelf/shelf.html:148
-#: bookwyrm/templates/shelf/shelf.html:170
+#: bookwyrm/templates/shelf/shelf.html:150
+#: bookwyrm/templates/shelf/shelf.html:172
msgid "Title"
msgstr "標題"
@@ -2967,8 +2999,8 @@ msgid "Openlibrary key"
msgstr ""
#: bookwyrm/templates/import/import_status.html:121
-#: bookwyrm/templates/shelf/shelf.html:149
-#: bookwyrm/templates/shelf/shelf.html:173
+#: bookwyrm/templates/shelf/shelf.html:151
+#: bookwyrm/templates/shelf/shelf.html:175
msgid "Author"
msgstr "作者"
@@ -3074,10 +3106,6 @@ msgstr ""
msgid "Create an Account"
msgstr "建立帳號"
-#: bookwyrm/templates/landing/invite.html:21
-msgid "Permission Denied"
-msgstr "沒有權限"
-
#: bookwyrm/templates/landing/invite.html:22
msgid "Sorry! This invite code is no longer valid."
msgstr "抱歉!此邀請碼已不再有效。"
@@ -3125,7 +3153,7 @@ msgid "Login"
msgstr "登入"
#: bookwyrm/templates/landing/login.html:7
-#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:136
+#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:142
#: bookwyrm/templates/ostatus/error.html:37
msgid "Log in"
msgstr "登入"
@@ -3136,7 +3164,7 @@ msgstr ""
#: bookwyrm/templates/landing/login.html:21
#: bookwyrm/templates/landing/reactivate.html:17
-#: bookwyrm/templates/layout.html:127 bookwyrm/templates/ostatus/error.html:28
+#: bookwyrm/templates/layout.html:128 bookwyrm/templates/ostatus/error.html:28
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr "使用者名稱:"
@@ -3144,13 +3172,13 @@ msgstr "使用者名稱:"
#: bookwyrm/templates/landing/login.html:27
#: bookwyrm/templates/landing/password_reset.html:26
#: bookwyrm/templates/landing/reactivate.html:23
-#: bookwyrm/templates/layout.html:131 bookwyrm/templates/ostatus/error.html:32
+#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:32
#: bookwyrm/templates/preferences/2fa.html:91
#: bookwyrm/templates/snippets/register_form.html:45
msgid "Password:"
msgstr "密碼:"
-#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:133
+#: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:139
#: bookwyrm/templates/ostatus/error.html:34
msgid "Forgot your password?"
msgstr "忘記了密碼?"
@@ -3193,35 +3221,35 @@ msgstr ""
msgid "%(site_name)s search"
msgstr ""
-#: bookwyrm/templates/layout.html:37
+#: bookwyrm/templates/layout.html:39
msgid "Search for a book, user, or list"
msgstr ""
-#: bookwyrm/templates/layout.html:52 bookwyrm/templates/layout.html:53
+#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55
msgid "Scan Barcode"
msgstr ""
-#: bookwyrm/templates/layout.html:67
+#: bookwyrm/templates/layout.html:69
msgid "Main navigation menu"
msgstr "主導航選單"
-#: bookwyrm/templates/layout.html:87
-msgid "Feed"
-msgstr "動態"
-
-#: bookwyrm/templates/layout.html:132 bookwyrm/templates/ostatus/error.html:33
+#: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33
msgid "password"
msgstr "密碼"
-#: bookwyrm/templates/layout.html:144
+#: bookwyrm/templates/layout.html:136
+msgid "Show/Hide password"
+msgstr ""
+
+#: bookwyrm/templates/layout.html:150
msgid "Join"
msgstr "加入"
-#: bookwyrm/templates/layout.html:179
+#: bookwyrm/templates/layout.html:196
msgid "Successfully posted status"
msgstr ""
-#: bookwyrm/templates/layout.html:180
+#: bookwyrm/templates/layout.html:197
msgid "Error posting status"
msgstr ""
@@ -3413,6 +3441,7 @@ msgid "Set"
msgstr "設定"
#: bookwyrm/templates/lists/list.html:167
+#: bookwyrm/templates/snippets/remove_follower_button.html:4
#: bookwyrm/templates/snippets/remove_from_group_button.html:20
msgid "Remove"
msgstr "移除"
@@ -3480,6 +3509,23 @@ msgstr ""
msgid "Saved Lists"
msgstr ""
+#: bookwyrm/templates/moved.html:27
+#, python-format
+msgid "You have moved your account to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:32
+msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account."
+msgstr ""
+
+#: bookwyrm/templates/moved.html:42
+msgid "Undo move"
+msgstr ""
+
+#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77
+msgid "Log out"
+msgstr "登出"
+
#: bookwyrm/templates/notifications/items/accept.html:18
#, python-format
msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
@@ -3682,6 +3728,12 @@ msgstr "你的 匯入 已完成。"
msgid "%(related_user)s invited you to join the group \"%(group_name)s\""
msgstr ""
+#: bookwyrm/templates/notifications/items/invite_request.html:15
+#, python-format
+msgid "New invite request awaiting response"
+msgid_plural "%(display_count)s new invite requests awaiting response"
+msgstr[0] ""
+
#: bookwyrm/templates/notifications/items/join.html:16
#, python-format
msgid "has joined your group \"%(group_name)s\""
@@ -3728,6 +3780,16 @@ msgstr ""
msgid "%(related_user)s mentioned you in a status"
msgstr ""
+#: bookwyrm/templates/notifications/items/move_user.html:18
+#, python-format
+msgid "%(related_user)s has moved to %(username)s"
+msgstr ""
+
+#: bookwyrm/templates/notifications/items/move_user.html:25
+#, python-format
+msgid "%(related_user)s has undone their move"
+msgstr ""
+
#: bookwyrm/templates/notifications/items/remove.html:17
#, python-format
msgid "has been removed from your group \"%(group_name)s\""
@@ -3765,7 +3827,7 @@ msgid_plural "%(display_count)s new reports need modera
msgstr[0] ""
#: bookwyrm/templates/notifications/items/status_preview.html:4
-#: bookwyrm/templates/snippets/status/content_status.html:73
+#: bookwyrm/templates/snippets/status/content_status.html:62
msgid "Content warning"
msgstr ""
@@ -3983,9 +4045,51 @@ msgstr ""
msgid "Set up 2FA"
msgstr ""
+#: bookwyrm/templates/preferences/alias_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:4
+#: bookwyrm/templates/preferences/move_user.html:7
+#: bookwyrm/templates/preferences/move_user.html:39
+msgid "Move Account"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:7
+#: bookwyrm/templates/preferences/alias_user.html:34
+msgid "Create Alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:12
+msgid "Add another account as an alias"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:16
+msgid "Marking another account as an alias is required if you want to move that account to this one."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:19
+msgid "This is a reversable action and will not change the functionality of this account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:25
+msgid "Enter the username for the account you want to add as an alias e.g. user@example.com :"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:30
+#: bookwyrm/templates/preferences/move_user.html:35
+msgid "Confirm your password:"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:39
+#: bookwyrm/templates/preferences/layout.html:28
+msgid "Aliases"
+msgstr ""
+
+#: bookwyrm/templates/preferences/alias_user.html:49
+msgid "Remove alias"
+msgstr ""
+
#: bookwyrm/templates/preferences/blocks.html:4
#: bookwyrm/templates/preferences/blocks.html:7
-#: bookwyrm/templates/preferences/layout.html:46
+#: bookwyrm/templates/preferences/layout.html:54
msgid "Blocked Users"
msgstr "封鎖的使用者"
@@ -4015,7 +4119,7 @@ msgstr "新密碼:"
#: bookwyrm/templates/preferences/delete_user.html:4
#: bookwyrm/templates/preferences/delete_user.html:7
#: bookwyrm/templates/preferences/delete_user.html:40
-#: bookwyrm/templates/preferences/layout.html:28
+#: bookwyrm/templates/preferences/layout.html:36
#: bookwyrm/templates/settings/users/delete_user_form.html:22
msgid "Delete Account"
msgstr ""
@@ -4060,7 +4164,7 @@ msgstr "編輯使用者資料"
#: bookwyrm/templates/preferences/edit_user.html:12
#: bookwyrm/templates/preferences/edit_user.html:25
-#: bookwyrm/templates/settings/users/user_info.html:7
+#: bookwyrm/templates/settings/users/user_info.html:8
#: bookwyrm/templates/user_menu.html:29
msgid "Profile"
msgstr "使用者資料"
@@ -4137,18 +4241,45 @@ msgstr ""
msgid "Account"
msgstr "帳號"
-#: bookwyrm/templates/preferences/layout.html:31
-msgid "Data"
+#: bookwyrm/templates/preferences/layout.html:32
+msgid "Move Account"
msgstr ""
#: bookwyrm/templates/preferences/layout.html:39
+msgid "Data"
+msgstr ""
+
+#: bookwyrm/templates/preferences/layout.html:47
msgid "CSV export"
msgstr ""
-#: bookwyrm/templates/preferences/layout.html:42
+#: bookwyrm/templates/preferences/layout.html:50
msgid "Relationships"
msgstr "關係"
+#: bookwyrm/templates/preferences/move_user.html:12
+msgid "Migrate account to another server"
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:16
+msgid "Moving your account will notify all your followers and direct them to follow the new account."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:19
+#, python-format
+msgid "\n"
+" %(user)s will be marked as moved and will not be discoverable or usable unless you undo the move.\n"
+" "
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:25
+msgid "Remember to add this user as an alias of the target account before you try to move."
+msgstr ""
+
+#: bookwyrm/templates/preferences/move_user.html:30
+msgid "Enter the username for the account you want to move to e.g. user@example.com :"
+msgstr ""
+
#: bookwyrm/templates/reading_progress/finish.html:5
#, python-format
msgid "Finish \"%(book_title)s\""
@@ -4553,7 +4684,7 @@ msgid "Streams"
msgstr ""
#: bookwyrm/templates/settings/celery.html:32
-msgid "Broadcasts"
+msgid "Broadcast"
msgstr ""
#: bookwyrm/templates/settings/celery.html:38
@@ -4900,7 +5031,7 @@ msgid "Details"
msgstr "詳細"
#: bookwyrm/templates/settings/federation/instance.html:53
-#: bookwyrm/templates/user/layout.html:69
+#: bookwyrm/templates/user/layout.html:79
msgid "Activity"
msgstr "活動"
@@ -5088,7 +5219,7 @@ msgstr "邀請請求"
#: bookwyrm/templates/settings/invites/manage_invites.html:3
#: bookwyrm/templates/settings/invites/manage_invites.html:15
#: bookwyrm/templates/settings/layout.html:42
-#: bookwyrm/templates/user_menu.html:60
+#: bookwyrm/templates/user_menu.html:55
msgid "Invites"
msgstr "邀請"
@@ -5562,57 +5693,73 @@ msgid "Set instance default theme"
msgstr ""
#: bookwyrm/templates/settings/themes.html:19
+msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable."
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:28
msgid "Successfully added theme"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:26
+#: bookwyrm/templates/settings/themes.html:35
msgid "How to add a theme"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:29
+#: bookwyrm/templates/settings/themes.html:38
msgid "Copy the theme file into the bookwyrm/static/css/themes
directory on your server from the command line."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:32
+#: bookwyrm/templates/settings/themes.html:41
msgid "Run ./bw-dev compile_themes
and ./bw-dev collectstatic
."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:35
+#: bookwyrm/templates/settings/themes.html:44
msgid "Add the file name using the form below to make it available in the application interface."
msgstr ""
-#: bookwyrm/templates/settings/themes.html:42
-#: bookwyrm/templates/settings/themes.html:82
+#: bookwyrm/templates/settings/themes.html:51
+#: bookwyrm/templates/settings/themes.html:91
msgid "Add theme"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:48
+#: bookwyrm/templates/settings/themes.html:57
msgid "Unable to save theme"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:63
-#: bookwyrm/templates/settings/themes.html:93
+#: bookwyrm/templates/settings/themes.html:72
+#: bookwyrm/templates/settings/themes.html:102
msgid "Theme name"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:73
+#: bookwyrm/templates/settings/themes.html:82
msgid "Theme filename"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:88
+#: bookwyrm/templates/settings/themes.html:97
msgid "Available Themes"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:96
+#: bookwyrm/templates/settings/themes.html:105
msgid "File"
msgstr ""
-#: bookwyrm/templates/settings/themes.html:111
+#: bookwyrm/templates/settings/themes.html:123
msgid "Remove theme"
msgstr ""
+#: bookwyrm/templates/settings/themes.html:134
+msgid "Test theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:143
+msgid "Broken theme"
+msgstr ""
+
+#: bookwyrm/templates/settings/themes.html:152
+msgid "Loaded successfully"
+msgstr ""
+
#: bookwyrm/templates/settings/users/delete_user_form.html:5
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:38
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:52
msgid "Permanently delete user"
msgstr ""
@@ -5651,25 +5798,20 @@ msgstr "最後活躍"
msgid "Remote instance"
msgstr "移除伺服器"
-#: bookwyrm/templates/settings/users/user_admin.html:86
-msgid "Deleted"
-msgstr ""
-
-#: bookwyrm/templates/settings/users/user_admin.html:92
-#: bookwyrm/templates/settings/users/user_info.html:32
-msgid "Inactive"
-msgstr "停用"
-
-#: bookwyrm/templates/settings/users/user_admin.html:101
+#: bookwyrm/templates/settings/users/user_admin.html:84
#: bookwyrm/templates/settings/users/user_info.html:127
msgid "Not set"
msgstr "未設定"
-#: bookwyrm/templates/settings/users/user_info.html:16
+#: bookwyrm/templates/settings/users/user_info.html:20
+msgid "This account is the instance actor for signing HTTP requests."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_info.html:24
msgid "View user profile"
msgstr "檢視使用者資料"
-#: bookwyrm/templates/settings/users/user_info.html:19
+#: bookwyrm/templates/settings/users/user_info.html:30
msgid "Go to user admin"
msgstr ""
@@ -5725,27 +5867,39 @@ msgstr "實例詳情"
msgid "View instance"
msgstr "檢視實例"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:5
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:6
msgid "Permanently deleted"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:8
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:9
msgid "User Actions"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:21
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:15
+msgid "This is the instance admin actor"
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:18
+msgid "You must not delete or disable this account as it is critical to the functioning of your server. This actor signs outgoing GET requests to smooth interaction with secure ActivityPub servers."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:19
+msgid "This account is not discoverable by ordinary users and does not have a profile page."
+msgstr ""
+
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:35
msgid "Activate user"
msgstr ""
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:27
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:41
msgid "Suspend user"
msgstr "停用使用者"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:32
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:46
msgid "Un-suspend user"
msgstr "取消停用使用者"
-#: bookwyrm/templates/settings/users/user_moderation_actions.html:54
+#: bookwyrm/templates/settings/users/user_moderation_actions.html:68
msgid "Access level:"
msgstr "訪問權限:"
@@ -5801,7 +5955,7 @@ msgstr ""
msgid "You are running BookWyrm in production mode without https. USE_HTTPS should be enabled in production."
msgstr ""
-#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:49
+#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44
msgid "Settings"
msgstr "設定"
@@ -5858,7 +6012,7 @@ msgid "Need help?"
msgstr ""
#: bookwyrm/templates/shelf/create_shelf_form.html:5
-#: bookwyrm/templates/shelf/shelf.html:72
+#: bookwyrm/templates/shelf/shelf.html:74
msgid "Create shelf"
msgstr "建立書架"
@@ -5866,57 +6020,57 @@ msgstr "建立書架"
msgid "Edit Shelf"
msgstr "編輯書架"
-#: bookwyrm/templates/shelf/shelf.html:24
+#: bookwyrm/templates/shelf/shelf.html:26
#: bookwyrm/templates/user/relationships/followers.html:18
#: bookwyrm/templates/user/relationships/following.html:18
msgid "User profile"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:39
+#: bookwyrm/templates/shelf/shelf.html:41
#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
msgid "All books"
msgstr "所有書目"
-#: bookwyrm/templates/shelf/shelf.html:97
+#: bookwyrm/templates/shelf/shelf.html:99
#, python-format
msgid "%(formatted_count)s book"
msgid_plural "%(formatted_count)s books"
msgstr[0] ""
-#: bookwyrm/templates/shelf/shelf.html:104
+#: bookwyrm/templates/shelf/shelf.html:106
#, python-format
msgid "(showing %(start)s-%(end)s)"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:116
+#: bookwyrm/templates/shelf/shelf.html:118
msgid "Edit shelf"
msgstr "編輯書架"
-#: bookwyrm/templates/shelf/shelf.html:124
+#: bookwyrm/templates/shelf/shelf.html:126
msgid "Delete shelf"
msgstr "刪除書架"
-#: bookwyrm/templates/shelf/shelf.html:152
-#: bookwyrm/templates/shelf/shelf.html:178
+#: bookwyrm/templates/shelf/shelf.html:154
+#: bookwyrm/templates/shelf/shelf.html:180
msgid "Shelved"
msgstr "上架時間"
-#: bookwyrm/templates/shelf/shelf.html:153
-#: bookwyrm/templates/shelf/shelf.html:181
+#: bookwyrm/templates/shelf/shelf.html:155
+#: bookwyrm/templates/shelf/shelf.html:183
msgid "Started"
msgstr "開始時間"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Finished"
msgstr "完成時間"
-#: bookwyrm/templates/shelf/shelf.html:154
-#: bookwyrm/templates/shelf/shelf.html:184
+#: bookwyrm/templates/shelf/shelf.html:156
+#: bookwyrm/templates/shelf/shelf.html:186
msgid "Until"
msgstr ""
-#: bookwyrm/templates/shelf/shelf.html:210
+#: bookwyrm/templates/shelf/shelf.html:212
msgid "This shelf is empty."
msgstr "此書架是空的。"
@@ -6216,6 +6370,15 @@ msgstr "你已經閱讀了 %(goal_count)s 本書中的 %(re
msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
msgstr "%(username)s 已經閱讀了 %(goal_count)s 本書中的 %(read_count)s 本。"
+#: bookwyrm/templates/snippets/move_user_buttons.html:10
+msgid "Follow at new account"
+msgstr ""
+
+#: bookwyrm/templates/snippets/moved_user_notice.html:7
+#, python-format
+msgid "%(user)s has moved to %(moved_to_name)s"
+msgstr ""
+
#: bookwyrm/templates/snippets/page_text.html:8
#, python-format
msgid "page %(page)s of %(total_pages)s"
@@ -6357,35 +6520,35 @@ msgstr ""
msgid "Finish reading"
msgstr "完成閱讀"
-#: bookwyrm/templates/snippets/status/content_status.html:80
+#: bookwyrm/templates/snippets/status/content_status.html:69
msgid "Show status"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "(Page %(page)s"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:102
+#: bookwyrm/templates/snippets/status/content_status.html:91
#, python-format
msgid "%(endpage)s"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid "(%(percent)s%%"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:104
+#: bookwyrm/templates/snippets/status/content_status.html:93
#, python-format
msgid " - %(endpercent)s%%"
msgstr ""
-#: bookwyrm/templates/snippets/status/content_status.html:127
+#: bookwyrm/templates/snippets/status/content_status.html:116
msgid "Open image in new window"
msgstr "在新視窗中開啟圖片"
-#: bookwyrm/templates/snippets/status/content_status.html:148
+#: bookwyrm/templates/snippets/status/content_status.html:137
msgid "Hide status"
msgstr ""
@@ -6518,6 +6681,18 @@ msgstr "顯示更多"
msgid "Show less"
msgstr "顯示更少"
+#: bookwyrm/templates/snippets/user_active_tag.html:5
+msgid "Moved"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:12
+msgid "Deleted"
+msgstr ""
+
+#: bookwyrm/templates/snippets/user_active_tag.html:15
+msgid "Inactive"
+msgstr "停用"
+
#: bookwyrm/templates/two_factor_auth/two_factor_login.html:29
msgid "2FA check"
msgstr ""
@@ -6576,11 +6751,11 @@ msgstr ""
msgid "Groups: %(username)s"
msgstr ""
-#: bookwyrm/templates/user/layout.html:50
+#: bookwyrm/templates/user/layout.html:59
msgid "Follow Requests"
msgstr "關注請求"
-#: bookwyrm/templates/user/layout.html:73
+#: bookwyrm/templates/user/layout.html:83
#: bookwyrm/templates/user/reviews_comments.html:6
#: bookwyrm/templates/user/reviews_comments.html:12
msgid "Reviews and Comments"
@@ -6595,7 +6770,13 @@ msgstr "列表: %(username)s"
msgid "Create list"
msgstr "建立列表"
-#: bookwyrm/templates/user/relationships/followers.html:31
+#: bookwyrm/templates/user/moved.html:25
+#: bookwyrm/templates/user/user_preview.html:22
+#, python-format
+msgid "Joined %(date)s"
+msgstr "在 %(date)s 加入"
+
+#: bookwyrm/templates/user/relationships/followers.html:36
#, python-format
msgid "%(username)s has no followers"
msgstr "%(username)s 沒有關注者"
@@ -6666,11 +6847,6 @@ msgstr ""
msgid "No activities yet!"
msgstr "還沒有活動!"
-#: bookwyrm/templates/user/user_preview.html:22
-#, python-format
-msgid "Joined %(date)s"
-msgstr "在 %(date)s 加入"
-
#: bookwyrm/templates/user/user_preview.html:26
#, python-format
msgid "%(display_count)s follower"
@@ -6696,10 +6872,6 @@ msgstr ""
msgid "View profile and more"
msgstr ""
-#: bookwyrm/templates/user_menu.html:82
-msgid "Log out"
-msgstr "登出"
-
#: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
msgid "File exceeds maximum size: 10MB"
msgstr "檔案超過了最大大小: 10MB"
@@ -6715,7 +6887,7 @@ msgid "%(num)d book - by %(user)s"
msgid_plural "%(num)d books - by %(user)s"
msgstr[0] ""
-#: bookwyrm/templatetags/utilities.py:39
+#: bookwyrm/templatetags/utilities.py:49
#, python-format
msgid "%(title)s: %(subtitle)s"
msgstr ""
diff --git a/nginx/development b/nginx/development
index 841db0124a..2c3a1d02f6 100644
--- a/nginx/development
+++ b/nginx/development
@@ -61,16 +61,29 @@ server {
proxy_pass http://web;
}
- # directly serve images and static files from the
+ # directly serve static files from the
# bookwyrm filesystem using sendfile.
# make the logs quieter by not reporting these requests
- location ~ ^/(images|static)/ {
+ location ~ ^/static/ {
root /app;
try_files $uri =404;
add_header X-Cache-Status STATIC;
access_log off;
}
+ # same with image files not in static folder
+ location ~ \.(bmp|ico|jpg|jpeg|png|svg|tif|tiff|webp)$ {
+ root /app;
+ try_files $uri =404;
+ add_header X-Cache-Status STATIC;
+ access_log off;
+ }
+
+ # block access to any non-image files from images
+ location ~ ^/images/ {
+ return 403;
+ }
+
# monitor the celery queues with flower, no caching enabled
location /flower/ {
proxy_pass http://flower:8888;
diff --git a/nginx/production b/nginx/production
index 9018ab9de7..841ed8afae 100644
--- a/nginx/production
+++ b/nginx/production
@@ -93,15 +93,28 @@ server {
# proxy_pass http://web;
# }
#
-# # directly serve images and static files from the
+# # directly serve static files from the
# # bookwyrm filesystem using sendfile.
# # make the logs quieter by not reporting these requests
-# location ~ ^/(images|static)/ {
+# location ~ ^/static/ {
# root /app;
# try_files $uri =404;
# add_header X-Cache-Status STATIC;
# access_log off;
# }
+
+# # same with image files not in static folder
+# location ~ \.(bmp|ico|jpg|jpeg|png|svg|tif|tiff|webp)$ {
+# root /app;
+# try_files $uri =404;
+# add_header X-Cache-Status STATIC;
+# access_log off;
+# }
+
+# # block access to any non-image files from images
+# location ~ ^/images/ {
+# return 403;
+# }
#
# # monitor the celery queues with flower, no caching enabled
# location /flower/ {
diff --git a/pytest.ini b/pytest.ini
index c5cdc35d13..18c955032e 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -6,10 +6,12 @@ markers =
integration: marks tests as requiring external resources (deselect with '-m "not integration"')
env =
+ LANGUAGE_CODE = en-US
SECRET_KEY = beepbeep
DEBUG = false
USE_HTTPS = true
DOMAIN = your.domain.here
+ ALLOWED_HOSTS = your.domain.here
BOOKWYRM_DATABASE_BACKEND = postgres
MEDIA_ROOT = images/
CELERY_BROKER = ""
diff --git a/redis.conf b/redis.conf
index 2a417579f5..79d6804f52 100644
--- a/redis.conf
+++ b/redis.conf
@@ -2,6 +2,9 @@ bind 127.0.0.1 ::1
protected-mode yes
port 6379
+auto-aof-rewrite-percentage 50
+auto-aof-rewrite-min-size 128mb
+
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
diff --git a/requirements.txt b/requirements.txt
index 90ff18edb8..b9c478fb92 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,52 +1,56 @@
-aiohttp==3.8.6
+aiohttp==3.9.2
bleach==5.0.1
-celery==5.2.7
+boto3==1.26.57
+bw-file-resubmit==0.6.0rc2
+celery==5.3.1
colorthief==0.2.1
-Django==3.2.23
-django-celery-beat==2.4.0
-django-compressor==4.3.1
+Django==3.2.24
+django-celery-beat==2.5.0
+django-compressor==4.4
+django-csp==3.7
django-imagekit==4.1.0
django-model-utils==4.3.1
django-pgtrigger==4.11.0
+django-redis==5.2.0
django-sass-processor==1.2.2
-django-csp==3.7
+django-storages==1.13.2
+django-storages[azure]
environs==9.5.0
-flower==1.2.0
+flower==2.0.0
+grpcio==1.57.0 # Not a direct dependency, pinned to get a security fix
libsass==0.22.0
Markdown==3.4.1
-Pillow==10.0.1
-psycopg2==2.9.5
-pycryptodome==3.16.0
-python-dateutil==2.8.2
-redis==4.5.4
-requests==2.31.0
-responses==0.22.0
-pytz>=2022.7
-boto3==1.26.57
-django-storages==1.13.2
-django-storages[azure]
-django-redis==5.2.0
opentelemetry-api==1.16.0
opentelemetry-exporter-otlp-proto-grpc==1.16.0
opentelemetry-instrumentation-celery==0.37b0
opentelemetry-instrumentation-django==0.37b0
opentelemetry-instrumentation-psycopg2==0.37b0
opentelemetry-sdk==1.16.0
+Pillow==10.0.1
protobuf==3.20.*
+psycopg2==2.9.5
+pycryptodome==3.19.1
pyotp==2.8.0
+python-dateutil==2.8.2
+pytz>=2022.7
qrcode==7.3.1
+redis==4.5.4
+requests==2.31.0
+responses==0.22.0
+setuptools>=65.5.1 # Not a direct dependency, pinned to get a security fix
+tornado==6.3.3 # Not a direct dependency, pinned to get a security fix
# Dev
-pytest-django==4.1.0
-pytest==6.1.2
+celery-types==0.18.0
+django-stubs[compatible-mypy]==4.2.4
+mypy==1.5.1
+pylint==2.15.0
+pytest==6.2.5
pytest-cov==2.10.1
+pytest-django==4.1.0
pytest-env==0.6.2
pytest-xdist==2.3.0
pytidylib==0.3.2
-pylint==2.14.0
-mypy==1.5.1
-celery-types==0.18.0
-django-stubs[compatible-mypy]==4.2.4
types-bleach==6.0.0.4
types-dataclasses==0.6.6
types-Markdown==3.4.2.10
@@ -54,4 +58,3 @@ types-Pillow==10.0.0.3
types-psycopg2==2.9.21.11
types-python-dateutil==2.8.19.14
types-requests==2.31.0.2
-types-requests==2.31.0.2
diff --git a/update.sh b/update.sh
deleted file mode 100755
index 727ce1b24f..0000000000
--- a/update.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-# determine inital and target versions
-initial_version="`./bw-dev runweb python manage.py instance_version --current`"
-target_version="`./bw-dev runweb python manage.py instance_version --target`"
-
-initial_version="`echo $initial_version | tail -n 1 | xargs`"
-target_version="`echo $target_version | tail -n 1 | xargs`"
-if [[ "$initial_version" = "$target_version" ]]; then
- echo "Already up to date; version $initial_version"
- exit
-fi
-
-echo "---------------------------------------"
-echo "Updating from version: $initial_version"
-echo ".......... to version: $target_version"
-echo "---------------------------------------"
-
-function version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; }
-
-# execute scripts between initial and target
-for version in `ls -A updates/ | sort -V `; do
- if version_gt $initial_version $version; then
- # too early
- continue
- fi
- if version_gt $version $target_version; then
- # too late
- continue
- fi
- echo "Running tasks for version $version"
- ./updates/$version
-done
-
-./bw-dev runweb python manage.py instance_version --update
-echo "✨ ----------- Done! --------------- ✨"