From dbd5a02617a19f501a6494e6f5179a73bee3f069 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Wed, 16 Mar 2022 23:56:19 -0700 Subject: [PATCH 001/458] specify npm prefix and stylelint configs and adjust ignores --- bw-dev | 18 ++++++++++-------- dev-tools/.stylelintignore | 1 + dev-tools/.stylelintrc.js | 2 +- dev-tools/Dockerfile | 7 ++++--- dev-tools/package.json | 1 + docker-compose.yml | 1 + 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/bw-dev b/bw-dev index b610758fe..6b1d52255 100755 --- a/bw-dev +++ b/bw-dev @@ -139,19 +139,21 @@ case "$CMD" in docker-compose run --rm dev-tools black celerywyrm bookwyrm ;; prettier) - docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + --write bookwyrm/static/js/*.js ;; stylelint) - docker-compose run --rm dev-tools npx stylelint \ - bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \ - --config dev-tools/.stylelintrc.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ + --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + bookwyrm/static/css ;; formatters) docker-compose run --rm dev-tools black celerywyrm bookwyrm - docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js - docker-compose run --rm dev-tools npx stylelint \ - bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \ - --config dev-tools/.stylelintrc.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + --write bookwyrm/static/js/*.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ + --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + bookwyrm/static/css ;; compilescss) runweb python manage.py compilescss diff --git a/dev-tools/.stylelintignore b/dev-tools/.stylelintignore index b2cd33f89..441f5eb72 100644 --- a/dev-tools/.stylelintignore +++ b/dev-tools/.stylelintignore @@ -1 +1,2 @@ **/vendor/** +**/fonts/** diff --git a/dev-tools/.stylelintrc.js b/dev-tools/.stylelintrc.js index 7ab51b9b3..ba9c50e96 100644 --- a/dev-tools/.stylelintrc.js +++ b/dev-tools/.stylelintrc.js @@ -1,7 +1,7 @@ /* global module */ module.exports = { - "extends": "stylelint-config-standard", + "extends": "stylelint-config-standard-scss", "plugins": [ "stylelint-order" diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index c207a60d0..9e3ddc324 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -2,13 +2,14 @@ FROM python:3.9 ENV PYTHONUNBUFFERED 1 -RUN mkdir /app -WORKDIR /app +WORKDIR /app/dev-tools -COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/ +COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/dev-tools/ RUN pip install -r requirements.txt RUN apt-get update && apt-get install -y curl RUN curl -sL https://deb.nodesource.com/setup_17.x | bash - RUN apt-get install -y nodejs && apt-get clean RUN npm install . + +WORKDIR /app diff --git a/dev-tools/package.json b/dev-tools/package.json index 3fbc940cb..f7b996b77 100644 --- a/dev-tools/package.json +++ b/dev-tools/package.json @@ -11,6 +11,7 @@ "stylelint-config-recommended": "^7.0.0", "stylelint-config-standard": "^25.0.0", "stylelint-order": "^5.0.0", + "stylelint-config-standard-scss": "^3.0.0", "watch": "^0.13.0" }, "dependencies": { diff --git a/docker-compose.yml b/docker-compose.yml index e45cae0d1..f8e0e3ad7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -101,6 +101,7 @@ services: build: dev-tools env_file: .env volumes: + - /app/dev-tools/ - .:/app volumes: pgdata: From 6f27b5fd2e49836dcaafe34ef8ef50b5320320e0 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Wed, 16 Mar 2022 23:56:34 -0700 Subject: [PATCH 002/458] auto-fixes from running this --- bookwyrm/static/css/bookwyrm.scss | 1 - bookwyrm/static/css/bookwyrm/_all.scss | 6 ------ bookwyrm/static/css/themes/bookwyrm-dark.scss | 3 +-- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.scss b/bookwyrm/static/css/bookwyrm.scss index 437795457..c44bf990c 100644 --- a/bookwyrm/static/css/bookwyrm.scss +++ b/bookwyrm/static/css/bookwyrm.scss @@ -1,4 +1,3 @@ @charset "utf-8"; - @import "vendor/bulma/bulma.sass"; @import "bookwyrm/all.scss"; diff --git a/bookwyrm/static/css/bookwyrm/_all.scss b/bookwyrm/static/css/bookwyrm/_all.scss index 6002785f7..bdc34784b 100644 --- a/bookwyrm/static/css/bookwyrm/_all.scss +++ b/bookwyrm/static/css/bookwyrm/_all.scss @@ -16,9 +16,7 @@ @import "components/status"; @import "components/tabs"; @import "components/toggle"; - @import "overrides/bulma_overrides"; - @import "utilities/a11y"; @import "utilities/alignments"; @import "utilities/colors"; @@ -77,7 +75,6 @@ button::-moz-focus-inner { /** Utilities not covered by Bulma ******************************************************************************/ - .tag.is-small { height: auto; } @@ -128,8 +125,6 @@ button:focus-visible .button-invisible-overlay { opacity: 1; } - - /** Tooltips ******************************************************************************/ @@ -151,7 +146,6 @@ button:focus-visible .button-invisible-overlay { cursor: not-allowed; } - /* Notifications page ******************************************************************************/ diff --git a/bookwyrm/static/css/themes/bookwyrm-dark.scss b/bookwyrm/static/css/themes/bookwyrm-dark.scss index 466d8026d..24c21bae2 100644 --- a/bookwyrm/static/css/themes/bookwyrm-dark.scss +++ b/bookwyrm/static/css/themes/bookwyrm-dark.scss @@ -69,7 +69,7 @@ $navbar-dropdown-item-hover-color: $white; } /* misc */ -$shadow: 0 0.5em 1em -0.125em rgba($black, 0.2), 0 0px 0 1px rgba($black, 0.02); +$shadow: 0 0.5em 1em -0.125em rgba($black, 0.2), 0 0 0 1px rgba($black, 0.02); $card-header-shadow: 0 0.125em 0.25em rgba($black, 0.1); $invisible-overlay-background-color: rgba($black, 0.66); $progress-value-background-color: $border-light; @@ -79,6 +79,5 @@ $progress-value-background-color: $border-light; $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; - @import "../bookwyrm.scss"; @import "../vendor/icons.css"; From 54b8d2c3f372c74cc7626f274d543e0366923a80 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Thu, 17 Mar 2022 00:44:16 -0700 Subject: [PATCH 003/458] add import rule override for styles --- dev-tools/.stylelintrc.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dev-tools/.stylelintrc.js b/dev-tools/.stylelintrc.js index ba9c50e96..a3403e89c 100644 --- a/dev-tools/.stylelintrc.js +++ b/dev-tools/.stylelintrc.js @@ -18,5 +18,13 @@ module.exports = { "declaration-block-no-redundant-longhand-properties": null, "no-descending-specificity": null, "alpha-value-notation": null - } + }, + "overrides": [ + { + "files": [ "../**/themes/bookwyrm-*.scss" ], + "rules": { + "no-invalid-position-at-import-rule": null + } + } + ] }; From 225957ba8a6bdea48845d3f102725632cca99ad5 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Thu, 17 Mar 2022 00:44:34 -0700 Subject: [PATCH 004/458] remove non-css extensions --- bookwyrm/static/css/bookwyrm.scss | 4 ++-- bookwyrm/static/css/themes/bookwyrm-dark.scss | 4 ++-- bookwyrm/static/css/themes/bookwyrm-light.scss | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.scss b/bookwyrm/static/css/bookwyrm.scss index c44bf990c..17d6d9119 100644 --- a/bookwyrm/static/css/bookwyrm.scss +++ b/bookwyrm/static/css/bookwyrm.scss @@ -1,3 +1,3 @@ @charset "utf-8"; -@import "vendor/bulma/bulma.sass"; -@import "bookwyrm/all.scss"; +@import "vendor/bulma/bulma"; +@import "bookwyrm/all"; diff --git a/bookwyrm/static/css/themes/bookwyrm-dark.scss b/bookwyrm/static/css/themes/bookwyrm-dark.scss index 24c21bae2..35acbcb02 100644 --- a/bookwyrm/static/css/themes/bookwyrm-dark.scss +++ b/bookwyrm/static/css/themes/bookwyrm-dark.scss @@ -1,4 +1,4 @@ -@import "../vendor/bulma/sass/utilities/initial-variables.sass"; +@import "../vendor/bulma/sass/utilities/initial-variables"; /* Colors ******************************************************************************/ @@ -79,5 +79,5 @@ $progress-value-background-color: $border-light; $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; -@import "../bookwyrm.scss"; +@import "../bookwyrm"; @import "../vendor/icons.css"; diff --git a/bookwyrm/static/css/themes/bookwyrm-light.scss b/bookwyrm/static/css/themes/bookwyrm-light.scss index c74d2ee20..291ae5f08 100644 --- a/bookwyrm/static/css/themes/bookwyrm-light.scss +++ b/bookwyrm/static/css/themes/bookwyrm-light.scss @@ -1,4 +1,4 @@ -@import "../vendor/bulma/sass/utilities/derived-variables.sass"; +@import "../vendor/bulma/sass/utilities/derived-variables"; /* Colors ******************************************************************************/ @@ -55,5 +55,5 @@ $invisible-overlay-background-color: rgba($scheme-invert, 0.66); $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; -@import "../bookwyrm.scss"; +@import "../bookwyrm"; @import "../vendor/icons.css"; From 51bb4c6f5d733c3cb08f5565ead399be8b1d614b Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Thu, 17 Mar 2022 00:49:22 -0700 Subject: [PATCH 005/458] make bw-dev consistent --- bw-dev | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bw-dev b/bw-dev index 6b1d52255..4ce324301 100755 --- a/bw-dev +++ b/bw-dev @@ -139,20 +139,20 @@ case "$CMD" in docker-compose run --rm dev-tools black celerywyrm bookwyrm ;; prettier) - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- prettier \ --write bookwyrm/static/js/*.js ;; stylelint) - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ - --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- stylelint \ + --fix --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore \ bookwyrm/static/css ;; formatters) docker-compose run --rm dev-tools black celerywyrm bookwyrm - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- prettier \ --write bookwyrm/static/js/*.js - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ - --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- stylelint \ + --fix --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore \ bookwyrm/static/css ;; compilescss) From 891a5d4dd8ff5ac17aeccc1387e233433a8f562c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 8 Jul 2022 10:51:22 -0700 Subject: [PATCH 006/458] Adds "Your Books" to the header and removed "Feed" The instance icon is already a link to the feed, and I think it's weird not to have a quick link to your books, since books are important. --- bookwyrm/templates/layout.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index 6b9e4daa1..6f6a40536 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -42,7 +42,7 @@ {% endif %} \ No newline at end of file diff --git a/bookwyrm/views/preferences/move_user.py b/bookwyrm/views/preferences/move_user.py index cc04af4b1..57abef3ea 100644 --- a/bookwyrm/views/preferences/move_user.py +++ b/bookwyrm/views/preferences/move_user.py @@ -39,7 +39,7 @@ class MoveUser(View): user=request.user, object=request.user.remote_id, target=target ) - return redirect("/") + return redirect("user-feed", username=request.user.username) except (PermissionDenied): form.errors["target"] = [ From 01a56540d0e1c10dfa17e4067796344c7992d4d7 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 25 Sep 2023 15:29:01 +1000 Subject: [PATCH 039/458] cleanup --- bookwyrm/activitypub/verbs.py | 3 ++- bookwyrm/models/move.py | 11 ----------- bookwyrm/views/preferences/move_user.py | 4 ++-- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/bookwyrm/activitypub/verbs.py b/bookwyrm/activitypub/verbs.py index bb6000459..00c9524fe 100644 --- a/bookwyrm/activitypub/verbs.py +++ b/bookwyrm/activitypub/verbs.py @@ -256,4 +256,5 @@ class Move(Verb): allow_external_connections=allow_external_connections, ) else: - return None + # we might do something with this to move other objects at some point + pass diff --git a/bookwyrm/models/move.py b/bookwyrm/models/move.py index e5c1d4719..e6833b826 100644 --- a/bookwyrm/models/move.py +++ b/bookwyrm/models/move.py @@ -6,9 +6,6 @@ from bookwyrm import activitypub from .activitypub_mixin import ActivityMixin from .base_model import BookWyrmModel from . import fields -from .status import Status -from bookwyrm.models import User - class Move(ActivityMixin, BookWyrmModel): """migrating an activitypub user account""" @@ -34,14 +31,6 @@ class Move(ActivityMixin, BookWyrmModel): activity_serializer = activitypub.Move - # pylint: disable=unused-argument - @classmethod - def ignore_activity(cls, activity, allow_external_connections=True): - """don't bother with incoming moves of unknown objects""" - # TODO - pass - - class MoveUser(Move): """migrating an activitypub user account""" diff --git a/bookwyrm/views/preferences/move_user.py b/bookwyrm/views/preferences/move_user.py index 57abef3ea..0c9eb1987 100644 --- a/bookwyrm/views/preferences/move_user.py +++ b/bookwyrm/views/preferences/move_user.py @@ -41,9 +41,9 @@ class MoveUser(View): return redirect("user-feed", username=request.user.username) - except (PermissionDenied): + except PermissionDenied: form.errors["target"] = [ - "You must set this server's user as an alias on the user you wish to move to before moving" + "Set this user as an alias on the user you wish to move to before moving" ] data = {"form": form, "user": request.user} return TemplateResponse(request, "preferences/move_user.html", data) From d67903fd4ba66e73a48186f95de8e2e127ece126 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 25 Sep 2023 15:49:25 +1000 Subject: [PATCH 040/458] fix tests and templates --- bookwyrm/models/move.py | 2 ++ bookwyrm/templates/user/layout.html | 1 + bookwyrm/tests/models/test_user_model.py | 6 ++++-- bookwyrm/views/preferences/move_user.py | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/move.py b/bookwyrm/models/move.py index e6833b826..ef7cad372 100644 --- a/bookwyrm/models/move.py +++ b/bookwyrm/models/move.py @@ -7,6 +7,7 @@ from .activitypub_mixin import ActivityMixin from .base_model import BookWyrmModel from . import fields + class Move(ActivityMixin, BookWyrmModel): """migrating an activitypub user account""" @@ -31,6 +32,7 @@ class Move(ActivityMixin, BookWyrmModel): activity_serializer = activitypub.Move + class MoveUser(Move): """migrating an activitypub user account""" diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index c6f33540e..49bed1f9d 100755 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -43,6 +43,7 @@ {% endspaceless %} {% endif %} +
{% if user.moved_to %}
diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 9d6294768..838dd2e49 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -88,9 +88,11 @@ class User(TestCase): "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { - "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", - "schema": "http://schema.org#", "PropertyValue": "schema:PropertyValue", + "alsoKnownAs": {"@id": "as:alsoKnownAs", "@type": "@id"}, + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "movedTo": {"@id": "as:movedTo", "@type": "@id"}, + "schema": "http://schema.org#", "value": "schema:value", }, ], diff --git a/bookwyrm/views/preferences/move_user.py b/bookwyrm/views/preferences/move_user.py index 0c9eb1987..ec664c8eb 100644 --- a/bookwyrm/views/preferences/move_user.py +++ b/bookwyrm/views/preferences/move_user.py @@ -43,7 +43,7 @@ class MoveUser(View): except PermissionDenied: form.errors["target"] = [ - "Set this user as an alias on the user you wish to move to before moving" + "Set this user as an alias on the user you are moving to first" ] data = {"form": form, "user": request.user} return TemplateResponse(request, "preferences/move_user.html", data) From 9547edf845ea9fee30f198b10dce9ebab703233d Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 25 Sep 2023 16:21:19 +1000 Subject: [PATCH 041/458] oops close div --- bookwyrm/templates/user/layout.html | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index 49bed1f9d..4433611e5 100755 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -114,6 +114,7 @@ {% endwith %} +
{% endblock %} {% block panel %}{% endblock %} From 4fd5e2094afc1b5f994051bf53f690b8f9ef87b9 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 25 Sep 2023 16:35:02 +1000 Subject: [PATCH 042/458] hopefully fix template --- bookwyrm/templates/user/layout.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index 4433611e5..57d25120d 100755 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -72,9 +72,10 @@ {% endfor %}
{% endif %} + {% endif %}
- {% block tabs %} + {% if not user.moved_to %} {% with user|username as username %} {% endwith %} - + {% endif %} {% endblock %} + + {% if not user.moved_to %} {% block panel %}{% endblock %} {% endif %} {% endblock %} From b05f2e99e8898cfb700e4d613a21fab731e5dc24 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 25 Sep 2023 22:05:43 +1000 Subject: [PATCH 043/458] undo moves also cleans up some templates --- FEDERATION.md | 5 +++-- bookwyrm/templates/feed/layout.html | 18 ++++++++++++++++++ .../notifications/items/move_user.html | 12 ++++++++---- bookwyrm/templates/preferences/alias_user.html | 5 ++++- bookwyrm/templates/preferences/layout.html | 8 ++++---- bookwyrm/templates/preferences/move_user.html | 4 ++-- bookwyrm/templates/shelf/shelf.html | 18 +++++++++++++++++- bookwyrm/templatetags/utilities.py | 13 ++++++++----- bookwyrm/urls.py | 1 + bookwyrm/views/__init__.py | 2 +- bookwyrm/views/preferences/move_user.py | 15 ++++++++++++++- 11 files changed, 80 insertions(+), 21 deletions(-) diff --git a/FEDERATION.md b/FEDERATION.md index dd0c917e2..d80e98bd3 100644 --- a/FEDERATION.md +++ b/FEDERATION.md @@ -13,14 +13,15 @@ User relationship interactions follow the standard ActivityPub spec. - `Block`: prevent users from seeing one another's statuses, and prevents the blocked user from viewing the actor's profile - `Update`: updates a user's profile and settings - `Delete`: deactivates a user -- `Undo`: reverses a `Follow` or `Block` +- `Undo`: reverses a `Block` or `Follow` ### Activities - `Create/Status`: saves a new status in the database. - `Delete/Status`: Removes a status - `Like/Status`: Creates a favorite on the status - `Announce/Status`: Boosts the status into the actor's timeline -- `Undo/*`,: Reverses a `Like` or `Announce` +- `Undo/*`,: Reverses an `Announce`, `Like`, or `Move` +- `Move/User`: Moves a user from one ActivityPub id to another. ### Collections User's books and lists are represented by [`OrderedCollection`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-orderedcollection) diff --git a/bookwyrm/templates/feed/layout.html b/bookwyrm/templates/feed/layout.html index b70ed99ea..3a17e3e0b 100644 --- a/bookwyrm/templates/feed/layout.html +++ b/bookwyrm/templates/feed/layout.html @@ -1,9 +1,26 @@ {% extends 'layout.html' %} {% load i18n %} +{% load utilities %} {% block title %}{% trans "Updates" %}{% endblock %} {% block content %} +{% if user.moved_to %} +
+
+

+ {% trans "You have have moved to" %} + {% id_to_username user.moved_to %} +

+

{% trans "You can undo this move to restore full functionality, but some followers may have already unfollowed this account." %}

+
+ {% csrf_token %} + + +
+
+
+{% else %}
{% if user.is_authenticated %}
@@ -27,6 +44,7 @@ {% endif %}
+{% endif %} {% endblock %} diff --git a/bookwyrm/templates/notifications/items/move_user.html b/bookwyrm/templates/notifications/items/move_user.html index 39d3af83b..04163bc12 100644 --- a/bookwyrm/templates/notifications/items/move_user.html +++ b/bookwyrm/templates/notifications/items/move_user.html @@ -13,8 +13,12 @@ {% endblock %} {% block description %} - {{ related_user }} {% trans "has moved to" %} {% id_to_username related_user_moved_to %} -
- {% include 'snippets/move_user_buttons.html' with group=notification.related_group %} -
+ {% if related_user_moved_to %} + {{ related_user }} {% trans "has moved to" %} {% id_to_username related_user_moved_to %} +
+ {% include 'snippets/move_user_buttons.html' with group=notification.related_group %} +
+ {% else %} + {{ related_user }} {% trans "has undone their move" %} + {% endif %} {% endblock %} diff --git a/bookwyrm/templates/preferences/alias_user.html b/bookwyrm/templates/preferences/alias_user.html index 3cad65c35..e1e468208 100644 --- a/bookwyrm/templates/preferences/alias_user.html +++ b/bookwyrm/templates/preferences/alias_user.html @@ -13,7 +13,10 @@

- {% trans "Marking another account as an alias is required if you want to move that account to this one. This is a reversable action and will not change this account." %} + {% trans "Marking another account as an alias is required if you want to move that account to this one." %} +

+

+ {% trans "This is a reversable action and will not change the functionality of this account." %}

diff --git a/bookwyrm/templates/preferences/layout.html b/bookwyrm/templates/preferences/layout.html index 2ef09a245..fb0b6fba6 100644 --- a/bookwyrm/templates/preferences/layout.html +++ b/bookwyrm/templates/preferences/layout.html @@ -24,12 +24,12 @@ {% trans "Two Factor Authentication" %}
  • - {% url 'prefs-move' as url %} - {% trans "Move Account" %} + {% url 'prefs-alias' as url %} + {% trans "Aliases" %}
  • - {% url 'prefs-alias' as url %} - {% trans "Add alias" %} + {% url 'prefs-move' as url %} + {% trans "Move Account" %}
  • {% url 'prefs-delete' as url %} diff --git a/bookwyrm/templates/preferences/move_user.html b/bookwyrm/templates/preferences/move_user.html index 444e5aa5e..aa1b9f12d 100644 --- a/bookwyrm/templates/preferences/move_user.html +++ b/bookwyrm/templates/preferences/move_user.html @@ -13,10 +13,10 @@

    - {% trans "Moving your account will notify all your followers and redirect them to the new account." %} + {% trans "Moving your account will notify all your followers and direct them to follow the new account." %}

    - {{ user.username }} {% trans "will be marked as moved and will not be discoverable." %} + {{ user.username }} {% trans "will be marked as moved and will not be discoverable or usable unless you undo the move." %}

    diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 7d0035ed3..a2410ef95 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -18,7 +18,22 @@ {% include 'user/books_header.html' %} - +{% if user.moved_to %} +
    +
    +

    + {% trans "You have have moved to" %} + {% id_to_username user.moved_to %} +

    +

    {% trans "You can undo this move to restore full functionality, but some followers may have already unfollowed this account." %}

    + + {% csrf_token %} + + + +
    +
    +{% else %}
    {% endif %} From 1778c56be0d8ff86af9a77f2ac2512b0f7bf66d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 9 Oct 2023 04:24:05 -0300 Subject: [PATCH 054/458] URL-encode book series name when linking to it Closes: #3021. --- bookwyrm/templates/book/book.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 6dc53fba9..9083f9bdc 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -48,7 +48,7 @@ {% if book.authors.exists %} - + {% endif %} {{ book.series }}{% if book.series_number %} #{{ book.series_number }}{% endif %} {% if book.authors.exists %} From c3c22022f604ec1c934aaf60d4536beaebfdc7be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 9 Oct 2023 20:54:06 -0300 Subject: [PATCH 055/458] Check for punctuation before checking for wrapping parenthesis This allows to parse `(URL).` correctly, which was not detected as URL before. --- bookwyrm/tests/views/test_status.py | 9 +++++++++ bookwyrm/views/status.py | 12 +++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 33bd8b53a..6e630a370 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -436,6 +436,15 @@ http://www.fish.com/""" f'www.fish.com/.', ) + def test_format_links_punctuation_parens(self, *_): + """ignore trailing punctuation and brackets combined""" + # Period at the end, wrapped in brackets. + url = "http://www.fish.com" + self.assertEqual( + views.status.format_links(f"({url})."), + f'(www.fish.com).', + ) + def test_format_links_special_chars(self, *_): """find and format urls into a tags""" url = "https://archive.org/details/dli.granth.72113/page/n25/mode/2up" diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 7a0517b01..196db4eb9 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -304,17 +304,19 @@ def format_links(content): for potential_link in split_content: if not potential_link: continue + + # FIXME: allow for multiple punctuation characters, e.g. `...` and `!?`. + ends_with_punctuation = _ends_with_punctuation(potential_link) + if ends_with_punctuation: + punctuation_glyph = potential_link[-1] + potential_link = potential_link[0:-1] + wrapped = _wrapped(potential_link) if wrapped: wrapper_close = potential_link[-1] formatted_content += potential_link[0] potential_link = potential_link[1:-1] - ends_with_punctuation = _ends_with_punctuation(potential_link) - if ends_with_punctuation: - punctuation_glyph = potential_link[-1] - potential_link = potential_link[0:-1] - try: # raises an error on anything that's not a valid link validator(potential_link) From 0043329cc189ec23390101a9e9055ed592a8db4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 9 Oct 2023 21:01:34 -0300 Subject: [PATCH 056/458] Simplify literals in _wrapped --- bookwyrm/views/status.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 196db4eb9..bb8f6ac17 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -344,7 +344,7 @@ def format_links(content): def _wrapped(text): """check if a line of text is wrapped""" - wrappers = [("(", ")"), ("[", "]"), ("{", "}")] + wrappers = ["()", "[]", "{}"] for wrapper in wrappers: if text[0] == wrapper[0] and text[-1] == wrapper[-1]: return True From 17d741039c95e1a00272e3ed6ed1d3d219218daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 9 Oct 2023 21:33:35 -0300 Subject: [PATCH 057/458] Remove duplicate test (Test case already part of test_format_links_simple_url.) --- bookwyrm/tests/views/test_status.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 6e630a370..42e83c5b8 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -420,14 +420,6 @@ http://www.fish.com/""" 'okay\n\nwww.fish.com/', ) - def test_format_links_parens(self, *_): - """find and format urls into a tags""" - url = "http://www.fish.com/" - self.assertEqual( - views.status.format_links(f"({url})"), - f'(www.fish.com/)', - ) - def test_format_links_punctuation(self, *_): """donā€™t take trailing punctuation into account pls""" url = "http://www.fish.com/" From 97adf2f7fde94d6e4e110de60eaed2944b332ad8 Mon Sep 17 00:00:00 2001 From: Jascha Urbach Date: Sat, 14 Oct 2023 17:21:15 +0200 Subject: [PATCH 058/458] I changed my own comments to get rid of this warning which I could have better written in the first place. --- bookwyrm/static/js/forms.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bookwyrm/static/js/forms.js b/bookwyrm/static/js/forms.js index 08066f137..4a075506e 100644 --- a/bookwyrm/static/js/forms.js +++ b/bookwyrm/static/js/forms.js @@ -47,12 +47,11 @@ .querySelectorAll("[data-remove]") .forEach((node) => node.addEventListener("click", removeInput)); - // Get the element, add a keypress listener... + // Get element, add a keypress listener... document.getElementById("subjects").addEventListener("keypress", function (e) { - // e.target is the element where it listens! - // if e.target is input field within the "subjects" div, do stuff + // Linstening to element e.target + // If e.target is an input field within "subjects" div preventDefault() if (e.target && e.target.nodeName == "INPUT") { - // Item found, prevent default if (event.keyCode == 13) { event.preventDefault(); } From 0f79aea36fb17e80db81902cd048565c7bb15995 Mon Sep 17 00:00:00 2001 From: Jascha Urbach Date: Sat, 14 Oct 2023 17:52:58 +0200 Subject: [PATCH 059/458] introduce .prettierrc With this pullrequest I introduce .prettierrc with one rule: 'trailingComma': 'none' --- .prettierrc | 1 + bookwyrm/static/js/autocomplete.js | 84 +++++++++++++++--------------- bookwyrm/static/js/bookwyrm.js | 26 ++++----- bookwyrm/static/js/guided_tour.js | 4 +- bookwyrm/static/js/tabs.js | 4 +- 5 files changed, 60 insertions(+), 59 deletions(-) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..c549b16ba --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +'trailingComma': 'none' \ No newline at end of file diff --git a/bookwyrm/static/js/autocomplete.js b/bookwyrm/static/js/autocomplete.js index a98cd9634..16281f5a5 100644 --- a/bookwyrm/static/js/autocomplete.js +++ b/bookwyrm/static/js/autocomplete.js @@ -88,64 +88,64 @@ const tries = { mimetype: { a: { a: { - c: "AAC", + c: "AAC" }, z: { - w: "AZW", - }, + w: "AZW" + } }, d: { a: { i: { s: { - y: "Daisy", - }, - }, - }, + y: "Daisy" + } + } + } }, e: { p: { u: { - b: "EPUB", - }, - }, + b: "EPUB" + } + } }, f: { l: { a: { - c: "FLAC", - }, - }, + c: "FLAC" + } + } }, h: { t: { m: { - l: "HTML", - }, - }, + l: "HTML" + } + } }, m: { 4: { a: "M4A", - b: "M4B", + b: "M4B" }, o: { b: { - i: "MOBI", - }, + i: "MOBI" + } }, p: { - 3: "MP3", - }, + 3: "MP3" + } }, o: { g: { - g: "OGG", - }, + g: "OGG" + } }, p: { d: { - f: "PDF", + f: "PDF" }, l: { a: { @@ -154,13 +154,13 @@ const tries = { t: { e: { x: { - t: "Plaintext", - }, - }, - }, - }, - }, - }, + t: "Plaintext" + } + } + } + } + } + } }, r: { i: { @@ -170,15 +170,15 @@ const tries = { b: { o: { o: { - k: "Print book", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, + k: "Print book" + } + } + } + } + } + } + } + } + } + } }; diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index 67d64688f..b67ee55a0 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -352,8 +352,8 @@ let BookWyrm = new (class { method: "POST", body: new FormData(form), headers: { - Accept: "application/json", - }, + Accept: "application/json" + } }); } @@ -620,7 +620,7 @@ let BookWyrm = new (class { 'input:not([type="hidden"]):not([disabled])', "select:not([disabled])", "details:not([disabled])", - '[tabindex]:not([tabindex="-1"]):not([disabled])', + '[tabindex]:not([tabindex="-1"]):not([disabled])' ].join(",") ); const firstFocusableEl = focusableEls[0]; @@ -675,8 +675,8 @@ let BookWyrm = new (class { target: scannerNode, constraints: { facingMode: "environment", - deviceId: cameraId, - }, + deviceId: cameraId + } }, decoder: { readers: [ @@ -684,12 +684,12 @@ let BookWyrm = new (class { { format: "ean_reader", config: { - supplements: ["ean_2_reader", "ean_5_reader"], - }, - }, + supplements: ["ean_2_reader", "ean_5_reader"] + } + } ], - multiple: false, - }, + multiple: false + } }, (err) => { if (err) { @@ -756,7 +756,7 @@ let BookWyrm = new (class { .forEach((box) => { Quagga.ImageDebug.drawPath(box, { x: 0, y: 1 }, drawingCtx, { color: "green", - lineWidth: 2, + lineWidth: 2 }); }); } @@ -764,14 +764,14 @@ let BookWyrm = new (class { if (result.box) { Quagga.ImageDebug.drawPath(result.box, { x: 0, y: 1 }, drawingCtx, { color: "#00F", - lineWidth: 2, + lineWidth: 2 }); } if (result.codeResult && result.codeResult.code) { Quagga.ImageDebug.drawPath(result.line, { x: "x", y: "y" }, drawingCtx, { color: "red", - lineWidth: 3, + lineWidth: 3 }); } } diff --git a/bookwyrm/static/js/guided_tour.js b/bookwyrm/static/js/guided_tour.js index 56cdcdf57..a52de6edf 100644 --- a/bookwyrm/static/js/guided_tour.js +++ b/bookwyrm/static/js/guided_tour.js @@ -9,10 +9,10 @@ function disableGuidedTour(csrf_token) { "use strict"; fetch("/guided-tour/False", { headers: { - "X-CSRFToken": csrf_token, + "X-CSRFToken": csrf_token }, method: "POST", redirect: "follow", - mode: "same-origin", + mode: "same-origin" }); } diff --git a/bookwyrm/static/js/tabs.js b/bookwyrm/static/js/tabs.js index 1dcb0cace..5d5b426e8 100644 --- a/bookwyrm/static/js/tabs.js +++ b/bookwyrm/static/js/tabs.js @@ -32,7 +32,7 @@ class TabGroup { left: 37, up: 38, right: 39, - down: 40, + down: 40 }; } @@ -42,7 +42,7 @@ class TabGroup { 37: -1, 38: -1, 39: 1, - 40: 1, + 40: 1 }; } From a4bfcb34d5c2e53448700c5970b2c3634fc1245c Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 15 Oct 2023 15:09:19 +1100 Subject: [PATCH 060/458] fix tests and clean up * cleans up some test logging * cleans up some commented-out code * adds export_job model tests * reconsiders some tests in export user view tests --- bookwyrm/models/bookwyrm_export_job.py | 8 - .../templates/preferences/export-user.html | 16 +- .../tests/models/test_bookwyrm_export_job.py | 233 ++++++++++++++++++ ...t_model.py => test_bookwyrm_import_job.py} | 27 +- .../views/preferences/test_export_user.py | 23 -- 5 files changed, 261 insertions(+), 46 deletions(-) create mode 100644 bookwyrm/tests/models/test_bookwyrm_export_job.py rename bookwyrm/tests/models/{test_bookwyrm_import_model.py => test_bookwyrm_import_job.py} (96%) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index c262d9b5c..c3a0b652a 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -153,20 +153,12 @@ def json_export(user): comments = models.Comment.objects.filter(user=user, book=book["id"]).distinct() book["comments"] = list(comments.values()) - logger.error("FINAL COMMENTS") - logger.error(book["comments"]) # quotes quotes = models.Quotation.objects.filter(user=user, book=book["id"]).distinct() - # quote_statuses = models.Status.objects.filter( - # id__in=quotes, user=kwargs["user"] - # ).distinct() book["quotes"] = list(quotes.values()) - logger.error("FINAL QUOTES") - logger.error(book["quotes"]) - # append everything final_books.append(book) diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 81f13bc22..393d8990e 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -12,15 +12,13 @@

    {% trans "Your exported archive file will include all user data for import into another Bookwyrm server" %}

    -

    -

    - {% csrf_token %} - -
    -

    +
    + {% csrf_token %} + +

    {% trans "Recent Exports" %}

    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 000000000..bd314e60e --- /dev/null +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -0,0 +1,233 @@ +import datetime +import time +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 + item = 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)["user"] + self.assertEqual(user_data["username"], "mouse") + self.assertEqual(user_data["name"], "Mouse") + self.assertEqual(user_data["summary"], "I'm a real bookmouse") + self.assertEqual(user_data["manually_approves_followers"], False) + self.assertEqual(user_data["hide_follows"], False) + self.assertEqual(user_data["show_goal"], False) + self.assertEqual(user_data["show_suggested_users"], False) + self.assertEqual(user_data["discoverable"], True) + self.assertEqual(user_data["preferred_timezone"], "America/Los Angeles") + self.assertEqual(user_data["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["blocked_users"]), 1) + self.assertEqual( + json_data["blocked_users"][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]["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]["identifier"], "read") + self.assertEqual( + json_data["books"][0]["shelf_books"]["read"][0]["book_id"], self.edition.id + ) + + self.assertEqual(len(json_data["books"][0]["lists"]), 1) + self.assertEqual(json_data["books"][0]["lists"][0]["name"], "My excellent list") + self.assertEqual(len(json_data["books"][0]["list_items"]), 1) + self.assertEqual( + json_data["books"][0]["list_items"]["My excellent list"][0]["book_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]["quotes"]), 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.00") + + 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]["quotes"][0]["content"], "check this out" + ) + self.assertEqual( + json_data["books"][0]["quotes"][0]["quote"], "A rose by any other name" + ) + + def test_tar_export(self): + """test the tar export function""" + + # TODO + pass diff --git a/bookwyrm/tests/models/test_bookwyrm_import_model.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py similarity index 96% rename from bookwyrm/tests/models/test_bookwyrm_import_model.py rename to bookwyrm/tests/models/test_bookwyrm_import_job.py index 644cbd265..61713cd17 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_model.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -70,15 +70,28 @@ class BookwyrmImport(TestCase): self.tarfile = BookwyrmTarFile.open( mode="r:gz", fileobj=open(archive_file, "rb") ) - self.import_data = json.loads( - self.tarfile.read("archive.json").decode("utf-8") - ) + self.import_data = json.loads(self.tarfile.read("archive.json").decode("utf-8")) def test_update_user_profile(self): """Test update the user's profile from import data""" - # TODO once the tar is set up - pass + with patch("bookwyrm.suggested_users.remove_user_task.delay"), patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ): + + models.bookwyrm_import_job.update_user_profile( + self.local_user, self.tarfile, self.import_data.get("user") + ) + 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""" @@ -543,6 +556,8 @@ class BookwyrmImport(TestCase): 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(), 2 + models.Shelf.objects.filter(user=self.local_user.id).count(), 4 ) diff --git a/bookwyrm/tests/views/preferences/test_export_user.py b/bookwyrm/tests/views/preferences/test_export_user.py index c7594749b..1483fc4ec 100644 --- a/bookwyrm/tests/views/preferences/test_export_user.py +++ b/bookwyrm/tests/views/preferences/test_export_user.py @@ -49,26 +49,3 @@ class ExportUserViews(TestCase): jobs = models.bookwyrm_export_job.BookwyrmExportJob.objects.count() self.assertEqual(jobs, 1) - - def test_download_export_user_file(self, *_): - """simple user export""" - - # TODO: need some help with this one - job = models.bookwyrm_export_job.BookwyrmExportJob.objects.create( - user=self.local_user - ) - MockTask = namedtuple("Task", ("id")) - with patch( - "bookwyrm.models.bookwyrm_export_job.start_export_task.delay" - ) as mock: - mock.return_value = MockTask(b'{"name": "mouse"}') - job.start_job() - - request = self.factory.get("") - request.user = self.local_user - job.refresh_from_db() - export = views.ExportArchive.as_view()(request, job.id) - self.assertIsInstance(export, HttpResponse) - self.assertEqual(export.status_code, 200) - # pylint: disable=line-too-long - self.assertEqual(export.content, b'{"name": "mouse"}') From 8f0f3e6ace98cf8812473b1569fc2f0b8204e437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 15 Oct 2023 19:43:51 -0300 Subject: [PATCH 061/458] ImportItem: preserve parsed timezones in date_started, date_read This is a follow-up to b564e514f ("Handle parsed dates that already have a timezone on import"), which was applied to `date_added` only. (Appart from consistency, this will allow to apply future parsing fixes more easily.) --- bookwyrm/models/import_job.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/bookwyrm/models/import_job.py b/bookwyrm/models/import_job.py index 8929e9037..8329ee955 100644 --- a/bookwyrm/models/import_job.py +++ b/bookwyrm/models/import_job.py @@ -259,12 +259,10 @@ class ImportItem(models.Model): except ValueError: return None - @property - def date_added(self): - """when the book was added to this dataset""" - if self.normalized_data.get("date_added"): + def _parse_datefield(self, field, /): + if self.normalized_data.get(field): parsed_date_added = dateutil.parser.parse( - self.normalized_data.get("date_added") + self.normalized_data.get(field) ) if timezone.is_aware(parsed_date_added): @@ -274,23 +272,20 @@ class ImportItem(models.Model): return timezone.make_aware(parsed_date_added) return None + @property + def date_added(self): + """when the book was added to this dataset""" + return self._parse_datefield("date_added") + @property def date_started(self): """when the book was started""" - if self.normalized_data.get("date_started"): - return timezone.make_aware( - dateutil.parser.parse(self.normalized_data.get("date_started")) - ) - return None + return self._parse_datefield("date_started") @property def date_read(self): """the date a book was completed""" - if self.normalized_data.get("date_finished"): - return timezone.make_aware( - dateutil.parser.parse(self.normalized_data.get("date_finished")) - ) - return None + return self._parse_datefield("date_finished") @property def reads(self): From c066d11eb1c62021a980ec1535b7c8fde0bbf9a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 15 Oct 2023 19:49:00 -0300 Subject: [PATCH 062/458] Bugfix: default missing date components to 1, not today's Fixes: #2660. --- bookwyrm/models/import_job.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/bookwyrm/models/import_job.py b/bookwyrm/models/import_job.py index 8329ee955..f5d86ad2e 100644 --- a/bookwyrm/models/import_job.py +++ b/bookwyrm/models/import_job.py @@ -1,4 +1,5 @@ """ track progress of goodreads imports """ +from datetime import datetime import math import re import dateutil.parser @@ -260,17 +261,14 @@ class ImportItem(models.Model): return None def _parse_datefield(self, field, /): - if self.normalized_data.get(field): - parsed_date_added = dateutil.parser.parse( - self.normalized_data.get(field) - ) + if not (date := self.normalized_data.get(field)): + return None - if timezone.is_aware(parsed_date_added): - # Keep timezone if import already had one - return parsed_date_added + defaults = datetime(1970, 1, 1) # "2022-10" => "2022-10-01" + parsed = dateutil.parser.parse(date, default=defaults) - return timezone.make_aware(parsed_date_added) - return None + # Keep timezone if import already had one, else use default. + return parsed if timezone.is_aware(parsed) else timezone.make_aware(parsed) @property def date_added(self): From c02306a66b23feb11e9436c0084a194c3485fda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 15 Oct 2023 19:58:51 -0300 Subject: [PATCH 063/458] Default to Jan 1st too on incomplete dates received from ActivityPub --- bookwyrm/models/fields.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index d21c9363d..28effaf9b 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -1,5 +1,6 @@ """ activitypub-aware django model fields """ from dataclasses import MISSING +from datetime import datetime import re from uuid import uuid4 from urllib.parse import urljoin @@ -534,8 +535,10 @@ class DateTimeField(ActivitypubFieldMixin, models.DateTimeField): return value.isoformat() def field_from_activity(self, value, allow_external_connections=True): + missing_fields = datetime(1970, 1, 1) # "2022-10" => "2022-10-01" try: - date_value = dateutil.parser.parse(value) + # TODO(dato): investigate `ignoretz=True` wrt bookwyrm#3028. + date_value = dateutil.parser.parse(value, default=missing_fields) try: return timezone.make_aware(date_value) except ValueError: From 8afcb9b6d3e4ab46d38afed7e5bdc9cfd9c890f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 15 Oct 2023 22:03:45 -0300 Subject: [PATCH 064/458] Fix tests warning: ImportJob.updated_date received a naive datetime --- bookwyrm/tests/views/imports/test_import.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/views/imports/test_import.py b/bookwyrm/tests/views/imports/test_import.py index ea88b197d..7dd87d4c2 100644 --- a/bookwyrm/tests/views/imports/test_import.py +++ b/bookwyrm/tests/views/imports/test_import.py @@ -7,6 +7,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory +from django.utils import timezone from bookwyrm import forms, models, views from bookwyrm.tests.validate_html import validate_html @@ -128,7 +129,7 @@ class ImportViews(TestCase): def test_get_average_import_time_with_data(self): """Now, with data""" - now = datetime.datetime.now() + now = timezone.now() two_hours_ago = now - datetime.timedelta(hours=2) four_hours_ago = now - datetime.timedelta(hours=4) models.ImportJob.objects.create( @@ -152,7 +153,7 @@ class ImportViews(TestCase): def test_get_average_import_time_ignore_stopped(self): """Don't include stopped, do include no status""" - now = datetime.datetime.now() + now = timezone.now() two_hours_ago = now - datetime.timedelta(hours=2) four_hours_ago = now - datetime.timedelta(hours=4) models.ImportJob.objects.create( From 3251ef0bf5f88630bb0efcc172687ae0bc6069aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 16 Oct 2023 17:32:26 -0300 Subject: [PATCH 065/458] Fix creation of covers for ActivityPub imports `cover` comes as a JSON dict, but the code was looking for URL as an attribute. (This commit leaves the attribute access in place, just in case `cover` is updated to serialize as Document proper.) --- bookwyrm/models/fields.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index d21c9363d..a505170e1 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -482,10 +482,12 @@ class ImageField(ActivitypubFieldMixin, models.ImageField): image_slug = value # when it's an inline image (User avatar/icon, Book cover), it's a json # blob, but when it's an attached image, it's just a url - if hasattr(image_slug, "url"): - url = image_slug.url - elif isinstance(image_slug, str): + if isinstance(image_slug, str): url = image_slug + elif isinstance(image_slug, dict): + url = image_slug.get("url") + elif hasattr(image_slug, "url"): # Serialized to Image/Document object? + url = image_slug.url else: return None From 1937177e1a5df853d2cea1ba1436b4baa2290e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Tue, 17 Oct 2023 02:25:26 -0300 Subject: [PATCH 066/458] dev-tools: use apt source for Node instead of setup script Extra bits: - use a single RUN instruction - silence upgrade notices from pip and npm --- dev-tools/Dockerfile | 20 ++++++++++---------- dev-tools/nodejs.sources | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 dev-tools/nodejs.sources diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index 9abc7491e..7063aab1b 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -1,14 +1,14 @@ FROM python:3.9 - -ENV PYTHONUNBUFFERED 1 - -RUN mkdir /app WORKDIR /app -COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/ -RUN pip install -r requirements.txt +ENV PYTHONUNBUFFERED=1 +ENV NPM_CONFIG_UPDATE_NOTIFIER=false +ENV PIP_ROOT_USER_ACTION=ignore PIP_DISABLE_PIP_VERSION_CHECK=1 -RUN apt-get update && apt-get install -y curl -RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - -RUN apt-get install -y nodejs && apt-get clean -RUN npm install . +COPY nodejs.sources /etc/apt/sources.list.d/ +COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/ + +RUN apt-get update && \ + apt-get install -y nodejs && \ + pip install -r requirements.txt && \ + npm install . diff --git a/dev-tools/nodejs.sources b/dev-tools/nodejs.sources new file mode 100644 index 000000000..1e0c3ba40 --- /dev/null +++ b/dev-tools/nodejs.sources @@ -0,0 +1,34 @@ +Types: deb +URIs: https://deb.nodesource.com/node_18.x +Suites: nodistro +Components: main +Signed-By: + -----BEGIN PGP PUBLIC KEY BLOCK----- + . + mQENBFdDN1ABCADaNd/I3j3tn40deQNgz7hB2NvT+syXe6k4ZmdiEcOfBvFrkS8B + hNS67t93etHsxEy7E0qwsZH32bKazMqe9zDwoa3aVImryjh6SHC9lMtW27JPHFeM + Srkt9YmH1WMwWcRO6eSY9B3PpazquhnvbammLuUojXRIxkDroy6Fw4UKmUNSRr32 + 9Ej87jRoR1B2/57Kfp2Y4+vFGGzSvh3AFQpBHq51qsNHALU6+8PjLfIt+5TPvaWR + TB+kAZnQZkaIQM2nr1n3oj6ak2RATY/+kjLizgFWzgEfbCrbsyq68UoY5FPBnu4Z + E3iDZpaIqwKr0seUC7iA1xM5eHi5kty1oB7HABEBAAG0Ik5Tb2xpZCA8bnNvbGlk + LWdwZ0Bub2Rlc291cmNlLmNvbT6JATgEEwECACIFAldDN1ACGwMGCwkIBwMCBhUI + AgkKCwQWAgMBAh4BAheAAAoJEC9ZtfmbG+C0y7wH/i4xnab36dtrYW7RZwL8i6Sc + NjMx4j9+U1kr/F6YtqWd+JwCbBdar5zRghxPcYEq/qf7MbgAYcs1eSOuTOb7n7+o + xUwdH2iCtHhKh3Jr2mRw1ks7BbFZPB5KmkxHaEBfLT4d+I91ZuUdPXJ+0SXs9gzk + Dbz65Uhoz3W03aiF8HeL5JNARZFMbHHNVL05U1sTGTCOtu+1c/33f3TulQ/XZ3Y4 + hwGCpLe0Tv7g7Lp3iLMZMWYPEa0a7S4u8he5IEJQLd8bE8jltcQvrdr3Fm8kI2Jg + BJmUmX4PSfhuTCFaR/yeCt3UoW883bs9LfbTzIx9DJGpRIu8Y0IL3b4sj/GoZVq5 + AQ0EV0M3UAEIAKrTaC62ayzqOIPa7nS90BHHck4Z33a2tZF/uof38xNOiyWGhT8u + JeFoTTHn5SQq5Ftyu4K3K2fbbpuu/APQF05AaljzVkDGNMW4pSkgOasdysj831cu + ssrHX2RYS22wg80k6C/Hwmh5F45faEuNxsV+bPx7oPUrt5n6GMx84vEP3i1+FDBi + 0pt/B/QnDFBXki1BGvJ35f5NwDefK8VaInxXP3ZN/WIbtn5dqxppkV/YkO7GiJlp + Jlju9rf3kKUIQzKQWxFsbCAPIHoWv7rH9RSxgDithXtG6Yg5R1aeBbJaPNXL9wpJ + YBJbiMjkAFaz4B95FOqZm3r7oHugiCGsHX0AEQEAAYkBHwQYAQIACQUCV0M3UAIb + DAAKCRAvWbX5mxvgtE/OB/0VN88DR3Y3fuqy7lq/dthkn7Dqm9YXdorZl3L152eE + IF882aG8FE3qZdaLGjQO4oShAyNWmRfSGuoH0XERXAI9n0r8m4mDMxE6rtP7tHet + y/5M8x3CTyuMgx5GLDaEUvBusnTD+/v/fBMwRK/cZ9du5PSG4R50rtst+oYyC2ao + x4I2SgjtF/cY7bECsZDplzatN3gv34PkcdIg8SLHAVlL4N5tzumDeizRspcSyoy2 + K2+hwKU4C4+dekLLTg8rjnRROvplV2KtaEk6rxKtIRFDCoQng8wfJuIMrDNKvqZw + FRGt7cbvW5MCnuH8MhItOl9Uxp1wHp6gtav/h8Gp6MBa + =MARt + -----END PGP PUBLIC KEY BLOCK----- From cd247a66897b5acbc1690961df82a361dd15a845 Mon Sep 17 00:00:00 2001 From: Jascha Urbach Date: Tue, 17 Oct 2023 19:49:32 +0200 Subject: [PATCH 067/458] Update .prettierrc Forgot to change the file pre-merch --- .prettierrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.prettierrc b/.prettierrc index c549b16ba..ed29060e6 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1 +1 @@ -'trailingComma': 'none' \ No newline at end of file +'trailingComma': 'es5' \ No newline at end of file From d55e0b6ba353f255606728aefe4d77a7efa6e29f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Tue, 17 Oct 2023 17:01:48 -0300 Subject: [PATCH 068/458] Final JS update to match 'es5' trailing comma style This is follow-up to cd247a668 ("Update .prettierrc"). --- bookwyrm/static/js/autocomplete.js | 84 +++++++++++++++--------------- bookwyrm/static/js/bookwyrm.js | 26 ++++----- bookwyrm/static/js/guided_tour.js | 4 +- bookwyrm/static/js/tabs.js | 4 +- 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/bookwyrm/static/js/autocomplete.js b/bookwyrm/static/js/autocomplete.js index 16281f5a5..a98cd9634 100644 --- a/bookwyrm/static/js/autocomplete.js +++ b/bookwyrm/static/js/autocomplete.js @@ -88,64 +88,64 @@ const tries = { mimetype: { a: { a: { - c: "AAC" + c: "AAC", }, z: { - w: "AZW" - } + w: "AZW", + }, }, d: { a: { i: { s: { - y: "Daisy" - } - } - } + y: "Daisy", + }, + }, + }, }, e: { p: { u: { - b: "EPUB" - } - } + b: "EPUB", + }, + }, }, f: { l: { a: { - c: "FLAC" - } - } + c: "FLAC", + }, + }, }, h: { t: { m: { - l: "HTML" - } - } + l: "HTML", + }, + }, }, m: { 4: { a: "M4A", - b: "M4B" + b: "M4B", }, o: { b: { - i: "MOBI" - } + i: "MOBI", + }, }, p: { - 3: "MP3" - } + 3: "MP3", + }, }, o: { g: { - g: "OGG" - } + g: "OGG", + }, }, p: { d: { - f: "PDF" + f: "PDF", }, l: { a: { @@ -154,13 +154,13 @@ const tries = { t: { e: { x: { - t: "Plaintext" - } - } - } - } - } - } + t: "Plaintext", + }, + }, + }, + }, + }, + }, }, r: { i: { @@ -170,15 +170,15 @@ const tries = { b: { o: { o: { - k: "Print book" - } - } - } - } - } - } - } - } - } - } + k: "Print book", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, }; diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index b67ee55a0..67d64688f 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -352,8 +352,8 @@ let BookWyrm = new (class { method: "POST", body: new FormData(form), headers: { - Accept: "application/json" - } + Accept: "application/json", + }, }); } @@ -620,7 +620,7 @@ let BookWyrm = new (class { 'input:not([type="hidden"]):not([disabled])', "select:not([disabled])", "details:not([disabled])", - '[tabindex]:not([tabindex="-1"]):not([disabled])' + '[tabindex]:not([tabindex="-1"]):not([disabled])', ].join(",") ); const firstFocusableEl = focusableEls[0]; @@ -675,8 +675,8 @@ let BookWyrm = new (class { target: scannerNode, constraints: { facingMode: "environment", - deviceId: cameraId - } + deviceId: cameraId, + }, }, decoder: { readers: [ @@ -684,12 +684,12 @@ let BookWyrm = new (class { { format: "ean_reader", config: { - supplements: ["ean_2_reader", "ean_5_reader"] - } - } + supplements: ["ean_2_reader", "ean_5_reader"], + }, + }, ], - multiple: false - } + multiple: false, + }, }, (err) => { if (err) { @@ -756,7 +756,7 @@ let BookWyrm = new (class { .forEach((box) => { Quagga.ImageDebug.drawPath(box, { x: 0, y: 1 }, drawingCtx, { color: "green", - lineWidth: 2 + lineWidth: 2, }); }); } @@ -764,14 +764,14 @@ let BookWyrm = new (class { if (result.box) { Quagga.ImageDebug.drawPath(result.box, { x: 0, y: 1 }, drawingCtx, { color: "#00F", - lineWidth: 2 + lineWidth: 2, }); } if (result.codeResult && result.codeResult.code) { Quagga.ImageDebug.drawPath(result.line, { x: "x", y: "y" }, drawingCtx, { color: "red", - lineWidth: 3 + lineWidth: 3, }); } } diff --git a/bookwyrm/static/js/guided_tour.js b/bookwyrm/static/js/guided_tour.js index a52de6edf..56cdcdf57 100644 --- a/bookwyrm/static/js/guided_tour.js +++ b/bookwyrm/static/js/guided_tour.js @@ -9,10 +9,10 @@ function disableGuidedTour(csrf_token) { "use strict"; fetch("/guided-tour/False", { headers: { - "X-CSRFToken": csrf_token + "X-CSRFToken": csrf_token, }, method: "POST", redirect: "follow", - mode: "same-origin" + mode: "same-origin", }); } diff --git a/bookwyrm/static/js/tabs.js b/bookwyrm/static/js/tabs.js index 5d5b426e8..1dcb0cace 100644 --- a/bookwyrm/static/js/tabs.js +++ b/bookwyrm/static/js/tabs.js @@ -32,7 +32,7 @@ class TabGroup { left: 37, up: 38, right: 39, - down: 40 + down: 40, }; } @@ -42,7 +42,7 @@ class TabGroup { 37: -1, 38: -1, 39: 1, - 40: 1 + 40: 1, }; } From 25e8b259f715bfc839702a92fc99618de3e52d87 Mon Sep 17 00:00:00 2001 From: Sidharth Date: Fri, 13 Oct 2023 20:06:19 +0530 Subject: [PATCH 069/458] Show/Hide password icon --- bookwyrm/static/css/fonts/icomoon.eot | Bin 10812 -> 11424 bytes bookwyrm/static/css/fonts/icomoon.svg | 2 ++ bookwyrm/static/css/fonts/icomoon.ttf | Bin 10648 -> 11260 bytes bookwyrm/static/css/fonts/icomoon.woff | Bin 10724 -> 11336 bytes bookwyrm/static/css/vendor/icons.css | 6 ++++++ bookwyrm/static/js/bookwyrm.js | 26 +++++++++++++++++++++++++ bookwyrm/templates/layout.html | 7 ++++++- 7 files changed, 40 insertions(+), 1 deletion(-) diff --git a/bookwyrm/static/css/fonts/icomoon.eot b/bookwyrm/static/css/fonts/icomoon.eot index b86375a90a2468a4426e2464fb0eb7e5c9e5bfbe..33dc07eecba200ba863aea774449d288e68dfb00 100644 GIT binary patch delta 996 zcmYk5TSydP6vxjuv(9*9tlim}%2l^*cV||&QPAc-C#gI+{@hzQFl2zv3s2+0wtr^52Go!QY6=FIv2=N!)Y&JVt+==eEi z+zYT?G|H%^wZ(~n(IY2F$>>Sz=tFDV4**kW&8?lWp2x0s9)Q?TKe`m_?Lof_^$hy- zOIHUjzMX3;M*RlBz0%PhYjY+2uL0y2m{&V6ke+2agn9+Fv!k=G|5;T=7{G%)VCHIf zYi#MtLJ0K-)GeK{{vJ50P&lkmzl6Oj*4ciyE@KUK6o-uTbocfFjTtDK*YiNrpAv24 zX2ES#`FJrJI3QrxteRc(YC&yK8`0it9}|B_UJ-ij^K$00n%qbxfh50*CXp6ah3~>s z;el{oXcW!}PU~;%K@$55a}%d1(_{m6&k@%L-ZJTPbKy8N;6)rPM_7gx#C#$OWxik) z393Q2q!7uihcL;J1CCSxQ}}Vj%I_==_}vl~ma;s9bpgLx<`XE0Mk2$3fYTWW3`Zi- zZ52<+38g+SuU-iag~LN3<4iF$o6hq!N^u}itkm#)I!iOudPtT-y3ru+iB?q9)>c$R z_lP^sPi&Ec2O~D8+wC+?l!>x>MWcz)Q1n_csOp{K_(K9|Xn+)+BWM}Qp%yM83AZDM zD7dQu1Xp4iebF+X8YHTp_ymzv2=15mpF=7nxsU+S3k`T|KC$j3hk82|N38U7PUdE% z(?wfQ3L4chj$_Rk8D^Gl<~A1WrI~{^S7`GWGD>mTD^$wI_EC2jW^>vi@y2dd)r9)T zF|Qn#Z}x3z$xY%rbC>zPdDgsS@mg9eH?WGJl_Un`Z(<3Yg?6|Oy>J=2p$i{GDJYoh H_q_TGx)0mN delta 375 zcmZ1wxhI6pMvH-AhUP>zGnUL~)|V39QU`io9nBwBC8z`(Evh!c`?6ASjrS938i zFvTQ3xKo$kiP*)bEM}~rpeqrcoxXt!N8!hBqKF3MOAUB69a=<3{c)I11P}3 z&0+!MPXY2(GIC2QR@iYm1NlJp3_Ei2lM^pZI1OZ~gUpS~O{^$ju-9V(TBd#hD4>v+ zn43D&oAVEl{{d)8TS0zt2?H}whC#CeB+tOid}(qDW3@DhCk1pEGXoa`BZI6kvOV;Sj zcz&C&4BRXr3m6{USv(6yPp;84XVja#MRWV)VyzJ2D#2xfM}# + + diff --git a/bookwyrm/static/css/fonts/icomoon.ttf b/bookwyrm/static/css/fonts/icomoon.ttf index edcbd3b7553c0192cacd84b0039b2cd8a7a66383..89d3be8fa06b476920aeb3df8b4d5aff74950c57 100644 GIT binary patch delta 1026 zcmY+DZ%7ky7{{OA-MrtXa@KacE1kO5c6ZY?=iEOtg%Xt-Bgj<}LC*h0{wX8UUQ9ux zm(|`BL=gl<^rAGV7ZJXQ2>U}p5JWGG2)vNqL}8?^=XPp#-0k=KKF@Q{pU>@grFH3W z8VCRsz!K6d=LSJ{P%aaW~2T&iPKhlQ=bAf3m>IKy9zWy`k?l)K(0lb(4W=;-v?oQ30n2Vv| zEgCxdQ|E?YH-p70^d_7Gss8S(`z(J@C$Y%n(BSYHY!t7`Pr4si_Wh-q^Su{Plwn^i z@HmfCvujSxr$x0fE zJN|fSY1|(hZ)_Zo8GD9fsaX)3{Z-*`mA_dK%#`JrrI@P5^oIp$OR}!6rKPSexkcKz zzw1cs*pYC!W!Y`)7!zanNk$SQq2#lpF`{Qm;|~(Z(}^O5Df|E`)ItmNAPL!3MEp3b z0R%^)oIYqxFcKw^5DAJB^%I;g?;nSpN%0^7q6ZrAXc@6@B!_yn1|T8ed8in>HKy8c$UKOvl|KQ;r-*?tJ}otZ3IyC@|?*;d6Y^yS8S=(*K8yv=9pu${#y{U8UJV*PmH#o(XSmieK~N&z?o-EbO);W!M! P0G^s^@IxT;UVZi#>pJHH delta 355 zcmewpJ|noEfsuiMft#U$ftkU;KUm+0Ux?iZD6$8L6OwZi3--!ab1^V5$^iLO(i4jd zfV2RRzX3>dq~}zo$=p477RcYhz@V}uBQ-HaRdJ~k1A|%&P~I#9D8RwZVgck&0rFKc za!V>!*l{`o`9SpyJ96@q9TP82I1Oa0gA9(#O{^$juxA2VrhWm)SIA4uO`Yk@`3K1V z0JNm7AiuZ-=ujZgtN_U~Ff(78c%WJu#E}BJibx|6S@p7QaulQN z7(Mxh zhB>3&WC6|Xlh1302v-R%6FefsA!H{M1XKYEH@(SLTF=D|8NwJ+8HyN+88R928S;S6 OGGx$WFq~|meFOl|^;!o2 diff --git a/bookwyrm/static/css/fonts/icomoon.woff b/bookwyrm/static/css/fonts/icomoon.woff index 47d4bffb57ce17cf8b0ef46bbdb22873880becfc..95325ab4aa4a2bfb794a7d0e93b38c3013d36544 100644 GIT binary patch delta 1050 zcmYk5Uue^C5XbMA)TG@?oNbz@>$Y0kCf#b+cKxSy9a`+vQU$FtM9?~?RqUotbej*| zV2H1p2NA^iASk{l`rv~wd=Qa31;Hl~nV?|AS4Giv-mlrTp_kl!?|PT}kl&}hF9yU5 zyR%s!fLCBUG}C9-AMK6buFd;RSGvSXbg*1J4M0kmxlQekcSt;597T<>Vr*WrmgA?! zkD(?4_`Xql`RZtQX{dMg&mr{-OZJ};q&S`uRqHFL9RQ>lDz47Gz8Kc)5{ZONP( z8N|9>olX>vQ2TOnK3Oh~;o#0mj9qox!Z?SEApsXG(kQ?p_9W!ad&d>@wU?0AYn->Vr@siw5WT_{TNRvc7;ZuS{ z@lgqr0$J~_3z)*6KpbLYaV+XnurSPv9M;96@t%mpKp~%>j>SBlSZq34D4KbeWBw#nHA#&Hd37O`>hDjb3ajNt|DH3y zVME^O@%cQ4$CwyLKsK5f4ds9X#W?L$!5b1-LAfD?hlp8)jnEJHWe}fxB?;oL1`u3{ z=jft6k$8f{qa-59e30ONEB5L#%!d? z>gXQq#UVn~YBfluPpC6Eljr%Jbb?xY?{!WzgR@g!KH+~3WOfsp|SG@meVgXtMSKI7z%j3N_tgzJrxa}x^~7#K5vQd2;9uY5IE zdSWq1><^I70mTC8IhAP)3`{Hx3@S@NSmy4*vl*$0DGUs1D}ZXuKv-3AsZ$0}5GeKl z$X5Yj4sI5UjNFn61_pJYUWOeYyuyytIVV3EsLoG)4^SWugfC4v&5)Z|0kl{{2FOX?BnX68$ic^IpsfmSg{F$gd)GjIWY zs_;_urNT>{m*y|4Ubelw^@{72+5f-){{z(k?Rd%XQXDRK9WKZC|FJlWIJ4Lfv3Fu? z#1@JLiYbYH2bu>8HR;W~Ommbre^e7;l4q2h^^!F@GoIh(D+4#kcMJ>WUpbADH)?)&>69kxmCJRqqtaVDLU diff --git a/bookwyrm/static/css/vendor/icons.css b/bookwyrm/static/css/vendor/icons.css index b661ce8e7..6af5c2813 100644 --- a/bookwyrm/static/css/vendor/icons.css +++ b/bookwyrm/static/css/vendor/icons.css @@ -155,3 +155,9 @@ .icon-barcode:before { content: "\e937"; } +.icon-eye:before { + content: "\e9ce"; +} +.icon-eye-blocked:before { + content: "\e9d1"; +} diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index 67d64688f..a2351a98c 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -30,6 +30,12 @@ let BookWyrm = new (class { .querySelectorAll("[data-back]") .forEach((button) => button.addEventListener("click", this.back)); + document + .querySelectorAll("[data-password-icon]") + .forEach((button) => + button.addEventListener("click", this.togglePasswordVisibility.bind(this)) + ); + document .querySelectorAll('input[type="file"]') .forEach((node) => node.addEventListener("change", this.disableIfTooLarge.bind(this))); @@ -820,4 +826,24 @@ let BookWyrm = new (class { form.querySelector('input[name="preferred_timezone"]').value = tz; } + + togglePasswordVisibility(event) { + const iconElement = event.currentTarget.getElementsByTagName("button")[0]; + const passwordElementId = event.currentTarget.dataset.for; + const passwordInputElement = document.getElementById(passwordElementId); + + if (!passwordInputElement) return; + + if (passwordInputElement.type === "password") { + passwordInputElement.type = "text"; + this.addRemoveClass(iconElement, "icon-eye-blocked"); + this.addRemoveClass(iconElement, "icon-eye", true); + } else { + passwordInputElement.type = "password"; + this.addRemoveClass(iconElement, "icon-eye"); + this.addRemoveClass(iconElement, "icon-eye-blocked", true); + } + + this.toggleFocus(passwordElementId); + } })(); diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index ba53685f4..b8459856c 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -130,7 +130,12 @@
    - +
    + + + + +

    {% trans "Forgot your password?" %}

    From b78d51410b0b4b911c14442f153923b8091f12b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Wed, 18 Oct 2023 18:52:39 -0300 Subject: [PATCH 070/458] bw-dev: drop use of `npm exec` by setting PATH in Docker image --- bw-dev | 22 ++++++++-------------- dev-tools/Dockerfile | 1 + 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/bw-dev b/bw-dev index 19ab1a355..57441f013 100755 --- a/bw-dev +++ b/bw-dev @@ -188,31 +188,25 @@ case "$CMD" in ;; prettier) prod_error - $DOCKER_COMPOSE run --rm dev-tools npm exec --prefix dev-tools -- prettier \ - --write bookwyrm/static/js/*.js + $DOCKER_COMPOSE run --rm dev-tools prettier --write bookwyrm/static/js/*.js ;; eslint) prod_error - $DOCKER_COMPOSE run --rm dev-tools npm exec --prefix devtools -- eslint \ - bookwyrm/static --ext .js + $DOCKER_COMPOSE run --rm dev-tools eslint bookwyrm/static --ext .js ;; stylelint) prod_error - $DOCKER_COMPOSE run --rm dev-tools npm exec --prefix dev-tools -- stylelint --fix \ - --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore \ - bookwyrm/static/css + $DOCKER_COMPOSE run --rm dev-tools stylelint --fix bookwyrm/static/css \ + --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore ;; formatters) prod_error runweb pylint bookwyrm/ $DOCKER_COMPOSE run --rm dev-tools black celerywyrm bookwyrm - $DOCKER_COMPOSE run --rm dev-tools npm exec --prefix dev-tools -- prettier \ - --write bookwyrm/static/js/*.js - $DOCKER_COMPOSE run --rm dev-tools npm exec --prefix devtools -- eslint \ - bookwyrm/static --ext .js - $DOCKER_COMPOSE run --rm dev-tools npm exec --prefix dev-tools -- stylelint --fix \ - --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore \ - bookwyrm/static/css + $DOCKER_COMPOSE run --rm dev-tools prettier --write bookwyrm/static/js/*.js + $DOCKER_COMPOSE run --rm dev-tools eslint bookwyrm/static --ext .js + $DOCKER_COMPOSE run --rm dev-tools stylelint --fix bookwyrm/static/css \ + --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore ;; mypy) prod_error diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index 338d96c66..f6a7bb793 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -1,6 +1,7 @@ FROM python:3.9 WORKDIR /app/dev-tools +ENV PATH="/app/dev-tools/node_modules/.bin:$PATH" ENV PYTHONUNBUFFERED=1 ENV NPM_CONFIG_UPDATE_NOTIFIER=false ENV PIP_ROOT_USER_ACTION=ignore PIP_DISABLE_PIP_VERSION_CHECK=1 From f88a0f82291f24e77aacf1b88a8d3635397029a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Wed, 18 Oct 2023 20:27:36 -0300 Subject: [PATCH 071/458] Run stylelint to fix remaining issues Including deletion of two duplicate stanzas introduced in 33c13608a8 ("Refixing light and dark themes"). --- bookwyrm/static/css/bookwyrm/_all.scss | 2 ++ .../css/bookwyrm/components/_book_cover.scss | 2 +- .../static/css/bookwyrm/components/_copy.scss | 32 +++++++++---------- .../static/css/bookwyrm/components/_tabs.scss | 4 +-- bookwyrm/static/css/themes/bookwyrm-dark.scss | 13 +++----- .../static/css/themes/bookwyrm-light.scss | 12 +++---- 6 files changed, 30 insertions(+), 35 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm/_all.scss b/bookwyrm/static/css/bookwyrm/_all.scss index 5bb08b931..7e50fe3e1 100644 --- a/bookwyrm/static/css/bookwyrm/_all.scss +++ b/bookwyrm/static/css/bookwyrm/_all.scss @@ -38,10 +38,12 @@ body { width: 12px; height: 12px; } + ::-webkit-scrollbar-thumb { background: $scrollbar-thumb; border-radius: 0.5em; } + ::-webkit-scrollbar-track { background: $scrollbar-track; } diff --git a/bookwyrm/static/css/bookwyrm/components/_book_cover.scss b/bookwyrm/static/css/bookwyrm/components/_book_cover.scss index 48b564a0b..db9391cc1 100644 --- a/bookwyrm/static/css/bookwyrm/components/_book_cover.scss +++ b/bookwyrm/static/css/bookwyrm/components/_book_cover.scss @@ -43,7 +43,7 @@ max-height: 100%; /* Useful when stretching under-sized images. */ - image-rendering: optimizeQuality; + image-rendering: optimizequality; image-rendering: smooth; } diff --git a/bookwyrm/static/css/bookwyrm/components/_copy.scss b/bookwyrm/static/css/bookwyrm/components/_copy.scss index 7a47c1dba..2595401cc 100644 --- a/bookwyrm/static/css/bookwyrm/components/_copy.scss +++ b/bookwyrm/static/css/bookwyrm/components/_copy.scss @@ -30,20 +30,20 @@ } .copy-tooltip { - overflow: visible; - visibility: hidden; - width: 140px; - background-color: #555; - color: #fff; - text-align: center; - border-radius: 6px; - padding: 5px; - position: absolute; - z-index: 1; - margin-left: -30px; - margin-top: -45px; - opacity: 0; - transition: opacity 0.3s; + overflow: visible; + visibility: hidden; + width: 140px; + background-color: #555; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 5px; + position: absolute; + z-index: 1; + margin-left: -30px; + margin-top: -45px; + opacity: 0; + transition: opacity 0.3s; } .copy-tooltip::after { @@ -54,5 +54,5 @@ margin-left: -60px; border-width: 5px; border-style: solid; - border-color: #555 transparent transparent transparent; - } + border-color: #555 transparent transparent; +} diff --git a/bookwyrm/static/css/bookwyrm/components/_tabs.scss b/bookwyrm/static/css/bookwyrm/components/_tabs.scss index 2d68a383b..8e00f6a88 100644 --- a/bookwyrm/static/css/bookwyrm/components/_tabs.scss +++ b/bookwyrm/static/css/bookwyrm/components/_tabs.scss @@ -44,12 +44,12 @@ .bw-tabs a:hover { border-bottom-color: transparent; - color: $text + color: $text; } .bw-tabs a.is-active { border-bottom-color: transparent; - color: $link + color: $link; } .bw-tabs.is-left { diff --git a/bookwyrm/static/css/themes/bookwyrm-dark.scss b/bookwyrm/static/css/themes/bookwyrm-dark.scss index df756fd02..f5e08e9a0 100644 --- a/bookwyrm/static/css/themes/bookwyrm-dark.scss +++ b/bookwyrm/static/css/themes/bookwyrm-dark.scss @@ -16,7 +16,7 @@ $danger-light: #481922; $light: #393939; $red: #ffa1b4; $black: #000; -$white-ter: hsl(0, 0%, 90%); +$white-ter: hsl(0deg, 0%, 90%); /* book cover standins */ $no-cover-color: #002549; @@ -100,19 +100,16 @@ $family-secondary: $family-sans-serif; .tabs li:not(.is-active) a { color: #2e7eb9 !important; } - .tabs li:not(.is-active) a:hover { - border-bottom-color: #2e7eb9 !important; -} -.tabs li:not(.is-active) a { - color: #2e7eb9 !important; +.tabs li:not(.is-active) a:hover { + border-bottom-color: #2e7eb9 !important; } + .tabs li.is-active a { color: #e6e6e6 !important; - border-bottom-color: #e6e6e6 !important ; + border-bottom-color: #e6e6e6 !important; } - #qrcode svg { background-color: #a6a6a6; } diff --git a/bookwyrm/static/css/themes/bookwyrm-light.scss b/bookwyrm/static/css/themes/bookwyrm-light.scss index 4a3f16a27..37e990127 100644 --- a/bookwyrm/static/css/themes/bookwyrm-light.scss +++ b/bookwyrm/static/css/themes/bookwyrm-light.scss @@ -57,7 +57,6 @@ $invisible-overlay-background-color: rgba($scheme-invert, 0.66); $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; - .has-text-muted { color: $grey-dark !important; } @@ -69,19 +68,16 @@ $family-secondary: $family-sans-serif; .tabs li:not(.is-active) a { color: #3273dc !important; } - .tabs li:not(.is-active) a:hover { - border-bottom-color: #3273dc !important; -} -.tabs li:not(.is-active) a { - color: #3273dc !important; +.tabs li:not(.is-active) a:hover { + border-bottom-color: #3273dc !important; } + .tabs li.is-active a { color: #4a4a4a !important; - border-bottom-color: #4a4a4a !important ; + border-bottom-color: #4a4a4a !important; } - @import "../bookwyrm"; @import "../vendor/icons.css"; @import "../vendor/shepherd"; From 1685ac1953121b20fae65214abcfaec733a53e0a Mon Sep 17 00:00:00 2001 From: Jascha Ezra Urbach Date: Thu, 19 Oct 2023 11:29:59 +0200 Subject: [PATCH 072/458] Move version out of settings (#3045) This removes the content of VERSION from settings.py and moves it into a seperate file which makes it easier to update versionnumbers via script in the future. --- VERSION | 1 + bookwyrm/settings.py | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 VERSION diff --git a/VERSION b/VERSION new file mode 100644 index 000000000..05e8a4593 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.6.6 diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 94ec761db..16241f9df 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -4,6 +4,7 @@ from typing import AnyStr from environs import Env + import requests from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ImproperlyConfigured @@ -14,7 +15,13 @@ from django.core.exceptions import ImproperlyConfigured env = Env() env.read_env() DOMAIN = env("DOMAIN") -VERSION = "0.6.6" + +with open("VERSION", encoding="utf-8") as f: + version = f.read() + version = version.replace("\n", "") +f.close() + +VERSION = version RELEASE_API = env( "RELEASE_API", From 781b01a007b8248992e5c98ceda958ec520aed4c Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 21 Oct 2023 19:43:44 +1100 Subject: [PATCH 073/458] add error handling and status for user exports * fix Safari not downloading with the correct filename * add FAILED status * don't provide download link for stopped jobs --- bookwyrm/models/bookwyrm_export_job.py | 18 ++++++++++-------- bookwyrm/models/job.py | 12 ++++++++++-- .../templates/preferences/export-user.html | 6 +++--- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index c3a0b652a..00cab7559 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -35,13 +35,14 @@ def start_export_task(**kwargs): # don't start the job if it was stopped from the UI if job.complete: return - - # 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) - + 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) + except Exception as err: # pylint: disable=broad-except + logger.exception("Job %s Failed with error: %s", job.id, err) + job.set_status("failed") job.save(update_fields=["export_data"]) @@ -56,7 +57,8 @@ def tar_export(json_data: str, user, f): editions, books = get_books_for_user(user) for book in editions: - tar.add_image(book.cover) + if getattr(book, "cover", False): + tar.add_image(book.cover) f.close() diff --git a/bookwyrm/models/job.py b/bookwyrm/models/job.py index 6e8d0dc5c..7557c5855 100644 --- a/bookwyrm/models/job.py +++ b/bookwyrm/models/job.py @@ -19,6 +19,7 @@ class Job(models.Model): ACTIVE = "active", _("Active") COMPLETE = "complete", _("Complete") STOPPED = "stopped", _("Stopped") + FAILED = "failed", _("Failed") task_id = models.UUIDField(unique=True, null=True, blank=True) @@ -43,14 +44,17 @@ class Job(models.Model): self.save(update_fields=["status", "complete", "updated_date"]) - def stop_job(self): + def stop_job(self, reason=None): """Stop the job""" if self.complete: return self.__terminate_job() - self.status = self.Status.STOPPED + if reason and reason is "failed": + self.status = self.Status.FAILED + else: + self.status = self.Status.STOPPED self.complete = True self.updated_date = timezone.now() @@ -72,6 +76,10 @@ class Job(models.Model): self.stop_job() return + if status == self.Status.FAILED: + self.stop_job(reason="failed") + return + self.updated_date = timezone.now() self.status = status diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 393d8990e..2dd3f6de3 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -48,8 +48,8 @@ {% for job in jobs %} - {% if job.complete %} -

    {{ job.created_date }}

    + {% if job.complete and not job.status == "stopped" and not job.status == "failed" %} +

    {{ job.created_date }}

    {% else %}

    {{ job.created_date }}

    {% endif %} @@ -57,7 +57,7 @@ {{ job.updated_date }} Date: Sat, 21 Oct 2023 17:16:55 +0200 Subject: [PATCH 074/458] Create bump-version.sh This scripts reads VERSION (should be semantic version), automatically suggest a "minor" version update, and ask for input to use either suggestion, or a new value. creates a pull request with updated VERSION and creates a tag for the new version. --- bump-version.sh | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 bump-version.sh diff --git a/bump-version.sh b/bump-version.sh new file mode 100644 index 000000000..ad5575e96 --- /dev/null +++ b/bump-version.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +NOW="$(date +'%B %d, %Y')" +RED="\033[1;31m" +GREEN="\033[0;32m" +YELLOW="\033[1;33m" +BLUE="\033[1;34m" +PURPLE="\033[1;35m" +CYAN="\033[1;36m" +WHITE="\033[1;37m" +RESET="\033[0m" + +LATEST_HASH=`git log --pretty=format:'%h' -n 1` + +QUESTION_FLAG="${GREEN}?" +WARNING_FLAG="${YELLOW}!" +NOTICE_FLAG="${CYAN}āÆ" + +# ADJUSTMENTS_MSG="${QUESTION_FLAG} ${CYAN}Now you can make adjustments to ${WHITE}CHANGELOG.md${CYAN}. Then press enter to continue." +PUSHING_MSG="${NOTICE_FLAG} Pushing new version to the ${WHITE}origin${CYAN}..." + +if [ -f VERSION ]; then + BASE_STRING=`cat VERSION` + BASE_LIST=(`echo $BASE_STRING | tr '.' ' '`) + V_MAJOR=${BASE_LIST[0]} + V_MINOR=${BASE_LIST[1]} + V_PATCH=${BASE_LIST[2]} + echo -e "${NOTICE_FLAG} Current version: ${WHITE}$BASE_STRING" + echo -e "${NOTICE_FLAG} Latest commit hash: ${WHITE}$LATEST_HASH" + V_MINOR=$((V_MINOR + 1)) + V_PATCH=0 + SUGGESTED_VERSION="$V_MAJOR.$V_MINOR.$V_PATCH" + echo -ne "${QUESTION_FLAG} ${CYAN}Enter a version number [${WHITE}$SUGGESTED_VERSION${CYAN}]: " + read INPUT_STRING + if [ "$INPUT_STRING" = "" ]; then + INPUT_STRING=$SUGGESTED_VERSION + fi + echo -e "${NOTICE_FLAG} Will set new version to be ${WHITE}$INPUT_STRING" + echo $INPUT_STRING > VERSION + echo "## $INPUT_STRING ($NOW)" > tmpfile +# git log --pretty=format:" - %s" "v$BASE_STRING"...HEAD >> tmpfile +# echo "" >> tmpfile +# echo "" >> tmpfile +# cat CHANGELOG.md >> tmpfile +# mv tmpfile CHANGELOG.md +# echo -e "$ADJUSTMENTS_MSG" +# read +# echo -e "$PUSHING_MSG" +# git add CHANGELOG.md VERSION + git commit -m "Bump version to ${INPUT_STRING}." + git tag -a -m "Tag version ${INPUT_STRING}." "v$INPUT_STRING" + git push origin --tags +else + echo -e "${WARNING_FLAG} Could not find a VERSION file." + echo -ne "${QUESTION_FLAG} ${CYAN}Do you want to create a version file and start from scratch? [${WHITE}y${CYAN}]: " + read RESPONSE + if [ "$RESPONSE" = "" ]; then RESPONSE="y"; fi + if [ "$RESPONSE" = "Y" ]; then RESPONSE="y"; fi + if [ "$RESPONSE" = "Yes" ]; then RESPONSE="y"; fi + if [ "$RESPONSE" = "yes" ]; then RESPONSE="y"; fi + if [ "$RESPONSE" = "YES" ]; then RESPONSE="y"; fi + if [ "$RESPONSE" = "y" ]; then + echo "0.1.0" > VERSION + echo "## 0.1.0 ($NOW)" > CHANGELOG.md +# git log --pretty=format:" - %s" >> CHANGELOG.md +# echo "" >> CHANGELOG.md +# echo "" >> CHANGELOG.md +# echo -e "$ADJUSTMENTS_MSG" +# read + echo -e "$PUSHING_MSG" + git add VERSION CHANGELOG.md + git commit -m "Add VERSION and CHANGELOG.md files, Bump version to v0.1.0." + git tag -a -m "Tag version 0.1.0." "v0.1.0" + git push origin --tags + fi +fi + +echo -e "${NOTICE_FLAG} Finished." From abb6bcd199c25297589e1a9282d93ea2de0195ea Mon Sep 17 00:00:00 2001 From: Jascha Ezra Urbach Date: Sat, 21 Oct 2023 17:28:44 +0200 Subject: [PATCH 075/458] Update bump-version.sh just a little fix --- bump-version.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bump-version.sh b/bump-version.sh index ad5575e96..231c05b50 100644 --- a/bump-version.sh +++ b/bump-version.sh @@ -37,7 +37,7 @@ if [ -f VERSION ]; then fi echo -e "${NOTICE_FLAG} Will set new version to be ${WHITE}$INPUT_STRING" echo $INPUT_STRING > VERSION - echo "## $INPUT_STRING ($NOW)" > tmpfile +# echo "## $INPUT_STRING ($NOW)" > tmpfile # git log --pretty=format:" - %s" "v$BASE_STRING"...HEAD >> tmpfile # echo "" >> tmpfile # echo "" >> tmpfile @@ -45,7 +45,7 @@ if [ -f VERSION ]; then # mv tmpfile CHANGELOG.md # echo -e "$ADJUSTMENTS_MSG" # read -# echo -e "$PUSHING_MSG" + echo -e "$PUSHING_MSG" # git add CHANGELOG.md VERSION git commit -m "Bump version to ${INPUT_STRING}." git tag -a -m "Tag version ${INPUT_STRING}." "v$INPUT_STRING" From 698e74a496468ec07a6b938abfb378d0bbd6bae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= <73768+dato@users.noreply.github.com> Date: Sat, 21 Oct 2023 12:53:24 -0300 Subject: [PATCH 076/458] Minor vocabulary fixes and structured data improvements (#3036) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove duplicate Review object under `rating` property This was preventing validation, since `rating` is not a valid property (`review` is, which is created from book.html already). * Drop `bestRating` property in ratings, since it defaults to 5 See ("If bestRating is omitted, 5 is assumed"). * Create Rating object (and its enclosing Review) in book/rating.html * Use `position` property for Book objects in a series `volumeNumber`, previously used, is only valid for objects of type PublicationVolume (which series members are not). * Give URL of book series when setting of `isPartOf` * series.html: Add empty BookSeries object --------- Co-authored-by: Adeodato SimĆ³ --- bookwyrm/templates/book/book.html | 14 +++++++------- bookwyrm/templates/book/rating.html | 15 ++++++++++----- bookwyrm/templates/book/series.html | 9 +++++---- .../templates/snippets/status/content_status.html | 12 ------------ .../templates/snippets/status/headers/rating.html | 3 --- 5 files changed, 22 insertions(+), 31 deletions(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 9083f9bdc..8e76fb014 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -44,16 +44,18 @@ {% endif %} {% if book.series %} - - - + + {% if book.authors.exists %} - + {% endif %} + {% endif %}

    {% endif %} @@ -186,8 +188,6 @@ itemtype="https://schema.org/AggregateRating" > - {# @todo Is it possible to not hard-code the value? #} - diff --git a/bookwyrm/templates/book/rating.html b/bookwyrm/templates/book/rating.html index c0af67fab..9998a49dc 100644 --- a/bookwyrm/templates/book/rating.html +++ b/bookwyrm/templates/book/rating.html @@ -5,13 +5,18 @@ {% include 'snippets/avatar.html' with user=user %}
    -
    -
    - {{ user.display_name }} +
    + -
    +
    +

    {% trans "rated it" %}

    - {% include 'snippets/stars.html' with rating=rating.rating %}
    diff --git a/bookwyrm/templates/book/series.html b/bookwyrm/templates/book/series.html index dc8113813..8b945452f 100644 --- a/bookwyrm/templates/book/series.html +++ b/bookwyrm/templates/book/series.html @@ -5,15 +5,15 @@ {% block title %}{{ series_name }}{% endblock %} {% block content %} -
    -

    {{ series_name }}

    +
    +

    {{ series_name }}

    {% trans "Series by" %} @@ -22,6 +22,7 @@
    {% for book in books %} {% with book=book %} + {# @todo Set `hasPart` property in some meaningful way #}
    {% if book.series_number %}{% blocktrans with series_number=book.series_number %}Book {{ series_number }}{% endblocktrans %}{% else %}{% trans 'Unsorted Book' %}{% endif %} diff --git a/bookwyrm/templates/snippets/status/content_status.html b/bookwyrm/templates/snippets/status/content_status.html index 1dc8382b2..28ed61e83 100644 --- a/bookwyrm/templates/snippets/status/content_status.html +++ b/bookwyrm/templates/snippets/status/content_status.html @@ -6,14 +6,6 @@ {% load humanize %} {% with status_type=status.status_type %} -
    -
    {% if not hide_book %} {% with book=status.book|default:status.mention_books.first %} @@ -58,9 +50,6 @@ {% endif %} > - - {# @todo Is it possible to not hard-code the value? #} - {% include 'snippets/stars.html' with rating=status.rating %} @@ -154,6 +143,5 @@
    -
    {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/rating.html b/bookwyrm/templates/snippets/status/headers/rating.html index bc40c04c8..fcef7eee7 100644 --- a/bookwyrm/templates/snippets/status/headers/rating.html +++ b/bookwyrm/templates/snippets/status/headers/rating.html @@ -16,9 +16,6 @@ > From 00bf2903bce62cae66fe539b0253a31540a1a304 Mon Sep 17 00:00:00 2001 From: Jascha Ezra Urbach Date: Sat, 21 Oct 2023 18:29:45 +0200 Subject: [PATCH 077/458] Bumped version number to 0.7.0 (#3052) --- VERSION | 2 +- bump-version.sh | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) mode change 100644 => 100755 bump-version.sh diff --git a/VERSION b/VERSION index 05e8a4593..faef31a43 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.6.6 +0.7.0 diff --git a/bump-version.sh b/bump-version.sh old mode 100644 new mode 100755 index 231c05b50..552d8409d --- a/bump-version.sh +++ b/bump-version.sh @@ -46,7 +46,8 @@ if [ -f VERSION ]; then # echo -e "$ADJUSTMENTS_MSG" # read echo -e "$PUSHING_MSG" -# git add CHANGELOG.md VERSION +# git add CHANGELOG.md + git add VERSION git commit -m "Bump version to ${INPUT_STRING}." git tag -a -m "Tag version ${INPUT_STRING}." "v$INPUT_STRING" git push origin --tags @@ -61,14 +62,15 @@ else if [ "$RESPONSE" = "YES" ]; then RESPONSE="y"; fi if [ "$RESPONSE" = "y" ]; then echo "0.1.0" > VERSION - echo "## 0.1.0 ($NOW)" > CHANGELOG.md +# echo "## 0.1.0 ($NOW)" > CHANGELOG.md # git log --pretty=format:" - %s" >> CHANGELOG.md # echo "" >> CHANGELOG.md # echo "" >> CHANGELOG.md # echo -e "$ADJUSTMENTS_MSG" # read echo -e "$PUSHING_MSG" - git add VERSION CHANGELOG.md +# git add CHANGELOG.md + git add VERSION git commit -m "Add VERSION and CHANGELOG.md files, Bump version to v0.1.0." git tag -a -m "Tag version 0.1.0." "v0.1.0" git push origin --tags From 20114b00596faf827a12c96f09ffded3a0aaa7a6 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 09:03:28 +1100 Subject: [PATCH 078/458] add notifs and error handling for user export/import --- .../migrations/0183_auto_20231021_2050.py | 34 ++++++++++++++ bookwyrm/models/bookwyrm_export_job.py | 3 +- bookwyrm/models/bookwyrm_import_job.py | 46 +++++++++++-------- bookwyrm/models/job.py | 2 +- bookwyrm/models/notification.py | 38 ++++++++++++++- bookwyrm/templates/import/import_user.html | 2 +- bookwyrm/templates/notifications/item.html | 4 ++ .../notifications/items/user_export.html | 11 +++++ .../notifications/items/user_import.html | 10 ++++ 9 files changed, 126 insertions(+), 24 deletions(-) create mode 100644 bookwyrm/migrations/0183_auto_20231021_2050.py create mode 100644 bookwyrm/templates/notifications/items/user_export.html create mode 100644 bookwyrm/templates/notifications/items/user_import.html diff --git a/bookwyrm/migrations/0183_auto_20231021_2050.py b/bookwyrm/migrations/0183_auto_20231021_2050.py new file mode 100644 index 000000000..201a9201a --- /dev/null +++ b/bookwyrm/migrations/0183_auto_20231021_2050.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.20 on 2023-10-21 20:50 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0182_merge_20230905_2240'), + ] + + operations = [ + migrations.AddField( + model_name='notification', + name='related_user_export', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='bookwyrm.bookwyrmexportjob'), + ), + migrations.AlterField( + model_name='childjob', + name='status', + field=models.CharField(choices=[('pending', 'Pending'), ('active', 'Active'), ('complete', 'Complete'), ('stopped', 'Stopped'), ('failed', 'Failed')], default='pending', max_length=50, null=True), + ), + migrations.AlterField( + model_name='notification', + name='notification_type', + field=models.CharField(choices=[('FAVORITE', 'Favorite'), ('REPLY', 'Reply'), ('MENTION', 'Mention'), ('TAG', 'Tag'), ('FOLLOW', 'Follow'), ('FOLLOW_REQUEST', 'Follow Request'), ('BOOST', 'Boost'), ('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')], max_length=255), + ), + migrations.AlterField( + model_name='parentjob', + name='status', + field=models.CharField(choices=[('pending', 'Pending'), ('active', 'Active'), ('complete', 'Complete'), ('stopped', 'Stopped'), ('failed', 'Failed')], default='pending', max_length=50, null=True), + ), + ] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 00cab7559..96e602cc9 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -41,8 +41,9 @@ def start_export_task(**kwargs): json_data = json_export(job.user) tar_export(json_data, job.user, job.export_data) except Exception as err: # pylint: disable=broad-except - logger.exception("Job %s Failed with error: %s", job.id, err) + logger.exception("User Export Job %s Failed with error: %s", job.id, err) job.set_status("failed") + job.set_status("complete") # need to explicitly set this here to trigger notifications job.save(update_fields=["export_data"]) diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 696f8061a..73372829b 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -1,5 +1,6 @@ from functools import reduce import json +import logging import operator from django.db.models import FileField, JSONField, CharField @@ -18,7 +19,8 @@ from bookwyrm.models.job import ( create_child_job, ) from bookwyrm.utils.tar import BookwyrmTarFile -import json + +logger = logging.getLogger(__name__) class BookwyrmImportJob(ParentJob): @@ -43,27 +45,33 @@ def start_import_task(**kwargs): if job.complete: return - 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")) + 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.get("user")) - if "include_user_settings" in job.required: - update_user_settings(job.user, job.import_data.get("user")) - 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("blocked_users")) + if "include_user_profile" in job.required: + update_user_profile(job.user, tar, job.import_data.get("user")) + if "include_user_settings" in job.required: + update_user_settings(job.user, job.import_data.get("user")) + 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("blocked_users")) - process_books(job, tar) + process_books(job, tar) - job.save() - archive_file.close() + job.set_status("complete") # set here to trigger notifications + job.save() + 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): diff --git a/bookwyrm/models/job.py b/bookwyrm/models/job.py index 7557c5855..4ba4bc2d7 100644 --- a/bookwyrm/models/job.py +++ b/bookwyrm/models/job.py @@ -51,7 +51,7 @@ class Job(models.Model): self.__terminate_job() - if reason and reason is "failed": + if reason and reason == "failed": self.status = self.Status.FAILED else: self.status = self.Status.STOPPED diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index 522038f9a..4c420a2e1 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -2,7 +2,8 @@ from django.db import models, transaction from django.dispatch import receiver from .base_model import BookWyrmModel -from . import Boost, Favorite, GroupMemberInvitation, ImportJob, LinkDomain +from . import Boost, Favorite, GroupMemberInvitation, ImportJob, BookwyrmImportJob, LinkDomain +from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from . import ListItem, Report, Status, User, UserFollowRequest @@ -22,6 +23,8 @@ class Notification(BookWyrmModel): # Imports IMPORT = "IMPORT" + USER_IMPORT = "USER_IMPORT" + USER_EXPORT = "USER_EXPORT" # List activity ADD = "ADD" @@ -44,7 +47,7 @@ class Notification(BookWyrmModel): NotificationType = models.TextChoices( # there has got be a better way to do this "NotificationType", - f"{FAVORITE} {REPLY} {MENTION} {TAG} {FOLLOW} {FOLLOW_REQUEST} {BOOST} {IMPORT} {ADD} {REPORT} {LINK_DOMAIN} {INVITE} {ACCEPT} {JOIN} {LEAVE} {REMOVE} {GROUP_PRIVACY} {GROUP_NAME} {GROUP_DESCRIPTION}", + f"{FAVORITE} {REPLY} {MENTION} {TAG} {FOLLOW} {FOLLOW_REQUEST} {BOOST} {IMPORT} {USER_IMPORT} {USER_EXPORT} {ADD} {REPORT} {LINK_DOMAIN} {INVITE} {ACCEPT} {JOIN} {LEAVE} {REMOVE} {GROUP_PRIVACY} {GROUP_NAME} {GROUP_DESCRIPTION}", ) user = models.ForeignKey("User", on_delete=models.CASCADE) @@ -61,6 +64,7 @@ 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" ) @@ -222,6 +226,36 @@ def notify_user_on_import_complete( related_import=instance, ) +@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=Notification.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 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: + print("RETURNING", instance.status) + return + print("NOTIFYING") + Notification.objects.create( + user=instance.user, + notification_type=Notification.USER_EXPORT, + related_user_export=instance, + ) @receiver(models.signals.post_save, sender=Report) @transaction.atomic diff --git a/bookwyrm/templates/import/import_user.html b/bookwyrm/templates/import/import_user.html index 86e99f657..e48f0198d 100644 --- a/bookwyrm/templates/import/import_user.html +++ b/bookwyrm/templates/import/import_user.html @@ -133,7 +133,7 @@ {{ job.updated_date }} +{% endblock %} + +{% block description %} + {% url 'prefs-export-file' notification.related_user_export.task_id 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 000000000..e0b3ddaad --- /dev/null +++ b/bookwyrm/templates/notifications/items/user_import.html @@ -0,0 +1,10 @@ +{% extends 'notifications/items/layout.html' %} +{% load i18n %} + +{% block icon %} + +{% endblock %} + +{% block description %} + {% blocktrans %}Your user import is complete.{% endblocktrans %} +{% endblock %} From 836127f369d5e352c118d486944651f139066af3 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 10:49:13 +1100 Subject: [PATCH 079/458] cooldown period for user exports add USER_EXPORT_COOLDOWN_HOURS setting for controlling user exports and imports --- bookwyrm/settings.py | 3 +++ bookwyrm/templates/import/import_user.html | 27 +++++-------------- .../templates/preferences/export-user.html | 9 +++++++ bookwyrm/views/imports/import_data.py | 7 ++++- bookwyrm/views/preferences/export.py | 9 ++++++- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 9a4c9b5a4..854f05973 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -423,3 +423,6 @@ if HTTP_X_FORWARDED_PROTO: # 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" + +# exports +USER_EXPORT_COOLDOWN_HOURS = 48 \ No newline at end of file diff --git a/bookwyrm/templates/import/import_user.html b/bookwyrm/templates/import/import_user.html index e48f0198d..1eee017fa 100644 --- a/bookwyrm/templates/import/import_user.html +++ b/bookwyrm/templates/import/import_user.html @@ -15,28 +15,12 @@ {% endif %} - {% if import_size_limit and import_limit_reset %} -
    -

    {% blocktrans %}Currently you are allowed to import one user every {{ user_import_limit_reset }} days.{% endblocktrans %}

    -

    {% blocktrans %}You have {{ allowed_imports }} left.{% endblocktrans %}

    + {% if next_available %} +
    +

    {% 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 %}

    - {% endif %} - {% if recent_avg_hours or recent_avg_minutes %} -
    -

    - {% if recent_avg_hours %} - {% blocktrans trimmed with hours=recent_avg_hours|floatformat:0|intcomma %} - On average, recent imports have taken {{ hours }} hours. - {% endblocktrans %} - {% else %} - {% blocktrans trimmed with minutes=recent_avg_minutes|floatformat:0|intcomma %} - On average, recent imports have taken {{ minutes }} minutes. - {% endblocktrans %} - {% endif %} -

    -
    - {% endif %} - + {% else %}
    {% csrf_token %} @@ -100,6 +84,7 @@

    {% trans "You've reached the import limit." %}

    {% endif%}
    + {% endif %}
    diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 2dd3f6de3..2f63c9e1c 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -9,6 +9,13 @@ {% block panel %}
    + {% if next_available %} +

    + {% blocktrans %} + You will be able to create a new export file at {{ next_available }} + {% endblocktrans %} +

    + {% else %}

    {% trans "Your exported archive file will include all user data for import into another Bookwyrm server" %}

    @@ -19,6 +26,8 @@ {% trans "Create user export file" %} + {% endif %} +

    {% trans "Recent Exports" %}

    diff --git a/bookwyrm/views/imports/import_data.py b/bookwyrm/views/imports/import_data.py index 69a87c0c2..aa561d367 100644 --- a/bookwyrm/views/imports/import_data.py +++ b/bookwyrm/views/imports/import_data.py @@ -23,7 +23,7 @@ from bookwyrm.importers import ( OpenLibraryImporter, ) from bookwyrm.models.bookwyrm_import_job import BookwyrmImportJob -from bookwyrm.settings import PAGE_LENGTH +from bookwyrm.settings import PAGE_LENGTH, USER_EXPORT_COOLDOWN_HOURS from bookwyrm.utils.cache import get_or_set # pylint: disable= no-self-use @@ -142,11 +142,16 @@ class UserImport(View): jobs = BookwyrmImportJob.objects.filter(user=request.user).order_by( "-created_date" ) + hours = USER_EXPORT_COOLDOWN_HOURS + allowed = jobs.first().created_date < timezone.now() - datetime.timedelta(hours=hours) + next_available = jobs.first().created_date + datetime.timedelta(hours=hours) if not allowed else False paginated = Paginator(jobs, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { "import_form": forms.ImportUserForm(), "jobs": page, + "user_import_hours": hours, + "next_available": next_available, "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 28e83051e..49b19aea8 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -1,4 +1,5 @@ """ Let users export their book data """ +from datetime import timedelta import csv import io @@ -7,11 +8,12 @@ from django.core.paginator import Paginator from django.db.models import Q from django.http import HttpResponse from django.template.response import TemplateResponse +from django.utils import timezone from django.views import View from django.utils.decorators import method_decorator from django.shortcuts import redirect -from bookwyrm import models +from bookwyrm import models, settings from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from bookwyrm.settings import PAGE_LENGTH @@ -101,10 +103,15 @@ class ExportUser(View): jobs = BookwyrmExportJob.objects.filter(user=request.user).order_by( "-created_date" ) + hours = settings.USER_EXPORT_COOLDOWN_HOURS + allowed = jobs.first().created_date < timezone.now() - timedelta(hours=hours) + next_available = jobs.first().created_date + timedelta(hours=hours) if not allowed else False + paginated = Paginator(jobs, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { "jobs": page, + "next_available": next_available, "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), From a27c6525019839120c81f662aac98c786e6e1405 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 15:07:49 +1100 Subject: [PATCH 080/458] admin view for user imports - makes user_import_time_limit a site setting rather than a value in settings.py (note this applies to exports as well as imports) - admins can change user_import_time_limit from UI - admins can cancel stuck user imports - disabling new imports also disables user imports --- ...184_sitesettings_user_import_time_limit.py | 18 ++ bookwyrm/models/site.py | 1 + bookwyrm/settings.py | 5 +- bookwyrm/templates/import/import_user.html | 146 ++++----- .../imports/complete_user_import_modal.html | 23 ++ .../templates/settings/imports/imports.html | 286 +++++++++++++----- bookwyrm/urls.py | 10 + bookwyrm/views/__init__.py | 2 + bookwyrm/views/admin/imports.py | 30 ++ bookwyrm/views/imports/import_data.py | 7 +- bookwyrm/views/preferences/export.py | 6 +- 11 files changed, 374 insertions(+), 160 deletions(-) create mode 100644 bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py create mode 100644 bookwyrm/templates/settings/imports/complete_user_import_modal.html diff --git a/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py b/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py new file mode 100644 index 000000000..a23161db1 --- /dev/null +++ b/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.20 on 2023-10-22 02:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0183_auto_20231021_2050'), + ] + + operations = [ + migrations.AddField( + model_name='sitesettings', + name='user_import_time_limit', + field=models.IntegerField(default=48), + ), + ] diff --git a/bookwyrm/models/site.py b/bookwyrm/models/site.py index a27c4b70d..cce055999 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -96,6 +96,7 @@ class SiteSettings(SiteModel): imports_enabled = models.BooleanField(default=True) import_size_limit = models.IntegerField(default=0) import_limit_reset = models.IntegerField(default=0) + user_import_time_limit = models.IntegerField(default=48) field_tracker = FieldTracker(fields=["name", "instance_tagline", "logo"]) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 854f05973..f74ef0093 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -422,7 +422,4 @@ if HTTP_X_FORWARDED_PROTO: # Mastodon servers. # 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" - -# exports -USER_EXPORT_COOLDOWN_HOURS = 48 \ No newline at end of file +INSTANCE_ACTOR_USERNAME = "bookwyrm.instance.actor" \ No newline at end of file diff --git a/bookwyrm/templates/import/import_user.html b/bookwyrm/templates/import/import_user.html index 1eee017fa..8e7bb1a09 100644 --- a/bookwyrm/templates/import/import_user.html +++ b/bookwyrm/templates/import/import_user.html @@ -10,81 +10,89 @@ {% if invalid %}
    - {% trans "Not a valid JSON file" %} + {% trans "Not a valid import file" %}
    {% endif %} + {% if not site.imports_enabled %} +
    +

    + +

    +

    + {% trans "Imports are temporarily disabled; thank you for your patience." %} +

    +
    + {% elif next_available %} +
    +

    {% 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 %}

    +
    + {% else %} +
    + {% csrf_token %} - {% if next_available %} -
    -

    {% 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 %}

    +
    +
    +
    + + {{ import_form.archive_file }}
    +
    +

    {% trans "Importing this file will overwrite any data you currently have saved." %}

    +

    {% trans "Deselect any data you do not wish to include in your import. Books will always be imported" %}

    +
    +
    + +
    +
    + + + + + + + + + + + + +
    +
    +
    + {% if not import_limit_reset and not import_size_limit or allowed_imports > 0 %} + {% else %} - - {% csrf_token %} - -
    -
    -
    - - {{ import_form.archive_file }} -
    -
    -

    {% trans "Importing this file will overwrite any data you currently have saved." %}

    -

    {% trans "Deselect any data you do not wish to include in your import. Books will always be imported" %}

    -
    -
    - -
    -
    - - - - - - - - - - - - -
    -
    -
    - {% if not import_limit_reset and not import_size_limit or allowed_imports > 0 %} - - {% else %} - -

    {% trans "You've reached the import limit." %}

    - {% endif%} - - {% endif %} + +

    {% trans "You've reached the import limit." %}

    + {% endif%} + + {% endif %}
    diff --git a/bookwyrm/templates/settings/imports/complete_user_import_modal.html b/bookwyrm/templates/settings/imports/complete_user_import_modal.html new file mode 100644 index 000000000..74004b7a2 --- /dev/null +++ b/bookwyrm/templates/settings/imports/complete_user_import_modal.html @@ -0,0 +1,23 @@ +{% extends 'components/modal.html' %} +{% load i18n %} + +{% block modal-title %}{% trans "Stop import?" %}{% endblock %} + +{% block modal-body %} +{% trans "This action will stop the user import before it is complete and cannot be un-done" %} +{% endblock %} + +{% block modal-footer %} +
    + {% csrf_token %} + +
    + + +
    +
    +{% endblock %} diff --git a/bookwyrm/templates/settings/imports/imports.html b/bookwyrm/templates/settings/imports/imports.html index 8819220fb..09d12b04a 100644 --- a/bookwyrm/templates/settings/imports/imports.html +++ b/bookwyrm/templates/settings/imports/imports.html @@ -29,6 +29,7 @@
    {% trans "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." %} {% trans "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." %} + {% trans "This setting prevents both book imports and user imports." %}
    {% csrf_token %}
    @@ -89,91 +90,214 @@
    +
    + + + {% trans "Limit how often users can import and export" %} + + + +
    +
    + {% trans "Some users might try to run user imports or exports very frequently, which you want to limit." %} + {% trans "Set the value to 0 to not enforce any limit." %} +
    +
    + + + + {% csrf_token %} +
    + +
    +
    +
    +
    -
    - +

    {% trans "Book Imports" %}

    +
    +
    + +
    + +
    + + + {% url 'settings-imports' status as url %} + + + + {% if status != "active" %} + + {% endif %} + + + + + {% if status == "active" %} + + {% endif %} + + {% for import in imports %} + + + + + {% if status != "active" %} + + {% endif %} + + + + + {% if status == "active" %} + + {% endif %} + + {% endfor %} + {% if not imports %} + + + + {% endif %} +
    + {% trans "ID" %} + + {% trans "User" as text %} + {% include 'snippets/table-sort-header.html' with field="user" sort=sort text=text %} + + {% trans "Date Created" as text %} + {% include 'snippets/table-sort-header.html' with field="created_date" sort=sort text=text %} + + {% trans "Date Updated" %} + + {% trans "Items" %} + + {% trans "Pending items" %} + + {% trans "Successful items" %} + + {% trans "Failed items" %} + {% trans "Actions" %}
    {{ import.id }} + {{ import.user|username }} + {{ import.created_date }}{{ import.updated_date }}{{ import.item_count|intcomma }}{{ import.pending_item_count|intcomma }}{{ import.successful_item_count|intcomma }}{{ import.failed_item_count|intcomma }} + {% join "complete" import.id as modal_id %} + + {% include "settings/imports/complete_import_modal.html" with id=modal_id %} +
    + {% trans "No matching imports found." %} +
    +
    + + {% include 'snippets/pagination.html' with page=imports path=request.path %} +
    -
    - - - {% url 'settings-imports' status as url %} - - - - {% if status != "active" %} - +
    +

    {% trans "User Imports" %}

    +
    +
    + +
    +
    + +
    +
    - {% trans "ID" %} - - {% trans "User" as text %} - {% include 'snippets/table-sort-header.html' with field="user" sort=sort text=text %} - - {% trans "Date Created" as text %} - {% include 'snippets/table-sort-header.html' with field="created_date" sort=sort text=text %} - - {% trans "Date Updated" %} -
    + + {% url 'settings-imports' status as url %} + + + + {% if status != "active" %} + + {% endif %} + + {% if status == "active" %} + + {% else %} + + {% endif %} + + {% for import in user_imports %} + + + + + {% if status != "active" %} + + {% endif %} + {% if status == "active" %} + + {% else %} + + + {% endif %} + + {% endfor %} + {% if not user_imports %} + + + {% endif %} - - - - - {% if status == "active" %} - - {% endif %} - - {% for import in imports %} - - - - - {% if status != "active" %} - - {% endif %} - - - - - {% if status == "active" %} - - {% endif %} - - {% endfor %} - {% if not imports %} - - - - {% endif %} -
    + {% trans "ID" %} + + {% trans "User" as text %} + {% include 'snippets/table-sort-header.html' with field="user" sort=sort text=text %} + + {% trans "Date Created" as text %} + {% include 'snippets/table-sort-header.html' with field="created_date" sort=sort text=text %} + + {% trans "Date Updated" %} + {% trans "Actions" %}{% trans "Status" %}
    {{ import.id }} + {{ import.user|username }} + {{ import.created_date }}{{ import.updated_date }} + {% join "complete" import.id as modal_id %} + + {% include "settings/imports/complete_user_import_modal.html" with id=modal_id %} + + {{ import.status }}
    + {% trans "No matching imports found." %} +
    - {% trans "Items" %} - - {% trans "Pending items" %} - - {% trans "Successful items" %} - - {% trans "Failed items" %} - {% trans "Actions" %}
    {{ import.id }} - {{ import.user|username }} - {{ import.created_date }}{{ import.updated_date }}{{ import.item_count|intcomma }}{{ import.pending_item_count|intcomma }}{{ import.successful_item_count|intcomma }}{{ import.failed_item_count|intcomma }} - {% join "complete" import.id as modal_id %} - - {% include "settings/imports/complete_import_modal.html" with id=modal_id %} -
    - {% trans "No matching imports found." %} -
    + +
    + + {% include 'snippets/pagination.html' with page=user_imports path=request.path %} + {% endblock %}
    - -{% include 'snippets/pagination.html' with page=imports path=request.path %} -{% endblock %} - diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 5b83acb85..2871ef282 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -316,6 +316,11 @@ urlpatterns = [ views.ImportList.as_view(), name="settings-imports-complete", ), + re_path( + r"^settings/user-imports/(?P\d+)/complete/?$", + views.set_user_import_completed, + name="settings-user-import-complete", + ), re_path( r"^settings/imports/disable/?$", views.disable_imports, @@ -331,6 +336,11 @@ urlpatterns = [ views.set_import_size_limit, name="settings-imports-set-limit", ), + re_path( + r"^settings/user-imports/set-limit/?$", + views.set_user_import_limit, + name="settings-user-imports-set-limit", + ), re_path( r"^settings/celery/?$", views.CeleryStatus.as_view(), name="settings-celery" ), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index c044200e3..d98dffdcc 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -16,6 +16,8 @@ from .admin.imports import ( disable_imports, enable_imports, set_import_size_limit, + set_user_import_completed, + set_user_import_limit ) from .admin.ip_blocklist import IPBlocklist from .admin.invite import ManageInvites, Invite, InviteRequest diff --git a/bookwyrm/views/admin/imports.py b/bookwyrm/views/admin/imports.py index 7ae190ce8..4da7acf0e 100644 --- a/bookwyrm/views/admin/imports.py +++ b/bookwyrm/views/admin/imports.py @@ -40,9 +40,17 @@ class ImportList(View): paginated = Paginator(imports, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) + user_imports = models.BookwyrmImportJob.objects.filter(complete=complete).order_by( + "created_date" + ) + + user_paginated = Paginator(user_imports, PAGE_LENGTH) + user_page = user_paginated.get_page(request.GET.get("page")) + site_settings = models.SiteSettings.objects.get() data = { "imports": page, + "user_imports": user_page, "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), @@ -50,6 +58,7 @@ class ImportList(View): "sort": sort, "import_size_limit": site_settings.import_size_limit, "import_limit_reset": site_settings.import_limit_reset, + "user_import_time_limit": site_settings.user_import_time_limit, } return TemplateResponse(request, "settings/imports/imports.html", data) @@ -95,3 +104,24 @@ def set_import_size_limit(request): site.import_limit_reset = import_limit_reset site.save(update_fields=["import_size_limit", "import_limit_reset"]) return redirect("settings-imports") + +@require_POST +@login_required +@permission_required("bookwyrm.moderate_user", raise_exception=True) +# pylint: disable=unused-argument +def set_user_import_completed(request, import_id): + """Mark a user import as complete""" + import_job = get_object_or_404(models.BookwyrmImportJob, id=import_id) + import_job.stop_job() + return redirect("settings-imports") + + +@require_POST +@permission_required("bookwyrm.edit_instance_settings", raise_exception=True) +# pylint: disable=unused-argument +def set_user_import_limit(request): + """Limit how ofter users can import and export their account""" + site = models.SiteSettings.objects.get() + site.user_import_time_limit = int(request.POST.get("limit")) + site.save(update_fields=["user_import_time_limit"]) + return redirect("settings-imports") \ No newline at end of file diff --git a/bookwyrm/views/imports/import_data.py b/bookwyrm/views/imports/import_data.py index aa561d367..4fd50d9ce 100644 --- a/bookwyrm/views/imports/import_data.py +++ b/bookwyrm/views/imports/import_data.py @@ -23,7 +23,7 @@ from bookwyrm.importers import ( OpenLibraryImporter, ) from bookwyrm.models.bookwyrm_import_job import BookwyrmImportJob -from bookwyrm.settings import PAGE_LENGTH, USER_EXPORT_COOLDOWN_HOURS +from bookwyrm.settings import PAGE_LENGTH from bookwyrm.utils.cache import get_or_set # pylint: disable= no-self-use @@ -142,8 +142,9 @@ class UserImport(View): jobs = BookwyrmImportJob.objects.filter(user=request.user).order_by( "-created_date" ) - hours = USER_EXPORT_COOLDOWN_HOURS - allowed = jobs.first().created_date < timezone.now() - datetime.timedelta(hours=hours) + site = models.SiteSettings.objects.get() + hours = site.user_import_time_limit + allowed = jobs.first().created_date < timezone.now() - datetime.timedelta(hours=hours) if jobs.first() else True next_available = jobs.first().created_date + datetime.timedelta(hours=hours) if not allowed else False paginated = Paginator(jobs, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 49b19aea8..5e70f896e 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -103,10 +103,10 @@ class ExportUser(View): jobs = BookwyrmExportJob.objects.filter(user=request.user).order_by( "-created_date" ) - hours = settings.USER_EXPORT_COOLDOWN_HOURS - allowed = jobs.first().created_date < timezone.now() - timedelta(hours=hours) + site = models.SiteSettings.objects.get() + hours = site.user_import_time_limit + allowed = jobs.first().created_date < timezone.now() - timedelta(hours=hours) if jobs.first() else True next_available = jobs.first().created_date + timedelta(hours=hours) if not allowed else False - paginated = Paginator(jobs, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { From b34a49117263d9136e94669d9edef5bd04ae8df2 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 15:34:25 +1100 Subject: [PATCH 081/458] run black --- .../migrations/0183_auto_20231021_2050.py | 77 +++++++++++++++---- ...184_sitesettings_user_import_time_limit.py | 6 +- bookwyrm/models/bookwyrm_export_job.py | 4 +- bookwyrm/models/bookwyrm_import_job.py | 2 +- bookwyrm/models/notification.py | 19 ++++- bookwyrm/settings.py | 2 +- bookwyrm/views/__init__.py | 2 +- bookwyrm/views/admin/imports.py | 9 ++- bookwyrm/views/imports/import_data.py | 12 ++- bookwyrm/views/preferences/export.py | 10 ++- 10 files changed, 111 insertions(+), 32 deletions(-) diff --git a/bookwyrm/migrations/0183_auto_20231021_2050.py b/bookwyrm/migrations/0183_auto_20231021_2050.py index 201a9201a..c960fe5bd 100644 --- a/bookwyrm/migrations/0183_auto_20231021_2050.py +++ b/bookwyrm/migrations/0183_auto_20231021_2050.py @@ -7,28 +7,79 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0182_merge_20230905_2240'), + ("bookwyrm", "0182_merge_20230905_2240"), ] operations = [ migrations.AddField( - model_name='notification', - name='related_user_export', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='bookwyrm.bookwyrmexportjob'), + model_name="notification", + name="related_user_export", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="bookwyrm.bookwyrmexportjob", + ), ), migrations.AlterField( - model_name='childjob', - name='status', - field=models.CharField(choices=[('pending', 'Pending'), ('active', 'Active'), ('complete', 'Complete'), ('stopped', 'Stopped'), ('failed', 'Failed')], default='pending', max_length=50, null=True), + model_name="childjob", + name="status", + field=models.CharField( + choices=[ + ("pending", "Pending"), + ("active", "Active"), + ("complete", "Complete"), + ("stopped", "Stopped"), + ("failed", "Failed"), + ], + default="pending", + max_length=50, + null=True, + ), ), migrations.AlterField( - model_name='notification', - name='notification_type', - field=models.CharField(choices=[('FAVORITE', 'Favorite'), ('REPLY', 'Reply'), ('MENTION', 'Mention'), ('TAG', 'Tag'), ('FOLLOW', 'Follow'), ('FOLLOW_REQUEST', 'Follow Request'), ('BOOST', 'Boost'), ('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')], max_length=255), + model_name="notification", + name="notification_type", + field=models.CharField( + choices=[ + ("FAVORITE", "Favorite"), + ("REPLY", "Reply"), + ("MENTION", "Mention"), + ("TAG", "Tag"), + ("FOLLOW", "Follow"), + ("FOLLOW_REQUEST", "Follow Request"), + ("BOOST", "Boost"), + ("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"), + ], + max_length=255, + ), ), migrations.AlterField( - model_name='parentjob', - name='status', - field=models.CharField(choices=[('pending', 'Pending'), ('active', 'Active'), ('complete', 'Complete'), ('stopped', 'Stopped'), ('failed', 'Failed')], default='pending', max_length=50, null=True), + model_name="parentjob", + name="status", + field=models.CharField( + choices=[ + ("pending", "Pending"), + ("active", "Active"), + ("complete", "Complete"), + ("stopped", "Stopped"), + ("failed", "Failed"), + ], + default="pending", + max_length=50, + null=True, + ), ), ] diff --git a/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py b/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py index a23161db1..24b4dad37 100644 --- a/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py +++ b/bookwyrm/migrations/0184_sitesettings_user_import_time_limit.py @@ -6,13 +6,13 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0183_auto_20231021_2050'), + ("bookwyrm", "0183_auto_20231021_2050"), ] operations = [ migrations.AddField( - model_name='sitesettings', - name='user_import_time_limit', + model_name="sitesettings", + name="user_import_time_limit", field=models.IntegerField(default=48), ), ] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 96e602cc9..65f209905 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -43,7 +43,9 @@ def start_export_task(**kwargs): 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") # need to explicitly set this here to trigger notifications + job.set_status( + "complete" + ) # need to explicitly set this here to trigger notifications job.save(update_fields=["export_data"]) diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 73372829b..6e71aa4b5 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -65,7 +65,7 @@ def start_import_task(**kwargs): process_books(job, tar) - job.set_status("complete") # set here to trigger notifications + job.set_status("complete") # set here to trigger notifications job.save() archive_file.close() diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index 4c420a2e1..c8140bce9 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -2,7 +2,14 @@ from django.db import models, transaction from django.dispatch import receiver from .base_model import BookWyrmModel -from . import Boost, Favorite, GroupMemberInvitation, ImportJob, BookwyrmImportJob, LinkDomain +from . import ( + Boost, + Favorite, + GroupMemberInvitation, + ImportJob, + BookwyrmImportJob, + LinkDomain, +) from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from . import ListItem, Report, Status, User, UserFollowRequest @@ -64,7 +71,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_user_export = models.ForeignKey( + "BookwyrmExportJob", on_delete=models.CASCADE, null=True + ) related_list_items = models.ManyToManyField( "ListItem", symmetrical=False, related_name="notifications" ) @@ -226,6 +235,7 @@ def notify_user_on_import_complete( related_import=instance, ) + @receiver(models.signals.post_save, sender=BookwyrmImportJob) # pylint: disable=unused-argument def notify_user_on_user_import_complete( @@ -236,10 +246,10 @@ def notify_user_on_user_import_complete( if not instance.complete or "complete" not in update_fields: return Notification.objects.create( - user=instance.user, - notification_type=Notification.USER_IMPORT + user=instance.user, notification_type=Notification.USER_IMPORT ) + @receiver(models.signals.post_save, sender=BookwyrmExportJob) # pylint: disable=unused-argument def notify_user_on_user_export_complete( @@ -257,6 +267,7 @@ def notify_user_on_user_export_complete( related_user_export=instance, ) + @receiver(models.signals.post_save, sender=Report) @transaction.atomic # pylint: disable=unused-argument diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index f74ef0093..9a4c9b5a4 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -422,4 +422,4 @@ if HTTP_X_FORWARDED_PROTO: # Mastodon servers. # 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" \ No newline at end of file +INSTANCE_ACTOR_USERNAME = "bookwyrm.instance.actor" diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index d98dffdcc..2746ab9f9 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -17,7 +17,7 @@ from .admin.imports import ( enable_imports, set_import_size_limit, set_user_import_completed, - set_user_import_limit + set_user_import_limit, ) from .admin.ip_blocklist import IPBlocklist from .admin.invite import ManageInvites, Invite, InviteRequest diff --git a/bookwyrm/views/admin/imports.py b/bookwyrm/views/admin/imports.py index 4da7acf0e..a85d6c79e 100644 --- a/bookwyrm/views/admin/imports.py +++ b/bookwyrm/views/admin/imports.py @@ -40,9 +40,9 @@ class ImportList(View): paginated = Paginator(imports, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) - user_imports = models.BookwyrmImportJob.objects.filter(complete=complete).order_by( - "created_date" - ) + user_imports = models.BookwyrmImportJob.objects.filter( + complete=complete + ).order_by("created_date") user_paginated = Paginator(user_imports, PAGE_LENGTH) user_page = user_paginated.get_page(request.GET.get("page")) @@ -105,6 +105,7 @@ def set_import_size_limit(request): site.save(update_fields=["import_size_limit", "import_limit_reset"]) return redirect("settings-imports") + @require_POST @login_required @permission_required("bookwyrm.moderate_user", raise_exception=True) @@ -124,4 +125,4 @@ def set_user_import_limit(request): site = models.SiteSettings.objects.get() site.user_import_time_limit = int(request.POST.get("limit")) site.save(update_fields=["user_import_time_limit"]) - return redirect("settings-imports") \ No newline at end of file + return redirect("settings-imports") diff --git a/bookwyrm/views/imports/import_data.py b/bookwyrm/views/imports/import_data.py index 4fd50d9ce..1a9085ce1 100644 --- a/bookwyrm/views/imports/import_data.py +++ b/bookwyrm/views/imports/import_data.py @@ -144,8 +144,16 @@ class UserImport(View): ) site = models.SiteSettings.objects.get() hours = site.user_import_time_limit - allowed = jobs.first().created_date < timezone.now() - datetime.timedelta(hours=hours) if jobs.first() else True - next_available = jobs.first().created_date + datetime.timedelta(hours=hours) if not allowed else False + allowed = ( + jobs.first().created_date < timezone.now() - datetime.timedelta(hours=hours) + if jobs.first() + else True + ) + next_available = ( + jobs.first().created_date + datetime.timedelta(hours=hours) + if not allowed + else False + ) paginated = Paginator(jobs, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 5e70f896e..037b8dbdc 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -105,8 +105,14 @@ class ExportUser(View): ) site = models.SiteSettings.objects.get() hours = site.user_import_time_limit - allowed = jobs.first().created_date < timezone.now() - timedelta(hours=hours) if jobs.first() else True - next_available = jobs.first().created_date + timedelta(hours=hours) if not allowed else False + allowed = ( + jobs.first().created_date < timezone.now() - timedelta(hours=hours) + if jobs.first() + else True + ) + next_available = ( + jobs.first().created_date + timedelta(hours=hours) if not allowed else False + ) paginated = Paginator(jobs, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { From fd1ebf5f71faf84cc35d1ad5199ddeaea9b9b7b7 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 16:52:29 +1100 Subject: [PATCH 082/458] formatting and pylint fixes --- bookwyrm/importers/bookwyrm_import.py | 7 +-- bookwyrm/models/bookwyrm_export_job.py | 22 ++++---- bookwyrm/models/bookwyrm_import_job.py | 51 ++++++++++--------- bookwyrm/models/job.py | 20 ++++++-- bookwyrm/models/notification.py | 2 +- .../templates/settings/imports/imports.html | 6 +-- .../tests/models/test_bookwyrm_export_job.py | 5 +- .../tests/models/test_bookwyrm_import_job.py | 20 +++++--- .../views/preferences/test_export_user.py | 3 +- bookwyrm/utils/tar.py | 13 +++-- bookwyrm/views/preferences/export.py | 5 +- 11 files changed, 91 insertions(+), 63 deletions(-) diff --git a/bookwyrm/importers/bookwyrm_import.py b/bookwyrm/importers/bookwyrm_import.py index a2eb71725..c8f4433ca 100644 --- a/bookwyrm/importers/bookwyrm_import.py +++ b/bookwyrm/importers/bookwyrm_import.py @@ -1,14 +1,15 @@ """Import data from Bookwyrm export files""" -from bookwyrm import settings from bookwyrm.models.bookwyrm_import_job import BookwyrmImportJob class BookwyrmImporter: - """Import a Bookwyrm User export JSON file. + """Import a Bookwyrm User export file. This is kind of a combination of an importer and a connector. """ - def process_import(self, user, archive_file, settings): + def process_import( + self, user, archive_file, settings + ): # pylint: disable=no-self-use """import user data from a Bookwyrm export file""" required = [k for k in settings if settings.get(k) == "on"] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 65f209905..e3fb2a81f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -1,4 +1,7 @@ +"""Export user account to tar.gz file for import into another Bookwyrm instance""" + import logging +from uuid import uuid4 from django.db.models import FileField from django.db.models import Q @@ -6,10 +9,9 @@ from django.core.serializers.json import DjangoJSONEncoder from django.core.files.base import ContentFile from bookwyrm import models +from bookwyrm.models.job import ParentJob, ParentTask from bookwyrm.settings import DOMAIN from bookwyrm.tasks import app, IMPORTS -from bookwyrm.models.job import ParentJob, ParentTask, SubTask, create_child_job -from uuid import uuid4 from bookwyrm.utils.tar import BookwyrmTarFile logger = logging.getLogger(__name__) @@ -49,21 +51,22 @@ def start_export_task(**kwargs): job.save(update_fields=["export_data"]) -def tar_export(json_data: str, user, f): - f.open("wb") - with BookwyrmTarFile.open(mode="w:gz", fileobj=f) as tar: +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, books = get_books_for_user(user) + editions = get_books_for_user(user) for book in editions: if getattr(book, "cover", False): tar.add_image(book.cover) - f.close() + file.close() def json_export(user): @@ -91,18 +94,19 @@ def json_export(user): # reading goals reading_goals = models.AnnualGoal.objects.filter(user=user).distinct() goals_list = [] + # TODO: either error checking should be more sophisticated or maybe we don't need this try/except try: for goal in reading_goals: goals_list.append( {"goal": goal.goal, "year": goal.year, "privacy": goal.privacy} ) - except Exception: + except Exception: # pylint: disable=broad-except pass try: readthroughs = models.ReadThrough.objects.filter(user=user).distinct().values() readthroughs = list(readthroughs) - except Exception as e: + except Exception: # pylint: disable=broad-except readthroughs = [] # books diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 6e71aa4b5..8fe797ed7 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -1,3 +1,5 @@ +"""Import a user from another Bookwyrm instance""" + from functools import reduce import json import logging @@ -11,13 +13,7 @@ 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, - ChildJob, - SubTask, - create_child_job, -) +from bookwyrm.models.job import ParentJob, ParentTask, SubTask from bookwyrm.utils.tar import BookwyrmTarFile logger = logging.getLogger(__name__) @@ -161,8 +157,10 @@ def get_or_create_edition(book_data, tar): if cover_path: tar.write_image_to_file(cover_path, new_book.cover) - # NOTE: clean_values removes "last_edited_by" because it's a user ID from the old database - # if this is required, bookwyrm_export_job will need to bring in the user who edited it. + # NOTE: clean_values removes "last_edited_by" + # because it's a user ID from the old database + # if this is required, bookwyrm_export_job will + # need to bring in the user who edited it. # create parent work = models.Work.objects.create(title=book["title"]) @@ -197,7 +195,7 @@ def clean_values(data): return new_data -def find_existing(cls, data, user): +def find_existing(cls, data): """Given a book or author, find any existing model instances""" identifiers = [ @@ -248,27 +246,31 @@ def upsert_readthroughs(data, user, book_id): """Take a JSON string of readthroughs, find or create the instances in the database and return a list of saved instances""" - for rt in data: + for read_thru in data: start_date = ( - parse_datetime(rt["start_date"]) if rt["start_date"] is not None else None + parse_datetime(read_thru["start_date"]) + if read_thru["start_date"] is not None + else None ) finish_date = ( - parse_datetime(rt["finish_date"]) if rt["finish_date"] is not None else None + parse_datetime(read_thru["finish_date"]) + if read_thru["finish_date"] is not None + else None ) stopped_date = ( - parse_datetime(rt["stopped_date"]) - if rt["stopped_date"] is not None + parse_datetime(read_thru["stopped_date"]) + if read_thru["stopped_date"] is not None else None ) readthrough = { "user": user, "book": models.Edition.objects.get(id=book_id), - "progress": rt["progress"], - "progress_mode": rt["progress_mode"], + "progress": read_thru["progress"], + "progress_mode": read_thru["progress_mode"], "start_date": start_date, "finish_date": finish_date, "stopped_date": stopped_date, - "is_active": rt["is_active"], + "is_active": read_thru["is_active"], } existing = models.ReadThrough.objects.filter(**readthrough).exists() @@ -311,7 +313,8 @@ def get_or_create_statuses(user, cls, data, book_id): def upsert_lists(user, lists, items, book_id): - """Take a list and ListItems as JSON and create DB entries if they don't already exist""" + """Take a list and ListItems as JSON and + create DB entries if they don't already exist""" book = models.Edition.objects.get(id=book_id) @@ -408,7 +411,7 @@ def update_user_settings(user, data): @app.task(queue=IMPORTS, base=SubTask) -def update_user_settings_task(job_id, child_id): +def update_user_settings_task(job_id): """wrapper task for user's settings import""" parent_job = BookwyrmImportJob.objects.get(id=job_id) @@ -433,7 +436,7 @@ def update_goals(user, data): @app.task(queue=IMPORTS, base=SubTask) -def update_goals_task(job_id, child_id): +def update_goals_task(job_id): """wrapper task for user's goals import""" parent_job = BookwyrmImportJob.objects.get(id=job_id) @@ -450,7 +453,7 @@ def upsert_saved_lists(user, values): @app.task(queue=IMPORTS, base=SubTask) -def upsert_saved_lists_task(job_id, child_id): +def upsert_saved_lists_task(job_id): """wrapper task for user's saved lists import""" parent_job = BookwyrmImportJob.objects.get(id=job_id) @@ -477,7 +480,7 @@ def upsert_follows(user, values): @app.task(queue=IMPORTS, base=SubTask) -def upsert_follows_task(job_id, child_id): +def upsert_follows_task(job_id): """wrapper task for user's follows import""" parent_job = BookwyrmImportJob.objects.get(id=job_id) @@ -504,7 +507,7 @@ def upsert_user_blocks(user, user_ids): @app.task(queue=IMPORTS, base=SubTask) -def upsert_user_blocks_task(job_id, child_id): +def upsert_user_blocks_task(job_id): """wrapper task for user's blocks import""" parent_job = BookwyrmImportJob.objects.get(id=job_id) diff --git a/bookwyrm/models/job.py b/bookwyrm/models/job.py index 4ba4bc2d7..4f5cb2093 100644 --- a/bookwyrm/models/job.py +++ b/bookwyrm/models/job.py @@ -31,6 +31,8 @@ class Job(models.Model): ) class Meta: + """Make it abstract""" + abstract = True def complete_job(self): @@ -119,7 +121,7 @@ class ParentJob(Job): if not self.complete and self.has_completed: self.complete_job() - def __terminate_job(self): + def __terminate_job(self): # pylint: disable=unused-private-member """Tell workers to ignore and not execute this task & pending child tasks. Extend. """ @@ -183,7 +185,9 @@ class ParentTask(app.Task): Usage e.g. @app.task(base=ParentTask) """ - def before_start(self, task_id, args, kwargs): + 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. @@ -208,7 +212,9 @@ class ParentTask(app.Task): if kwargs["no_children"]: job.set_status(ChildJob.Status.ACTIVE) - def on_success(self, retval, task_id, args, kwargs): + 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. @@ -241,7 +247,9 @@ class SubTask(app.Task): Usage e.g. @app.task(base=SubTask) """ - def before_start(self, task_id, args, kwargs): + 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. @@ -263,7 +271,9 @@ class SubTask(app.Task): child_job.save(update_fields=["task_id"]) child_job.set_status(ChildJob.Status.ACTIVE) - def on_success(self, retval, task_id, args, kwargs): + 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. diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index c8140bce9..98d20a3cb 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -1,6 +1,7 @@ """ 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, @@ -10,7 +11,6 @@ from . import ( BookwyrmImportJob, LinkDomain, ) -from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from . import ListItem, Report, Status, User, UserFollowRequest diff --git a/bookwyrm/templates/settings/imports/imports.html b/bookwyrm/templates/settings/imports/imports.html index 09d12b04a..0f4ae04fc 100644 --- a/bookwyrm/templates/settings/imports/imports.html +++ b/bookwyrm/templates/settings/imports/imports.html @@ -141,7 +141,7 @@
    - {% url 'settings-imports' status as url %} + {% url 'settings-imports' status as url %} @@ -231,7 +231,7 @@
    {% trans "ID" %}
    - {% url 'settings-imports' status as url %} + {% url 'settings-imports' status as url %} @@ -299,5 +299,5 @@ {% include 'snippets/pagination.html' with page=user_imports path=request.path %} - {% endblock %} +{% endblock %} diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index bd314e60e..73b59a4cc 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -1,3 +1,4 @@ +"""test bookwyrm user export functions""" import datetime import time import json @@ -110,7 +111,7 @@ class BookwyrmExport(TestCase): ) # add to list - item = models.ListItem.objects.create( + models.ListItem.objects.create( book_list=self.list, user=self.local_user, book=self.edition, @@ -226,7 +227,7 @@ class BookwyrmExport(TestCase): json_data["books"][0]["quotes"][0]["quote"], "A rose by any other name" ) - def test_tar_export(self): + def test_tar_export(self): # pylint: disable=unnecessary-pass """test the tar export function""" # TODO diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index 61713cd17..c07772e16 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -5,14 +5,12 @@ import pathlib from unittest.mock import patch from django.db.models import Q -from django.utils import timezone from django.utils.dateparse import parse_datetime from django.test import TestCase from bookwyrm import models -from bookwyrm.settings import DOMAIN from bookwyrm.utils.tar import BookwyrmTarFile -import bookwyrm.models.bookwyrm_import_job as bookwyrm_import_job +from bookwyrm.models import bookwyrm_import_job class BookwyrmImport(TestCase): @@ -246,7 +244,9 @@ class BookwyrmImport(TestCase): self.assertEqual(author.name, "James C. Scott") 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""" + """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) self.assertEqual(models.Edition.objects.count(), 1) @@ -258,7 +258,9 @@ class BookwyrmImport(TestCase): 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""" + """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) @@ -441,7 +443,8 @@ class BookwyrmImport(TestCase): ) def test_upsert_list_existing(self): - """Take a list and ListItems as JSON and create DB entries if they don't already exist""" + """Take a list and ListItems as JSON and create DB entries + if they don't already exist""" book_data = self.import_data["books"][0] @@ -456,7 +459,7 @@ class BookwyrmImport(TestCase): name="my list of books", user=self.local_user ) - list_item = models.ListItem.objects.create( + models.ListItem.objects.create( book=self.book, book_list=book_list, user=self.local_user, order=1 ) @@ -489,7 +492,8 @@ class BookwyrmImport(TestCase): ) def test_upsert_list_not_existing(self): - """Take a list and ListItems as JSON and create DB entries if they don't already exist""" + """Take a list and ListItems as JSON and create DB entries + if they don't already exist""" book_data = self.import_data["books"][0] diff --git a/bookwyrm/tests/views/preferences/test_export_user.py b/bookwyrm/tests/views/preferences/test_export_user.py index 1483fc4ec..654ed2a05 100644 --- a/bookwyrm/tests/views/preferences/test_export_user.py +++ b/bookwyrm/tests/views/preferences/test_export_user.py @@ -1,5 +1,4 @@ -""" test for app action functionality """ -from collections import namedtuple +""" test for user export app functionality """ from unittest.mock import patch from django.http import HttpResponse diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index 448df48d9..8f43b2c15 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -1,12 +1,15 @@ +"""manage tar files for user exports""" +import io +import tarfile from uuid import uuid4 from django.core.files import File -import tarfile -import io class BookwyrmTarFile(tarfile.TarFile): - def write_bytes(self, data: bytes, filename="archive.json"): - """Add a file containing :data: bytestring with name :filename: to the archive""" + """Create tar files for user exports""" + + def write_bytes(self, data: bytes): + """Add a file containing bytes to the archive""" buffer = io.BytesIO(data) info = tarfile.TarInfo("archive.json") info.size = len(data) @@ -30,10 +33,12 @@ class BookwyrmTarFile(tarfile.TarFile): self.addfile(info, fileobj=image) def read(self, filename): + """read data from the tar""" with self.extractfile(filename) as reader: return reader.read() def write_image_to_file(self, filename, file_field): + """add an image to the tar""" extension = filename.rsplit(".")[-1] with self.extractfile(filename) as reader: filename = f"{str(uuid4())}.{extension}" diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 037b8dbdc..c55e12c86 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -13,7 +13,7 @@ from django.views import View from django.utils.decorators import method_decorator from django.shortcuts import redirect -from bookwyrm import models, settings +from bookwyrm import models from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from bookwyrm.settings import PAGE_LENGTH @@ -135,10 +135,11 @@ class ExportUser(View): @method_decorator(login_required, name="dispatch") -class ExportArchive(View): +class ExportArchive(View): # pylint: disable=line-too-long """Serve the archive file""" def get(self, request, archive_id): + """download user export file""" export = BookwyrmExportJob.objects.get(task_id=archive_id, user=request.user) return HttpResponse( export.export_data, From 07ef12ce8e02d187e109c9efde2a8720526782b6 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 17:26:27 +1100 Subject: [PATCH 083/458] fix tests and linting --- bookwyrm/models/bookwyrm_export_job.py | 2 +- bookwyrm/models/bookwyrm_import_job.py | 4 ++-- .../templates/settings/imports/imports.html | 21 ++++++++++--------- .../tests/models/test_bookwyrm_export_job.py | 5 ++--- .../tests/models/test_bookwyrm_import_job.py | 2 +- bookwyrm/tests/utils/test_tar.py | 2 +- bookwyrm/views/preferences/export.py | 4 ++-- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index e3fb2a81f..1185c867a 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -69,7 +69,7 @@ def tar_export(json_data: str, user, file): file.close() -def json_export(user): +def json_export(user): # pylint: disable=too-many-locals, too-many-statements """Generate an export for a user""" # user exported_user = {} diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 8fe797ed7..32c1a037a 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -124,7 +124,7 @@ def get_or_create_edition(book_data, tar): ): book[key] = edition[key] - existing = find_existing(models.Edition, book, None) + existing = find_existing(models.Edition, book) if existing: return existing @@ -233,7 +233,7 @@ def get_or_create_authors(data): authors = [] for author in data: clean = clean_values(author) - existing = find_existing(models.Author, clean, None) + existing = find_existing(models.Author, clean) if existing: authors.append(existing) else: diff --git a/bookwyrm/templates/settings/imports/imports.html b/bookwyrm/templates/settings/imports/imports.html index 0f4ae04fc..8898aab71 100644 --- a/bookwyrm/templates/settings/imports/imports.html +++ b/bookwyrm/templates/settings/imports/imports.html @@ -274,16 +274,17 @@ {% else %} + {% if import.status == "stopped" or import.status == "failed" %} + class="tag is-danger" + {% elif import.status == "pending" %} + class="tag is-warning" + {% elif import.complete %} + class="tag" + {% else %} + class="tag is-success" + {% endif %} + >{{ import.status }} + {% endif %} diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index 73b59a4cc..d3e81a161 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -1,6 +1,5 @@ """test bookwyrm user export functions""" import datetime -import time import json from unittest.mock import patch @@ -227,8 +226,8 @@ class BookwyrmExport(TestCase): json_data["books"][0]["quotes"][0]["quote"], "A rose by any other name" ) - def test_tar_export(self): # pylint: disable=unnecessary-pass + def test_tar_export(self): """test the tar export function""" # TODO - pass + pass # pylint: disable=unnecessary-pass diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index c07772e16..78a8ec160 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -306,7 +306,7 @@ class BookwyrmImport(TestCase): self.assertEqual(models.Edition.objects.first().openlibrary_key, "OL28216445M") existing = bookwyrm_import_job.find_existing( - models.Edition, {"openlibrary_key": "OL28216445M", "isbn_10": None}, None + models.Edition, {"openlibrary_key": "OL28216445M", "isbn_10": None} ) self.assertEqual(existing.title, "Test Book") diff --git a/bookwyrm/tests/utils/test_tar.py b/bookwyrm/tests/utils/test_tar.py index 5989d3bb9..d1945c735 100644 --- a/bookwyrm/tests/utils/test_tar.py +++ b/bookwyrm/tests/utils/test_tar.py @@ -10,7 +10,7 @@ def read_tar(): yield tar -def get_write_tar(): +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: diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index c55e12c86..f54d97ccb 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -135,7 +135,7 @@ class ExportUser(View): @method_decorator(login_required, name="dispatch") -class ExportArchive(View): # pylint: disable=line-too-long +class ExportArchive(View): """Serve the archive file""" def get(self, request, archive_id): @@ -145,6 +145,6 @@ class ExportArchive(View): # pylint: disable=line-too-long export.export_data, content_type="application/gzip", headers={ - "Content-Disposition": 'attachment; filename="bookwyrm-account-export.tar.gz"' + "Content-Disposition": 'attachment; filename="bookwyrm-account-export.tar.gz"' # pylint: disable=line-too-long }, ) From b6b55b2e657ba200d29b7e81f84c05c6040e1771 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 17:49:26 +1100 Subject: [PATCH 084/458] once more into the linting breach! --- bookwyrm/models/bookwyrm_export_job.py | 3 ++- bookwyrm/tests/utils/test_tar.py | 1 + bookwyrm/utils/tar.py | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 1185c867a..e4a6e314f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -94,7 +94,8 @@ def json_export(user): # pylint: disable=too-many-locals, too-many-statements # reading goals reading_goals = models.AnnualGoal.objects.filter(user=user).distinct() goals_list = [] - # TODO: either error checking should be more sophisticated or maybe we don't need this try/except + # TODO: either error checking should be more sophisticated + # or maybe we don't need this try/except try: for goal in reading_goals: goals_list.append( diff --git a/bookwyrm/tests/utils/test_tar.py b/bookwyrm/tests/utils/test_tar.py index d1945c735..cb4e738d7 100644 --- a/bookwyrm/tests/utils/test_tar.py +++ b/bookwyrm/tests/utils/test_tar.py @@ -10,6 +10,7 @@ def read_tar(): yield tar +@pytest.fixture def write_tar(): archive_path = "/tmp/test.tar.gz" with open(archive_path, "wb") as archive_file: diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index 8f43b2c15..61c1019ec 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -8,14 +8,14 @@ from django.core.files import File class BookwyrmTarFile(tarfile.TarFile): """Create tar files for user exports""" - def write_bytes(self, data: bytes): + def write_bytes(self, data: bytes) -> None: """Add a file containing bytes to the archive""" buffer = io.BytesIO(data) info = tarfile.TarInfo("archive.json") info.size = len(data) self.addfile(info, fileobj=buffer) - def add_image(self, image, filename=None, directory=""): + def add_image(self, image: Any, filename: str = None, directory: Any = "") -> None: """ Add an image to the tar archive :param str filename: overrides the file name set by image @@ -32,12 +32,12 @@ class BookwyrmTarFile(tarfile.TarFile): self.addfile(info, fileobj=image) - def read(self, filename): + def read(self, filename: str) -> Any: """read data from the tar""" with self.extractfile(filename) as reader: return reader.read() - def write_image_to_file(self, filename, file_field): + def write_image_to_file(self, filename: str, file_field: Any) -> None: """add an image to the tar""" extension = filename.rsplit(".")[-1] with self.extractfile(filename) as reader: From 2b6852e7a0b40ce4dd8db168ba77049333cac937 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 22 Oct 2023 17:56:46 +1100 Subject: [PATCH 085/458] oops import Any --- bookwyrm/utils/tar.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index 61c1019ec..6aec88b42 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -1,6 +1,7 @@ """manage tar files for user exports""" import io import tarfile +from typing import Any from uuid import uuid4 from django.core.files import File From b8fc5c9b7a6ee796d8f7629270bd7a19b3da26c1 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 23 Oct 2023 20:42:56 +1100 Subject: [PATCH 086/458] fix tests --- .../tests/models/test_bookwyrm_import_job.py | 64 +++++++++++-------- bookwyrm/tests/utils/test_tar.py | 7 +- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index 78a8ec160..249160481 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -62,13 +62,12 @@ class BookwyrmImport(TestCase): parent_work=self.work, ) - archive_file = pathlib.Path(__file__).parent.joinpath( + self.archive_file = pathlib.Path(__file__).parent.joinpath( "../data/bookwyrm_account_export.tar.gz" ) - self.tarfile = BookwyrmTarFile.open( - mode="r:gz", fileobj=open(archive_file, "rb") - ) - self.import_data = json.loads(self.tarfile.read("archive.json").decode("utf-8")) + with open(self.archive_file, "rb") as fileobj: + tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) + self.import_data = json.loads(tarfile.read("archive.json").decode("utf-8")) def test_update_user_profile(self): """Test update the user's profile from import data""" @@ -77,19 +76,22 @@ class BookwyrmImport(TestCase): "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" ): - models.bookwyrm_import_job.update_user_profile( - self.local_user, self.tarfile, self.import_data.get("user") - ) - self.local_user.refresh_from_db() + with open(self.archive_file, "rb") as fileobj: + tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) - 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", - ) + models.bookwyrm_import_job.update_user_profile( + self.local_user, tarfile, self.import_data.get("user") + ) + 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""" @@ -248,14 +250,16 @@ class BookwyrmImport(TestCase): find or create the editions in the database and return a list of edition instances""" - self.assertEqual(models.Edition.objects.count(), 1) self.assertEqual(models.Edition.objects.count(), 1) - bookwyrm_import_job.get_or_create_edition( - self.import_data["books"][1], self.tarfile - ) # Sand Talk + with open(self.archive_file, "rb") as fileobj: + tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) - self.assertEqual(models.Edition.objects.count(), 1) + bookwyrm_import_job.get_or_create_edition( + self.import_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, @@ -264,12 +268,16 @@ class BookwyrmImport(TestCase): self.assertEqual(models.Edition.objects.count(), 1) - bookwyrm_import_job.get_or_create_edition( - self.import_data["books"][0], self.tarfile - ) # Seeing like a state + with open(self.archive_file, "rb") as fileobj: + tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) + bookwyrm_import_job.get_or_create_edition( + self.import_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) + self.assertTrue( + models.Edition.objects.filter(isbn_13="9780300070163").exists() + ) + self.assertEqual(models.Edition.objects.count(), 2) def test_clean_values(self): """test clean values we don't want when creating new instances""" @@ -373,7 +381,7 @@ class BookwyrmImport(TestCase): self.assertEqual( models.Review.objects.filter(book=self.book).first().name, "great book" ) - self.assertEqual( + self.assertAlmostEqual( models.Review.objects.filter(book=self.book).first().rating, 5.00 ) diff --git a/bookwyrm/tests/utils/test_tar.py b/bookwyrm/tests/utils/test_tar.py index cb4e738d7..be5257542 100644 --- a/bookwyrm/tests/utils/test_tar.py +++ b/bookwyrm/tests/utils/test_tar.py @@ -1,5 +1,6 @@ -from bookwyrm.utils.tar import BookwyrmTarFile +import os import pytest +from bookwyrm.utils.tar import BookwyrmTarFile @pytest.fixture @@ -15,10 +16,10 @@ 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: - return tar + yield tar os.remove(archive_path) def test_write_bytes(write_tar): - write_tar.write_bytes(b"ABCDEF", filename="example.txt") + write_tar.write_bytes(b"ABCDEF") From ddec2dbaa98b6f3a9a8fedeacefeb40508aa5ab2 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 23 Oct 2023 20:43:49 +1100 Subject: [PATCH 087/458] fix tar types notification docstring --- bookwyrm/models/notification.py | 2 +- bookwyrm/utils/tar.py | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index 98d20a3cb..d62043845 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -255,7 +255,7 @@ def notify_user_on_user_import_complete( def notify_user_on_user_export_complete( sender, instance, *args, update_fields=None, **kwargs ): - """we imported your user details! aren't you proud of us""" + """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: print("RETURNING", instance.status) diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index 6aec88b42..044a47404 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -1,7 +1,7 @@ """manage tar files for user exports""" import io import tarfile -from typing import Any +from typing import Any, Optional from uuid import uuid4 from django.core.files import File @@ -16,7 +16,9 @@ class BookwyrmTarFile(tarfile.TarFile): info.size = len(data) self.addfile(info, fileobj=buffer) - def add_image(self, image: Any, filename: str = None, directory: Any = "") -> None: + def add_image( + self, image: Any, filename: Optional[str] = None, directory: Any = "" + ) -> None: """ Add an image to the tar archive :param str filename: overrides the file name set by image @@ -35,12 +37,12 @@ class BookwyrmTarFile(tarfile.TarFile): def read(self, filename: str) -> Any: """read data from the tar""" - with self.extractfile(filename) as reader: + if reader := self.extractfile(filename): return reader.read() def write_image_to_file(self, filename: str, file_field: Any) -> None: """add an image to the tar""" extension = filename.rsplit(".")[-1] - with self.extractfile(filename) as reader: + if buf := self.extractfile(filename): filename = f"{str(uuid4())}.{extension}" - file_field.save(filename, File(reader)) + file_field.save(filename, File(buf)) From e29c93a1e90155bdc186c09502453d7b95f51240 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 23 Oct 2023 20:44:52 +1100 Subject: [PATCH 088/458] complete jobs more sensibly - fix tuple in tar export I accidentally broke by following pylint blindly - just use job.set_status to complete jobs since it does everything we need - fix/avoid Celery "not JSON deserializable" error by not saving whole job including user value --- bookwyrm/models/bookwyrm_export_job.py | 9 ++++----- bookwyrm/models/bookwyrm_import_job.py | 3 +-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index e4a6e314f..7c3d3ac2a 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -42,13 +42,12 @@ def start_export_task(**kwargs): 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" - ) # need to explicitly set this here to trigger notifications - job.save(update_fields=["export_data"]) + + job.set_status("complete") def tar_export(json_data: str, user, file): @@ -61,7 +60,7 @@ def tar_export(json_data: str, user, file): if getattr(user, "avatar", False): tar.add_image(user.avatar, filename="avatar") - editions = get_books_for_user(user) + editions, books = get_books_for_user(user) # pylint: disable=unused-argument for book in editions: if getattr(book, "cover", False): tar.add_image(book.cover) diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 32c1a037a..16dad1bfc 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -61,8 +61,7 @@ def start_import_task(**kwargs): process_books(job, tar) - job.set_status("complete") # set here to trigger notifications - job.save() + job.set_status("complete") archive_file.close() except Exception as err: # pylint: disable=broad-except From f30555be0f2d71217724619b072e74e905456f4d Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 23 Oct 2023 21:30:17 +1100 Subject: [PATCH 089/458] minor pylint and mypy fixes --- bookwyrm/importers/bookwyrm_import.py | 9 ++- bookwyrm/models/bookwyrm_export_job.py | 2 +- .../tests/models/test_bookwyrm_import_job.py | 60 ++++++++++--------- bookwyrm/utils/tar.py | 1 + 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/bookwyrm/importers/bookwyrm_import.py b/bookwyrm/importers/bookwyrm_import.py index c8f4433ca..38fc6af61 100644 --- a/bookwyrm/importers/bookwyrm_import.py +++ b/bookwyrm/importers/bookwyrm_import.py @@ -1,4 +1,9 @@ """Import data from Bookwyrm export files""" +from typing import Any + +from django.http import QueryDict + +from bookwyrm.models import User from bookwyrm.models.bookwyrm_import_job import BookwyrmImportJob @@ -8,8 +13,8 @@ class BookwyrmImporter: """ def process_import( - self, user, archive_file, settings - ): # pylint: disable=no-self-use + self, user: User, archive_file: bytes, settings: QueryDict + ) -> BookwyrmImportJob: # pylint: disable=no-self-use """import user data from a Bookwyrm export file""" required = [k for k in settings if settings.get(k) == "on"] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 7c3d3ac2a..da1cab320 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -60,7 +60,7 @@ def tar_export(json_data: str, user, file): if getattr(user, "avatar", False): tar.add_image(user.avatar, filename="avatar") - editions, books = get_books_for_user(user) # pylint: disable=unused-argument + editions, books = get_books_for_user(user) # pylint: disable=unused-variable for book in editions: if getattr(book, "cover", False): tar.add_image(book.cover) diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index 249160481..5a41e5607 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -13,7 +13,7 @@ from bookwyrm.utils.tar import BookwyrmTarFile from bookwyrm.models import bookwyrm_import_job -class BookwyrmImport(TestCase): +class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods """testing user import functions""" def setUp(self): @@ -66,8 +66,10 @@ class BookwyrmImport(TestCase): "../data/bookwyrm_account_export.tar.gz" ) with open(self.archive_file, "rb") as fileobj: - tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) - self.import_data = json.loads(tarfile.read("archive.json").decode("utf-8")) + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: + self.import_data = json.loads( + tarfile.read("archive.json").decode("utf-8") + ) def test_update_user_profile(self): """Test update the user's profile from import data""" @@ -77,21 +79,21 @@ class BookwyrmImport(TestCase): ): with open(self.archive_file, "rb") as fileobj: - tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: - models.bookwyrm_import_job.update_user_profile( - self.local_user, tarfile, self.import_data.get("user") - ) - self.local_user.refresh_from_db() + models.bookwyrm_import_job.update_user_profile( + self.local_user, tarfile, self.import_data.get("user") + ) + 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", - ) + 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""" @@ -253,13 +255,13 @@ class BookwyrmImport(TestCase): self.assertEqual(models.Edition.objects.count(), 1) with open(self.archive_file, "rb") as fileobj: - tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: - bookwyrm_import_job.get_or_create_edition( - self.import_data["books"][1], tarfile - ) # Sand Talk + bookwyrm_import_job.get_or_create_edition( + self.import_data["books"][1], tarfile + ) # Sand Talk - self.assertEqual(models.Edition.objects.count(), 1) + 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, @@ -269,15 +271,15 @@ class BookwyrmImport(TestCase): self.assertEqual(models.Edition.objects.count(), 1) with open(self.archive_file, "rb") as fileobj: - tarfile = BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) - bookwyrm_import_job.get_or_create_edition( - self.import_data["books"][0], tarfile - ) # Seeing like a state + with BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile: + bookwyrm_import_job.get_or_create_edition( + self.import_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) + self.assertTrue( + models.Edition.objects.filter(isbn_13="9780300070163").exists() + ) + self.assertEqual(models.Edition.objects.count(), 2) def test_clean_values(self): """test clean values we don't want when creating new instances""" diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index 044a47404..bae3f7628 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -39,6 +39,7 @@ class BookwyrmTarFile(tarfile.TarFile): """read data from the tar""" if reader := self.extractfile(filename): return reader.read() + return None def write_image_to_file(self, filename: str, file_field: Any) -> None: """add an image to the tar""" From 52a979da2d6a5050c32ad78b6241d2ecd79aa222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 20 Oct 2023 04:33:06 -0300 Subject: [PATCH 090/458] Add failing test case for "January 1st" offset bug --- bookwyrm/tests/views/books/test_edit_book.py | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index 2dc25095f..68553e09e 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -1,4 +1,5 @@ """ test for app action functionality """ +from unittest import expectedFailure from unittest.mock import patch import responses from responses import matchers @@ -8,6 +9,7 @@ from django.contrib.contenttypes.models import ContentType from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory +from django.utils import timezone from bookwyrm import forms, models, views from bookwyrm.views.books.edit_book import add_authors @@ -209,6 +211,29 @@ class EditBookViews(TestCase): book = models.Edition.objects.get(title="New Title") self.assertEqual(book.parent_work.title, "New Title") + @expectedFailure # bookwyrm#3028 + def test_published_date_timezone(self): + """user timezone does not affect publication year""" + # https://github.com/bookwyrm-social/bookwyrm/issues/3028 + self.local_user.groups.add(self.group) + create_book = views.CreateBook.as_view() + book_data = { + "title": "January 1st test", + "parent_work": self.work.id, + "last_edited_by": self.local_user.id, + "published_date_day": "1", + "published_date_month": "1", + "published_date_year": "2020", + } + request = self.factory.post("", book_data) + request.user = self.local_user + + with timezone.override("Europe/Madrid"): # Ahead of UTC. + create_book(request) + + book = models.Edition.objects.get(title="January 1st test") + self.assertEqual(book.edition_info, "2020") + def test_create_book_existing_work(self): """create an entirely new book and work""" view = views.ConfirmEditBook.as_view() From a9c605ea975731d66bb2ee3da73e8d13592e5a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 20 Oct 2023 22:36:06 -0300 Subject: [PATCH 091/458] Add SealedDate class for globally-stable, maybe-incomplete dates --- bookwyrm/tests/test_sealed_date.py | 27 +++++++++++++++++++++ bookwyrm/utils/sealed_date.py | 39 ++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 bookwyrm/tests/test_sealed_date.py create mode 100644 bookwyrm/utils/sealed_date.py diff --git a/bookwyrm/tests/test_sealed_date.py b/bookwyrm/tests/test_sealed_date.py new file mode 100644 index 000000000..c01625078 --- /dev/null +++ b/bookwyrm/tests/test_sealed_date.py @@ -0,0 +1,27 @@ +""" test sealed_date module """ + +import datetime +import unittest + +from django.utils import timezone +from bookwyrm.utils import sealed_date + + +class SealedDateTest(unittest.TestCase): + def setUp(self): + self.dt = datetime.datetime(2023, 10, 20, 17, 33, 10, tzinfo=timezone.utc) + + def test_day_seal(self): + sealed = sealed_date.SealedDate.from_datetime(self.dt) + self.assertEqual(self.dt, sealed) + self.assertEqual("2023-10-20", str(sealed)) + + def test_month_seal(self): + sealed = sealed_date.MonthSeal.from_datetime(self.dt) + self.assertEqual(self.dt, sealed) + self.assertEqual("2023-10", str(sealed)) + + def test_year_seal(self): + sealed = sealed_date.YearSeal.from_datetime(self.dt) + self.assertEqual(self.dt, sealed) + self.assertEqual("2023", str(sealed)) diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py new file mode 100644 index 000000000..18a0bea68 --- /dev/null +++ b/bookwyrm/utils/sealed_date.py @@ -0,0 +1,39 @@ +"""Implementation of the SealedDate class.""" + +from datetime import datetime + + +class SealedDate(datetime): # TODO: migrate from DateTimeField to DateField + @property + def has_day(self) -> bool: + return self.has_month + + @property + def has_month(self) -> bool: + return True + + def __str__(self): + return self.strftime("%Y-%m-%d") + + @classmethod + def from_datetime(cls, dt): + # pylint: disable=invalid-name + return cls.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo) + + +class MonthSeal(SealedDate): + @property + def has_day(self) -> bool: + return False + + def __str__(self): + return self.strftime("%Y-%m") + + +class YearSeal(SealedDate): + @property + def has_month(self) -> bool: + return False + + def __str__(self): + return self.strftime("%Y") From 46d80d56a561d5d8f2c0e38e71344e9b873e2700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 21 Oct 2023 16:55:24 -0300 Subject: [PATCH 092/458] Rename SealedDate.__str__ to `partial_isoformat` Django uses `str(date)` for backends other than PostgreSQL, so do not break "YYYY-MM-DD" formatting, just in case. --- bookwyrm/tests/test_sealed_date.py | 6 +++--- bookwyrm/utils/sealed_date.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bookwyrm/tests/test_sealed_date.py b/bookwyrm/tests/test_sealed_date.py index c01625078..af46519a9 100644 --- a/bookwyrm/tests/test_sealed_date.py +++ b/bookwyrm/tests/test_sealed_date.py @@ -14,14 +14,14 @@ class SealedDateTest(unittest.TestCase): def test_day_seal(self): sealed = sealed_date.SealedDate.from_datetime(self.dt) self.assertEqual(self.dt, sealed) - self.assertEqual("2023-10-20", str(sealed)) + self.assertEqual("2023-10-20", sealed.partial_isoformat()) def test_month_seal(self): sealed = sealed_date.MonthSeal.from_datetime(self.dt) self.assertEqual(self.dt, sealed) - self.assertEqual("2023-10", str(sealed)) + self.assertEqual("2023-10", sealed.partial_isoformat()) def test_year_seal(self): sealed = sealed_date.YearSeal.from_datetime(self.dt) self.assertEqual(self.dt, sealed) - self.assertEqual("2023", str(sealed)) + self.assertEqual("2023", sealed.partial_isoformat()) diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index 18a0bea68..6b3994bbb 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -12,7 +12,7 @@ class SealedDate(datetime): # TODO: migrate from DateTimeField to DateField def has_month(self) -> bool: return True - def __str__(self): + def partial_isoformat(self) -> str: return self.strftime("%Y-%m-%d") @classmethod @@ -26,7 +26,7 @@ class MonthSeal(SealedDate): def has_day(self) -> bool: return False - def __str__(self): + def partial_isoformat(self) -> str: return self.strftime("%Y-%m") @@ -35,5 +35,5 @@ class YearSeal(SealedDate): def has_month(self) -> bool: return False - def __str__(self): + def partial_isoformat(self) -> str: return self.strftime("%Y") From 777c8b45497d0fd671db76e8774e9ca0cac49d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 20 Oct 2023 23:05:02 -0300 Subject: [PATCH 093/458] naturalday_partial filter for working with SealedDate --- bookwyrm/templates/book/publisher_info.html | 4 ++-- bookwyrm/templatetags/sealed_dates.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 bookwyrm/templatetags/sealed_dates.py diff --git a/bookwyrm/templates/book/publisher_info.html b/bookwyrm/templates/book/publisher_info.html index e3ffedca8..26d8e43fd 100644 --- a/bookwyrm/templates/book/publisher_info.html +++ b/bookwyrm/templates/book/publisher_info.html @@ -1,7 +1,7 @@ {% spaceless %} {% load i18n %} -{% load humanize %} +{% load sealed_dates %} {% firstof book.physical_format_detail book.get_physical_format_display as format %} {% firstof book.physical_format book.physical_format_detail as format_property %} @@ -57,7 +57,7 @@ {% endfor %} {% endif %} - {% with date=book.published_date|default:book.first_published_date|naturalday publisher=book.publishers|join:', ' %} + {% with date=book.published_date|default:book.first_published_date|naturalday_partial publisher=book.publishers|join:', ' %} {% if book.published_date and publisher %} {% blocktrans %}Published {{ date }} by {{ publisher }}.{% endblocktrans %} {% elif publisher %} diff --git a/bookwyrm/templatetags/sealed_dates.py b/bookwyrm/templatetags/sealed_dates.py new file mode 100644 index 000000000..fb64734fa --- /dev/null +++ b/bookwyrm/templatetags/sealed_dates.py @@ -0,0 +1,21 @@ +""" formatting of SealedDate instances """ +from django import template +from django.template import defaultfilters +from django.contrib.humanize.templatetags.humanize import naturalday + +from bookwyrm.utils.sealed_date import SealedDate + +register = template.Library() + + +@register.filter(expects_localtime=True, is_safe=False) +def naturalday_partial(date): + if not isinstance(date, SealedDate): + return defaultfilters.date(date) + if date.has_day: + fmt = "DATE_FORMAT" + elif date.has_month: + fmt = "YEAR_MONTH_FORMAT" + else: + fmt = "Y" + return naturalday(date, fmt) From 5f619d7a399b8abeae65a89d8e0ad20caf30f0fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 21 Oct 2023 17:47:05 -0300 Subject: [PATCH 094/458] Implement SealedDateFormField to preserves partial dates Note that Django forms _already_ have suppport for partial date data; we just need to extend it when converting to Python (using SealedDate instead of returning an error). --- bookwyrm/tests/test_sealed_date.py | 47 ++++++++++++++++++++++ bookwyrm/utils/sealed_date.py | 63 ++++++++++++++++++++++++++++-- 2 files changed, 107 insertions(+), 3 deletions(-) diff --git a/bookwyrm/tests/test_sealed_date.py b/bookwyrm/tests/test_sealed_date.py index af46519a9..0eca8a815 100644 --- a/bookwyrm/tests/test_sealed_date.py +++ b/bookwyrm/tests/test_sealed_date.py @@ -3,7 +3,10 @@ import datetime import unittest +from django.core.exceptions import ValidationError from django.utils import timezone +from django.utils import translation + from bookwyrm.utils import sealed_date @@ -25,3 +28,47 @@ class SealedDateTest(unittest.TestCase): sealed = sealed_date.YearSeal.from_datetime(self.dt) self.assertEqual(self.dt, sealed) self.assertEqual("2023", sealed.partial_isoformat()) + + +class SealedDateFormFieldTest(unittest.TestCase): + def setUp(self): + self.dt = datetime.datetime(2022, 11, 21, 17, 1, 0, tzinfo=timezone.utc) + self.field = sealed_date.SealedDateFormField() + + def test_prepare_value(self): + sealed = sealed_date.SealedDate.from_datetime(self.dt) + self.assertEqual("2022-11-21", self.field.prepare_value(sealed)) + + def test_prepare_value_month(self): + sealed = sealed_date.MonthSeal.from_datetime(self.dt) + self.assertEqual("2022-11-0", self.field.prepare_value(sealed)) + + def test_prepare_value_year(self): + sealed = sealed_date.YearSeal.from_datetime(self.dt) + self.assertEqual("2022-0-0", self.field.prepare_value(sealed)) + + def test_to_python(self): + date = self.field.to_python("2022-11-21") + self.assertIsInstance(date, sealed_date.SealedDate) + self.assertEqual("2022-11-21", date.partial_isoformat()) + + def test_to_python_month(self): + date = self.field.to_python("2022-11-0") + self.assertIsInstance(date, sealed_date.SealedDate) + self.assertEqual("2022-11", date.partial_isoformat()) + with self.assertRaises(ValidationError): + self.field.to_python("2022-0-25") + + def test_to_python_year(self): + date = self.field.to_python("2022-0-0") + self.assertIsInstance(date, sealed_date.SealedDate) + self.assertEqual("2022", date.partial_isoformat()) + with self.assertRaises(ValidationError): + self.field.to_python("0-05-25") + + def test_to_python_other(self): + with translation.override("es"): + # check super() is called + date = self.field.to_python("5/6/97") + self.assertIsInstance(date, sealed_date.SealedDate) + self.assertEqual("1997-06-05", date.partial_isoformat()) diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index 6b3994bbb..9641e3e68 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -1,9 +1,23 @@ """Implementation of the SealedDate class.""" -from datetime import datetime +from __future__ import annotations + +from datetime import datetime, timedelta + +from django.core.exceptions import ValidationError +from django.forms import DateField +from django.forms.widgets import SelectDateWidget +from django.utils import timezone -class SealedDate(datetime): # TODO: migrate from DateTimeField to DateField +_westmost_tz = timezone.get_fixed_timezone(timedelta(hours=-12)) + +# TODO: migrate SealedDate to `date` + + +class SealedDate(datetime): + """a date object sealed into a certain precision (day, month, year)""" + @property def has_day(self) -> bool: return self.has_month @@ -16,10 +30,17 @@ class SealedDate(datetime): # TODO: migrate from DateTimeField to DateField return self.strftime("%Y-%m-%d") @classmethod - def from_datetime(cls, dt): + def from_datetime(cls, dt) -> SealedDate: # pylint: disable=invalid-name return cls.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo) + @classmethod + def from_date_parts(cls, year, month, day) -> SealedDate: + # because SealedDate is actually a datetime object, we must create it with a + # timezone such that its date remains stable no matter the values of USE_TZ, + # current_timezone and default_timezone. + return cls.from_datetime(datetime(year, month, day, tzinfo=_westmost_tz)) + class MonthSeal(SealedDate): @property @@ -37,3 +58,39 @@ class YearSeal(SealedDate): def partial_isoformat(self) -> str: return self.strftime("%Y") + + +class SealedDateFormField(DateField): + """date form field with support for SealedDate""" + + def prepare_value(self, value): + # As a convention, Django's `SelectDateWidget` uses "0" for missing + # parts. We piggy-back into that, to make it work with SealedDate. + if not isinstance(value, SealedDate): + return super().prepare_value(value) + elif value.has_day: + return value.strftime("%Y-%m-%d") + elif value.has_month: + return value.strftime("%Y-%m-0") + else: + return value.strftime("%Y-0-0") + + def to_python(self, value) -> SealedDate: + try: + date = super().to_python(value) + except ValidationError as ex: + if match := SelectDateWidget.date_re.match(value): + year, month, day = map(int, match.groups()) + if not match or (day and not month) or not year: + raise ex from None + if not month: + return YearSeal.from_date_parts(year, 1, 1) + elif not day: + return MonthSeal.from_date_parts(year, month, 1) + else: + if date is None: + return None + else: + year, month, day = date.year, date.month, date.day + + return SealedDate.from_date_parts(year, month, day) From 4b47646e2825cbdc13c809e8e61e519bd502b58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 21 Oct 2023 18:16:50 -0300 Subject: [PATCH 095/458] Fix typing hints in sealed_date module In particular, SealedDate's class methods always return an instance of the class they're invoked through (i.e., `SealedDate.from_date_parts` intentionally never returns `MonthSeal` or `YearSeal`). To propertly annotate this, a type variable is needed (or the much simpler `Self` in Python 3.11). --- bookwyrm/utils/sealed_date.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index 9641e3e68..931d1b8e0 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -3,6 +3,7 @@ from __future__ import annotations from datetime import datetime, timedelta +from typing import Any, Optional, Type, TypeVar, cast from django.core.exceptions import ValidationError from django.forms import DateField @@ -12,6 +13,8 @@ from django.utils import timezone _westmost_tz = timezone.get_fixed_timezone(timedelta(hours=-12)) +Sealed = TypeVar("Sealed", bound="SealedDate") # TODO: use Self in Python >= 3.11 + # TODO: migrate SealedDate to `date` @@ -30,12 +33,12 @@ class SealedDate(datetime): return self.strftime("%Y-%m-%d") @classmethod - def from_datetime(cls, dt) -> SealedDate: + def from_datetime(cls: Type[Sealed], dt: datetime) -> Sealed: # pylint: disable=invalid-name return cls.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo) @classmethod - def from_date_parts(cls, year, month, day) -> SealedDate: + def from_date_parts(cls: Type[Sealed], year: int, month: int, day: int) -> Sealed: # because SealedDate is actually a datetime object, we must create it with a # timezone such that its date remains stable no matter the values of USE_TZ, # current_timezone and default_timezone. @@ -63,11 +66,11 @@ class YearSeal(SealedDate): class SealedDateFormField(DateField): """date form field with support for SealedDate""" - def prepare_value(self, value): + def prepare_value(self, value: Any) -> str: # As a convention, Django's `SelectDateWidget` uses "0" for missing # parts. We piggy-back into that, to make it work with SealedDate. if not isinstance(value, SealedDate): - return super().prepare_value(value) + return cast(str, super().prepare_value(value)) elif value.has_day: return value.strftime("%Y-%m-%d") elif value.has_month: @@ -75,7 +78,7 @@ class SealedDateFormField(DateField): else: return value.strftime("%Y-0-0") - def to_python(self, value) -> SealedDate: + def to_python(self, value: Any) -> Optional[SealedDate]: try: date = super().to_python(value) except ValidationError as ex: From 9752819bdb38bb2d1a9ecb37d2b4f280f850be85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 21 Oct 2023 20:27:23 -0300 Subject: [PATCH 096/458] Add support for parsing partial isoformats back --- bookwyrm/tests/test_sealed_date.py | 60 ++++++++++++++++++++++++++++++ bookwyrm/utils/sealed_date.py | 23 ++++++++++++ 2 files changed, 83 insertions(+) diff --git a/bookwyrm/tests/test_sealed_date.py b/bookwyrm/tests/test_sealed_date.py index 0eca8a815..cda1ae0fc 100644 --- a/bookwyrm/tests/test_sealed_date.py +++ b/bookwyrm/tests/test_sealed_date.py @@ -18,16 +18,76 @@ class SealedDateTest(unittest.TestCase): sealed = sealed_date.SealedDate.from_datetime(self.dt) self.assertEqual(self.dt, sealed) self.assertEqual("2023-10-20", sealed.partial_isoformat()) + self.assertTrue(sealed.has_day) + self.assertTrue(sealed.has_month) def test_month_seal(self): sealed = sealed_date.MonthSeal.from_datetime(self.dt) self.assertEqual(self.dt, sealed) self.assertEqual("2023-10", sealed.partial_isoformat()) + self.assertFalse(sealed.has_day) + self.assertTrue(sealed.has_month) def test_year_seal(self): sealed = sealed_date.YearSeal.from_datetime(self.dt) self.assertEqual(self.dt, sealed) self.assertEqual("2023", sealed.partial_isoformat()) + self.assertFalse(sealed.has_day) + self.assertFalse(sealed.has_month) + + def test_parse_year_seal(self): + parsed = sealed_date.from_partial_isoformat("1995") + expected = datetime.date(1995, 1, 1) + self.assertEqual(expected, parsed.date()) + self.assertFalse(parsed.has_day) + self.assertFalse(parsed.has_month) + + def test_parse_year_errors(self): + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "995") + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "1995x") + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "1995-") + + def test_parse_month_seal(self): + expected = datetime.date(1995, 5, 1) + test_cases = [ + ("parse_month", "1995-05"), + ("parse_month_lenient", "1995-5"), + ] + for desc, value in test_cases: + with self.subTest(desc): + parsed = sealed_date.from_partial_isoformat(value) + self.assertEqual(expected, parsed.date()) + self.assertFalse(parsed.has_day) + self.assertTrue(parsed.has_month) + + def test_parse_month_dash_required(self): + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "20056") + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "200506") + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "1995-7-") + + def test_parse_day_seal(self): + expected = datetime.date(1995, 5, 6) + test_cases = [ + ("parse_day", "1995-05-06"), + ("parse_day_lenient1", "1995-5-6"), + ("parse_day_lenient2", "1995-05-6"), + ] + for desc, value in test_cases: + with self.subTest(desc): + parsed = sealed_date.from_partial_isoformat(value) + self.assertEqual(expected, parsed.date()) + self.assertTrue(parsed.has_day) + self.assertTrue(parsed.has_month) + + def test_partial_isoformat_no_time_allowed(self): + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "2005-06-07 ") + self.assertRaises(ValueError, sealed_date.from_partial_isoformat, "2005-06-07T") + self.assertRaises( + ValueError, sealed_date.from_partial_isoformat, "2005-06-07T00:00:00" + ) + self.assertRaises( + ValueError, sealed_date.from_partial_isoformat, "2005-06-07T00:00:00-03" + ) class SealedDateFormFieldTest(unittest.TestCase): diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index 931d1b8e0..6055b03cc 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -3,6 +3,7 @@ from __future__ import annotations from datetime import datetime, timedelta +import re from typing import Any, Optional, Type, TypeVar, cast from django.core.exceptions import ValidationError @@ -11,6 +12,12 @@ from django.forms.widgets import SelectDateWidget from django.utils import timezone +__all__ = [ + "SealedDate", + "from_partial_isoformat", +] + +_partial_re = re.compile(r"(\d{4})(?:-(\d\d?))?(?:-(\d\d?))?$") _westmost_tz = timezone.get_fixed_timezone(timedelta(hours=-12)) Sealed = TypeVar("Sealed", bound="SealedDate") # TODO: use Self in Python >= 3.11 @@ -63,6 +70,22 @@ class YearSeal(SealedDate): return self.strftime("%Y") +def from_partial_isoformat(value: str) -> SealedDate: + match = _partial_re.match(value) + + if not match: + raise ValueError + + year, month, day = [val and int(val) for val in match.groups()] + + if month is None: + return YearSeal.from_date_parts(year, 1, 1) + elif day is None: + return MonthSeal.from_date_parts(year, month, 1) + else: + return SealedDate.from_date_parts(year, month, day) + + class SealedDateFormField(DateField): """date form field with support for SealedDate""" From 737ac8e90885a4c0dce5e0aee8822e553e9dfe06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 23 Oct 2023 00:10:01 -0300 Subject: [PATCH 097/458] Implement PartialDateField using SealedDate and a custom descriptor --- .../migrations/0182_auto_20231023_0246.py | 54 +++++++++++ bookwyrm/models/book.py | 4 +- bookwyrm/models/fields.py | 34 ++++++- bookwyrm/tests/models/test_fields.py | 34 +++++++ bookwyrm/tests/test_sealed_date.py | 4 + bookwyrm/tests/views/books/test_edit_book.py | 71 ++++++++++++++- bookwyrm/utils/sealed_date.py | 91 ++++++++++++++++++- 7 files changed, 285 insertions(+), 7 deletions(-) create mode 100644 bookwyrm/migrations/0182_auto_20231023_0246.py diff --git a/bookwyrm/migrations/0182_auto_20231023_0246.py b/bookwyrm/migrations/0182_auto_20231023_0246.py new file mode 100644 index 000000000..d3db4056b --- /dev/null +++ b/bookwyrm/migrations/0182_auto_20231023_0246.py @@ -0,0 +1,54 @@ +# Generated by Django 3.2.20 on 2023-10-23 02:46 + +import bookwyrm.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0181_merge_20230806_2302"), + ] + + operations = [ + migrations.AddField( + model_name="book", + name="first_published_date_precision", + field=models.CharField( + blank=True, + choices=[ + ("DAY", "Day seal"), + ("MONTH", "Month seal"), + ("YEAR", "Year seal"), + ], + editable=False, + max_length=10, + null=True, + ), + ), + migrations.AddField( + model_name="book", + name="published_date_precision", + field=models.CharField( + blank=True, + choices=[ + ("DAY", "Day seal"), + ("MONTH", "Month seal"), + ("YEAR", "Year seal"), + ], + editable=False, + max_length=10, + null=True, + ), + ), + migrations.AlterField( + model_name="book", + name="first_published_date", + field=bookwyrm.models.fields.PartialDateField(blank=True, null=True), + ), + migrations.AlterField( + model_name="book", + name="published_date", + field=bookwyrm.models.fields.PartialDateField(blank=True, null=True), + ), + ] diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 9e05c03af..f0a524774 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -135,8 +135,8 @@ class Book(BookDataModel): preview_image = models.ImageField( upload_to="previews/covers/", blank=True, null=True ) - first_published_date = fields.DateTimeField(blank=True, null=True) - published_date = fields.DateTimeField(blank=True, null=True) + first_published_date = fields.PartialDateField(blank=True, null=True) + published_date = fields.PartialDateField(blank=True, null=True) objects = InheritanceManager() field_tracker = FieldTracker(fields=["authors", "title", "subtitle", "cover"]) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 28effaf9b..9c8793649 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -20,6 +20,11 @@ from markdown import markdown from bookwyrm import activitypub from bookwyrm.connectors import get_image from bookwyrm.utils.sanitizer import clean +from bookwyrm.utils.sealed_date import ( + SealedDate, + SealedDateField, + from_partial_isoformat, +) from bookwyrm.settings import MEDIA_FULL_URL @@ -537,7 +542,6 @@ class DateTimeField(ActivitypubFieldMixin, models.DateTimeField): def field_from_activity(self, value, allow_external_connections=True): missing_fields = datetime(1970, 1, 1) # "2022-10" => "2022-10-01" try: - # TODO(dato): investigate `ignoretz=True` wrt bookwyrm#3028. date_value = dateutil.parser.parse(value, default=missing_fields) try: return timezone.make_aware(date_value) @@ -547,6 +551,34 @@ class DateTimeField(ActivitypubFieldMixin, models.DateTimeField): return None +class PartialDateField(ActivitypubFieldMixin, SealedDateField): + """activitypub-aware partial date field""" + + def field_to_activity(self, value) -> str: + return value.partial_isoformat() if value else None + + def field_from_activity(self, value, allow_external_connections=True): + try: + return from_partial_isoformat(value) + except ValueError: + pass + + # fallback to full ISO-8601 parsing + try: + parsed = dateutil.parser.isoparse(value) + except (ValueError, ParserError): + return None + + # FIXME #1: add timezone if missing (SealedDate only accepts tz-aware). + # + # FIXME #2: decide whether to fix timestamps like "2023-09-30T21:00:00-03": + # clearly Oct 1st, not Sep 30th (an unwanted side-effect of USE_TZ). It's + # basically the remnants of #3028; there is a data migration pending (see ā€¦) + # but over the wire we might get these for an indeterminate amount of time. + + return SealedDate.from_datetime(parsed) + + class HtmlField(ActivitypubFieldMixin, models.TextField): """a text field for storing html""" diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 553a533d5..1f4a18aef 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -2,10 +2,12 @@ from io import BytesIO from collections import namedtuple from dataclasses import dataclass +import datetime import json import pathlib import re from typing import List +from unittest import expectedFailure from unittest.mock import patch from PIL import Image @@ -23,6 +25,7 @@ from bookwyrm.models import fields, User, Status, Edition from bookwyrm.models.base_model import BookWyrmModel from bookwyrm.models.activitypub_mixin import ActivitypubMixin from bookwyrm.settings import DOMAIN +from bookwyrm.utils import sealed_date # pylint: disable=too-many-public-methods @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @@ -594,6 +597,37 @@ class ModelFields(TestCase): self.assertEqual(instance.field_from_activity(now.isoformat()), now) self.assertEqual(instance.field_from_activity("bip"), None) + def test_partial_date_legacy_formats(self, *_): + """test support for full isoformat in partial dates""" + instance = fields.PartialDateField() + expected = datetime.date(2023, 10, 20) + test_cases = [ + # XXX: must fix before merging. + # ("no_tz", "2023-10-20T00:00:00"), + # ("no_tz_eod", "2023-10-20T23:59:59.999999"), + ("utc_offset_midday", "2023-10-20T12:00:00+0000"), + ("utc_offset_midnight", "2023-10-20T00:00:00+00"), + ("eastern_tz_parsed", "2023-10-20T15:20:30+04:30"), + ("western_tz_midnight", "2023-10-20:00:00-03"), + ] + for desc, value in test_cases: + with self.subTest(desc): + parsed = instance.field_from_activity(value) + self.assertIsNotNone(parsed) + self.assertEqual(expected, parsed.date()) + self.assertTrue(parsed.has_day) + self.assertTrue(parsed.has_month) + + @expectedFailure + def test_partial_date_timezone_fix(self, *_): + """deserialization compensates for unwanted effects of USE_TZ""" + instance = fields.PartialDateField() + expected = datetime.date(2023, 10, 1) + parsed = instance.field_from_activity("2023-09-30T21:00:00-03") + self.assertEqual(expected, parsed.date()) + self.assertTrue(parsed.has_day) + self.assertTrue(parsed.has_month) + def test_array_field(self, *_): """idk why it makes them strings but probably for a good reason""" instance = fields.ArrayField(fields.IntegerField) diff --git a/bookwyrm/tests/test_sealed_date.py b/bookwyrm/tests/test_sealed_date.py index cda1ae0fc..4e87a26d0 100644 --- a/bookwyrm/tests/test_sealed_date.py +++ b/bookwyrm/tests/test_sealed_date.py @@ -35,6 +35,10 @@ class SealedDateTest(unittest.TestCase): self.assertFalse(sealed.has_day) self.assertFalse(sealed.has_month) + def test_no_naive_datetime(self): + with self.assertRaises(ValueError): + sealed_date.SealedDate.from_datetime(datetime.datetime(2000, 1, 1)) + def test_parse_year_seal(self): parsed = sealed_date.from_partial_isoformat("1995") expected = datetime.date(1995, 1, 1) diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index 68553e09e..49e8c7cdb 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -1,5 +1,4 @@ """ test for app action functionality """ -from unittest import expectedFailure from unittest.mock import patch import responses from responses import matchers @@ -211,7 +210,6 @@ class EditBookViews(TestCase): book = models.Edition.objects.get(title="New Title") self.assertEqual(book.parent_work.title, "New Title") - @expectedFailure # bookwyrm#3028 def test_published_date_timezone(self): """user timezone does not affect publication year""" # https://github.com/bookwyrm-social/bookwyrm/issues/3028 @@ -234,6 +232,75 @@ class EditBookViews(TestCase): book = models.Edition.objects.get(title="January 1st test") self.assertEqual(book.edition_info, "2020") + def test_partial_published_dates(self): + """create a book with partial publication dates, then update them""" + self.local_user.groups.add(self.group) + book_data = { + "title": "An Edition With Dates", + "parent_work": self.work.id, + "last_edited_by": self.local_user.id, + } + initial_pub_dates = { + # published_date: 2023-01-01 + "published_date_day": "1", + "published_date_month": "01", + "published_date_year": "2023", + # first_published_date: 1995 + "first_published_date_day": "", + "first_published_date_month": "", + "first_published_date_year": "1995", + } + updated_pub_dates = { + # published_date: full -> year-only + "published_date_day": "", + "published_date_month": "", + "published_date_year": "2023", + # first_published_date: add month + "first_published_date_day": "", + "first_published_date_month": "03", + "first_published_date_year": "1995", + } + + # create book + create_book = views.CreateBook.as_view() + request = self.factory.post("", book_data | initial_pub_dates) + request.user = self.local_user + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + create_book(request) + + book = models.Edition.objects.get(title="An Edition With Dates") + + self.assertEqual("2023-01-01", book.published_date.partial_isoformat()) + self.assertEqual("1995", book.first_published_date.partial_isoformat()) + + self.assertTrue(book.published_date.has_day) + self.assertTrue(book.published_date.has_month) + + self.assertFalse(book.first_published_date.has_day) + self.assertFalse(book.first_published_date.has_month) + + # now edit publication dates + edit_book = views.ConfirmEditBook.as_view() + request = self.factory.post("", book_data | updated_pub_dates) + request.user = self.local_user + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + result = edit_book(request, book.id) + + self.assertEqual(result.status_code, 302) + + book.refresh_from_db() + + self.assertEqual("2023", book.published_date.partial_isoformat()) + self.assertEqual("1995-03", book.first_published_date.partial_isoformat()) + + self.assertFalse(book.published_date.has_day) + self.assertFalse(book.published_date.has_month) + + self.assertFalse(book.first_published_date.has_day) + self.assertTrue(book.first_published_date.has_month) + def test_create_book_existing_work(self): """create an entirely new book and work""" view = views.ConfirmEditBook.as_view() diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index 6055b03cc..c7ad3b7f3 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -7,6 +7,7 @@ import re from typing import Any, Optional, Type, TypeVar, cast from django.core.exceptions import ValidationError +from django.db import models from django.forms import DateField from django.forms.widgets import SelectDateWidget from django.utils import timezone @@ -22,11 +23,12 @@ _westmost_tz = timezone.get_fixed_timezone(timedelta(hours=-12)) Sealed = TypeVar("Sealed", bound="SealedDate") # TODO: use Self in Python >= 3.11 -# TODO: migrate SealedDate to `date` +# TODO: migrate SealedDate: `datetime` => `date` +# TODO: migrate SealedDateField: `DateTimeField` => `DateField` class SealedDate(datetime): - """a date object sealed into a certain precision (day, month, year)""" + """a date object sealed into a certain precision (day, month or year)""" @property def has_day(self) -> bool: @@ -42,6 +44,8 @@ class SealedDate(datetime): @classmethod def from_datetime(cls: Type[Sealed], dt: datetime) -> Sealed: # pylint: disable=invalid-name + if timezone.is_naive(dt): + raise ValueError("naive datetime not accepted") return cls.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo) @classmethod @@ -120,3 +124,86 @@ class SealedDateFormField(DateField): year, month, day = date.year, date.month, date.day return SealedDate.from_date_parts(year, month, day) + + +class SealedDateDescriptor: + + _SEAL_TYPES = { + YearSeal: "YEAR", + MonthSeal: "MONTH", + SealedDate: "DAY", + } + + _DATE_CLASSES = { + "YEAR": YearSeal, + "MONTH": MonthSeal, + } + + def __init__(self, field): + self.field = field + + @property + def precision_field(self): + """the name of the accompanying precision field""" + return self.make_precision_name(self.field.attname) + + @classmethod + def make_precision_name(cls, date_attr_name): + # used by SealedDateField to make the name from the outside. + # TODO: migrate to an attribute there? + return f"{date_attr_name}_precision" + + @property + def precision_choices(self): + return (("DAY", "Day seal"), ("MONTH", "Month seal"), ("YEAR", "Year seal")) + + def __get__(self, instance, cls=None): + if instance is None: + return self + + value = instance.__dict__.get(self.field.attname) + + if not value or isinstance(value, SealedDate): + return value + + # use precision field to construct SealedDate. + seal_type = getattr(instance, self.precision_field, None) + date_class = self._DATE_CLASSES.get(seal_type, SealedDate) + + return date_class.from_datetime(value) # FIXME: drop datetimes. + + def __set__(self, instance, value): + """assign value, with precision where available""" + try: + seal_type = self._SEAL_TYPES[value.__class__] + except KeyError: + value = self.field.to_python(value) + else: + setattr(instance, self.precision_field, seal_type) + + instance.__dict__[self.field.attname] = value + + +class SealedDateField(models.DateTimeField): # FIXME: use DateField. + + descriptor_class = SealedDateDescriptor + + def formfield(self, **kwargs): + kwargs.setdefault("form_class", SealedDateFormField) + return super().formfield(**kwargs) + + # pylint: disable-next=arguments-renamed + def contribute_to_class(self, model, our_name_in_model, **kwargs): + # Define precision field. + descriptor = self.descriptor_class(self) + precision = models.CharField( + null=True, + blank=True, + editable=False, + max_length=10, + choices=descriptor.precision_choices, + ) + precision_name = descriptor.make_precision_name(our_name_in_model) + + model.add_to_class(precision_name, precision) + return super().contribute_to_class(model, our_name_in_model, **kwargs) From 170d1fe2055a828dcac206da5ae8bf2daa08abee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Tue, 24 Oct 2023 04:14:38 -0300 Subject: [PATCH 098/458] fix pylint issues (minus `no-else-return`) --- bookwyrm/templatetags/sealed_dates.py | 1 + bookwyrm/tests/models/test_fields.py | 1 - bookwyrm/tests/test_sealed_date.py | 30 +++++++++++++++++---------- bookwyrm/utils/sealed_date.py | 26 +++++++++++++++++++++++ 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/bookwyrm/templatetags/sealed_dates.py b/bookwyrm/templatetags/sealed_dates.py index fb64734fa..f0b0f7d25 100644 --- a/bookwyrm/templatetags/sealed_dates.py +++ b/bookwyrm/templatetags/sealed_dates.py @@ -10,6 +10,7 @@ register = template.Library() @register.filter(expects_localtime=True, is_safe=False) def naturalday_partial(date): + """allow templates to easily format SealedDate objects""" if not isinstance(date, SealedDate): return defaultfilters.date(date) if date.has_day: diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 1f4a18aef..e9afcdef6 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -25,7 +25,6 @@ from bookwyrm.models import fields, User, Status, Edition from bookwyrm.models.base_model import BookWyrmModel from bookwyrm.models.activitypub_mixin import ActivitypubMixin from bookwyrm.settings import DOMAIN -from bookwyrm.utils import sealed_date # pylint: disable=too-many-public-methods @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") diff --git a/bookwyrm/tests/test_sealed_date.py b/bookwyrm/tests/test_sealed_date.py index 4e87a26d0..7e4c06c39 100644 --- a/bookwyrm/tests/test_sealed_date.py +++ b/bookwyrm/tests/test_sealed_date.py @@ -11,26 +11,30 @@ from bookwyrm.utils import sealed_date class SealedDateTest(unittest.TestCase): + """test SealedDate class in isolation""" + + # pylint: disable=missing-function-docstring + def setUp(self): - self.dt = datetime.datetime(2023, 10, 20, 17, 33, 10, tzinfo=timezone.utc) + self._dt = datetime.datetime(2023, 10, 20, 17, 33, 10, tzinfo=timezone.utc) def test_day_seal(self): - sealed = sealed_date.SealedDate.from_datetime(self.dt) - self.assertEqual(self.dt, sealed) + sealed = sealed_date.SealedDate.from_datetime(self._dt) + self.assertEqual(self._dt, sealed) self.assertEqual("2023-10-20", sealed.partial_isoformat()) self.assertTrue(sealed.has_day) self.assertTrue(sealed.has_month) def test_month_seal(self): - sealed = sealed_date.MonthSeal.from_datetime(self.dt) - self.assertEqual(self.dt, sealed) + sealed = sealed_date.MonthSeal.from_datetime(self._dt) + self.assertEqual(self._dt, sealed) self.assertEqual("2023-10", sealed.partial_isoformat()) self.assertFalse(sealed.has_day) self.assertTrue(sealed.has_month) def test_year_seal(self): - sealed = sealed_date.YearSeal.from_datetime(self.dt) - self.assertEqual(self.dt, sealed) + sealed = sealed_date.YearSeal.from_datetime(self._dt) + self.assertEqual(self._dt, sealed) self.assertEqual("2023", sealed.partial_isoformat()) self.assertFalse(sealed.has_day) self.assertFalse(sealed.has_month) @@ -95,20 +99,24 @@ class SealedDateTest(unittest.TestCase): class SealedDateFormFieldTest(unittest.TestCase): + """test form support for SealedDate objects""" + + # pylint: disable=missing-function-docstring + def setUp(self): - self.dt = datetime.datetime(2022, 11, 21, 17, 1, 0, tzinfo=timezone.utc) + self._dt = datetime.datetime(2022, 11, 21, 17, 1, 0, tzinfo=timezone.utc) self.field = sealed_date.SealedDateFormField() def test_prepare_value(self): - sealed = sealed_date.SealedDate.from_datetime(self.dt) + sealed = sealed_date.SealedDate.from_datetime(self._dt) self.assertEqual("2022-11-21", self.field.prepare_value(sealed)) def test_prepare_value_month(self): - sealed = sealed_date.MonthSeal.from_datetime(self.dt) + sealed = sealed_date.MonthSeal.from_datetime(self._dt) self.assertEqual("2022-11-0", self.field.prepare_value(sealed)) def test_prepare_value_year(self): - sealed = sealed_date.YearSeal.from_datetime(self.dt) + sealed = sealed_date.YearSeal.from_datetime(self._dt) self.assertEqual("2022-0-0", self.field.prepare_value(sealed)) def test_to_python(self): diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index c7ad3b7f3..9181fcdd3 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -12,6 +12,7 @@ from django.forms import DateField from django.forms.widgets import SelectDateWidget from django.utils import timezone +# pylint: disable=no-else-return __all__ = [ "SealedDate", @@ -32,17 +33,25 @@ class SealedDate(datetime): @property def has_day(self) -> bool: + """whether this is a full date""" return self.has_month @property def has_month(self) -> bool: + """whether this date includes month""" return True def partial_isoformat(self) -> str: + """partial ISO-8601 format""" return self.strftime("%Y-%m-%d") @classmethod def from_datetime(cls: Type[Sealed], dt: datetime) -> Sealed: + """construct a SealedDate object from a timezone-aware datetime + + Use subclasses to specify precision. If `dt` is naive, `ValueError` + is raised. + """ # pylint: disable=invalid-name if timezone.is_naive(dt): raise ValueError("naive datetime not accepted") @@ -50,6 +59,9 @@ class SealedDate(datetime): @classmethod def from_date_parts(cls: Type[Sealed], year: int, month: int, day: int) -> Sealed: + """construct a SealedDate from year, month, day. + + Use sublcasses to specify precision.""" # because SealedDate is actually a datetime object, we must create it with a # timezone such that its date remains stable no matter the values of USE_TZ, # current_timezone and default_timezone. @@ -57,6 +69,8 @@ class SealedDate(datetime): class MonthSeal(SealedDate): + """a date sealed into month precision""" + @property def has_day(self) -> bool: return False @@ -66,6 +80,8 @@ class MonthSeal(SealedDate): class YearSeal(SealedDate): + """a date sealed into year precision""" + @property def has_month(self) -> bool: return False @@ -75,6 +91,11 @@ class YearSeal(SealedDate): def from_partial_isoformat(value: str) -> SealedDate: + """construct SealedDate from a partial string. + + Accepted formats: YYYY, YYYY-MM, YYYY-MM-DD; otherwise `ValueError` + is raised. + """ match = _partial_re.match(value) if not match: @@ -127,6 +148,10 @@ class SealedDateFormField(DateField): class SealedDateDescriptor: + """descriptor for SealedDateField. + + Encapsulates the "two columns, one field" for SealedDateField. + """ _SEAL_TYPES = { YearSeal: "YEAR", @@ -185,6 +210,7 @@ class SealedDateDescriptor: class SealedDateField(models.DateTimeField): # FIXME: use DateField. + """a date field for Django models, using SealedDate as values""" descriptor_class = SealedDateDescriptor From 1952bb6ddc861a0a79b1c8b9ed824e81adaf546b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Tue, 24 Oct 2023 18:09:27 -0300 Subject: [PATCH 099/458] fix mypy issues The three "ignore" directives are: - avoid unreadable boilerplate from inherited `Field` methods; and: - https://github.com/typeddjango/django-stubs/issues/285#issuecomment-600029858 --- bookwyrm/utils/sealed_date.py | 59 +++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/bookwyrm/utils/sealed_date.py b/bookwyrm/utils/sealed_date.py index 9181fcdd3..62bab4ed4 100644 --- a/bookwyrm/utils/sealed_date.py +++ b/bookwyrm/utils/sealed_date.py @@ -101,11 +101,11 @@ def from_partial_isoformat(value: str) -> SealedDate: if not match: raise ValueError - year, month, day = [val and int(val) for val in match.groups()] + year, month, day = [int(val) if val else -1 for val in match.groups()] - if month is None: + if month < 0: return YearSeal.from_date_parts(year, 1, 1) - elif day is None: + elif day < 0: return MonthSeal.from_date_parts(year, month, 1) else: return SealedDate.from_date_parts(year, month, day) @@ -147,42 +147,32 @@ class SealedDateFormField(DateField): return SealedDate.from_date_parts(year, month, day) +# For typing field and descriptor, below. +_SetType = datetime +_GetType = Optional[SealedDate] + + class SealedDateDescriptor: """descriptor for SealedDateField. Encapsulates the "two columns, one field" for SealedDateField. """ - _SEAL_TYPES = { + _SEAL_TYPES: dict[Type[_SetType], str] = { YearSeal: "YEAR", MonthSeal: "MONTH", SealedDate: "DAY", } - _DATE_CLASSES = { + _DATE_CLASSES: dict[Any, Type[SealedDate]] = { "YEAR": YearSeal, "MONTH": MonthSeal, } - def __init__(self, field): + def __init__(self, field: models.Field[_SetType, _GetType]): self.field = field - @property - def precision_field(self): - """the name of the accompanying precision field""" - return self.make_precision_name(self.field.attname) - - @classmethod - def make_precision_name(cls, date_attr_name): - # used by SealedDateField to make the name from the outside. - # TODO: migrate to an attribute there? - return f"{date_attr_name}_precision" - - @property - def precision_choices(self): - return (("DAY", "Day seal"), ("MONTH", "Month seal"), ("YEAR", "Year seal")) - - def __get__(self, instance, cls=None): + def __get__(self, instance: models.Model, cls: Any = None) -> _GetType: if instance is None: return self @@ -197,7 +187,7 @@ class SealedDateDescriptor: return date_class.from_datetime(value) # FIXME: drop datetimes. - def __set__(self, instance, value): + def __set__(self, instance: models.Model, value: _SetType) -> None: """assign value, with precision where available""" try: seal_type = self._SEAL_TYPES[value.__class__] @@ -208,21 +198,36 @@ class SealedDateDescriptor: instance.__dict__[self.field.attname] = value + @classmethod + def make_precision_name(cls, date_attr_name: str) -> str: + """derive the precision field name from main attr name""" + return f"{date_attr_name}_precision" -class SealedDateField(models.DateTimeField): # FIXME: use DateField. + @property + def precision_field(self) -> str: + """the name of the accompanying precision field""" + return self.make_precision_name(self.field.attname) + + @property + def precision_choices(self) -> list[tuple[str, str]]: + """valid options for precision database field""" + return [("DAY", "Day seal"), ("MONTH", "Month seal"), ("YEAR", "Year seal")] + + +class SealedDateField(models.DateTimeField): # type: ignore """a date field for Django models, using SealedDate as values""" descriptor_class = SealedDateDescriptor - def formfield(self, **kwargs): + def formfield(self, **kwargs): # type: ignore kwargs.setdefault("form_class", SealedDateFormField) return super().formfield(**kwargs) # pylint: disable-next=arguments-renamed - def contribute_to_class(self, model, our_name_in_model, **kwargs): + def contribute_to_class(self, model, our_name_in_model, **kwargs): # type: ignore # Define precision field. descriptor = self.descriptor_class(self) - precision = models.CharField( + precision: models.Field[Optional[str], Optional[str]] = models.CharField( null=True, blank=True, editable=False, From 6f3b1b565f179deb0b43369321e300ea2fc257e0 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Fri, 27 Oct 2023 22:00:04 +1100 Subject: [PATCH 100/458] fixes to move layout and notifs - make Move notifications less complicated - moved users cannot do anything other than unmove or log out - refactor translations for moved users --- bookwyrm/models/__init__.py | 2 +- bookwyrm/models/move.py | 23 ++------- bookwyrm/models/notification.py | 18 +------ bookwyrm/templates/feed/layout.html | 17 ------- bookwyrm/templates/layout.html | 19 +++++--- bookwyrm/templates/moved.html | 48 +++++++++++++++++++ .../notifications/items/move_user.html | 8 +++- bookwyrm/templates/preferences/move_user.html | 4 +- 8 files changed, 75 insertions(+), 64 deletions(-) create mode 100644 bookwyrm/templates/moved.html diff --git a/bookwyrm/models/__init__.py b/bookwyrm/models/__init__.py index 9edb89286..c455c751f 100644 --- a/bookwyrm/models/__init__.py +++ b/bookwyrm/models/__init__.py @@ -27,7 +27,7 @@ from .group import Group, GroupMember, GroupMemberInvitation from .import_job import ImportJob, ImportItem -from .move import MoveUser, MoveUserNotification +from .move import MoveUser from .site import SiteSettings, Theme, SiteInvite from .site import PasswordReset, InviteRequest diff --git a/bookwyrm/models/move.py b/bookwyrm/models/move.py index ef7cad372..a5bf9d76d 100644 --- a/bookwyrm/models/move.py +++ b/bookwyrm/models/move.py @@ -6,6 +6,7 @@ from bookwyrm import activitypub from .activitypub_mixin import ActivityMixin from .base_model import BookWyrmModel from . import fields +from .notification import Notification class Move(ActivityMixin, BookWyrmModel): @@ -63,25 +64,9 @@ class MoveUser(Move): for follower in self.user.followers.all(): if follower.local: - MoveUserNotification.objects.create(user=follower, target=self.user) + Notification.notify( + follower, self.user, notification_type=Notification.MOVE + ) else: raise PermissionDenied() - - -class MoveUserNotification(models.Model): - """notify followers that the user has moved""" - - created_date = models.DateTimeField(auto_now_add=True) - - user = models.ForeignKey( - "User", on_delete=models.PROTECT, related_name="moved_user_notifications" - ) # user we are notifying - - target = models.ForeignKey( - "User", on_delete=models.PROTECT, related_name="moved_user_notification_target" - ) # new account of user who moved - - def save(self, *args, **kwargs): - """send notification""" - super().save(*args, **kwargs) diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index 9026b23df..093c25c65 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -2,14 +2,7 @@ from django.db import models, transaction from django.dispatch import receiver from .base_model import BookWyrmModel -from . import ( - Boost, - Favorite, - GroupMemberInvitation, - ImportJob, - LinkDomain, - MoveUserNotification, -) +from . import Boost, Favorite, GroupMemberInvitation, ImportJob, LinkDomain from . import ListItem, Report, Status, User, UserFollowRequest @@ -336,12 +329,3 @@ def notify_user_on_follow(sender, instance, created, *args, **kwargs): notification_type=Notification.FOLLOW, read=False, ) - - -@receiver(models.signals.post_save, sender=MoveUserNotification) -# pylint: disable=unused-argument -def notify_on_move(sender, instance, *args, **kwargs): - """someone migrated their account""" - Notification.notify( - instance.user, instance.target, notification_type=Notification.MOVE - ) diff --git a/bookwyrm/templates/feed/layout.html b/bookwyrm/templates/feed/layout.html index 3a17e3e0b..1a2fb33c6 100644 --- a/bookwyrm/templates/feed/layout.html +++ b/bookwyrm/templates/feed/layout.html @@ -5,22 +5,6 @@ {% block title %}{% trans "Updates" %}{% endblock %} {% block content %} -{% if user.moved_to %} -
    -
    -

    - {% trans "You have have moved to" %} - {% id_to_username user.moved_to %} -

    -

    {% trans "You can undo this move to restore full functionality, but some followers may have already unfollowed this account." %}

    -
    - {% csrf_token %} - - - -
    -
    -{% else %}
    {% if user.is_authenticated %}
    @@ -44,7 +28,6 @@ {% endif %}
    -{% endif %} {% endblock %} diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index e6f8a6f84..9b726d4ca 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -30,10 +30,11 @@ + {% if not request.user.moved_to %}
    - {% if user.is_authenticated %} + {% if request.user.is_authenticated %} {% trans "Search for a book, user, or list" as search_placeholder %} {% else %} {% trans "Search for a book" as search_placeholder %} @@ -79,7 +80,6 @@
    - + {% endif %} {% endwith %}
    @@ -167,11 +168,15 @@
    - {# almost every view needs to know the user shelves #} - {% with request.user.shelf_set.all as user_shelves %} - {% block content %} - {% endblock %} - {% endwith %} + {% if request.user.moved_to %} + {% include "moved.html" %} + {% else %} + {# almost every view needs to know the user shelves #} + {% with request.user.shelf_set.all as user_shelves %} + {% block content %} + {% endblock %} + {% endwith %} + {% endif %}
    diff --git a/bookwyrm/templates/moved.html b/bookwyrm/templates/moved.html new file mode 100644 index 000000000..fe651fd13 --- /dev/null +++ b/bookwyrm/templates/moved.html @@ -0,0 +1,48 @@ +{% load i18n %} +{% load static %} +{% load utilities %} + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +

    {{ request.user.display_name }}

    +

    {{request.user.username}}

    +
    +
    + +
    +

    + {% blocktrans %} + You have moved your account to + {% endblocktrans %} + {% id_to_username request.user.moved_to %} +

    + {% blocktrans %} +

    You can undo the move to restore full functionality, but some followers may have already unfollowed this account.

    + {% endblocktrans %} +
    +
    +
    +
    +
    + + {% csrf_token %} + + + +
    + {% csrf_token %} + + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/bookwyrm/templates/notifications/items/move_user.html b/bookwyrm/templates/notifications/items/move_user.html index 04163bc12..ba83ffa9c 100644 --- a/bookwyrm/templates/notifications/items/move_user.html +++ b/bookwyrm/templates/notifications/items/move_user.html @@ -14,11 +14,15 @@ {% block description %} {% if related_user_moved_to %} - {{ related_user }} {% trans "has moved to" %} {% id_to_username related_user_moved_to %} + {% blocktrans %} + {{ related_user }} has moved to + {% endblocktrans %}{% id_to_username related_user_moved_to %}
    {% include 'snippets/move_user_buttons.html' with group=notification.related_group %}
    {% else %} - {{ related_user }} {% trans "has undone their move" %} + {% blocktrans %} + {{ related_user }} has undone their move + {% endblocktrans %} {% endif %} {% endblock %} diff --git a/bookwyrm/templates/preferences/move_user.html b/bookwyrm/templates/preferences/move_user.html index aa1b9f12d..47b370e82 100644 --- a/bookwyrm/templates/preferences/move_user.html +++ b/bookwyrm/templates/preferences/move_user.html @@ -16,7 +16,9 @@ {% trans "Moving your account will notify all your followers and direct them to follow the new account." %}

    - {{ user.username }} {% trans "will be marked as moved and will not be discoverable or usable unless you undo the move." %} + {% blocktrans %} + {{ user }} will be marked as moved and will not be discoverable or usable unless you undo the move. + {% endblocktrans %}

    From 4d35fd45df803714a41f5fa95779f31b5b16e068 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Fri, 27 Oct 2023 22:22:58 +1100 Subject: [PATCH 101/458] template and migration fixes --- ...924_0821.py => 0182_auto_20231027_1122.py} | 33 +------------------ bookwyrm/templates/layout.html | 8 ++++- bookwyrm/templates/moved.html | 4 +-- .../notifications/items/move_user.html | 5 +-- 4 files changed, 13 insertions(+), 37 deletions(-) rename bookwyrm/migrations/{0182_auto_20230924_0821.py => 0182_auto_20231027_1122.py} (79%) diff --git a/bookwyrm/migrations/0182_auto_20230924_0821.py b/bookwyrm/migrations/0182_auto_20231027_1122.py similarity index 79% rename from bookwyrm/migrations/0182_auto_20230924_0821.py rename to bookwyrm/migrations/0182_auto_20231027_1122.py index 24f25b392..ab57907a9 100644 --- a/bookwyrm/migrations/0182_auto_20230924_0821.py +++ b/bookwyrm/migrations/0182_auto_20231027_1122.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.20 on 2023-09-24 08:21 +# Generated by Django 3.2.20 on 2023-10-27 11:22 import bookwyrm.models.activitypub_mixin import bookwyrm.models.fields @@ -57,37 +57,6 @@ class Migration(migrations.Migration): max_length=255, ), ), - migrations.CreateModel( - name="MoveUserNotification", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("created_date", models.DateTimeField(auto_now_add=True)), - ( - "target", - models.ForeignKey( - on_delete=django.db.models.deletion.PROTECT, - related_name="moved_user_notification_target", - to=settings.AUTH_USER_MODEL, - ), - ), - ( - "user", - models.ForeignKey( - on_delete=django.db.models.deletion.PROTECT, - related_name="moved_user_notifications", - to=settings.AUTH_USER_MODEL, - ), - ), - ], - ), migrations.CreateModel( name="Move", fields=[ diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index 9b726d4ca..36288911c 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -26,11 +26,11 @@
    \ No newline at end of file + diff --git a/bookwyrm/templates/notifications/items/move_user.html b/bookwyrm/templates/notifications/items/move_user.html index c3587057e..b94d96dc4 100644 --- a/bookwyrm/templates/notifications/items/move_user.html +++ b/bookwyrm/templates/notifications/items/move_user.html @@ -15,14 +15,14 @@ {% block description %} {% if related_user_moved_to %} {% id_to_username request.user.moved_to as username %} - {% blocktrans %} + {% blocktrans trimmed %} {{ related_user }} has moved to {{ username }} {% endblocktrans %}
    {% include 'snippets/move_user_buttons.html' with group=notification.related_group %}
    {% else %} - {% blocktrans %} + {% blocktrans trimmed %} {{ related_user }} has undone their move {% endblocktrans %} {% endif %} From 416bbd4d9e61b150eb744c4541991903cad9c682 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Nov 2023 14:31:30 -0700 Subject: [PATCH 110/458] Fixes plural string, "URL", and updates locales --- bookwyrm/templates/book/cover_add_modal.html | 2 +- .../templates/book/edit/edit_book_form.html | 2 +- bookwyrm/templates/import/import.html | 2 +- locale/ca_ES/LC_MESSAGES/django.mo | Bin 146583 -> 146172 bytes locale/ca_ES/LC_MESSAGES/django.po | 21 +- locale/de_DE/LC_MESSAGES/django.po | 19 +- locale/en_US/LC_MESSAGES/django.po | 483 +++++++++++------- locale/eo_UY/LC_MESSAGES/django.mo | Bin 139305 -> 139704 bytes locale/eo_UY/LC_MESSAGES/django.po | 20 +- locale/es_ES/LC_MESSAGES/django.mo | Bin 146744 -> 146560 bytes locale/es_ES/LC_MESSAGES/django.po | 28 +- locale/eu_ES/LC_MESSAGES/django.mo | Bin 143319 -> 143188 bytes locale/eu_ES/LC_MESSAGES/django.po | 16 +- locale/fi_FI/LC_MESSAGES/django.mo | Bin 143951 -> 143816 bytes locale/fi_FI/LC_MESSAGES/django.po | 16 +- locale/fr_FR/LC_MESSAGES/django.mo | Bin 148066 -> 44850 bytes locale/fr_FR/LC_MESSAGES/django.po | 86 ++-- locale/gl_ES/LC_MESSAGES/django.mo | Bin 143308 -> 143114 bytes locale/gl_ES/LC_MESSAGES/django.po | 26 +- locale/it_IT/LC_MESSAGES/django.mo | Bin 143005 -> 143352 bytes locale/it_IT/LC_MESSAGES/django.po | 28 +- locale/lt_LT/LC_MESSAGES/django.mo | Bin 146053 -> 145926 bytes locale/lt_LT/LC_MESSAGES/django.po | 16 +- locale/nl_NL/LC_MESSAGES/django.mo | Bin 145354 -> 145230 bytes locale/nl_NL/LC_MESSAGES/django.po | 22 +- locale/no_NO/LC_MESSAGES/django.mo | Bin 96272 -> 96586 bytes locale/no_NO/LC_MESSAGES/django.po | 30 +- locale/pl_PL/LC_MESSAGES/django.mo | Bin 128641 -> 130736 bytes locale/pl_PL/LC_MESSAGES/django.po | 34 +- locale/pt_BR/LC_MESSAGES/django.mo | Bin 92597 -> 92466 bytes locale/pt_BR/LC_MESSAGES/django.po | 16 +- locale/pt_PT/LC_MESSAGES/django.mo | Bin 139853 -> 139722 bytes locale/pt_PT/LC_MESSAGES/django.po | 16 +- locale/ro_RO/LC_MESSAGES/django.mo | Bin 124408 -> 124280 bytes locale/ro_RO/LC_MESSAGES/django.po | 16 +- locale/sv_SE/LC_MESSAGES/django.mo | Bin 138849 -> 138695 bytes locale/sv_SE/LC_MESSAGES/django.po | 16 +- locale/zh_Hans/LC_MESSAGES/django.po | 16 +- locale/zh_Hant/LC_MESSAGES/django.po | 140 +++-- 39 files changed, 550 insertions(+), 521 deletions(-) diff --git a/bookwyrm/templates/book/cover_add_modal.html b/bookwyrm/templates/book/cover_add_modal.html index 8ca5bf2a8..89d870cd0 100644 --- a/bookwyrm/templates/book/cover_add_modal.html +++ b/bookwyrm/templates/book/cover_add_modal.html @@ -20,7 +20,7 @@
    diff --git a/bookwyrm/templates/book/edit/edit_book_form.html b/bookwyrm/templates/book/edit/edit_book_form.html index 4cc3965e7..30fb00049 100644 --- a/bookwyrm/templates/book/edit/edit_book_form.html +++ b/bookwyrm/templates/book/edit/edit_book_form.html @@ -247,7 +247,7 @@
    diff --git a/bookwyrm/templates/import/import.html b/bookwyrm/templates/import/import.html index ad857fb2e..2c3be9e07 100644 --- a/bookwyrm/templates/import/import.html +++ b/bookwyrm/templates/import/import.html @@ -21,7 +21,7 @@ {% blocktrans trimmed count days=import_limit_reset with display_size=import_size_limit|intcomma %} Currently, you are allowed to import {{ display_size }} books every {{ import_limit_reset }} day. {% plural %} - Currently, you are allowed to import {{ import_size_limit }} books every {{ import_limit_reset }} days. + Currently, you are allowed to import {{ display_size }} books every {{ import_limit_reset }} days. {% endblocktrans %}

    {% blocktrans with display_left=allowed_imports|intcomma %}You have {{ display_left }} left.{% endblocktrans %}

    diff --git a/locale/ca_ES/LC_MESSAGES/django.mo b/locale/ca_ES/LC_MESSAGES/django.mo index f62f704e57cea12dc2e718eb352b1133611d3065..a9b338a2ad1927c45a7ac805755bb38a63e1438a 100644 GIT binary patch delta 30945 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 delta 31326 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 diff --git a/locale/ca_ES/LC_MESSAGES/django.po b/locale/ca_ES/LC_MESSAGES/django.po index 6a58b0720..d5e96e0d1 100644 --- a/locale/ca_ES/LC_MESSAGES/django.po +++ b/locale/ca_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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 06:50\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-11 06:52\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Catalan\n" "Language: ca\n" @@ -1372,8 +1372,8 @@ msgstr "Edicions de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Edicions de \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "Edicions de \"%(work_title)s\"" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,15 +2805,10 @@ msgstr "Fitxer CSV no vĆ lid" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " -msgstr[0] "\n" -"Actualment, es permet la importaciĆ³ de %(display_size)s llibres cada %(import_limit_reset)s dies. " -msgstr[1] "" +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] "Actualment, se't permet la importaciĆ³ de %(import_size_limit)s llibres cada %(import_limit_reset)s dies." #: bookwyrm/templates/import/import.html:27 #, python-format diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index baf448c10..63cdbd8fc 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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 16:03\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-02 18:13\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -1372,8 +1372,8 @@ msgstr "Ausgaben von %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Ausgaben von \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,15 +2805,10 @@ msgstr "Keine gĆ¼ltige CSV-Datei" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "\n" -"Momentan darfst du alle %(import_limit_reset)s Tage %(import_size_limit)s BĆ¼cher importieren. " +msgstr[1] "" #: bookwyrm/templates/import/import.html:27 #, python-format diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 60fd2463e..e1196a49b 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-10-02 16:40+0000\n" +"POT-Creation-Date: 2023-11-02 21:32+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -43,15 +43,15 @@ msgstr "" msgid "Unlimited" msgstr "" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "" @@ -103,8 +103,8 @@ msgstr "" msgid "Book Title" msgstr "" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "" @@ -146,7 +146,7 @@ msgstr "" msgid "Automatically generated report" msgstr "" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -172,23 +172,23 @@ msgstr "" msgid "Domain block" msgstr "" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "" @@ -206,26 +206,26 @@ msgstr "" msgid "Blocked" msgstr "" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "" -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -233,7 +233,7 @@ msgstr "" msgid "Public" msgstr "" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -241,7 +241,7 @@ msgstr "" msgid "Unlisted" msgstr "" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -250,7 +250,7 @@ msgstr "" msgid "Followers" msgstr "" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -259,30 +259,30 @@ msgstr "" msgid "Private" msgstr "" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "" @@ -369,103 +369,103 @@ msgstr "" msgid "Everything else" msgstr "" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "" @@ -576,7 +576,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" @@ -681,7 +681,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 @@ -769,24 +769,24 @@ msgid "View ISNI record" msgstr "" #: 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 "" #: bookwyrm/templates/author/author.html:104 -#: bookwyrm/templates/book/book.html:144 +#: bookwyrm/templates/book/book.html:146 msgid "View on OpenLibrary" msgstr "" #: bookwyrm/templates/author/author.html:119 -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:160 msgid "View on Inventaire" msgstr "" @@ -798,11 +798,7 @@ msgstr "" msgid "View on Goodreads" msgstr "" -#: 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 "" @@ -960,19 +956,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 "" @@ -1047,13 +1043,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "" @@ -1118,7 +1114,7 @@ msgstr "" #: 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 "" #: bookwyrm/templates/book/cover_show_modal.html:6 @@ -1329,7 +1325,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:162 msgid "Cover" msgstr "" @@ -1530,22 +1526,22 @@ msgstr "" msgid "%(languages)s language" msgstr "" -#: bookwyrm/templates/book/publisher_info.html:65 +#: bookwyrm/templates/book/publisher_info.html:63 #, python-format msgid "Published %(date)s by %(publisher)s." msgstr "" +#: bookwyrm/templates/book/publisher_info.html:65 +#, python-format +msgid "Published by %(publisher)s." +msgstr "" + #: bookwyrm/templates/book/publisher_info.html:67 #, python-format msgid "Published %(date)s" msgstr "" -#: bookwyrm/templates/book/publisher_info.html:69 -#, python-format -msgid "Published by %(publisher)s." -msgstr "" - -#: bookwyrm/templates/book/rating.html:13 +#: bookwyrm/templates/book/rating.html:19 msgid "rated it" msgstr "" @@ -1553,12 +1549,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 "" @@ -1588,7 +1584,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:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "" @@ -1682,6 +1678,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" @@ -1756,7 +1753,7 @@ msgstr "" #: bookwyrm/templates/discover/discover.html:4 #: bookwyrm/templates/discover/discover.html:10 -#: bookwyrm/templates/layout.html:93 +#: bookwyrm/templates/layout.html:94 msgid "Discover" msgstr "" @@ -1888,20 +1885,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 "" @@ -1997,19 +1994,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:101 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:102 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:103 #: 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 @@ -2018,7 +2015,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:104 bookwyrm/templates/user/user.html:40 #: bookwyrm/templatetags/shelf_tags.py:17 msgid "Stopped Reading" msgstr "" @@ -2028,7 +2025,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 "" @@ -2047,8 +2044,8 @@ msgstr "" #: 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 @@ -2539,8 +2536,8 @@ 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" @@ -2703,7 +2700,8 @@ 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:100 msgid "Groups" msgstr "" @@ -2748,7 +2746,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 "" @@ -2757,7 +2755,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:94 msgid "Reading Goal" msgstr "" @@ -2796,7 +2794,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:79 msgid "Import Books" msgstr "" @@ -2807,7 +2805,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] "" @@ -2868,7 +2866,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 "" @@ -2967,8 +2965,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:163 +#: bookwyrm/templates/shelf/shelf.html:185 msgid "Title" msgstr "" @@ -2981,8 +2979,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:164 +#: bookwyrm/templates/shelf/shelf.html:188 msgid "Author" msgstr "" @@ -3139,7 +3137,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 "" @@ -3150,7 +3148,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 "" @@ -3158,13 +3156,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 "" @@ -3207,35 +3205,39 @@ 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 +#: bookwyrm/templates/layout.html:88 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 "" @@ -3494,6 +3496,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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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\"" @@ -3745,6 +3764,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\"" @@ -3783,7 +3812,7 @@ msgstr[0] "" msgstr[1] "" #: 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 "" @@ -4001,9 +4030,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 "" @@ -4033,7 +4104,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 "" @@ -4155,18 +4226,46 @@ 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\"" @@ -4574,7 +4673,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4900,19 +4999,19 @@ msgstr "" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 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 +#: bookwyrm/templates/settings/users/user_info.html:113 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 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "" @@ -4925,7 +5024,7 @@ msgid "Details" msgstr "" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "" @@ -4939,7 +5038,7 @@ msgid "View all" msgstr "" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "" @@ -4956,7 +5055,7 @@ msgid "Blocked by us:" msgstr "" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "" @@ -5676,17 +5775,22 @@ msgstr "" msgid "Remote instance" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "" @@ -5698,55 +5802,55 @@ msgstr "" msgid "Go to user admin" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "" @@ -5883,7 +5987,7 @@ msgid "Need help?" msgstr "" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "" @@ -5891,58 +5995,66 @@ msgstr "" msgid "Edit Shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "" @@ -6248,6 +6360,10 @@ msgstr "" 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6505,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 "" @@ -6609,10 +6725,14 @@ msgid "Groups: %(username)s" msgstr "" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6747,12 @@ msgstr "" msgid "Create list" msgstr "" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6824,6 @@ msgstr "" msgid "No activities yet!" msgstr "" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6730,10 +6851,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 "" @@ -6750,7 +6867,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, 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 1f66de56e8c99e4441e48c52800b4817c214061f..6795f2e82d48584bc15a36fa274df1b19b883c8f 100644 GIT binary patch delta 30350 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 delta 29949 zcmZYI1$Y(5qxbPW!JQxpo}dW?4Vpl4r?_iyN^pwX;_mKN9EuiqcXxO9;-$d-{>}{d z?S0;T{>x|Fc4p5>;P!6WA9MMhnC`7aQKvXuy`nizDtr;*IF(~K&W_qjb)3γ^S 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\n" "Language-Team: Esperanto\n" "Language: eo\n" @@ -1372,8 +1372,8 @@ msgstr "Eldonoj de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Eldonoj de Ā«%(work_title)sĀ»" +msgid "Editions of %(work_title)s" +msgstr "Eldonoj de %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,14 +2805,10 @@ msgstr "La CSV-a dosiero ne validas" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " -msgstr[0] "" -msgstr[1] "" +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] "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." #: bookwyrm/templates/import/import.html:27 #, python-format diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index 95c05e2ccc9a39d7fcf1b31f492b1608c4695d57..9ed73ceed3b60c51460f9dd4a6ce748b5c48950b 100644 GIT binary patch delta 26947 zcmZwP2Y6M*zW4F90|5er5(ps#NJ0n@LI}MVL+HKt-a`=xU636>klq&60#c+Xy@(*a zS0x}yQ=~{0K@_EXzrQ_m?t7m5y!$zu&&;e@Q~oov_9n#h^~($?FEY$2=*{Ce&hn9t zlLPl)K|F`S_zd%5rcsX50AsKm4#yg}9;@JEERMxSJ5FotfL(Aa9>Spa9OnUE#7uZ# zjN^pinK6#nDMjKQ1vN2jtm72Lu9yp_V*y-&rST}fgDPW&ezx&)j<03CKBP;l6+Mxg!63q zF4TQLq6YjMMq<_pj*}ltq9WQ9L$SBbr+7(ZpM{2hc0lOrFa3^cTVy`$JvMvQA_sGB4dlibVfe&5~74h zP?6~Nk?~iY!2WZRJ|?VO_ze@VCACN3LQKKHPaTKlbY@wz(Ywm$VK2K`KEe<1U%Y^t$b}V-Q_V|AXA=Kv6rB0oamr(+)sB;hiP#lC#GZH$+hZfv zqaCirj_61Diene-fwQn1KE*g}NxZY;1RRd@u^47#oxIv~48REd5es@8=Q(OX z`PQ2OwZiwvFF_3;=LT~e-^Eb%6R;4j-$ZqP5*H|t zmr)O*>zEGz#0>Zn12N5Jjv{79JZ2bc}#T34WM+=f|jFBZl#sE+0JncMtK`2tT1fA=!kLa2IM9|AlI}@m>arolpac-e<~V zQ3I%i6|f=d`XtnVr`!BuREJBg>#W=N5r3`8ehRdE&!R&69Ca$P>^B_*qv{p5mPJJ_ z5%XaS9Ed}(JYGi)DC7X2BiIy6dmQI3vg@6&LuP;tyd>0cTU*c@w~`-wIYu+DKe-vs0DYkqX>i$JI4A)?Y&VSw$<||YgjO0R7 z498^j$9bq-yBHOj^{CUa8?`x)p$2jhlL#ZN_$}2n|4WJPsAX zkIoW*HL!vLHM|J}@d)<9^Qcf&_}0`*MBUgFGhkcPQguV^m1NYwMxoCC6b!(F*3+no zTtw})8(tE+A`84>8Ore)D54Y2DlHi;u%!EYqtD0YCum>Ptr8!O#Nz@ zm3%`~1UjN3?Hxrz5%8iKnt?i}^HCjb!YsHKwbo})OO}cX>0Q)}UZC3XPc<_RvgSoa zu#nA{MAfTo%DqlqTcL%uvo#4-aTsdk<8Ap|REM9S2D%oj;$hShc+Q*p=~1U91T}$J zYbDG^z8(hZ{I@5eQ1nGD!64M;nSr|TbJVBUcGOawwtjE@3AM&|Z2k!YyUn@kipXwH`o$ZkU7``4Y^I%WcJNsK^{f4d|@RUqj98jxB$R z8kpyj=^zBvUSZUl$D<-y12v&KUJ~l4DQW=SQ4Neh&1eSB#zm-^7rty}Tmdzs+NhcI zM-6NY>b_|>0vBKz%zVY%mw;OGCa3{&N0m{K%H)zh?fzQUujsQ=}iS(~*Qi($5q)gHSVgA2re`sFBV>KU|LL zconLlU8wtyqC$GgdI5F+HPpavq9*X0E&mf+>ioYT@g5f%|D@q?+;9xm`1`d;Le$fc`{9qQXtH`4X@i`Ff~GOhH9>9(s?F_>_b??0L)F zI2aYW(dgSGsE+5MHs=ak{xxbKr)~ZUY7;*~O~iBCOe_a#PZdSguYkH<=QaUXK|2c6 za9`An##v{hZu|^2@{QK7QTH7}g*+8Cz)PsTaSwIu-e45^|7td03~EBnP!sI=EAdyT z`caS;hoU+hWu1)bXg;dmN>oSdu_o?84a{@LgftT>lDSZ8TmUuGc+`Cf7>UhL_YL)u zP{sGLF;2s9yo_4=7pMUQ-!%;vL`A3shGGILave}J9fF$S0#wIqQG07QYJ#b#0seq$ z-+R+uc#9fHntOZzVK&T<2e1KN$95Qd-^_FpDpGS$16*qJ8&K_hgZ_8|wI{yC%6JpC zMEM{1BH(pOlh8=3VgYP|n=u(TV$?&^(0SCzFQGcTjp^`D)C^yu2Ausjv-TxW1E_$R zu$s-+$35hmVrCuqz(;08dC<33s1PS$DQu4AaS~?6y;vMiVS0Rly3g~w`9hKd724vM z7wcmN?1S0^gHi3LU|F62xwgV_d*K{vMmJCmKeyL2J~nHZ12a;d8x`6p48ZcJwNF5W zxFsfGlFeU04d@6;Lh=WlLjzit|F=~@7 z$0E2I)&6&=U4IQVp|_Y7v;9H*wQD2(FdfxI&Abh20PmvK^nHxOPf(#eh5C@WfEvIb z)+|rW9*RXhf*WHt?2SP<64l-`n_u^o_-kZ)D9}KDMvctxPqUUmn4Nqa#$$C6%%@`&)P2>l9M-~0I2IMTo!Ac#;1Kl2{%tz^6g7~~Q583#Dt?W{G3p=F zaC6iex5eDp2^FCcsK`yRE=GlZEowr$urwaTckmg~kJl;p+^ltV)Jz+r2GR;cu#3%) zL^U)X6^W_VMVN>D=cxJzFb7^j4eU3Ye~W5A=!JQ5hGJHo|I#FKb0HBGx{g=`yJIX) zM-6BvYUT$~oAVfIAQw?faLf7xOObzrIkCh`Gw@od$TqV1*2?SrceVw6Pz?`4g>oE5 z<1Bl9yLAtSQho&0;LoU;-bD@cg*DA9Gvh$i=FEvf7=Z<`GvG>b_g3fjve=>^bWGH>f2{``YY{%&&>RW}J_L%2*6F z!oJoqs0L=CLhND*{0y}zQ&CIcyfKl>g1N}%!;)AAmZK)T`3>>chz{5a zC#)AyA-;*)3$IZfMZYyODUHfkviZ8G2AkM?7n|>m+5;o3(@_!n3^kDTUJ@GFH>i-F zK!xgC)F!%!`c%yDulXr>EXI)UhMMVgR0k_CAMQkTa1j-$8>o(g9FK2+k*EomL@klG zB8faCYM>hKgu(bBYVAKob+85t;U3g!xrOTJHL8OQ9%BgViCPHNQC(C=O;HhQhnjE_ zGGVVX!WN80&3vlO&%s&bKgD8L%+EB~&e{z%up|t}aj1ruqR#)9m~hrSMQH2E*lwuSpem|fO&o*GP^aoF zs@+Sd<9ZJx=-+usLTer7Z!R>(3go+@8d`!1@oLnJcc2Dz3bjN(pz8mEdc=mNGxs$@ z-Paz~VG?SEaB^ny_AniWYm4LQ3G3sdQfdf>U*7UNvOkTsLkZb zV$6bSC=As=l(jUfp+tMVCF;J8s1B1*5lKc3bga!!M71{)Rc`@C>ijPyp#~42W|E3} z!rezb3H`E~5$8sQuAI#`Lp|vRp&FixMR5r#az{`DIggsaHS2Gv0l!Ay=YK#pQy~b) za-jgKfn}(*+km=ZkIkP%t?eb$8a_bH)RW!JECcHP?5F{Rqn0)XHNY~cJ=6ugdhkpj zp%L!DhIkZHFeu35R74k3@vO}+%V9n%E@K?!X>yv#mBbkG^)Ld5q9!mOHGq|EFNIJd{Cg{im`Lqa+Kn&Ee$9^b#&2ITShe*C@<6{65EkMC=871R@KBWggWu?F5p z4WL+FkMG}r6Hp<)jhgZAs0Yvs)Xe`y?Ui)-OnDYB32nZds8bM)OFVo&qn6}!e)A~4 zimk~1f-SLJxY-laQO}LVSO&ME9>sT2kMM`6-TuV-!s-`c2I|d3LL&;c=0kNHjoM^o zF$(LTPDg*#j3=TVxruak(! zUvUHm7cvo@pQL9p*vhtD;UvL)1XKqc=Z^ zkt8(3g{Tm%LN&C>mLEiYTz-eT@g{2R|3NjFsfgLUk=8iW{S{FIZh$&9Em09kM(vFy zML7Rj%heR9!FtBBTT_VsHIDc^Z0&Q zWjAVoPw+N2EN(V&$#{?NAFDg!VahjqNlYU#tc1rog8yP`JW|r*?7*;69{uIUNku)H zzvH(E^kmFi#^d|d$_6-ue3r5v-|q>eU`_JZu`U)Y=kfj3Y#{1UKLhn~zaJCOd!0mc z5|QQ2vwRq;!V1)<+aXNB+o&6QRq*(JTD}Hj$rq?-zG^i_?FBC?v!Z*O@}17zLl8HpNNQUibkO`WrU?2=yR(j_ojSWsmPSB}bq_eIIpSttw`% zn_>&{olz0min?B~s+n*+#_Ie}AW@VH8?hN)Mje;fYUbN)CDcIHqGq@q6`@n80Y5-J z+y6l=(OcAKMT6?*`Op{D{s*W%wh7hV4opw~&Os7>coIwE8SIX4QOB;^JLbk=*7r~$ zPC=cLIan5#U~l{m3u3th^KG~THYWc8*2fE&i1}-9{u`0#PC^BnQ4Riu8sQt%00I&{ zX6;bViK;f=05zilsQZ#p$9Ie^pNO&Kr(#FkVe>&XJ?8?ePl6VcA+{ zH}^n=_7HZ(lc)}g);6DZrLY(IKB)4uw)~7g?bcc zZRv5YV+`v1K>!ycFcNiN4b-!L398+lsD6GyHmTQnMM9yDXl;&5BIUr`ds{SPm!@H<~q-kp+7U`4oSB}IqE;PWI_yg+r^lazx z{pRyjTt&WQd*cr{o&1;%<_8q%J9?bQo zegitFyN93uP_T!DI!@~0@%=;NKe&v1m!2NquUP+!Uy|R_%h;*6={TT|`KGfN_jA2- zUytt>i}NRWeE-662|uHJK|k}Yx?F#c@1J%yq3U-T!1@1%MEF2+!&Owri{CY0n=1_R z`2G#|5KgAN_F#|iXToQ(2Kfp@%uhnb;6(Dza0ZS}HucjDHSNsAB+5gEnd{?G5zI22 z^FNEkN5joCI%b5&=|cWv)G2s{yYb~no(qI@$0)OlZ@p)BZ-Fr$rw-RU;2>Oy>L|xp z4?oD_-wm)UUd4B@%KPTi^GobQ{>uBDe^sb4&U^)1iP~%zP=6J>gW60zs8=25;7B}& zQCK&H4;fCw0MzvZve~)?sHk@d_x~;>hLVt{#Y`(#iMtudVihA-j!wlFC_1&;L>d842^?Y~_Rc|(`-Xhdzi1#xR zs<;_-Ty~-wIELBrN7Rk?QD2?@u=!UQOFqqqCSviZ`ZZAPv_!Sj0|RlGEuVlI&|Kun z>2+4y3VSe|3#U*wK0r0}3N_MM+sfTcI9E@1i=KV)F~JH2KZ8{5EDL z{}hw;`TwsiNSWtA}ZwVQ8OHc+7l@_9zViJ%sbxn-ewVHqm@l;f# zHlR8vU#(7~8qU7dI1aT`4^c}Ou*^gx z92L<*m_z5kI0?K{i%;=IlOYOg;* zZQhrtf#vy(FDCTwR3M>(mZ)=_jKy&(>YL8jsIN?qF$FU&Hyuq!J%Sgaj@Kd7K$2IO zJv0`TUw~SIW!Mh4VO9)W$@$la^O4XDi=Z}F8PtGkqdo89z6hFE47OF{p2^6;U^i!hyI3 z)o}1?j}w6fQEOex+5vTa2&$bF^lfJAs?}cebHA@C&wHIYA>m{LcUI$gN8)~Gy#x?k%Bs?%{bmV12v;X z7=x=(r{EkG$A{Px^Q<=m^jfE)>bs~1*j`k`PNCYrhKl%I4A%MgY%pK3LQs$1dZ-z9 zM^zkv+8dKmYd#A#v*oDW{{^ap6R3z>K|McyM?LGGp(YZz(Ol1qz6fGwo&Sa;6uNdQ zz+Tp5R4Bcuj%V8P&rl6+u=zcxdM8m6_z_kAi7ijF$#j?%YDsc$HA@kJsuzPQua25P9aN;+;%e-JI@VdXnStco z#`#ypND4I4Qm8K$wXh|2M>V(;b>n{2+8;&D=7q zA~6Eh&Lq?(^)4Wx(0zh!aVu(VGks;A2PII)t`4fh?$)uWjuxT@{28j9ZKz{*64lZ7 zsCu_i1OFWr;eU`N^*T9snj1@?D%3_jAex{?*wdExM@3{9Y9NzPdtwrOYYRxa9cK6Syj{dgSGwe1q&y6}( zv8V|2Lk&Cy7vhJg3FZIB9MjUMh$LWMo&N?TQm`+o!~0kkAEVYRdXKRTs^LV`lGI0a z*bCL*7}RE*gnqabwKtZd+Bt%0@d7F$m(Z)k4HD}30ji-VsE%IRa?f7#n+)l39OV;n z0{ZPU`AOJ-eA@lyW4S5zA-@mnVW9)&AFl@E7vztjHvN!;oPTY$(Fe_lmRi@K)_5~& z%}!abpqAo+z3z9&%q%ZzQ^jIwtc$vTEGj|^t?MzI{2^?QHxF_CHRGy>&Dzw#CgfY8 zo?xG&Hp>>ggNJPSx+7-5J5alSA8KH!sQUL&19*x0RLyzR)Qd&stD%l(E3Yj`LT!>1 z)Qt;lev|cx^)hPhe@D$M;F#$+9MxcX)bVRzZH-#{Zm5tCM%_OOwKu#j2|dZa!e~5< zCGb9KZ{#^{A{2${Fb;j25Oo^rTRWmA@Gh#oiKvd}U~6248o=MEcHbhAzct7BDQXiww+4J? zCXxpgiK18<>!Vj|G|pC-iOPS9dLFFDm$=oIZ#ZX;*&fsvj?1W!-o3AQtH_~4) z*Yl(HKoM&h)RXZYd%YcM;5{yI{&nGf3P#~VREV>FZ$cc6nrQ>nTDC(q+#j`@N1|rx zMKw4dwFx)c{6U+)ikk87s0jpKG=_Ld#8ME6>Yx#7ZMvWa=As&0k2;q7Q8RslYB2o| zCIW@9GWnWV4^vPBJ%xJ0{(w3yuTXoZz>gl^e>LZ=OF|7zM$O=Jo8OQ6s`axi&wR=J zD^?*aMtL(-{c)&)Ek+IaBv!+ls3nZNYz9ygBgnT#m5;>gI{zP%(1?zsM*IlX@e8bq zg|Cg2cQ1v5G1FDFXusLerGf{hC z0Y=~_sP^`v_RcX>ySHw7O@ohYh3BXcdTyELKo%@Qz98zxMyMI}Lk(oS&CftJxDvG) zH(0k}TJpPWejn;f>k-ubzj#S#WDijz{|j{rUfXHumM&;Md}0V0@RFG zqe8m@YvDoEDN6sVS%O-qJ<%SuDZK+osNyWtQhbkUIMW>y;=HJ}D}$P0J=DlsppIi_ z)TSDM+58-Q3E}RpWs!D$59VWduy#*P&40+deo<)?t6k>CH#IfyEG@ZARmev&_Gm& zBd`fhM|FG^b^LCjmhKg*ex^re;5kv}JQ~;FJE(r{p(gSYwHN$<=lrXI%)fhl|0h&= zQBT4Hs0ds@Mc_6T!KYXP!ycOk8=@ZFozZvvP#teTEyW4+b&ML|OVnmh^F+V<&1QbW z`B#O>6lkW4(boW~`~)g=S5O1{12yxsf0(b&c~KFmjyg_tPy)ELOu+2_m`8LA z)bn64s-rJZ6T6Ix=&z^Kk#Ed#D`l;Ty1zAQsgh6w9gP~mT=YfY4d-7CF0&OkqSkyLYPViP zEkU}s=D0SH?G9y_z^#diNiQD zXgyFJ-9@eaTU0wy8U1{bOvc^h=ORx?uhTG-pD(1HQET%qYA=jHoqI2)#i^*>JqvX@ zR^pEyel&~faCV@nzZzSU-;5nGeHK6868A(cZJ>fjuz!;7d>a2>UY z9@_j{)Y@mvYOd!&9mhh}DyXGwj{1Hu9wTr)YH7}*?thH>aQYX6>E8*@=I7g;Wl2@ZHo>!4DW{+BzktdRY?f>SY5>zv4KGD~`fW!onW&}*L3g{)q!6=6QRtg8AhT8 zQXCbDGFTF8pk_V{OW|Z}g}YFnrdjj*`F@A26zW*+!YVrdxx)Q?zn|Lz13dgS9LrMS zy9o1O@{jc6J2)RIxQ_BZ1l#fAl0Lh9v@_VfKdLG41m4xB~!GuOYz zA-Juu*}Tz3{LKIV$1)PlxbPS1T-J{9^L^U&MtzDcwfWsxpZrrShEV-G z+>ZLROo%lh9*v4fXfZRfhNwtQK;O^*=97q}U@dA_e~(46D!=lk4*R0kY#WxwQ>dkR zi(2~(#f>?v`B5Q{!7kVkN8oy!kBT?-C!+8F|8Euvt;tdxh_6taF{y-~@7L;*F`oQQ z)Bu7?`uTnjur_KlZox5l5H+x>rOX4W4k|KTPU+j?)Mv@OQk;K%letWRHq%oq zgHCBvu`FsgS3xyU7t>%XR7l&QA~plH`=6mYc!N52Y0H@78G;&E5!Bu)g}t$F8P30E z@Erx3;dN|;S<9N;+XKGr!2)vAXF1$p2S;1{urv8Xr~yY-H2G$znQz8XxDz$N5|zx7 zRm7g;2cpW)qay9SNB&O{xveW)8Fs+cER3`UZ#iV@fab$@r( zXE}ywop@!TFe~prNxx&uGVyVn%&F$(K5pk99jzOA9i_ZJ50@WEe`V|DB!7vzVQy&q zD9`t9)%M{D>&PGGon0T>yxQCQ$8b+t(gSVzNYazJ&W|*Fub&LgukNSq!#xGuz5H3* z{i%I;Kmu2$ad&0cze7}L4{|%n1#+Jb&}-UjM1RfQgbq1^FH`aZx#86KoAhelL)@ee zVU4ttHgV5GuIQD`_WPXt0p4ZFPo}Lyq-*m&Pdb6J#=OJyP~{bF@9FHOb|{>^HYNF~ zwUYiGkpA2a=vdg(%PrZlynjAwe&`PD7~-#;cfy_8G0O9WyP;#OC&0Z-t-`LSQxktJ z%2T&hr}&DisHN9VN?OpSwv}Fb#OSrl;QMnHe}2ikDWhub?(GzwJ)<3$E;nX0@4JsW zC6?54b1+x7Gn+cRH|jF4Z+H))Jf3$Z-b?6DuNrQ*&LR1dNNKZn;(eN{alC&aJ%D#X zcR}ayxZ#wH<({4N)Qxs0ab+}PDUQKhdzZ2qr1crw%DvG!+?$uw1>QHga)LY4PkGsugigD^J(3dT3Q7rNQIhQuWQ zS69ucJ&X4OYJ2R^cak4Noy=~tt~n|eBK0TtE~az{=^Lc0*cJ|OmtJeQ)__rDF89?dT|=@@q+|zo@b?$~i+LWr?$NG^Wh+s-o_q8v!j&`B(94ezOd%aXI+pTvSdVu( z-i6(&-FkRRy34zTdtSK*yCr(MyZ+rvXYbFojI{ip*C4lE_i#^ZH;F&}-KqT9%U##K zdb`I|xIvr0)9($^*-4MJGp5^eA>bk^CiY^UCz@fZ?5Qdg)1rK^?j-vWphZ6 zr>v%XvPV>CdU7eM#_K)Wc}6n4qTl{{y6Ez*w-!FD=PaV za=mGzjlH*^o75}J)4`q8D?VQd%0FTtkzC^w*Xd&G1YjCBwO0;LBlp){u>qy2cc1GO z+|b^o^X;U?PbfKx1sPQgeI4VD?m610D!DIg53@-> zCf$##2e@CaKB({D(hUuOXQ1l2qx*V8KOixWcV5Od7gBC4~g^vsd=IZ<1nzqqwfu5L)}&*8AP9+Ak#V7^Php zMFvWzy50Ka@Wi;o`$Yw`pgf$iV(#*O;c=1N|1Tx&xxXsu+>-o%zx-%L-%CDrAN30h zElDkp9eXF7%zFawZEj@$@QORAcZ&B4-Y)m`(p6@g&W=rAV?N=n*E6mSpw1pzEaQ&u zUt0fJv6G&XgVcUzDmhuX`vm24YzqV2)c%Rl^SQd7H(x59w!HNkXKUyi3SUT^dv3)6 zVFBI9U8c>?+)e{R8nq?YN9*x_Ua8#shO#2O7jb==ZL<;OhyPFAzFbS9&ItG5fbz{Y zaP<#LI@&uTxzd7k7JP}bc>hW(H5o%I>h`7lL*}#8*3U?JMXpELUfy%-4GfPtO|BB9 zdi_Mr_qbyjHTBv<{v9mI^&alrfgvTkl54;_4Yl-DSFaxp&Q)qXCq0aQm)kz;xR(cp zdy?H31H&q&+Im}YrR^a%_e4;?Jnc=>z2q}+?=9X%ZT(oc(Yvwr^fmJ?SM?fCZI|@V zq)T#lJMvR`kMUjQWYPKnuGb>}9q%dBxyJREq;tCm-wi3Lzv6lS)0(}jGItFnU6=Q9 z(%j^GRpHN4Zor`Mq%x#D+_{?fK;CVsa>UN$B-bWWHj=WsjDD(ZT}`}8`A1lv@*hdh zm0Vv#Sp)I|@ng#LI!^hw?%Y9Pk+;c}<;~x({`WPM+A-v2&}%dI?4U5uZ|?m;O@jZh zHLh^?Ug}rlUEOUoI3!fATMRPj|-;4)YvwKOGz!(2f?GQC7lD9URt6 ze`{#Oo!2O7OQlancSF)esoTp2>=5~_^zuDr@9@@Z3HbtCUypj7 zqgM~dXJ}OD z8B%?DPoq{{-bL+9^Sf1tCVJAk((JaHEct?cRVrVcF}Q;#|eX{kEz{j_$Md%wU% z^!K0FK@ykT$YF&8{?lD`x7o0evJWZ$$IfOI?TjT|4!hev!^o$S|C)OI8-?%H&HZ#( z<>+gqFHll}nssdp70J(`d?uZwP*&4@Gb|*ZelAdtT6wv;i!m+75q20O-IBwr`zKP; z#vML9DsUxrpK|Rh%PPxI?H;6+LgdHMY5}~%dkc3}=2{!l|NWXs z*-+|D<9+MDE=+ObMuZ29rp1|*zU#IcF{o;Na$9WFUQ@c2d#8~93zw1a%=HU)!H!><_FeO3chT{>g^tb&4qL;F4l!e9&<<~X^qAlAm}SQ1^Vf+w*YW*F``MX(k&!(rGS&*C90I>K=t z;NO@Ie;Mg`oiGv)MmkP0Of|}Js$n7)!qJ!w*J2bNzy!RFl`v$q<21k)SQOV{I9^2s z_!=`|yqCII86&VID&XN>5_L%Iv=vg0ahx*DNKVX3dGoQ3vkQBn8pt=!%tU!?LcTTT z$IZ6<66(I^7=>xaJ5D6VVs5ODn$bQOiW9uHU@>N-U^^Da!`L5RVp{Au!CW7V`N&VS z`SqBc{2tUyUcdl+jG6Hj_Q13g9fzizL6}G7xB|VoCYi(`Tuwo^$&NDx)A6sVI2Rvc zZZfMe{WSK9AAzFQ_=o9^vjy|daGdpc**amSNJ z88pY2aKb-voHblHfwbZDcUfM^tnT*{q?H6nm?2m(SJC4B^dSe?n8>~ebhRQc% z62>nvGdABExzx<$dhE^h;>#ST9xlUw@hR@6f9EOlUcry)V?ipAf3S+tVL|4*Dt5#U zxDvZyDyFFw_QaNW6x(0~^H~H(VQ1Wc9WgWO5R3gW5SQQ}+=|}9B%)b3ZMvq|1E*mG zKF7Qsj^G9pP}#3cKm%|%*LR`+@+P*t6Q<{SG6v#cR6A3) z5T+XXlmd0I7*pVC%!lhS3!Xy-bO+PoOH_j?wwn7gV*vS3%!GL`BPQ7ERZ!=?HmaSD zsQQDvHX+sUR8(YhQ5`J9%(%&V0CnRzR0r3v06stsAj>xMXbnRxO#xK>v9|nU3?x4v zRo}aoL_CSDs42XITEjn39s6xJGZchcqA*lok*I)+paMxmHCO`+VMEkRjzk48#ySl( zLvxXKyv_;|aTIJp1#%OMVbIrR%09#_pK= z!><_)M-4C*6>xD(p>0}~L{AE;VV_HSky>L;ynBi71+=C z0=>I=cHodbW(Ep>W0s~Qs@*CWpkva2gd%H&8fiyVM*}ee$D;yUf!XmWYSaFT!FV4( z!grV(`+RFUn1Nct&r$7eK;5?=Q{pl7s=?DFG?Kfhj-T5KDfgO)15j%pjGEdoR726I zkrYL3stTz48(7<;I_iVjZ~!WxX&8i`?`8hAi8fK72=|~i%NZ<#mr%Pn%RbX^FFZzm z1S+7a`%QUGQ~)ioH1gYrRGMCX4t302&WWAQv{ zjhe8~DsPXous^CJzvE_PX;FdaKy{o48)FI7nomX5{}eTV#kPD6YG%I1fja-+kqDun z%n9=qsu4z#?}Onu8~t%JYS->SjqoI`-BCAA!Bn^iHNxenfYze|*lj(9s&^d&@DA!YKEky4 zH+nTy?`=W4(d`w3ReuGloz19IwGYGa z;%Vkz1y3kYgQ?D#h=Wo2oR}VCPz{wvHCzp~hAr*&WXwQ*Fls3$pdM_CP=S4onwjIM zj<2F-?w>QvzdCqNff`Qty=f={lgJlAjeIVu-j}EwH((mvj#{F(H?VRUu=cbQ61e!b@Ui@!%NJ7InJ8HB>{tq0Z+MRD}7`24UFbf{RtUCXfNQB~_s6bL(G!-(SraA%@aY@w3tD{EP7#Ct^REO`Z z{y&<)GoWTLCuYThSQaaw>JLY+rfeJuZL%q-k<7s${M@<;wf2Xt$5Cr~2E*~P&A&vo zlj0}SL3&g>Sy6#UqXH_9nu*FkG5>0)GX)xXAJq9Bgb_FcwFDbc4ev$G#8C{!OQ=oy z5Y^5b^v&QU({ToDPI)Be#bKzKSd5y%ZI_sTt@U9F6zR{Xsd<8d_|jHPd)drP4pcyS zZ9V}tvhudPCMvKNs1Ev|+8d2p^GT?gT!Fw_Zd3zjP$RmHv+xmWCM&!?6W!1Z3epuBBXOmxz>Y(&ZvxzIB^3AR7P&1i?It7ChK5abyP=xpz6Iwb(G?snd%@^U@cHn+6gt2y-{mC3^fyz zQ1>msNL+)u@1&Q6Dqh5TcoW01=zX)M4Nw8}LNz=BHA9mz6c?aoZYye}$5A8v6V>s* zs3i#e%?vOa)lMvG&v+Bm|h3I%R>`UKlH5?YKj+NF5-_8 z8ldiLfjO`TYHBB9PF#vT1l>e#O^$Dl}HN{NW?J4uGT|0yVb@VxEX*0q>ZkxZquL$kwH4-KRtgrQHq|!N zlzxNS-v z`W96&)eBQG6BZ#q9M$kz)EaNX?6@5@k~658`_=jwHTD0Z+Ryxwk7CS@m9P%dkJp(& zLTmjgYNRVsfo#AK++p+IqZ+!5nu#0MN2sNGi>e>;%52g&RA5zYzA38xWDLcRFq6*z zG!oe<_zX3|Z5WNaF$Qm;0?PQ>j66Fk;9RIc3Zr&;8EbVcM!pGV#mT6^7olc$h0TAZ zyw3mEwqPHs;iIUj{1NlvU3)#<8`Dq_hEg7eYOn-qq!mzsHn6rrjkpVHbM{1?f+3g} zr=d5D#3mBz@D%EtUqjt+57ppbsD|F!>nYxvnaYSN&x+dBVW|7cpaT04wO8t+>NP>l zL~GRE==_%X*N6vFP!`9dBHV91k80p9YKk9VQG9_#F#4TYg661pk}w+%#CZG|_1xHt zy8jPUy_cu~r+&};E25D1rb4*2FlveuQG1~=YOP12Ml#Lj=h*z0s0LTr{0^Jni`oNc zthZ1z^a2$~3h%$B<1DDn7mn&6A8Hd7Mm^EmV+kCG1#uT@q_L^r4U!po%jS65hYAFsN1NJ&+Y{3Q8$Zy#EeVj@D85YLzex||A)?KK;4q!O`h-&yb z2BBXHkMA!avSCB=IZy%hLIpGs%jx`&BB4#T2X*6qRHPSBOL7}E(%;e70S+VYm(pYQ z1Zt+Hp$0G)Rqt~gfoo8wDzCq3Hx6}ND`EuwI}J%_t^3;xE3q{Bov4PMpr-g8YQ*VN znSdfu9mk^TmqI;aKSJHN0(IXOREGypoA^9xpf}K~kv$`!5j&|pzK_$)s2PbxJ%Ea# zI%BTy zVE>>VRH-xi>U*7hB-CLY)Mjd7O+q!)AJxEc>oinDpV{l{QTJ^_b$9?ZBPURSUaivn4I{(i}sKJm-W+c(5?*o-kPr{a{i2I_ZZidaTK|Se?q8k1U3*i&g%!Oq( zffPgyAi-J{6>wwpeg1c_7m{%#7lxr4_y@IiDFe+7L8yELYHj0CYgidI(iW(ZwMX6G z9W@h!QA;}p72wCHJ+uS8dhlE!p$OAw@%VllCMS*|pNxt40MB9GAd~+G3z9FI)#Lkk zZH3wcQ&8ngFal4a0{#OPz-v^X{=vrd!JPkE6a-Nq+u=}Li$yRho0UdT{1u!0$;Q|c6viw?=M*IQl0n`9B@@A;L($G!X+ z`Ff&G!AM-_VJcBe5*2P9#l^5G`BK;fXP`FGE!1=4F&4*w2=geefO>>iLG6j^)&|y= zs6f4)NGPIS)`6&wN1`^_bkrZw7Ne&A5NgC%QIFims18y@n$4IVmCu6;urR8lL|a}J zwK?k`GvjqykENM)E>BuYVhMIQ@#+tBfk_?zgr&T zN2nzkhN?dS&*}VsLgG^jy5#jZt?>YC>>BWQ!VA=&1KSSMf@<#TNQE7Z*FL5=ta z%#T-4fjIfio(e!+FO2^B{4Yr&4$I+S?1h?<+gJb}pl--gz%-N-wP*5KOWN}4s3mKF zI(D5<=e(cI&qbY%<)}b+qc=B+?@4Hc4^dO}2GvliXj7gY^>LXWbz>rG?dzc$?1b99 zL#-1~_s>R+d>QHqx*jznCs2FiNi^qQYx#}>b?jfztYK!r-%rb{pqBJJYDSY|%s_6SX7UkgZ@rB1nhw(xHXUU~%|tfTSE{_Ik+sE= zn2Zf@32JGc;us8#H64A1CCCRBF#%S`JLH$6Hu01=kMA$3x8Y&(sl7!#&NLFI@CY`G zH{S=sig}!`$@j;17|m}D)WQ74&69Be9wNUC`(aWEkMH*bE@3tDB};mIKfE4+TH+(9 zNBwOK$84oMPG$6#B+-b(P>jV>s0y!8pKhV0%?Qh)Zul05<9m$3VTtCe)=Jb8{Dhj? zKQSM^Ma@_gzg8K61F#m(MfQ-_`ISUr3jRiIiiomiFT|pzzO>C(Lp_M{qYQH zFH|aL?puUf!qwOqzedeaKzVb01Zu#OFh=M93JI-^e+Bagg`%kAGY)&>98@6xqDGjm zqM4ycRKS%{$F&}6iJGE5E0&?25BpK=Uqfx?RFzD7=`pp=e|8dn7=iJa2RmU?%!0d6 zH=eSdLrw7|)G4`-+H_B_E9S3kzLd_uX!2XJ9$rIDeW5BI-|v(RLT_CPcH4r~RZWAn zQ6p}G3ZMf<-~iOr&b9evsK5@R0y%*?&gX6URn#82fo(8-HIq-qPsq=!#`)Kc(I1$P z-FS>8KONiQ9@Nx^e&}&JU<9gzu~;0ZViNAN<$0@{^1`U{j;NVEhU(`e7Q+kJ8B^8p znhQN@n2`=Z?fOX=g=_Gchp9)tjX4KunJGP2+dKhZV}9yotYh{@3Dk3;HfmE2z*6`F z>I+Qjy5)Q-efaE_6mUJOy=Z z)}tOo$E^2J0j6$Yj%NX_LLKKysCMh40_llab^fRN5`4qK zX2a2je}_YHaW9YWuXsXwbN+S1F%sY4Z{u=RJ|9ddftCY=))w<6jL!fW+Weu zYM=<}I8{X5*bvomOPlYEddBxe9nblw`s+~be2Z%56za3%XIuUN3CQcbBB77fj8jd8 zyckZt80yAGsD?VD0_|@dhuO)0g6eR+&F@8hNBjxZ;S-yGj|t?nPc!9p(D(O$tw{9e zLN{Llf3iV!bRRWkFKl`GkIlzyC~5}kV;*dY3SboK0W=G>M4zEP8DE32hk4HjJBU? zzN&dqn|d>PwWhJN?57uMQ`AO{unB4j+Sz`PngGf*P5)NKx?=IRq;6L##^YhdVpH%r>M;u{Hf_6 z1{GLM)Lvb~EwH-@Y>4Nt@f z@^ewg^lR%Wd;KP=ohRtq%xgIRN@QJQB9FEfMSsdmqXMabinsx4^L0e6?ML?dc+}pR zXRoib?nd2r98=;IRC~WzpLj{=eEY4nn+O$QENYXKM+Mjxb=>-)8d!+hr0Y>ry&V{z1kHQG@-eM&5WNVD7IK(;=qsgyCZKm&0BfgBaOTFIg zjWG1>9aKOoPyueW`EO8xpFjn2&E&n#6B3CO_-!zou$;9zYDA5&Aa+Flz~Fq0TKiSl z1%E^ZSmrBZHB|k2sJ$~3)$v5sCZCU*@nsmS^ZzZ0cnZ#=j!VjorlDM@iUm-+x-x18 zYNAHg26Z};P#ug%&B#2|b7L*)8NV4dkmL6HCG^c8rq}sTy~#{nR#e0h)>zb3mO*t~ z!g~d>^XA)2NyL&0de%%=y<;l^~HH+hY_?LhahMHoph; zq`Qt9;lHR4p`b0MyfkX0t!%zOYA?)11+v8Ex1k2OA2oo}TR8ukx@#0@cR$1u7`)X4 zQX934`=CZJ0b_9qYDvCFEyYi$dcWH8=coa^Lv@sKo5xv&xlqUY2r7`1+c^KKc!>f< z`WxyC#T#sb*|(dHdZTU}gz9hvs(}fpDW8LynRTemxDOTJaa6l!Q3Je<>Mz~b<{0Mm zl2FCMsF^5^y5U1q#g?c|)&uoin1Tvm0cvwDMJ?GksQSO40(guH=oRYce;Ia|nJA2E zrz~oddTW!=)HT8u*d4XD2T{+1d#Gdg4%K1yoyKCQj_RNSZiZ?n8FkFOsE($g>V1X^ zdzpK^8}Hc)Z&42j|6L}+9H<*3Q6nsb3ZyJ*Pc%i%TtD27<1qqD?>0-* z5_NxnR6rw8?R<=Bb^aHT7*D}!Y=kj;OvTZtHJ^#v-E&bLZLrt(p+^2a>O<)!Y9JBc zn7~Wor{v3{26Pd1On*ns$P3J=^Y8iAe4ghxe+Vb|_nSgtu_P{_?V3SexzeEjSGwKwbMAf@#^UqMnGoAOSsSu9Z zBqdQd*0%X1>u~EV)Y`8=ZMOZWj(CG1XqE^3C}p#sZv z#ypCnP%~N?egFMmZ4#Q&_Na)v;s-bawYCRQQ+frp1ou!&^%f6d)c3}_sAIh52eSz` zTKA&{auzicH!uO6vz&jeQE?KgP!*MLjB2P8zQ*phyz@D8%=)8F%PiECeu0&6C+bP~ z5;c%g=grRv>YxVbMU_v&-1zx<&cAl!9tw1Re?*P=FH}HjFPQQis2M4Rnz~WwJ8q~? z$1hQPW3Rn_5%mS+7wZGmlkp#WJ<~-Kc<4pWzb+(DFcj;cruaM56kkJ))bpcR%S@<- zBT>6K7B!+0sF|pRTI()0Kg8zephmm`HGsp`GhPxg6kI}WmJ~mkwFyQARuk1=C)BYV zgc|88RD*j_Gw?H(#n)I9OI|X8jzK+Pr=w2G7SzBlV|nzxC!vPQT{a_Vjmi(gSe$Fi z4`CtlKVxA`eZ|x-jtZcDA8Tw-qYLoS}<^8cg`LWmqpP`nr<R&?iy>OM%)H9 zwVm+;9D+JUdr?d92Gw5XduCI5qe!S?HPli}Lp6L5HO1#qH$Fg(@LyEq0r$;u%8J@l zQK&so#g_L)4Qv#u{v=d@b5QLsFnO=DmV`FfX4G09K%IswsHON5H6yRA{=b<(0#O}= zVIt_m67v1*j44M$PC+>n)6-f9Ev`b(H@PV;t&+(x@j^P1F=N zM=eDs)Lt2a3e<~>a1O>{kv~m4?X2BUBmW5XXrGL_Zxwo#*hNCS^dvUMA5a11d1yK; zjP=P^Ms+*~HIjv>rQ3q4e-IV;Nz?=B8m`8FQ2i`^WCpSswHLm5#Q9ePhbUN%=TU1v z__1kdDryEk!)RQCMe!V}LBA*F(VZ22#}CzUXVg-RMqkIM05_vH`)(|U|32aTt3tV_ zW~BAd*8r+~G-~Q*qXJuv8u=d7*XQ%78F`M8_zo3F_+RG!f~b*}McrQowV9h@SM2B| zq0jB(sI^J?w>d_6P&3m2b?!T0J{*i{Xc3mcO{fp6ySDt9&8L250?mf1Uj#Lf%BVfm z0t=wGH;K|D=Ak0{9yNliI2P}qPDR(}#^I=u&O|NEX4Em=ho$foDxehq7_*>eG!hG9 zIV^%*k^a2SJQCV8ORZZ`YjqeE@o7{*x3L>OM19?E`oerV4#UdikD(sX0WZz-AU~?3 z4yb|6Le1#ss2Ny~K|22jY{5m;RQ--x+qbB%R^hMAgQ+}f@*Y)(S9Lrql@`eQ#-!$VMOI|kLjF4R>2fI1C- zqMn2)-Gm#gyxk{m~S3}jW zizBfOY6-5Oj_U*KTh#p--s-_l>_Z*5 z>!`I4`q!M_JUE;DG^~hW{NUvuY>kbuk;l*XA+*wZ0Tr;v&(HU@KZ}=yrlJDsnDj=C zcnT`QdDhRdD*2_T-F_E`Vu2Kq5!)Yf5^ZaoxkXyiwOjAv0d zUPYbr2lxO}XZ3T=;9ocl4+NVfE0fIxPz5z3%}~d&7iuX-V}6`$%QxEmfoy)}^Zz~t z1*q`CRtOI<$0i=N1np4`^+z4E5!fBSK?R;SyV=b}Q1x1%$~&TFuqP^@F}C~@)G=I? z-D@g*MS%i1gqorUs3+Ph)QEyY%^DU&JxXh%mZ~MHp(NCl4@Pw~9-Bm9Mb#NCI`5V-fr{w>!nGYjTH&jRMfySt%X^9$PGOD2gsM9kVReuudLG}si zG;GGDm^#dymbLgLdG7%di%4|H>F4_;w0Ecu*5xuC>_JW85!48;paQvvnu$L#9$%wI zUO2a(?{`BgU{mt_P@ks9a1uU19m{^egX<@NLZ$0;fEv4qt72^&!UKEJO6r+xuH{$oad0)pzNXSCV8 z*U|U?|7c#&&-bg58&K!+J(j}Uh5US_pFpm6Zr~po4 z4}6chKe?En@9zhOp#po3dO-b)dO(FFn7vaH^*y61>a(O)0_R`fWadzy&9n}S<1SnA zA!;{2Lv22%xSrYkZ59^8K-7#?L+$>rP#t`YI(FZpj^_`kz;2+H-~o2Uh!UKCjbL&K zGs5{;m;5o*?hP*K=lhdSPt**3gNi(RDKkUuQ5|*1U>t!FI0x17R?LHkQ8RiUHJ~S` zC3x#4p^>L9Z8lXfwkBT%V{tJq#?z<=Q_n;{-)}|_M=i+}n-3^sM&2Fuy`V3u!{1O# z_7uBdzOtr#8fvD!E(uNHapd$k@#W0!Ou(Y#KR_L`!Kel=qn>OxF%q9+1csD1_jh7_ zmMO1w;+2U;GxL5%x{@tR$H#4dPBkz0aZCSv`MIvwca+!S;c|)e4qG=X`ODPJ>4vt- zK>*nP#@d8THE_aaF0Lf-nM)w>B(H@XCA(n9s_#abH8X6?#bis<=@ra z>#f2As!%$OyUV%$t@DI-A-9uUM(*oC`Yr9%rN72*<<>#LS1I|4+#qVaAibJ*e>b^x zSY567ChqxzD|!XmeqWM5z`G>*Nwjr{^oP99ldeKpecoYusPc-i_q2Dc+Pz<)53HQ{3KdLj3jh=Y%`8O&-sB_p3HBp0w^2YDK%Aw)Ooz z)cV_P+BPn6CAIY0Nl9bc)U!#i+6LdZGMn`MJaYq?21M1|-P<-iFrAG{HR=(~X!l{; zs_~7;_2bHRMpK>lCSB(BE$@#gFUmVT?}hZIS5>!TyO3OZcIdda<9&*&MR?yN-J5ql zcV4^j*uj*HXv=5gS|7@0kk%(tGxuh@aIZe>F7m#`mE+u*g4&Cb zXQ1!@w!D|SJ|dlwa=j{()@z2%-=ywl%7Ural=nUI{EW@1fI6}Kx%$6f`eJ>W^7^Q6 z2^&-L)OkfgV|QZvJi$>Eg^>HNS2dbl=mg4qcm7~k=p?*?`V zDLCLix@tu2nY=%xw#SCLll%zkWN;gH2ujpv-rwB2fYSb?Z;~!=TR3P#Sk1NCM3Kqn zza!ny{h~ui-~>v(<_`W`Y12&RyZBwd*Dby$nH zKJKF3@*O*Sin&WWhI`(+2Rl~vbawqaB?R{3T3TBEuh&Oz%}(K-=58|oPUTMJ-(B6c zohr6`LWP^O`G|gRkw@|Mg?=v>9K8LuK zI|pTGKxqxzS~s_2=b+FOl+2SC1d-(#~6IJSX4X_3zRxI4f863Zd@{$aey#r8~AunBVl2?&2;b zV_*6%|G)pbL9z_*?A$mC%W-2fJLCY@lN1!Wm(uriug{~-yjyd12KnQp>tV86A}LRx zzSno7jpp{=d~R}5n5T_9F)1!rJmsGeNF>+zh<4iBIsur{J(m>ZspsBJiU}xAz2CW> z=!SMp$hC_W7g2H)^Ac4-`Z~%TKTwwBCU=bs{Ddo4$W_DH-1niowrideKa*Q$dzel7 zG3g#$J;42Xbwho2eoT2z{D6FZ*V8S?{~L0{+|X`u0k28v)x&MrExd9?lW`WxKuDHC@Q}Tiq^!kc8H@kt!ah?#j za&jrp7I#>3{ov2cMQ0HA_pl?W>t0U|3Fv9B>~r5G#{}o)x?cTg?H^n3v0J`JNQPsS zwkL`-lumOy_6YJ6atHOu6VQb6aLQucr9Hx9qjW#-R@`3!vrCHp^W{e?`hvB{eb^%` zv>3HKHuknSiT60(+ug{X;fXt_cZ&CN-Y)kg=_;d5Wn~E%bKJ^{kq29#_BO&6iB41#i7Z+Zy`L#TORmcQ>(D zSU@LoS7>vo+qPFo-InCK(c=Gno#Wp36c*$?pX*=RHtSM;+kD%Ef! zSD#YS#@-RhmBys?KcllNU(sYVRVsN0?ElexCo)=x`$BG>cUUPibzdxsZ1O|A^3 zdR?dH5#C=?Q?GAHSH^g*cX8+R4vFtbt`6^%w5#u7dR;a+*QoW1^g#MuYWu9=Ug;g~ z8Q{L^9hP|B*4u{5Z4cSGCxZH=Y42m*OP(L;IJbGn*!qRtx_x45>RaG_uIe?G+Air| zNyl?{EAmr$kMvz--D$lS*YzFwEbl4Q`I+l)NQb%y`-H@&CFixRjk9-^<*tFGYw|uu zI+ZOij|px--|*xTr2M#Z74JU0ThQ(iJCc)Jn?%_V%4!h(RNJ~5=}Y$>(Hb`|*3;dex$Q6YsjDW2l?Nb-fPr-bybQDXYv|uZ85JxV{1PIzjm$ zw_(2!&uurkU)6j?C~IQtcE@YvJKFqj^btn7oO`Zcb)H?J{R<@OyT4v@D9?!Xh*Pf| z_MYJ;```bLAoY%Rvb)3jCuI1V+%UZM=vf346*qEV0e#&0UX|R214ByuN&1B?T0uJ_NteP-w$Cu~=g9A-9)HQc$QZ4;W61Gb!!sHXYozd~I@DXj`v$yti`i6!On-3HkP1zhEPOi0N$l zGS|JXXGlnJ18SY6mR^l1eM5SI8#^RV!G4qkksFLhxYE=1lL5z2mYFiW!rfs*!t!q= z^^V#TRV!`8|If?af3j`d|9bWRcuxVh+NpBE|Lc9*mJA7Rylw2MuBkFd<%=HDw|~#} z1Cs~#N-8)YYTMg$hX\n" "Language-Team: Spanish\n" "Language: es\n" @@ -1035,7 +1035,7 @@ msgstr "Tus citas" #: bookwyrm/templates/book/book.html:360 msgid "Subjects" -msgstr "Sujetos" +msgstr "Temas" #: bookwyrm/templates/book/book.html:372 msgid "Places" @@ -1372,8 +1372,8 @@ msgstr "Ediciones de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Ediciones de \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "Ediciones de %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,18 +2805,10 @@ msgstr "No es un archivo CSV vĆ”lido" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " -msgstr[0] "\n" -" Actualmente, puedes importar %(display_size)s libros cada %(import_limit_reset)s dĆ­as.\n" -" " -msgstr[1] "\n" -" Actualmente, puedes importar %(import_size_limit)s libros cada %(import_limit_reset)s dĆ­as.\n" -" " +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] "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." #: bookwyrm/templates/import/import.html:27 #, python-format @@ -6162,7 +6154,7 @@ msgstr "Apoya a %(site_name)s en GitHub." -msgstr "BookWyrm es software libre y de cĆ³digo abierto. Puedes contribuir o reportar problemas en GitHub." +msgstr "BookWyrm es software de cĆ³digo abierto. Puedes contribuir o reportar problemas en GitHub." #: bookwyrm/templates/snippets/form_rate_stars.html:20 #: bookwyrm/templates/snippets/stars.html:23 diff --git a/locale/eu_ES/LC_MESSAGES/django.mo b/locale/eu_ES/LC_MESSAGES/django.mo index 572a0f9b2fc1943e570e8f268da1f389f7e9886b..cceaa551cd824edaea650ca2b3cf7c4b0ff69bb6 100644 GIT binary patch delta 29458 zcmZwQb$k`q;_l(uA$TCTLxKcPkdOp-cemof-5mxkuEDLi6?Y00EmEMkm14z8q0j<_ zqWyi}S&MV~$DPlaKFfV(?*!U&?M}SQx8u3DlljkfxO&ERoD8@qkKLEALXCJQR>zlK0mmsd#BqxH9H$YcAbsXg$Jv8xFg3OsW>#Pz)+as(v*S~n zo@}_Ommf9Y3YZx?VkY``CK5=A>o6@IwDB95nD`4UgrBiDhEpj4uEr4DiYj*v)8Hf2 z3jT}nG5rX~NrEBR86$BtE<-mffsm1ovl6RVpW_PRF{2!3JVsG^0v^IYu<96QkA=r_ zHvAmtE;c0oVH|_Ox>WiW{i!6k;CgH}(Q&3>+)0kp3Fl5?{l6jLo6PKSnYG#!$5~7K zZ{&Z@lBsl#d8z#!{$X7^o%29EdIn`M<4nilI5_)p6Gp_Ct$JWxJj-!*liqMP2OSg7 zVTqWO^X(jCzPXOWq@C^90VC&e0C5TS$GbQJ8_jnd7RkA8ZMwju|AOsEZ@$p1*imZ@ zdecf?!*1AWvE$UlpIid}63EE#HIs}iM@g3S8nz;yYPsXI#R1q9f59dgwSwiu85oAo zF&ZF4o{ww74zbJ)R}UR6VRdffWg>)HP5%tamHa3@eOQrIedVF zF(>CN%n6LHo#tZ4r^f1)E+E1ITZRnt2DCKM2*%I8^)7FqWSGc?3d8ScJ*&2x>rA zFabV6HTW7;(YL`oRtYeWcnVC6*--i6sK>cDs-3zRAKP1dqS_sdiRj-MOCSJaP|xX7 z>sD07Bd89}U=F;A>L}Jm^TrH7ZAltb`QA2tC~5`9qslM90=NRTf>+Sh-u*&A9lt^? zk^d&MM*$c>JQ-@lL6{hGqZ%xNxv?z9!fvPm^s){?t+g)uX( z)T>hiI8K5pzC*1*+-+utfyleUNrM{5CVY!^w)07bRrrTy{23Esyq%_<6sYtpsHM(} z$uJx>po$ob4O{{mNqK>deoj~ZxK8y|$~(6vsq z&PGjODe91JLapcx)Rw%!q^a}~gDHh;LyAA{PW zNvOv##<~cDiLXLU=s0TWFWdavHvO?p{~KL3^e+J|b=-rdVp`M)bJ%!MRDNYlhfOgI z`=QFM#F4n$#)}*>pYzpG?f-(B&;!(fU!&Ulbcpq@M{6P4ZpJaz8~yo0&2!-&>wT4cj&C8Fa_yuT>@I74ycCupdOQvsHL83 zg*pz4}#>Md%52vHb&qob#AFAFdRJj{A{T^ySFHmR5Ic3Th!$A6Xsu0kO zn_wL5hg!0ssD>tBI-G&(Xaj01zC-QpDb$wzgj&G|s0qD6wd41rnQ@>sEoud`q8pz; z7y%V5Y%?lYYg@mvwnvrgg_`Mbn?4oQ;e6CUSD}{v5USj9)KhU4HSpi9?|x+ewKVZg zo0+9Wtw0XUfMLiXajKyzwncsD^uc&I(Hdi2gqqMQ8{dpt!9AD}4`Cj>joP{dXIOvl zu{dK+Z7EDkMt#&kx});@p_X_&YQRe{A#O&^a39Xc)2I&Hoi%nt4ZI%);26}?F$0U? zYL|d2{EAw#-%&IB6E%}}sHKbblQA`F&+}OGV*=t47=)#5ycMdQE~xhVqS_gX8u)b7 zfZRm{v=r-54V^~K{3_}>y@kQ}HzvkZ=S;&PsFesqtxPFQgbh&bM5DKYsE+$#Bb3Ink>YGp>D1~l2m7ouji%BF8c4eSuA-c?k4 zk5F6s9R2Cv@m(-8ii7GX5H*0zs0JcXGpdHuupuVFN2nRUMa?MoMblAk)WC|O>Q%x1 zSRV`FX;eMu5_RgFPL|j6qEdHW|jr@iVm|@MIEa4 zsJ-rQ)5oF)vJABXk5Gs11(w9Os1=C3X;!whOW-&O)lf^A>=#op6Kbh*pgJmwDY2?e zZ-wf(kByJQ*lI+$fRK?1u5jV89LN(MG zwTFXH0~~=m3)4|EUWHk4BkHhSKuzc!YRdy|dlPk?WCV0*(xW;IwuYfPDvnypYN(Ft zqn5ZWYGCV7hjcq?1;0ma>5r(DxQ43t1ofhOhpLzUj>@tBAp~lYP!NM~BxSgu^3K7ZP9Vm3fx3jBYj993%fJ@n_>qmj#QntoK@D{0L)Kp- zI`Yu&6>5o}U_pG3Q5gEjRA`4`#CxMUT87?f$8^N^p_cY4X26%IvlIB(oPji`_H$wc z7J1D2t3VH%F%T7>fLiLAsHIwr+S@g#0e^>`@SKeo`OS1#6E(9g)`6({V=*>PL#^O! zRQoGk0@|a^sMCKGHS!Cn3eV9WUt>;uhw3296LXsLp;n*{>Xb*L9=krM0nbHk(Rx(J zhf!N~9z)T6K_DK1jK7-?i|nWYl()717e?X$EQ*^@EA<3B<4f#?&7YeN&!Gl# z4OQ+Qs@(4wh7DercE_N$bRwqF^FNJ%X0jFo@jL5}sMGp0YDP~n9A9B+%<-q`s3RsO z-U~I;5vYNTLv7g%8()WNXFDdsedsE1ihv%UYp4n@QHL_YUuIyLQ1Sez4$7n6fYmS% z+o8U?^+T=PRLqI9Fb^I;4d@AK=C4o#{^u{&UjvBy(riIWYZfd>dOp;iwn2@20BUJn z8y|1u(`|e{s^Mj*fo;JMJY@49S)ZdO@aCm`{*$~iGfj&cX&!3?YR087Ay&j>SQoQl zJM`Y=s18?S0^Efve;C!?SyVgMZ2oQ3N|GRc|u};10}>hcOIaqE_C`{I_W+AL>O>5({7h48?J%26m!4Jc63( z1=K+9+59KgH>jnJ^~RimjHr$(q9#z^#=kOg*Xcw+4feDJM%ef`OhNiw>jw0e6g7~u zsDb^0-cq7Ec!34+4eG^}>#cd$SI1n$M`0@5fGPC+A0?2HgzKmd-k_Gs?;q1qIBI}p zQ8TWKI)qJ8Pfawc;o+DP*P{0Pd(;F@Vs^ZRY0&?j=_ey5*7KiB0W6Gqg;qj!)Ctv5 zFVsv2qh>nJ#;2fWyuikn;Z)+AFfW#PZ`$c>?Ts4HU<|@(=&Iq(1d`)^jD_d14qiqL zB>M+5kT5JxJPLKV`l9L$Laopg)BqQwR&oV;?c*Tg`%z~h@}pUy@*i1$&7dX;D%b#r zU>nq9bQ{(16HJQlFc=elGJBjCmEIByV=q)Y>rpe^jT*=q)RtUFmHQRLG5u%OUlnS7 zHe1jP)nFIYNQa?jI0@CzH>d%9iy3eqY9+2?2;M?<6zgBpULw>AW-n+X*|wNnl?ks9dz{=WqQb=(uRgf42Sr=eaH>oEuqqh@vwHM3`^f&YWr<2bQR z{lut4oyo>SFg5WA)O(-?s(fFJ=Mor7Kpl@ojchh%#MP(@$50(UMIEBIR{uDrp`@t# zX|1_X?G!i-1Nn1XXY}>P0je)zBu?3=X2+VAoJ@x<63^ zjT6_bST+lCs*p}0QR8~KkUXrw=*2Jjd)qd##dI`QloLGO&9 z$}d2jku|8T+KZamc~m>sP#xYyb@&{$h5w)i6f3@K4oO&ipZB3r2i5Tytd6sA1m43U z*d~F`xqypM@$LzI-n)M-h7!MsS}7;Mq^H4PqGeG7k46okH)^26TpJjJRY{m+y@~^g zXHMkvKCc&`mi81j#>c3RN+r}Ou|CF5ZO%ed)O(== z7Q&IJSM4s;EBZUsnK)=Y>B;kVfq)LjS-!1@ez7G7gk^iN}!JSS?VrBSca2B?NR zp$=hh8=rtWq%%?Ne`C|vq4yM^_xry?HsLs`fy=0lpQ29b2UG{y)0zS1L+yDKs-fR) z`ak#saVMQAf82TwwFTEv&3pMh6s0t@-{HpanrYHSR z8xP26RwONIreT;J3!?_!67?$XX!9qb&cf`BJpcI!EF_^no<<#xvYE`gyb7wpUZ{qK zpw7q`>uj688ucF7jC#xtqdGiqsUo)&uf|jT$s-bqM^Z}?( zzpji?3>qYmpe>wQ%H7pMXIg3VKs0JS1HQ7c;ub=I1>1k`a`o6rMQaR6$G zM%eVPQKx$ z!{;2+^ItNj&)G>rtXw|l6YfR5dUxkGZ$AG#KK(^OCmeg>8*G6c^ZLBs37j3mDYwb@Bn(h|IZU)W*CK9q8g|X zcSAjngHc;D67}WuC)D%*6t%~3Bh6tdh?-ep)FCU6epnp~U@dHeBT-M)gGio#ox-;y z$WN$K8Y{{?1<6r|D+9L2x|j|3Votn`H8E~sv-AzI9PwpX10ULWcoF+lp$0etHGs)Q zT)TH9XlV~&F#d!Z&xvZG1M)Bz_oGuYNJ}DcT%EiSI!j z-bbjFt>6~-Ijsm(M|H3f_35<}+u`pvy>(W4y)k>)QV)R!c)Zgb4n3Vg_x@5&9xr&)oNNb zb86S1_Uwj@7p`s&UuV=3#-NsV6Y8_e&usE;u}=CmCcNOoBN!z#LKrZ<&(8!{ng;+mOkey4r=9dE@SQ1KK<#a z6Vk@#{k`CKIFk5^X!Fe{q^&7;9aU~)JD+nAN4EEQe{Z;c2cP%X_CDbx(qlUMyuU{r z)X5yyjaZ5FjGcM@_0DhC*?gSdMJ-{6F6L9}BWi`lbu}|f(aq<~BR`P#JGA65ICo z@iRT&kWhP^V1Up2#?%MX5MP1AaX%KqVgr5NA2jyFzQi|UR?Iet_XGo~jC!hu3^t#h z?j8afxo?Phl@7vs#809QS%#rL@0Ut>t^2Sg=~aiB@BQmhKR5h=u`$PR^I;T_y0^Y%ol_X_#GKrkwH6MXPP(LhZs{aVwSNYR-s%Y?25~< zJtm%QR;nNBa85&Q$tu)Sv>x^JY(Y)*AjZ-2e~y4ge${#hwdcQCU!tCpkEoetnqv-S z0o0b2K&?~-8?TLOuQBR9&>Gd@NYt5`VdJaNRl-gJI<==T4F5naRff4f@84PpMeX@6 zJdPJohjHFKv!~ynI^2zF?+`Y|%cy~c&NuB9Mjg5;*azFp=lR!HrK==pq^~eLCSPE_ z6Bb1+U0c+EI-~Y<2x=*(pk}tnx&ifq*^hcLy+W097Mc|cMAc7^TFKCbJpWMyN|T_O z55#V`230ZTBJ;RqL#;qL)RMPAtw4KJN8L~j4n_@h3Tj1`pvtYWZnF71QHS`rOF#`= zM!oUw*#dvq^v~9Wi%o?zs2OKRH5`fRxP-MfYKfy!6Bvpb&?MAKFG8*GUd)5;T>^SH z2P`o&%Z#d+%UT%KKqb_RrZK8~57Z3Cpvuog{XTFRX2OH04sWBj_Jhq&|BX4^MUWMB zopJ=aQ=kQE1 z!)QJKzY@@1Ra|CHYb{iPrl<}^qGmW1)$n4}DPMH}B}uc8K?Ww{w>e$<<@EUNux zsI6;weTByNK%GXVf0QLJcI&3e!+ZYY1wKB2f7iZM=caZ;u*S zf15wX8iTGzw48w4hU)MLs=`fFgHKR<`48&QrCe$DIs@wCxhQG?b!~dIjgLf4Y$j?# zYf+zyTTm-=WhKwQ_Vk5K@U1dSl^&Iz4YdW4r~#F;>2**m5{)`^{V^10p|T!L7 z>d1e!Ih2`DTTucvu!^f)v**o7&!1RKvfZp8pr9a&gw1 zh66F0cnIo;&Izb;8&DHFiW=Z`oBkSg`V)TZ_3Jt*38+F2)XYkvMpy$i!*-~d_e2eB z1ggPVs3qKjYVZ`Q!%L_E{$|tvLQUWUs@=pJjM*_z&woh*>&U2y`V{;JHS-J`%>bfM z11O7H%DSkII^tp+hE*{ACbN?5Py-l%>Tm?=EX}j|>riKD9~RZ~e}aHcso!RESTf*r z;@MCg?zEmpJq`Czr~WxE#egklZ#QBX@g1lE-$!ljE7akRz16H(B2@kC=>7SBc>dd@B9nxgG&B{dV=J^jMp%Mvt%sQf0ViD?4Zbel%i7oLdYVWG;F)PyuYY}g2<2z8# z{b78H=TIxOZ?75PVbmc$joP9+E&)Ac!q?@`F$Vh(b-otwumg*a+2OOVm>KKouN>!8iqV7B-=tl6{yL@1V*B z>^DzKFlr!qP%|%w+KMWui8QnJLLP6|`I>;1dIr|UwI;)PhZ>>(0rOr+f;!DX)&kaY zs8inn)$tgcz6cu<--LNE_V;EY1yBR3iwX7owxKH1b5TpS2y^2uRE2w}7tU+c zOcEV5E0+cJ;>wMxR|LIRE$Z+!#nadYb79mW^X<4bHqi6`9RYQaDeB`kFK)p)R==ZWfZNek#qS7c56`1sxerhs zyuf@I_n6uHC{%uV8?S}lhZf!;JsLIOazB_YZGd`{cD0VfV#JqYX}tXd&%gFQ=(zb+ zYb5HBbwsT|Kh$ZTh}xRf7>q|z1Al;8x%a52DA5Via42e}x}(||h#L45>paw!uQ=h_ z=bQwsz)2j1zo1@`El-+X#STL)?JCp&ci8x0)C!zOJw4Y@1A2@)EALTfAo(dXfo!OO zm9bWH351i-09A1U>d-Ah&G-ar1`jYlzC+D4_mAdGR7Gu7Tg-_=u@tUCb@UK(;0w%! zsZX27w+w1)-F5_2aW-nHzehbzKciM4{u$G84lF>tF{+`7r~&W5C_I5$fqzl$1fDf} zp9fX0BC1{!48_sNS#h1M1T>PPsE%KuDrEV|>`?^j2a0m2_dy%f3#&Wov!Fj}Yh3J! zQ?VodYtuWPGap_9P-kE$mcwyaNzeaj0%|zU77yWDaEzYJlO^ zQm6*1p=K0~`grb+TKYbyj;5iua5d^Za13=QpP&w<-({YEEp>7NI>p&h6+%(z)zEwK z*!+R0!{nm&at+4E3#ftIMAds_eTQ0!fGcK;a$p4UNL0IBukie<;@2c-X=kAJb^&U} z%TdqiCe(`TN6qXa7Q`p0dKs>odLgK@5{jBob<|4Lv-w?6?e;;{bFcFJD`7kd8qqA& zr`je|LpM=-_#QQofNN%^=}--XpgIb(Mxf3@aT_m-YNrb7>F9`>@IX}k(XLIHjOt)6 zYNo5O5$;3HIQeyBZd3zhP%o_NSP5HUB(6mrwmYbSzeeqOoEzr%{XwX+))Bp@W+?&f z*=Fkz)X1)&MtmE!LeEi$=so7apr1{8HPi|;LJh11>P&P(4X_VtMaH2zoPwI*B4lE& zvyFgeehT$!y=LPNPy>01>fi$wN57k90HsjzE?5ZHqGoyvwE}N27!&?t+Ruvxh!;go zxGQ?!|6Kwa@if#7=A&M{D^W8&j2iJDr~$>gWf}-TH5i0??CPK%t8SeQ{KJ zP1FS2q0UqfR6i%s)rfy4Pz9f&_A278DNqd6P)*c;TA}u|BWgv4;#{0*yfogazYDL!A^v$Rl zAIHIX7DKV}L-Stgk2#4?N7dhpn#d{FW;{hbW+@(-S7b2iFg8RTrq-xE?2nqk2-FN_ zq6W4K^`hC2`SB*|=?HjiwzLYW<677XTcWn!Jw!kqTtJ=TN2m_`elrD9Uj}(-Pf!gfe_^&HBWhqZQ60BL?QvHdAB`Hobku|v;t1UQg6Cg{ zFaMvWLIn&a-VC*L!)*F=^d2|Vj5pi-ov0N%iF$f|M(yz<48w$fnfF0aRL6brD;$TD z@cv&s|9Wxsca2msjzeg=u*lY8ms)#!MeNZbl7xkvwg4&9M*5g>2 z_*txiss1*9p}7_2Ab!gwpvNxu8}p?yGwLhYLOg_fQHOExTQk#%sDUiPX1D|AV$y$n z&N5tw6|veo^H(`$VqxNy-us+uI0D;Y;}7N#y5AERPr~mQjD0?uy`F`2iSI(4f%u<% z&J_$o4d`#w7RCN-&O#d09%n&qMJQ^^il7Eu26ZNyU>rYworlzS`O61>-nZ9@*pdR% zFdAQ=8m#B@^Om>;79>6Z{c$~dX90B>ccMBzh#J^w)XLsQossv}06#zP5NE=idj2aD z(5tf-YA>gwDy~CS`~idT8min|)J#&vG98DaPJa|?rj>1aE7Zz$Mm=RCP~}#jwqyq; z)bsxb0X;VF@H)ov_wx?Z9n@KPj;}Ewwx4&3eXO5Ob4t`!Tw^2u4cTzCTvGNj^|P74>1HkqgEnYd_V8sgp5QjaWB*hWejRS zn^8}}Q7nTOQHL!>0yEITsHbZps@%Q=ey+E7Ka!xOxr|!cho}*MwDAN9&A>8a1nH5e z0d++^@551BwgR;h2T|?aMz!+-HQ-OE2_^|J^+N(&vqw=Rs6Y+W&jGE_d+bnKGZEGB zT-5i1U8p@hhzc5?n~|G z6!GyB71k&ITN*#_jankDpYur1e=h=q$Y{)eNwN!G#Ku@My`T5P<6JC2d>dB42UrDj zXE2AaFX}XZgE~9=aUx#AQrIG+pZDc+396mEnf$z;fLdT;J^ynEXfIY_UfhaJ@HXnS z77jA;PN>K6C@TFPs$Q~Sv$UB|XC*Ic?~9;TwleC4))PnLWz<9)XQrN>|6>GH;UYH2 zdpH+MWicIG!xqHvV=gS4)eN93wj{n7byz=PcTAMc)EkOAL*p?YE<>Gx3#eD~9dxS^ zcuYVIgol`cltZmVU5tY+YGz-fUdb^S3zuL;T#nkpC#dq#+07yBjCw`)L2b<-n?4;& z5}%))=f4+$>m=wDSIuEgYcs4)d@)wS-)(xqoPOTl>+OR&oQF|QLF`;+;DM-DZYI>y z7eYM+&1}2}Y65dn^_J&y%}6)cgq;{h#zEAcJx3jyy1D(lKkFHT+Vd=V{G8SphMLKA z?26}5D^NVIpZBlZltZoTSuBFLP~}pGngNV)3Fvv8irw%OYQ#}tCcP>ueJpD4UZEQF ze&i|hE^TbQpbb>nn zG(<;F$oz60Av~VD5cgMh2KxygAUxQ{RkkB(`f)3}P8nCT|JSgSjkNE{A4z&q(#zut z;$N=x3^+WN>ECH<8{PCJ7yD4D+J8EWph9Wxdo)tjHuRfy8)av5S0aA|^5w?))3&vM zGO-v;S?(;PoubVZNxHkC$)$8wYzO{Cy58(T)T_q*H}`V}qj#UKg@k`4%}4oNCdp|{8lO<+U-dpk zBVB2vFY&pAs}t6>&l-z@Z3tJ0Y5i4tx4Eiu6{JaBRSp09XLdq6ZQf_X+bF+`Ru7P- zx848mN=?45JPffUcOzSWxlLD|KkXFt=c8Z+0X~ksD-*+tB3vmZX|v=mzqWAJ6Dv=( z{e;WWR7c|NOkw9F;dP`Jpm}|AtU48qB5ff@f9l8Owa z{2lJ({5b4Y+3fw3mo1GfpmIer`;&H)@b9EGv-$f;f5@%tYZ{HgZ^(~JM|`dN-_@H? zThet^B(D>B9|%_?e4jRBk(ZD7A9}U(y~=4wV>7UFOo8U0eW(1@R}e z_kuDPxql@+3HLL?rMX{FCXN2%%!??Lm5ezg>iR%@Dc;BbUS%jVmP+4px3w8v>_F?0 z){YK)Q)VLd2HEs2#7~gd6X#QB8sU%RA1D7QVID{Q@Mc=mPYq{m#U2#m$8slLOwyLg z-K`YON-keZ`B%vKa5NRXf9CU=F$wj_&t_YQBIz4i9&O7uw&f<1cGi|DY}af$Y3;e^ zaKEPfPq>=4S`hAQzJHlkM$<@pGCpEA8ri}fMmQs0wjHQs8}2nUqU#xXi^!`I^Q2|^ zTsx^fh1f;ZrEfmRxjS$-Bz+p`sTtOWn9x?K-8Qz35BL)$bak-(TqXQH=~Zce7x!jr zHle1zH|uI+C#P^j@(WP53uW|mRaar|inMi-yzlI2t`H8R+#%D4>-dv!%x0=mAmK`6 z&csY~@PPbXgy-2o-6TAUa-VQ2dB2dp3R7|?;!e$7o4hYqJK}LD)6b@*rOjwE7m;2| z|K{#=0=gbBDnANsqwsFh`Vn8v9Yy>WHo;Bg*W=DYcpGK(Gm)i_bFRuH+d&X_gVSab- z^d~(%;cPTGkMJ|BMEqM@J|~W`9mU5Jo|iqp5k4v_aJVg}APC#D@?rMYuTO(%iq$VjyMq zkhUE83BbEn;$!aSl(}u|E2AypdbF);3;F%^ADP@jB$R>!Y~={Tx@vL{v}pyYIEnbr zHqS?Ax~^K2lKv<69vfdxUM?F}xmUC^-Nx%t?iB6K9i$zKNDVxx@MDimBw`On}4SzdFf*=v`y}2CMU?2((m1> z)2%N32>nns$mdu4-rvntdL`ohsQne?;!$rMY5FnyHfd+Lvywl7^tXg_lRlfeHwmBS z&Q6#=7;zp@M%Qa?YGMNUXefcwuDrHRV#+n+4koWXzd3gf5DBoE()N_YiRUJ~&c@H#8TY2G$CO)Z(|@l`WFL1F3IEtaM7@jO z9XZQw+G=&i^%V`gBOE|^Wfk&L`5u5Txqpw@+CH^=maLA%`ciTZ_Z`BQNc-Ei(!+M2 zj<|lH4&q)$%eg4yM_Mn{r%YF-sw*?5!*{lx()i7_vyA%@WiR7LZe6$h`5j*l#SfcqHxM_Hzq&5KfhkMP2jtjj2+Xv=}6W!0;gjrcOX^x zLjdOtX~(dwU5OjS_t+t~C#^B@aIB#QxZ-km@k0E>MY;2KC?##3ztk)F35YkN?gV`V zT(^Z(ZwUn)8{dnaXnZzF|B(Jrd0cz2HSVR6Z@d&vA&s3T&Vlx>KL2TR7J2WfqhIjx zCl}sz_kZ~@k)4uN2_ZU>JHpOWWf~ApNYz@l=uFhF?!H{(h(9FKhcdyqpDyOd%;=Qd z{fbZ>avRv9g(&fq`^$BM{GCL~kainm5l?0_$CFmomTgE{21dajVmjGueooreb)B@@ zb~3$43$P>qT5C|#HV{F<=eAHr3U#nyuLb@wggXkT_Jvmau*5bv3Y~^8-bEUYEbAF61M=h+1ecl?;v9p@yM7OT~a6V zx231hpI=O`E~(vTw6=x&%f)Y=o#eJud@M`eU3!~DjeOYIwq1pAE$-N)XQpyC$}J(U zJ88P+ai=0J(w6T@IbGdpa|mfs#Cz)X@}5W!3O+FT|NH0Kn9N<1yIm;0*jCMJ^I8&* zpvExnDmL#U-IgH#74c%W%K#ijnfc`PBfYXs|I&s2U%ParCI2s6z@@HLcVNtcuBqMKgjT8!SA5&tbJG5Mm8RK7|4BGOQ^_eai1O93nBwF&Bz~Xpm#Y`y zfkcjy9>{R7*}PQfn*c@$bAwQbGJ~#Dq*hyRCH}4(S(C3 z+lf4WE$eh8uImN)lkqKgTk5~$UQGUQ?t_GPl7E}d+&IDxX{oiawPnl?-SfDyiA7TKPh0ze z&5ci5Hd<9Qh`jUMQ;Bcp9#38e;x)LB+wyfui_6`G_;t#JaK|RUAWkNIAa?@73CQ=6 z-j8;82&-@`ah z=t$Q{jLkii@Q>X7o-i=$=MdE2FyV16!w3z?&U4-xaNFLTR)17QWRcGVnW+NORp+JCB2pHB!~*5$gjhll=L!`*=x%;#ZcSfSX=%p z@*mUYAo3RCIqFZs2Hd(5Q?5FHtmOT-!;Xo1PI}aJ_Dd10dBi6(v|7q}uspKTW zYor&q@uQTh!F_}~jI_htDQP#1HojbqNc)!iC+_aleM(vHSE1!e_>KE-?!;s?=e|lf zFLx2bt+^uzpT!h0zP{-*SEcE7#B^=MJ>(YTUQ2iR$ve2cMBiBrwv-GUc)cef%%2A3iMg15N4ySr1oSfMz@tw5oL z^S}36JQp9{FYjDu`djWZdne>Mmu|)R{dOGpRubQ74p)zuj*|u#XLFo#u^lISJ*7HM z$=;5W3QJ)CHpYzD9h2cSOpB|qGM>QFnCwT#DT?(mCr-n^u>OPKh&~aR60D&hY z6z}Ue@i43(nV28L@dqr6BQPtTz~uN2(__5;j*}O2Vo7X?HE_U=kLiMtlUTpw9pmaGdH`*yA|uFe&kc1082OZbRjFA7oZw4Av&T6hrZ| zO;11A)GLV^a2*W6ewdE_o!JDE;SNlRzuEX-n2`8a%!dgn+!M=ST-=J8@BpgZBTRws zQ7f2eh~xNSHcX89u_Knp;kW_a3`UMveUo^~d#$W|XkHvHN92<^soMl*X zBxl3Nab96v;_)cF0bAlKOiCrWA6H`MpB*O(1IIZ|2V6Fe^`A$;f4t+Yzzx<$6C7tb z@t6}GhoG|-_hV6N@5KMC+b6MV#CuJ4oVl1|3d@S8aV?gMHe2=1x@IcdMta+6j`J&~ zo6b@(DQDMoV~H7#!=#-<*bd9jfINbmBCS+R@O zCiJG2e1u)F`y9uqhPPY-UkT)3_?k%$mZLaJ`Usm74_)Xut#LFq#Anz5D=gws#08iW zzhEoO!9KRY$(RG*qCbW#aU7mJCog8l6{s`iULl}E5pSt^3i@D1kK@e12-0`6(Pi)* z{)7eD7Y$$&mc#_?TXL+1{jm-9z}r|Ie_-RoZ~=zmDU6A4jIQ&MfL<(LFcv1^#Kggr zm;lpbY|L%r1ySY7+w`h7y^c+9h4IPnh?;p{n?DxS&J0xh^Du^<|K$WSk+2$*;04rx z9$;Mj2i2hOYE#i4{fMW+M3@m1Vm_N+2K6{sLABEoRlbjP2&&zmF#-KM(+I@JMX2X= zz4ZX9;ssO(H!(9lMa>{!jd^3HL2XGERQX{xeLQLfW}?ck#5}kOwSo`O)!scLppIj# zHA|EfwMS_%KBh;FI2R_w!l(u#F)P-@7&r(ufT7lLs1=%qYG(=N!i}hb++EB1hZ9J; z&Ma94)D|?s{Ma2i@Xk^U#>n;N9o`YWryteu7fg!rHkdOLjGAFiOo;hW11yW3up)-w z<_)aB25^Oh1n9TXtUw@YhC#@?!pVXf$X@(_EjCdZ8}J{^IN=tv6)8~dWJINhqXtqG zlVBOtfa+o}ws8q)B%?3|E=Qfx1DFg?V0XNY>9EFD(?K^(OneZk;fbhv3(yx=pxRrD ziSQVzNpz~#A2xYKB$2XwDGa14x_BI ztxHf_u^x3u_o7zxFVvQNMSng2v38n*DXgKWCCi6huq;O4M$|x_;B?Hei`S`#4|J4a-X3bF}Yl|8{7Zt!kHh-ecpNiU| zUr>j1k##i&6W@ZG`4!aC-?#ZMZ2AYA9&;b-uZ9v4&{7AYDu$s(7-8d;Y<_)AMS4ff zi6c?vHseq{X5*3j&F6e$RQu0R6MBaluLTzO?)WrIr1~eEofbrJ3E&&x>kJ_tk=!*wX zr}`*rK<91zmW}^qeUEB5#t~EAA2s7Ns2OKLUyMNSp|e&;y)oUE1XQ6fs-fYi$7C|5 z#$`5s2-V;<)PNt`_)F9Pzo6QQchoc-h}y#JsQjX+_9IbSSr1d_`R_(RBO8NSnqN>I zuR$%{2~@@N*amN-R;JuB({K$`xhAN?)dsaCT`?xQsDX?`J-*XWD}B~0`+t>yMt&D{ zs9vBdBtC9_A_~Ta#EW5UoQZL8KC1i*)BsPR>Rm&X`^%=kMh)mI>I@}5Vaiv=MD*`8 zAfOp{z*smEwPfQ_4b8$-xB%7BZq!zsMD6W0)Rx^st>8Pa{Kpj@J8Fj49t(~lWQ00cAW;)TP&qZ~(0yWSrsHHxK+5*2*rhFpQ(-DN4K;BdA zzXGL6&=UQCnqf=SN_59G*cUl0&Qw(SHK-4t-53WiT5nn(peFXh#y_G~(sSDUsOE>+ zh-W^{`fCqsk)T8PBkHjjgDG(iY9QNe{$A8lpGOV&5yr!hs1@-&!**d(REKM=TTuhw zi}CRcs-NpFfg%K6qAFxNYnCi8YG#E{GbxQ)x+>P@sJ-uP?T>MZ55^!IYvU_W?QBN1 zzX#RM5!ArlYXmf+2dI^JgK8-0Z)WB}sOL2lgRwX!#Ac|5yP{U2FKT7RU;>(89wx?I7tD-HA~SNT zp$6CsHL&5RdQ-3u&cS?`^dj~2{6`YdV^R;3U=!2~x?2aLmUIk;<8)NVCs0d!9sA-P z)S+r{$<*(PTA`mXEsnt9xX`ADUS|C>laQN$I;@ZCs5NRudfIqj)C@+V2095f(CO%d zD=;apMzwPQRsRfXMK4%ypz7a84eZHf)?YJtXEQ!yZQ`CQ=7-I?s1-Vo1Mr96c}d|J zY=_CO^1}xX#!`45%VNMa28s1i?f->=_{zrPTsP^7uG6}fGC2u)3NoWsARi{j(& zP&4afxkgb#P<&~vDB#YVW@n!piQWRYPbPvMY>ss zpjKouYQ*!bD^Lw>LM`z@)BsPQ&cZd+WA*|w;Cs|rOLfaks5EjGT&E5JEm0%Xp=pik zu!FTPs-uypa#K+q%|R{k8q~nvpjPr<)C$JFZMHN3HPc{Jy>Qfvt~C1TbhRd+z3+kdr)fADYK1~DC5EF`t_o_VEm2!G3f1u})E2BlP4FOUfX6VkOW+~_ zWxPZULX--U!C2>8r!nK(6zG>(XYUC$S9bQK5{e9F7pJF=nd0_TF1T}y#RJ~j_ zUIcd&FZF=+*GRvRpb^D;X!i=W#Nil@WiSH!pvtesoVW{h$ey4k@CH+%?<2EyL70Yk z5!BhKk2(V_Q0@27uT1k37-kD>w;2a)`~vDw-9W9>L)6~BLJc^^WAmHL6sY(xREINA z1Kn&rfU18MW8ziR3f^)FsDtOIJ^F~+)A)axhEky_M4&Gg!z@@D)j=l=!G5R}n2nm@ zYRrJUQ3L)HwMB1H9mjoQw#rROAO{HrF%GuHwAc+blL^+9sIzel^(uXWYS`zgX($;g zo)0yk3a9~eKyAqc)Bu-bF5HQJdj6l-jCa;p&&**-fx#5ahU@KD|j1Y;RDnPKf?xk{y!0@LqhH6W=U6~5AkiNiaW6Y?#IIT0ku-$ zFU)UFi(n7pOHm!BcxeV2j4GEEJ7QkUiE~lyoL4HH#iCdeyQ4bVfC+IYYNjVpD|QaGW!G)|4XT}g(M>?W_qAD)B&fX#MpY<+I+V50 zAKTe@e^dt(P;bDgr~$7hQDJL`~$OLtT$#r;i$u0^bPB;5tkxC1F3=Wv8lBa zh7<3H+S662k?%*%__&RqxAAK>eizm56V$-|!A$7)*3{2sjd;uYYX&7qP=gK7A6uf9 zuD5kCYQ|$Q9!6mj`~@@OTGS!Ei0beq#>KCw@^Rmp_L8I82}b2-b_r;y!fi%D)Tu6k zs@N1Yu#TuD>xF8dA8I93Uo#zzdbdwU4eWyT0jl0d)XM&cxiRkF<}kWN2x#d$q8jRl zdQptVJUAC~;5k$SUr^=Zy*D#Wg&Ig!RDQU%1Zrigpw2*BR6kLu3CuBZ*I8^6Hlmhp zhmD`G@pG7z^gpeCqjyO^n1Limb({&kD~al$AckWJ)QhVp=ErFmhNm#Op8vlIsDt<) z&6_U-)j^x>J>T()zL;&M>|n7J%pO+IUB!%n(;jwe}WTXT__lXVwr!iUfe zB5;*}8vcj@81u9Fb$Lqsfp}WfK)Rs@(ie;35Y*w?gQ|BBwL(`=1AK^D$!F+oANv!J z`L8((?!TQj(R*xV=&f6?eUK`eK{5+z7y5XThvUQ zFJ>UgQ2m9V%4Pe)`sXFkngmstiQ0-KsE#(HPVG_D3@@Q(^cXeMcbEo!znYZ@!A!(M zQ5{u5wO1Flf^AU!bio+-lS`lrfx)O#`V13eBFE!xI2g6$#ZUt%kEyUBs)HXfJG!Wq zT8$dmHdMW1r~#ZqP2{%Ce~xO;{f|Hv0{$M4_p}#A?Oi9-h>+yc*C!h|Np*r4yTEgR~rM`;E z@ht{n+?Zx&Sy3~~j~aL>R0q{j_3NPybvqmHih;xjquvA4F*f}>dkAQzM^F{dqL%m; zrp1@23JGGF4)dW7QAul6RL2cb^;=qdqS_gTDj$vNXFh5LR-mg9Zn6nGQ4JkN6+Df4 z5nV<#^Z_-4II%t6H&`(0O;-pt(CVla>tf?$Q1zFh+C7e0@f>Q!KF9W$=ie`m8F>I| zq!~~H$ZgXL;XvY%=shFoJtL^{_fT8-3bj=}erD-YqS^^Y)eA$-JOXt%OZmBGL{&)8 zA?b^Hq0B}t-hYCVIMh+nb>CGdFvqM;+^B>f(0sgor1IQ20%YD>oAMqGe;%xWhxk820i z77fHmoPuNVCJsZlZDNm8j=*2I4RiUM89u_z#6yyJyubavf?Am(vOvm_X zJWeBAgj%YvsFC}oH5L3(@gQqc zEfR9!ee8ot)0wAY9A+jy1=ZkAR6~bRXXK3amQ8<&dJlX=J!Wx(Oou5^@uH}wp)zWq zErMK+_v>~a60{`KP)oE3)zDg-z904JcNSIg4rhYV11#mXj!1JgrNuSZY5i6m#>=fq5(wWS_ z`r&=zmr#dyN2tg9Prdi?5b=VUJh^_16CxSIEUHF2B=qfKP-i-uqHmo99S}^`55ntA^QBENMHyV>roZ* zHpdt&Kuv!q*475(#?txAKnh-XEu$Y50dE7XiXqb5)-pV@++@CV{c zP*1}Lbh{9UmEY`jZ`5fXg8HU29W~;u$h+D(gjMh)>fIk$z&!u?Fe~vIsIxQxb#{iL z4%r0s!D*NWXJSh{S%Bw134t6DreaBJdDIeDK|KYHQHQGyw#8pCBl;9HUtTj~HR3g} z63)Xi_yntB&O#Zm2I zgN<>hjo-p4#N!q*_2yth;!9D7&{NbL-drvLE$u{Xj?+*byvKa_1>0cWVkUhSDt!Se z{R(PeMT?tLUk+Ol?}tjiiCW&rN7u%u zV|(J;F%m;co9_*suo&?T*bQG|cWhS1!|2W^W=e zjEVzLAFoR=FYdvj_!{eA&I)GcBd`?lCzuJdS2X2oqGmh_HGx^E!@M3f@N-xhQ$^b6 zzb%1UjBpI9!p%zN&Gi;FkgJu=seOe_iKnk(;zKbD@lB`|yop-c52!Pds;YTP%A;1a z73%RGi5lPv)SvV^y9sCsPhk}LRWnO93-zj9g8q00HIv&IieFJrNoaNRp;Q31MU`EVgXu@%~wDo<`;joW(VymuPItJ-6;@;&IN9KA|bk|E~lZH8Tx< z#4E%PHupG}a8?VCa}m3?^mzY1xO6LzGnDu<+^F={rd&uHQ|>)pApK-pkN59~=d|;9 z|9r1}dyg}Y^qV*V+jlUB^?e7|<5VD_ZAbIYUyGxNhjlVbxE_BdUaqrQp>wFy-K2}h znTcnu?Yerr|KR9!^LYO$b~5VY*{?gVWX@I_JVv~G4-PRaTCk_b`{%e5-QFIjGa0@= zdc40R?tyxKZ=%vm_Awv7Yp^Tv`=~vx)z^Gu+KnlQKf}Qov!8iCjKJc=cVKV)h&p^- z`tzP(K$B5Vm3#On^YQ5!U`AdE^(sAx`f%|dXbxE$oJjmftM4F>(~NjDmd3ZJpNt9& zHgC-Cs1Kt)sHbQs>P0sTMjQ08`Sd}Yl!(YOo{r| z8;Tl0X;k@!Hov2d_eE{ZXjJ?2QSXV3r~#Zo@AH3`fEs#@`jqn2-WL^6GjE4lp~0y7qtW~O|5*goz%tYdY(YOfjNy0| z^(p8XZk9eas$2@xN@T|PSO!aC4bn#>;Q8M`pf3p_7&g+( zpfYwMJ_NM_&rmb{Xyb`TnVF=)WTa<8otYx2r=SdK;0Lh;{*9V({?X=4R6wmnH64Z( z1nQBn96e(^PB4$hN}Nml)L63;9e*|h>5W>cA=ZhgL-s3buNR?~dN=BEyNLRt^1kG{AFHPGd# znQld`z&_Mtc^@}FRqGCgX~vZ4x>Lyfov>hun<`IBsX71kzwKQ_i> z6HWb|_<;BX)IfSgnXMd%!Fv9u5-3Z?7F2;xsK+VBBohxnjW`V|J+n0eHNy&+8|z?N z9EECUF={2(pk}_`dI2@j``AOz|K9{ElF)9l`GT+>cM|`E4BFW;#k|?dPBj$=Tca?N za`REI>L=J1>rFE&wHI|bucEf(1?nk!i+XzgLGR!H#hGsQGzDtpLDnp&JqA%I{l+iD>c!^XQA3#fI3?%Q7d>7b!M)ktArOe;S1{2CYfP=tkBf!1|!t8;Uw}Q)cn}_ad;0gftj5+l;g* zh7xa#VK^MMbZbxzY(nknVboGyK~3a=^>5S*Cgv~Z#Z(kkE)un3^-=X(|6M?wRdO^jRXFAM`I)r6W`K^(| z?K;BcwR^PV<+1*+aAo4*hB^qfXL zmM<_=&%f^i^OY+bYOkVDr*$T3i58(cK8c#)@2G|!qE7i6)KbS4Lf&8J~j)PP5$+MR})*c_LDI$VmXxB>N8okT6|ZJYlPwKA_UFUDA5 zI*dSVO$Agtbx|MJEl>j=Wb-FsF!6b)iS9?W?_MFGJ^KUoeEyBMQ8O8fYIq9j2bkrU9^U-dPj6&^g?hWR{ECMy)wx|L1LA5&u zT`k!p0%~9ds=;HZ8C}8{_!kD_bDN)VqxnXY8a1Z6t81WCNnT2dK z0|-OC^YfziybkIyZjU;I{kQS_>y%C-K})k8gYhKlF?)(yiJwy+9eW3J^=Z2f*W)F06&QKQ zjIh9AQ?VGT<65YtZ-?rjC+5PRQKx;U%|B-27f>_3jkob3YQRU2m@U1E8pum)+@n1I zMM%hW)coS01?od(A?CpysE(eZR^TJ*G$%M_wk8aNiI+#sxE*S12BDs!NmvrsqgLuQ zs-4fMi6uVnnn3E~X3s-W1IUM3fyy`xo1xy2cQG?MC(P1jK@Bj%#>=8spcd-sX^0w7 zN7PvvggOJ$QD_Jx)zfD=;3_@k-Pd-9R;z;EWk? z1V#|Agj#`Ns4bg<+WWPriJd^|xz0@j`mPr1tT`bMW8!V=VDxgGW0?I`MT zeSmuGUZXyY{z093pWn={YW=Z2@nNX+r>GytKVe)w|6d7|AtCNL^Wjqs)$nwjjtj9n z7CLV_Sc%&6O*XzC`x8Hb<*>{J^QIe%Itx*#nNLSO4I5BfcnFizzjKv<_Ut8UCb2J? zB}{~6iB~|K?(wKYxeztLt=5C6`e#w6`XOqDuTe|?9(AabTryi2hI$WFK=0>&X97Bv zBT-8|9X0Y5s6AhA)6b&!#bfh7qYjhLWpf6yq7HLy)Ige|+UsB)h+2s#)K;v#%=4e0 zzz!1B@Jm!hzbj^`lcH86Eo#P@P-h?yYDG$*W>yEou`}un%tO^%jyfyrQ4{(NwNh7X z{);O-|7!R>399JxyNSm`4JZ(^V;)pPO;LL|2sMx>)PU!p>Muuiw86R^^{Kbd#*d)d zIgNTcp1K6oz-Lqgv96kUB2)*dP&3Vf^{_Z<#?!59Q1uU^&c<(80q3%8a-4Xi$D#4S)O)&q5j24OZ_Xw%Q4R^U2nV0Tbw z;u&gy?@=of_lCDW*GWu3GYmq_EI(@IRZx#vLmO|08pw~R4hCaU9ElphK^uR8`G{w` zX=d6S^|p zvzZccedDMXJ zq4xACYDK={3`};%#MhuEbO^O&=TQ^8iWBhB9iD$J`Hy$a(vL)SFb(zCEyE&s2?H_l zJ@fDTSx^J&g&{Z!)zNa)N^ZqsxDN~Bf2e*6+&7j-Jq2~|yQaf#BzTwFI@P)i^?iRQ zs^LFSXW=1giDNu44W>e^NLEyOIBLd`_!HK^9C!-#Uik-g1_IoNrh%fUnN&e#bVWU8 zGcZ3cLLJ6ys55XMwTJ(pRxHLNGl68N0c1hFXiA_yuA8EsmMGMgo<^;Rdx1c60(ViT zwajDFL2cA2?ttoGBr1OfYCy|T4cxN6Kz)z+g84B0U#8=FsDY0`t#Gt;DKY`q*+D=f zK7=ZG9XsL!48iN$`Kox7CmaHx6#WNChsHUK1Iv+K_^{5VZq4xL;>M6Kn(;uS-^a*t)GCeouKn)~6 zs(eLEujjup0lipUo3RSD$NNwnT|({kL!1A~>ifdXFa_%A2t(~{Db&C!SgWBXR0q{g zOVmU@QUYOOOcL*AsCLD`6g6_;~0#$QA_8%Ht7NAecVtp4oBq|M6Fn5)YH=h z^&!;(bK*qQ`(O{M-}kS1{u>d9`^Nl%KwH#{;|)H;+;7c{(!MhdRKvWa4??Zj2F#8p zP^bSrYQ<9hZQgWwQCm^k8i^H&*T6`e7K}ligh$kK z&GeK_zlU16=cuPFhA-vx{D%_Isf<94xI5~x8HiVLEb3#kWlSIMS?Gc9h)1DL@d%br z&O~j+YSh4X<0ZU-`*D42AMZa<_K4%-eX(6dSD!`?3Fvuu{LGBgqT&Tmk7F&H-X1d% zABtLuWmp(@pqBU@>U|PBt{G4`YT)Iu6xP8uI0LdWzbh+MA4e{uiNEVkN5l4%9>sy0*Y+)ZSl2 z9j@D055M9Hte4PijVFdkk9|Id=0uuf_p?>{0R zK>hHTDvgi#Yj%DtN4yC>9CQv!b`UKdN?9h`t6>C_I--#P*j%0TT= z${@29Sy1oxeAob6U~b%HT)WBY1GYrmX4(kx?N_-Nk-dEHM zEnX%c@6Qbx(fjv5wF&6m+!8BeN7QNGiW>P*)Jj}Noo1g*sFzz{5tnNVBU z8CCuv>JUE1nD`#`SpOT!^RJA6%s$?~R!f6Dh&Mu=;xkwhZ(|h<&f??!>9z|heG68_ z_gDtYhMA{e3~Jz0P>=Hh)Y5N5Jq5RI{7sl^W{@hYsh9~hpjJ$y80tFDotAX>68{-xOP(UL z7V&S_Ai^HfKKby)fx8%+7n`^Sx*400{}tm?zboOQ+;h3Zi1Yo!*+t%;wlRWEdi{s1 zDjuV~RK7fa=SV1NGrYO{rzjmgp`mZrA;M$1^K&<*qOLuJ_Yxjp<4Ws5ntt5MtW(C- z;<11Ke~JJ7=rsqPVU@ID@qM6wN@s zu2#fLkY1Oe%(dl8lYY>KRVE8%c3_0squg}tNBu|KOS$t>_7Q1%Cc1HF^yM?4JsI`M zILh6^HrBveghu{UV_Z)urz<%w=AIfop+Rc59l2d770ytr6V_KPUGWLWq0~mgdu`3i zw$%ybl_T7UdPB(b5FTgCd?L^LvVfzc{lz_!u&%C@|C#$RW%L=eK%XNcsJxNHW+bkn z@I#!4nMnV3#UT8*IwPSk;UCGrMLY(M=hiivcp36iP=6YCf9@f~{qft?+y*Y$I_lpk zOM&7xp#=un3j3*i_kRU>hY(*&{4R}TMGq^s1%D%5uk&E)RpEZm{gS~{u$}!%_#SCK zl;3L8T9U@c5a08;Ptr(d8tF}VCgCcCb?vhHQm`fA^3gvuO6@jPHLkogsjHIVfBy|7 zwAJQ)A-sw53u$#PX?n%|zpfPI>&ng$OK{h>^%vQ6<;A3(BEG!;7Zczk*L$U7SOp1J zjP^7RaQRh)vx-n!AMK%EQGlbZyDeIfPR zwcZYCu1z~l#u&o-93LBfrb(b%j(W9hUo-FsH5$^kt}K)+NjwspQ%=`R+hSbOCYmIN zpKhIkHopq#qbbvj_!HWDNtp}W_el5Wenz+?_bbYz)c=R(ITXrB#&i;O{Y!j4-pB8+ z(v%rRrPbW6ZAK?M(AuQ6rNds78ArYTHhlx}`ozm26z0TJ_Fn=z3(SZkuwHV<@L**5;gvy{-) z-u82a@IKNj(f(HM_0()gO?_9@)yhsz;kx99Q?|2OR|1!QCayqRC&=4nM{|X6F3KG+ zeYlP<2}f+ED)HltQ<2PQ45EVv3AHZ2uxwj%Ra(rd)zRWXTxt_O@N28A|JcpGVbh%e(VNcTtOk)AIjl#ssP;UUYw>?dwJjfpBW*`<@i_U*Xo%lLd9NdwlJeza z@C)K$WR@mUih{YxNWndxv~Slh#2-grZW-hzq}ji17d=Vs#@(8lCrJB=+J6w&m74ef z!X*e7BV3C64_Zu2neC)4LcZpEuO;}HyD4RE+xp6AO}I8~>)JqmUwzYEPb4P=``O9` z2?j1J1l)S7qta9&YXR?jgrrb%|o5I~T23wVz z%wI^{L%}L4%~g)VBS`ypohICpkypTqHnEOvum$PA5iX8NFbNIcqs{C%gS#u~JMBag z5l%ze1RLL1gTPxVZLy7&po3R7livk6g}6VEcZN=zlXrvg0@O8~yx(a|7r(}Lnv<6% z`atUdH$6GQwp1XwRq0ljes1QUMjQ|M&rmZ(Y*549Up&X0O4NYl^Ox79OuM)H3q z{Uc%hHenidZxTMu9ZHyg-EbaIM%Ulk)Pw|b(^z&2e7ly=z$@;_6fRBr2r9fG{3~f+ zDRkeKJx}~!!ppe3lAn-v%8`GE`z3kZiRVXMIc%MTlxxf#LS9>beeUcblE7w0Q81CM zpi0-tJ7x0%NRLIOQ0~9UOH7`_{etv)_?~DjTX#P3Y=l?Z_&Gb{UbOXyaw}~5lNv;J zaTg@vA6tm1_u>~t&LW$(RGo1(rU8EQ>?EMPvhsOT`F4+QxSvKZXdCFBC96HL-jtlq zeVgzl(%#!vy4&tk5!X-ALEH;znIFm>AJTea2g-C|s=Csnes%Q8)>GOS$}Ql2MA^&8 zud%(?Enj|)&Pih*)FBmWlDwSoLJF)SJ}J6RyS#23QbLHWw$)U32(`RF&=H=Z7HoH| zDO-tKSAWvRU@sdlO8s!c-MIOsgfo)-w$#;CpIZxDjo}X=uPk>1^3(Y8JB8Z>c10&> zpW01LvaX>x33G5KrpiAweTKBd*v78Jb>iFYklT^gfOtOCFHv;G=I-PTu_u%}Z--Lc z)_Fs(JIRkrya{#3>LcKqEu?z$DB!X2o!F7ar;+{-=?}Se?Z6h2M&@}_IE6HJnm7mA zd-eXV&1vL)rjCBA_n9)f?))!5I$@C;GfgSlMtwD9$Kz<6ow1v`9sGSXaTi`zfxP$0?BlkbHVded& z|8RXIeI#uqr{2%xm$L1Ks4Vvt;`<3+q+E8J*I&O8C_$te1#VHX1;!(uiaR~=v=qKV zT0`O)8Fd8l<91-xup{v-b~ddj^ZhlGxS!37LmTfX8x`&86cCo$rhY5kgt$I3bhRhE z8J7}|h%VMCFhNXPdIJ5$h;Gp-(0xv88@Rt+{F>QGYD>k%GUVN%w{g_Sjh$@Ul?d11 zj!Ak5l`~Op9(mnJ(>0SjkhBO}zB}b~b)(IJq(u<#uGhb?s$abk?%wLkF?9>IunV^;!ex0>mc_q3LPbWgG#y<5MGYiScuD*lKf@l6(>Ch zX{(5b5O0J7xTn+6Zv6hrPdR_v-cYAI?^=^V{s28e3CmR`QNU#)Gte&c-&VBZz7`>?VKiDu{MeRBxJxk zB(C|c;!?t?xoeZZA5Y+1?ls);xChZ;Q|i>k*WcAk9=)M^K-z7jl;GxX8N63nN@bu+ zT?eD@bWiObAa<49OQc*ToQx8AZ0RU!4kTQi`w!B)a_hQCJSAn<+Ln|y^}D_clOD#H zbR{GG2ktkd-5`FKx_-np=ijvT!^tQ~;T0stw;eR|R%NK9x3HZAQDHdwHMx_JUWzh1 zZTUu+({?z@mTyG|zKj4e}-v~;!&wRxWSMLOO}xyQuI6aGlqAN7-eJqo_T@+AB~ z=2ya72sb4Bk$VG`b5W);m3tA^)x-OV(UO!Gq+BEA08S&Wt0Uo6+;6#qxi4^kyBg6_ zXVs&ZR-_l>zD)ckw@cc$D;-B2v$XH2%n1t70 zb)5HIgNIBdCm~)Xy_k(3rd&1dL)^JYJII}!c5~9kx2ryBtGR#U?nd2bl%+I33X$*^ z_j~R{WHjaeop28B!h~CL7a)8VlSRMol{%y{O|K-TYc1{|H!t^cy30e}{!KZ0Ppuo# zx%3|!MSr6&RuX@r4pV~t#khWw2`CdHowK5%H#eIa(d<- diff --git a/locale/eu_ES/LC_MESSAGES/django.po b/locale/eu_ES/LC_MESSAGES/django.po index 24ede78e9..fe0ec9634 100644 --- a/locale/eu_ES/LC_MESSAGES/django.po +++ b/locale/eu_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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 00:08\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-02 18:13\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Basque\n" "Language: eu\n" @@ -1372,8 +1372,8 @@ msgstr "%(book_title)s(r)en edizioak" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "\"%(work_title)s\"-ren edizioak" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,12 +2805,8 @@ msgstr "CSV fitxategia ez da baliozkoa" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" diff --git a/locale/fi_FI/LC_MESSAGES/django.mo b/locale/fi_FI/LC_MESSAGES/django.mo index beacc88443d70ecfc20382d02bce261021fb7ffa..aef95bcc06233ef2f3ce16e1794ef8273684aba7 100644 GIT binary patch delta 30275 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\n" "Language-Team: Finnish\n" "Language: fi\n" @@ -1372,8 +1372,8 @@ msgstr "Kirjan %(book_title)s laitokset" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Kirjan \"%(work_title)s\" laitokset" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,12 +2805,8 @@ msgstr "EpƤkelpo CSV-tiedosto" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index fd48c948cf6e5968225391ca12885e5e7186c655..4cdcbf8ea2a3ffdeed740317a055f435e5954b7c 100644 GIT binary patch literal 44850 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%0Am|>@oY(`VOxZP`a3?N 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 P2y=z(\n" "Language-Team: French\n" "Language: fr\n" @@ -310,47 +310,47 @@ msgstr "Commentaire" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "Signalement rĆ©solu" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "Ouvrir le signalement de nouveau" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "Rapporteur contactĆ©" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "Compte signalĆ© contactĆ©" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "Compte suspendu" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "Compte nonā€‘suspendu" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Niveau des permissions utilisateur modifiĆ©" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "Compte supprimĆ©" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "Domaine bloquĆ©" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "Domaine approuvĆ©" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "Item supprimĆ©" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -378,7 +378,7 @@ msgstr "Accueil" #: bookwyrm/settings.py:224 msgid "Books Timeline" -msgstr "ActualitĆ© de mes livres" +msgstr "Mon fil dā€™actualitĆ© littĆ©raire" #: bookwyrm/settings.py:224 #: bookwyrm/templates/guided_tour/user_profile.html:101 @@ -434,7 +434,7 @@ msgstr "Lietuvių (Lituanien)" #: bookwyrm/settings.py:307 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Paysā€‘Bas (NĆ©erlandais)" #: bookwyrm/settings.py:308 msgid "Norsk (Norwegian)" @@ -1076,11 +1076,11 @@ msgstr "ISBNā€Æ:" #: bookwyrm/templates/book/book_identifiers.html:12 #: bookwyrm/templates/book/book_identifiers.html:13 msgid "Copy ISBN" -msgstr "" +msgstr "Copier lā€™ISBN" #: bookwyrm/templates/book/book_identifiers.html:16 msgid "Copied ISBN!" -msgstr "" +msgstr "ISBN copiĆ©ā€Æ!" #: bookwyrm/templates/book/book_identifiers.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:352 @@ -1245,7 +1245,7 @@ msgstr "Titreā€Æ:" #: bookwyrm/templates/book/edit/edit_book_form.html:35 msgid "Sort Title:" -msgstr "" +msgstr "Titre de triĀ :" #: bookwyrm/templates/book/edit/edit_book_form.html:44 msgid "Subtitle:" @@ -1372,8 +1372,8 @@ msgstr "Ɖditions de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Ɖditions de Ā«ā€Æ%(work_title)sā€ÆĀ»" +msgid "Editions of %(work_title)s" +msgstr "Ɖditions de %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2268,7 +2268,7 @@ msgstr "Responsable" #: bookwyrm/templates/groups/user_groups.html:35 msgid "No groups found." -msgstr "" +msgstr "Aucun groupe trouvĆ©." #: 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!" @@ -2805,19 +2805,15 @@ msgstr "Fichier CSV non valide" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " -msgstr[0] "" -msgstr[1] "" +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] "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." #: bookwyrm/templates/import/import.html:27 #, python-format msgid "You have %(display_left)s left." -msgstr "" +msgstr "Encore %(display_left)s." #: bookwyrm/templates/import/import.html:34 #, python-format @@ -3483,7 +3479,7 @@ msgstr "SauvegardĆ©" #: bookwyrm/templates/lists/list_items.html:50 msgid "No lists found." -msgstr "" +msgstr "Aucune liste trouvĆ©e." #: bookwyrm/templates/lists/lists.html:14 bookwyrm/templates/user/lists.html:14 msgid "Your Lists" @@ -4575,7 +4571,7 @@ msgstr "Queues" #: bookwyrm/templates/settings/celery.html:26 msgid "Streams" -msgstr "" +msgstr "Flux" #: bookwyrm/templates/settings/celery.html:32 msgid "Broadcasts" @@ -4583,15 +4579,15 @@ msgstr "Diffusion" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" -msgstr "" +msgstr "BoĆ®te de rĆ©ception" #: bookwyrm/templates/settings/celery.html:51 msgid "Import triggered" -msgstr "" +msgstr "Import dĆ©clenchĆ©" #: bookwyrm/templates/settings/celery.html:57 msgid "Connectors" -msgstr "" +msgstr "Connecteurs" #: bookwyrm/templates/settings/celery.html:64 #: bookwyrm/templates/settings/site.html:91 @@ -4600,7 +4596,7 @@ msgstr "Images" #: bookwyrm/templates/settings/celery.html:70 msgid "Suggested Users" -msgstr "" +msgstr "Comptes suggĆ©rĆ©s" #: bookwyrm/templates/settings/celery.html:83 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:43 @@ -4610,7 +4606,7 @@ msgstr "Email" #: bookwyrm/templates/settings/celery.html:89 msgid "Misc" -msgstr "" +msgstr "Divers" #: bookwyrm/templates/settings/celery.html:96 msgid "Low priority" @@ -5424,22 +5420,22 @@ msgstr "Liens signalĆ©s" #: bookwyrm/templates/settings/reports/report.html:66 msgid "Moderation Activity" -msgstr "" +msgstr "ActivitĆ© de la modĆ©ration" #: bookwyrm/templates/settings/reports/report.html:73 #, python-format msgid "%(user)s opened this report" -msgstr "" +msgstr "%(user)s a ouvert ce signalement" #: bookwyrm/templates/settings/reports/report.html:86 #, python-format msgid "%(user)s commented on this report:" -msgstr "" +msgstr "%(user)s a commentĆ© ce signalementĀ :" #: bookwyrm/templates/settings/reports/report.html:90 #, python-format msgid "%(user)s took an action on this report:" -msgstr "" +msgstr "%(user)s a traitĆ© ce signalementĀ :" #: bookwyrm/templates/settings/reports/report_header.html:6 #, python-format @@ -5463,7 +5459,7 @@ msgstr "Signalement #%(report_id)s : compte @%(username)s" #: bookwyrm/templates/settings/reports/report_links_table.html:19 msgid "Approve domain" -msgstr "" +msgstr "Approuver le domaine" #: bookwyrm/templates/settings/reports/report_links_table.html:26 msgid "Block domain" @@ -6053,7 +6049,7 @@ msgstr "Commentaireā€Æ:" #: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Update" -msgstr "" +msgstr "Mettre Ć  jour" #: bookwyrm/templates/snippets/create_status/post_options_block.html:21 msgid "Post" @@ -6711,8 +6707,8 @@ msgstr "A rejoint ce serveur %(date)s" #, python-format msgid "%(display_count)s follower" msgid_plural "%(display_count)s followers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(display_count)sĀ abonnĆ©ā‹…e" +msgstr[1] "%(display_count)sĀ abonnĆ©ā‹…es" #: bookwyrm/templates/user/user_preview.html:31 #, python-format diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index 30542ace1fe5512110c1fe3fd7635bddc5baabe2..780a8def4f48af3d9148628b71fa01888de99c51 100644 GIT binary patch delta 26922 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 F{|CaWW*`6n delta 27110 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 vmMtafc!FAOdA`&$F\n" "Language-Team: Galician\n" "Language: gl\n" @@ -497,7 +497,7 @@ msgstr "Acerca de" #: bookwyrm/templates/get_started/layout.html:22 #, python-format msgid "Welcome to %(site_name)s!" -msgstr "Sexas ben vida a %(site_name)s!" +msgstr "Recibe a benvida a %(site_name)s!" #: bookwyrm/templates/about/about.html:25 #, python-format @@ -1372,8 +1372,8 @@ msgstr "EdiciĆ³ns de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "EdiciĆ³ns de %(work_title)s" +msgid "Editions of %(work_title)s" +msgstr "EdiciĆ³ns de %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,18 +2805,10 @@ msgstr "Non Ć© un ficheiro CSV vĆ”lido" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " -msgstr[0] "\n" -" Actualmente, tes permiso para importar %(display_size)s libros cada %(import_limit_reset)s dĆ­a.\n" -" " -msgstr[1] "\n" -" Actualmente, tes permiso para importar %(import_size_limit)s libros cada %(import_limit_reset)s dĆ­as.\n" -" " +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] "Actualmente podes importar %(display_size)s libros cada %(import_limit_reset)s dĆ­a." +msgstr[1] "Actualmente podes importar %(import_size_limit)s libros cada %(import_limit_reset)s dĆ­as." #: bookwyrm/templates/import/import.html:27 #, python-format diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index 2114d45c5c410978dbc81cbfb3dbd49613039272..958cdcbf3644fb2077f764e7eba476b5fdc5c8e5 100644 GIT binary patch delta 30650 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 Un@B6Ydq?)Am+kFcUd4j{4^3qu5&!@I delta 30328 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

    1s6Mf?0mx?~zkj(X8#!+cl> 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 lZ~f\n" "Language-Team: Italian\n" "Language: it\n" @@ -310,15 +310,15 @@ msgstr "Commenta" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "Segnalazione risolta" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "Segnalazione riaperta" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "Messaggio inviato al segnalatore" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" @@ -326,11 +326,11 @@ msgstr "" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "Utente sospeso" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "Utente riattivato" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" @@ -1372,8 +1372,8 @@ msgstr "Edizioni di %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Edizioni di \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "Edizioni di %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,14 +2805,10 @@ msgstr "Non ĆØ un file di csv valido" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" +msgstr[1] "Al momento puoi importare %(import_size_limit)s libri ogni %(import_limit_reset)s giorni." #: bookwyrm/templates/import/import.html:27 #, python-format diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 9f002fe1bd87eb74531987cd26eda7f5e4a9479e..7f23c75a3a3f1802c8a3d70918a7e4d0772e02c1 100644 GIT binary patch delta 29765 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\n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -1384,8 +1384,8 @@ msgstr "Knygos %(book_title)s leidimai" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "\"%(work_title)s\" leidimai" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2825,12 +2825,8 @@ msgstr "Netinkamas CSV failas" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" msgstr[2] "" diff --git a/locale/nl_NL/LC_MESSAGES/django.mo b/locale/nl_NL/LC_MESSAGES/django.mo index 4f0130fd29db54c7c6d91629b5215bf0f1e18877..088c596b16365b8c664e97097cf74bd173ca5f54 100644 GIT binary patch delta 27006 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 Zms4yHfrC4{2NQde4?g{||~6og@GN delta 27130 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 AL;wH) diff --git a/locale/nl_NL/LC_MESSAGES/django.po b/locale/nl_NL/LC_MESSAGES/django.po index 5945b5257..0cb6c8ee5 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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 08:16\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-02 19:32\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Dutch\n" "Language: nl\n" @@ -1372,8 +1372,8 @@ msgstr "Edities van %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Edities van \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "Edities van %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,16 +2805,10 @@ msgstr "Geen geldig CSV-bestand" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " -msgstr[0] "\n" -"Momenteel mag je elke %(import_limit_reset)s dag %(display_size)s boeken importeren. " -msgstr[1] "\n" -"Momenteel mag je elke %(import_limit_reset)s dagen %(import_size_limit)s boeken importeren. " +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] "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." #: bookwyrm/templates/import/import.html:27 #, python-format diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo index 66dfbb93113b3f6c75081fb3e6e01ac1def73e20..f2038692fe9d143a4c320cb0acdf23d3a47c94f5 100644 GIT binary patch delta 25634 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 z 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,)RtJj@q){&@E*< zOvE7HKKyanX-T6ewsLyP`BRZIhjbJbJJ@z=laIV#a37%n@#~cJC*+|`6z(K%h@D8n zZ`x7ab$;WYdMXi8Qka*@dJ@?NitEo#14t*uLN@8V)9&OA($%GpAP#a$nPQ4Y{doS1QRtIzQbN zByRy`CBz~8ZF?$1{sHPGv?FC8{aFopmQgQ>t*3Mv(t0|O7ngd4X;Z^w>7V?Mqo@!} zW?E7~gdS8HML4D6Z=T2GL{ zLkW$&we+&^q$6Cnv#w3yaYA=OBzb@00B0|{TB&g7q^QEWU%W+}>iNxvhWpLjhwZ$Z#g z34=|&B0uK!{VN+Xs1OxRY zY$yEzLp|PmODZ3=I#c^Fxp8gno5b~uru%5(dA=FerEVNst~zsxU#Gk&{X8J7A>NDp zKDNz0%&Lm^8A*FRaR}~Y5)EvIHjkknCi@>dd1Whg^+}xB22b$`TX$QJxt)Q+}5)j(8D5GV%veuPhTCt+V|4T%l4a3iZUrMTBz1 zS7Q~z9pZ_pUxiMh2ph-?q0RRMb@QA&JyS?bp=>9?pS&J6zbj?M$V+6?s_P!MiCp-I zaGuPGbg1VUmA^h?h}Wd!n`CsQe4efIwOk${JRv_6OMElP5Eb(LWZQJ3pY)os&c6tm zKM*^^0Jn*+$N4nY&wo8r3G)aY2`veSD6fD4`1OfL-QVqiTfgRGPX;-FzGg6I67@O| z4^czvXYzh-5#K~2Gp@6p{x|ts z2`N;WrxAl6#kdODHkMi7Zd#xy%{3L1_fKG}Ax7oA=0}@$D-aP($$p7lac(rwrvUQ=*#|(q+k}6cT?C6vr({Caq^2ZnY?Pr zvx5AMScbBXgh0Y?`7JoES2{BT<>b z^z5VZ*JnQ+rXZcbX2d5Qi@MuL_a@%Y)*WWctJ6naLT8)aPu(}v>rc81@jAp$ z|AhK6)tvehsGpN`e1abD=U;L%2hpH5{zE}K!WIgvk={aFmox)GPX(*uO9|Vlqvuyb zDhAQh%howY+dZV85t^xhCz-9^%hcsRDkft-1xKi?XD*>F9o!`RPW+b5e?)o*b-UtL z@)i@XOZg}|>S_n}ehiY=g%F!MvoI<3-%)o6>7;}=gaFcCD2wIG`V$lBNu^{MMz}@% z>$8mbTN-?Qe*dQIXEIAL@I;%}hj?l_))P%$D%ussgm?oB5hmG*&LQ4IaqWLeH6%k% zdO9dgx)Naz@n$sso-mMjEX zzZ&uMo2($lJK(y|KT_dLf%R$Y{YDY+yp(#2;Wh@8|z^l z^2;&E7uv-kotAWJ(%(LXDf`j3Pe7fQ6t*Mp0rf7J`_C7Gt)PYvC=8@xdE#@w>8uI) zCCJP8Odq}2HrpyDP9^{l60 zJn@-?YQ+D=40ONN7aiknr%x@WNXI9x-dG!NLBppmCo`u_o0!L#T9 diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po index 851887e7c..3c125d8aa 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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 00:08\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-09 19:52\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Norwegian\n" "Language: no\n" @@ -314,31 +314,31 @@ msgstr "" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "GjenĆ„pnet rapport" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "Melding sendt til rapportĆør" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "Melding sendt til rapportert bruker" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "Deaktivert bruker" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "Reaktivert bruker" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Endret brukerens rettighetsnivĆ„" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "Slettet brukerkonto" #: bookwyrm/models/report.py:93 msgid "Blocked domain" @@ -1372,8 +1372,8 @@ msgstr "Utgaver av %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Utgaver av \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,12 +2805,8 @@ msgstr "Ikke en gyldig CSV-fil" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" diff --git a/locale/pl_PL/LC_MESSAGES/django.mo b/locale/pl_PL/LC_MESSAGES/django.mo index 7c12649d7ccebd8c31516a96cff3c31236e752a3..e7134182d0f9a041a402e9be1710fde4e2d93e13 100644 GIT binary patch delta 29325 zcmbW<1(;NI!0+)hu+-8e4MX?R-5@QEBB3zs4(zfq%LdCX$Pj{nQX(ZKEsZQCok}UF zbSVfbEhVBN_xqdwAFppb_kHerp6B@acb_w}usG^&h7Hd%_^;#&n&EIg338mmc(APF z%unw)QJs|PI6p)kix$!S7g*gT}PF}2qMX)`##|R9;&G-gh$G+Gg(sB0VT)c&E zM>$Sr$MHLDqaCLZ39n;y9E=rkDZYXyumt{uH84|*<21!aSQSTLF@6nA< zu_5O7InHbNIx2rL)_3_GXFGvBBs__AoNX99*c3Q`n%PC{j?b_Rc8oLWiKu$hQ3L!G zi{mjYig!^flqKGA3SbFTydh@8u2_@)9S;G@Ix{gCGbNY;d9XC`lBgAGi;IX@3IZ}5I@JYV;yG!4jkt=jLk{^p5v@TKWd9Yn1=irx8f&EXCA&e(X7N1Yx4U{ ziuC6=5J!ICIL+`EWHFoylNj+x0*e?HgLFzvHZDb_mtlHdT!C7$tW%A%P)k{Sn&WUT zomJQo^MB|#FK{4gA_J#8PGeTI_(zV@k9fbCjuVFauosr`&vKle1V&*Wyoe!Kcedk% z;z0D^F|3T0=QvJI?2T-%6OEPdN34lCJ~n5fCAx`kz&iL1w!lnt9VZ1lU{CZPCeV~X z3D)lw48>$j!NK?#%j1Cg=JZd+bi}t>cVTYg2awl>a~3n=70il1V+MR;^;Go1TsRsvfEgH!D^cxjLe<-cneZrP$5WUM zuLttk|3?J$T>gb>C>KXq70Otvq8hG`8dytI2i;JQVL$6&RK3xt4nDxLI2SdL1IQcC zIgVQTbC}6bp!z2!qakVq+Mp`*!fF_bTG|?NXcd6;97pmYS)J*51X0im;;Tn93otBvi zv|euPf?BcOsDbuJtwbWa@m*9u%a*hL`3ZbUf;#vCbrycXSo|A{qHl#6$Yj*g&qFo5 z7Bk>p48p^xj=r+-OQ=1+irS*Pm;oQ5CibVFfGTAA)HIMEwZ}zJ9o0nbWlL0tol#pA ziaJEmsQO=`IyhtFmr!TvHrB=GHox{tvlR_d<^635sDn<{UZ|0IQHLcSwIT~JJ#IoZ zyaQG4E9*tn*|~{&;XFfiTx}H}Y&ZyOxE#l|+MKCcYXbHCj+cNAM?AK`k@z+q#J*T^ zt(o~4)QZeRjeG@aKx93;ptRrgXZ`k~B)Rqjf@d-A678WFZC5GTZRJlhu3e&GQ@$s0E{++o5)bLX5hFee_ z25&GclMAyGFNS=?J5?|rE=7GW*onpP9BO5LN4?1YMolEwXXX&PF&ptpsQwzDzcPUi z1hfUiP^Wdgjemq{Xpwa@)+c@hHM5|N=CQ4TIfySr4P*nV-bvIJT}MsmHflhRFekcF zS$_p`r<#JLF%$7hsK==`>Totd4X~B9o3$UR!Dv*uVW=67L)D*wx$tA_TGR_@FKVKv zQ(1p4;Z+iJ%Acbe$i2x7s01or9yNfvsEREy4|YLq%>Y#X5Y&Liptfil>ix13HIV(N z37P(bCrN4zLABmdb zFw_~Cg<7EnsD4%>Pl?}2C7_C5qn7#-YVU4iUi=lcWa+n=8RSPbR0=h-YSsp*m1=3@ zol)g_+4O=h1Hu`rq6LV;`A8r4xOYJg)=<)@+cc&2qB>QH`aU5DL?Z^9JJbU?lP`7%gg7zsfK`Ra`$aUdSS zu2}7m`JwS$e3keYI2AL0VOC(Cb%}KqYK1;S9oGG*iJd?_=9f_ee~g9bpErwnRTf6= zeO=U^wXx|vP#wpkX1EPA;67}ON07FhjE7CbCs5@sqT0KTIxCM+D;a#mv|j}MN~lCY zr?&~}aCJkC)QcMVaMXY%+Wa{-z8cl=cGQedTCbw&J;Y4t95n``+R20IvE)(KUo)vd zLP@NSW$_Kvz($~EG7W?9V^qTnt!q&Y?m(40ikk6vsE&WcV7!Z3^50Qg5_HUz%Xy6T zFHS;n5>%lDsz3+qh`q2FuEauk1l8dU%#4pwGk1=gS8Ptyic~~Rs2OS^UewACMXl^a z)PxrK38Lh%Cb#M==!cz>vpl?hEHBc2BU_tDFTCs4{-oK04aT4ah z`B)3r+5GF)yQnkq8)nk;@A}s4QD)Q#i(&-Uu<`j=nD|E2z)n~%q0Y=r)XX2DR_Yn% z!i?XUjtZf+qzq=o`l$BWV33}FFM)D62-U%K)S>(YbK-u~%ub;W)pZPXaLQ~&AymiJ zQCrdsD`P*@%1lPRf@h&R-faCA{W=8q3FO0Er%l5ZPz^P*@jj>l`A`FxhT4M7r~#hD zDtHaGBDv0(^upEuV7$_QHSsuYAKzw z=BdbruM-VNt>A7q$Mw&z&?!2~vupche@^JZirsHLlmD%cEl z7}uZ%auN0XUd81jd zk{L*S)Bs;ab=(cL)E;XLRwq6TwPov2Gd^HFhMMSiHhu|d&+l9(paDF>(wO$LsaW1x z4K>nws0O;BX4D6@LNV5%sF{sMy?`d5o{||@3O~g{_!X+Zn;5L;{}};Q2)be#%z=7A z6h!THX;i}%u_#tYmG6QY&|9dpFaT995;gNU)QY8G1Dt>w&>`zN3_Sn031}&Q#j5xm zLonofv(#^)8j8efn1Xt~*Vyz67?=^N<7cS$Tt67Ip$1k6wRI(Iyej%tv5rk>jf!_f z?cv+jc+`x?qXzO3s)Hq{721I6U<>LD>_WX)e#Kgt`>OdfM8O!Bj6^`4YhX(He&_WCH^_8p@*m?e1V#2wx7*_N}@Whf;F%ns(du6d~M$mFH2x5fr_{dOW<|PfEn(Z0cA(cpb)BqN~n$- zqgJj1YKh-MJ>Nr7Pr(!n#`TyPw_{fP0@ePhyX?OjxI{vFyo37mdW2;#^F33rI%{uA@5n2K7`YxpKQznPADVjiM{QIFj?)E3OawzwWg<1^ff!=Gy4 z?0?PQ*&h;OuosqmW>#VZ4ko?`^vU%yboW&qc(mOHLzQ#4xZX{*9$ZAVALVY zfvQ&&)nP5v8Ec7ZHx@OpR8&X%ZTtpmMIU2P%#_wlpd4y~wNdq(`E5ow)T#BLDkh+|Vgl+E&qp1e zRO=p81IJJUyo^QgC)5fA1(_A9h+68psE(W3czaYme>VbJl0G)0KkCp8!ru5Uj>8{N z0~wgk75Ib3cW@^0tm)0nmZDZ{BWllgVqH9r8hE-4uE39CIk7D9HaJqxe=LDoBs{?D zST>_8@V8)DGP#@s#QWhyEEVhue44Gt&BW7Zb~!u{&Q8<|YI_z};9GNstggT>8r4QU zzR&P&jLhZ={PEsV)RyGV?&3w~=P@DBj07)s#TBSG*dJI7%jIx6dRMo>kvIrd{x+sy z<(#g-r{||wmG~*tN~OzXR-zE<7wPn6Mrrt5sQ*#Ep;dRuC)Xi)1SD{}s-b|n(W_-mJcus4g zPIX_5#u(H9E}>@j3uW8Lz-_3r_9LpjoB3S+z|ZMV zNT^1_@7NzJlBvge@tjke{YYpo3?nIrPLpT8c#8TM5fGhA7?LF*Bd;_+_7uW*Z z6?8craB@MOe5G^{=Ruv;DX16HJ?w{1P#wHc)D`$FcpJUMr=!xJ*>qPi zlU^Iu!91*v%P_T z*($gKUoh(6bmD_iXC+-lv)6S{XQB^kU{Tl!$Dz*B8BE1`mCPIRF7{+VnJc^as>bu@ z4RHm2BXI=k(=einnb|0Oi}+I13Z4k88P{_pnTDm-7(Up?@`jMRho2K~$(~4&SSfRDc8IH$s6Si$*^8dzd#CNuJIXf`1oh$GQht=Af52Uv7W(ohm zDB`2Lx&nVccpv$IbXs>a1AVPKOV5f1zi!UZMoyd#caC1>aZj+G@DtD>tI*qgBN>l6 z9NRDq-F?jG`B>DecMT51{iws&_$`;y3d1oD*P|Otylp;iTVP}2DX6{w9N)xdeO*p# z^nXl1kJ~lO#tfd~XyWNT=1@(*(!@8R-gp;KA4)%0?x8w(fqF`^gqrli zsCZ>m$Bj@QYHh4NFt?un0f7KZgsL#vx&ZZ9uEYGe6V>5q8~+J&5`Tdzmovd4W1BxueX?3Zqu03~C~ktj$p?_$C&?MAU?*NBPZ2){#(*ge^D?&tP#3 zk2ZTa5w-VotgBEn*n#?(K7iW7qc;6IY65pq1N;j$^K>!hEagOPSp`1zwY>fj@16+qXE1OXRJAfLH|2rG_-WIrx zA!Iy5eVUbvH4VIm>aZKCp$Kb|bu2a{eLA+llc-mEp205X6SnGG)R~HpHxt{AtbpG+ zMxZGf*U*P06O7YQTaq@>9Ile6C2xXyo?D|eWI=YQI3%{YZBL5Kc#;kyfH^E%k1$DT>P=|Rm>dm?q-^cx^ zGtx213_M)w`Hv&e2Zy5uavrtBH&6{c!oiqvsOcaDwa2qjTeKN9@bjoMaLxJ~>ID>> zY%G9kw;XDKwb8Ev9$O$51BVV(a4Kp53$PicqQ2=o!9*;dVh+8zK#er* z7_$O-QR(GS9acjfu9g^r{jda1L7nQ2))QEY_#ME@_keY%1|Ogvw`ZvG&rz@BEMv_8UqQ834fR;pMNOa)R>Ll1dH%JB zV@OcN$*2mmQ5`Qtoq;W=B|Cy{ykhfTpjPIUab`=3plV&0sWY=_a8%T7;Ux=ePh5qZ%AI!5rcg)Cx>Q)t`&w za5-uVD^E1-`(p{{1v3sc;t#BIP=|0iHo|SF4t_(G&-A{_nT^>|1N#)!(N5G^`Vx!b zX`G5rP%Av{1M_8c3I?A4Jp?q;Us#wfSTh|AdR@?^^;b$>=@B75Me~Md%^^%2e|Qjzh64@e{ZkOH4Cc zbQN`2Z=we9E9!7PL#p#qz{!qgJXP>J6HpbUpu*Y{pj9k{?4Iy35!Fo#|#t zyP~$JA9loOEX&gDM6Jm68D~C?Z!4;!v#9sR zbu5Q};c@hrp6?3$J>Emq(j8o2MtU5zr&m!8JVG_#EHpp+m*1jh zbRM+=w{8AY)W>m_C1#-IQQtLdqgJfD;(Gpj5zu2c6g9I6sHIwm8pvVP`{0UAcP%yf zg-|b&TBwFQqMoKG)PQHBJ`Iff`UMR>pIv zry~7wvy_!k1FLQ0Jy8P+MZF1!qdJ;}YHtr}1uvuO-CfS}uZ$ck%nF2{2GRuG*b#Lo zeW<-mLd|R>4#LS8iO*0=@BP$#Rt(14#1pU%u14kmh?DU?j=~Wu{bp~RRi@*t*21W- z#}!dCUxq>W9cn=5P-o@`)ZYJvnpw8hCSDZvcveO2bqlPAZLt-OK~40ipMXyBc~rwc z*^GOrGw|G|=UZcDPz-e@D%yB6R7V|9<@=%D11YEhO-4O_3sCKEvGLug!|OjoKznr= z-S|6(V1cz}$=jeB>|*tzI!s1A1s`AoT!cF9mr+~w2kJ8*?K*Q-vY{rLA2or}$Q#q| zG$2regs!NH<4_};f*Scu)X3MNUa?zH<-S7g=^4~>eGS#&9aINTu>xjYZ@&|wp0Zx3 z`jMDf&wqkV7>Vk50&35u+W1V=%;uwJupQOWm#A{zTF;^CUqO|>fjWF?Hkg6ew{}4d zJRGy=`A;Cw0!LweJcK&s&S&;eq4JBO4pD#97R*C!!FtpR97G+euTdRbMy=dU>jTsP zpP^R5*~s&+8RR6Oiuq7`T?SR4zD;kBYOt4e0II_{R0qScDZY!9@DOUi53v^3PBkkM zh1!}4Hoh>G=U+>@lLQq!Vhg-LJyv-)nU2e%-t9F|k7HLSmzmR~I^f0Qy->?Y=Z#Oe-hf42`#W5T;gNdk) z=b{efr>KEmvpzt*kenUn^cO_E^Q&Q?JtW`ngcB%3#%R=xSE4?2HljK>i<;SWR0p@Q zC;oxj>+U;EeIII1XQDoYK0)pE=ctuEkB#vT>djbjmsXnRuK@u)&z(^t>mA78LkD%Z z-bH=!n1@wyFE+&osMBA4x2azr^`X)dwbx&wR_ZkBL+&Tkgo5^%iR6^@@3;x5LKRd; zjZmlAgZdPkg=*+))J(od&EO$wMbhjwOPmvxUJeIhUDOJEg5kIqJ7D>J=3_ny{pw&5 z0Ud^Os0Lm8&CGM4IxL4;nFgqVbV4n0KU4?Fs87Q=sIA+KI%F46_3xkt_5$^^Wj|mJ zd7%S5|JvKCB&fkUsCRZ})Y1+^?dcfQVVZ@sSxEs~*Jyb(!51Dvw)R`%V8gNt8 z%Ji}hK~3;ORQtR91OksAs=?n-PeJA{%!?%tYUCAAXQVNz!`EzjA5^_q)C!D6t>kRf z%6^7wZyT!qK2&=rP%kw9j|BAiW&hIroL?JNFaf*ZXq<+puqh5W>~iko3T%Y4j+hlW zjcPF6QS%+K8miqMsM9|JHNbhOm0XVu(C_Rt0p|d=B;zP{#2m-WU(NQ#(!_s6?R}=> z=65|Rp_X_$s^PV$mDr2=_&trS@F9MT^}aGc8J$8sUH-2%5uU%z1oSRmcEbFsM4FT4 z6LD@{z6h8zlmWFx*--;3hWg@C6Mx{dq&=o3Ug;F= z>iMrqpdC&^EzLP};|*+z=}((O*&20dx}ZAjgWB6rn;wOFypn8u4C=H`Mjgt9sKd7v zwL;g>uUF^`0{ZkSc*YE%9xA;R>V4qBz#&7;cr0q5(=iQxg4%*5sLzNkHhvDP5xYwHLFUXQ~B0&ugI_C=f9^g>aOd6jzr@0+!=|gQi$;PLmX1Emf0^5ul z$Q3M)4^Z_AT`(P2!G^>e;uK82!1J$;GhH;_dh?+=ZiRXubVYU03pImC)Y1(@o$A>b zf?H54b;G7VMwQET$-I!Npk~|*HJ~?8?G5tVj1<%%nS%O4u^hE$J5d8XWxa;#_*c}6 zD%)lAROClJehpBs-hrqsO16$eot^2Z2`)gL9seo<`X-Z#>hN>);5Rr6Yg{o69>dkd zFXI}V@V!Z|&5_nX+Mw!pMSb@hgc`s)tc*KQ1HXwQF~ils-zoW>@dR#=a1`~qzTukr zJ;2}}&F_BP$0X91UU%sq$~uK_@S($*xsJVw2mNfmfb_%N#6QLq?D>oN)y`Ack9hl= z=EG_Y)+K%%o9p>ccgy^xa~sqlnuPik+k!gH7jXnW$6h%6w)r9QEb4I@aL2qirlGd( zAnMFqz`*IpaN~hP%Cs9 zHPQBeoBTJhByoQP0e!4aLI&uxWZhROz}1zP`yO;_FSy>eRv|orGP%?8?U&obUC!2- zh)bx~hO}1PKNHp$lBU^H#+rkzvV zeQiI-Z5wllceagnBL5uWKWv_U1MA;cHp;$1-dWO{QT8O6zopSTfU5-=g(*;#%(BQ4 zak>)T%)NS zBJp$L?3i=rUlke<&QC*|xHB=BWYo2Ra=UPaEt>@wldr2f;q5qzG9TEq&k4s<_f7KB zVq?F}C>p53XA2%Cb0)Vw)O59{%$p|Y%p&|1jSS#kPk1vvqM>kZy%6_tyGYaLSz+4H zrNh6?hVv6{Kv`WwxC84yn#3a%2;$C1ILZ#HBH_%WJ;U0l|36_V!ezMseKn=Q^W>eg z^@fpuhj>rYtK!S+Gs4%ngGg^~%KDwdL~0PZ&YehD*EZ|hgeU!{&ax06N7;6!fxs_4 zs!j{iS8%&+`Jq#oor)k2!CwLtj0#9U#0AAQ`9+a4I@q0Sjw!xEtGqYx}~^ZUV;7BAd1++ zFEd`2SxV(Ge&KnJvSAOk=F{pCjB-I>N-u@$0iu~?>h2cQ06=G=W~mFPJ!=bxtu`Cx!Sj zI!hugP>%FB3AeTJb|mUsSbtl72kCYERG4EE3eZ3Y?pMgjz}>>8cP4z3^!j!tQwiVV z{*K0alQvAfas9$Qg7neU%SfHM+&#GUy(Jts+xmYKA5VNE`uQgI&o$f@h_@+uXlOGH zcEJt!@;XGh*NE)1 zQSZM~Bu=7oHwqTULd089>`US^DfA6@DCutyze?Un;&*Ik`rgrlcti4zl6IG{t`BW~ z0o&no@)HRUApZlxx@KcVJ%33gHo+#?)Ha~>-)ZECZD>64$~Jr*`%w8NmdBji|y~+>0ojleE8W`cTqzXj|CE zRF3bq&O6*)NZZT(iJgSo$3BY8=?NI0`iS6+GQk0ZS~ zX~ijXg0L5xa33Qag}Oe%EW~%4sB^%i`vX6Y*)(UFE!>ubxrD#L?`_%?Tj*;#oNm+B z+O$P<9>o0#9h~KEK)4uXekQEzDfe{JR@uoat#}~J`Zp)in9L{&7bKj4jJ3An1H#W} zXesFfa20nk%IaE6-n-m&xL=`sC0pk&YY)om>PPvuq;FC_1}pF&AwHo~H| z;`^8*P?fJ^RMf8+5oEl)+EE~un?I0su95f_d0*Si7~DqsBpMF>SDht<+tXH6^4=h?Ddo13 zcIIDYmXfb4p8R?Ek^T+vIx6UTPQh!0^;5I1$F}0@6kbhyC6y3;m&E^l`N&Hq zPuC*uwg1YWNW7EHYfs(F+&M|>Ntq=!{dHS@HtGC1nR9?Ly1q!m{O?ofTRW>8WV}ws zZTu=wgpW(Yi3Dqc8*ImXfAx zIPt064e56Q>HeHV-nE$%311>HEw`=(q(|Wg6n@8+QTlotZcF)T-0zVejxVnf#2*m( z+$OwAdt0cJ!hMBuL%2(r@`3Z`yh9`nna!whgv#G@>)M5Jq<6)ul=&V1Bz>jLuaCRQ z??~Qzq;JRHRFO+__=@;7?#tYlD0hUkOVpX8JmR_eGf?LRk*-Ak^L5&$m83#G!t-b` zSRD{@OR`lGD*%E(mp0WgAEg+FAIeDQe(@#z^$Z} zwPh~S$4tF{a@&MKWR4_JS1tF&LO=eX&2~tAom2@&|_PE zsEvnH{yBHJO)p{FO(MR4^lCT?t8@3@uB=ZeH;HL!;3EqEZYzF9xHaJ+IEy=h@Q0Mm zfrl~I^ao*u{KtuX#&Epc*(s%KKjGq71s(43w0s5UQ}zyJT&T-u%eOF5XFc&;l#3@n zhB}cL&Ha}xmx=HJ!YA<;{7@g>?T9p^Qg`lNB<>+Ti#scgp2e@ZKO*ntb%($hyH=A4 zPa#~E{Na=B@vueTNYlm7BbM|dugpDEXmjs{Y%1Zi*B0vCy=a<8=U zyM#NFf0wdrZ95aN9{JIFcyrLuQAO}3mZaba?jI<0g?KFKg}F!4&5<&qY2z34b5ADxQyM-P z4iZVBLPHw$5H4sdmLa~CLZ?Yv#QlVODtY-RJBqwbscj?fr}Ia|yJJ0Z32xs2cSCP< zX18=Bw^bBFq( zqZ4By5+c0u?g73ycbwM~=8cOFarX$1i1NCVeTnW+PYf+2c;h^w3DovPM|tDpqY5Rv zlOhtr-HGuOcY9)zlfu1mUJAMs!lyqtoZCOh7ZKB+K_xM$5W1-n5fh)_i3#<_S1I96 z@Wc)DCNwJ1w||r;Cb9(GMl~uC;~U_Mit;77V|+e_>y0B2=N;gUi}S{n_-BGIC)Tiv zhj}K1vkosOk?bbIYz8NKLsHB8mZb4_^sz_-z3wnig2$cYVW2}i5mBE0Oii;bT`tDg zR|WdUBu4l5#+8qEYslrDa{s%E@zm@Tn-JlP@k9~qoO*6>mYO+Bmt&1s;D0(vy|V0w zEI|2lhvz6lWtQQq?L4XZ>nPTjPnSNaUTFzrZuYVfYfxpS~H zELT{(yWFdZ38CTTQ)irfRv?4ByDHUBop7sjHoqq{Qk!NrG9qRmE98labbI>y5)%S* zi?8HPilb|md`N^hi6||)!y@8CeM4CBq;OAyJHZz?2dwnagb;VLs3cD^D;HLIK%CdB z@(B@@Lw#|vzBo@pApU=kkw3YzkEwE6!Ya969!c#=cw)3CrgD6!hn0`_4M<4x#8EZO z8y_(+hGR&N9FAmne6%MjDlnp0j+K@%#NBp4;24H`hOlW~PeLNcEY8aw$0soQ{)q#L zF&0I9{y6u*xWI&1wrElsdfefhp++Ub6B1(M>sP7rUydc`uyRDq5MR^~Z`l9pVA4}) zxSRFmL>6ou7<{xRGVtug>0xt+dp&VsA*pA6@0~uVTdP-_rQpg+Wi%R0Z z6#btU`~UF{=*>3%k1qkYne)q&W#0jw|1d{J9ay}i2V$bxhl)V}#co z?TO|!5yR6T?Fk(e;r6+sB0^L8lM|m1=ZkTNMS0wj@vPmUoskj$%?qMDZ{e*)D!IBe zEZE)_^Zb_wd~0;L>uk2*gk-mu73Fc*+AztrGU&g5(6>Gr=9-mZ>!>lV&IK~J@kQxH z9Ty)NvGwFUSJ7g*69>6_c*72j=A3s=PDmtBf9uU1u2MPthdz!XW4k*(=|JircP!g} za8B$$`^!F8a>w~nqCH6wo<*YcZmE5rrY`QNtg45$>5yB$ll9MPE>I>BOu!b?7 zKzlLX5O+t9JH?X}pW@}1q_9nqQJ&~ZZa*)AnQ4!=at5{!ja{Qsul^Ankl7|C(XmsC0bKU(9jXpS*w~{BSzt0rp)J8F0 zB5^5R7UKW&Z4vsvdtJCw4vpqX4HYFNHmfGHFQ~ePU=h(+%00<+!U!#_YX( W{XL;6Y>B(AULafBopRMF@qYjtM6cWc delta 27290 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\n" "Language-Team: Polish\n" "Language: pl\n" @@ -350,7 +350,7 @@ msgstr "" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "Usunięty element" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -434,7 +434,7 @@ msgstr "Lietuvių (Litewski)" #: bookwyrm/settings.py:307 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Holenderski" #: bookwyrm/settings.py:308 msgid "Norsk (Norwegian)" @@ -502,7 +502,7 @@ msgstr "Witaj na %(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 "" +msgstr "%(site_name)s jest częścią BookWyrm, sieci niezależnych, samostanowiących społeczności czytelnikĆ³w. Możesz beproblemowo wchodzić w interakcje z użytkownikami gdziekolwiek w sieci BookWyrm, ta społeczność jest wyjątkowa." #: bookwyrm/templates/about/about.html:45 #, python-format @@ -521,7 +521,7 @@ msgstr "%(title)s ma najbardziej podzielo #: 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 "" +msgstr "ŚledÅŗ swĆ³j postęp czytelniczy, rozmawiaj o książkach, pisz opinie i odkrywaj co czytać następne. Na zawsze bez reklam, antykorporacyjne i skierowane w stronę społeczności, BookWyrm jest programem dla ludzi, stworzonym, by pozostać małym i personalnym. Jeśli masz pomysł, zauważył_ś błąd, albo masz wielkie marzenie, złoś się i pozwĆ³l się wysłuchać." #: bookwyrm/templates/about/about.html:105 msgid "Meet your admins" @@ -672,7 +672,7 @@ msgstr "Przekłada się to na średnio %(pages)s stron na książkę." #, python-format msgid "(No page data was available for %(no_page_number)s book)" msgid_plural "(No page data was available for %(no_page_number)s books)" -msgstr[0] "" +msgstr[0] "(Nie mamy informacji o liczbie stron dla książki %(no_page_number)s)" msgstr[1] "" msgstr[2] "" msgstr[3] "" @@ -778,7 +778,7 @@ msgstr "Zobacz wpis ISNI" #: bookwyrm/templates/author/author.html:95 #: bookwyrm/templates/book/book.html:173 msgid "View on ISFDB" -msgstr "" +msgstr "Zobacz na ISFDB" #: bookwyrm/templates/author/author.html:100 #: bookwyrm/templates/author/sync_modal.html:5 @@ -1116,7 +1116,7 @@ msgstr "" #: bookwyrm/templates/book/book_identifiers.html:51 msgid "Goodreads:" -msgstr "" +msgstr "Goodreads:" #: bookwyrm/templates/book/cover_add_modal.html:5 msgid "Add cover" @@ -1257,7 +1257,7 @@ msgstr "Tytuł:" #: bookwyrm/templates/book/edit/edit_book_form.html:35 msgid "Sort Title:" -msgstr "" +msgstr "Sortuj Według Tytułu:" #: bookwyrm/templates/book/edit/edit_book_form.html:44 msgid "Subtitle:" @@ -1384,8 +1384,8 @@ msgstr "Edycje %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Edycje \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "Edycje %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -1567,7 +1567,7 @@ msgstr "" #: bookwyrm/templates/book/series.html:27 #, python-format msgid "Book %(series_number)s" -msgstr "" +msgstr "Książka%(series_number)s" #: bookwyrm/templates/book/series.html:27 msgid "Unsorted Book" @@ -2825,12 +2825,8 @@ msgstr "To nie jest prawidłowy plik CSV" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" msgstr[2] "" diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 05c4cbd8c804bc589fb359084ae26cecc63214dc..42da17a08b31601e4d80a782e3290ad350e5f86f 100644 GIT binary patch delta 23682 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 diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index c11dd5830..495ea43b3 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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 18:50\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-02 18:13\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -1372,8 +1372,8 @@ msgstr "EdiƧƵes de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "EdiƧƵes de \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,12 +2805,8 @@ msgstr "" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index 1ca5e1dd753d3833a25c06ccad6b687738fc1fb6..4e2f18bcbbc5be2dfd3fd9b19f47925cf4850486 100644 GIT binary patch delta 29369 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 bG(1Oe_Iw4h=iIWpfTw-qEiGnvo{s)Mi3#%s delta 29498 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\n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -1372,8 +1372,8 @@ msgstr "EdiƧƵes de %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "EdiƧƵes de \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,12 +2805,8 @@ msgstr "NĆ£o Ć© um ficheiro CSV vĆ”lido" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" diff --git a/locale/ro_RO/LC_MESSAGES/django.mo b/locale/ro_RO/LC_MESSAGES/django.mo index 85a193ba8cd33677fe55f30ebaa8f5dc901186eb..7aa5899d19d92c606ad6941aff77df8c2a7c9863 100644 GIT binary patch delta 26049 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 HVZi?ZU02^Y delta 26175 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\n" "Language-Team: Romanian\n" "Language: ro\n" @@ -1378,8 +1378,8 @@ msgstr "Ediții ale %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "Ediții ale %(work_title)s" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2815,12 +2815,8 @@ msgstr "" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" msgstr[2] "" diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index 890f3304b3c07fd944eeb8ece79a3fb02b2cabec..0086e52597aabd883480676c40cc5a33f57af649 100644 GIT binary patch delta 30067 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 H>y7(=7}L}e delta 30235 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\n" "Language-Team: Swedish\n" "Language: sv\n" @@ -1372,8 +1372,8 @@ msgstr "UtgĆ„vor av %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "UtgĆ„vor av \"%(work_title)s\"" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2805,12 +2805,8 @@ msgstr "Inte en giltig CSV-fil" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index a3c31e913..77591afa9 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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 00:08\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-02 18:13\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -1366,8 +1366,8 @@ msgstr "%(book_title)s ēš„各ē‰ˆęœ¬" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "怊%(work_title)s怋 ēš„各ē‰ˆęœ¬" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2795,12 +2795,8 @@ msgstr "" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" #: bookwyrm/templates/import/import.html:27 diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index a95eebec1..c6f7dc28b 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-09-27 01:11+0000\n" -"PO-Revision-Date: 2023-09-28 00:08\n" +"POT-Creation-Date: 2023-10-02 16:40+0000\n" +"PO-Revision-Date: 2023-10-29 07:42\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -173,7 +173,7 @@ msgstr "" #: bookwyrm/models/book.py:283 msgid "Audiobook" -msgstr "" +msgstr "ęœ‰č²ę›ø" #: bookwyrm/models/book.py:284 msgid "eBook" @@ -181,15 +181,15 @@ msgstr "電子ę›ø" #: bookwyrm/models/book.py:285 msgid "Graphic novel" -msgstr "" +msgstr "圖像小čŖŖ" #: bookwyrm/models/book.py:286 msgid "Hardcover" -msgstr "" +msgstr "ē²¾č£ę›ø" #: bookwyrm/models/book.py:287 msgid "Paperback" -msgstr "" +msgstr "å¹³č£ę›ø" #: bookwyrm/models/federated_server.py:11 #: bookwyrm/templates/settings/federation/edit_instance.html:55 @@ -267,15 +267,15 @@ msgstr "ę“»čŗ" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 msgid "Complete" -msgstr "" +msgstr "å·²å®Œęˆ" #: bookwyrm/models/import_job.py:50 msgid "Stopped" -msgstr "" +msgstr "å·²åœę­¢" #: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 msgid "Import stopped" -msgstr "" +msgstr "åŒÆå…„å·²åœę­¢" #: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 msgid "Error loading book" @@ -287,20 +287,20 @@ msgstr "" #: bookwyrm/models/link.py:51 msgid "Free" -msgstr "" +msgstr "å…č²»" #: bookwyrm/models/link.py:52 msgid "Purchasable" -msgstr "" +msgstr "åÆč³¼č²·" #: bookwyrm/models/link.py:53 msgid "Available for loan" -msgstr "" +msgstr "åÆ借閱" #: bookwyrm/models/link.py:70 #: bookwyrm/templates/settings/link_domains/link_domains.html:23 msgid "Approved" -msgstr "" +msgstr "å·²ę ø准" #: bookwyrm/models/report.py:84 #: bookwyrm/templates/settings/reports/report.html:115 @@ -310,11 +310,11 @@ msgstr "č©•č«–" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "å·²č™•ē†ēš„čˆ‰å ±" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "å·²é‡ę–°ę‰“é–‹ēš„čˆ‰å ±" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" @@ -358,15 +358,15 @@ msgstr "ę›øč©•" #: bookwyrm/models/user.py:33 msgid "Comments" -msgstr "" +msgstr "č©•č«–" #: bookwyrm/models/user.py:34 msgid "Quotations" -msgstr "" +msgstr "引ē”Ø" #: bookwyrm/models/user.py:35 msgid "Everything else" -msgstr "" +msgstr "ę‰€ęœ‰å…¶ä»–å…§å®¹" #: bookwyrm/settings.py:223 msgid "Home Timeline" @@ -378,7 +378,7 @@ msgstr "äø»é " #: bookwyrm/settings.py:224 msgid "Books Timeline" -msgstr "" +msgstr "ę›øē›®ę™‚é–“ē·š" #: bookwyrm/settings.py:224 #: bookwyrm/templates/guided_tour/user_profile.html:101 @@ -394,7 +394,7 @@ msgstr "Englishļ¼ˆč‹±čŖžļ¼‰" #: bookwyrm/settings.py:297 msgid "CatalĆ  (Catalan)" -msgstr "" +msgstr "CatalĆ  (åŠ ę³°ē¾…å°¼äŗžčŖž)" #: bookwyrm/settings.py:298 msgid "Deutsch (German)" @@ -402,7 +402,7 @@ msgstr "Deutschļ¼ˆå¾·čŖžļ¼‰" #: bookwyrm/settings.py:299 msgid "Esperanto (Esperanto)" -msgstr "" +msgstr "Esperanto (äø–ē•ŒčŖž)" #: bookwyrm/settings.py:300 msgid "EspaƱol (Spanish)" @@ -410,19 +410,19 @@ msgstr "EspaƱolļ¼ˆč„æē­ē‰™čŖžļ¼‰" #: bookwyrm/settings.py:301 msgid "Euskara (Basque)" -msgstr "" +msgstr "Euskara (å·“ę–Æ克čŖž)" #: bookwyrm/settings.py:302 msgid "Galego (Galician)" -msgstr "" +msgstr "Galego (加利č„æäŗžčŖž)" #: bookwyrm/settings.py:303 msgid "Italiano (Italian)" -msgstr "" +msgstr "Italiano (ę„å¤§åˆ©čŖž)" #: bookwyrm/settings.py:304 msgid "Suomi (Finnish)" -msgstr "" +msgstr "Suomi (čŠ¬č˜­čŖž)" #: bookwyrm/settings.py:305 msgid "FranƧais (French)" @@ -430,35 +430,35 @@ msgstr "FranƧaisļ¼ˆę³•čŖžļ¼‰" #: bookwyrm/settings.py:306 msgid "Lietuvių (Lithuanian)" -msgstr "" +msgstr "Lietuvių (ē«‹é™¶å®›čŖž)" #: bookwyrm/settings.py:307 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Nederlands (č·č˜­čŖž)" #: bookwyrm/settings.py:308 msgid "Norsk (Norwegian)" -msgstr "" +msgstr "Norsk (ęŒŖå؁čŖž)" #: bookwyrm/settings.py:309 msgid "Polski (Polish)" -msgstr "" +msgstr "Polski (ę³¢č˜­čŖž)" #: bookwyrm/settings.py:310 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" -msgstr "" +msgstr "PortuguĆŖs do Brasil (å·“č„æ葔萄ē‰™čŖž)" #: bookwyrm/settings.py:311 msgid "PortuguĆŖs Europeu (European Portuguese)" -msgstr "" +msgstr "PortuguĆŖs Europeu (ę­ę“²č‘”č„ē‰™čŖž)" #: bookwyrm/settings.py:312 msgid "RomĆ¢nă (Romanian)" -msgstr "" +msgstr "RomĆ¢nă (ē¾…馬尼äŗžčŖž)" #: bookwyrm/settings.py:313 msgid "Svenska (Swedish)" -msgstr "" +msgstr "Svenska (ē‘žå…øčŖž)" #: bookwyrm/settings.py:314 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -491,7 +491,7 @@ msgstr "Ꟑäŗ›ę±č„æå‡ŗéŒÆäŗ†ļ¼ęŠ±ę­‰ć€‚" #: bookwyrm/templates/about/about.html:9 #: bookwyrm/templates/about/layout.html:35 msgid "About" -msgstr "" +msgstr "é—œę–¼" #: bookwyrm/templates/about/about.html:21 #: bookwyrm/templates/get_started/layout.html:22 @@ -502,12 +502,12 @@ 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 "" +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 "" +msgstr "%(title)s ę˜Æ %(site_name)s ęœ€å—ę­”čæŽēš„ę›øļ¼Œå¹³å‡å¾—分ē‚ŗ %(rating)sļ¼ˆę»æ分äŗ”分ļ¼‰ć€‚" #: bookwyrm/templates/about/about.html:64 #, python-format @@ -703,13 +703,13 @@ msgstr[0] "" #: bookwyrm/templates/annual_summary/layout.html:211 msgid "Way to go!" -msgstr "" +msgstr "還äøéŒÆļ¼" #: bookwyrm/templates/annual_summary/layout.html:226 #, python-format msgid "%(display_name)s left %(ratings_total)s rating,
    their average rating is %(rating_average)s" msgid_plural "%(display_name)s left %(ratings_total)s ratings,
    their average rating is %(rating_average)s" -msgstr[0] "" +msgstr[0] "%(display_name)s ē•™äø‹äŗ† %(ratings_total)s ę¢č©•åˆ†ļ¼Œ
    他ēš„å¹³å‡č©•åˆ†ę˜Æ %(rating_average)s" #: bookwyrm/templates/annual_summary/layout.html:240 msgid "Their best rated review" @@ -732,7 +732,7 @@ msgstr "ē·Øč¼Æä½œč€…" #: bookwyrm/templates/author/author.html:36 msgid "Author details" -msgstr "" +msgstr "ä½œč€…č©³ęƒ…" #: bookwyrm/templates/author/author.html:40 #: bookwyrm/templates/author/edit_author.html:42 @@ -749,7 +749,7 @@ msgstr "逝äø–:" #: bookwyrm/templates/author/author.html:66 msgid "External links" -msgstr "" +msgstr "外éƒØ連ēµ" #: bookwyrm/templates/author/author.html:71 msgid "Wikipedia" @@ -757,23 +757,23 @@ msgstr "ē¶­åŸŗē™¾ē§‘" #: bookwyrm/templates/author/author.html:79 msgid "Website" -msgstr "" +msgstr "ē¶²ē«™" #: bookwyrm/templates/author/author.html:87 msgid "View ISNI record" -msgstr "" +msgstr "ęŸ„ēœ‹ ISNI čؘ錄" #: bookwyrm/templates/author/author.html:95 #: bookwyrm/templates/book/book.html:173 msgid "View on ISFDB" -msgstr "" +msgstr "åœØ ISFDB ęŸ„ēœ‹" #: bookwyrm/templates/author/author.html:100 #: bookwyrm/templates/author/sync_modal.html:5 #: bookwyrm/templates/book/book.html:140 #: bookwyrm/templates/book/sync_modal.html:5 msgid "Load data" -msgstr "" +msgstr "č¼‰å…„č³‡ę–™" #: bookwyrm/templates/author/author.html:104 #: bookwyrm/templates/book/book.html:144 @@ -787,15 +787,15 @@ msgstr "åœØ Inventaire ęŖ¢č¦–" #: bookwyrm/templates/author/author.html:135 msgid "View on LibraryThing" -msgstr "" +msgstr "åœØ LibraryThing ęŸ„ēœ‹" #: bookwyrm/templates/author/author.html:143 msgid "View on Goodreads" -msgstr "" +msgstr "åœØ Goodreads ęŸ„ēœ‹" #: bookwyrm/templates/author/author.html:151 msgid "View ISFDB entry" -msgstr "" +msgstr "ęŸ„ēœ‹ ISFDB ę¢ē›®" #: bookwyrm/templates/author/author.html:166 #, python-format @@ -849,7 +849,7 @@ msgstr "ē¶­åŸŗē™¾ē§‘連ēµ:" #: bookwyrm/templates/author/edit_author.html:60 msgid "Website:" -msgstr "" +msgstr "ē¶²ē«™ļ¼š" #: bookwyrm/templates/author/edit_author.html:65 msgid "Birth date:" @@ -883,11 +883,11 @@ msgstr "Goodreads key:" #: bookwyrm/templates/author/edit_author.html:109 msgid "ISFDB:" -msgstr "" +msgstr "ISFDBļ¼š" #: bookwyrm/templates/author/edit_author.html:116 msgid "ISNI:" -msgstr "" +msgstr "ISNIļ¼š" #: bookwyrm/templates/author/edit_author.html:126 #: bookwyrm/templates/book/book.html:220 @@ -953,7 +953,7 @@ msgstr "ē¢ŗčŖ" #: bookwyrm/templates/book/book.html:20 msgid "Unable to connect to remote source." -msgstr "" +msgstr "ē„”ę³•é€£ęŽ„åˆ°é ē؋ę•øꓚęŗć€‚" #: bookwyrm/templates/book/book.html:71 bookwyrm/templates/book/book.html:72 msgid "Edit Book" @@ -961,7 +961,7 @@ msgstr "ē·Øč¼Æę›øē›®" #: bookwyrm/templates/book/book.html:97 bookwyrm/templates/book/book.html:100 msgid "Click to add cover" -msgstr "" +msgstr "é»žę“Šę·»åŠ å°é¢" #: bookwyrm/templates/book/book.html:106 msgid "Failed to load cover" @@ -969,7 +969,7 @@ msgstr "č¼‰å…„å°é¢å¤±ę•—" #: bookwyrm/templates/book/book.html:117 msgid "Click to enlarge" -msgstr "" +msgstr "é»žę“Šę”¾å¤§" #: bookwyrm/templates/book/book.html:196 #, python-format @@ -991,7 +991,7 @@ msgstr "ꏏčæ°:" #, python-format msgid "%(count)s edition" msgid_plural "%(count)s editions" -msgstr[0] "" +msgstr[0] "%(count)s ē‰ˆę¬”" #: bookwyrm/templates/book/book.html:246 msgid "You have shelved this edition in:" @@ -1070,11 +1070,11 @@ msgstr "ISBN:" #: bookwyrm/templates/book/book_identifiers.html:12 #: bookwyrm/templates/book/book_identifiers.html:13 msgid "Copy ISBN" -msgstr "" +msgstr "č¤‡č£½ISBN" #: bookwyrm/templates/book/book_identifiers.html:16 msgid "Copied ISBN!" -msgstr "" +msgstr "å·²č¤‡č£½ISBNļ¼" #: bookwyrm/templates/book/book_identifiers.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:352 @@ -1089,16 +1089,16 @@ msgstr "ASIN:" #: bookwyrm/templates/book/book_identifiers.html:37 #: bookwyrm/templates/book/edit/edit_book_form.html:370 msgid "Audible ASIN:" -msgstr "" +msgstr "Audible ASINļ¼š" #: bookwyrm/templates/book/book_identifiers.html:44 #: bookwyrm/templates/book/edit/edit_book_form.html:379 msgid "ISFDB ID:" -msgstr "" +msgstr "ISFDB IDļ¼š" #: bookwyrm/templates/book/book_identifiers.html:51 msgid "Goodreads:" -msgstr "" +msgstr "Goodreadsļ¼š" #: bookwyrm/templates/book/cover_add_modal.html:5 msgid "Add cover" @@ -1116,7 +1116,7 @@ msgstr "從ē¶²å€č¼‰å…„封面:" #: bookwyrm/templates/book/cover_show_modal.html:6 msgid "Book cover preview" -msgstr "" +msgstr "ę›øē±å°é¢é č¦½" #: bookwyrm/templates/book/cover_show_modal.html:11 #: bookwyrm/templates/components/inline_form.html:8 @@ -1310,16 +1310,16 @@ msgstr "ę–°å¢žä½œč€…:" #: bookwyrm/templates/book/edit/edit_book_form.html:211 #: bookwyrm/templates/book/edit/edit_book_form.html:214 msgid "Add Author" -msgstr "" +msgstr "ę–°å¢žä½œč€…" #: bookwyrm/templates/book/edit/edit_book_form.html:212 #: bookwyrm/templates/book/edit/edit_book_form.html:215 msgid "Jane Doe" -msgstr "" +msgstr "é™³å¤§ę–‡" #: bookwyrm/templates/book/edit/edit_book_form.html:221 msgid "Add Another Author" -msgstr "" +msgstr "ę–°å¢žå…¶ä»–ä½œč€…" #: bookwyrm/templates/book/edit/edit_book_form.html:231 #: bookwyrm/templates/shelf/shelf.html:147 @@ -1337,7 +1337,7 @@ msgstr "ę ¼å¼:" #: bookwyrm/templates/book/edit/edit_book_form.html:280 msgid "Format details:" -msgstr "" +msgstr "č£čØ‚č©³ęƒ…ļ¼š" #: bookwyrm/templates/book/edit/edit_book_form.html:291 msgid "Pages:" @@ -1366,8 +1366,8 @@ msgstr "%(book_title)s ēš„各ē‰ˆęœ¬" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format -msgid "Editions of \"%(work_title)s\"" -msgstr "\"%(work_title)s\" ēš„各ē‰ˆęœ¬" +msgid "Editions of %(work_title)s" +msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -2795,12 +2795,8 @@ msgstr "" #: bookwyrm/templates/import/import.html:21 #, python-format -msgid "\n" -" Currently, you are allowed to import %(display_size)s books every %(import_limit_reset)s day.\n" -" " -msgid_plural "\n" -" Currently, you are allowed to import %(import_size_limit)s books every %(import_limit_reset)s days.\n" -" " +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] "" #: bookwyrm/templates/import/import.html:27 From 22554f85adbcd40cbdff0061f0ae4b40d2cebdcb Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Nov 2023 14:37:14 -0700 Subject: [PATCH 111/458] Updates tour to reflect changes in #2201 --- bookwyrm/templates/guided_tour/home.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/guided_tour/home.html b/bookwyrm/templates/guided_tour/home.html index be8d095af..250449153 100644 --- a/bookwyrm/templates/guided_tour/home.html +++ b/bookwyrm/templates/guided_tour/home.html @@ -99,7 +99,7 @@ homeTour.addSteps([ ], }, { - text: "{% trans '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!' %}", + text: "{% trans 'Use the Feed, Discover, and Your Books links to discover the latest news from your feed, the latest happenings on this Bookwyrm server, and see your catalogued books!' %}", title: "{% trans 'Navigation Bar' %}", attachTo: { element: checkResponsiveState('#tour-navbar-start'), @@ -197,7 +197,7 @@ homeTour.addSteps([ ], }, { - text: `{% trans "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here." %}

    {% trans "Try selecting Profile from the drop down menu to continue the tour." %}

    `, + text: `{% trans "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." %}

    {% trans "Try selecting Profile from the drop down menu to continue the tour." %}

    `, title: "{% trans 'Profile and settings menu' %}", attachTo: { element: checkResponsiveState('#navbar-dropdown'), From e1217f20542df1fdab10f95a96b539f58a953a5f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Nov 2023 15:04:03 -0700 Subject: [PATCH 112/458] Don't show notification for user follow request if the user is inactive --- bookwyrm/templates/notifications/item.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/notifications/item.html b/bookwyrm/templates/notifications/item.html index bac7dc61f..7e7f0da27 100644 --- a/bookwyrm/templates/notifications/item.html +++ b/bookwyrm/templates/notifications/item.html @@ -10,7 +10,9 @@ {% elif notification.notification_type == 'FOLLOW' %} {% include 'notifications/items/follow.html' %} {% elif notification.notification_type == 'FOLLOW_REQUEST' %} - {% include 'notifications/items/follow_request.html' %} + {% if notification.related_users.0.is_active %} + {% include 'notifications/items/follow_request.html' %} + {% endif %} {% elif notification.notification_type == 'IMPORT' %} {% include 'notifications/items/import.html' %} {% elif notification.notification_type == 'ADD' %} From 68f1a69b6a7848a6a8294c42f2009533ae42c359 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 22:13:52 +0000 Subject: [PATCH 113/458] Bump django from 3.2.20 to 3.2.23 Bumps [django](https://github.com/django/django) from 3.2.20 to 3.2.23. - [Commits](https://github.com/django/django/compare/3.2.20...3.2.23) --- updated-dependencies: - dependency-name: django dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0602f8da4..b01e110bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ aiohttp==3.8.5 bleach==5.0.1 celery==5.2.7 colorthief==0.2.1 -Django==3.2.20 +Django==3.2.23 django-celery-beat==2.4.0 django-compressor==4.3.1 django-imagekit==4.1.0 From 285c513211da7fef58c6f333ec80ea6566ecebc6 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Nov 2023 19:01:40 -0700 Subject: [PATCH 114/458] Adds test for invalid isbns and handle isbns with dashes --- bookwyrm/isbn/isbn.py | 7 ++++++- bookwyrm/tests/test_isbn.py | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/bookwyrm/isbn/isbn.py b/bookwyrm/isbn/isbn.py index 4cc7f47dd..56062ff7b 100644 --- a/bookwyrm/isbn/isbn.py +++ b/bookwyrm/isbn/isbn.py @@ -40,7 +40,12 @@ class IsbnHyphenator: self.__element_tree = ElementTree.parse(self.__range_file_path) gs1_prefix = isbn_13[:3] - reg_group = self.__find_reg_group(isbn_13, gs1_prefix) + try: + reg_group = self.__find_reg_group(isbn_13, gs1_prefix) + except ValueError: + # if the reg groups are invalid, just return the original isbn + return isbn_13 + if reg_group is None: return isbn_13 # failed to hyphenate diff --git a/bookwyrm/tests/test_isbn.py b/bookwyrm/tests/test_isbn.py index b528e9210..5486c7151 100644 --- a/bookwyrm/tests/test_isbn.py +++ b/bookwyrm/tests/test_isbn.py @@ -29,3 +29,10 @@ class TestISBN(TestCase): self.assertEqual(hyphenator.hyphenate("9786769533251"), "9786769533251") # 979-8 (United States) 2300000-3499999 (unassigned) self.assertEqual(hyphenator.hyphenate("9798311111111"), "9798311111111") + + def test_isbn_hyphenation_invalid_data(self): + """Make sure not to throw an error when a bad ISBN is found""" + # no action taken + self.assertEqual(hyphenator.hyphenate("978-0-4633461-1-2"), "978-0-4633461-1-2") + self.assertEqual(hyphenator.hyphenate("9-0-4633461-1-2"), "9-0-4633461-1-2") + self.assertEqual(hyphenator.hyphenate("90463346112"), "90463346112") From f839038c8f4d364f0951c38205b93731f8ebb3ef Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Nov 2023 19:12:17 -0700 Subject: [PATCH 115/458] Add test for normalizing isbns in book model Turns out this was actually working as expected --- bookwyrm/models/book.py | 9 +++++++-- bookwyrm/tests/models/test_book_model.py | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 9e05c03af..ac317f644 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -366,9 +366,9 @@ class Edition(Book): # normalize isbn format if self.isbn_10: - self.isbn_10 = re.sub(r"[^0-9X]", "", self.isbn_10) + self.isbn_10 = normalize_isbn(self.isbn_10) if self.isbn_13: - self.isbn_13 = re.sub(r"[^0-9X]", "", self.isbn_13) + self.isbn_10 = normalize_isbn(self.isbn_13) # set rank self.edition_rank = self.get_rank() @@ -463,6 +463,11 @@ def isbn_13_to_10(isbn_13): return converted + str(checkdigit) +def normalize_isbn(isbn): + """Remove unexpected characters from ISBN 10 or 13""" + return re.sub(r"[^0-9X]", "", isbn) + + # pylint: disable=unused-argument @receiver(models.signals.post_save, sender=Edition) def preview_image(instance, *args, **kwargs): diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 8122e9505..4347efcb6 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -11,7 +11,7 @@ from django.test import TestCase from django.utils import timezone from bookwyrm import models, settings -from bookwyrm.models.book import isbn_10_to_13, isbn_13_to_10 +from bookwyrm.models.book import isbn_10_to_13, isbn_13_to_10, normalize_isbn from bookwyrm.settings import ENABLE_THUMBNAIL_GENERATION @@ -72,6 +72,10 @@ class Book(TestCase): isbn_10 = isbn_13_to_10(isbn_13) self.assertEqual(isbn_10, "178816167X") + def test_normalize_isbn(self): + """Remove misc characters from ISBNs""" + self.assertEqual(normalize_isbn("978-0-4633461-1-2"), "9780463346112") + def test_get_edition_info(self): """text slug about an edition""" book = models.Edition.objects.create(title="Test Edition") From 116a838eef7cacb8c79f67e6083d53e1625d49a8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Nov 2023 19:37:58 -0700 Subject: [PATCH 116/458] Fixes typo that confuses isbn 10 and 13 --- bookwyrm/models/book.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index ac317f644..e5941136f 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -368,7 +368,7 @@ class Edition(Book): if self.isbn_10: self.isbn_10 = normalize_isbn(self.isbn_10) if self.isbn_13: - self.isbn_10 = normalize_isbn(self.isbn_13) + self.isbn_13 = normalize_isbn(self.isbn_13) # set rank self.edition_rank = self.get_rank() From 294788aa1ae2f10ffeae188177dfb96e9291a6d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 9 Oct 2023 21:41:22 -0300 Subject: [PATCH 117/458] format_links: refactor; support multiple punctuation --- bookwyrm/tests/views/test_status.py | 4 ++ bookwyrm/views/status.py | 71 ++++++++++------------------- 2 files changed, 28 insertions(+), 47 deletions(-) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 42e83c5b8..33c8f0e41 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -427,6 +427,10 @@ http://www.fish.com/""" views.status.format_links(f"{url}."), f'www.fish.com/.', ) + self.assertEqual( + views.status.format_links(f"{url}!?!"), + f'www.fish.com/!?!', + ) def test_format_links_punctuation_parens(self, *_): """ignore trailing punctuation and brackets combined""" diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index bb8f6ac17..4c1d049df 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -1,7 +1,6 @@ """ what are we here for if not for posting """ import re import logging -from urllib.parse import urlparse from django.contrib.auth.decorators import login_required from django.core.validators import URLValidator @@ -297,67 +296,45 @@ def find_or_create_hashtags(content): def format_links(content): """detect and format links""" - validator = URLValidator() - formatted_content = "" + validator = URLValidator(["http", "https"]) + schema_re = re.compile(r"\bhttps?://") split_content = re.split(r"(\s+)", content) - for potential_link in split_content: - if not potential_link: + for i, potential_link in enumerate(split_content): + if not schema_re.search(potential_link): continue - # FIXME: allow for multiple punctuation characters, e.g. `...` and `!?`. - ends_with_punctuation = _ends_with_punctuation(potential_link) - if ends_with_punctuation: - punctuation_glyph = potential_link[-1] - potential_link = potential_link[0:-1] - - wrapped = _wrapped(potential_link) - if wrapped: - wrapper_close = potential_link[-1] - formatted_content += potential_link[0] - potential_link = potential_link[1:-1] - + # Strip surrounding brackets and trailing punctuation. + prefix, potential_link, suffix = _unwrap(potential_link) try: # raises an error on anything that's not a valid link validator(potential_link) # use everything but the scheme in the presentation of the link - url = urlparse(potential_link) - link = url.netloc + url.path + url.params - if url.query != "": - link += "?" + url.query - if url.fragment != "": - link += "#" + url.fragment - - formatted_content += f'{link}' + link = schema_re.sub("", potential_link) + split_content[i] = f'{prefix}{link}{suffix}' except (ValidationError, UnicodeError): - formatted_content += potential_link + pass - if wrapped: - formatted_content += wrapper_close - - if ends_with_punctuation: - formatted_content += punctuation_glyph - - return formatted_content + return "".join(split_content) -def _wrapped(text): - """check if a line of text is wrapped""" - wrappers = ["()", "[]", "{}"] - for wrapper in wrappers: +def _unwrap(text): + """split surrounding brackets and trailing punctuation from a string of text""" + punct = re.compile(r'([.,;:!?"ā€™ā€Ā»]+)\Z') + prefix = suffix = "" + + if punct.search(text): + # Move punctuation to suffix segment. + text, suffix, _ = punct.split(text) + + for wrapper in ("()", "[]", "{}"): if text[0] == wrapper[0] and text[-1] == wrapper[-1]: - return True - return False + # Split out wrapping chars. + suffix = text[-1] + suffix + prefix, text = text[:1], text[1:-1] - -def _ends_with_punctuation(text): - """check if a line of text ends with a punctuation glyph""" - glyphs = [".", ",", ";", ":", "!", "?", "ā€", "ā€™", '"', "Ā»"] - for glyph in glyphs: - if text[-1] == glyph: - return True - return False + return prefix, text, suffix def to_markdown(content): From 7d13cbb10b45a8599e12aa9c379e1617d6e76f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Thu, 2 Nov 2023 21:27:55 -0300 Subject: [PATCH 118/458] Add failing tests for reported bugs in format_links() --- bookwyrm/tests/views/test_status.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 33c8f0e41..67e1f6d76 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -469,6 +469,13 @@ http://www.fish.com/""" views.status.format_links(url), f'{url[8:]}' ) + def test_format_links_ignore_non_urls(self, *_): + """formating links should leave plain text untouced""" + text_elision = "> ā€œThe distinction is significant.ā€ [...]" # bookwyrm#2993 + text_quoteparens = "some kind of gene-editing technology (?)" # bookwyrm#3049 + self.assertEqual(views.status.format_links(text_elision), text_elision) + self.assertEqual(views.status.format_links(text_quoteparens), text_quoteparens) + def test_format_mentions_with_at_symbol_links(self, *_): """A link with an @username shouldn't treat the username as a mention""" content = "a link to https://example.com/user/@mouse" From 954a02126eb21ca230319cd8ff62adf04d962de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Thu, 2 Nov 2023 21:59:34 -0300 Subject: [PATCH 119/458] format_links: parse punctuation inside brackets Also, consolidate all punctuation tests into a single table-driven one. --- bookwyrm/tests/views/test_status.py | 37 ++++++++++++++--------------- bookwyrm/views/status.py | 6 +++++ 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 67e1f6d76..424698130 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -421,25 +421,24 @@ http://www.fish.com/""" ) def test_format_links_punctuation(self, *_): - """donā€™t take trailing punctuation into account pls""" - url = "http://www.fish.com/" - self.assertEqual( - views.status.format_links(f"{url}."), - f'www.fish.com/.', - ) - self.assertEqual( - views.status.format_links(f"{url}!?!"), - f'www.fish.com/!?!', - ) - - def test_format_links_punctuation_parens(self, *_): - """ignore trailing punctuation and brackets combined""" - # Period at the end, wrapped in brackets. - url = "http://www.fish.com" - self.assertEqual( - views.status.format_links(f"({url})."), - f'(www.fish.com).', - ) + """test many combinations of brackets, URLs, and punctuation""" + url = "https://bookwyrm.social" + html = f'bookwyrm.social' + test_table = [ + ("punct", f"text and {url}.", f"text and {html}."), + ("multi_punct", f"text, then {url}?...", f"text, then {html}?..."), + ("bracket_punct", f"here ({url}).", f"here ({html})."), + ("punct_bracket", f"there [{url}?]", f"there [{html}?]"), + ("punct_bracket_punct", f"not here? ({url}!).", f"not here? ({html}!)."), + ( + "multi_punct_bracket", + f"not there ({url}...);", + f"not there ({html}...);", + ), + ] + for desc, text, output in test_table: + with self.subTest(desc=desc): + self.assertEqual(views.status.format_links(text), output) def test_format_links_special_chars(self, *_): """find and format urls into a tags""" diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 4c1d049df..8dab11a27 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -333,6 +333,12 @@ def _unwrap(text): # Split out wrapping chars. suffix = text[-1] + suffix prefix, text = text[:1], text[1:-1] + break # Nested wrappers not supported atm. + + if punct.search(text): + # Move inner punctuation to suffix segment. + text, inner_punct, _ = punct.split(text) + suffix = inner_punct + suffix return prefix, text, suffix From afad39bf80265f74de100cf3550924a7916d02a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 3 Nov 2023 19:31:03 -0300 Subject: [PATCH 120/458] Use $ instead of \Z for end of string They're identical here, since re.M is not used, and the better-known should be used, for readability. --- bookwyrm/views/status.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 8dab11a27..34b62d0b4 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -321,7 +321,7 @@ def format_links(content): def _unwrap(text): """split surrounding brackets and trailing punctuation from a string of text""" - punct = re.compile(r'([.,;:!?"ā€™ā€Ā»]+)\Z') + punct = re.compile(r'([.,;:!?"ā€™ā€Ā»]+)$') prefix = suffix = "" if punct.search(text): From d682e55812e04b475271e8036a588cb8df4b9d25 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 5 Nov 2023 16:34:24 +1100 Subject: [PATCH 121/458] swap out django-file-resubmit - we decided to fork it, so this now uses the inaugural RC release of bw-file-resubmit (will need to be adjusted once we're confident it's ok to push a full release) - I was accidentally using the wrong widget lol --- bookwyrm/forms/books.py | 4 ++-- requirements.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/forms/books.py b/bookwyrm/forms/books.py index c65a6aaf7..f73ce3f5a 100644 --- a/bookwyrm/forms/books.py +++ b/bookwyrm/forms/books.py @@ -1,7 +1,7 @@ """ using django model forms """ from django import forms -from file_resubmit.admin import AdminResubmitImageWidget +from file_resubmit.widgets import ResubmitImageWidget from bookwyrm import models from .custom_form import CustomForm @@ -71,7 +71,7 @@ class EditionForm(CustomForm): "published_date": SelectDateWidget( attrs={"aria-describedby": "desc_published_date"} ), - "cover": AdminResubmitImageWidget(attrs={"aria-describedby": "desc_cover"}), + "cover": ResubmitImageWidget(attrs={"aria-describedby": "desc_cover"}), "physical_format": Select( attrs={"aria-describedby": "desc_physical_format"} ), diff --git a/requirements.txt b/requirements.txt index f63989e1f..cda7b1967 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ celery==5.2.7 colorthief==0.2.1 Django==3.2.20 django-celery-beat==2.4.0 -django-file-resubmit==0.5.2 +bw-file-resubmit==0.6.0rc2 django-compressor==4.3.1 django-imagekit==4.1.0 django-model-utils==4.3.1 From 7104e775d8bf0307766354369df6b5725d5431bd Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 06:36:43 -0800 Subject: [PATCH 122/458] Updates working of header tour --- bookwyrm/templates/guided_tour/home.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/guided_tour/home.html b/bookwyrm/templates/guided_tour/home.html index 250449153..a464206ef 100644 --- a/bookwyrm/templates/guided_tour/home.html +++ b/bookwyrm/templates/guided_tour/home.html @@ -99,7 +99,7 @@ homeTour.addSteps([ ], }, { - text: "{% trans 'Use the Feed, Discover, and Your Books links to discover the latest news from your feed, the latest happenings on this Bookwyrm server, and see your catalogued books!' %}", + text: "{% trans '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!' %}", title: "{% trans 'Navigation Bar' %}", attachTo: { element: checkResponsiveState('#tour-navbar-start'), From 10e0f2224aab59b41410725ca9c7691f95302073 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 06:44:39 -0800 Subject: [PATCH 123/458] Adds a couple more tests for find_existing --- .../tests/models/test_activitypub_mixin.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index a465c2c12..645a6546b 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -119,6 +119,25 @@ class ActivitypubMixins(TestCase): result = models.Edition.find_existing({"openlibraryKey": "OL1234"}) self.assertEqual(result, book) + def test_find_existing_with_id(self, *_): + """make sure that an "id" field won't produce a match""" + book = models.Edition.objects.create(title="Test edition") + + result = models.Edition.find_existing({"id": book.id}) + self.assertIsNone(result) + + def test_find_existing_with_id_and_match(self, *_): + """make sure that an "id" field won't produce a match""" + book = models.Edition.objects.create(title="Test edition") + matching_book = models.Edition.objects.create( + title="Another test edition", openlibrary_key="OL1234" + ) + + result = models.Edition.find_existing( + {"id": book.id, "openlibraryKey": "OL1234"} + ) + self.assertEqual(result, matching_book) + def test_get_recipients_public_object(self, *_): """determines the recipients for an object's broadcast""" MockSelf = namedtuple("Self", ("privacy")) From 89b87db1c87afe88ff5f65d543c19f71663d63ca Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 06:54:29 -0800 Subject: [PATCH 124/458] Adds merge migration --- bookwyrm/migrations/0185_merge_20231105_1453.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bookwyrm/migrations/0185_merge_20231105_1453.py diff --git a/bookwyrm/migrations/0185_merge_20231105_1453.py b/bookwyrm/migrations/0185_merge_20231105_1453.py new file mode 100644 index 000000000..767fe4195 --- /dev/null +++ b/bookwyrm/migrations/0185_merge_20231105_1453.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.20 on 2023-11-05 14:53 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0182_auto_20231027_1122"), + ("bookwyrm", "0184_sitesettings_user_import_time_limit"), + ] + + operations = [] From ff2bb513ed09ba5816de1563bebf618c1f8e567c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 06:56:10 -0800 Subject: [PATCH 125/458] Adds migration for notification types --- ...86_alter_notification_notification_type.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 bookwyrm/migrations/0186_alter_notification_notification_type.py diff --git a/bookwyrm/migrations/0186_alter_notification_notification_type.py b/bookwyrm/migrations/0186_alter_notification_notification_type.py new file mode 100644 index 000000000..3e4effdfa --- /dev/null +++ b/bookwyrm/migrations/0186_alter_notification_notification_type.py @@ -0,0 +1,43 @@ +# Generated by Django 3.2.20 on 2023-11-05 14:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("bookwyrm", "0185_merge_20231105_1453"), + ] + + operations = [ + migrations.AlterField( + model_name="notification", + name="notification_type", + field=models.CharField( + choices=[ + ("FAVORITE", "Favorite"), + ("REPLY", "Reply"), + ("MENTION", "Mention"), + ("TAG", "Tag"), + ("FOLLOW", "Follow"), + ("FOLLOW_REQUEST", "Follow Request"), + ("BOOST", "Boost"), + ("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, + ), + ), + ] From 9e9e9a9f8552b84e879079b547eeedd729e27a23 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 07:04:05 -0800 Subject: [PATCH 126/458] Uses explicit imports to avoid circular import in migrations code --- bookwyrm/models/__init__.py | 1 + bookwyrm/models/bookwyrm_export_job.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bookwyrm/models/__init__.py b/bookwyrm/models/__init__.py index 7062fe390..4f86f2aa6 100644 --- a/bookwyrm/models/__init__.py +++ b/bookwyrm/models/__init__.py @@ -27,6 +27,7 @@ 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/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index da1cab320..4b0abd73f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -8,7 +8,10 @@ from django.db.models import Q from django.core.serializers.json import DjangoJSONEncoder from django.core.files.base import ContentFile -from bookwyrm import models +from bookwyrm.models import AnnualGoal, ReadThrough, ShelfBook, Shelf, List, ListItem +from bookwyrm.models import Review, Comment, Quotation +from bookwyrm.models import Edition, Book +from bookwyrm.models import UserFollows, User, UserBlocks from bookwyrm.models.job import ParentJob, ParentTask from bookwyrm.settings import DOMAIN from bookwyrm.tasks import app, IMPORTS From 93a7dd9cf3ee3b67982ab63965050c67ee2bc829 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 07:50:28 -0800 Subject: [PATCH 127/458] Erase user data and statuses on account deletion --- bookwyrm/models/user.py | 24 ++++++++++++++- bookwyrm/tests/models/test_user_model.py | 38 ++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index c152cf445..625a7d289 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -1,6 +1,7 @@ """ database schema for user data """ import re from urllib.parse import urlparse +from uuid import uuid4 from django.apps import apps from django.contrib.auth.models import AbstractUser @@ -394,10 +395,31 @@ class User(OrderedCollectionPageMixin, AbstractUser): """We don't actually delete the database entry""" # pylint: disable=attribute-defined-outside-init self.is_active = False - self.avatar = "" + self.allow_reactivation = False + + self.erase_user_data() + self.erase_user_statuses() + # skip the logic in this class's save() super().save(*args, **kwargs) + def erase_user_data(self): + """Wipe a user's custom data""" + # mangle email address + self.email = f"{uuid4()}@deleted.user" + + # erase data fields + self.avatar = "" + self.preview_image = "" + self.summary = None + self.name = None + self.favorites.set([]) + + def erase_user_statuses(self): + """Wipe the data on all the user's statuses""" + for status in self.status_set.all(): + status.delete() + def deactivate(self): """Disable the user but allow them to reactivate""" # pylint: disable=attribute-defined-outside-init diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 838dd2e49..de39d5467 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -26,6 +26,7 @@ class User(TestCase): local=True, localname="mouse", name="hi", + summary="a summary", bookwyrm_user=False, ) self.another_user = models.User.objects.create_user( @@ -218,19 +219,52 @@ class User(TestCase): @patch("bookwyrm.suggested_users.remove_user_task.delay") def test_delete_user(self, _): - """deactivate a user""" + """permanently delete a user""" self.assertTrue(self.user.is_active) + self.assertEqual(self.user.name, "hi") + self.assertEqual(self.user.summary, "a summary") + self.assertEqual(self.user.email, "mouse@mouse.mouse") with patch( "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as broadcast_mock: + ) as broadcast_mock, patch( + "bookwyrm.models.user.User.erase_user_statuses" + ) as erase_statuses_mock: self.user.delete() + self.assertEqual(erase_statuses_mock.call_count, 1) + + # make sure the deletion is broadcast self.assertEqual(broadcast_mock.call_count, 1) activity = json.loads(broadcast_mock.call_args[1]["args"][1]) self.assertEqual(activity["type"], "Delete") self.assertEqual(activity["object"], self.user.remote_id) + + self.user.refresh_from_db() + + # the user's account data should be deleted + self.assertIsNone(self.user.name) + self.assertIsNone(self.user.summary) + self.assertNotEqual(self.user.email, "mouse@mouse.mouse") self.assertFalse(self.user.is_active) + @patch("bookwyrm.suggested_users.remove_user_task.delay") + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + @patch("bookwyrm.activitystreams.add_status_task.delay") + @patch("bookwyrm.activitystreams.remove_status_task.delay") + def test_delete_user_erase_statuses(self, *_): + """erase user statuses when user is deleted""" + status = models.Status.objects.create(user=self.user, content="hello") + self.assertFalse(status.deleted) + self.assertIsNotNone(status.content) + self.assertIsNone(status.deleted_date) + + self.user.delete() + status.refresh_from_db() + + self.assertTrue(status.deleted) + self.assertIsNone(status.content) + self.assertIsNotNone(status.deleted_date) + def test_admins_no_admins(self): """list of admins""" result = models.User.admins() From 5e42afd85a94c5a7ab6d216533acd5f06c14f54a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 08:10:03 -0800 Subject: [PATCH 128/458] Pass args and kwargs through status deletion --- bookwyrm/models/status.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 11646431b..cc44fe2bf 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -102,7 +102,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): if hasattr(self, "quotation"): self.quotation = None # pylint: disable=attribute-defined-outside-init self.deleted_date = timezone.now() - self.save() + self.save(*args, **kwargs) @property def recipients(self): From 61caeed5a3bcf9508524963489896488b52f7ef2 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 08:51:42 -0800 Subject: [PATCH 129/458] Adds migration and more tests --- .../migrations/0183_auto_20231105_1607.py | 25 ++++++++ bookwyrm/models/user.py | 27 ++++++++- bookwyrm/tests/models/test_user_model.py | 57 +++++++++++++++++++ 3 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 bookwyrm/migrations/0183_auto_20231105_1607.py diff --git a/bookwyrm/migrations/0183_auto_20231105_1607.py b/bookwyrm/migrations/0183_auto_20231105_1607.py new file mode 100644 index 000000000..390b56a9f --- /dev/null +++ b/bookwyrm/migrations/0183_auto_20231105_1607.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.20 on 2023-11-05 16:07 + +from django.db import migrations +from bookwyrm.models import User + + +def erase_deleted_user_data(apps, schema_editor): + """Retroactively clear user data""" + for user in User.get_permanently_deleted_users(): + user.erase_user_data() + user.save(broadcast=False) + user.erase_user_statuses(broadcast=False) + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0182_auto_20231027_1122"), + ] + + operations = [ + migrations.RunPython( + erase_deleted_user_data, reverse_code=migrations.RunPython.noop + ) + ] diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 625a7d289..017db31d3 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -8,7 +8,7 @@ from django.contrib.auth.models import AbstractUser from django.contrib.postgres.fields import ArrayField, CICharField from django.core.exceptions import PermissionDenied, ObjectDoesNotExist from django.dispatch import receiver -from django.db import models, transaction +from django.db import models, transaction, IntegrityError from django.utils import timezone from django.utils.translation import gettext_lazy as _ from model_utils import FieldTracker @@ -263,6 +263,13 @@ class User(OrderedCollectionPageMixin, AbstractUser): is_active=True, ).distinct() + @classmethod + def get_permanently_deleted_users(cls): + return cls.objects.filter( + is_active=False, + deactivation_reason__in=["self_deletion", "moderator_deletion"], + ).distinct() + def update_active_date(self): """this user is here! they are doing things!""" self.last_active_date = timezone.now() @@ -415,10 +422,24 @@ class User(OrderedCollectionPageMixin, AbstractUser): self.name = None self.favorites.set([]) - def erase_user_statuses(self): + def erase_user_statuses(self, broadcast=True): """Wipe the data on all the user's statuses""" + # safety valve: make sure the user is deleted + if not self.is_permanently_deleted: + raise IntegrityError( + "Attempted to delete statuses for improperly deleted user" + ) + for status in self.status_set.all(): - status.delete() + status.delete(broadcast=broadcast) + + @property + def is_permanently_deleted(self): + """is this user inactive, or really truly deleted?""" + return not self.is_active and self.deactivation_reason in [ + "self_deletion", + "moderator_deletion", + ] def deactivate(self): """Disable the user but allow them to reactivate""" diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index de39d5467..47db1bc9a 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -2,6 +2,7 @@ import json from unittest.mock import patch from django.contrib.auth.models import Group +from django.db import IntegrityError from django.test import TestCase import responses @@ -265,6 +266,25 @@ class User(TestCase): self.assertIsNone(status.content) self.assertIsNotNone(status.deleted_date) + @patch("bookwyrm.suggested_users.remove_user_task.delay") + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + @patch("bookwyrm.activitystreams.add_status_task.delay") + def test_delete_user_erase_statuses(self, *_): + """erase user statuses when user is deleted""" + status = models.Status.objects.create(user=self.user, content="hello") + self.assertFalse(status.deleted) + self.assertIsNotNone(status.content) + self.assertIsNone(status.deleted_date) + + self.user.deactivate() + with self.assertRaises(IntegrityError): + self.user.erase_user_statuses() + + status.refresh_from_db() + self.assertFalse(status.deleted) + self.assertIsNotNone(status.content) + self.assertIsNone(status.deleted_date) + def test_admins_no_admins(self): """list of admins""" result = models.User.admins() @@ -302,3 +322,40 @@ class User(TestCase): results = models.User.admins() self.assertEqual(results.count(), 1) self.assertEqual(results.first(), self.user) + + def test_get_permanently_deleted_users(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"): + active_user = models.User.objects.create_user( + f"activeuser@{DOMAIN}", + "activeuser@activeuser.activeuser", + "activeuserword", + local=True, + localname="active", + ) + 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", + ) + 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", + ) + + deleted_users = models.User.get_permanently_deleted_users() + + self.assertTrue(deleted_users.filter(localname="deleted").exists()) + self.assertFalse(deleted_users.filter(localname="active").exists()) + self.assertFalse(deleted_users.filter(localname="inactive").exists()) From 4de99074566a233cd765c8e41a0e9f5047296ac9 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 09:25:50 -0800 Subject: [PATCH 130/458] Adds migration tests --- .../migrations/0183_auto_20231105_1607.py | 5 +- bookwyrm/models/user.py | 10 +- bookwyrm/tests/migrations/test_0183.py | 126 ++++++++++++++++++ 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 bookwyrm/tests/migrations/test_0183.py diff --git a/bookwyrm/migrations/0183_auto_20231105_1607.py b/bookwyrm/migrations/0183_auto_20231105_1607.py index 390b56a9f..2716a0737 100644 --- a/bookwyrm/migrations/0183_auto_20231105_1607.py +++ b/bookwyrm/migrations/0183_auto_20231105_1607.py @@ -8,7 +8,10 @@ def erase_deleted_user_data(apps, schema_editor): """Retroactively clear user data""" for user in User.get_permanently_deleted_users(): user.erase_user_data() - user.save(broadcast=False) + user.save( + broadcast=False, + update_fields=["email", "avatar", "preview_image", "summary", "name"], + ) user.erase_user_statuses(broadcast=False) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 017db31d3..43df39291 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -408,10 +408,18 @@ class User(OrderedCollectionPageMixin, AbstractUser): self.erase_user_statuses() # skip the logic in this class's save() - super().save(*args, **kwargs) + super().save( + *args, + update_fields=["email", "avatar", "preview_image", "summary", "name"], + **kwargs, + ) def erase_user_data(self): """Wipe a user's custom data""" + if not self.is_permanently_deleted: + raise IntegrityError( + "Attempted to delete user data for improperly deleted user" + ) # mangle email address self.email = f"{uuid4()}@deleted.user" diff --git a/bookwyrm/tests/migrations/test_0183.py b/bookwyrm/tests/migrations/test_0183.py new file mode 100644 index 000000000..8c8f27d5a --- /dev/null +++ b/bookwyrm/tests/migrations/test_0183.py @@ -0,0 +1,126 @@ +""" testing migrations """ +import json +from unittest.mock import patch + +from django.apps import apps +from django.test import TestCase +from django.db.migrations.executor import MigrationExecutor +from django.db import connection +import responses + +from bookwyrm import models +from bookwyrm.management.commands import initdb +from bookwyrm.settings import USE_HTTPS, DOMAIN + +# pylint: disable=missing-class-docstring +# pylint: disable=missing-function-docstring +class EraseDeletedUserDataMigration(TestCase): + + migrate_from = "0182_auto_20231027_1122" + migrate_to = "0183_auto_20231105_1607" + + # 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() + + assert ( + self.migrate_from and self.migrate_to + ), "TestCase '{}' must define migrate_from and migrate_to properties".format( + type(self).__name__ + ) + 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.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.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.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) From 47953c84d7823aaf6102fb85409fd70d53b6e9aa Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 09:49:38 -0800 Subject: [PATCH 131/458] Fixes linting errors Apparently I didn't have a linter working! --- bookwyrm/tests/models/test_user_model.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 47db1bc9a..3576417de 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -1,5 +1,6 @@ """ testing models """ import json + from unittest.mock import patch from django.contrib.auth.models import Group from django.db import IntegrityError @@ -10,9 +11,11 @@ from bookwyrm import models from bookwyrm.management.commands import initdb from bookwyrm.settings import USE_HTTPS, DOMAIN + # pylint: disable=missing-class-docstring # pylint: disable=missing-function-docstring class User(TestCase): + protocol = "https://" if USE_HTTPS else "http://" # pylint: disable=invalid-name @@ -269,7 +272,7 @@ class User(TestCase): @patch("bookwyrm.suggested_users.remove_user_task.delay") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") @patch("bookwyrm.activitystreams.add_status_task.delay") - def test_delete_user_erase_statuses(self, *_): + def test_delete_user_erase_statuses_invalid(self, *_): """erase user statuses when user is deleted""" status = models.Status.objects.create(user=self.user, content="hello") self.assertFalse(status.deleted) @@ -328,14 +331,14 @@ class User(TestCase): with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): - active_user = models.User.objects.create_user( + models.User.objects.create_user( f"activeuser@{DOMAIN}", "activeuser@activeuser.activeuser", "activeuserword", local=True, localname="active", ) - deleted_user = models.User.objects.create_user( + models.User.objects.create_user( f"deleteduser@{DOMAIN}", "deleteduser@deleteduser.deleteduser", "deleteduserword", @@ -344,7 +347,7 @@ class User(TestCase): is_active=False, deactivation_reason="self_deletion", ) - inactive_user = models.User.objects.create_user( + models.User.objects.create_user( f"inactiveuser@{DOMAIN}", "inactiveuser@inactiveuser.inactiveuser", "inactiveuserword", From f353b49d36b5778fefdc820f8adf529ce1d2b055 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 09:53:57 -0800 Subject: [PATCH 132/458] Another linting issues --- bookwyrm/models/user.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 43df39291..48f536ed1 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -265,6 +265,7 @@ class User(OrderedCollectionPageMixin, AbstractUser): @classmethod def get_permanently_deleted_users(cls): + """a list of users who are permanently deleted""" return cls.objects.filter( is_active=False, deactivation_reason__in=["self_deletion", "moderator_deletion"], From d3668e413db48be6495ff2d8c1f02337158d52f8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 09:59:49 -0800 Subject: [PATCH 133/458] Removes updates fields that was causing problems --- bookwyrm/models/user.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 48f536ed1..b9e9ae486 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -411,7 +411,6 @@ class User(OrderedCollectionPageMixin, AbstractUser): # skip the logic in this class's save() super().save( *args, - update_fields=["email", "avatar", "preview_image", "summary", "name"], **kwargs, ) From c17a2ec55ba18d52c5f83a19e1d30550063151a4 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 5 Nov 2023 10:18:04 -0800 Subject: [PATCH 134/458] Creates snippet for user tag in admin view The existing display wasn't showing the correct colors and was repeating code unnecessarily --- .../templates/settings/users/user_admin.html | 26 +------------------ .../templates/settings/users/user_info.html | 19 +------------- .../templates/snippets/user_active_tag.html | 17 ++++++++++++ .../snippets/user_active_tag_item.html | 19 ++++++++++++++ 4 files changed, 38 insertions(+), 43 deletions(-) create mode 100644 bookwyrm/templates/snippets/user_active_tag.html create mode 100644 bookwyrm/templates/snippets/user_active_tag_item.html diff --git a/bookwyrm/templates/settings/users/user_admin.html b/bookwyrm/templates/settings/users/user_admin.html index a1d93ddd0..cc5c51ba7 100644 --- a/bookwyrm/templates/settings/users/user_admin.html +++ b/bookwyrm/templates/settings/users/user_admin.html @@ -74,31 +74,7 @@
    {% if status == "federated" %}
    {% trans "ID" %} {{ import.status }}
    {{ user.created_date }} {{ user.last_active_date }} - {% if user.is_active %} - {% if user.moved_to %} - - {% trans "Moved" %} - {% else %} - - {% trans "Active" %} - {% endif %} - {% elif user.deactivation_reason == "moderator_deletion" or user.deactivation_reason == "self_deletion" %} - - {% trans "Deleted" %} - ({{ user.get_deactivation_reason_display }}) - {% else %} - - {% trans "Inactive" %} - ({{ user.get_deactivation_reason_display }}) - {% endif %} + {% include "snippets/user_active_tag.html" with user=user %} diff --git a/bookwyrm/templates/settings/users/user_info.html b/bookwyrm/templates/settings/users/user_info.html index 368045a0d..f35c60db9 100644 --- a/bookwyrm/templates/settings/users/user_info.html +++ b/bookwyrm/templates/settings/users/user_info.html @@ -23,24 +23,7 @@

    {% trans "Status" %}

    - {% if user.is_active %} - {% if user.moved_to %} -

    - {% trans "Moved" %} -

    - {% else %} -

    - {% trans "Active" %} -

    - {% endif %} - {% else %} -

    - {% trans "Inactive" %} - {% if user.deactivation_reason %} - ({% trans user.get_deactivation_reason_display %}) - {% endif %} -

    - {% endif %} + {% include "snippets/user_active_tag.html" with large=True %}

    {% if user.local %} {% trans "Local" %} diff --git a/bookwyrm/templates/snippets/user_active_tag.html b/bookwyrm/templates/snippets/user_active_tag.html new file mode 100644 index 000000000..c3f067b43 --- /dev/null +++ b/bookwyrm/templates/snippets/user_active_tag.html @@ -0,0 +1,17 @@ +{% load i18n %} + +{% if user.is_active %} + {% if user.moved_to %} + {% trans "Moved" as text %} + {% include "snippets/user_active_tag_item.html" with icon="x" text=text level="info" %} + {% else %} + {% trans "Active" as text %} + {% include "snippets/user_active_tag_item.html" with icon="check" text=text level="success" %} + {% endif %} +{% elif user.is_permanently_deleted %} + {% trans "Deleted" as text %} + {% include "snippets/user_active_tag_item.html" with icon="x" text=text level="danger" deactivation_reason=user.get_deactivation_reason_display %} +{% else %} + {% trans "Inactive" as text %} + {% include "snippets/user_active_tag_item.html" with icon="x" text=text level="warning" deactivation_reason=user.get_deactivation_reason_display %} +{% endif %} diff --git a/bookwyrm/templates/snippets/user_active_tag_item.html b/bookwyrm/templates/snippets/user_active_tag_item.html new file mode 100644 index 000000000..e722150f2 --- /dev/null +++ b/bookwyrm/templates/snippets/user_active_tag_item.html @@ -0,0 +1,19 @@ +{% if large %} + +

    + + {{ text }} + {% if deactivation_reason %} + ({{ deactivation_reason }}) + {% endif %} +

    + +{% else %} + + +{{ text }} + +{% endif %} + From d2f06e804ff03561167b29de2befa0403ae33aa9 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 6 Nov 2023 12:07:40 +1100 Subject: [PATCH 135/458] update references to bookwyrm models in export job --- bookwyrm/models/bookwyrm_export_job.py | 36 +++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 4b0abd73f..d91ef6257 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -94,7 +94,7 @@ def json_export(user): # pylint: disable=too-many-locals, too-many-statements exported_user["avatar"] = f'https://{DOMAIN}{getattr(user, "avatar").url}' # reading goals - reading_goals = models.AnnualGoal.objects.filter(user=user).distinct() + reading_goals = AnnualGoal.objects.filter(user=user).distinct() goals_list = [] # TODO: either error checking should be more sophisticated # or maybe we don't need this try/except @@ -107,7 +107,7 @@ def json_export(user): # pylint: disable=too-many-locals, too-many-statements pass try: - readthroughs = models.ReadThrough.objects.filter(user=user).distinct().values() + readthroughs = ReadThrough.objects.filter(user=user).distinct().values() readthroughs = list(readthroughs) except Exception: # pylint: disable=broad-except readthroughs = [] @@ -123,16 +123,16 @@ def json_export(user): # pylint: disable=too-many-locals, too-many-statements book["authors"] = list(edition.first().authors.all().values()) # readthroughs book_readthroughs = ( - models.ReadThrough.objects.filter(user=user, book=book["id"]) + ReadThrough.objects.filter(user=user, book=book["id"]) .distinct() .values() ) book["readthroughs"] = list(book_readthroughs) # shelves - shelf_books = models.ShelfBook.objects.filter( + shelf_books = ShelfBook.objects.filter( user=user, book=book["id"] ).distinct() - shelves_from_books = models.Shelf.objects.filter( + shelves_from_books = Shelf.objects.filter( shelfbook__in=shelf_books, user=user ) @@ -140,34 +140,34 @@ def json_export(user): # pylint: disable=too-many-locals, too-many-statements book["shelf_books"] = {} for shelf in shelves_from_books: - shelf_contents = models.ShelfBook.objects.filter( + shelf_contents = ShelfBook.objects.filter( user=user, shelf=shelf ).distinct() book["shelf_books"][shelf.identifier] = list(shelf_contents.values()) # book lists - book_lists = models.List.objects.filter( + book_lists = List.objects.filter( books__in=[book["id"]], user=user ).distinct() book["lists"] = list(book_lists.values()) book["list_items"] = {} for blist in book_lists: - list_items = models.ListItem.objects.filter(book_list=blist).distinct() + list_items = ListItem.objects.filter(book_list=blist).distinct() book["list_items"][blist.name] = list(list_items.values()) # reviews - reviews = models.Review.objects.filter(user=user, book=book["id"]).distinct() + reviews = Review.objects.filter(user=user, book=book["id"]).distinct() book["reviews"] = list(reviews.values()) # comments - comments = models.Comment.objects.filter(user=user, book=book["id"]).distinct() + comments = Comment.objects.filter(user=user, book=book["id"]).distinct() book["comments"] = list(comments.values()) # quotes - quotes = models.Quotation.objects.filter(user=user, book=book["id"]).distinct() + quotes = Quotation.objects.filter(user=user, book=book["id"]).distinct() book["quotes"] = list(quotes.values()) @@ -175,19 +175,19 @@ def json_export(user): # pylint: disable=too-many-locals, too-many-statements final_books.append(book) # saved book lists - saved_lists = models.List.objects.filter(id__in=user.saved_lists.all()).distinct() + saved_lists = List.objects.filter(id__in=user.saved_lists.all()).distinct() saved_lists = [l.remote_id for l in saved_lists] # follows - follows = models.UserFollows.objects.filter(user_subject=user).distinct() - following = models.User.objects.filter( + follows = UserFollows.objects.filter(user_subject=user).distinct() + following = User.objects.filter( userfollows_user_object__in=follows ).distinct() follows = [f.remote_id for f in following] # blocks - blocks = models.UserBlocks.objects.filter(user_subject=user).distinct() - blocking = models.User.objects.filter(userblocks_user_object__in=blocks).distinct() + blocks = UserBlocks.objects.filter(user_subject=user).distinct() + blocking = User.objects.filter(userblocks_user_object__in=blocks).distinct() blocks = [b.remote_id for b in blocking] @@ -207,7 +207,7 @@ def get_books_for_user(user): """Get all the books and editions related to a user :returns: tuple of editions, books """ - all_books = models.Edition.viewer_aware_objects(user) + all_books = Edition.viewer_aware_objects(user) editions = all_books.filter( Q(shelves__user=user) | Q(readthrough__user=user) @@ -216,5 +216,5 @@ def get_books_for_user(user): | Q(comment__user=user) | Q(quotation__user=user) ).distinct() - books = models.Book.objects.filter(id__in=editions).distinct() + books = Book.objects.filter(id__in=editions).distinct() return editions, books From 93a32f4e1551c3c8843ff3f8a306b1ba7ba5960c Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 6 Nov 2023 14:40:19 +1100 Subject: [PATCH 136/458] update import/export user templates - always explain what export file can be used for - provide more information about overwrite vs upsert when importing --- bookwyrm/templates/import/import_user.html | 29 +++++++++++++++++-- .../templates/preferences/export-user.html | 8 ++--- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/bookwyrm/templates/import/import_user.html b/bookwyrm/templates/import/import_user.html index 8e7bb1a09..1871da84f 100644 --- a/bookwyrm/templates/import/import_user.html +++ b/bookwyrm/templates/import/import_user.html @@ -38,9 +38,32 @@ {{ import_form.archive_file }}
    -
    -

    {% trans "Importing this file will overwrite any data you currently have saved." %}

    -

    {% trans "Deselect any data you do not wish to include in your import. Books will always be imported" %}

    +
    + {% blocktrans trimmed %} +

    Deselect any checkboxes for data you do not wish to include in your import.

    +

    Importing this file will not delete any data but will overwrite the following information:

    +
      +
    • Profile
    • +
        +
      • name
      • +
      • summary
      • +
      • avatar
      • +
      +
    • Settings
    • +
        +
      • whether manual approval is required for other users to follow your account
      • +
      • whether following/followers are shown on your profile
      • +
      • whether your reading goal is shown on your profile
      • +
      • whether you see user follow suggestions
      • +
      • whether your account is suggested to others
      • +
      • your timezone
      • +
      • your default post privacy setting
      • +
      +
    • Reading goals for all years listed in the import file
    • +
    +

    All other imported data will be added if it does not already exist. For example, if you have an existing list with the same name as an imported list, the existing list settings will not change, any new list items will be added, and no existing list items will be deleted.

    + + {% endblocktrans %}
    diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 2f63c9e1c..437b6c7be 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -9,16 +9,16 @@ {% block panel %}
    +

    + {% trans "Your exported archive file will include all user data for import into another Bookwyrm server" %} +

    {% if next_available %}

    - {% blocktrans %} + {% blocktrans trimmed %} You will be able to create a new export file at {{ next_available }} {% endblocktrans %}

    {% else %} -

    - {% trans "Your exported archive file will include all user data for import into another Bookwyrm server" %} -

    {% csrf_token %} - {% endif %} -
    {% if not minimal %}
    - {% include 'snippets/user_options.html' with user=user class="is-small" %} + {% include 'snippets/user_options.html' with user=user followers_page=followers_page class="is-small" %}
    {% endif %}
    diff --git a/bookwyrm/templates/snippets/remove_follower_button.html b/bookwyrm/templates/snippets/remove_follower_button.html new file mode 100644 index 000000000..28bef6842 --- /dev/null +++ b/bookwyrm/templates/snippets/remove_follower_button.html @@ -0,0 +1,5 @@ +{% load i18n %} + + {% csrf_token %} + + diff --git a/bookwyrm/templates/snippets/user_options.html b/bookwyrm/templates/snippets/user_options.html index 35abc98c2..ab028a494 100644 --- a/bookwyrm/templates/snippets/user_options.html +++ b/bookwyrm/templates/snippets/user_options.html @@ -20,4 +20,9 @@
  • {% include 'snippets/block_button.html' with user=user class="is-fullwidth" blocks=False %}
  • +{% if followers_page %} +
  • + {% include 'snippets/remove_follower_button.html' with user=user class="is-fullwidth" blocks=False %} +
  • +{% endif %} {% endblock %} diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index d18e24f89..8d73a666c 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -180,6 +180,18 @@ class FollowViews(TestCase): # follow relationship should not exist self.assertEqual(models.UserFollows.objects.filter(id=rel.id).count(), 0) + def test_handle_reject_existing(self, *_): + """reject a follow previously approved""" + request = self.factory.post("", {"user": self.remote_user.username}) + request.user = self.local_user + rel = models.UserFollows.objects.create( + user_subject=self.remote_user, user_object=self.local_user + ) + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + views.remove_follow(request, self.remote_user.id) + # follow relationship should not exist + self.assertEqual(models.UserFollows.objects.filter(id=rel.id).count(), 0) + def test_ostatus_follow_request(self, *_): """check ostatus subscribe template loads""" request = self.factory.get( diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index ab1dca378..41eff3b8c 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -763,7 +763,9 @@ urlpatterns = [ # following re_path(r"^follow/?$", views.follow, name="follow"), re_path(r"^unfollow/?$", views.unfollow, name="unfollow"), - re_path(r"^remove-follow/?$", views.remove_follow, name="remove-follow"), + re_path( + r"^remove-follow/(?P\d+)/?$", views.remove_follow, name="remove-follow" + ), re_path(r"^accept-follow-request/?$", views.accept_follow_request), re_path(r"^delete-follow-request/?$", views.delete_follow_request), re_path(r"^ostatus_follow/?$", views.remote_follow, name="remote-follow"), diff --git a/bookwyrm/views/follow.py b/bookwyrm/views/follow.py index f9a09e2c9..dcb1c695c 100644 --- a/bookwyrm/views/follow.py +++ b/bookwyrm/views/follow.py @@ -71,11 +71,10 @@ def unfollow(request): @login_required @require_POST -def remove_follow(request): +def remove_follow(request, user_id): """remove a previously approved follower without blocking them""" - username = request.POST["user"] - to_remove = get_user_from_username(request.user, username) + to_remove = get_object_or_404(models.User, id=user_id) try: models.UserFollows.objects.get( @@ -93,8 +92,8 @@ def remove_follow(request): if is_api_request(request): return HttpResponse() - # this is handled with ajax so it shouldn't really matter - return redirect("/") + + return redirect(f"{request.user.local_path}/followers") @login_required @@ -128,7 +127,7 @@ def delete_follow_request(request): ) follow_request.raise_not_deletable(request.user) - follow_request.delete() + follow_request.reject() return redirect(f"/user/{request.user.localname}") From 8ed4a997f8f81a4a5be020151fba7f741c8a0b3a Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Tue, 21 Nov 2023 20:20:11 +1100 Subject: [PATCH 188/458] add comment back to bookwyrm.js --- bookwyrm/static/js/bookwyrm.js | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index dcde9cc72..a2351a98c 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -332,6 +332,7 @@ let BookWyrm = new (class { const form = event.currentTarget; const relatedforms = document.querySelectorAll(`.${form.dataset.id}`); + // Toggle class on all related forms. relatedforms.forEach((relatedForm) => bookwyrm.addRemoveClass( relatedForm, From 6ba74181214e253924f022b2e537e7772eaadfe1 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 22 Nov 2023 20:04:17 +1100 Subject: [PATCH 189/458] improve tests and minor cleanup --- bookwyrm/templates/snippets/user_options.html | 2 +- bookwyrm/tests/views/test_follow.py | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/snippets/user_options.html b/bookwyrm/templates/snippets/user_options.html index ab028a494..0e15e413a 100644 --- a/bookwyrm/templates/snippets/user_options.html +++ b/bookwyrm/templates/snippets/user_options.html @@ -22,7 +22,7 @@ {% if followers_page %}
  • - {% include 'snippets/remove_follower_button.html' with user=user class="is-fullwidth" blocks=False %} + {% include 'snippets/remove_follower_button.html' with user=user class="is-fullwidth" %}
  • {% endif %} {% endblock %} diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index 8d73a666c..d88a42210 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -173,8 +173,15 @@ class FollowViews(TestCase): user_subject=self.remote_user, user_object=self.local_user ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as broadcast_mock: views.delete_follow_request(request) + # did we send the reject activity? + activity = json.loads(broadcast_mock.call_args[1]["args"][1]) + self.assertEqual(activity["actor"], self.local_user.remote_id) + self.assertEqual(activity["object"]["object"], rel.user_object.remote_id) + self.assertEqual(activity["type"], "Reject") # request should be deleted self.assertEqual(models.UserFollowRequest.objects.filter(id=rel.id).count(), 0) # follow relationship should not exist @@ -187,8 +194,15 @@ class FollowViews(TestCase): rel = models.UserFollows.objects.create( user_subject=self.remote_user, user_object=self.local_user ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as broadcast_mock: views.remove_follow(request, self.remote_user.id) + # did we send the reject activity? + activity = json.loads(broadcast_mock.call_args[1]["args"][1]) + self.assertEqual(activity["actor"], self.local_user.remote_id) + self.assertEqual(activity["object"]["object"], rel.user_object.remote_id) + self.assertEqual(activity["type"], "Reject") # follow relationship should not exist self.assertEqual(models.UserFollows.objects.filter(id=rel.id).count(), 0) From 72c1c6ee3dcee865678dda66b5621519bc7e5a0f Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 22 Nov 2023 21:29:54 +1100 Subject: [PATCH 190/458] merge migrations and lint --- ...erge_0186_auto_20231116_0048_0188_theme_loads.py | 13 +++++++++++++ bookwyrm/templatetags/utilities.py | 3 +-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 bookwyrm/migrations/0189_merge_0186_auto_20231116_0048_0188_theme_loads.py 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 000000000..eb6238f6e --- /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/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index 6618b55f6..fca66688a 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -127,12 +127,11 @@ def id_to_username(user_id): return value - + @register.filter(name="get_file_size") def get_file_size(file): """display the size of a file in human readable terms""" - try: raw_size = os.stat(file.path).st_size if raw_size < 1024: From 99a9a64708c50993474c6ed11578fbd402d6f14d Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Fri, 24 Nov 2023 06:50:32 +1100 Subject: [PATCH 191/458] notification type migration after merge --- ...90_alter_notification_notification_type.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 bookwyrm/migrations/0190_alter_notification_notification_type.py 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 000000000..aff54c77b --- /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, + ), + ), + ] From e322d3cae1720504814b2fa6afd39fdab0390d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Thu, 23 Nov 2023 17:05:18 -0300 Subject: [PATCH 192/458] Do not create a set for already-distinct query result --- bookwyrm/book_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index ceb228f40..3012482fd 100644 --- a/bookwyrm/book_search.py +++ b/bookwyrm/book_search.py @@ -137,7 +137,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") From c997d2d44aebd258ba4f45975f16b1940a799199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 24 Nov 2023 02:18:18 -0300 Subject: [PATCH 193/458] Add test to assert distinct() clause Also, tweak other `search_title_author()` tests to verify ordering by edition rank. --- bookwyrm/tests/test_book_search.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index db6ba8353..ad954f585 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -26,10 +26,10 @@ class BookSearch(TestCase): 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", ) @@ -76,16 +76,21 @@ class BookSearch(TestCase): 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""" From 0299f2e2352773c53155ae815cd0a525d6408fe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 24 Nov 2023 21:18:43 -0300 Subject: [PATCH 194/458] Add functional tests for search_vector triggers As metadata changes, search continues to work. --- bookwyrm/tests/test_book_search.py | 83 ++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index db6ba8353..2baff9bf1 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -134,3 +134,86 @@ class BookSearch(TestCase): # there's really not much to test here, it's just a dataclass self.assertEqual(result.confidence, 1) self.assertEqual(result.title, "Title") + + +class SearchVectorTriggers(TestCase): + """look for books as they change""" + + def setUp(self): + """we need basic test data and mocks""" + self.work = models.Work.objects.create(title="This Work") + self.author = models.Author.objects.create(name="Name") + self.edition = models.Edition.objects.create( + title="First Edition of Work", + subtitle="Some Extra Words Are Good", + series="A Fabulous Sequence of Items", + parent_work=self.work, + isbn_10="0000000000", + ) + self.edition.authors.add(self.author) + self.edition.save(broadcast=False) + + def test_search_after_changed_metadata(self): + """book found after updating metadata""" + self.assertEqual(self.edition, self._search_first("First")) # title + self.assertEqual(self.edition, self._search_first("Good")) # subtitle + self.assertEqual(self.edition, self._search_first("Sequence")) # series + + self.edition.title = "Second Title of Work" + self.edition.subtitle = "Fewer Words Is Better" + self.edition.series = "A Wondrous Bunch" + self.edition.save(broadcast=False) + + self.assertEqual(self.edition, self._search_first("Second")) # title new + self.assertEqual(self.edition, self._search_first("Fewer")) # subtitle new + self.assertEqual(self.edition, self._search_first("Wondrous")) # series new + + self.assertFalse(self._search_first("First")) # title old + self.assertFalse(self._search_first("Good")) # subtitle old + self.assertFalse(self._search_first("Sequence")) # series old + + def test_search_after_author_remove(self): + """book not found via removed author""" + self.assertEqual(self.edition, self._search_first("Name")) + + self.edition.authors.set([]) + self.edition.save(broadcast=False) + + self.assertFalse(self._search("Name")) + self.assertEqual(self.edition, self._search_first("Edition")) + + def test_search_after_author_add(self): + """book found by newly-added author""" + new_author = models.Author.objects.create(name="Mozilla") + + self.assertFalse(self._search("Mozilla")) + + self.edition.authors.add(new_author) + self.edition.save(broadcast=False) + + self.assertEqual(self.edition, self._search_first("Mozilla")) + self.assertEqual(self.edition, self._search_first("Name")) + + def test_search_after_updated_author_name(self): + """book found under new author name""" + self.assertEqual(self.edition, self._search_first("Name")) + self.assertFalse(self._search("Identifier")) + + self.author.name = "Identifier" + self.author.save(broadcast=False) + self.edition.refresh_from_db() + + self.assertFalse(self._search("Name")) + self.assertEqual(self.edition, self._search_first("Identifier")) + self.assertEqual(self.edition, self._search_first("Work")) + + def _search_first(self, query): + """wrapper around search_title_author""" + return self._search(query, return_first=True) + + # pylint: disable-next=no-self-use + def _search(self, query, *, return_first=False): + """wrapper around search_title_author""" + return book_search.search_title_author( + query, min_confidence=0, return_first=return_first + ) From e4d688665c7d54912b73752a270c4d4ead2a63b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 24 Nov 2023 14:15:00 -0300 Subject: [PATCH 195/458] Remove index for `author.search_vector`, which is never used --- bookwyrm/migrations/0190_book_search_updates.py | 16 ++++++++++++++++ bookwyrm/models/author.py | 6 ------ 2 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 bookwyrm/migrations/0190_book_search_updates.py diff --git a/bookwyrm/migrations/0190_book_search_updates.py b/bookwyrm/migrations/0190_book_search_updates.py new file mode 100644 index 000000000..52d80fcb9 --- /dev/null +++ b/bookwyrm/migrations/0190_book_search_updates.py @@ -0,0 +1,16 @@ +# Generated by Django 3.2.20 on 2023-11-24 17:11 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("bookwyrm", "0188_theme_loads"), + ] + + operations = [ + migrations.RemoveIndex( + model_name="author", + name="bookwyrm_au_search__b050a8_gin", + ), + ] diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 981e3c0cc..b4488d46a 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -2,7 +2,6 @@ import re from typing import Tuple, Any -from django.contrib.postgres.indexes import GinIndex from django.db import models from bookwyrm import activitypub @@ -68,8 +67,3 @@ class Author(BookDataModel): return f"https://{DOMAIN}/author/{self.id}" activity_serializer = activitypub.Author - - class Meta: - """sets up postgres GIN index field""" - - indexes = (GinIndex(fields=["search_vector"]),) From 44ef928c3ceb8ce9b4426113551baa53563630f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 25 Nov 2023 16:08:36 -0300 Subject: [PATCH 196/458] Alter object row IDs to force test failure in original code --- bookwyrm/tests/test_book_search.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index 2baff9bf1..e66ea97be 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -1,5 +1,7 @@ """ test searching for books """ import datetime +from unittest import expectedFailure +from django.db import connection from django.test import TestCase from django.utils import timezone @@ -153,6 +155,17 @@ class SearchVectorTriggers(TestCase): self.edition.authors.add(self.author) self.edition.save(broadcast=False) + @classmethod + def setUpTestData(cls): + """create conditions that trigger known old bugs""" + with connection.cursor() as cursor: + cursor.execute( + """ + ALTER SEQUENCE bookwyrm_author_id_seq RESTART WITH 20; + ALTER SEQUENCE bookwyrm_book_authors_id_seq RESTART WITH 300; + """ + ) + def test_search_after_changed_metadata(self): """book found after updating metadata""" self.assertEqual(self.edition, self._search_first("First")) # title @@ -194,6 +207,7 @@ class SearchVectorTriggers(TestCase): self.assertEqual(self.edition, self._search_first("Mozilla")) self.assertEqual(self.edition, self._search_first("Name")) + @expectedFailure def test_search_after_updated_author_name(self): """book found under new author name""" self.assertEqual(self.edition, self._search_first("Name")) From 416a6caf2d4124b884fd1a04841908e572d92c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 24 Nov 2023 22:26:13 -0300 Subject: [PATCH 197/458] Define `author_search_vector_trigger` via Author.Meta.triggers Previously, triggers lived only in a particular migration file. With this change, code for the triggers resides in the model, and their lifecycle is managed through normal Django migrations. --- ...grate_search_vec_triggers_to_pgtriggers.py | 50 +++++++++++++++++++ bookwyrm/models/author.py | 29 +++++++++++ bookwyrm/settings.py | 1 + bookwyrm/utils/db.py | 22 ++++++++ requirements.txt | 1 + 5 files changed, 103 insertions(+) create mode 100644 bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py create mode 100644 bookwyrm/utils/db.py diff --git a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py new file mode 100644 index 000000000..10354fa67 --- /dev/null +++ b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py @@ -0,0 +1,50 @@ +# Generated by Django 3.2.20 on 2023-11-25 00:47 + +from importlib import import_module +import re + +from django.db import migrations +import pgtrigger.compiler +import pgtrigger.migrations + +trigger_migration = import_module("bookwyrm.migrations.0077_auto_20210623_2155") + +# it's _very_ convenient for development that this migration be reversible +search_vector_trigger = trigger_migration.Migration.operations[4] +author_search_vector_trigger = trigger_migration.Migration.operations[5] + + +assert re.search(r"\bCREATE TRIGGER search_vector_trigger\b", search_vector_trigger.sql) +assert re.search( + r"\bCREATE TRIGGER author_search_vector_trigger\b", + author_search_vector_trigger.sql, +) + + +class Migration(migrations.Migration): + dependencies = [ + ("bookwyrm", "0190_book_search_updates"), + ] + + operations = [ + pgtrigger.migrations.AddTrigger( + model_name="author", + trigger=pgtrigger.compiler.Trigger( + name="reset_search_vector_on_author_edit", + sql=pgtrigger.compiler.UpsertTriggerSql( + func="WITH book AS (SELECT bookwyrm_book.id AS row_id FROM bookwyrm_author LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book_authors.id = new.id LEFT OUTER JOIN bookwyrm_book ON bookwyrm_book.id = bookwyrm_book_authors.book_id) UPDATE bookwyrm_book SET search_vector = '' FROM book WHERE id = book.row_id;RETURN NEW;", + hash="9c0a472e2bf60e63d593cce49f47972c7b227a00", + operation='UPDATE OF "name"', + pgid="pgtrigger_reset_search_vector_on_author_edit_a447c", + table="bookwyrm_author", + when="AFTER", + ), + ), + ), + migrations.RunSQL( + sql="""DROP TRIGGER IF EXISTS author_search_vector_trigger ON bookwyrm_author; + DROP FUNCTION IF EXISTS author_trigger; + """, + reverse_sql=author_search_vector_trigger.sql, + ), + ] diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index b4488d46a..9b4f3c1bd 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -3,9 +3,11 @@ import re from typing import Tuple, Any from django.db import models +import pgtrigger from bookwyrm import activitypub from bookwyrm.settings import DOMAIN +from bookwyrm.utils.db import format_trigger from .book import BookDataModel from . import fields @@ -66,4 +68,31 @@ class Author(BookDataModel): """editions and works both use "book" instead of model_name""" return f"https://{DOMAIN}/author/{self.id}" + class Meta: + """sets up indexes and triggers""" + + triggers = [ + pgtrigger.Trigger( + name="reset_search_vector_on_author_edit", + when=pgtrigger.After, + operation=pgtrigger.UpdateOf("name"), + func=format_trigger( + """WITH book AS ( + SELECT bookwyrm_book.id AS row_id + FROM bookwyrm_author + LEFT OUTER JOIN bookwyrm_book_authors + ON bookwyrm_book_authors.id = new.id + LEFT OUTER JOIN bookwyrm_book + ON bookwyrm_book.id = bookwyrm_book_authors.book_id + ) + UPDATE bookwyrm_book + SET search_vector = '' + FROM book + WHERE id = book.row_id; + RETURN new; + """ + ), + ) + ] + activity_serializer = activitypub.Author diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 4cecc4df6..aaa50c56d 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -104,6 +104,7 @@ INSTALLED_APPS = [ "celery", "django_celery_beat", "imagekit", + "pgtrigger", "storages", ] diff --git a/bookwyrm/utils/db.py b/bookwyrm/utils/db.py new file mode 100644 index 000000000..8b74d9bf5 --- /dev/null +++ b/bookwyrm/utils/db.py @@ -0,0 +1,22 @@ +""" Database utilities """ + +from typing import cast +import sqlparse # type: ignore + + +def format_trigger(sql: str) -> str: + """format SQL trigger before storing + + we remove whitespace and use consistent casing so as to avoid migrations + due to formatting changes. + """ + return cast( + str, + sqlparse.format( + sql, + strip_comments=True, + strip_whitespace=True, + keyword_case="upper", + identifier_case="lower", + ), + ) diff --git a/requirements.txt b/requirements.txt index 36192f148..05fd9d2b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,6 +7,7 @@ django-celery-beat==2.4.0 django-compressor==4.3.1 django-imagekit==4.1.0 django-model-utils==4.3.1 +django-pgtrigger==4.10.0 django-sass-processor==1.2.2 django-csp==3.7 environs==9.5.0 From bcb3a343d4514fd9bc2674a918755aaa832c8886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 25 Nov 2023 01:49:14 -0300 Subject: [PATCH 198/458] Fix JOIN in `author_search_vector_trigger`, add missing WHERE clause --- .../0191_migrate_search_vec_triggers_to_pgtriggers.py | 4 ++-- bookwyrm/models/author.py | 3 ++- bookwyrm/tests/test_book_search.py | 2 -- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py index 10354fa67..1e51e529e 100644 --- a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py +++ b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py @@ -32,8 +32,8 @@ class Migration(migrations.Migration): trigger=pgtrigger.compiler.Trigger( name="reset_search_vector_on_author_edit", sql=pgtrigger.compiler.UpsertTriggerSql( - func="WITH book AS (SELECT bookwyrm_book.id AS row_id FROM bookwyrm_author LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book_authors.id = new.id LEFT OUTER JOIN bookwyrm_book ON bookwyrm_book.id = bookwyrm_book_authors.book_id) UPDATE bookwyrm_book SET search_vector = '' FROM book WHERE id = book.row_id;RETURN NEW;", - hash="9c0a472e2bf60e63d593cce49f47972c7b227a00", + func="WITH book AS (SELECT bookwyrm_book.id AS row_id FROM bookwyrm_author LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book_authors.author_id = bookwyrm_author.id LEFT OUTER JOIN bookwyrm_book ON bookwyrm_book.id = bookwyrm_book_authors.book_id WHERE bookwyrm_author.id = new.id ) UPDATE bookwyrm_book SET search_vector = '' FROM book WHERE id = book.row_id;RETURN NEW;", + hash="abc8ea76fa1bf02a0f56aaae390c1b970bef1278", operation='UPDATE OF "name"', pgid="pgtrigger_reset_search_vector_on_author_edit_a447c", table="bookwyrm_author", diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 9b4f3c1bd..6c5beba50 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -81,9 +81,10 @@ class Author(BookDataModel): SELECT bookwyrm_book.id AS row_id FROM bookwyrm_author LEFT OUTER JOIN bookwyrm_book_authors - ON bookwyrm_book_authors.id = new.id + ON bookwyrm_book_authors.author_id = bookwyrm_author.id LEFT OUTER JOIN bookwyrm_book ON bookwyrm_book.id = bookwyrm_book_authors.book_id + WHERE bookwyrm_author.id = new.id ) UPDATE bookwyrm_book SET search_vector = '' diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index e66ea97be..d2d5b692e 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -1,6 +1,5 @@ """ test searching for books """ import datetime -from unittest import expectedFailure from django.db import connection from django.test import TestCase from django.utils import timezone @@ -207,7 +206,6 @@ class SearchVectorTriggers(TestCase): self.assertEqual(self.edition, self._search_first("Mozilla")) self.assertEqual(self.edition, self._search_first("Name")) - @expectedFailure def test_search_after_updated_author_name(self): """book found under new author name""" self.assertEqual(self.edition, self._search_first("Name")) From 8df408e07eccefb934373f5c69b5068c1bee5046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 25 Nov 2023 16:46:54 -0300 Subject: [PATCH 199/458] Define `search_vector_trigger` via Book.Meta.triggers --- ...grate_search_vec_triggers_to_pgtriggers.py | 20 +++++++++++ bookwyrm/models/book.py | 33 ++++++++++++++++++- bookwyrm/tests/test_book_search.py | 1 - bookwyrm/utils/db.py | 1 + 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py index 1e51e529e..929063781 100644 --- a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py +++ b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py @@ -27,6 +27,20 @@ class Migration(migrations.Migration): ] operations = [ + pgtrigger.migrations.AddTrigger( + model_name="book", + trigger=pgtrigger.compiler.Trigger( + name="update_search_vector_on_book_edit", + sql=pgtrigger.compiler.UpsertTriggerSql( + func="new.search_vector := coalesce(nullif(setweight(to_tsvector('english', coalesce(new.title, '')), 'A'), ''), setweight(to_tsvector('simple', coalesce(new.title, '')), 'A')) || setweight(to_tsvector('english', coalesce(new.subtitle, '')), 'B') || (SELECT setweight(to_tsvector('simple', coalesce(array_to_string(array_agg(bookwyrm_author.name), ' '), '')), 'C') FROM bookwyrm_book LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book.id = bookwyrm_book_authors.book_id LEFT OUTER JOIN bookwyrm_author ON bookwyrm_book_authors.author_id = bookwyrm_author.id WHERE bookwyrm_book.id = new.id ) || setweight(to_tsvector('english', coalesce(new.series, '')), 'D');RETURN NEW;", + hash="9c898d46dfb7492ecd18f6c692bbecfa548f0e85", + operation='INSERT OR UPDATE OF "title", "subtitle", "series", "search_vector"', + pgid="pgtrigger_update_search_vector_on_book_edit_bec58", + table="bookwyrm_book", + when="BEFORE", + ), + ), + ), pgtrigger.migrations.AddTrigger( model_name="author", trigger=pgtrigger.compiler.Trigger( @@ -41,6 +55,12 @@ class Migration(migrations.Migration): ), ), ), + migrations.RunSQL( + sql="""DROP TRIGGER IF EXISTS search_vector_trigger ON bookwyrm_book; + DROP FUNCTION IF EXISTS book_trigger; + """, + reverse_sql=search_vector_trigger.sql, + ), migrations.RunSQL( sql="""DROP TRIGGER IF EXISTS author_search_vector_trigger ON bookwyrm_author; DROP FUNCTION IF EXISTS author_trigger; diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 6893b9da1..ed26752e3 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -13,6 +13,7 @@ from django.utils.translation import gettext_lazy as _ from model_utils import FieldTracker from model_utils.managers import InheritanceManager from imagekit.models import ImageSpecField +import pgtrigger from bookwyrm import activitypub from bookwyrm.isbn.isbn import hyphenator_singleton as hyphenator @@ -24,6 +25,7 @@ from bookwyrm.settings import ( ENABLE_PREVIEW_IMAGES, ENABLE_THUMBNAIL_GENERATION, ) +from bookwyrm.utils.db import format_trigger from .activitypub_mixin import OrderedCollectionPageMixin, ObjectMixin from .base_model import BookWyrmModel @@ -232,9 +234,38 @@ class Book(BookDataModel): ) class Meta: - """sets up postgres GIN index field""" + """set up indexes and triggers""" + + # pylint: disable=line-too-long indexes = (GinIndex(fields=["search_vector"]),) + triggers = [ + pgtrigger.Trigger( + name="update_search_vector_on_book_edit", + when=pgtrigger.Before, + operation=pgtrigger.Insert + | pgtrigger.UpdateOf("title", "subtitle", "series", "search_vector"), + func=format_trigger( + """new.search_vector := + COALESCE( + NULLIF(setweight(to_tsvector('english', COALESCE(new.title, '')), 'A'), ''), + setweight(to_tsvector('simple', COALESCE(new.title, '')), 'A') + ) || + setweight(to_tsvector('english', COALESCE(new.subtitle, '')), 'B') || + (SELECT setweight(to_tsvector('simple', COALESCE(array_to_string(ARRAY_AGG(bookwyrm_author.name), ' '), '')), 'C') + FROM bookwyrm_book + LEFT OUTER JOIN bookwyrm_book_authors + ON bookwyrm_book.id = bookwyrm_book_authors.book_id + LEFT OUTER JOIN bookwyrm_author + ON bookwyrm_book_authors.author_id = bookwyrm_author.id + WHERE bookwyrm_book.id = new.id + ) || + setweight(to_tsvector('english', COALESCE(new.series, '')), 'D'); + RETURN new; + """ + ), + ) + ] class Work(OrderedCollectionPageMixin, Book): diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index d2d5b692e..f9c75d279 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -213,7 +213,6 @@ class SearchVectorTriggers(TestCase): self.author.name = "Identifier" self.author.save(broadcast=False) - self.edition.refresh_from_db() self.assertFalse(self._search("Name")) self.assertEqual(self.edition, self._search_first("Identifier")) diff --git a/bookwyrm/utils/db.py b/bookwyrm/utils/db.py index 8b74d9bf5..2bb3b9ff6 100644 --- a/bookwyrm/utils/db.py +++ b/bookwyrm/utils/db.py @@ -16,6 +16,7 @@ def format_trigger(sql: str) -> str: sql, strip_comments=True, strip_whitespace=True, + use_space_around_operators=True, keyword_case="upper", identifier_case="lower", ), From 9bcb5b80ea9dd4f11cae26ad1fc752a7cb71dcde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 25 Nov 2023 18:13:05 -0300 Subject: [PATCH 200/458] Further simplify bookwyrm_author trigger --- ..._migrate_search_vec_triggers_to_pgtriggers.py | 4 ++-- bookwyrm/models/author.py | 16 ++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py index 929063781..ddfe74a8b 100644 --- a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py +++ b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py @@ -46,8 +46,8 @@ class Migration(migrations.Migration): trigger=pgtrigger.compiler.Trigger( name="reset_search_vector_on_author_edit", sql=pgtrigger.compiler.UpsertTriggerSql( - func="WITH book AS (SELECT bookwyrm_book.id AS row_id FROM bookwyrm_author LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book_authors.author_id = bookwyrm_author.id LEFT OUTER JOIN bookwyrm_book ON bookwyrm_book.id = bookwyrm_book_authors.book_id WHERE bookwyrm_author.id = new.id ) UPDATE bookwyrm_book SET search_vector = '' FROM book WHERE id = book.row_id;RETURN NEW;", - hash="abc8ea76fa1bf02a0f56aaae390c1b970bef1278", + func="WITH updated_books AS (SELECT book_id FROM bookwyrm_book_authors WHERE author_id = new.id ) UPDATE bookwyrm_book SET search_vector = '' FROM updated_books WHERE id = updated_books.book_id;RETURN NEW;", + hash="e7bbf08711ff3724c58f4d92fb7a082ffb3d7826", operation='UPDATE OF "name"', pgid="pgtrigger_reset_search_vector_on_author_edit_a447c", table="bookwyrm_author", diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 6c5beba50..154b00ccb 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -77,19 +77,15 @@ class Author(BookDataModel): when=pgtrigger.After, operation=pgtrigger.UpdateOf("name"), func=format_trigger( - """WITH book AS ( - SELECT bookwyrm_book.id AS row_id - FROM bookwyrm_author - LEFT OUTER JOIN bookwyrm_book_authors - ON bookwyrm_book_authors.author_id = bookwyrm_author.id - LEFT OUTER JOIN bookwyrm_book - ON bookwyrm_book.id = bookwyrm_book_authors.book_id - WHERE bookwyrm_author.id = new.id + """WITH updated_books AS ( + SELECT book_id + FROM bookwyrm_book_authors + WHERE author_id = new.id ) UPDATE bookwyrm_book SET search_vector = '' - FROM book - WHERE id = book.row_id; + FROM updated_books + WHERE id = updated_books.book_id; RETURN new; """ ), From bbfbd1e97ab201cd87c6414127c603f615923ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 25 Nov 2023 20:54:09 -0300 Subject: [PATCH 201/458] Add tests for trigger code (i.e. how search_vector is computed) --- bookwyrm/tests/test_book_search.py | 67 +++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index f9c75d279..99b62f0a0 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -137,6 +137,69 @@ class BookSearch(TestCase): self.assertEqual(result.title, "Title") +class SearchVectorTest(TestCase): + """check search_vector is computed correctly""" + + def test_search_vector_simple(self): + """simplest search vector""" + book = self._create_book("Book", "Mary") + self.assertEqual(book.search_vector, "'book':1A 'mary':2C") # A > C (priority) + + def test_search_vector_all_parts(self): + """search vector with subtitle and series""" + # for a book like this we call `to_tsvector("Book Long Mary Bunch")`, hence the + # indexes in the search vector. (priority "D" is the default, and never shown.) + book = self._create_book("Book", "Mary", subtitle="Long", series="Bunch") + self.assertEqual(book.search_vector, "'book':1A 'bunch':4 'long':2B 'mary':3C") + + def test_search_vector_parse_book(self): + """book parts are parsed in english""" + # FIXME: at some point this should stop being the default. + book = self._create_book( + "Edition", "Editor", series="Castle", subtitle="Writing" + ) + self.assertEqual( + book.search_vector, "'castl':4 'edit':1A 'editor':3C 'write':2B" + ) + + def test_search_vector_parse_author(self): + """author name is not stem'd or affected by stop words""" + book = self._create_book("Writing", "Writes") + self.assertEqual(book.search_vector, "'write':1A 'writes':2C") + + book = self._create_book("She Is Writing", "She Writes") + self.assertEqual(book.search_vector, "'she':4C 'write':3A 'writes':5C") + + def test_search_vector_parse_title_empty(self): + """empty parse in English retried as simple title""" + book = self._create_book("Here We", "John") + self.assertEqual(book.search_vector, "'here':1A 'john':3C 'we':2A") + + book = self._create_book("Hear We Come", "John") + self.assertEqual(book.search_vector, "'come':3A 'hear':1A 'john':4C") + + @staticmethod + def _create_book( + title, author_name, /, *, subtitle="", series="", author_alias=None + ): + """quickly create a book""" + work = models.Work.objects.create(title="work") + author = models.Author.objects.create( + name=author_name, aliases=author_alias or [] + ) + edition = models.Edition.objects.create( + title=title, + series=series or None, + subtitle=subtitle or None, + isbn_10="0000000000", + parent_work=work, + ) + edition.authors.add(author) + edition.save(broadcast=False) + edition.refresh_from_db() + return edition + + class SearchVectorTriggers(TestCase): """look for books as they change""" @@ -222,8 +285,8 @@ class SearchVectorTriggers(TestCase): """wrapper around search_title_author""" return self._search(query, return_first=True) - # pylint: disable-next=no-self-use - def _search(self, query, *, return_first=False): + @staticmethod + def _search(query, *, return_first=False): """wrapper around search_title_author""" return book_search.search_title_author( query, min_confidence=0, return_first=return_first From b5805accacb497be62cb4e7bb54a52258a1d12e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 25 Nov 2023 21:47:13 -0300 Subject: [PATCH 202/458] Minor improvements to bookwyrm_book trigger code - do not COALESCE columns that cannot be NULL - do not bring bookwyrm_book to author names JOIN - add comments documenting the four steps --- ...grate_search_vec_triggers_to_pgtriggers.py | 4 ++-- bookwyrm/models/book.py | 21 ++++++++++--------- bookwyrm/tests/test_book_search.py | 16 +++++++++----- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py index ddfe74a8b..5e798b654 100644 --- a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py +++ b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py @@ -32,8 +32,8 @@ class Migration(migrations.Migration): trigger=pgtrigger.compiler.Trigger( name="update_search_vector_on_book_edit", sql=pgtrigger.compiler.UpsertTriggerSql( - func="new.search_vector := coalesce(nullif(setweight(to_tsvector('english', coalesce(new.title, '')), 'A'), ''), setweight(to_tsvector('simple', coalesce(new.title, '')), 'A')) || setweight(to_tsvector('english', coalesce(new.subtitle, '')), 'B') || (SELECT setweight(to_tsvector('simple', coalesce(array_to_string(array_agg(bookwyrm_author.name), ' '), '')), 'C') FROM bookwyrm_book LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book.id = bookwyrm_book_authors.book_id LEFT OUTER JOIN bookwyrm_author ON bookwyrm_book_authors.author_id = bookwyrm_author.id WHERE bookwyrm_book.id = new.id ) || setweight(to_tsvector('english', coalesce(new.series, '')), 'D');RETURN NEW;", - hash="9c898d46dfb7492ecd18f6c692bbecfa548f0e85", + func="new.search_vector := setweight(coalesce(nullif(to_tsvector('english', new.title), ''), to_tsvector('simple', new.title)), 'A') || setweight(to_tsvector('english', coalesce(new.subtitle, '')), 'B') || (SELECT setweight(to_tsvector('simple', coalesce(array_to_string(array_agg(bookwyrm_author.name), ' '), '')), 'C') FROM bookwyrm_author LEFT JOIN bookwyrm_book_authors ON bookwyrm_author.id = bookwyrm_book_authors.author_id WHERE bookwyrm_book_authors.book_id = new.id ) || setweight(to_tsvector('english', coalesce(new.series, '')), 'D');RETURN NEW;", + hash="77d6399497c0a89b0bf09d296e33c396da63705c", operation='INSERT OR UPDATE OF "title", "subtitle", "series", "search_vector"', pgid="pgtrigger_update_search_vector_on_book_edit_bec58", table="bookwyrm_book", diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index ed26752e3..e167e2138 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -247,19 +247,20 @@ class Book(BookDataModel): | pgtrigger.UpdateOf("title", "subtitle", "series", "search_vector"), func=format_trigger( """new.search_vector := - COALESCE( - NULLIF(setweight(to_tsvector('english', COALESCE(new.title, '')), 'A'), ''), - setweight(to_tsvector('simple', COALESCE(new.title, '')), 'A') - ) || + -- title, with priority A (parse in English, default to simple if empty) + setweight(COALESCE(nullif( + to_tsvector('english', new.title), ''), + to_tsvector('simple', new.title)), 'A') || + -- subtitle, with priority B (always in English?) setweight(to_tsvector('english', COALESCE(new.subtitle, '')), 'B') || + -- list of authors, with priority C (TODO: add aliases?, bookwyrm-social#3063) (SELECT setweight(to_tsvector('simple', COALESCE(array_to_string(ARRAY_AGG(bookwyrm_author.name), ' '), '')), 'C') - FROM bookwyrm_book - LEFT OUTER JOIN bookwyrm_book_authors - ON bookwyrm_book.id = bookwyrm_book_authors.book_id - LEFT OUTER JOIN bookwyrm_author - ON bookwyrm_book_authors.author_id = bookwyrm_author.id - WHERE bookwyrm_book.id = new.id + FROM bookwyrm_author + LEFT JOIN bookwyrm_book_authors + ON bookwyrm_author.id = bookwyrm_book_authors.author_id + WHERE bookwyrm_book_authors.book_id = new.id ) || + --- last: series name, with lowest priority setweight(to_tsvector('english', COALESCE(new.series, '')), 'D'); RETURN new; """ diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index 99b62f0a0..e9f550a88 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -178,15 +178,17 @@ class SearchVectorTest(TestCase): book = self._create_book("Hear We Come", "John") self.assertEqual(book.search_vector, "'come':3A 'hear':1A 'john':4C") + def test_search_vector_no_author(self): + """book with no authors gets processed normally""" + book = self._create_book("Book", None, series="Bunch") + self.assertEqual(book.search_vector, "'book':1A 'bunch':2") + @staticmethod def _create_book( title, author_name, /, *, subtitle="", series="", author_alias=None ): """quickly create a book""" work = models.Work.objects.create(title="work") - author = models.Author.objects.create( - name=author_name, aliases=author_alias or [] - ) edition = models.Edition.objects.create( title=title, series=series or None, @@ -194,8 +196,12 @@ class SearchVectorTest(TestCase): isbn_10="0000000000", parent_work=work, ) - edition.authors.add(author) - edition.save(broadcast=False) + if author_name is not None: + author = models.Author.objects.create( + name=author_name, aliases=author_alias or [] + ) + edition.authors.add(author) + edition.save(broadcast=False) edition.refresh_from_db() return edition From d6eb390ceed8e6f63926aa8b54a4ef9314b93c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 26 Nov 2023 15:57:51 -0300 Subject: [PATCH 203/458] Add test that forces `book_authors_search_vector_trigger` to execute --- bookwyrm/tests/test_book_search.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index e9f550a88..42e57f773 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -275,6 +275,29 @@ class SearchVectorTriggers(TestCase): self.assertEqual(self.edition, self._search_first("Mozilla")) self.assertEqual(self.edition, self._search_first("Name")) + def test_search_after_author_add_remove_sql(self): + """add/remove author through SQL to ensure execution of book_authors trigger""" + # Tests calling edition.save(), above, pass even if the trigger in + # bookwyrm_book_authors is removed (probably because they trigger the one + # in bookwyrm_book directly). Here we make sure to exercise the former. + new_author = models.Author.objects.create(name="Mozilla") + + with connection.cursor() as cursor: + cursor.execute( + "DELETE FROM bookwyrm_book_authors WHERE book_id = %s", + [self.edition.id], + ) + self.assertFalse(self._search("Name")) + self.assertFalse(self._search("Mozilla")) + + with connection.cursor() as cursor: + cursor.execute( + "INSERT INTO bookwyrm_book_authors (book_id,author_id) VALUES (%s,%s)", + [self.edition.id, new_author.id], + ) + self.assertFalse(self._search("Name")) + self.assertEqual(self.edition, self._search_first("Mozilla")) + def test_search_after_updated_author_name(self): """book found under new author name""" self.assertEqual(self.edition, self._search_first("Name")) From 58f149d8896494faaa4cfcdd92696036bc8f91c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 01:02:35 +0000 Subject: [PATCH 204/458] Bump aiohttp from 3.8.6 to 3.9.0 Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.8.6 to 3.9.0. - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.8.6...v3.9.0) --- updated-dependencies: - dependency-name: aiohttp dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 36192f148..4ec939c0f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.8.6 +aiohttp==3.9.0 bleach==5.0.1 celery==5.2.7 colorthief==0.2.1 From 31a78a5c9efae9559eeb93cc05d18f76869f4ce7 Mon Sep 17 00:00:00 2001 From: Matt Lehrer Date: Thu, 30 Nov 2023 11:12:42 +0100 Subject: [PATCH 205/458] linted --- bookwyrm/tests/views/books/test_editions.py | 26 +++++++++++++++------ bookwyrm/views/books/editions.py | 4 ++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/bookwyrm/tests/views/books/test_editions.py b/bookwyrm/tests/views/books/test_editions.py index bbae517ac..ba380c0bc 100644 --- a/bookwyrm/tests/views/books/test_editions.py +++ b/bookwyrm/tests/views/books/test_editions.py @@ -139,14 +139,17 @@ class BookViews(TestCase): work = models.Work.objects.create(title="test work") edition1 = models.Edition.objects.create(title="first ed", parent_work=work) edition2 = models.Edition.objects.create(title="second ed", parent_work=work) - + models.ReviewRating.objects.create( book=edition1, user=self.local_user, rating=3, ) - self.assertIsInstance(models.ReviewRating.objects.get(user=self.local_user, book=edition1), models.ReviewRating) + self.assertIsInstance( + models.ReviewRating.objects.get(user=self.local_user, book=edition1), + models.ReviewRating, + ) with self.assertRaises(models.ReviewRating.DoesNotExist): models.ReviewRating.objects.get(user=self.local_user, book=edition2) @@ -154,7 +157,10 @@ class BookViews(TestCase): request.user = self.local_user views.switch_edition(request) - self.assertIsInstance(models.ReviewRating.objects.get(user=self.local_user, book=edition2), models.ReviewRating) + self.assertIsInstance( + models.ReviewRating.objects.get(user=self.local_user, book=edition2), + models.ReviewRating, + ) with self.assertRaises(models.ReviewRating.DoesNotExist): models.ReviewRating.objects.get(user=self.local_user, book=edition1) @@ -167,16 +173,19 @@ class BookViews(TestCase): work = models.Work.objects.create(title="test work") edition1 = models.Edition.objects.create(title="first ed", parent_work=work) edition2 = models.Edition.objects.create(title="second ed", parent_work=work) - + models.Review.objects.create( book=edition1, user=self.local_user, name="blah", rating=3, - content="not bad" + content="not bad", ) - self.assertIsInstance(models.Review.objects.get(user=self.local_user, book=edition1), models.Review) + self.assertIsInstance( + models.Review.objects.get(user=self.local_user, book=edition1), + models.Review, + ) with self.assertRaises(models.Review.DoesNotExist): models.Review.objects.get(user=self.local_user, book=edition2) @@ -184,6 +193,9 @@ class BookViews(TestCase): request.user = self.local_user views.switch_edition(request) - self.assertIsInstance(models.Review.objects.get(user=self.local_user, book=edition2), models.Review) + self.assertIsInstance( + models.Review.objects.get(user=self.local_user, book=edition2), + models.Review, + ) with self.assertRaises(models.Review.DoesNotExist): models.Review.objects.get(user=self.local_user, book=edition1) diff --git a/bookwyrm/views/books/editions.py b/bookwyrm/views/books/editions.py index 2bbb1c579..572dc9786 100644 --- a/bookwyrm/views/books/editions.py +++ b/bookwyrm/views/books/editions.py @@ -107,9 +107,9 @@ def switch_edition(request): book__parent_work=new_edition.parent_work, user=request.user ) for review in reviews.all(): - # because ratings are a subclass of reviews, + # because ratings are a subclass of reviews, # this will pick up both ratings and reviews review.book = new_edition - review.save() + review.save() return redirect(f"/book/{new_edition.id}") From 5384e4c47084a9b383875e98a99f30659e64c2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Thu, 30 Nov 2023 15:58:48 -0300 Subject: [PATCH 206/458] Use bulk_create to test ordered collections --- bookwyrm/tests/models/test_activitypub_mixin.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index 645a6546b..8af41ffbd 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -391,11 +391,13 @@ class ActivitypubMixins(TestCase): 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 +418,13 @@ class ActivitypubMixins(TestCase): 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("") From 8fd05004eac0296be4388ccb3bbd57f56f758515 Mon Sep 17 00:00:00 2001 From: Victor Villas Date: Sun, 3 Dec 2023 20:03:33 -0800 Subject: [PATCH 207/458] Update page formatter on ordered collection --- bookwyrm/models/activitypub_mixin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index 36317ad4e..d0a941f43 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -602,7 +602,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, From d93da4e86d771f88d654339b3563a852dc69c767 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Mon, 27 Nov 2023 15:03:59 -0800 Subject: [PATCH 208/458] Checkpoint --- bookwyrm/book_search.py | 20 ++++++++----- bookwyrm/settings.py | 2 +- .../templates/shelf/search_my_books_form.html | 25 ++++++++++++++++ bookwyrm/templates/shelf/shelf.html | 1 + bookwyrm/tests/views/test_search.py | 2 +- bookwyrm/views/search.py | 6 ++-- bookwyrm/views/shelf/shelf.py | 29 +++++++++++++------ docker-compose.yml | 2 ++ 8 files changed, 66 insertions(+), 21 deletions(-) create mode 100644 bookwyrm/templates/shelf/search_my_books_form.html diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index ceb228f40..6ab33fd5a 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 = None ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: """search your local database""" filters = filters or [] @@ -54,17 +55,16 @@ 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 - def isbn_search(query): """search your local database""" if not query: @@ -98,8 +98,9 @@ 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]]: + books = books or models.Edition """tries remote_id, isbn; defined as dedupe fields on the model""" if connectors.maybe_isbn(query): # Oh did you think the 'S' in ISBN stood for 'standard'? @@ -111,7 +112,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 +122,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") diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 4cecc4df6..49e4e2116 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -140,7 +140,7 @@ TEMPLATES = [ }, ] -LOG_LEVEL = env("LOG_LEVEL", "INFO").upper() +LOG_LEVEL = env("LOG_LEVEL", "DEBUG").upper() # Override aspects of the default handler to our taste # See https://docs.djangoproject.com/en/3.2/topics/logging/#default-logging-configuration # for a reference to the defaults we're overriding diff --git a/bookwyrm/templates/shelf/search_my_books_form.html b/bookwyrm/templates/shelf/search_my_books_form.html new file mode 100644 index 000000000..ca9cd2991 --- /dev/null +++ b/bookwyrm/templates/shelf/search_my_books_form.html @@ -0,0 +1,25 @@ +{% load i18n %} +{% load utilities %} + + diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index a2410ef95..b84ae185f 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -123,6 +123,7 @@ {% endif %} {% endwith %} + {% include 'shelf/search_my_books_form.html' with user=user query=query %} {% if is_self and shelf.id %} diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 28f8268e3..021d502f0 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -9,7 +9,7 @@ from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import models, views -from bookwyrm.book_search import SearchResult +from bookwyrm.book_search import SearchResult, search from bookwyrm.settings import DOMAIN from bookwyrm.tests.validate_html import validate_html diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index 743f33f59..f8eddd1a6 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -51,7 +51,7 @@ class Search(View): def api_book_search(request): """Return books via API response""" query = request.GET.get("q") - query = isbn_check(query) + query = isbn_check_and_format(query) min_confidence = request.GET.get("min_confidence", 0) # only return local book results via json so we don't cascade book_results = search(query, min_confidence=min_confidence) @@ -64,7 +64,7 @@ def book_search(request): """the real business is elsewhere""" query = request.GET.get("q") # check if query is isbn - query = isbn_check(query) + query = isbn_check_and_format(query) min_confidence = request.GET.get("min_confidence", 0) search_remote = request.GET.get("remote", False) and request.user.is_authenticated @@ -159,7 +159,7 @@ def list_search(request): return TemplateResponse(request, "search/list.html", data) -def isbn_check(query): +def isbn_check_and_format(query): """isbn10 or isbn13 check, if so remove separators""" if query: su_num = re.sub(r"(?<=\d)\D(?=\d|[xX])", "", query) diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index dbbcc2d3a..600dfb731 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -1,7 +1,7 @@ """ shelf views """ from collections import namedtuple -from django.db.models import OuterRef, Subquery, F, Max +from django.db.models import OuterRef, Subquery, F, Max, QuerySet from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator from django.http import HttpResponseBadRequest @@ -15,6 +15,10 @@ from bookwyrm import forms, models from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.settings import PAGE_LENGTH from bookwyrm.views.helpers import is_api_request, get_user_from_username +from bookwyrm.book_search import search + +import logging +logger = logging.getLogger(__name__) # pylint: disable=no-self-use @@ -32,6 +36,8 @@ class Shelf(View): else: shelves = models.Shelf.privacy_filter(request.user).filter(user=user).all() + shelves_search_query = request.GET.get("shelves_q") + # get the shelf and make sure the logged in user should be able to see it if shelf_identifier: shelf = get_object_or_404(user.shelf_set, identifier=shelf_identifier) @@ -42,14 +48,17 @@ class Shelf(View): FakeShelf = namedtuple( "Shelf", ("identifier", "name", "user", "books", "privacy") ) - books = ( - models.Edition.viewer_aware_objects(request.user) - .filter( - # privacy is ensured because the shelves are already filtered above - shelfbook__shelf__in=shelves - ) - .distinct() - ) + if shelves_search_query: + logger.debug("AAAAAAAAAAAA") + all_books = models.Edition.viewer_aware_objects(request.user).filter( + # privacy is ensured because the shelves are already filtered above + shelfbook__shelf__in=shelves + ).distinct() + books = search(shelves_search_query, books=all_books) + else: + logger.debug("BBBBBBBBB") + books = shelf.books + shelf = FakeShelf("all", _("All books"), user, books, "public") if is_api_request(request) and shelf_identifier: @@ -103,6 +112,8 @@ class Shelf(View): "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), + "has_shelves_query": bool(shelves_search_query), + "shelves_search_query": shelves_search_query } return TemplateResponse(request, "shelf/shelf.html", data) diff --git a/docker-compose.yml b/docker-compose.yml index 4d4037681..bb0acbdd1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,6 +21,8 @@ services: - pgdata:/var/lib/postgresql/data networks: - main + ports: + - "5432:5432" web: build: . env_file: .env From b27ed847d575a7d504b04792e45bd0c73a2dffa4 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Tue, 5 Dec 2023 16:36:58 -0800 Subject: [PATCH 209/458] Fixes result set passed to template --- bookwyrm/book_search.py | 6 ++++-- bookwyrm/settings.py | 2 +- bookwyrm/views/shelf/shelf.py | 18 +++++++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index 6ab33fd5a..db7a51426 100644 --- a/bookwyrm/book_search.py +++ b/bookwyrm/book_search.py @@ -14,6 +14,7 @@ from bookwyrm import connectors from bookwyrm.settings import MEDIA_FULL_URL + @overload def search( query: str, @@ -43,7 +44,7 @@ def search( min_confidence: float = 0, filters: Optional[list[Any]] = None, return_first: bool = False, - books = None + books: Optional[QuerySet[models.Edition]] = None ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: """search your local database""" filters = filters or [] @@ -59,6 +60,7 @@ def search( # if there were no identifier results... if not results: + print('SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS') # then try searching title/author results = search_title_author( query, min_confidence, *filters, return_first=return_first, books=books @@ -100,7 +102,7 @@ def format_search_result(search_result): def search_identifiers( query, *filters, return_first=False, books=None, ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: - books = books or models.Edition + books = books or models.Edition.objects """tries remote_id, isbn; defined as dedupe fields on the model""" if connectors.maybe_isbn(query): # Oh did you think the 'S' in ISBN stood for 'standard'? diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 49e4e2116..c5f5f52f4 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -194,7 +194,7 @@ LOGGING = { # Add a bookwyrm-specific logger "bookwyrm": { "handlers": ["console"], - "level": LOG_LEVEL, + "level": DEBUG, }, }, } diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index 600dfb731..159cc1541 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -43,21 +43,23 @@ class Shelf(View): shelf = get_object_or_404(user.shelf_set, identifier=shelf_identifier) shelf.raise_visible_to_user(request.user) books = shelf.books + if shelves_search_query: + books = search(shelves_search_query, books=books) else: # this is a constructed "all books" view, with a fake "shelf" obj FakeShelf = namedtuple( "Shelf", ("identifier", "name", "user", "books", "privacy") ) - if shelves_search_query: - logger.debug("AAAAAAAAAAAA") - all_books = models.Edition.viewer_aware_objects(request.user).filter( + + books = models.Edition.viewer_aware_objects(request.user).filter( # privacy is ensured because the shelves are already filtered above shelfbook__shelf__in=shelves ).distinct() - books = search(shelves_search_query, books=all_books) - else: - logger.debug("BBBBBBBBB") - books = shelf.books + + # TODO: [COMMENT] + if shelves_search_query: + books = search(shelves_search_query, books=books) + books = models.Edition.objects.filter(pk__in=books) shelf = FakeShelf("all", _("All books"), user, books, "public") @@ -81,6 +83,8 @@ class Shelf(View): "start_date" ) + # import pdb; pdb.set_trace() + books = books.annotate(shelved_date=Max("shelfbook__shelved_date")) books = books.annotate( rating=Subquery(reviews.values("rating")[:1]), From 979162da10c68cae5ad694d5b3f74d96d84e9acf Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Tue, 5 Dec 2023 19:33:59 -0800 Subject: [PATCH 210/458] Uses filters, fixes for any shelf --- bookwyrm/book_search.py | 1 - .../templates/shelf/search_filter_field.html | 9 +++++++ bookwyrm/templates/shelf/search_filters.html | 5 ++++ .../templates/shelf/search_my_books_form.html | 25 ------------------- bookwyrm/templates/shelf/shelf.html | 5 +++- bookwyrm/views/shelf/shelf.py | 13 +++------- 6 files changed, 21 insertions(+), 37 deletions(-) create mode 100644 bookwyrm/templates/shelf/search_filter_field.html create mode 100644 bookwyrm/templates/shelf/search_filters.html delete mode 100644 bookwyrm/templates/shelf/search_my_books_form.html diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index db7a51426..b3e66cdd6 100644 --- a/bookwyrm/book_search.py +++ b/bookwyrm/book_search.py @@ -60,7 +60,6 @@ def search( # if there were no identifier results... if not results: - print('SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS') # then try searching title/author results = search_title_author( query, min_confidence, *filters, return_first=return_first, books=books diff --git a/bookwyrm/templates/shelf/search_filter_field.html b/bookwyrm/templates/shelf/search_filter_field.html new file mode 100644 index 000000000..591e6aaa9 --- /dev/null +++ b/bookwyrm/templates/shelf/search_filter_field.html @@ -0,0 +1,9 @@ +{% extends 'snippets/filters_panel/filter_field.html' %} +{% load i18n %} + +{% block filter %} +
    + + +
    +{% endblock %} diff --git a/bookwyrm/templates/shelf/search_filters.html b/bookwyrm/templates/shelf/search_filters.html new file mode 100644 index 000000000..840eec57e --- /dev/null +++ b/bookwyrm/templates/shelf/search_filters.html @@ -0,0 +1,5 @@ +{% extends 'snippets/filters_panel/filters_panel.html' %} + +{% block filter_fields %} + {% include 'shelf/search_filter_field.html' %} +{% endblock %} diff --git a/bookwyrm/templates/shelf/search_my_books_form.html b/bookwyrm/templates/shelf/search_my_books_form.html deleted file mode 100644 index ca9cd2991..000000000 --- a/bookwyrm/templates/shelf/search_my_books_form.html +++ /dev/null @@ -1,25 +0,0 @@ -{% load i18n %} -{% load utilities %} - - diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index b84ae185f..ea5d2343c 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -121,10 +121,13 @@ {% endblocktrans %} {% endif %} + {% endif %} + {% endwith %} - {% include 'shelf/search_my_books_form.html' with user=user query=query %} + + {% include 'shelf/search_filters.html' with user=user query=query %} {% if is_self and shelf.id %}
    diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index 159cc1541..be205597b 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -43,8 +43,6 @@ class Shelf(View): shelf = get_object_or_404(user.shelf_set, identifier=shelf_identifier) shelf.raise_visible_to_user(request.user) books = shelf.books - if shelves_search_query: - books = search(shelves_search_query, books=books) else: # this is a constructed "all books" view, with a fake "shelf" obj FakeShelf = namedtuple( @@ -56,11 +54,6 @@ class Shelf(View): shelfbook__shelf__in=shelves ).distinct() - # TODO: [COMMENT] - if shelves_search_query: - books = search(shelves_search_query, books=books) - books = models.Edition.objects.filter(pk__in=books) - shelf = FakeShelf("all", _("All books"), user, books, "public") if is_api_request(request) and shelf_identifier: @@ -83,8 +76,6 @@ class Shelf(View): "start_date" ) - # import pdb; pdb.set_trace() - books = books.annotate(shelved_date=Max("shelfbook__shelved_date")) books = books.annotate( rating=Subquery(reviews.values("rating")[:1]), @@ -99,6 +90,9 @@ class Shelf(View): books = sort_books(books, request.GET.get("sort")) + if shelves_search_query: + books = search(shelves_search_query, books=books) + paginated = Paginator( books, PAGE_LENGTH, @@ -116,7 +110,6 @@ class Shelf(View): "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), - "has_shelves_query": bool(shelves_search_query), "shelves_search_query": shelves_search_query } From c65e165aeb1d36921da1ff110c695c1bfa890f5a Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Tue, 5 Dec 2023 19:37:29 -0800 Subject: [PATCH 211/458] Hides filter if shelf empty --- bookwyrm/templates/shelf/search_filter_field.html | 2 +- bookwyrm/templates/shelf/shelf.html | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/shelf/search_filter_field.html b/bookwyrm/templates/shelf/search_filter_field.html index 591e6aaa9..5641bae85 100644 --- a/bookwyrm/templates/shelf/search_filter_field.html +++ b/bookwyrm/templates/shelf/search_filter_field.html @@ -4,6 +4,6 @@ {% block filter %}
    - +
    {% endblock %} diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index ea5d2343c..4fb78ba6f 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -127,7 +127,10 @@ {% endwith %} - {% include 'shelf/search_filters.html' with user=user query=query %} + {% if books|length > 0 %} + {% include 'shelf/search_filters.html' with user=user query=query %} + {% endif %} +
    {% if is_self and shelf.id %}
    From 0f6e567b21b9cfbae86c7bfdff82eb0b3e673cc1 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Tue, 5 Dec 2023 19:49:38 -0800 Subject: [PATCH 212/458] Clean up --- bookwyrm/settings.py | 4 ++-- bookwyrm/templates/shelf/shelf.html | 3 --- bookwyrm/tests/views/test_search.py | 2 +- bookwyrm/views/shelf/shelf.py | 4 ---- docker-compose.yml | 2 -- 5 files changed, 3 insertions(+), 12 deletions(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index c5f5f52f4..4cecc4df6 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -140,7 +140,7 @@ TEMPLATES = [ }, ] -LOG_LEVEL = env("LOG_LEVEL", "DEBUG").upper() +LOG_LEVEL = env("LOG_LEVEL", "INFO").upper() # Override aspects of the default handler to our taste # See https://docs.djangoproject.com/en/3.2/topics/logging/#default-logging-configuration # for a reference to the defaults we're overriding @@ -194,7 +194,7 @@ LOGGING = { # Add a bookwyrm-specific logger "bookwyrm": { "handlers": ["console"], - "level": DEBUG, + "level": LOG_LEVEL, }, }, } diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 4fb78ba6f..14b748e54 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -121,11 +121,8 @@ {% endblocktrans %} {% endif %} - {% endif %} - {% endwith %} - {% if books|length > 0 %} {% include 'shelf/search_filters.html' with user=user query=query %} diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 021d502f0..28f8268e3 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -9,7 +9,7 @@ from django.test import TestCase from django.test.client import RequestFactory from bookwyrm import models, views -from bookwyrm.book_search import SearchResult, search +from bookwyrm.book_search import SearchResult from bookwyrm.settings import DOMAIN from bookwyrm.tests.validate_html import validate_html diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index be205597b..aad90da82 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -17,10 +17,6 @@ from bookwyrm.settings import PAGE_LENGTH from bookwyrm.views.helpers import is_api_request, get_user_from_username from bookwyrm.book_search import search -import logging -logger = logging.getLogger(__name__) - - # pylint: disable=no-self-use class Shelf(View): """shelf page""" diff --git a/docker-compose.yml b/docker-compose.yml index bb0acbdd1..4d4037681 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,8 +21,6 @@ services: - pgdata:/var/lib/postgresql/data networks: - main - ports: - - "5432:5432" web: build: . env_file: .env From aac8aa1adfd668e95595600d5b059b1b89655507 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Wed, 6 Dec 2023 11:36:15 -0800 Subject: [PATCH 213/458] Fixes formatting --- bookwyrm/book_search.py | 19 ++++++++++++++----- bookwyrm/views/shelf/shelf.py | 18 ++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/bookwyrm/book_search.py b/bookwyrm/book_search.py index b3e66cdd6..669b7d377 100644 --- a/bookwyrm/book_search.py +++ b/bookwyrm/book_search.py @@ -14,7 +14,6 @@ from bookwyrm import connectors from bookwyrm.settings import MEDIA_FULL_URL - @overload def search( query: str, @@ -44,7 +43,7 @@ def search( min_confidence: float = 0, filters: Optional[list[Any]] = None, return_first: bool = False, - books: Optional[QuerySet[models.Edition]] = None + books: Optional[QuerySet[models.Edition]] = None, ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: """search your local database""" filters = filters or [] @@ -56,7 +55,9 @@ 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, books=books) + results = search_identifiers( + query, *filters, return_first=return_first, books=books + ) # if there were no identifier results... if not results: @@ -66,6 +67,7 @@ def search( ) return results + def isbn_search(query): """search your local database""" if not query: @@ -99,10 +101,17 @@ def format_search_result(search_result): def search_identifiers( - query, *filters, return_first=False, books=None, + query, + *filters, + return_first=False, + books=None, ) -> Union[Optional[models.Edition], QuerySet[models.Edition]]: + """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 - """tries remote_id, isbn; defined as dedupe fields on the model""" if connectors.maybe_isbn(query): # Oh did you think the 'S' in ISBN stood for 'standard'? normalized_isbn = query.strip().upper().rjust(10, "0") diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index aad90da82..0617fcc56 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -1,7 +1,7 @@ """ shelf views """ from collections import namedtuple -from django.db.models import OuterRef, Subquery, F, Max, QuerySet +from django.db.models import OuterRef, Subquery, F, Max from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator from django.http import HttpResponseBadRequest @@ -17,10 +17,12 @@ from bookwyrm.settings import PAGE_LENGTH from bookwyrm.views.helpers import is_api_request, get_user_from_username from bookwyrm.book_search import search + # pylint: disable=no-self-use class Shelf(View): """shelf page""" + # pylint: disable=R0914 def get(self, request, username, shelf_identifier=None): """display a shelf""" user = get_user_from_username(request.user, username) @@ -45,10 +47,14 @@ class Shelf(View): "Shelf", ("identifier", "name", "user", "books", "privacy") ) - books = models.Edition.viewer_aware_objects(request.user).filter( - # privacy is ensured because the shelves are already filtered above - shelfbook__shelf__in=shelves - ).distinct() + books = ( + models.Edition.viewer_aware_objects(request.user) + .filter( + # privacy is ensured because the shelves are already filtered above + shelfbook__shelf__in=shelves + ) + .distinct() + ) shelf = FakeShelf("all", _("All books"), user, books, "public") @@ -106,7 +112,7 @@ class Shelf(View): "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), - "shelves_search_query": shelves_search_query + "shelves_search_query": shelves_search_query, } return TemplateResponse(request, "shelf/shelf.html", data) From dd72013225fa16e563851c41ea59a9ee57b4809c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 9 Dec 2023 08:09:22 -0800 Subject: [PATCH 214/458] Small fixes for notifications Adds a link in the text of the notification, and fixes references to notification type in the model --- bookwyrm/models/notification.py | 4 ++-- bookwyrm/templates/notifications/items/user_import.html | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/notification.py b/bookwyrm/models/notification.py index 515346031..ca1e2aeb0 100644 --- a/bookwyrm/models/notification.py +++ b/bookwyrm/models/notification.py @@ -249,7 +249,7 @@ def notify_user_on_user_import_complete( if not instance.complete or "complete" not in update_fields: return Notification.objects.create( - user=instance.user, notification_type=Notification.USER_IMPORT + user=instance.user, notification_type=NotificationType.USER_IMPORT ) @@ -264,7 +264,7 @@ def notify_user_on_user_export_complete( return Notification.objects.create( user=instance.user, - notification_type=Notification.USER_EXPORT, + notification_type=NotificationType.USER_EXPORT, related_user_export=instance, ) diff --git a/bookwyrm/templates/notifications/items/user_import.html b/bookwyrm/templates/notifications/items/user_import.html index 2e9838688..27e3e975d 100644 --- a/bookwyrm/templates/notifications/items/user_import.html +++ b/bookwyrm/templates/notifications/items/user_import.html @@ -10,5 +10,7 @@ {% endblock %} {% block description %} - {% blocktrans %}Your user import is complete.{% endblocktrans %} +{% url 'user-import' as import_url %} +{% blocktrans %}Your user import is complete.{% endblocktrans %} + {% endblock %} From 029b43835546f659eb8a5bccf0c449320049c152 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 9 Dec 2023 08:18:31 -0800 Subject: [PATCH 215/458] Clarify import/export of book vs user I think this wording is a little clearer --- bookwyrm/templates/import/import.html | 9 ++++----- bookwyrm/templates/import/import_user.html | 8 ++++---- bookwyrm/templates/preferences/export-user.html | 4 ++-- bookwyrm/templates/preferences/export.html | 4 ++-- bookwyrm/templates/preferences/layout.html | 14 +++++++------- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/bookwyrm/templates/import/import.html b/bookwyrm/templates/import/import.html index 2c3be9e07..01014fa94 100644 --- a/bookwyrm/templates/import/import.html +++ b/bookwyrm/templates/import/import.html @@ -1,13 +1,12 @@ -{% extends 'layout.html' %} +{% extends 'preferences/layout.html' %} {% load i18n %} {% load humanize %} -{% block title %}{% trans "Import Books" %}{% endblock %} +{% block title %}{% trans "Import Book List" %}{% endblock %} +{% block header %}{% trans "Import Book List" %}{% endblock %} -{% block content %} +{% block panel %}
    -

    {% trans "Import Books" %}

    - {% if invalid %}
    {% trans "Not a valid CSV file" %} diff --git a/bookwyrm/templates/import/import_user.html b/bookwyrm/templates/import/import_user.html index 681ed6756..f94236958 100644 --- a/bookwyrm/templates/import/import_user.html +++ b/bookwyrm/templates/import/import_user.html @@ -1,12 +1,12 @@ -{% extends 'layout.html' %} +{% extends 'preferences/layout.html' %} {% load i18n %} {% load humanize %} -{% block title %}{% trans "Import User" %}{% endblock %} +{% block title %}{% trans "Import BookWyrm Account" %}{% endblock %} +{% block header %}{% trans "Import BookWyrm Account" %}{% endblock %} -{% block content %} +{% block panel %}
    -

    {% trans "Import User" %}

    {% if invalid %}
    diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index a3fce0952..8ecca1863 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -2,10 +2,10 @@ {% load i18n %} {% load utilities %} -{% block title %}{% trans "User Export" %}{% endblock %} +{% block title %}{% trans "Export BookWyrm Account" %}{% endblock %} {% block header %} -{% trans "Export User" %} +{% trans "Export BookWyrm Account" %} {% endblock %} {% block panel %} diff --git a/bookwyrm/templates/preferences/export.html b/bookwyrm/templates/preferences/export.html index 6976c5e27..e301eb5cc 100644 --- a/bookwyrm/templates/preferences/export.html +++ b/bookwyrm/templates/preferences/export.html @@ -1,10 +1,10 @@ {% extends 'preferences/layout.html' %} {% load i18n %} -{% block title %}{% trans "Books Export" %}{% endblock %} +{% block title %}{% trans "Export Book List" %}{% endblock %} {% block header %} -{% trans "Books Export" %} +{% trans "Export Book List" %} {% endblock %} {% block panel %} diff --git a/bookwyrm/templates/preferences/layout.html b/bookwyrm/templates/preferences/layout.html index c0c38dd3e..56151233f 100644 --- a/bookwyrm/templates/preferences/layout.html +++ b/bookwyrm/templates/preferences/layout.html @@ -40,19 +40,19 @@ From 9d502f5ee23d19a2afbabadbc5d16dd277a6ea45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Thu, 30 Nov 2023 02:56:16 -0300 Subject: [PATCH 216/458] Use setUpTestData() to speed up tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pylint's `bad-classmethod-argument` is disabled for each definition to avoid rewriting the method bodies just to rename `self` ā†’ `cls`. This can be done gradually, as the setUpTestData methods are modified along the way. --- bookwyrm/tests/activitypub/test_author.py | 3 ++- .../tests/activitypub/test_base_activity.py | 5 ++-- bookwyrm/tests/activitypub/test_note.py | 4 ++-- bookwyrm/tests/activitypub/test_quotation.py | 6 ++++- .../activitystreams/test_abstractstream.py | 6 ++++- .../tests/activitystreams/test_booksstream.py | 3 ++- .../tests/activitystreams/test_homestream.py | 3 ++- .../tests/activitystreams/test_localstream.py | 3 ++- .../tests/activitystreams/test_signals.py | 8 ++----- bookwyrm/tests/activitystreams/test_tasks.py | 4 ++-- .../connectors/test_abstract_connector.py | 23 +++++++++++-------- .../test_abstract_minimal_connector.py | 8 +++++-- .../connectors/test_bookwyrm_connector.py | 8 +++++-- .../connectors/test_connector_manager.py | 3 ++- .../connectors/test_inventaire_connector.py | 8 +++++-- .../connectors/test_openlibrary_connector.py | 8 +++++-- .../tests/importers/test_calibre_import.py | 5 +++- .../tests/importers/test_goodreads_import.py | 5 +++- bookwyrm/tests/importers/test_importer.py | 6 +++-- .../importers/test_librarything_import.py | 5 +++- .../importers/test_openlibrary_import.py | 5 +++- .../tests/importers/test_storygraph_import.py | 5 +++- bookwyrm/tests/lists_stream/test_signals.py | 5 ++-- bookwyrm/tests/lists_stream/test_stream.py | 5 ++-- bookwyrm/tests/lists_stream/test_tasks.py | 5 ++-- .../management/test_populate_lists_streams.py | 3 ++- .../tests/management/test_populate_streams.py | 3 ++- .../tests/models/test_activitypub_mixin.py | 5 +++- bookwyrm/tests/models/test_automod.py | 8 ++++--- bookwyrm/tests/models/test_base_model.py | 4 +++- bookwyrm/tests/models/test_book_model.py | 3 ++- bookwyrm/tests/models/test_group.py | 3 ++- bookwyrm/tests/models/test_import_model.py | 5 +++- bookwyrm/tests/models/test_link.py | 11 --------- bookwyrm/tests/models/test_list.py | 3 ++- bookwyrm/tests/models/test_notification.py | 6 +++-- .../tests/models/test_readthrough_model.py | 3 ++- .../tests/models/test_relationship_models.py | 3 ++- bookwyrm/tests/models/test_shelf_model.py | 3 ++- bookwyrm/tests/models/test_site.py | 3 ++- bookwyrm/tests/models/test_status_model.py | 11 +++++---- bookwyrm/tests/models/test_user_model.py | 4 ++-- .../templatetags/test_book_display_tags.py | 3 ++- .../tests/templatetags/test_feed_page_tags.py | 3 ++- .../tests/templatetags/test_interaction.py | 3 ++- .../test_notification_page_tags.py | 3 ++- .../tests/templatetags/test_rating_tags.py | 3 ++- .../tests/templatetags/test_shelf_tags.py | 8 +++++-- .../tests/templatetags/test_status_display.py | 3 ++- bookwyrm/tests/templatetags/test_utilities.py | 4 ++-- bookwyrm/tests/test_book_search.py | 3 ++- bookwyrm/tests/test_context_processors.py | 8 +++++-- bookwyrm/tests/test_emailing.py | 9 +++++--- bookwyrm/tests/test_signing.py | 10 ++++---- .../tests/views/admin/test_announcements.py | 8 +++++-- bookwyrm/tests/views/admin/test_automod.py | 9 +++++--- bookwyrm/tests/views/admin/test_celery.py | 9 +++++--- bookwyrm/tests/views/admin/test_dashboard.py | 8 +++++-- .../tests/views/admin/test_email_blocks.py | 8 +++++-- .../tests/views/admin/test_email_config.py | 9 +++++--- bookwyrm/tests/views/admin/test_federation.py | 9 +++++--- bookwyrm/tests/views/admin/test_imports.py | 9 +++++--- .../tests/views/admin/test_ip_blocklist.py | 8 +++++-- .../tests/views/admin/test_link_domains.py | 8 +++++-- bookwyrm/tests/views/admin/test_reports.py | 9 +++++--- bookwyrm/tests/views/admin/test_site.py | 9 +++++--- bookwyrm/tests/views/admin/test_themes.py | 9 +++++--- bookwyrm/tests/views/admin/test_user_admin.py | 8 +++++-- bookwyrm/tests/views/books/test_book.py | 8 +++++-- bookwyrm/tests/views/books/test_edit_book.py | 13 ++++++----- bookwyrm/tests/views/books/test_editions.py | 8 +++++-- bookwyrm/tests/views/books/test_links.py | 9 +++++--- bookwyrm/tests/views/imports/test_import.py | 9 +++++--- .../tests/views/imports/test_import_review.py | 9 +++++--- .../views/imports/test_import_troubleshoot.py | 9 +++++--- bookwyrm/tests/views/inbox/test_inbox.py | 22 ++++++++++-------- bookwyrm/tests/views/inbox/test_inbox_add.py | 3 ++- .../tests/views/inbox/test_inbox_announce.py | 9 +++++--- .../tests/views/inbox/test_inbox_block.py | 3 ++- .../tests/views/inbox/test_inbox_create.py | 10 +++++--- .../tests/views/inbox/test_inbox_delete.py | 4 ++-- .../tests/views/inbox/test_inbox_follow.py | 3 ++- bookwyrm/tests/views/inbox/test_inbox_like.py | 9 +++++--- .../tests/views/inbox/test_inbox_remove.py | 3 ++- .../tests/views/inbox/test_inbox_update.py | 9 +++++--- bookwyrm/tests/views/landing/test_invite.py | 9 +++++--- bookwyrm/tests/views/landing/test_landing.py | 10 +++++--- bookwyrm/tests/views/landing/test_login.py | 11 +++++---- bookwyrm/tests/views/landing/test_password.py | 10 +++++--- bookwyrm/tests/views/landing/test_register.py | 14 ++++++----- bookwyrm/tests/views/lists/test_curate.py | 12 ++++++---- bookwyrm/tests/views/lists/test_embed.py | 12 ++++++---- bookwyrm/tests/views/lists/test_list.py | 12 ++++++---- bookwyrm/tests/views/lists/test_list_item.py | 8 +++++-- bookwyrm/tests/views/lists/test_lists.py | 13 +++++++---- .../tests/views/preferences/test_block.py | 8 +++++-- .../views/preferences/test_change_password.py | 8 +++++-- .../views/preferences/test_delete_user.py | 11 +++++---- .../tests/views/preferences/test_edit_user.py | 8 +++++-- .../tests/views/preferences/test_export.py | 8 +++++-- .../views/preferences/test_two_factor_auth.py | 8 +++++-- bookwyrm/tests/views/shelf/test_shelf.py | 7 ++++-- .../tests/views/shelf/test_shelf_actions.py | 8 +++++-- bookwyrm/tests/views/test_annual_summary.py | 13 ++++++----- bookwyrm/tests/views/test_author.py | 9 +++++--- bookwyrm/tests/views/test_directory.py | 9 +++++--- bookwyrm/tests/views/test_discover.py | 11 +++++---- bookwyrm/tests/views/test_feed.py | 8 +++++-- bookwyrm/tests/views/test_follow.py | 8 +++++-- bookwyrm/tests/views/test_get_started.py | 8 +++++-- bookwyrm/tests/views/test_goal.py | 12 ++++++---- bookwyrm/tests/views/test_group.py | 11 +++++---- bookwyrm/tests/views/test_hashtag.py | 10 +++++--- bookwyrm/tests/views/test_helpers.py | 17 ++++++++------ bookwyrm/tests/views/test_interaction.py | 9 +++++--- bookwyrm/tests/views/test_isbn.py | 8 +++++-- bookwyrm/tests/views/test_notifications.py | 8 +++++-- bookwyrm/tests/views/test_outbox.py | 8 +++++-- bookwyrm/tests/views/test_reading.py | 8 +++++-- bookwyrm/tests/views/test_readthrough.py | 8 ++++--- bookwyrm/tests/views/test_report.py | 9 +++++--- bookwyrm/tests/views/test_rss_feed.py | 9 +++++--- bookwyrm/tests/views/test_search.py | 8 +++++-- bookwyrm/tests/views/test_setup.py | 8 +++++-- bookwyrm/tests/views/test_status.py | 19 ++++++++------- bookwyrm/tests/views/test_updates.py | 8 +++++-- bookwyrm/tests/views/test_user.py | 9 +++++--- bookwyrm/tests/views/test_wellknown.py | 8 +++++-- pytest.ini | 1 + 129 files changed, 644 insertions(+), 327 deletions(-) diff --git a/bookwyrm/tests/activitypub/test_author.py b/bookwyrm/tests/activitypub/test_author.py index 51beac49a..7579909a8 100644 --- a/bookwyrm/tests/activitypub/test_author.py +++ b/bookwyrm/tests/activitypub/test_author.py @@ -6,7 +6,8 @@ from bookwyrm import models class Author(TestCase): """serialize author tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """initial data""" self.book = models.Edition.objects.create( title="Example Edition", diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index c9022d35c..a0d10019f 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -28,8 +28,8 @@ from bookwyrm import models class BaseActivity(TestCase): """the super class for model-linked activitypub dataclasses""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we're probably going to re-use this so why copy/paste""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -40,6 +40,7 @@ class BaseActivity(TestCase): self.user.remote_id = "http://example.com/a/b" self.user.save(broadcast=False, update_fields=["remote_id"]) + def setUp(self): datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") self.userdata = json.loads(datafile.read_bytes()) # don't try to load the user icon diff --git a/bookwyrm/tests/activitypub/test_note.py b/bookwyrm/tests/activitypub/test_note.py index c4db2d9b1..fd5467f01 100644 --- a/bookwyrm/tests/activitypub/test_note.py +++ b/bookwyrm/tests/activitypub/test_note.py @@ -10,8 +10,8 @@ from bookwyrm import models class Note(TestCase): """the model-linked ActivityPub dataclass for Note-based types""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create a shared user""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/activitypub/test_quotation.py b/bookwyrm/tests/activitypub/test_quotation.py index 678ee7aa3..9a0867c52 100644 --- a/bookwyrm/tests/activitypub/test_quotation.py +++ b/bookwyrm/tests/activitypub/test_quotation.py @@ -10,7 +10,8 @@ from bookwyrm import activitypub, models class Quotation(TestCase): """we have hecka ways to create statuses""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """model objects we'll need""" with patch("bookwyrm.models.user.set_remote_server.delay"): self.user = models.User.objects.create_user( @@ -26,6 +27,9 @@ class Quotation(TestCase): title="Example Edition", remote_id="https://example.com/book/1", ) + + def setUp(self): + """other test data""" datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_quotation.json") self.status_data = json.loads(datafile.read_bytes()) diff --git a/bookwyrm/tests/activitystreams/test_abstractstream.py b/bookwyrm/tests/activitystreams/test_abstractstream.py index a9f2cfdd3..83985efdc 100644 --- a/bookwyrm/tests/activitystreams/test_abstractstream.py +++ b/bookwyrm/tests/activitystreams/test_abstractstream.py @@ -15,7 +15,8 @@ from bookwyrm import activitystreams, models class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -43,6 +44,9 @@ class Activitystreams(TestCase): work = models.Work.objects.create(title="test work") self.book = models.Edition.objects.create(title="test book", parent_work=work) + def setUp(self): + """per-test setUp""" + class TestStream(activitystreams.ActivityStream): """test stream, don't have to do anything here""" diff --git a/bookwyrm/tests/activitystreams/test_booksstream.py b/bookwyrm/tests/activitystreams/test_booksstream.py index 1cd335b30..71d7ce531 100644 --- a/bookwyrm/tests/activitystreams/test_booksstream.py +++ b/bookwyrm/tests/activitystreams/test_booksstream.py @@ -14,7 +14,8 @@ from bookwyrm import activitystreams, models class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/activitystreams/test_homestream.py b/bookwyrm/tests/activitystreams/test_homestream.py index 2dc975523..3312f20ee 100644 --- a/bookwyrm/tests/activitystreams/test_homestream.py +++ b/bookwyrm/tests/activitystreams/test_homestream.py @@ -12,7 +12,8 @@ from bookwyrm import activitystreams, models class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/activitystreams/test_localstream.py b/bookwyrm/tests/activitystreams/test_localstream.py index 14c5798dc..f4ca13395 100644 --- a/bookwyrm/tests/activitystreams/test_localstream.py +++ b/bookwyrm/tests/activitystreams/test_localstream.py @@ -12,7 +12,8 @@ from bookwyrm import activitystreams, models class Activitystreams(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/activitystreams/test_signals.py b/bookwyrm/tests/activitystreams/test_signals.py index 210d4d5df..db16a0081 100644 --- a/bookwyrm/tests/activitystreams/test_signals.py +++ b/bookwyrm/tests/activitystreams/test_signals.py @@ -14,7 +14,8 @@ from bookwyrm import activitystreams, models class ActivitystreamsSignals(TestCase): """using redis to build activity streams""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -22,9 +23,6 @@ class ActivitystreamsSignals(TestCase): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( - "fish", "fish@fish.fish", "password", local=True, localname="fish" - ) with patch("bookwyrm.models.user.set_remote_server.delay"): self.remote_user = models.User.objects.create_user( "rat", @@ -35,8 +33,6 @@ class ActivitystreamsSignals(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - work = models.Work.objects.create(title="test work") - self.book = models.Edition.objects.create(title="test book", parent_work=work) def test_add_status_on_create_ignore(self, *_): """a new statuses has entered""" diff --git a/bookwyrm/tests/activitystreams/test_tasks.py b/bookwyrm/tests/activitystreams/test_tasks.py index 82b8c2e5a..39a240e92 100644 --- a/bookwyrm/tests/activitystreams/test_tasks.py +++ b/bookwyrm/tests/activitystreams/test_tasks.py @@ -7,8 +7,8 @@ from bookwyrm import activitystreams, models class Activitystreams(TestCase): """using redis to build activity streams""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index 02ac5c66a..b43966d6a 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -12,9 +12,10 @@ from bookwyrm.settings import DOMAIN class AbstractConnector(TestCase): """generic code for connecting to outside data sources""" - def setUp(self): - """we need an example connector""" - self.connector_info = models.Connector.objects.create( + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """we need an example connector in the database""" + models.Connector.objects.create( identifier="example.com", connector_file="openlibrary", base_url="https://example.com", @@ -22,19 +23,27 @@ class AbstractConnector(TestCase): covers_url="https://example.com/covers", search_url="https://example.com/search?q=", ) + self.book = models.Edition.objects.create( + title="Test Book", + remote_id="https://example.com/book/1234", + openlibrary_key="OL1234M", + ) + + def setUp(self): + """test data""" work_data = { "id": "abc1", "title": "Test work", "type": "work", "openlibraryKey": "OL1234W", } - self.work_data = work_data edition_data = { "id": "abc2", "title": "Test edition", "type": "edition", "openlibraryKey": "OL1234M", } + self.work_data = work_data self.edition_data = edition_data class TestConnector(abstract_connector.AbstractConnector): @@ -70,12 +79,6 @@ class AbstractConnector(TestCase): Mapping("openlibraryKey"), ] - self.book = models.Edition.objects.create( - title="Test Book", - remote_id="https://example.com/book/1234", - openlibrary_key="OL1234M", - ) - def test_abstract_connector_init(self): """barebones connector for search with defaults""" self.assertIsInstance(self.connector.book_mappings, list) diff --git a/bookwyrm/tests/connectors/test_abstract_minimal_connector.py b/bookwyrm/tests/connectors/test_abstract_minimal_connector.py index 119ca3581..73399649e 100644 --- a/bookwyrm/tests/connectors/test_abstract_minimal_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_minimal_connector.py @@ -9,8 +9,9 @@ from bookwyrm.connectors.abstract_connector import Mapping class AbstractConnector(TestCase): """generic code for connecting to outside data sources""" - def setUp(self): - """we need an example connector""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """we need an example connector in the database""" self.connector_info = models.Connector.objects.create( identifier="example.com", connector_file="openlibrary", @@ -21,6 +22,9 @@ class AbstractConnector(TestCase): isbn_search_url="https://example.com/isbn?q=", ) + def setUp(self): + """instantiate example connector""" + class TestConnector(abstract_connector.AbstractMinimalConnector): """nothing added here""" diff --git a/bookwyrm/tests/connectors/test_bookwyrm_connector.py b/bookwyrm/tests/connectors/test_bookwyrm_connector.py index 1e369ca01..553901655 100644 --- a/bookwyrm/tests/connectors/test_bookwyrm_connector.py +++ b/bookwyrm/tests/connectors/test_bookwyrm_connector.py @@ -11,8 +11,9 @@ from bookwyrm.connectors.bookwyrm_connector import Connector class BookWyrmConnector(TestCase): """this connector doesn't do much, just search""" - def setUp(self): - """create the connector""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """create bookwrym_connector in the database""" models.Connector.objects.create( identifier="example.com", connector_file="bookwyrm_connector", @@ -21,6 +22,9 @@ class BookWyrmConnector(TestCase): covers_url="https://example.com/images/covers", search_url="https://example.com/search?q=", ) + + def setUp(self): + """test data""" self.connector = Connector("example.com") def test_get_or_create_book_existing(self): diff --git a/bookwyrm/tests/connectors/test_connector_manager.py b/bookwyrm/tests/connectors/test_connector_manager.py index c0c09147e..cc01f1116 100644 --- a/bookwyrm/tests/connectors/test_connector_manager.py +++ b/bookwyrm/tests/connectors/test_connector_manager.py @@ -10,7 +10,8 @@ from bookwyrm.connectors.bookwyrm_connector import Connector as BookWyrmConnecto class ConnectorManager(TestCase): """interface between the app and various connectors""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we'll need some books and a connector info entry""" self.work = models.Work.objects.create(title="Example Work") diff --git a/bookwyrm/tests/connectors/test_inventaire_connector.py b/bookwyrm/tests/connectors/test_inventaire_connector.py index 3bba9ece3..c4ea1a595 100644 --- a/bookwyrm/tests/connectors/test_inventaire_connector.py +++ b/bookwyrm/tests/connectors/test_inventaire_connector.py @@ -14,8 +14,9 @@ from bookwyrm.connectors.connector_manager import ConnectorException class Inventaire(TestCase): """test loading data from inventaire.io""" - def setUp(self): - """creates the connector we'll use""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """creates the connector in the database""" models.Connector.objects.create( identifier="inventaire.io", name="Inventaire", @@ -26,6 +27,9 @@ class Inventaire(TestCase): search_url="https://inventaire.io/search?q=", isbn_search_url="https://inventaire.io/isbn", ) + + def setUp(self): + """connector instance""" self.connector = Connector("inventaire.io") @responses.activate diff --git a/bookwyrm/tests/connectors/test_openlibrary_connector.py b/bookwyrm/tests/connectors/test_openlibrary_connector.py index 70db03483..487356400 100644 --- a/bookwyrm/tests/connectors/test_openlibrary_connector.py +++ b/bookwyrm/tests/connectors/test_openlibrary_connector.py @@ -18,8 +18,9 @@ from bookwyrm.connectors.connector_manager import ConnectorException class Openlibrary(TestCase): """test loading data from openlibrary.org""" - def setUp(self): - """creates the connector we'll use""" + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """creates the connector in the database""" models.Connector.objects.create( identifier="openlibrary.org", name="OpenLibrary", @@ -30,6 +31,9 @@ class Openlibrary(TestCase): search_url="https://openlibrary.org/search?q=", isbn_search_url="https://openlibrary.org/isbn", ) + + def setUp(self): + """connector instance and other test data""" self.connector = Connector("openlibrary.org") work_file = pathlib.Path(__file__).parent.joinpath("../data/ol_work.json") diff --git a/bookwyrm/tests/importers/test_calibre_import.py b/bookwyrm/tests/importers/test_calibre_import.py index 37b206458..d549a75ed 100644 --- a/bookwyrm/tests/importers/test_calibre_import.py +++ b/bookwyrm/tests/importers/test_calibre_import.py @@ -16,12 +16,15 @@ from bookwyrm.models.import_job import handle_imported_book 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 88f8eb3f4..0b5fd5e2d 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 f48b97993..eb3041dc6 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 71a1c9796..c2fe7a9a8 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 @@ class LibrarythingImport(TestCase): # 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 82b5ec3ea..2712930d9 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 0befbeb3f..edc484629 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 96f1ae231..51f0709b0 100644 --- a/bookwyrm/tests/lists_stream/test_signals.py +++ b/bookwyrm/tests/lists_stream/test_signals.py @@ -8,8 +8,9 @@ from bookwyrm import lists_stream, models 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 0e87c7436..6dd6a1c8e 100644 --- a/bookwyrm/tests/lists_stream/test_stream.py +++ b/bookwyrm/tests/lists_stream/test_stream.py @@ -15,8 +15,9 @@ from bookwyrm import lists_stream, models 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 2e01cecad..18ddecf18 100644 --- a/bookwyrm/tests/lists_stream/test_tasks.py +++ b/bookwyrm/tests/lists_stream/test_tasks.py @@ -10,8 +10,9 @@ from bookwyrm import lists_stream, models 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 2cce7b7a3..5990da4e3 100644 --- a/bookwyrm/tests/management/test_populate_lists_streams.py +++ b/bookwyrm/tests/management/test_populate_lists_streams.py @@ -12,7 +12,8 @@ from bookwyrm.management.commands.populate_lists_streams import populate_lists_s 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 c20a21ac5..4d6bf688f 100644 --- a/bookwyrm/tests/management/test_populate_streams.py +++ b/bookwyrm/tests/management/test_populate_streams.py @@ -10,7 +10,8 @@ from bookwyrm.management.commands.populate_streams import populate_streams 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/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index 645a6546b..c6c1b8235 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -26,7 +26,8 @@ from bookwyrm.settings import PAGE_LENGTH 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 @@ class ActivitypubMixins(TestCase): outbox="https://example.com/users/rat/outbox", ) + def setUp(self): + """test data""" self.object_mock = { "to": "to field", "cc": "cc field", diff --git a/bookwyrm/tests/models/test_automod.py b/bookwyrm/tests/models/test_automod.py index 9de7e6488..1ad139886 100644 --- a/bookwyrm/tests/models/test_automod.py +++ b/bookwyrm/tests/models/test_automod.py @@ -14,10 +14,9 @@ from bookwyrm.models.antispam import automod_task 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 @@ class AutomodModel(TestCase): 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 b94592571..f1f465b73 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -12,7 +12,8 @@ from bookwyrm.settings import DOMAIN 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 @@ class BaseModel(TestCase): 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 4347efcb6..c6b854180 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -18,7 +18,8 @@ from bookwyrm.settings import ENABLE_THUMBNAIL_GENERATION 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_group.py b/bookwyrm/tests/models/test_group.py index 86cafaa39..6f5388b19 100644 --- a/bookwyrm/tests/models/test_group.py +++ b/bookwyrm/tests/models/test_group.py @@ -9,7 +9,8 @@ from bookwyrm import models 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 d1ff209f4..7ca36d223 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -16,7 +16,8 @@ from bookwyrm.connectors import connector_manager 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 @@ class ImportJob(TestCase): 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 8afecd6ce..f72bdc239 100644 --- a/bookwyrm/tests/models/test_link.py +++ b/bookwyrm/tests/models/test_link.py @@ -9,17 +9,6 @@ from bookwyrm import models 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 f7e64c6f2..83d7ed6a5 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -11,7 +11,8 @@ from bookwyrm import models, settings 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 352b7631d..93422640b 100644 --- a/bookwyrm/tests/models/test_notification.py +++ b/bookwyrm/tests/models/test_notification.py @@ -7,7 +7,8 @@ from bookwyrm import models 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 @@ class Notification(TestCase): 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 7e3963cff..d34a06aaf 100644 --- a/bookwyrm/tests/models/test_readthrough_model.py +++ b/bookwyrm/tests/models/test_readthrough_model.py @@ -11,7 +11,8 @@ from bookwyrm import models 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 a5b4dbffd..8f849bc3b 100644 --- a/bookwyrm/tests/models/test_relationship_models.py +++ b/bookwyrm/tests/models/test_relationship_models.py @@ -14,7 +14,8 @@ from bookwyrm import models 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 4f7f35890..88b1fad06 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -15,7 +15,8 @@ from bookwyrm import models, settings 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 05882268e..f4accc04b 100644 --- a/bookwyrm/tests/models/test_site.py +++ b/bookwyrm/tests/models/test_site.py @@ -12,7 +12,8 @@ from bookwyrm import models, settings 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 d1f07b44e..9899f6bf3 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -24,8 +24,8 @@ from bookwyrm import activitypub, models, settings 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 @@ class Status(TestCase): ) 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 @@ class Status(TestCase): 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 30d7918c0..47a662e49 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 54ae8806b..dcff01a80 100644 --- a/bookwyrm/tests/templatetags/test_book_display_tags.py +++ b/bookwyrm/tests/templatetags/test_book_display_tags.py @@ -13,7 +13,8 @@ from bookwyrm.templatetags import book_display_tags 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_feed_page_tags.py b/bookwyrm/tests/templatetags/test_feed_page_tags.py index 5e5dc2357..d0a895f36 100644 --- a/bookwyrm/tests/templatetags/test_feed_page_tags.py +++ b/bookwyrm/tests/templatetags/test_feed_page_tags.py @@ -12,7 +12,8 @@ from bookwyrm.templatetags import feed_page_tags 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 a48b3364d..a9d1267c0 100644 --- a/bookwyrm/tests/templatetags/test_interaction.py +++ b/bookwyrm/tests/templatetags/test_interaction.py @@ -12,7 +12,8 @@ from bookwyrm.templatetags import interaction 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 3c92181b2..94f839ec5 100644 --- a/bookwyrm/tests/templatetags/test_notification_page_tags.py +++ b/bookwyrm/tests/templatetags/test_notification_page_tags.py @@ -12,7 +12,8 @@ from bookwyrm.templatetags import notification_page_tags 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 8c07eeb8f..5225d57a6 100644 --- a/bookwyrm/tests/templatetags/test_rating_tags.py +++ b/bookwyrm/tests/templatetags/test_rating_tags.py @@ -12,7 +12,8 @@ from bookwyrm.templatetags import rating_tags 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 5a88604dd..7c456c815 100644 --- a/bookwyrm/tests/templatetags/test_shelf_tags.py +++ b/bookwyrm/tests/templatetags/test_shelf_tags.py @@ -15,9 +15,9 @@ from bookwyrm.templatetags import shelf_tags 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 @@ class ShelfTags(TestCase): 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 af2fc9420..a9bab0b68 100644 --- a/bookwyrm/tests/templatetags/test_status_display.py +++ b/bookwyrm/tests/templatetags/test_status_display.py @@ -14,7 +14,8 @@ from bookwyrm.templatetags import status_display 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 c9e1c744f..1bf98fda8 100644 --- a/bookwyrm/tests/templatetags/test_utilities.py +++ b/bookwyrm/tests/templatetags/test_utilities.py @@ -14,8 +14,8 @@ from bookwyrm.templatetags import utilities 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 ad954f585..d2056bfeb 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -10,7 +10,8 @@ from bookwyrm.connectors.abstract_connector import AbstractMinimalConnector 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") diff --git a/bookwyrm/tests/test_context_processors.py b/bookwyrm/tests/test_context_processors.py index 3d634aaf2..614db681c 100644 --- a/bookwyrm/tests/test_context_processors.py +++ b/bookwyrm/tests/test_context_processors.py @@ -11,9 +11,9 @@ from bookwyrm.context_processors import site_settings 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 @@ class ContextProcessor(TestCase): 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 b2af59f4f..119941e85 100644 --- a/bookwyrm/tests/test_emailing.py +++ b/bookwyrm/tests/test_emailing.py @@ -11,10 +11,9 @@ from bookwyrm import emailing, models 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 @@ class Emailing(TestCase): ) 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 d61c32df5..b539f089b 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -35,8 +35,8 @@ Sender = namedtuple("Sender", ("remote_id", "key_pair")) 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 @@ class Signature(TestCase): 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/views/admin/test_announcements.py b/bookwyrm/tests/views/admin/test_announcements.py index 94f748482..30bc94a1f 100644 --- a/bookwyrm/tests/views/admin/test_announcements.py +++ b/bookwyrm/tests/views/admin/test_announcements.py @@ -11,9 +11,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class AnnouncementViews(TestCase): 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 a1c03d436..1835a24ee 100644 --- a/bookwyrm/tests/views/admin/test_automod.py +++ b/bookwyrm/tests/views/admin/test_automod.py @@ -15,10 +15,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class AutomodViews(TestCase): 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 f9429c4c0..d215a9657 100644 --- a/bookwyrm/tests/views/admin/test_celery.py +++ b/bookwyrm/tests/views/admin/test_celery.py @@ -14,10 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class CeleryStatusViews(TestCase): 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 c36e2918f..8eeb754a8 100644 --- a/bookwyrm/tests/views/admin/test_dashboard.py +++ b/bookwyrm/tests/views/admin/test_dashboard.py @@ -14,9 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class DashboardViews(TestCase): 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 3c0f548e6..75c0be929 100644 --- a/bookwyrm/tests/views/admin/test_email_blocks.py +++ b/bookwyrm/tests/views/admin/test_email_blocks.py @@ -14,9 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class EmailBlocklistViews(TestCase): 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 3aa16cb1d..63d85cbef 100644 --- a/bookwyrm/tests/views/admin/test_email_config.py +++ b/bookwyrm/tests/views/admin/test_email_config.py @@ -14,10 +14,9 @@ from bookwyrm.tests.validate_html import validate_html class EmailConfigViews(TestCase): """every response to a get request, html or json""" - # pylint: disable=invalid-name - def setUp(self): + @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 @@ class EmailConfigViews(TestCase): 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 95b3225d5..1a5067299 100644 --- a/bookwyrm/tests/views/admin/test_federation.py +++ b/bookwyrm/tests/views/admin/test_federation.py @@ -17,10 +17,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class FederationViews(TestCase): 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 eaa9fd84a..5a5599519 100644 --- a/bookwyrm/tests/views/admin/test_imports.py +++ b/bookwyrm/tests/views/admin/test_imports.py @@ -14,10 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class ImportsAdminViews(TestCase): 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 a15a4d368..06c110a06 100644 --- a/bookwyrm/tests/views/admin/test_ip_blocklist.py +++ b/bookwyrm/tests/views/admin/test_ip_blocklist.py @@ -14,9 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class IPBlocklistViews(TestCase): 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 5b2b8e025..14eed419b 100644 --- a/bookwyrm/tests/views/admin/test_link_domains.py +++ b/bookwyrm/tests/views/admin/test_link_domains.py @@ -14,9 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class LinkDomainViews(TestCase): 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 a74e8b0e1..4334eeed9 100644 --- a/bookwyrm/tests/views/admin/test_reports.py +++ b/bookwyrm/tests/views/admin/test_reports.py @@ -15,10 +15,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class ReportViews(TestCase): 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 8eda6a2fb..b7c687e09 100644 --- a/bookwyrm/tests/views/admin/test_site.py +++ b/bookwyrm/tests/views/admin/test_site.py @@ -14,10 +14,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class SiteSettingsViews(TestCase): 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 296cd4d8d..66384f5fc 100644 --- a/bookwyrm/tests/views/admin/test_themes.py +++ b/bookwyrm/tests/views/admin/test_themes.py @@ -15,10 +15,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class AdminThemesViews(TestCase): 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 1d11c7338..99c630526 100644 --- a/bookwyrm/tests/views/admin/test_user_admin.py +++ b/bookwyrm/tests/views/admin/test_user_admin.py @@ -15,9 +15,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class UserAdminViews(TestCase): 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 a829c4a4b..d1d118ec0 100644 --- a/bookwyrm/tests/views/books/test_book.py +++ b/bookwyrm/tests/views/books/test_book.py @@ -23,9 +23,9 @@ from bookwyrm.tests.validate_html import validate_html 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 @@ class BookViews(TestCase): 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() diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index 49e8c7cdb..169112bab 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -19,9 +19,9 @@ from bookwyrm.tests.views.books.test_book import _setup_cover_url 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 @@ class EditBookViews(TestCase): remote_id="https://example.com/book/1", parent_work=self.work, ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() # pylint: disable=line-too-long self.authors_body = "1.10000000084510024" - - # pylint: disable=line-too-long self.author_body = "0000000084510024https://isni.org/isni/000000008451002460Catherine Amy Dawson Scottpoet and novelistpublicVIAFWKPQ544961C. A.Dawson Scott1865-1934publicVIAFNLPa28927850VIAF45886165ALLCREhttp://viaf.org/viaf/45886165Wikipediahttps://en.wikipedia.org/wiki/Catherine_Amy_Dawson_Scott" responses.get( @@ -86,8 +89,6 @@ class EditBookViews(TestCase): body=self.author_body, ) - models.SiteSettings.objects.create() - def test_edit_book_get(self): """there are so many views, this just makes sure it LOADS""" view = views.EditBook.as_view() diff --git a/bookwyrm/tests/views/books/test_editions.py b/bookwyrm/tests/views/books/test_editions.py index 70a95051a..64de34067 100644 --- a/bookwyrm/tests/views/books/test_editions.py +++ b/bookwyrm/tests/views/books/test_editions.py @@ -13,9 +13,9 @@ from bookwyrm.tests.validate_html import validate_html 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"): @@ -37,6 +37,10 @@ class BookViews(TestCase): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_editions_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Editions.as_view() diff --git a/bookwyrm/tests/views/books/test_links.py b/bookwyrm/tests/views/books/test_links.py index bace38b7e..817463656 100644 --- a/bookwyrm/tests/views/books/test_links.py +++ b/bookwyrm/tests/views/books/test_links.py @@ -15,10 +15,9 @@ from bookwyrm.tests.validate_html import validate_html class LinkViews(TestCase): """books books books""" - # 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" ): @@ -49,6 +48,10 @@ class LinkViews(TestCase): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_add_link_page(self): """there are so many views, this just makes sure it LOADS""" view = views.AddFileLink.as_view() diff --git a/bookwyrm/tests/views/imports/test_import.py b/bookwyrm/tests/views/imports/test_import.py index 7dd87d4c2..d0612ee68 100644 --- a/bookwyrm/tests/views/imports/test_import.py +++ b/bookwyrm/tests/views/imports/test_import.py @@ -16,10 +16,9 @@ from bookwyrm.tests.validate_html import validate_html class ImportViews(TestCase): """goodreads import views""" - # 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"): @@ -32,6 +31,10 @@ class ImportViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_import_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Import.as_view() diff --git a/bookwyrm/tests/views/imports/test_import_review.py b/bookwyrm/tests/views/imports/test_import_review.py index 92839be6d..27bb3f9d1 100644 --- a/bookwyrm/tests/views/imports/test_import_review.py +++ b/bookwyrm/tests/views/imports/test_import_review.py @@ -11,10 +11,9 @@ from bookwyrm import models, views class ImportManualReviewViews(TestCase): """goodreads import views""" - # 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 @@ class ImportManualReviewViews(TestCase): parent_work=work, ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_import_troubleshoot_get(self): """there are so many views, this just makes sure it LOADS""" view = views.ImportManualReview.as_view() diff --git a/bookwyrm/tests/views/imports/test_import_troubleshoot.py b/bookwyrm/tests/views/imports/test_import_troubleshoot.py index a40e96118..0e12c406a 100644 --- a/bookwyrm/tests/views/imports/test_import_troubleshoot.py +++ b/bookwyrm/tests/views/imports/test_import_troubleshoot.py @@ -12,10 +12,9 @@ from bookwyrm import models, views class ImportTroubleshootViews(TestCase): """goodreads import views""" - # 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"): @@ -28,6 +27,10 @@ class ImportTroubleshootViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_import_troubleshoot_get(self): """there are so many views, this just makes sure it LOADS""" view = views.ImportTroubleshoot.as_view() diff --git a/bookwyrm/tests/views/inbox/test_inbox.py b/bookwyrm/tests/views/inbox/test_inbox.py index 61acde5d3..1c05806a5 100644 --- a/bookwyrm/tests/views/inbox/test_inbox.py +++ b/bookwyrm/tests/views/inbox/test_inbox.py @@ -15,12 +15,22 @@ from bookwyrm import models, views class Inbox(TestCase): """readthrough tests""" - # pylint: disable=invalid-name def setUp(self): - """basic user and book data""" + """individual test setup""" self.client = Client() self.factory = RequestFactory() + self.create_json = { + "id": "hi", + "type": "Create", + "actor": "hi", + "to": ["https://www.w3.org/ns/activitystreams#public"], + "cc": ["https://example.com/user/mouse/followers"], + "object": {}, + } + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument + """basic user and book data""" 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,14 +53,6 @@ class Inbox(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.create_json = { - "id": "hi", - "type": "Create", - "actor": "hi", - "to": ["https://www.w3.org/ns/activitystreams#public"], - "cc": ["https://example.com/user/mouse/followers"], - "object": {}, - } models.SiteSettings.objects.create() def test_inbox_invalid_get(self): diff --git a/bookwyrm/tests/views/inbox/test_inbox_add.py b/bookwyrm/tests/views/inbox/test_inbox_add.py index fccd1a50f..5fbeaa33a 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_add.py +++ b/bookwyrm/tests/views/inbox/test_inbox_add.py @@ -11,7 +11,8 @@ from bookwyrm import models, views class InboxAdd(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py index c77c18bc5..e6fdf9375 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_announce.py +++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py @@ -11,7 +11,8 @@ from bookwyrm import models, views class InboxActivities(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -44,6 +45,10 @@ class InboxActivities(TestCase): remote_id="https://example.com/status/1", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" self.create_json = { "id": "hi", "type": "Create", @@ -53,8 +58,6 @@ class InboxActivities(TestCase): "object": {}, } - models.SiteSettings.objects.create() - @patch("bookwyrm.activitystreams.handle_boost_task.delay") def test_boost(self, _): """boost a status""" diff --git a/bookwyrm/tests/views/inbox/test_inbox_block.py b/bookwyrm/tests/views/inbox/test_inbox_block.py index eb73af094..9fef621ea 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_block.py +++ b/bookwyrm/tests/views/inbox/test_inbox_block.py @@ -10,7 +10,8 @@ from bookwyrm import models, views class InboxBlock(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index f0fb84edf..c2045b092 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -9,7 +9,7 @@ from bookwyrm import models, views from bookwyrm.activitypub import ActivitySerializerError -# pylint: disable=too-many-public-methods, invalid-name +# pylint: disable=too-many-public-methods class TransactionInboxCreate(TransactionTestCase): """readthrough tests""" @@ -71,7 +71,8 @@ class TransactionInboxCreate(TransactionTestCase): class InboxCreate(TestCase): """readthrough tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -96,6 +97,10 @@ class InboxCreate(TestCase): outbox="https://example.com/users/rat/outbox", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" self.create_json = { "id": "hi", "type": "Create", @@ -104,7 +109,6 @@ class InboxCreate(TestCase): "cc": ["https://example.com/user/mouse/followers"], "object": {}, } - models.SiteSettings.objects.create() def test_create_status(self, *_): """the "it justs works" mode""" diff --git a/bookwyrm/tests/views/inbox/test_inbox_delete.py b/bookwyrm/tests/views/inbox/test_inbox_delete.py index 7b4c12564..8023308be 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_delete.py +++ b/bookwyrm/tests/views/inbox/test_inbox_delete.py @@ -11,8 +11,8 @@ from bookwyrm import models, views class InboxActivities(TestCase): """inbox tests""" - # pylint: disable=invalid-name - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/views/inbox/test_inbox_follow.py b/bookwyrm/tests/views/inbox/test_inbox_follow.py index 13e46ff8d..180a57176 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_follow.py +++ b/bookwyrm/tests/views/inbox/test_inbox_follow.py @@ -11,7 +11,8 @@ from bookwyrm import models, views class InboxRelationships(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/views/inbox/test_inbox_like.py b/bookwyrm/tests/views/inbox/test_inbox_like.py index ea4d4a65a..34c8c830b 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_like.py +++ b/bookwyrm/tests/views/inbox/test_inbox_like.py @@ -10,7 +10,8 @@ from bookwyrm import models, views class InboxActivities(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -43,6 +44,10 @@ class InboxActivities(TestCase): remote_id="https://example.com/status/1", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" self.create_json = { "id": "hi", "type": "Create", @@ -52,8 +57,6 @@ class InboxActivities(TestCase): "object": {}, } - models.SiteSettings.objects.create() - def test_handle_favorite(self): """fav a status""" activity = { diff --git a/bookwyrm/tests/views/inbox/test_inbox_remove.py b/bookwyrm/tests/views/inbox/test_inbox_remove.py index d7b3f6778..d80a4fdd7 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_remove.py +++ b/bookwyrm/tests/views/inbox/test_inbox_remove.py @@ -10,7 +10,8 @@ from bookwyrm import models, views class InboxRemove(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index e8593c2be..b9f924bad 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -12,7 +12,8 @@ from bookwyrm import models, views class InboxUpdate(TestCase): """inbox tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -37,6 +38,10 @@ class InboxUpdate(TestCase): outbox="https://example.com/users/rat/outbox", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" self.update_json = { "id": "hi", "type": "Update", @@ -46,8 +51,6 @@ class InboxUpdate(TestCase): "object": {}, } - models.SiteSettings.objects.create() - def test_update_list(self): """a new list""" with patch( diff --git a/bookwyrm/tests/views/landing/test_invite.py b/bookwyrm/tests/views/landing/test_invite.py index a96ecb9f2..f7ec73cf4 100644 --- a/bookwyrm/tests/views/landing/test_invite.py +++ b/bookwyrm/tests/views/landing/test_invite.py @@ -14,10 +14,9 @@ from bookwyrm.tests.validate_html import validate_html class InviteViews(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,10 @@ class InviteViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_invite_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Invite.as_view() diff --git a/bookwyrm/tests/views/landing/test_landing.py b/bookwyrm/tests/views/landing/test_landing.py index f56eaf7a9..b67857da8 100644 --- a/bookwyrm/tests/views/landing/test_landing.py +++ b/bookwyrm/tests/views/landing/test_landing.py @@ -14,9 +14,9 @@ from bookwyrm.tests.validate_html import validate_html class LandingViews(TestCase): """pages you land on without really trying""" - def setUp(self): # pylint: disable=invalid-name + @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,9 +27,13 @@ class LandingViews(TestCase): local=True, localname="mouse", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create() @patch("bookwyrm.suggested_users.SuggestedUsers.get_suggestions") def test_home_page(self, _): diff --git a/bookwyrm/tests/views/landing/test_login.py b/bookwyrm/tests/views/landing/test_login.py index eab082609..19ad1d2a0 100644 --- a/bookwyrm/tests/views/landing/test_login.py +++ b/bookwyrm/tests/views/landing/test_login.py @@ -17,10 +17,9 @@ from bookwyrm.tests.validate_html import validate_html class LoginViews(TestCase): """login and password management""" - # 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"): @@ -47,9 +46,13 @@ class LoginViews(TestCase): localname="badger", two_factor_auth=True, ) + models.SiteSettings.objects.create(id=1, require_confirm_email=False) + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create(id=1, require_confirm_email=False) def test_login_get(self, *_): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/landing/test_password.py b/bookwyrm/tests/views/landing/test_password.py index c1adf61e9..ceceeb3e4 100644 --- a/bookwyrm/tests/views/landing/test_password.py +++ b/bookwyrm/tests/views/landing/test_password.py @@ -16,9 +16,9 @@ from bookwyrm.tests.validate_html import validate_html class PasswordViews(TestCase): """view user and edit profile""" - 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"): @@ -29,9 +29,13 @@ class PasswordViews(TestCase): local=True, localname="mouse", ) + models.SiteSettings.objects.create(id=1) + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create(id=1) def test_password_reset_request(self): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/landing/test_register.py b/bookwyrm/tests/views/landing/test_register.py index 04f3a25ec..381a35a32 100644 --- a/bookwyrm/tests/views/landing/test_register.py +++ b/bookwyrm/tests/views/landing/test_register.py @@ -20,10 +20,9 @@ from bookwyrm.tests.validate_html import validate_html class RegisterViews(TestCase): """login and password management""" - # 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,13 +33,16 @@ class RegisterViews(TestCase): local=True, localname="mouse", ) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False - self.settings = models.SiteSettings.objects.create( id=1, require_confirm_email=False, allow_registration=True ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + def test_get_redirect(self, *_): """there's no dedicated registration page""" view = views.Register.as_view() diff --git a/bookwyrm/tests/views/lists/test_curate.py b/bookwyrm/tests/views/lists/test_curate.py index 9f3427b2c..7fa48f915 100644 --- a/bookwyrm/tests/views/lists/test_curate.py +++ b/bookwyrm/tests/views/lists/test_curate.py @@ -15,9 +15,9 @@ from bookwyrm.tests.validate_html import validate_html class ListViews(TestCase): """list view""" - 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,11 +42,15 @@ class ListViews(TestCase): self.list = models.List.objects.create( name="Test List", user=self.local_user ) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + def test_curate_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Curate.as_view() diff --git a/bookwyrm/tests/views/lists/test_embed.py b/bookwyrm/tests/views/lists/test_embed.py index 4191ffe0d..40c51f5df 100644 --- a/bookwyrm/tests/views/lists/test_embed.py +++ b/bookwyrm/tests/views/lists/test_embed.py @@ -15,9 +15,9 @@ from bookwyrm.tests.validate_html import validate_html class ListViews(TestCase): """list view""" - 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,11 +42,15 @@ class ListViews(TestCase): self.list = models.List.objects.create( name="Test List", user=self.local_user ) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + def test_embed_call_without_key(self): """there are so many views, this just makes sure it DOESNā€™T load""" view = views.unsafe_embed_list diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index 98b0a461a..b1e7e2acc 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -18,9 +18,9 @@ from bookwyrm.tests.validate_html import validate_html class ListViews(TestCase): """list view""" - 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"): @@ -71,11 +71,15 @@ class ListViews(TestCase): self.list = models.List.objects.create( name="Test List", user=self.local_user ) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + def test_list_page(self): """there are so many views, this just makes sure it LOADS""" view = views.List.as_view() diff --git a/bookwyrm/tests/views/lists/test_list_item.py b/bookwyrm/tests/views/lists/test_list_item.py index b95282bef..ebdbdbc2e 100644 --- a/bookwyrm/tests/views/lists/test_list_item.py +++ b/bookwyrm/tests/views/lists/test_list_item.py @@ -12,9 +12,9 @@ from bookwyrm import models, views class ListItemViews(TestCase): """list view""" - 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 @@ class ListItemViews(TestCase): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_add_list_item_notes(self): """there are so many views, this just makes sure it LOADS""" view = views.ListItem.as_view() diff --git a/bookwyrm/tests/views/lists/test_lists.py b/bookwyrm/tests/views/lists/test_lists.py index 38a97c412..0d2213ee7 100644 --- a/bookwyrm/tests/views/lists/test_lists.py +++ b/bookwyrm/tests/views/lists/test_lists.py @@ -15,10 +15,9 @@ from bookwyrm.tests.validate_html import validate_html class ListViews(TestCase): """lists of lists""" - # 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"): @@ -33,11 +32,15 @@ class ListViews(TestCase): self.another_user = models.User.objects.create_user( "rat@local.com", "rat@rat.com", "ratword", local=True, localname="rat" ) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + @patch("bookwyrm.lists_stream.ListsStream.get_list_stream") def test_lists_page(self, _): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/preferences/test_block.py b/bookwyrm/tests/views/preferences/test_block.py index 46de8f48e..86ef95e7e 100644 --- a/bookwyrm/tests/views/preferences/test_block.py +++ b/bookwyrm/tests/views/preferences/test_block.py @@ -13,9 +13,9 @@ from bookwyrm.tests.validate_html import validate_html class BlockViews(TestCase): """view user and edit profile""" - 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"): @@ -39,6 +39,10 @@ class BlockViews(TestCase): models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_block_get(self, _): """there are so many views, this just makes sure it LOADS""" view = views.Block.as_view() diff --git a/bookwyrm/tests/views/preferences/test_change_password.py b/bookwyrm/tests/views/preferences/test_change_password.py index 879ffd03d..49eac998c 100644 --- a/bookwyrm/tests/views/preferences/test_change_password.py +++ b/bookwyrm/tests/views/preferences/test_change_password.py @@ -12,9 +12,9 @@ from bookwyrm.tests.validate_html import validate_html class ChangePasswordViews(TestCase): """view user and edit profile""" - 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 @@ class ChangePasswordViews(TestCase): ) models.SiteSettings.objects.create(id=1) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_password_change_get(self): """there are so many views, this just makes sure it LOADS""" view = views.ChangePassword.as_view() diff --git a/bookwyrm/tests/views/preferences/test_delete_user.py b/bookwyrm/tests/views/preferences/test_delete_user.py index 1994a5a4d..d97ef0d38 100644 --- a/bookwyrm/tests/views/preferences/test_delete_user.py +++ b/bookwyrm/tests/views/preferences/test_delete_user.py @@ -16,10 +16,9 @@ from bookwyrm.tests.validate_html import validate_html class DeleteUserViews(TestCase): """view user and edit profile""" - # 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"): @@ -50,9 +49,13 @@ class DeleteUserViews(TestCase): shelf=self.local_user.shelf_set.first(), ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create() def test_delete_user_page(self, _): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/preferences/test_edit_user.py b/bookwyrm/tests/views/preferences/test_edit_user.py index 11d333406..1ed4e3240 100644 --- a/bookwyrm/tests/views/preferences/test_edit_user.py +++ b/bookwyrm/tests/views/preferences/test_edit_user.py @@ -18,9 +18,9 @@ from bookwyrm.tests.validate_html import validate_html class EditUserViews(TestCase): """view user and edit profile""" - 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 +48,10 @@ class EditUserViews(TestCase): ) models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index fbc55a9e3..4f498f589 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -17,9 +17,9 @@ from bookwyrm.tests.validate_html import validate_html class ExportViews(TestCase): """viewing and creating statuses""" - 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" ): @@ -40,6 +40,10 @@ class ExportViews(TestCase): bnf_id="beep", ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def tst_export_get(self, *_): """request export""" request = self.factory.get("") diff --git a/bookwyrm/tests/views/preferences/test_two_factor_auth.py b/bookwyrm/tests/views/preferences/test_two_factor_auth.py index ac6bd654c..dbd9c1f5b 100644 --- a/bookwyrm/tests/views/preferences/test_two_factor_auth.py +++ b/bookwyrm/tests/views/preferences/test_two_factor_auth.py @@ -17,9 +17,9 @@ from bookwyrm import forms, models, views class TwoFactorViews(TestCase): """Two Factor Authentication management""" - 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 @@ class TwoFactorViews(TestCase): hotp_secret="DRMNMOU7ZRKH5YPW7PADOEYUF7MRIH46", hotp_count=0, ) + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False diff --git a/bookwyrm/tests/views/shelf/test_shelf.py b/bookwyrm/tests/views/shelf/test_shelf.py index 9aec632f7..492f214e3 100644 --- a/bookwyrm/tests/views/shelf/test_shelf.py +++ b/bookwyrm/tests/views/shelf/test_shelf.py @@ -20,9 +20,9 @@ from bookwyrm.tests.validate_html import validate_html class ShelfViews(TestCase): """tag views""" - 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"): @@ -46,6 +46,9 @@ class ShelfViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False diff --git a/bookwyrm/tests/views/shelf/test_shelf_actions.py b/bookwyrm/tests/views/shelf/test_shelf_actions.py index 290232580..eea17b62d 100644 --- a/bookwyrm/tests/views/shelf/test_shelf_actions.py +++ b/bookwyrm/tests/views/shelf/test_shelf_actions.py @@ -18,9 +18,9 @@ from bookwyrm import forms, models, views class ShelfActionViews(TestCase): """tag views""" - 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"): @@ -52,6 +52,10 @@ class ShelfActionViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_shelve(self, *_): """shelve a book""" request = self.factory.post( diff --git a/bookwyrm/tests/views/test_annual_summary.py b/bookwyrm/tests/views/test_annual_summary.py index aaba0aac6..d51060a72 100644 --- a/bookwyrm/tests/views/test_annual_summary.py +++ b/bookwyrm/tests/views/test_annual_summary.py @@ -21,10 +21,9 @@ def make_date(*args): class AnnualSummary(TestCase): """views""" - # 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"): @@ -44,13 +43,15 @@ class AnnualSummary(TestCase): parent_work=self.work, pages=300, ) + models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.year = "2020" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - self.year = "2020" - models.SiteSettings.objects.create() - def test_annual_summary_not_authenticated(self, *_): """there are so many views, this just makes sure it DOESNā€™T LOAD""" view = views.AnnualSummary.as_view() diff --git a/bookwyrm/tests/views/test_author.py b/bookwyrm/tests/views/test_author.py index 1f8fc51c5..669149af2 100644 --- a/bookwyrm/tests/views/test_author.py +++ b/bookwyrm/tests/views/test_author.py @@ -16,9 +16,9 @@ from bookwyrm.tests.validate_html import validate_html class AuthorViews(TestCase): """author views""" - 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"): @@ -44,10 +44,13 @@ class AuthorViews(TestCase): remote_id="https://example.com/book/1", parent_work=self.work, ) + models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create() def test_author_page(self): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/test_directory.py b/bookwyrm/tests/views/test_directory.py index bceb0e7aa..7e9e97522 100644 --- a/bookwyrm/tests/views/test_directory.py +++ b/bookwyrm/tests/views/test_directory.py @@ -13,9 +13,9 @@ from bookwyrm.tests.validate_html import validate_html class DirectoryViews(TestCase): """tag views""" - 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,8 +27,11 @@ class DirectoryViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False diff --git a/bookwyrm/tests/views/test_discover.py b/bookwyrm/tests/views/test_discover.py index ffe8c51c9..9aa139074 100644 --- a/bookwyrm/tests/views/test_discover.py +++ b/bookwyrm/tests/views/test_discover.py @@ -11,10 +11,9 @@ from bookwyrm.tests.validate_html import validate_html class DiscoverViews(TestCase): """pages you land on without really trying""" - # 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"): @@ -25,9 +24,13 @@ class DiscoverViews(TestCase): local=True, localname="mouse", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create() def test_discover_page_empty(self): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index 99b2a396b..33dbd4ea5 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -24,9 +24,9 @@ from bookwyrm.tests.validate_html import validate_html class FeedViews(TestCase): """activity feed, statuses, dms""" - 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"): @@ -51,6 +51,10 @@ class FeedViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + @patch("bookwyrm.suggested_users.SuggestedUsers.get_suggestions") def test_feed(self, *_): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index d18e24f89..1a311b413 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -17,10 +17,10 @@ from bookwyrm.tests.validate_html import validate_html class FollowViews(TestCase): """follows""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" models.SiteSettings.objects.create() - 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"): @@ -57,6 +57,10 @@ class FollowViews(TestCase): parent_work=self.work, ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_handle_follow_remote(self, *_): """send a follow request""" request = self.factory.post("", {"user": self.remote_user.username}) diff --git a/bookwyrm/tests/views/test_get_started.py b/bookwyrm/tests/views/test_get_started.py index 28b6a4d36..84a49cafc 100644 --- a/bookwyrm/tests/views/test_get_started.py +++ b/bookwyrm/tests/views/test_get_started.py @@ -12,9 +12,9 @@ from bookwyrm.tests.validate_html import validate_html class GetStartedViews(TestCase): """helping new users get oriented""" - 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"): @@ -39,6 +39,10 @@ class GetStartedViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_profile_view(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.GetStartedProfile.as_view() diff --git a/bookwyrm/tests/views/test_goal.py b/bookwyrm/tests/views/test_goal.py index 0faeef117..3d87d8538 100644 --- a/bookwyrm/tests/views/test_goal.py +++ b/bookwyrm/tests/views/test_goal.py @@ -15,9 +15,9 @@ from bookwyrm.tests.validate_html import validate_html class GoalViews(TestCase): """viewing and creating statuses""" - 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,10 +41,14 @@ class GoalViews(TestCase): title="Example Edition", remote_id="https://example.com/book/1", ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.year = timezone.now().year + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - self.year = timezone.now().year - models.SiteSettings.objects.create() def test_goal_page_no_goal(self): """view a reading goal page for another's unset goal""" diff --git a/bookwyrm/tests/views/test_group.py b/bookwyrm/tests/views/test_group.py index 60fca6cb7..4d678c31a 100644 --- a/bookwyrm/tests/views/test_group.py +++ b/bookwyrm/tests/views/test_group.py @@ -16,9 +16,9 @@ from bookwyrm.tests.validate_html import validate_html class GroupViews(TestCase): """view group and edit details""" - def setUp(self): # pylint: disable=invalid-name + @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"): @@ -46,11 +46,14 @@ class GroupViews(TestCase): self.membership = models.GroupMember.objects.create( group=self.testgroup, user=self.local_user ) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create() - def test_group_get(self, _): """there are so many views, this just makes sure it LOADS""" view = views.Group.as_view() diff --git a/bookwyrm/tests/views/test_hashtag.py b/bookwyrm/tests/views/test_hashtag.py index d3115dbce..1c8b31dce 100644 --- a/bookwyrm/tests/views/test_hashtag.py +++ b/bookwyrm/tests/views/test_hashtag.py @@ -14,8 +14,8 @@ from bookwyrm.tests.validate_html import validate_html class HashtagView(TestCase): """hashtag view""" - def setUp(self): - self.factory = RequestFactory() + @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"): @@ -64,9 +64,13 @@ class HashtagView(TestCase): for status in self.statuses_bookclub: status.mention_hashtags.add(self.hashtag_bookclub) + models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - models.SiteSettings.objects.create() def test_hashtag_page(self): """just make sure it loads""" diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index dd30526ec..9472cf762 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -15,13 +15,12 @@ from bookwyrm.settings import USER_AGENT, DOMAIN @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") -class ViewsHelpers(TestCase): +class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods """viewing and creating statuses""" - # 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"): @@ -53,14 +52,18 @@ class ViewsHelpers(TestCase): remote_id="https://example.com/book/1", parent_work=self.work, ) - datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") - self.userdata = json.loads(datafile.read_bytes()) - del self.userdata["icon"] with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): self.shelf = models.Shelf.objects.create( name="Test Shelf", identifier="test-shelf", user=self.local_user ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") + self.userdata = json.loads(datafile.read_bytes()) + del self.userdata["icon"] + def test_get_edition(self, *_): """given an edition or a work, returns an edition""" self.assertEqual(views.helpers.get_edition(self.book.id), self.book) diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py index 74878df7d..1565b96a8 100644 --- a/bookwyrm/tests/views/test_interaction.py +++ b/bookwyrm/tests/views/test_interaction.py @@ -12,9 +12,9 @@ from bookwyrm import models, views class InteractionViews(TestCase): """viewing and creating statuses""" - 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"): @@ -36,7 +36,6 @@ class InteractionViews(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - work = models.Work.objects.create(title="Test Work") self.book = models.Edition.objects.create( title="Example Edition", @@ -44,6 +43,10 @@ class InteractionViews(TestCase): parent_work=work, ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_favorite(self, *_): """create and broadcast faving a status""" view = views.Favorite.as_view() diff --git a/bookwyrm/tests/views/test_isbn.py b/bookwyrm/tests/views/test_isbn.py index e09379418..ca451bef8 100644 --- a/bookwyrm/tests/views/test_isbn.py +++ b/bookwyrm/tests/views/test_isbn.py @@ -14,9 +14,9 @@ from bookwyrm.settings import DOMAIN class IsbnViews(TestCase): """tag views""" - def setUp(self): # pylint: disable=invalid-name + @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"): @@ -37,6 +37,10 @@ class IsbnViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_isbn_json_response(self): """searches local data only and returns book data in json format""" view = views.Isbn.as_view() diff --git a/bookwyrm/tests/views/test_notifications.py b/bookwyrm/tests/views/test_notifications.py index 8e5dfa2b5..8d239d77a 100644 --- a/bookwyrm/tests/views/test_notifications.py +++ b/bookwyrm/tests/views/test_notifications.py @@ -12,9 +12,9 @@ from bookwyrm.tests.validate_html import validate_html class NotificationViews(TestCase): """notifications""" - 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 @@ class NotificationViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_notifications_page_empty(self): """there are so many views, this just makes sure it LOADS""" view = views.Notifications.as_view() diff --git a/bookwyrm/tests/views/test_outbox.py b/bookwyrm/tests/views/test_outbox.py index 598cce514..78c4d0edc 100644 --- a/bookwyrm/tests/views/test_outbox.py +++ b/bookwyrm/tests/views/test_outbox.py @@ -15,9 +15,9 @@ from bookwyrm.settings import USER_AGENT class OutboxView(TestCase): """sends out activities""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we'll need some data""" - 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"): @@ -36,6 +36,10 @@ class OutboxView(TestCase): parent_work=work, ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_outbox(self, _): """returns user's statuses""" request = self.factory.get("") diff --git a/bookwyrm/tests/views/test_reading.py b/bookwyrm/tests/views/test_reading.py index 759866947..fab1c1fc9 100644 --- a/bookwyrm/tests/views/test_reading.py +++ b/bookwyrm/tests/views/test_reading.py @@ -15,9 +15,9 @@ from bookwyrm import models, views class ReadingViews(TestCase): """viewing and creating statuses""" - 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"): @@ -46,6 +46,10 @@ class ReadingViews(TestCase): parent_work=self.work, ) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_start_reading(self, *_): """begin a book""" shelf = self.local_user.shelf_set.get(identifier=models.Shelf.READING) diff --git a/bookwyrm/tests/views/test_readthrough.py b/bookwyrm/tests/views/test_readthrough.py index f4ca3af61..4f5b1e478 100644 --- a/bookwyrm/tests/views/test_readthrough.py +++ b/bookwyrm/tests/views/test_readthrough.py @@ -15,10 +15,9 @@ from bookwyrm import models class ReadThrough(TestCase): """readthrough tests""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - self.client = Client() - self.work = models.Work.objects.create(title="Example Work") self.edition = models.Edition.objects.create( @@ -32,6 +31,9 @@ class ReadThrough(TestCase): "cinco", "cinco@example.com", "seissiete", local=True, localname="cinco" ) + def setUp(self): + """individual test setup""" + self.client = Client() with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): self.client.force_login(self.user) diff --git a/bookwyrm/tests/views/test_report.py b/bookwyrm/tests/views/test_report.py index 487b02929..3e4c64f68 100644 --- a/bookwyrm/tests/views/test_report.py +++ b/bookwyrm/tests/views/test_report.py @@ -11,10 +11,9 @@ from bookwyrm.tests.validate_html import validate_html 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"): @@ -41,6 +40,10 @@ class ReportViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_report_modal_view(self): """a user reports another user""" request = self.factory.get("") diff --git a/bookwyrm/tests/views/test_rss_feed.py b/bookwyrm/tests/views/test_rss_feed.py index cfbec3360..a63bdea94 100644 --- a/bookwyrm/tests/views/test_rss_feed.py +++ b/bookwyrm/tests/views/test_rss_feed.py @@ -12,7 +12,8 @@ from bookwyrm.views import rss_feed class RssFeedView(TestCase): """rss feed behaves as expected""" - 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"): @@ -25,10 +26,12 @@ class RssFeedView(TestCase): remote_id="https://example.com/book/1", parent_work=work, ) - self.factory = RequestFactory() - models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_rss_empty(self, *_): """load an rss feed""" view = rss_feed.RssFeed() diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 28f8268e3..425b96cd3 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -17,9 +17,9 @@ from bookwyrm.tests.validate_html import validate_html class Views(TestCase): """tag views""" - def setUp(self): # pylint: disable=invalid-name + @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"): @@ -39,6 +39,10 @@ class Views(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_search_json_response(self): """searches local data only and returns book data in json format""" view = views.Search.as_view() diff --git a/bookwyrm/tests/views/test_setup.py b/bookwyrm/tests/views/test_setup.py index 7b8da3c33..d2bdba340 100644 --- a/bookwyrm/tests/views/test_setup.py +++ b/bookwyrm/tests/views/test_setup.py @@ -13,11 +13,15 @@ from bookwyrm.tests.validate_html import validate_html class SetupViews(TestCase): """activity feed, statuses, dms""" - def setUp(self): + @classmethod + def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" - self.factory = RequestFactory() self.site = models.SiteSettings.objects.create(install_mode=True) + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_instance_config_permission_denied(self): """there are so many views, this just makes sure it LOADS""" self.site.install_mode = False diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 424698130..7b0c39338 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -11,7 +11,7 @@ from bookwyrm.settings import DOMAIN from bookwyrm.tests.validate_html import validate_html -# pylint: disable=invalid-name + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") class StatusTransactions(TransactionTestCase): """Test full database transactions""" @@ -74,9 +74,9 @@ class StatusTransactions(TransactionTestCase): class StatusViews(TestCase): """viewing and creating statuses""" - 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"): @@ -106,7 +106,6 @@ class StatusViews(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - work = models.Work.objects.create(title="Test Work") self.book = models.Edition.objects.create( title="Example Edition", @@ -115,6 +114,10 @@ class StatusViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_create_status_comment(self, *_): """create a status""" view = views.CreateStatus.as_view() @@ -323,14 +326,14 @@ class StatusViews(TestCase): def test_find_mentions_unknown_remote(self, *_): """mention a user that isn't in the database""" - with patch("bookwyrm.views.status.handle_remote_webfinger") as rw: - rw.return_value = self.another_user + with patch("bookwyrm.views.status.handle_remote_webfinger") as rwf: + rwf.return_value = self.another_user result = find_mentions(self.local_user, "@beep@beep.com") self.assertEqual(result["@nutria"], self.another_user) self.assertEqual(result[f"@nutria@{DOMAIN}"], self.another_user) - with patch("bookwyrm.views.status.handle_remote_webfinger") as rw: - rw.return_value = None + with patch("bookwyrm.views.status.handle_remote_webfinger") as rwf: + rwf.return_value = None result = find_mentions(self.local_user, "@beep@beep.com") self.assertEqual(result, {}) diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index 03cf58668..37cb2e6c6 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -12,9 +12,9 @@ from bookwyrm import models, views class UpdateViews(TestCase): """lets the ui check for unread notification""" - 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 @@ class UpdateViews(TestCase): ) models.SiteSettings.objects.create() + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + def test_get_notification_count(self): """there are so many views, this just makes sure it LOADS""" request = self.factory.get("") diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py index 2b6bc247c..d4e11ff2e 100644 --- a/bookwyrm/tests/views/test_user.py +++ b/bookwyrm/tests/views/test_user.py @@ -15,9 +15,9 @@ from bookwyrm.tests.validate_html import validate_html class UserViews(TestCase): """view user and edit profile""" - 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"): @@ -44,8 +44,11 @@ class UserViews(TestCase): user=self.local_user, shelf=self.local_user.shelf_set.first(), ) - models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False diff --git a/bookwyrm/tests/views/test_wellknown.py b/bookwyrm/tests/views/test_wellknown.py index 80f5a56ae..4617942fa 100644 --- a/bookwyrm/tests/views/test_wellknown.py +++ b/bookwyrm/tests/views/test_wellknown.py @@ -13,9 +13,9 @@ from bookwyrm import models, views class WellknownViews(TestCase): """view user and edit profile""" - 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"): @@ -40,6 +40,10 @@ class WellknownViews(TestCase): outbox="https://example.com/users/rat/outbox", ) models.SiteSettings.objects.create() + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False diff --git a/pytest.ini b/pytest.ini index c5cdc35d1..b50efd602 100644 --- a/pytest.ini +++ b/pytest.ini @@ -6,6 +6,7 @@ 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 From aa67f598dd75941acb0fa7e361341869d3c0c0b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 11 Dec 2023 19:40:48 -0300 Subject: [PATCH 217/458] Explicitly set doctype to html5 when invoking tidy_document() Many tests break without this on newer versions of html-tidy. --- bookwyrm/tests/validate_html.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/tests/validate_html.py b/bookwyrm/tests/validate_html.py index 423a86586..85e5c6277 100644 --- a/bookwyrm/tests/validate_html.py +++ b/bookwyrm/tests/validate_html.py @@ -8,6 +8,7 @@ def validate_html(html): _, errors = tidy_document( html.content, options={ + "doctype": "html5", "drop-empty-elements": False, "warn-proprietary-attributes": False, }, From 13374917f31333217e5d4b079cc8ee351f18f88e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 19 Nov 2023 18:09:22 -0300 Subject: [PATCH 218/458] Make get_representative() atomic --- bookwyrm/activitypub/base_activity.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index aa4b5b687..fbbc18f73 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -236,7 +236,7 @@ class ActivityObject: 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 +397,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): From 8bb5a664c53449290c95aa53c82ec96ddc5bd526 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 11 Dec 2023 20:12:14 -0800 Subject: [PATCH 219/458] Fixes incorrect translation and display of moved user page --- bookwyrm/templates/shelf/shelf.html | 15 +-------------- .../templates/snippets/moved_user_notice.html | 12 ++++++++++++ bookwyrm/templates/user/layout.html | 7 +------ 3 files changed, 14 insertions(+), 20 deletions(-) create mode 100644 bookwyrm/templates/snippets/moved_user_notice.html diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index a2410ef95..45a94fed9 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -19,20 +19,7 @@ {% if user.moved_to %} -
    -
    -

    - {% trans "You have have moved to" %} - {% id_to_username user.moved_to %} -

    -

    {% trans "You can undo this move to restore full functionality, but some followers may have already unfollowed this account." %}

    -
    - {% csrf_token %} - - -
    -
    -
    + {% include "snippets/moved_user_notice.html" with user=user %} {% else %}
    {% if user.moved_to %} -
    -
    -

    {{ user.localname }} {% trans "has moved to" %} {% id_to_username user.moved_to %}

    -
    -
    - + {% include "snippets/moved_user_notice.html" with user=user %} {% else %} {% if not is_self and request.user.is_authenticated %} {% include 'snippets/follow_button.html' with user=user %} From 5c0e159d4370d97e9e2e2ba06956b11094eac956 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 12 Dec 2023 15:42:40 -0800 Subject: [PATCH 220/458] Adds Ukranian locale and updates locales --- .../0189_alter_user_preferred_language.py | 45 + bookwyrm/settings.py | 1 + bw-dev | 1 + locale/ca_ES/LC_MESSAGES/django.mo | Bin 146172 -> 145991 bytes locale/ca_ES/LC_MESSAGES/django.po | 488 +- locale/de_DE/LC_MESSAGES/django.po | 526 +- locale/en_US/LC_MESSAGES/django.po | 396 +- locale/eo_UY/LC_MESSAGES/django.mo | Bin 139704 -> 145168 bytes locale/eo_UY/LC_MESSAGES/django.po | 559 +- locale/es_ES/LC_MESSAGES/django.mo | Bin 146560 -> 149896 bytes locale/es_ES/LC_MESSAGES/django.po | 492 +- locale/eu_ES/LC_MESSAGES/django.mo | Bin 143188 -> 150964 bytes locale/eu_ES/LC_MESSAGES/django.po | 584 +- locale/fi_FI/LC_MESSAGES/django.mo | Bin 143816 -> 143879 bytes locale/fi_FI/LC_MESSAGES/django.po | 490 +- locale/fr_FR/LC_MESSAGES/django.mo | Bin 44850 -> 154174 bytes locale/fr_FR/LC_MESSAGES/django.po | 485 +- locale/gl_ES/LC_MESSAGES/django.mo | Bin 143114 -> 146412 bytes locale/gl_ES/LC_MESSAGES/django.po | 490 +- locale/it_IT/LC_MESSAGES/django.mo | Bin 143352 -> 146772 bytes locale/it_IT/LC_MESSAGES/django.po | 492 +- locale/lt_LT/LC_MESSAGES/django.mo | Bin 145926 -> 145743 bytes locale/lt_LT/LC_MESSAGES/django.po | 488 +- locale/nl_NL/LC_MESSAGES/django.mo | Bin 145230 -> 148744 bytes locale/nl_NL/LC_MESSAGES/django.po | 492 +- locale/no_NO/LC_MESSAGES/django.mo | Bin 96586 -> 96773 bytes locale/no_NO/LC_MESSAGES/django.po | 486 +- locale/pl_PL/LC_MESSAGES/django.mo | Bin 130736 -> 130667 bytes locale/pl_PL/LC_MESSAGES/django.po | 486 +- locale/pt_BR/LC_MESSAGES/django.mo | Bin 92466 -> 92338 bytes locale/pt_BR/LC_MESSAGES/django.po | 486 +- locale/pt_PT/LC_MESSAGES/django.mo | Bin 139722 -> 139503 bytes locale/pt_PT/LC_MESSAGES/django.po | 488 +- locale/ro_RO/LC_MESSAGES/django.mo | Bin 124280 -> 124127 bytes locale/ro_RO/LC_MESSAGES/django.po | 486 +- locale/sv_SE/LC_MESSAGES/django.mo | Bin 138695 -> 138546 bytes locale/sv_SE/LC_MESSAGES/django.po | 488 +- locale/uk_UA/LC_MESSAGES/django.mo | Bin 0 -> 137627 bytes locale/uk_UA/LC_MESSAGES/django.po | 6966 +++++++++++++++++ locale/zh_Hans/LC_MESSAGES/django.mo | Bin 44096 -> 94539 bytes locale/zh_Hans/LC_MESSAGES/django.po | 486 +- locale/zh_Hant/LC_MESSAGES/django.mo | Bin 38839 -> 38029 bytes locale/zh_Hant/LC_MESSAGES/django.po | 486 +- 43 files changed, 13086 insertions(+), 3801 deletions(-) create mode 100644 bookwyrm/migrations/0189_alter_user_preferred_language.py create mode 100644 locale/uk_UA/LC_MESSAGES/django.mo create mode 100644 locale/uk_UA/LC_MESSAGES/django.po 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 000000000..37cdeb410 --- /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", "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukranian)"), + ("zh-hans", "ē®€ä½“äø­ę–‡ (Simplified Chinese)"), + ("zh-hant", "ē¹é«”äø­ę–‡ (Traditional Chinese)"), + ], + max_length=255, + null=True, + ), + ), + ] diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 0ccb46200..f0e3a8422 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -328,6 +328,7 @@ LANGUAGES = [ ("pt-pt", _("PortuguĆŖs Europeu (European Portuguese)")), ("ro-ro", _("RomĆ¢nă (Romanian)")), ("sv-se", _("Svenska (Swedish)")), + ("uk-ua", _("Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukranian)")), ("zh-hans", _("ē®€ä½“äø­ę–‡ (Simplified Chinese)")), ("zh-hant", _("ē¹é«”äø­ę–‡ (Traditional Chinese)")), ] diff --git a/bw-dev b/bw-dev index 6769f4bcd..1fd1ea4aa 100755 --- a/bw-dev +++ b/bw-dev @@ -150,6 +150,7 @@ case "$CMD" in git fetch origin l10n_main:l10n_main git checkout l10n_main locale/ca_ES git checkout l10n_main locale/de_DE + git checkout l10n_main locale/en_UK git checkout l10n_main locale/eo_UY git checkout l10n_main locale/es_ES git checkout l10n_main locale/eu_ES diff --git a/locale/ca_ES/LC_MESSAGES/django.mo b/locale/ca_ES/LC_MESSAGES/django.mo index a9b338a2ad1927c45a7ac805755bb38a63e1438a..1f5e30a2e788b527450e5805aead3e802f9309ab 100644 GIT binary patch delta 30802 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\n" "Language-Team: Catalan\n" "Language: ca\n" @@ -42,15 +42,15 @@ msgstr "{i} usos" msgid "Unlimited" msgstr "IlĀ·limitat" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "La contrasenya no Ć©s correcta" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "La contrasenya no coincideix" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "La contrasenya no Ć©s correcta" @@ -102,8 +102,8 @@ msgstr "Ordre del llistat" msgid "Book Title" msgstr "TĆ­tol del llibre" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "ValoraciĆ³" @@ -145,7 +145,7 @@ msgstr "Alerta" msgid "Automatically generated report" msgstr "Informe generat automĆ ticament" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "EliminaciĆ³ pel moderador" msgid "Domain block" msgstr "Bloqueig de domini" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audiollibre" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "Llibre electrĆ²nic" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "NovelĀ·la grĆ fica" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Tapa dura" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "EdiciĆ³ de butxaca" @@ -205,26 +205,26 @@ msgstr "Federat" msgid "Blocked" msgstr "Blocat" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s no Ć©s una remote_id vĆ lida" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s no Ć©s un nom d'usuari vĆ lid" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nom d'usuari" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Ja existeix un usuari amb aquest nom." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Ja existeix un usuari amb aquest nom." msgid "Public" msgstr "PĆŗblic" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblic" msgid "Unlisted" msgstr "No llistat" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "No llistat" msgid "Followers" msgstr "Seguidors" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Seguidors" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Actiu" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Complet" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Aturat" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "S'ha aturat la importaciĆ³" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Error en carregar el llibre" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "No s'ha trobat el llibre" @@ -368,103 +368,103 @@ msgstr "Citacions" msgid "Everything else" msgstr "Tota la resta" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "LĆ­nia de temps Inici" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Inici" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Cronologia dels llibres" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Llibres" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (AnglĆØs)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ " -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (Alemany)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (espanyol)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskera (Basc)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (gallec)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (italiĆ )" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (finĆØs)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (francĆØs)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (LituĆ )" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "PaĆÆsos Baixos (HolandĆØs)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (noruec)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (polonĆØs)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (portuguĆØs del Brasil)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆØs europeu)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (romanĆØs)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (suec)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (xinĆØs simplificat)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (xinĆØs tradicional)" @@ -575,7 +575,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 +680,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 @@ -768,24 +768,24 @@ msgid "View ISNI record" msgstr "Veure el registre ISNI" #: bookwyrm/templates/author/author.html:95 -#: bookwyrm/templates/book/book.html:173 +#: bookwyrm/templates/book/book.html:175 msgid "View on ISFDB" msgstr "Veure a 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 "Carregueu dades" #: bookwyrm/templates/author/author.html:104 -#: bookwyrm/templates/book/book.html:144 +#: bookwyrm/templates/book/book.html:146 msgid "View on OpenLibrary" msgstr "Veure a OpenLibrary" #: bookwyrm/templates/author/author.html:119 -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:160 msgid "View on Inventaire" msgstr "Veure a Inventaire" @@ -797,11 +797,7 @@ msgstr "Veure a LibraryThing" msgid "View on Goodreads" msgstr "Veure a Goodreads" -#: bookwyrm/templates/author/author.html:151 -msgid "View ISFDB entry" -msgstr "Veure entrada a ISFDB" - -#: bookwyrm/templates/author/author.html:166 +#: bookwyrm/templates/author/author.html:158 #, python-format msgid "Books by %(name)s" msgstr "Llibres de %(name)s" @@ -959,19 +955,19 @@ msgstr "Confirmeu" msgid "Unable to connect to remote source." msgstr "No ha estat possible connectar a la font externa." -#: 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 el llibre" -#: 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 "Fes clic per afegir una coberta" -#: bookwyrm/templates/book/book.html:106 +#: bookwyrm/templates/book/book.html:108 msgid "Failed to load cover" msgstr "No sh'a pogut carregar la coberta" -#: bookwyrm/templates/book/book.html:117 +#: bookwyrm/templates/book/book.html:119 msgid "Click to enlarge" msgstr "Feu clic per ampliar" @@ -1046,13 +1042,13 @@ msgstr "Llocs" #: 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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Llistes" @@ -1117,8 +1113,8 @@ msgstr "Carregueu una portada:" #: bookwyrm/templates/book/cover_add_modal.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:250 -msgid "Load cover from url:" -msgstr "Carregueu portada desde una url:" +msgid "Load cover from URL:" +msgstr "" #: bookwyrm/templates/book/cover_show_modal.html:6 msgid "Book cover preview" @@ -1328,7 +1324,7 @@ msgid "Add Another Author" msgstr "Afegiu un altre autor" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:147 +#: bookwyrm/templates/shelf/shelf.html:162 msgid "Cover" msgstr "Coberta" @@ -1529,22 +1525,22 @@ msgstr "%(pages)s pĆ gines" 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 "Publicat el %(date)s per %(publisher)s." +#: bookwyrm/templates/book/publisher_info.html:65 +#, python-format +msgid "Published by %(publisher)s." +msgstr "Publicat per %(publisher)s." + #: bookwyrm/templates/book/publisher_info.html:67 #, python-format msgid "Published %(date)s" msgstr "Publicat el %(date)s" -#: bookwyrm/templates/book/publisher_info.html:69 -#, python-format -msgid "Published by %(publisher)s." -msgstr "Publicat per %(publisher)s." - -#: bookwyrm/templates/book/rating.html:13 +#: bookwyrm/templates/book/rating.html:19 msgid "rated it" msgstr "el va valorar amb" @@ -1552,12 +1548,12 @@ msgstr "el va valorar amb" msgid "Series by" msgstr "SĆØries per" -#: bookwyrm/templates/book/series.html:27 +#: bookwyrm/templates/book/series.html:28 #, python-format msgid "Book %(series_number)s" msgstr "Llibre %(series_number)s" -#: bookwyrm/templates/book/series.html:27 +#: bookwyrm/templates/book/series.html:28 msgid "Unsorted Book" msgstr "Llibre sense classificar" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Perdona'ns! No hem pogut trobar aquest codi." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Codi de confirmaciĆ³:" @@ -1681,6 +1677,7 @@ msgstr "Suggerit" #: 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 +1752,7 @@ msgstr "%(username)s ha citat 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Desconnecta" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s us ha mencionat e msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s us ha mencionat en un estat" +#: 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 +3811,7 @@ msgstr[0] "Una nova denĆŗncia necessita moderaciĆ³" msgstr[1] "%(display_count)s noves denĆŗncies necessiten moderaciĆ³" #: 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 "AvĆ­s de contingut" @@ -4000,9 +4029,51 @@ msgstr "Confirmeu la vostra contrasenya per comenƧar a configurar 2FA." msgid "Set up 2FA" msgstr "Configura 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 "Usuaris bloquejats" @@ -4032,7 +4103,7 @@ msgstr "Nova Contrasenya:" #: 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 "Suprimeix el compte" @@ -4154,18 +4225,45 @@ msgstr "Baixa el fitxer" msgid "Account" msgstr "Compte" -#: 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 "Dades" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "ExportaciĆ³ CSV" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Relacions" +#: 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 +4672,8 @@ msgid "Streams" msgstr "Reproduccions" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "Emet" +msgid "Broadcast" +msgstr "" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -4900,19 +4998,19 @@ msgstr "InstĆ ncia:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Estat:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Programari:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "VersiĆ³:" @@ -4925,7 +5023,7 @@ msgid "Details" msgstr "Detalls" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Activitat" @@ -4939,7 +5037,7 @@ msgid "View all" msgstr "Mostra tots" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Informes:" @@ -4956,7 +5054,7 @@ msgid "Blocked by us:" msgstr "Bloquejat per nosaltres:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notes" @@ -5676,17 +5774,22 @@ msgstr "Actiu per Ćŗltima vegada" msgid "Remote instance" msgstr "InstĆ ncia remota" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "Eliminat" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inactiu" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "No s'ha configurat" @@ -5698,55 +5801,55 @@ msgstr "Veure perfil d'Usuari" msgid "Go to user admin" msgstr "Ves a administraciĆ³ d'usuĆ ries" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Remot" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detalls de l'usuari" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Correu electrĆ²nic:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Mostra informes)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Bloquejat pel compte:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Data en quĆØ es va afegir:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Data d'Ćŗltima activitat:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Seguidors aprovats manualment:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Visible:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "RaĆ³ de desactivaciĆ³:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detalls de la instĆ ncia" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Mostra la instĆ ncia" @@ -5883,7 +5986,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:87 msgid "Create shelf" msgstr "Crea un prestatge" @@ -5891,58 +5994,66 @@ msgstr "Crea un prestatge" msgid "Edit Shelf" msgstr "Edita el prestatge" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "Perfil d'usuari" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, 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:119 #, 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:131 msgid "Edit shelf" msgstr "Edita el prestatge" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Elimina el prestatge" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Arxivat" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "ComenƧat" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Finalitzat" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Fins" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Aquest prestatge Ć©s buit." @@ -6248,6 +6359,10 @@ 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 "" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6504,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" @@ -6609,10 +6724,14 @@ msgid "Groups: %(username)s" msgstr "Grups: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Peticions de seguiment" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6746,12 @@ msgstr "Llistes: %(username)s" msgid "Create list" msgstr "Crea una llista" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6823,6 @@ 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" @@ -6730,10 +6850,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 +6866,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:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 63cdbd8fc..afdfc2f3b 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-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-06 12:24\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -42,15 +42,15 @@ msgstr "{i}-mal verwendbar" msgid "Unlimited" msgstr "Unbegrenzt" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Falsches Passwort" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Passwort stimmt nicht Ć¼berein" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Falsches Passwort" @@ -102,8 +102,8 @@ msgstr "Reihenfolge der Liste" msgid "Book Title" msgstr "Buchtitel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Bewertung" @@ -145,7 +145,7 @@ msgstr "Gefahr" msgid "Automatically generated report" msgstr "Automatisch generierter Bericht" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Moderator*in lƶschen" msgid "Domain block" msgstr "Domainsperrung" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Hƶrbuch" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "E-Book" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Graphic Novel" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Hardcover" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Taschenbuch" @@ -205,26 +205,26 @@ msgstr "Fƶderiert" msgid "Blocked" msgstr "Blockiert" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ist keine gĆ¼ltige remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ist kein gĆ¼ltiger Benutzer*inname" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "Benutzer*inname" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Dieser Benutzer*inname ist bereits vergeben." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Dieser Benutzer*inname ist bereits vergeben." msgid "Public" msgstr "Ɩffentlich" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Ɩffentlich" msgid "Unlisted" msgstr "Ungelistet" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Ungelistet" msgid "Followers" msgstr "Follower*innen" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Follower*innen" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktiv" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Abgeschlossen" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Gestoppt" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Import gestoppt" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Fehler beim Laden des Buches" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Keine Ɯbereinstimmung fĆ¼r das Buch gefunden" @@ -338,7 +338,7 @@ msgstr "Benutzerberechtigungsstufe geƤndert" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "Benutzerkonto gelƶscht" +msgstr "Gelƶschtes Benutzerkonto" #: bookwyrm/models/report.py:93 msgid "Blocked domain" @@ -346,7 +346,7 @@ msgstr "Gesperrte Domain" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "Genehmigte Domain" +msgstr "Zugelassene Domain" #: bookwyrm/models/report.py:95 msgid "Deleted item" @@ -368,103 +368,103 @@ msgstr "Zitate" msgid "Everything else" msgstr "Alles andere" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Start-Zeitleiste" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Startseite" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "BĆ¼cher-Timeline" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "BĆ¼cher" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (Englisch)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Katalanisch)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Spanisch)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Baskisch)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galizisch)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italienisch)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (Finnisch)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (Franzƶsisch)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litauisch)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "Nederlands (NiederlƤndisch)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (Norwegisch)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Polnisch)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (brasilianisches Portugiesisch)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortugueĢ‚s Europeu (Portugiesisch)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (RumƤnisch)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Schwedisch)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (vereinfachtes Chinesisch)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Chinesisch, traditionell)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listen" @@ -1117,8 +1113,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 +1241,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 +1324,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:162 msgid "Cover" msgstr "Cover" @@ -1373,7 +1369,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?" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Tut uns leid! Dieser Code ist uns nicht bekannt." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "BestƤtigungscode:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s hat 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 +2411,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 +2433,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 +2445,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 +2461,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 +2473,7 @@ msgstr "Tour beenden" #: bookwyrm/templates/guided_tour/home.html:16 msgid "Welcome to Bookwyrm!

    Would you like to take the guided tour to help you get started?" -msgstr "Willkommen bei Bookwyrm!

    Mƶchtest du eine Tour fĆ¼r einen einfachen Einstieg machen?" +msgstr "Willkommen bei Bookwyrm!

    Mƶchtest Du die gefĆ¼hrte Tour machen, um Dir den Einstieg zu erleichtern?" #: bookwyrm/templates/guided_tour/home.html:17 #: bookwyrm/templates/guided_tour/home.html:39 @@ -2538,8 +2535,8 @@ msgid "The bell will light up when you have a new notification. When it does, cl msgstr "Die Glocke wird aufleuchten, wenn Du eine neue Benachrichtigung hast. Klicke auf sie, um herauszufinden, was Aufregendes passiert ist!" #: 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" @@ -2702,7 +2699,8 @@ msgstr "Du kannst eine Gruppe mit anderen Personen erstellen oder beitreten. Gru #: 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:100 msgid "Groups" msgstr "Gruppen" @@ -2747,7 +2745,7 @@ msgid "This is your user profile. All your latest activities will be listed here msgstr "Dies ist dein Benutzerprofil. Alle deine neuesten AktivitƤten werden hier aufgelistet. Andere Bookwyrm-Benutzer kƶnnen auch Teile dieser Seite sehen ā€“ was sie sehen kƶnnen, hƤngt von deinen PrivatsphƤreeinstellungen ab." #: 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 +2754,7 @@ msgid "This tab shows everything you have read towards your annual reading goal, msgstr "Diese Registerkarte zeigt alles, was du gelesen hast, um dein jƤhrliches Leseziel zu erreichen oder lƤsst dich eines setzen. Du musst kein Leseziel setzen, wenn du das nicht mƶchtest!" #: 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:94 msgid "Reading Goal" msgstr "Leseziel" @@ -2795,7 +2793,7 @@ msgstr "Keine AktivitƤten fĆ¼r diesen Hashtag bisher!" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:64 +#: bookwyrm/templates/shelf/shelf.html:79 msgid "Import Books" msgstr "BĆ¼cher importieren" @@ -2806,9 +2804,9 @@ msgstr "Keine gĆ¼ltige CSV-Datei" #: 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] "Aktuell dĆ¼rfen Sie %(display_size)s BĆ¼cher, alle %(import_limit_reset)s Tage importieren." +msgstr[1] "Zurzeit dĆ¼rfen Sie alle %(import_limit_reset)s Tage bis zu %(display_size)s BĆ¼cher importieren." #: bookwyrm/templates/import/import.html:27 #, python-format @@ -2867,7 +2865,7 @@ msgstr "Datenschutzeinstellung fĆ¼r importierte Besprechungen:" #: 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 "Importieren" @@ -2942,7 +2940,7 @@ msgstr "Import stoppen" #, python-format msgid "%(display_counter)s item needs manual approval." msgid_plural "%(display_counter)s items need manual approval." -msgstr[0] "%(display_counter)s Element muss manuell geprĆ¼ft werden." +msgstr[0] "%(display_counter)s Eintrag muss manuell geprĆ¼ft werden." msgstr[1] "%(display_counter)s Elemente mĆ¼ssen manuell geprĆ¼ft werden." #: bookwyrm/templates/import/import_status.html:83 @@ -2966,8 +2964,8 @@ msgid "Row" msgstr "Zeile" #: bookwyrm/templates/import/import_status.html:110 -#: bookwyrm/templates/shelf/shelf.html:148 -#: bookwyrm/templates/shelf/shelf.html:170 +#: bookwyrm/templates/shelf/shelf.html:163 +#: bookwyrm/templates/shelf/shelf.html:185 msgid "Title" msgstr "Titel" @@ -2980,8 +2978,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-SchlĆ¼ssel" #: bookwyrm/templates/import/import_status.html:121 -#: bookwyrm/templates/shelf/shelf.html:149 -#: bookwyrm/templates/shelf/shelf.html:173 +#: bookwyrm/templates/shelf/shelf.html:164 +#: bookwyrm/templates/shelf/shelf.html:188 msgid "Author" msgstr "Autor*in" @@ -3138,7 +3136,7 @@ msgid "Login" msgstr "Anmeldung" #: 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 "Anmelden" @@ -3149,7 +3147,7 @@ msgstr "Alles klar! E-Mail-Adresse bestƤtigt." #: 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 "Anmeldename:" @@ -3157,13 +3155,13 @@ msgstr "Anmeldename:" #: 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 "Passwort:" -#: 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 "Passwort vergessen?" @@ -3206,35 +3204,39 @@ msgstr "Konto reaktivieren" msgid "%(site_name)s search" msgstr "%(site_name)s-Suche" -#: bookwyrm/templates/layout.html:37 +#: bookwyrm/templates/layout.html:39 msgid "Search for a book, user, or list" msgstr "Nach einem Buch, einem Account oder einer Liste suchen" -#: bookwyrm/templates/layout.html:52 bookwyrm/templates/layout.html:53 +#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55 msgid "Scan Barcode" msgstr "Barcode scannen" -#: bookwyrm/templates/layout.html:67 +#: bookwyrm/templates/layout.html:69 msgid "Main navigation menu" msgstr "Navigations-HauptmenĆ¼" -#: bookwyrm/templates/layout.html:87 +#: bookwyrm/templates/layout.html:88 msgid "Feed" msgstr "Feed" -#: 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 "Passwort" -#: bookwyrm/templates/layout.html:144 +#: bookwyrm/templates/layout.html:136 +msgid "Show/Hide password" +msgstr "Passwort ein-/ausblenden" + +#: bookwyrm/templates/layout.html:150 msgid "Join" msgstr "Beitreten" -#: bookwyrm/templates/layout.html:179 +#: bookwyrm/templates/layout.html:196 msgid "Successfully posted status" msgstr "Status verƶffentlicht" -#: bookwyrm/templates/layout.html:180 +#: bookwyrm/templates/layout.html:197 msgid "Error posting status" msgstr "Fehler beim Verƶffentlichen des Status" @@ -3368,7 +3370,7 @@ msgstr "Eine Gruppe auswƤhlen" #: bookwyrm/templates/lists/form.html:105 msgid "You don't have any Groups yet!" -msgstr "Du hast noch keine Gruppen!" +msgstr "Du bist noch in keiner Gruppe!" #: bookwyrm/templates/lists/form.html:107 msgid "Create a Group" @@ -3493,6 +3495,23 @@ msgstr "Alle Listen" msgid "Saved Lists" msgstr "Gespeicherte Listen" +#: bookwyrm/templates/moved.html:27 +#, python-format +msgid "You have moved your account to
    %(username)s" +msgstr "Sie haben Ihr Konto auf %(username)s verschoben" + +#: 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 "Sie kƶnnen den Umzug rĆ¼ckgƤngig machen, aber einige Follower haben dem Konto mƶglicherweise bereits entfolgt." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Umzug rĆ¼ckgƤngig machen" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Abmelden" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s hat dich in einem msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s hat dich in einem Status erwƤhnt" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s ist zu %(username)s umgezogen" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s hat seinen Umzug rĆ¼ckgƤngig gemacht" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Ein neuer -Bericht muss moderiert werden" msgstr[1] "%(display_count)s neue Berichte mĆ¼ssen moderiert werden" #: 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 "Inhaltswarnung" @@ -4000,9 +4029,51 @@ msgstr "BestƤtige dein Passwort, um mit der Einrichtung von 2FA zu beginnen." msgid "Set up 2FA" msgstr "2FA einrichten" +#: 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 "Account umziehen" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "Alias erstellen" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "Ein anderes Konto als Alias hinzufĆ¼gen" + +#: 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 "Ein anderes Konto als Alias zu markieren, ist notwendig, wenn Sie das andere Konto auf diese verschieben mƶchten." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Dies ist eine umkehrbare Funktion und wird die Nutzbarkeit dieses Kontos nicht einschrƤnken." + +#: 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 "Geben Sie den Benutzernamen fĆ¼r das Konto ein, das Sie als Alias hinzufĆ¼gen mƶchten, z.B. user@example.com :" + +#: bookwyrm/templates/preferences/alias_user.html:30 +#: bookwyrm/templates/preferences/move_user.html:35 +msgid "Confirm your password:" +msgstr "BestƤtigen Sie Ihr Passwort:" + +#: bookwyrm/templates/preferences/alias_user.html:39 +#: bookwyrm/templates/preferences/layout.html:28 +msgid "Aliases" +msgstr "Aliase" + +#: bookwyrm/templates/preferences/alias_user.html:49 +msgid "Remove alias" +msgstr "Alias entfernen" + #: 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 "Gesperrte Benutzer*innen" @@ -4032,7 +4103,7 @@ msgstr "Neues Passwort:" #: 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 "Account lƶschen" @@ -4154,18 +4225,47 @@ msgstr "Datei herunterladen" msgid "Account" msgstr "Account" -#: bookwyrm/templates/preferences/layout.html:31 +#: bookwyrm/templates/preferences/layout.html:32 +msgid "Move Account" +msgstr "Account umziehen" + +#: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "Daten" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "CSV-Export" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Beziehungen" +#: bookwyrm/templates/preferences/move_user.html:12 +msgid "Migrate account to another server" +msgstr "Konto auf einen anderen Server umziehen" + +#: 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 "Das Verschieben deines Kontos wird alle deine Follower*innen benachrichtigen und sie anweisen, dem neuen Konto zu folgen." + +#: 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" +" %(user)s wird als umgezogen markiert und wird nicht gefunden oder verwendbar sein, wenn Sie den Umzug nicht rĆ¼ckgƤngig machen.\n" +" " + +#: 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 "Denken Sie daran, diesen Benutzernamen als Alias des Zielkontos hinzuzufĆ¼gen, bevor Sie versuchen das Konto umzuziehen." + +#: 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 "Geben Sie den Benutzernamen fĆ¼r das Konto ein, zu dem Sie wechseln mƶchten, z.B. user@example.com :" + #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" @@ -4574,8 +4674,8 @@ msgid "Streams" msgstr "Streams" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "Ɯbertragungen" +msgid "Broadcast" +msgstr "Senden" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -4900,19 +5000,19 @@ msgstr "Instanz:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Status:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Software:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Version:" @@ -4925,7 +5025,7 @@ msgid "Details" msgstr "Details" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "AktivitƤt" @@ -4939,7 +5039,7 @@ msgid "View all" msgstr "Alle(s) anzeigen" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Meldungen:" @@ -4956,7 +5056,7 @@ msgid "Blocked by us:" msgstr "Wir haben blockiert:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Anmerkungen" @@ -5676,17 +5776,22 @@ msgstr "Zuletzt aktiv" msgid "Remote instance" msgstr "Entfernte Instanz" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "Umgezogen" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "Gelƶscht" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inaktiv" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Nicht festgelegt" @@ -5698,55 +5803,55 @@ msgstr "Profil anzeigen" msgid "Go to user admin" msgstr "Gehe zur Benutzerverwaltung" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Lokal" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Entfernt" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Details" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "E-Mail:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Meldungen anzeigen)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Gesperrt durch (Anzahl):" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "HinzugefĆ¼gt am:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Zuletzt aktiv:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Manuell zugelassene Follower*innen:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Entdeckbar:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Grund der Deaktivierung:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Instanzdetails" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Instanz anzeigen" @@ -5883,7 +5988,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:87 msgid "Create shelf" msgstr "Regal erstellen" @@ -5891,58 +5996,66 @@ msgstr "Regal erstellen" msgid "Edit Shelf" msgstr "Regal bearbeiten" -#: bookwyrm/templates/shelf/shelf.html:24 +#: bookwyrm/templates/shelf/shelf.html:25 +msgid "You have have moved to" +msgstr "Sie sind umgezogen zu" + +#: 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 "Sie kƶnnen den Umzug rĆ¼ckgƤngig machen, aber einige Follower sind dem Konto mƶglicherweise bereits entfolgt." + +#: bookwyrm/templates/shelf/shelf.html:39 #: 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:54 #: 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:112 #, 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:119 #, 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:131 msgid "Edit shelf" msgstr "Regal bearbeiten" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Regal lƶschen" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Ins Regal gestellt" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Gestartet" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Abgeschlossen" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Bis" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Dieses Regal ist leer." @@ -6248,6 +6361,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6506,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" @@ -6609,10 +6726,14 @@ msgid "Groups: %(username)s" msgstr "Gruppen: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "ist umgezogen zu" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Folgeanfragen" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6748,12 @@ msgstr "Listen: %(username)s" msgid "Create list" msgstr "Liste erstellen" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6698,17 +6825,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 +6852,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 +6868,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:48 #, 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 e1196a49b..9c0243f7e 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: 2023-12-12 23:38+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -103,8 +103,8 @@ msgstr "" msgid "Book Title" msgstr "" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "" @@ -142,7 +142,7 @@ msgstr "" msgid "Danger" msgstr "" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "" @@ -206,26 +206,26 @@ msgstr "" msgid "Blocked" msgstr "" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -233,7 +233,7 @@ msgstr "" msgid "Public" msgstr "" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -241,7 +241,7 @@ msgstr "" msgid "Unlisted" msgstr "" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -250,7 +250,7 @@ msgstr "" msgid "Followers" msgstr "" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -261,8 +261,7 @@ msgstr "" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "" @@ -353,122 +352,139 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:332 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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 +493,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 +568,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 +938,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" @@ -1043,13 +1074,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 +1356,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 "" @@ -1452,8 +1483,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 "" @@ -1462,7 +1494,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 "" @@ -1584,7 +1616,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 +1785,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 +1940,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 +1978,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 +2026,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 +2047,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 +2544,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 +2576,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 +2732,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 +2786,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 "" @@ -2794,7 +2825,7 @@ msgstr "" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "" @@ -2965,8 +2996,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 +3010,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 "" @@ -3086,10 +3117,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 +3244,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 +3452,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 +3529,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 +3741,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\"" @@ -4149,7 +4180,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 "" @@ -4999,19 +5030,19 @@ msgstr "" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: 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:113 +#: 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:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "" @@ -5024,7 +5055,7 @@ msgid "Details" msgstr "" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "" @@ -5038,7 +5069,7 @@ msgid "View all" msgstr "" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "" @@ -5055,7 +5086,7 @@ msgid "Blocked by us:" msgstr "" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "" @@ -5212,7 +5243,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 "" @@ -5686,57 +5717,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 "" @@ -5775,106 +5822,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" -msgstr "" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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 "" -#: 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 +5979,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 +6036,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 +6044,58 @@ 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/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: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: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 +6405,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 +6712,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 +6782,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 +6807,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 +6921,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 6795f2e82d48584bc15a36fa274df1b19b883c8f..96e639c49bb0d2f45972499ac0ad14b22e006e6a 100644 GIT binary patch delta 35946 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 YP}gp;L&7~pef;s<;~QDTGbiBx0L^mk0{{R3 diff --git a/locale/eo_UY/LC_MESSAGES/django.po b/locale/eo_UY/LC_MESSAGES/django.po index 1a95d4766..83cecfab2 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-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-07 15:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Esperanto\n" "Language: eo\n" @@ -42,15 +42,15 @@ msgstr "{i} uzoj" msgid "Unlimited" msgstr "Senlima" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Malĝusta pasvorto" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Pasvorto ne kongruas" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Malĝusta pasvorto" @@ -102,8 +102,8 @@ msgstr "Ordo de listo" msgid "Book Title" msgstr "Titolo de la libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Takso" @@ -145,7 +145,7 @@ msgstr "Danĝero" msgid "Automatically generated report" msgstr "AÅ­tomate generita raporto" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Forigo fare de kontrolanto" msgid "Domain block" msgstr "Blokado de domajno" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Sonlibro" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "Bitlibro" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Grafika romano" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Rigidkovrila" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Poŝlibro" @@ -205,26 +205,26 @@ msgstr "Federaciita" msgid "Blocked" msgstr "Blokita" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ne estas valida remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ne estas valida uzantnomo" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "uzantnomo" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Uzanto kun tiu uzantnomo jam ekzistas." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Uzanto kun tiu uzantnomo jam ekzistas." msgid "Public" msgstr "Publika" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Publika" msgid "Unlisted" msgstr "Nelistigita" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Nelistigita" msgid "Followers" msgstr "Sekvantoj" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Sekvantoj" msgid "Private" msgstr "Privata" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktiva" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Finita" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Haltigita" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Importo haltigita" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Eraro dum la importo de la libro" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Kongrua libro ne troviĝis" @@ -310,47 +310,47 @@ msgstr "Komento" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "Solvis la raporton" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "Remalfermis la raporton" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "Mesaĝis al la raportinto" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "Mesaĝis al la raportita uzanto" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "Provizore ĉesigis la uzanton" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "Malĉesigis la uzanton" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Ŝanĝis permesnivelon de la uzanto" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "Forigis la konton" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "Blokis la domajnon" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "Aprobis la domajnon" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "Forigis la eron" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -368,103 +368,103 @@ msgstr "Citaĵoj" msgid "Everything else" msgstr "Ĉio alia" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Hejma novaĵfluo" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Hejmo" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Libra novaĵfluo" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Libroj" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (Angla)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Kataluna)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (Germana)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Hispana)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (EÅ­ska)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galega)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Itala)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (Finna)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (Franca)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litova)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Nederlands (Nederlanda)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (Norvega)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Pola)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Brazila portugala)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (EÅ­ropa portugala)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Rumana)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Sveda)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Simpligita ĉina)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Tradicia ĉina)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listoj" @@ -1076,11 +1072,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 +1113,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 +1241,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 +1324,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:162 msgid "Cover" msgstr "Kovrilo" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Pardonu! Ni ne sukcesis trovi tiun kodon." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Konfirmkodo:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s citis You have moved your account to %(username)s" +msgstr "Vi translokis vian konton al %(username)s" + +#: 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 "Vi povas malfari la translokon por restarigi la plenan funkciadon, sed kelkaj sekvantoj eble jam malsekvis la konton." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Malfari translokon" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Elsaluti" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3680,7 +3699,7 @@ msgstr "%(related_user)s kaj %(related_user)s and %(other_user_display_count)s others followed you" -msgstr "%(related_user)s kaj %(other_user_display_count)s aliaj ekvekvis vin" +msgstr "%(related_user)s kaj %(other_user_display_count)s aliaj eksekvis vin" #: bookwyrm/templates/notifications/items/follow_request.html:15 #, python-format @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s menciis vin en %(related_user)s mentioned you in a status" msgstr "%(related_user)s menciis vin en afiŝo" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s translokis al %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s malfaris sian translokon" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Nova raporto bezonas kontrolon" msgstr[1] "%(display_count)s novaj raportoj bezonas kontrolon" #: 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 "Averto pri enhavo" @@ -4000,9 +4029,51 @@ msgstr "Konfirmu vian pasvorton por komenci agordi la dupaŝan aÅ­tentigon (2FA) msgid "Set up 2FA" msgstr "Agordi dupaŝan aÅ­tentigon" +#: 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 "Transloki konton" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "Krei alinomon" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "Aldoni alian konton kiel alinomon" + +#: 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 "Marki alian konton kiel alinomon estas bezonate se vi volas transloki tiun konton al ĉi tiun." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Ĉi tio estas inversigebla ago kaj ĝi ne ŝanĝos la funkciadon de ĉi tiu konto." + +#: 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 "Entajpu la uzantnomon de la konto kiun vi volas aldoni kiel alinomon, ekz.: uzanto@ekzemplo.org:" + +#: bookwyrm/templates/preferences/alias_user.html:30 +#: bookwyrm/templates/preferences/move_user.html:35 +msgid "Confirm your password:" +msgstr "Konfirmu vian pasvorton:" + +#: bookwyrm/templates/preferences/alias_user.html:39 +#: bookwyrm/templates/preferences/layout.html:28 +msgid "Aliases" +msgstr "Alinomoj" + +#: bookwyrm/templates/preferences/alias_user.html:49 +msgid "Remove alias" +msgstr "Forigi alinomon" + #: 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 "Blokitaj uzantoj" @@ -4032,7 +4103,7 @@ msgstr "Nova pasvorto:" #: 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 "Forigi la konton" @@ -4154,18 +4225,46 @@ msgstr "Elŝuti la dosieron" msgid "Account" msgstr "Konto" -#: bookwyrm/templates/preferences/layout.html:31 +#: bookwyrm/templates/preferences/layout.html:32 +msgid "Move Account" +msgstr "Transloki konton" + +#: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "Datumoj" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "CSV-a eksporto" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Rilatoj" +#: bookwyrm/templates/preferences/move_user.html:12 +msgid "Migrate account to another server" +msgstr "Migrigi la konton al alia servilo" + +#: 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 "La translokado de via konto atentigos ĉiujn viajn sekvantojn kaj instigos ilin sekvi la novan konton." + +#: 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" +" %(user)s estos markita kiel translokita kaj ne plu estos eltrovebla nek uzebla ĝis via malfaros la translokon. " + +#: 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 "Ne forgesu aldoni ĉi tiun uzanton kiel alinomon de la celata konto antaÅ­ ol provi transloki ĝin." + +#: 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 "Entajpu la uzantnomon de la konto al kiu vi volas transloki, ekz. uzanto@ekzemplo.org:" + #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" @@ -4571,23 +4670,23 @@ msgstr "Atendovicoj" #: bookwyrm/templates/settings/celery.html:26 msgid "Streams" -msgstr "" +msgstr "Fluoj" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "Dissendoj" +msgid "Broadcast" +msgstr "Dissendo" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" -msgstr "" +msgstr "Enirkesto" #: bookwyrm/templates/settings/celery.html:51 msgid "Import triggered" -msgstr "" +msgstr "Importo lanĉiĝis" #: bookwyrm/templates/settings/celery.html:57 msgid "Connectors" -msgstr "" +msgstr "Konektiloj" #: bookwyrm/templates/settings/celery.html:64 #: bookwyrm/templates/settings/site.html:91 @@ -4596,7 +4695,7 @@ msgstr "Bildoj" #: bookwyrm/templates/settings/celery.html:70 msgid "Suggested Users" -msgstr "" +msgstr "Proponitaj uzantoj" #: bookwyrm/templates/settings/celery.html:83 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:43 @@ -4606,7 +4705,7 @@ msgstr "Retadreso" #: bookwyrm/templates/settings/celery.html:89 msgid "Misc" -msgstr "" +msgstr "Diversaĵoj" #: bookwyrm/templates/settings/celery.html:96 msgid "Low priority" @@ -4900,19 +4999,19 @@ msgstr "Instanco:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Stato:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Programaro:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Versio:" @@ -4925,7 +5024,7 @@ msgid "Details" msgstr "Detaloj" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Aktiveco" @@ -4939,7 +5038,7 @@ msgid "View all" msgstr "Vidi ĉiujn" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Raportoj:" @@ -4956,7 +5055,7 @@ msgid "Blocked by us:" msgstr "Blokitaj de ni:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notoj" @@ -5420,22 +5519,22 @@ msgstr "Raportitaj ligiloj" #: bookwyrm/templates/settings/reports/report.html:66 msgid "Moderation Activity" -msgstr "" +msgstr "Moderigaj agoj" #: bookwyrm/templates/settings/reports/report.html:73 #, python-format msgid "%(user)s opened this report" -msgstr "" +msgstr "%(user)s malfermis ĉi tiun raporton" #: bookwyrm/templates/settings/reports/report.html:86 #, python-format msgid "%(user)s commented on this report:" -msgstr "" +msgstr "%(user)s komentis pri ĉi tiu raporto:" #: bookwyrm/templates/settings/reports/report.html:90 #, python-format msgid "%(user)s took an action on this report:" -msgstr "" +msgstr "%(user)s faris agon pri ĉi tiu raporto:" #: bookwyrm/templates/settings/reports/report_header.html:6 #, python-format @@ -5459,7 +5558,7 @@ msgstr "Raporto #%(report_id)s: Uzanto @%(username)s" #: bookwyrm/templates/settings/reports/report_links_table.html:19 msgid "Approve domain" -msgstr "" +msgstr "Aprobi la domajnon" #: bookwyrm/templates/settings/reports/report_links_table.html:26 msgid "Block domain" @@ -5676,17 +5775,22 @@ msgstr "Lasta aktiveco" msgid "Remote instance" msgstr "Fora instanco" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "Translokita" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "Forigita" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Malaktiva" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Ne agordita" @@ -5698,55 +5802,55 @@ msgstr "Vidi la profilon" msgid "Go to user admin" msgstr "Iri al la administrado de kontoj" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Loka" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Fora" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detaloj de la uzanto" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Retadreso:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Vidi raportojn)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Nombro de kontoj kiuj blokis:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Dato de aldono:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Dato de lasta aktiveco:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Permane aprobas sekvantojn:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Eltrovebla:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Kialo de la malaktivigo:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detaloj de la instanco" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Vidi la instancon" @@ -5883,7 +5987,7 @@ msgid "Need help?" msgstr "Ĉu vi bezonas helpon?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Krei breton" @@ -5891,58 +5995,66 @@ msgstr "Krei breton" msgid "Edit Shelf" msgstr "Modifi breton" -#: bookwyrm/templates/shelf/shelf.html:24 +#: bookwyrm/templates/shelf/shelf.html:25 +msgid "You have have moved to" +msgstr "Vi translokiĝis al" + +#: 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 "Vi povas malfari ĉi tiun translokon por restarigi la plenan funkciadon, sed kelkaj sekvantoj eble jam malsekvis la konton." + +#: bookwyrm/templates/shelf/shelf.html:39 #: bookwyrm/templates/user/relationships/followers.html:18 #: bookwyrm/templates/user/relationships/following.html:18 msgid "User profile" msgstr "Profilo" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Ĉiuj libroj" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s libro" msgstr[1] "%(formatted_count)s libroj" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(montriĝas %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Modifi la breton" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Forigi la breton" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Surbretigo" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Komencis" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Finis" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Ĝis" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Ĉi tiu breto estas malplena." @@ -6049,7 +6161,7 @@ msgstr "Komento:" #: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Update" -msgstr "" +msgstr "Ĝisdatigi" #: bookwyrm/templates/snippets/create_status/post_options_block.html:21 msgid "Post" @@ -6248,6 +6360,10 @@ msgstr "Vi legis %(read_count)s el %(goal_count)s libroj%(read_count)s of %(goal_count)s books." msgstr "%(username)s legis %(read_count)s el %(goal_count)s libroj." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "Sekvi per la nova konto" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6505,35 @@ msgstr "Halti legi" msgid "Finish reading" msgstr "Ĉesi legi" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Montri la afiŝon" -#: bookwyrm/templates/snippets/status/content_status.html:102 +#: bookwyrm/templates/snippets/status/content_status.html:91 #, python-format msgid "(Page %(page)s" msgstr "(Paĝo %(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 "Malfermi la bildon en nova fenestro" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Kaŝi la afiŝon" @@ -6523,7 +6639,7 @@ msgstr "Ŝati la afiŝon" #: bookwyrm/templates/snippets/status/status.html:10 msgid "boosted" -msgstr "diskonigita" +msgstr "diskonigis" #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 @@ -6609,10 +6725,14 @@ msgid "Groups: %(username)s" msgstr "Grupoj: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "translokiĝis al" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Petoj de sekvado" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6747,12 @@ msgstr "Listoj: %(username)s" msgid "Create list" msgstr "Krei liston" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "Aliĝis je %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,17 +6824,12 @@ msgstr "Nur komentoj" msgid "No activities yet!" msgstr "AnkoraÅ­ estas neniu ago!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "Aliĝis je %(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] "" +msgstr[0] "%(display_count)s sekvanto" +msgstr[1] "%(display_count)s sekvantoj" #: bookwyrm/templates/user/user_preview.html:31 #, python-format @@ -6730,10 +6851,6 @@ msgstr "Neniu sekvanto kiun vi sekvas" msgid "View profile and more" msgstr "Vidi la profilon kaj pli" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Elsaluti" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "La dosiero transiras la limon de grandeco: 10MB" @@ -6750,7 +6867,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "%(num)d libro ā€“ de %(user)s" msgstr[1] "%(num)d libroj ā€“ de %(user)s" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index 9ed73ceed3b60c51460f9dd4a6ce748b5c48950b..7e41239ead09b4ffc5a2ccc0250b8729ffc8f8d3 100644 GIT binary patch delta 34360 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 K8_IaENBw`5k)1yP diff --git a/locale/es_ES/LC_MESSAGES/django.po b/locale/es_ES/LC_MESSAGES/django.po index 7f27a3e61..cc3635d30 100644 --- a/locale/es_ES/LC_MESSAGES/django.po +++ b/locale/es_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-30 00:47\n" +"POT-Creation-Date: 2023-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-03 11:13\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Spanish\n" "Language: es\n" @@ -42,15 +42,15 @@ msgstr "{i} usos" msgid "Unlimited" msgstr "Sin lĆ­mite" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "ContraseƱa incorrecta" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "La contraseƱa no coincide" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "ContraseƱa Incorrecta" @@ -102,8 +102,8 @@ msgstr "Orden de la lista" msgid "Book Title" msgstr "TĆ­tulo" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "ValoraciĆ³n" @@ -145,7 +145,7 @@ msgstr "Cuidado" msgid "Automatically generated report" msgstr "Informe generado automĆ”ticamente" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "EliminaciĆ³n de moderador" msgid "Domain block" msgstr "Bloqueo de dominio" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audio libro" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "Libro electrĆ³nico" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Novela grĆ”fica" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Tapa dura" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Tapa blanda" @@ -205,26 +205,26 @@ msgstr "Federalizado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s no es un remote_id vĆ”lido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s no es un usuario vĆ”lido" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nombre de usuario" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Ya existe un usuario con ese nombre." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Ya existe un usuario con ese nombre." msgid "Public" msgstr "PĆŗblico" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblico" msgid "Unlisted" msgstr "No listado" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "No listado" msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Seguidores" msgid "Private" msgstr "Privado" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Activo" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Completado" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Detenido" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "ImportaciĆ³n detenida" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Error en cargar libro" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "No se pudo encontrar el libro" @@ -368,103 +368,103 @@ msgstr "Citas" msgid "Everything else" msgstr "Todo lo demĆ”s" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "LĆ­nea de tiempo principal" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Inicio" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "LĆ­nea temporal de libros" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Libros" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (InglĆ©s)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (CatalĆ”n)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (AlemĆ”n)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskera" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (gallego)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (finĆ©s)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (FrancĆ©s)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "PaĆ­ses bajos (holandĆ©s)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (noruego)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Polaco)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (portuguĆ©s brasileƱo)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆ©s europeo)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (rumano)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Chino simplificado)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Chino tradicional)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listas" @@ -1117,8 +1113,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 +1324,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:162 msgid "Cover" msgstr "Portada" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Sentimos que no pudimos encontrar ese cĆ³digo." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "CĆ³digoĀ de confirmaciĆ³n:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s ha citado You have moved your account to %(username)s" +msgstr "Has movido tu cuenta a %(username)s" + +#: 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 "Puede deshacer el movimiento para restaurar la funcionalidad completa, pero algunos seguidores pueden haber dejado de seguir esta cuenta." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Deshacer movimiento" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Cerrar sesiĆ³n" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s te ha mencionado msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s te ha mencionado en un estado" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s se ha movido a %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s ha deshecho su movimiento" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Un nuevo informe requiere moderaciĆ³n" msgstr[1] "%(display_count)s nuevos informes requieren moderaciĆ³n" #: 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 "Advertencia de contenido" @@ -4000,9 +4029,51 @@ msgstr "Confirme su contraseƱa para empezar a configurar 2FA." msgid "Set up 2FA" msgstr "Configurar 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 "Mover cuenta" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "Crear Alias" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "AƱadir otra cuenta como alias" + +#: 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 "Es necesario marcar otra cuenta como alias si quieres mover esa cuenta a esta." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Esta es una acciĆ³n reversible y no cambiarĆ” la funcionalidad de esta cuenta." + +#: 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 "Introduzca el nombre de usuario de la cuenta que desea aƱadir como alias, por ejemplo: user@example.com :" + +#: bookwyrm/templates/preferences/alias_user.html:30 +#: bookwyrm/templates/preferences/move_user.html:35 +msgid "Confirm your password:" +msgstr "Confirma tu contraseƱa:" + +#: bookwyrm/templates/preferences/alias_user.html:39 +#: bookwyrm/templates/preferences/layout.html:28 +msgid "Aliases" +msgstr "Alias" + +#: bookwyrm/templates/preferences/alias_user.html:49 +msgid "Remove alias" +msgstr "Borrar alias" + #: 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 "Usuarios bloqueados" @@ -4032,7 +4103,7 @@ msgstr "Nueva contraseƱa:" #: 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 "Quitar cuenta" @@ -4154,18 +4225,47 @@ msgstr "Descargar archivo" msgid "Account" msgstr "Cuenta" -#: bookwyrm/templates/preferences/layout.html:31 +#: bookwyrm/templates/preferences/layout.html:32 +msgid "Move Account" +msgstr "Mover cuenta" + +#: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "Datos" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "ExportaciĆ³n en CSV" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Relaciones" +#: bookwyrm/templates/preferences/move_user.html:12 +msgid "Migrate account to another server" +msgstr "Migrar cuenta a otro servidor" + +#: 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 "Mover tu cuenta notificarĆ” a todos tus seguidores y los dirigirĆ” a seguir la nueva cuenta." + +#: 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" +" %(user)s se marcarĆ” como movida y no serĆ” detectable ni utilizable a menos que deshagas el movimiento.\n" +" " + +#: 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 "Recuerda aƱadir a este usuario como un alias de la cuenta de destino antes de intentar mover." + +#: 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 "Introduzca el nombre de usuario de la cuenta que desea aƱadir como alias, por ejemplo: user@example.com :" + #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" @@ -4574,8 +4674,8 @@ msgid "Streams" msgstr "Transmisiones" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "Transmisiones" +msgid "Broadcast" +msgstr "TransmisiĆ³n" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -4900,19 +5000,19 @@ msgstr "Instancia:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Estado:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Software:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "VersiĆ³n:" @@ -4925,7 +5025,7 @@ msgid "Details" msgstr "Detalles" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Actividad" @@ -4939,7 +5039,7 @@ msgid "View all" msgstr "Ver todos" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Informes:" @@ -4956,7 +5056,7 @@ msgid "Blocked by us:" msgstr "Bloqueado por nosotros:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notas" @@ -5676,17 +5776,22 @@ msgstr "Actividad reciente" msgid "Remote instance" msgstr "Instancia remota" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "Movido" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "Eliminado" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inactivo" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "No establecido" @@ -5698,55 +5803,55 @@ msgstr "Ver perfil de usuario" msgid "Go to user admin" msgstr "Ve a AdministraciĆ³n de usuaries" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Remoto" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detalles" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Correo electronico:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Ver informes)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Recuento de usuarios que han bloqueado este usuario:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Fecha de alta:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Fecha de actividad mĆ”s reciente:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Seguidores aprobados a mano:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Reconocible:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "RazĆ³n de desactivaciĆ³n:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detalles de instancia" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Ver instancia" @@ -5883,7 +5988,7 @@ msgid "Need help?" msgstr "ĀæNecesitas ayuda?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Crear estanterĆ­a" @@ -5891,58 +5996,66 @@ msgstr "Crear estanterĆ­a" msgid "Edit Shelf" msgstr "Editar EstanterĆ­a" -#: bookwyrm/templates/shelf/shelf.html:24 +#: bookwyrm/templates/shelf/shelf.html:25 +msgid "You have have moved to" +msgstr "Te has movido a" + +#: 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 "Puede deshacer el movimiento para restaurar la funcionalidad completa, pero algunos seguidores pueden haber dejado de seguir esta cuenta." + +#: bookwyrm/templates/shelf/shelf.html:39 #: bookwyrm/templates/user/relationships/followers.html:18 #: bookwyrm/templates/user/relationships/following.html:18 msgid "User profile" msgstr "Perfil de usuario" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos los libros" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s libro" msgstr[1] "%(formatted_count)s libros" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostrando %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Editar estanterĆ­a" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Eliminar estanterĆ­a" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Archivado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Empezado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Terminado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Hasta" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Esta estanterĆ­a estĆ” vacĆ­a." @@ -6248,6 +6361,10 @@ msgstr "Has leĆ­do %(read_count)s de %(goal_count)s libros< msgid "%(username)s has read %(read_count)s of %(goal_count)s books." msgstr "%(username)s ha leĆ­do %(read_count)s de %(goal_count)s libros." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "Seguir en nueva cuenta" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6506,35 @@ msgstr "Dejar de leer" msgid "Finish reading" msgstr "Terminar de leer" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Mostrar estado" -#: 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 "Abrir imagen en una nueva ventana" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Ocultar estado" @@ -6609,10 +6726,14 @@ msgid "Groups: %(username)s" msgstr "Grupos: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "se ha movido a" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Solicitudes de seguimiento" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6748,12 @@ msgstr "Listas: %(username)s" msgid "Create list" msgstr "Crear lista" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "Unido %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6825,6 @@ msgstr "Solo comentarios" msgid "No activities yet!" msgstr "Ā”AĆŗn no actividades!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "Unido %(date)s" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6730,10 +6852,6 @@ msgstr "No le sigue nadie que tu sigas" msgid "View profile and more" msgstr "Ver perfil y mĆ”s" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Cerrar sesiĆ³n" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "Archivo excede el tamaƱo mĆ”ximo: 10MB" @@ -6750,7 +6868,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "%(num)d libro - de %(user)s" msgstr[1] "%(num)d libros - de %(user)s" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/eu_ES/LC_MESSAGES/django.mo b/locale/eu_ES/LC_MESSAGES/django.mo index cceaa551cd824edaea650ca2b3cf7c4b0ff69bb6..ebdc996cb8c2c4430af07d8ce47949590658e981 100644 GIT binary patch delta 37890 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 BI)nfK delta 30831 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\n" "Language-Team: Basque\n" "Language: eu\n" @@ -42,15 +42,15 @@ msgstr "{i} erabilera" msgid "Unlimited" msgstr "Mugagabea" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Pasahitz okerra" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Pasahitzak ez datoz bat" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Pasahitz okerra" @@ -102,8 +102,8 @@ msgstr "Zerrendaren ordena" msgid "Book Title" msgstr "Liburuaren izenburua" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Balorazioa" @@ -145,7 +145,7 @@ msgstr "Arriskua" msgid "Automatically generated report" msgstr "Automatikoki sortutako txostena" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Moderatzaile ezabatzea" msgid "Domain block" msgstr "Domeinu blokeoa" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audio-liburua" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "eBook" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Eleberri grafikoa" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Azal gogorra" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Azal biguna" @@ -205,26 +205,26 @@ msgstr "Federatuta" msgid "Blocked" msgstr "Blokeatuta" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ez da baliozko remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ez da baliozko erabiltzaile-izena" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "erabiltzaile-izena" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Erabiltzaile-izen hori duen erabiltzailea dagoeneko existitzen da." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Erabiltzaile-izen hori duen erabiltzailea dagoeneko existitzen da." msgid "Public" msgstr "Publikoa" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Publikoa" msgid "Unlisted" msgstr "Zerrendatu gabea" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Zerrendatu gabea" msgid "Followers" msgstr "Jarraitzaileak" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Jarraitzaileak" msgid "Private" msgstr "Pribatua" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktiboa" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Osatuta" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Geldituta" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Inportazioa gelditu da" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Errorea liburua kargatzean" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Ezin izan da libururako parekorik aurkitu" @@ -310,47 +310,47 @@ msgstr "Iruzkina" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "Ebatzitako txostena" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "Berrirekitako txostena" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "Salatzaileari mezua bidali zaio" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "Salatutako erabiltzaileari mezua bidali zaio" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "Erabiltzailea debekatu da" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "Erabiltzaileari debekua kendu zaio" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Erabiltzailearen baimen-maila aldatu da" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "Erabiltzaile-kontua ezabatu da" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "Domeinua blokeatu da" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "Domeinua onartu da" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "Elementua ezabatu da" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -368,103 +368,103 @@ msgstr "Aipuak" msgid "Everything else" msgstr "Gainerako guztia" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Hasierako denbora-lerroa" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Hasiera" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Liburuen denbora-lerroa" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Liburuak" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (Ingelesa)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (katalana)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (alemana)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperantoa" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (espainiera)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galiziera)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italiera)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (finlandiera)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (frantses)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lituano (lituaniera)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Herbehereak (nederlandera)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (Norvegiera)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (poloniera)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Brasilgo Portugesa)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Europako Portugesa)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (errumaniera)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (suediera)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Txinera soildua)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Txinera tradizionala)" @@ -575,7 +575,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" @@ -680,7 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Zerrendak" @@ -1076,11 +1072,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 +1113,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 +1241,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 +1324,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:162 msgid "Cover" msgstr "Azala" @@ -1373,7 +1369,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?" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Barkatu! Ezin izan dugu kode hori aurkitu." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Berrespen kodea:" @@ -1681,6 +1677,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" @@ -1755,7 +1752,7 @@ msgstr "%(username)s(e)k 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 +2699,8 @@ 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:100 msgid "Groups" msgstr "Taldeak" @@ -2747,7 +2745,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 +2754,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:94 msgid "Reading Goal" msgstr "Irakurketa-helburua" @@ -2795,7 +2793,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:79 msgid "Import Books" msgstr "Inportatu liburuak" @@ -2806,14 +2804,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 +2865,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 +2964,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:163 +#: bookwyrm/templates/shelf/shelf.html:185 msgid "Title" msgstr "Izenburua" @@ -2980,8 +2978,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:164 +#: bookwyrm/templates/shelf/shelf.html:188 msgid "Author" msgstr "Egilea" @@ -3138,7 +3136,7 @@ msgid "Login" msgstr "Hasi saioa" #: 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 "Hasi saioa" @@ -3149,7 +3147,7 @@ msgstr "Ondo! Helbide elektronikoa baieztatu duzu." #: 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 "Erabiltzaile-izena:" @@ -3157,13 +3155,13 @@ msgstr "Erabiltzaile-izena:" #: 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 "Pasahitza:" -#: 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 "Zure pasahitza ahaztu duzu?" @@ -3206,35 +3204,39 @@ msgstr "Berriz aktibatu kontua" msgid "%(site_name)s search" msgstr "%(site_name)s bilaketa" -#: bookwyrm/templates/layout.html:37 +#: bookwyrm/templates/layout.html:39 msgid "Search for a book, user, or list" msgstr "Bilatu liburu, erabiltzaile edo zerrenda bat" -#: bookwyrm/templates/layout.html:52 bookwyrm/templates/layout.html:53 +#: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55 msgid "Scan Barcode" msgstr "Eskaneatu barra-kodea" -#: bookwyrm/templates/layout.html:67 +#: bookwyrm/templates/layout.html:69 msgid "Main navigation menu" msgstr "Nabigazio-menu nagusia" -#: bookwyrm/templates/layout.html:87 +#: bookwyrm/templates/layout.html:88 msgid "Feed" msgstr "Jarioa" -#: 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 "pasahitza" -#: bookwyrm/templates/layout.html:144 +#: bookwyrm/templates/layout.html:136 +msgid "Show/Hide password" +msgstr "Erakutsi/Ezkutatu pasahitza" + +#: bookwyrm/templates/layout.html:150 msgid "Join" msgstr "Sartu" -#: bookwyrm/templates/layout.html:179 +#: bookwyrm/templates/layout.html:196 msgid "Successfully posted status" msgstr "Egoera ondo bidali da" -#: bookwyrm/templates/layout.html:180 +#: bookwyrm/templates/layout.html:197 msgid "Error posting status" msgstr "Errorea egoera bidaltzean" @@ -3479,7 +3481,7 @@ msgstr "Gordeta" #: bookwyrm/templates/lists/list_items.html:50 msgid "No lists found." -msgstr "" +msgstr "Ez da listarik aurkitu." #: bookwyrm/templates/lists/lists.html:14 bookwyrm/templates/user/lists.html:14 msgid "Your Lists" @@ -3493,6 +3495,23 @@ msgstr "Zerrenda guztiak" msgid "Saved Lists" msgstr "Gordetako zerrendak" +#: bookwyrm/templates/moved.html:27 +#, python-format +msgid "You have moved your account to %(username)s" +msgstr "Kontua hona mugitu duzu: %(username)s" + +#: 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 "Ezin duzu desegin mugimena funtzionaltasun osoa berrezartzeko, baina baliteke jarraitzaile batzuek kontu honi jarraitzeari utzi izana." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Desegin mugimena" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Amaitu saioa" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3721,8 +3740,8 @@ msgstr "%(related_user)s eta beste %(other #, python-format msgid "A new link domain needs review" msgid_plural "%(display_count)s new link domains need moderation" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Esteken domeinu berri batek moderazioa behar du" +msgstr[1] "%(display_count)s esteken domeinuek moderazioa behar dute" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s erabiltzaileak %(related_user)s mentioned you in a status" msgstr "%(related_user)s(e)k aipatu egin zaitu egoera batean" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s hona mugitu da: %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s erabiltzaileak mugimena desegin du" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Salaketa berri batek moderatzea behar du" msgstr[1] "%(display_count)s salaketa berrik moderatzea behar dute" #: 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 "Edukiari buruzko abisua" @@ -4000,9 +4029,51 @@ msgstr "Baieztatu zure pasahitza 2FA ezartzen hasteko." msgid "Set up 2FA" msgstr "Ezarri 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 "Mugitu kontua" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "Sortu ezizena" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "Gehitu beste kontu bat ezizen gisa" + +#: 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 "Beste kontu bat ezizen gisa markatzea beharrezkoa da kontu hori honetara mugitu nahi baduzu." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Ekintza atzeraezina da hau eta ez du aldatuko kontu honen funtzionaltasuna." + +#: 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 "Sartu ezizena gehitu nahi diozun kontuaren erabiltzaile-izena, adibidez erabiltzailea@adibidea.eus:" + +#: bookwyrm/templates/preferences/alias_user.html:30 +#: bookwyrm/templates/preferences/move_user.html:35 +msgid "Confirm your password:" +msgstr "Berretsi ezazu zure pasahitza:" + +#: bookwyrm/templates/preferences/alias_user.html:39 +#: bookwyrm/templates/preferences/layout.html:28 +msgid "Aliases" +msgstr "Ezizenak" + +#: bookwyrm/templates/preferences/alias_user.html:49 +msgid "Remove alias" +msgstr "Kendu ezizena" + #: 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 "Blokeatutako erabiltzaileak" @@ -4032,7 +4103,7 @@ msgstr "Pasahitz Berria:" #: 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 "Ezabatu kontua" @@ -4154,18 +4225,47 @@ msgstr "Deskargatu fitxategia" msgid "Account" msgstr "Kontua" -#: bookwyrm/templates/preferences/layout.html:31 +#: bookwyrm/templates/preferences/layout.html:32 +msgid "Move Account" +msgstr "Mugitu kontua" + +#: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "Datuak" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "Esportatu CSVra" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Harremanak" +#: bookwyrm/templates/preferences/move_user.html:12 +msgid "Migrate account to another server" +msgstr "Migratu kontua beste zerbitzari batera" + +#: 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 "Kontua mugitzean, zure jarraitzaile guztiei jakinaraziko zaie eta kontu berrira bideratuko dira jarrai dezaten." + +#: 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" +" %(user)s mugitutako gisa markatuko da eta ezingo da aurkitu edo erabili mugimendua desegin arte.\n" +" " + +#: 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 "Gogoratu erabiltzaile hau helburuko kontuaren alias gisa gehitzea mugitu aurretik." + +#: 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 "Sartu mugitu nahi duzun kontuaren erabiltzaile-izena, adib. erabiltzailea@adibidea.eus:" + #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" @@ -4562,7 +4662,7 @@ msgstr "Celery-ren egoera" #: bookwyrm/templates/settings/celery.html:14 msgid "You can set up monitoring to check if Celery is running by querying:" -msgstr "" +msgstr "Monitorizazioa konfigura dezakezu Celery kontsulta bidez exekutatzen ari bada:" #: bookwyrm/templates/settings/celery.html:22 msgid "Queues" @@ -4570,23 +4670,23 @@ msgstr "Ilarak" #: bookwyrm/templates/settings/celery.html:26 msgid "Streams" -msgstr "" +msgstr "Igorpenak" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "Emanaldiak" +msgid "Broadcast" +msgstr "Emisioa" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" -msgstr "" +msgstr "Sarrera ontzia" #: bookwyrm/templates/settings/celery.html:51 msgid "Import triggered" -msgstr "" +msgstr "Inportazioa abiarazi da" #: bookwyrm/templates/settings/celery.html:57 msgid "Connectors" -msgstr "" +msgstr "Konektoreak" #: bookwyrm/templates/settings/celery.html:64 #: bookwyrm/templates/settings/site.html:91 @@ -4595,7 +4695,7 @@ msgstr "Irudiak" #: bookwyrm/templates/settings/celery.html:70 msgid "Suggested Users" -msgstr "" +msgstr "Iradokitako erabiltzaileak" #: bookwyrm/templates/settings/celery.html:83 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:43 @@ -4605,7 +4705,7 @@ msgstr "Eposta" #: bookwyrm/templates/settings/celery.html:89 msgid "Misc" -msgstr "" +msgstr "Askotarikoa" #: bookwyrm/templates/settings/celery.html:96 msgid "Low priority" @@ -4663,11 +4763,11 @@ msgstr "Ezin izan da Celeryra konektatu" #: bookwyrm/templates/settings/celery.html:178 #: bookwyrm/templates/settings/celery.html:201 msgid "Clear Queues" -msgstr "" +msgstr "Garbitu kontsultak" #: 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 "" +msgstr "Kontsultak garbitzean, arazo larriak ekar ditzake, hala nola, datuen galera. Aldatu ezarpen hauek soilik zer egiten ari zaren baldin badakizu. Celery-ren prozesuak itzali behar dituzu lehenik hau egin baino lehen." #: bookwyrm/templates/settings/celery.html:208 msgid "Errors" @@ -4899,19 +4999,19 @@ msgstr "Instantzia:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Egoera:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Softwarea:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Bertsioa:" @@ -4924,7 +5024,7 @@ msgid "Details" msgstr "Xehetasunak" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Jarduera" @@ -4938,7 +5038,7 @@ msgid "View all" msgstr "Ikusi guztiak" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Salaketak:" @@ -4955,7 +5055,7 @@ msgid "Blocked by us:" msgstr "Guk bloketatuta:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Oharrak" @@ -5035,7 +5135,7 @@ msgstr "Erabiltzen da hori inportazioekin gauzak benetan gaizki doazenean eta ar #: 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 "" +msgstr "Inportazioak desgaituta dauden bitartean, erabiltzaileek ezingo dituzte inportazio berriak hasi, baina dauden inportazioei ez die eragingo." #: bookwyrm/templates/settings/imports/imports.html:36 msgid "Disable imports" @@ -5419,22 +5519,22 @@ msgstr "Salatutako estekak" #: bookwyrm/templates/settings/reports/report.html:66 msgid "Moderation Activity" -msgstr "" +msgstr "Moderazioaren jarduera" #: bookwyrm/templates/settings/reports/report.html:73 #, python-format msgid "%(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 +5558,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" @@ -5675,17 +5775,22 @@ msgstr "Azken jarduera" msgid "Remote instance" msgstr "Urruneko instantzia" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "Mugituta" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "Ezabatuta" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inaktiboa" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Ezarri gabe" @@ -5697,55 +5802,55 @@ msgstr "Ikusi erablitzailearen profila" msgid "Go to user admin" msgstr "Joan erabiltzaileen administraziora" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Lokala" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Urrunekoa" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Erabiltzailearen xehetasunak" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Eposta:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Ikusi salaketak)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Zenbatek blokeatu duten:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Noiz gehitua:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Azkenekoz aktibo:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Eskuz onartutako jarraitzaileak:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Aurkigarria:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Desaktibatzeko arrazoia:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Instantziaren xehetasunak" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Ikusi instantzia" @@ -5882,7 +5987,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:87 msgid "Create shelf" msgstr "Sortu apala" @@ -5890,58 +5995,66 @@ msgstr "Sortu apala" msgid "Edit Shelf" msgstr "Editatu apala" -#: bookwyrm/templates/shelf/shelf.html:24 +#: bookwyrm/templates/shelf/shelf.html:25 +msgid "You have have moved to" +msgstr "Hona mugitu zara:" + +#: 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 "Ezin duzu desegin mugimendu hau funtzionaltasun osoa berrezartzeko, jarraitzaile batzuk, baina, baliteke kontu honi jarraitzeari utzi izana." + +#: bookwyrm/templates/shelf/shelf.html:39 #: 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:54 #: 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:112 #, 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:119 #, 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:131 msgid "Edit shelf" msgstr "Editatu apala" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Ezabatu apala" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Apalean jarrita" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Noiz hasia" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Amaituta" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Noiz arte" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Apal hau hutsik dago." @@ -6048,7 +6161,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 +6190,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 +6360,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6388,35 +6505,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" @@ -6453,7 +6570,7 @@ 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 @@ -6478,7 +6595,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 @@ -6608,10 +6725,14 @@ msgid "Groups: %(username)s" msgstr "Taldeak: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "hona mugitu da:" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Jarraitzeko eskaerak" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6626,6 +6747,12 @@ msgstr "Zerrendak: %(username)s" msgid "Create list" msgstr "Sortu zerrenda" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6697,17 +6824,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 +6851,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 +6867,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:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/fi_FI/LC_MESSAGES/django.mo b/locale/fi_FI/LC_MESSAGES/django.mo index aef95bcc06233ef2f3ce16e1794ef8273684aba7..e34ee4a6bde7da344f7a3b5c3ee83f60290be68b 100644 GIT binary patch delta 30865 zcmZAA1$Y(LgZJ^df#4F{A;Chh0Kwhe3GVKJ65IxN5AN>nMG7r0h2rk+P~6IXfA<`o zWp|!;{-5JMb8kYn@6mhFM&6I+-i#l4n!`2A*Ktzf{j84DC#vJDt*=zanbga1lH+7d zfNL>5?#D#<08`;ttc1yWJ5F9~jU{m|7RFnc9aHvkoH|$un>vo`EGF<52|j%t=P4e- zn7FZ@0riGFwj-3|n<6X5?j<%T&Ms#a$Q?VXQjUaegNrog+OT4QYF#oAln zqE>Q%yU=ku6Ns|NajIf>{DB8hGdZxB1ICgLVEu~{-?Pkd^5Iu3g(1rwry2IbR(Kg3 zU=jACKF-8O_%CM1YAj<*9Ei=)y-Oe)fzqsZJnV)&a2WC`aK4}pT_78#v(gCt@d&2( zIL>3#fMTyT11f`kiH}ANAo4o%I5xq=#2288+p&*=dD)oXNZ5$gFzp5&E$oIFaW4Ae z0qZf;i|8~)!Fw1DpJHr$i&4?D(Zr*p$|XUir?%-Cz3B`kH-T7W6hf^)d0U_XszN(d z2VF4|_Q4D|0OR8l)PS~Q3_Ol%?*gjcU5t*;FfP8wIOw~Hd@V&n0(zCELNyeEs!+~a z1J!Ut)C}98I_QpmIM_M`Rc{HZgLN2)dr$+pk9xDdKyA%ubXB3&W|Pqv;}LIyV&@r*7hiW(_YGpE`29_J+V6nbZ3$>Ed!QN~fvPwQBjX}egUeAf*@x=*w9UVXI#l;iXW$iTY2TyT@!4ZK zih(*?Nm2DP8(pUW0d-U!6Jr(BfLdV!?14H=qfrB#idvBsSP(a%PV;kA!)5pKa>ClE z0j2uGq^Cm-AQ$Gx(&(#K(EtJ(@lbC9-*`|RPPZ;XZN*yDsojNI(g&z5`HE`TXP+sT z(3%#tVmVNs|HZL0Ho<&&67#zRBJZa&EP^2(9xK#okM@@tSbo$1%Gh`<+)TU~mcj%F zXcX&WQ{0YPsl*4(N(P};q9AI(#Zdz*hpv{ot}W2c76?P_T@TbL9$+1T{=_Gu2DA~i z6@S?Lqc;7FO}~X|=Lu?s-q`#|hs*%u9b)~}P7LNN{YL|>eaI<#}qyF#d^;}6u~JdPU370iauTml+NvSX%TMpQf(s-a@m zTBy_B7PT^qQ7@!3s4XmV+zg~Ds$LjI!66tGN23Nb88v_fR(BHt6+D2^@i<1t^B4oK zpayi`#^2cZH*540rs2dGgL3IHCI+KsTnN=(Mbs8nv$jCqysp!OKuj{mphh?y^>{7C z6u8UAFQOWJjvDY+8}~VB1{e=xlAap%O3#ei!eTbR8mj$9sIBaPN%i~>A)t}XK`qUC zRLA>KOLrY(;eAxYZ%_?I`P+QAONg3zUsSo_sCrW{8qP*-(Gt`d*@_z2F7!VC#|dcZ zBb_qFM$IG%>X4;FRVafgu{JiqZm5p_Ms;)nRsJT%M(4Dt7Y9`?H7Y$LYCyTs)uAe5 zGX`N?;uBCSFdwzlyHGRx6V=cu)MI)P)!-Y9gFjGv9p@jjg$YnA8iblqAyhl%P!kUQ zhxJ#W2?<)lb~Yp2793#H$5^LX7h2b#8r+U?@qkS~hwAVqYM@V1OYeKel#7XaN>ZF* z|26Vp5@b>I!z!qmH9@UFC)Co1qdpBMp~|m9y`XlYw&1k&vh@yXf=_My9cl%?qdpUS z-LrfRB9IQXchyjb@i)|A8-~en7HS|{Fh1@=Jtcpm27C`S<9Dc)aL!Q&{7@aPwr)lZ zd>3lv++zgP(M2qT&rlTt&zmI+M$Ie_Y9>W70hYHmLhX51YY+534X8Kca2sESYG)&= z{oj#xT<1>$8uP)pbhwbxxy6-J{*J`dyJGE})8sFgW_8qgUVzm1yM zQ=9$)6A|~lWa_2BsPyk-ArK!!P)k`BHKR(XjzUobXoG5?FKR}Ua3an@%{)Ii6f208_O za2cxOm8f?1qUs+*t>`K1B~<;}*I0jz>>&x7!E2lG5krZ8$G%wex{fN38}`F0H+TZ@ z7`DauHz|XCu>}5&r7`X;wh2Q~?LWXI_}s=LySGh7Ow>}wM?D4UP%DrF6Jt@-S*VSg zSzAnj;ns<$y)ojKj-$$5Lk;L7Y9$KaF^AbLL!c-LRZuH24zB1*)TsSQ_`E2Il*~tY}=+N+w5baYl?s|4s-2RV;%6SQ}Nb z7pmZ3tcnvb4c37rsl07sHXF{z|ZcK({P%GCI(_s(P1ZSaEcrCg*Tz?RVj2BQN zyo&1Jp-uOBWCjuyH;|qXQ{zFbg!iyM20u149gSM4si*-iw((7<3GG8)Jo%XQ*P%E| zLLq#J+M~2j%nIZ~jkE-&#ag%#d*XTwd}I`&8bubL`;53_m!ls``&FBHD;cqrS&P%g}NiYWKDN!pMh|#eS zYVXUSR=6IvN4K+0xP%(fbJR?tzcMC9HINRqWZ5tdhM*cOiR!R6s>5a&8@r?08-l90 z0CmQeVJ2LS^y50`2Zq$u8Dqn{yPv*2mMeDPO$NHsDbTA4dgDy#VG%py-bYpi08y$EQMOB zaGO5BIuUio7NI|`L!E(B7+uf*Q=9M(H2}Z2rr}^zgC$UVRta^enxU4o9qN>ap_aS{ z>Mm`;_`T_H5o#c-Q02Cu%I(4I z82G_7TnDwsjW8)TN3Bp_)XI&s&P6}sYd^65n$cboLhuk4$Iqya3Vt+uT?#eRny7)) z$0XR&#`~e#8ID?s@zyz*ocJnCf(J1HUPle=^+(oU2|k}p2Z>Ry&Qz!o=fk8}4z+a6 zFcY@HEI1K0pxvmMA3`0@pRRv-1FINX>ON*MqU9m;~F;Jz{XqHct=#j z;i!QP!3;RX=I^xb$7G}*MYVSqHPdIPfqu6}{bDBU#v`E9nH1w=dQ6Y`P^YvJs>9x> z=X?~Zd<3e&1*olAW%DlLn(r zj*y@cCG+uk2NZyXiDyO~vbLy-olpZEgc{%^)J&(Nw*%}$d;{w61x50BS1KQB0wqx8 z%40vQ?Gn&qbq3Y&b=33v9R2Y>)Ly5FY|?9De&VfA4b4Ms;cC>3e@6}I6l#mEqRQXL z5KQH3>eWEibDI!Qhn-O)c2P4Ok7{TUYGCUyCGJJ7$W_dMw@@AVMllV>MXh9N)BrQ0 zmO2DGV?NZOU4}g7u5*-t8oq)$bRSRy_<=fn38I<~vSU`_`B5v@8a1%4sCt7?Ga8MW z$V{8R9M#@-)Z=;_b^70;_xJzlqnQzB#+GE{LcM6FBO`QHS$Cmkdct}E{fXZ~4akXZ zRxBoJE0SP(%!*p68mM-Ap;l-N#&!uzA)t{jM9pLaYD;#aIy{bb@I30plO=}7`HLe3wmOjCC-NGs5+{hdZ;aJftpwty6VU!paD!qE$Kqk(r-k)NKT+0qr0e? z`ouB~#YQc4GE_%_sQSUE(_YNR%c4Gh>!98fVW{%cV%g_^o-Mc>HL~rfH`WnUg$JmS z$BJzZRZ?pPR71H?9T&7#M77hv=66IL#&GnW71WB1j?MG0kw(~r*{BAW+Jb9QZ>(*o z1}~vz@)-4|bK-csZ^UG%0SBX2u8NJfL)9OFYIh}O#*L_zyXF$mNS>f(@YWhBt{HIx z)QJ62`9atp3!oaEkzQ_BS@fx#{o;-nBx$+o9yczoI`5!|- zGgyNfz%JC59I~Foip0-ZQz!Iz|E8loW+(kFYU$%8@;LP{7_~*Ca5FAMJ&v^!o5!ym z>O-s_R?z4FWCEi}xQ0WpbrO$L1|Q=N%%0TD@F8v`?w`!#{q_3=)C%QD?(u$Gu7!G$ z9YPK0F6!}gQkVgh!o@`Ep;r7W#?bTco6>xk_@QQ=704B(*@}LG%8FgqIp*k9g8t^348JLMW?Ue#ddVM@Zym^3YDg>rA=0F|70;me5 zQKz~lPRI1=JWfO0jas=R>CFXBsdapoCJW z$D$@`gzYdj4nWOpE^1{~qZ-;~(~qD&)h?jwJx1;McT{`v0?nZfw1%MS7efZ>IyDIB zacO{BiQcF)u>iG)Yf&9`TW!{KsLphAOKWeF8q3TsC zWVWyl)*{}j5YNAsXeS9Okh!p#aURqRMqy^$iZ$>S>S@VY#C)4AjvB~%)C_l_R_Gtp zfM26tT;EY!6uGGRjHrQnFNC=S)WI0kA=`#(a5w7k9YG&FjXCiww!p~6%wyLURj;pg z5Ne4>pq`THmGIpB;Cuu2V9 zEL7T@=Ju$iJ&MinG^&FfWz45ser!#=Gb;U@O}}Q-{mN=(dH#A5P)B`GPr(puiQ8;? zvT|moX;G&>59$?N7vFeTdh{pWse*X}j>mMw7o$E64`T+ri5gJkispUM0gKVUvxq=r zyn{usSS63s90y=0yoIN+a%EmnbeOV=*@BE!%^}K#xyi4J+Nz-#j7Lzfta5fF5^hjTXyw0VfYNoV}sw!Z#b6V7~*NVd7P=Z8pmU?aE~)t&;Q>9 zx{=VdyT_T0XE6dh_b@Z}^fbRxnT2`}Bh1N1oZ{Iw#Wksn7rHU$QnS7m!_NBke;P307@XQef2ZwF#_ zj6BFZEg{&Pcn9>ylbDKuzQDr7V-7KoU3u(9d^Xmne<%J>^Eh=v{ZP3Ur{f`1M~#M= zCBKVWf$-txu%1Gl<~QhzSw@%_Sx(gBSkT5pF(&cGs87}QsHbHBy2=<&KyScVsBb`v zQ3cmx4BU_UbUT5`@eXRB-%#}vjWhRhM{I$M*2ky;d_fJ&Z?YD=Gk3c=|3sL2^png<4I*L8a zN#FqqYADHQ^SK>_I+S_QJ3!RPcc9*6M^Gzu3v=NU8&5gLypl7b>Xk%&NL9D-x~R{N z)~NPIxdhbEOw>{@MlI<&)En-1R0B6r4L-2GMSaM4#+nt&fFZ zzwd-sAnZoyw@a+<{uMeW(GRx9PV~GkAm=*hlP%z7xzF zv_F<6z8tk>&roOV2Wl&$P4rIGby5@1VakkSuoTY5Q}`9zPckp2)|1VEl25T8$Ec3; zpjNCDYQWV{9o9t+up?@M{V)(0qdqf^V>CVgcL?ZP@KchLM5 zqfe+AIaAGtQ*_iJ3qqZx!l?YJsCso#k7;XExsK@l`=5aXw8SG&OEbs1$)+DcRlIJ~ z@1i>RWbrOqIZVxGkE^BM=@raLz5i46EBTr z@pmkT`gO;AD37&xr9MKP?m~0S9(P79=>XLGV-lXk1*k*VX|Bf^h?}r4=9p(zaLqiP zf9=s;612pJQSpGNYRw4!}o(TOh4XR#oRD0D>_3NQtOigXP zt7{ANLY>M%m;z^@mU4@YpFz#=g^fE4%nvFlQD>(MY9)uEK2xTmo{EGE&0+S(EyRnV z2Kp9thTQK2H1oKN%pNDg%EYswX3!T^VKl122-M0fKn-Xew!;0Wfn->0CQuMF6R(4M z;|)f&vlP|NdJ}h@T{hz&>QJ3RHFO2_>Gsm5XIf$!2(cDH9kOz$L)8%V0&9orcqz8T z)2Jm6S!!0IH0mj7iBYvyeF$h|gHa8RMa^shYCxM&E3_9??f_~p|3)Cyfiy(eCxW)gLU zIehU@0}DWPTnO7?P1FQ;TMwWnbYcb1zeaS41fAads3m%5Lr~l+C*PQa3BxtE$pqA=C)Dp#7ZGJRMgL)bU zptfKf>JZI9O<)~r<#wU!pT;#(4I~0Jv*otH9@L&+ zKz(I;f+`nfojDuHQ2BXKTTsEKw?uX5qCZYYt<(5(&CY>Yi8n=cG|svlwWs@0XX7EN{%h1kB5g1oCbI@%WYP=ZKt2CO3Fy%6MKy33 zweW_%0v{oor`#uOXPRth{)sy`O>7*DgVL%lB!p~{~`wSNJF^!(qq32`== z!;=cNB3V!kSUDX4qoh<#kXU_d$Ogi>kjCRsS#4;X8&p12<7C^B#4Gf1oDl zx79xXDYu%L2B8j93Dl=wZPbjzQF}TBwS?199nDA0a2cxHHdOtCsKa&{C*lLtjC*V| z1D%Q*(CTeG|7u_>2^!f!)KXu-j(8i3W999p!gy52Gf?&Bqn`Kmr~&LjwQ~Xs;&s$Y zCD~z~`yiZ3JSS?!4!Z=@&~?;^pQBz3pK&*)+G$Sf70gTgCaPkh-_1<3pk64&Q1#29 z&P*t3hMiD{xF>4mB2dr$T+~F}Z3OfYruScDwJ(y6>|7ij`?e}pcM%iaNo`71~ zsi-fJb5R}MK@H?3p2csd0iE7&(yv*cptkBGs$T3r&5J8JDm^#G*YjVIfDTDxC14lS zjE120Y8L8o+Kf6}M{N8us-YLCdXfGz?IcFk%Y@px5~vlaf!gzisP@{Rt0nG7KrBiBJt@Mm^U>FbHed{C+ll64oJoDF)(K)Qc_MAv3X}sCFx(R;CGR zg?k-x%?Kxupo;5I9bQ0n_}KalbvXSFn-xli`eu|DwNf=v4cEsr*bVgusD?YEmbg2rfzha$-9#O#&!|%#<(PRjr^W-sOIUr6 zo2@#A8sG&~y_cwgxL*nA`+4jW=9K3^orNB#0z*-!dm3tw7vVp+0(JO$pEM0lKrQJU z)POf*FdjiYJs(l!3;%6iWHpg?U1u}_RhWkQTwjfv;X%}Az%3j9j+$xGQ|48h1N9;) zhB{mWP%AkSwUx6`GyV&8>aSTJTHj!NJ^$YbXi4IpHZw?R4Z)72S41_u9o675)C%22 zZPjZV_xxj4C@$)Kk_a{9e5jSIf;uxzQJ)q4FpZx7F$8qDR$I3ygZLiQ%3McPe1mE* z_8Bvfbf_gRj2ciURKtBy^+sbJoR37qG zrN4>k@dIkbQk*lVJd?FDs(e>eyCYC9pru#_x1#EOL2Y%^^F03=alm;qvK*L|cu~}V zI->S=6lw*gpgvaDqh|8N=6^&TKFUh|Tikeo=U)YrUNryA zmI2jaCM<=yusrreZP7j)fJd=8mc3*;Txs2kDz_io<1y5LLoS85~zt( zLQO0bsqZ>%3FuYZ6E&hS7=jB?9i2x#zpqg<`HI>y-|NQssQPJ8^+Qktu7G+EG(*)N zg&IHvYGvkn(|P`O5KzUxP;a`+*88XmudSa^9r@faZ_LD~h6n=^kg=$hny!33|MLlG30I)@?ii}z71WIHqZ)dNTJn#m$0y27Q_dfCsZlxQ$!lP4?2OrPF=}A{payUo^?1HQ)r)o8ya^Md z>IY&KEQQ%|GHT`aqb715wE{P8^ZZ99@PGsj;L%ni~pk`DR zRj&c6URzWLVOSb_VS3zy#qkd2#I$$K)`i}6&5ul7NKnRf)LA%+8u?AsX^nl)ymI|f z9TY$fpd@O>RWUPmKn-{rs@!VSmTbX%cpUX<>vP{sD1%EtGb(1Sj{d}(qZ$~3TH>*& zflNbnuo6{oFY48N3iV=nX!D=r3gVszrsGwp6}n@6jM@_S6#;!yiS*FSC=k_A2x@D} zVklO!`3q4?z7`AN@2G*kN4+opLv5YkBh#Kgs=ch%V%VK{O{ARb93h|vE}=TSje49O z;9z`7iM5(Q8TKHVOSTv13}IFJnAWUf*P>zOLGR2VpigrQ0cW% z189f-IPfLUe{li}NGOK4Q6u($WjZK;s#p%SLJd#@X@)v%9Z`Ec09)f|)Q8V2?0|7z zn?GvlgIckJsK@UzYT#dA^ZYBr?~NI8dh{or8oc`;J;_-+#>(Bt{L`A9dKXx&$MXQF z4KN(FV*POp4neJK><^~nG^i~sfT~{=z5n-rtqEx4JyEB6B5EM>Pz^3cz0p>qR$v#Z zfy1aXa09dBTU7nDAI*2f9H>LN9`$}n_{scJq3zK+pF;)SfKC47e55 z(N)yeyg?1X_lp@|JZnW|0v#HU~d{1(ae@qQ&L8`;Nuiu+(eGG<{UJdf)5GHU5>Sf8L)>^*AFeSCe)rylC; z_@mMTQQxZbpq`RisK-1UwIvf=0y=!lQP1^0%!X%Cr`w5QW)u^>TZBpvMxEw@s1>MY zt&duXmgtY&QBT1%48awscCK07#{~9}@E%ohb5tMiVLO2LiC;oBuqT@F6sp{9)aieN zXEADYAN@B+oU5p_vOb1cv4k9#5ax<}Bnyz1WIl0{#47-expH?MX+}NQa_+ z2AqW&$PLuv^a?eD=y6QBRHzjRK^?ZzHoX>VOWWIce^mV`s6)CI1N8hKAfN^wpgR75 z`cR1#*X(sB)Mr8nX2yo7hDV^Df?22;Ek>P<)u_X|4Rsj*wCP7t6Fi4H{m;aYH;G?;j$Sk8cj?E!1KAgjxZg1g2hM)Bw_=wkR{^$AYL83CBD*1VeEr zYRh9M@pg=+&?|%;S2$m*ZJ&}+1&u^yTAH<_2_VNBlDvn@9;!%?Lc>nCK2I>X& z1$X1Zq(0skRHI}*-oJu7iXprQTJv8eZAkvC6h7V;*LzGwdbX52|6|Cgl*-5ZrWz37b?9RF`*^=qC&f<03uAR$g?;b~ zs=e-RfCF> zoj3&lLY;{+f##6c#*D<HHvv7z1yL(e3blk)F$C*j3mk_! zWUp`o24*t@y@X-JA7L@9likFpqdvrZgUz9fj%s%(s-5xZwjpqcfR;3C4j=F5cz*0c zybr2@C#V&9fm*5WsFli>(;V7`sQOz_d%F+)@gee*In8Ng5hhk+TyaVC<9?_8FJ=>C zMCNBRA5)+(;S8$Db%<~UHu4hTZMJLz#VMPTGCt(%3bAI^rgLS)M3lckxGLe2`S<_P47)uj|@Lqd#{@Y=OO-1*+Zn)w*$0U-oN!t zOL}42zrtOW{C%{yg|PS1{+Fe|Hxf8!&T+!=8C{8A8Y)4V(Zuy)(slWlJjKUSrxJB^ zwdCGTejL)860U}oX}6{_xxy${+fL{z@#q)G>`sM`5hWTXsFH{5Dcr+IIZBRpeFIHA zC9W$TVO<}I@8ixxd<4z?Nw^Gmb;2b`tIC}`Vo}2c?h{h?+76S_@)4E9d6f8Q)63Fg zD#DBD@fqP|-0f^$ck6D9M!kBJ8OuGB`mHH<7k^$uZQ0Z0r=p)x`oHgOPo*Mc+~vMQ z#?Nacf#}NP{`E>kJ9-PPtEZc#7IP;gev7(+SeJVlWwO~()u4^v^c(ao zB$VY|ZwH|d`>s?9=8nZZ%Qjll=0~C9dz8NsQKLx$_XH)fao-_VpT_A4>uOD@->5l> zyNn&;NbE^|f6}%SZbmD^DchT}*)cJBok<%P%xmD9wg_s28jy&x|pn{Z*&wE1%4YbQH(N z4-(dQnFkckO5V?_G4Y{9wjw{;I;$zC4`P0q(oj8OTFc!hY=5>%xFx@ z{UQ<{iFpa+CQ(0Ht|c6o8D*le6Sg4_@sSa}&C|H0?OgX!x(WARls-!-zNLAu%fxfp zGR3eLaa|qBAIM$V=AE?VV^jCFEtAs}bz0e8r`q*dO@3tVZ|t=#!fWHzU%Nk-5E&X z^xV-1&%iad@mj=_Q1FKeQ>hAhuL<5J|0QX63CAbgk91uH2@j)AUhb8))2)>Im$-h| zZ>Dy*Hc_q#_uqOVe_p*v@TCAhQhBfYSe>+Tw(&MU3t}zO_%)joiF+b-_SiQPB0QMH(ilOdKDOf=qy^h>3c|0+kH$Sn zJ#h7*>{sf)C)}1hJ!QI6zAS0J+>L(LCH$DOk!)Obz4PxzhOR^Sk%n(!F76K8Rk{DB zQU)5;Ri5}{8c0YvU5N>wL%xDL^+_v5JOXPI-$6ZH$8j9>r*ntcv@hgy{qOphCLx{@ zZAaZ~!B5_D|NB3;3F@nFQab66h3K%hEgRhqiex7p?er#Hzf$>5SU+{P;BG+Lc;ZJ0 zSJnQvr&4F>GY zaTnsZ9^NYf87)ZoNZ}2HBjXp7#ji5?@FT9PKY7h5r|YS;sEIl=$kVmb;QfhI!Qp16 zPBO|jBYYS`X|Ito)&D#NxaQb`=P9tqHntA;k++e&$)vZWqJBdC&F0TTKUV8AdAg=q z?^*xB8n)ewHcjPbk#>%_Ti7-5$;R97Tob^dmCj++dgJl2U%%?zdEPj01ExU7&Nk*27bL>klveHS55LO*~+u6 z0XT{D)i{hYQ@CRi|6uE^C4B>F1L-5NO(W{G^VVnma}lUUW>WmleVal_7(`(j(KUzo zDdP1gQ-bge!h3NtWq)w%8bhA0joeAeyFr4rXMD~De%kPn+by1^-%t31$#&vU=P2nD zZHJu+|9XAqA8DO4R9a34=P7iGyBOgvRIE>WJZwO`HR(Hv>zc~FmYd%cId!>p4X_== zBV3TQC-@yBQ~x@huHb&i-Ia39$-6>Z3(>x=`3Z!={DRhd)#HELQ1Sm?|4{iq5;Jj6 zCx5;zUzzj+|F3Xc^4d|RC+Qx-1#NpH)iL)V;y2MPKp+_fuG5IF>V%V#wvO;?!VS4~ z`IAb`t<5XU+Sc}ymGYUZ;@*+zUw8wVQBp%t3xDI%#0jmG|>%MxYXRWb&ih#LL#J)cZ_0oK6?gmacN# zQGHwTiv}8-LxHzgj{BS~(2WA)sqmC|PSS_cu&$z{oi#!4e}QKSdAgF&MjG<+QEm+J zaN<#^dp9B=EQ$L&sWZtvZ(CQ5?8JR2HH5Ta;tvVy8cf+Kgl`efL74``M|1b{=Ca20 z*pd7)#Q)(QNttWpeW!lQ&|e0hn|vSAmUD-3*QM-1yA;RC8$nu6(#lb1R3x6WpH~+$W)rDE#!Bu< z+!yI!1!x{EW({-5i(a`;j+X zUkht-*Q4^!>xB)Rq|nbRBb{s^o|&?dxOGjW&ZA#CSV@@!w$9XF(*HHZoh#JaLwXVJ zVm8fPMx~Ut!5U;_r-7q3t}+iui%k48_gLa9Z3mU8*POg*#JdnaXd4W%6G=o~ckWf> zzq0L3rJSz%+|^0T@$)_No`SkAP+$S!tyJoLc+Zq^8dD*{HfoccoW%40 zk~UZ~p|P~oD@HrI0x%nf+RoeIHR8=}{4x0{2vGm=LX=$69$MmI^k z1^9F%9E;}GQuNoWi>((+R80>0;dZp*K;Q^-L4fvvY5%W=C* zXKW;PMB z^_JPeTqOUE4Xa#Z$~6A@OM+WA!}jA0`x&6%8}1{&4ARer>(g;=>LtWboQ4U0si#gl z(P>HYQc|Y~9w5In;a#|yxc4;9C7}WZr;$*U`w!xe$ydLb)BR9 z3maBE5_wm-`G4N47$<^xj$FCadS`wzPbRN?#i~% z13W?}9Y~8$_!vGWUXgo~E%Tkqn@Ar;{4FjZ-jw{abgt_;#<1Z_hU(&jgo`Ccocz}8x?Z9H8rWThpU8xPuEz%cL zzK~7d5sSt)k@=0p;adjunp$W}^esJNZW;Z@k0=rK55@5m+%o9UgmjT=*Q~rH-jh=P z@!ECi6(@>e8*%j+)UuEmQ6|oWXN7AV$t?Idl5w%v&&b-W{vUd9Ih- z(Ql0BY^)viXL#O5jo+J(l^>;ja=}D3#dgU%%TX%2Wy?c)x Rk)!y0iLxU>Y@coE{|6Q)Q?>vA delta 30844 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

    A)SK)gYR1n{ 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\n" "Language-Team: Finnish\n" "Language: fi\n" @@ -42,15 +42,15 @@ msgstr "{i} kƤyttƶkertaa" msgid "Unlimited" msgstr "rajattomasti" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "VƤƤrƤ salasana" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Salasanat eivƤt tƤsmƤƤ" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Virheellinen salasana" @@ -102,8 +102,8 @@ msgstr "LisƤysjƤrjestys" msgid "Book Title" msgstr "Kirjan nimi" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Arvosana" @@ -145,7 +145,7 @@ msgstr "Vaara" msgid "Automatically generated report" msgstr "Automaattisesti luotu raportti" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Moderaattorin poistama" msgid "Domain block" msgstr "Verkkotunnuksen esto" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "ƄƤnikirja" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "E-kirja" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Sarjakuva" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Kovakantinen" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "PehmeƤkantinen" @@ -205,26 +205,26 @@ msgstr "Federoitu" msgid "Blocked" msgstr "Estetty" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ei ole kelvollinen remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ei ole kelvollinen kƤyttƤjƤnimi" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "kƤyttƤjƤnimi" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "KƤyttƤjƤnimi on jo kƤytƶssƤ." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "KƤyttƤjƤnimi on jo kƤytƶssƤ." msgid "Public" msgstr "Julkinen" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Julkinen" msgid "Unlisted" msgstr "Ei jakelua" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Ei jakelua" msgid "Followers" msgstr "Seuraajat" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Seuraajat" msgid "Private" msgstr "Yksityinen" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktiivinen" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Valmis" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Keskeytetty" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Tuonti keskeytetty" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Virhe kirjan lataamisessa" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Kirjaa ei lƶytynyt tietokannoista" @@ -368,103 +368,103 @@ msgstr "Lainaukset" msgid "Everything else" msgstr "Muut" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Oma aikajana" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Etusivu" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Kirjavirta" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Kirjat" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (englanti)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (katalaani)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (saksa)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (espanja)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (baski)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (galego)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (italia)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "suomi" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (ranska)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (liettua)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "Nederlands (hollanti)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (norja)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (puola)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (brasilianportugali)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (portugali)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (romania)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (ruotsi)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (yksinkertaistettu kiina)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (perinteinen kiina)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listat" @@ -1117,8 +1113,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 +1324,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:162 msgid "Cover" msgstr "Kansikuva" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Koodia ei lƶytynyt." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Vahvistuskoodi:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s lainasi teosta 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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\"" @@ -3744,6 +3763,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 +3811,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 +4029,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 +4103,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" @@ -4154,18 +4225,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 +4672,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" @@ -4900,19 +4998,19 @@ msgstr "Palvelin:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Tila:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Ohjelmisto:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Versio:" @@ -4925,7 +5023,7 @@ msgid "Details" msgstr "LisƤtiedot" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Aktiivisuus" @@ -4939,7 +5037,7 @@ msgid "View all" msgstr "NƤytƤ kaikki" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Raportteja:" @@ -4956,7 +5054,7 @@ msgid "Blocked by us:" msgstr "TƤƤltƤ estettyjƤ:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "MerkintƶjƤ" @@ -5676,17 +5774,22 @@ msgstr "Viimeksi paikalla" msgid "Remote instance" msgstr "EtƤpalvelin" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "Poistettu" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Ei aktiivinen" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Ei asetettu" @@ -5698,55 +5801,55 @@ msgstr "NƤytƤ kƤyttƤjƤprofiili" msgid "Go to user admin" msgstr "Siirry kƤyttƤjien hallintaan" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Paikallinen" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "EtƤ" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "KƤyttƤjƤn tiedot" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "SƤhkƶpostiosoite:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(NƤytƤ raportit)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "EstƤneiden mƤƤrƤ:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "LisƤtty:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Viimeksi paikalla:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "KƤsin hyvƤksytyt seuraajat:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "LƶydettƤvissƤ:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Poistumisen syy:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Palvelimen tiedot" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "NƤytƤ palvelin" @@ -5883,7 +5986,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:87 msgid "Create shelf" msgstr "Luo hylly" @@ -5891,58 +5994,66 @@ msgstr "Luo hylly" msgid "Edit Shelf" msgstr "Muokkaa hyllyƤ" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "KƤyttƤjƤprofiili" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, 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:119 #, 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:131 msgid "Edit shelf" msgstr "Muokkaa hyllyƤ" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Poista hylly" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Hyllytetty" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Aloitettu" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Luettu" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" -msgstr "Saakka" +msgstr "Lopetettu" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Hylly on tyhjƤ." @@ -6248,6 +6359,10 @@ msgstr "Olet lukenut %(read_count)s/%(goal_count)s kirjaa%(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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6504,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" @@ -6609,10 +6724,14 @@ msgid "Groups: %(username)s" msgstr "RyhmƤt: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Seuraamispyynnƶt" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6746,12 @@ msgstr "Listat: %(username)s" msgid "Create list" msgstr "Luo lista" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6823,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 +6850,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 +6866,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:48 #, 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 4cdcbf8ea2a3ffdeed740317a055f435e5954b7c..46882a4dceaf89059a11ee6c1a3fce74cc85843c 100644 GIT binary patch literal 154174 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 literal 44850 zcmchg2b^4Gx&Mzy388n8c9NKoKze9~KuCo^5@I$51PQYXv9AP@_BMO5^9#V&Fcd%G&u|M&Mi?>Td3vzr9}e(rua`M&ME{e9l&Eob=N z{yX0k@z=jo6deIyen1qR`rIh`#RR!V(GO-t(XsG{@F2M7@liAyj)jNADez#p1fC8r zf-B&=;B@#qxDOn6LKGbWXTcbr4VS`7aQ_5668l%-D)?)tEG#_H-Pgkdv0o3z!du}O z_z*k@J_!$l&p?ul4miovI}?t_ei57ruYooAiNHxGM^P2~&9DoOdO;Lzf)~K^;5Xsv zaK>yeXC0EY=z2H_emd}JsQeyqN)+t^XG5woIz4a|+!cEt90hA|FL){34PF!cUmNT< z1^e5B{Whrg?uIl^^ijAc{6uj79NZoIV^H<|tzdsT@b^&R{|@(tqvu4?9`Gt@^K4Py0=25dnZ)*d!gd}EL6S!396lrJvEBw>C>i=g7KLdAPIRQp~9_5ORH!u=Oief=0J-CscE`;SoZ{vGPQeNT&`L*Y!Q@Mi~h z!JV<650#&bpz^T+D*Vf!%JDX+^zMcVe;-tReHyA>{u3(RuR?|U7F7O!0u}y`Q1$p% zsPVGrT<=eZK!v*m-T<$Jif_NudEg;X_DN9rnilMHpz=E(s=Vhy<#QcW`ZcKVmqWe( zN~mx*K!tlVRDSM&%J;oc?f4*6J$?ZyUynoi{|G8SKZA<@Z-Jxdx%;8;dAJ`7Rqu-e z&xLw_Jybp#Q27{y8V^@O#rH<2`g}K3zTXd(-Y0|mqrv@KQ1AT@WQaw7fm7iL^P}i! zSb|FL7; zeBk`xz5?!y`$bUwB7rLZOQ6d08mRPdhKm38zz+o87yLg1mEW%h`*)zyeLA>51J%wu zFY^2z4ONbFq3Z8KsD9NC)t|0_O7B{za@-hrGgSC@LDlC6g8OITF4!N1djD~#_rC+J z-2?vucgB71#oq1*K$UM6RC}EcV|WHsI(<;_ZG_6-l~DC`Bit3<0aecTL)F^@!TuGf z^nU;q&(DJWnP7kJ86MC6Q01ElmCkgi{JsFHK9@nY+qqEj^uQxw3o8CMK;{4KQ02M{ zD*QcA@!cQzIk*e<$KaXp8*o>66c+Wr@lf_t0~bP-_iU*6FMx`-3{}pJQ2pcjV802f z9`1mL!H>gH@T-AOK>0rjRe!&Sif{KNUamu+;++8He==11%b~)pgS*3isCw8472h>* zH~1zv2Hpyffe%9UkDo%-%ip2m+376L*S=8i9|q5dli=>~6>v0s9aQ;lfeLp!Tn;}5 zB`mWK{y3| zA1WVvQP~QAFjTw~gMDV;La1`Cfidic%HPZ2vG6TW<=O%j|M#Kd`3F?EQRjHQ9SN1+ z@lf@89NY`egeu?ZQ1!bE>iyMF`CA7shJA1ksComO~xM?uN+z2H7@0^Ap#2=)FM zQ0c9Jigztkx&^3m*P!~tRZ!t>f*MzEgNpZKQ1$v4R6f5R_(M1o`>&wNIp&3){}Z9o zJq_*+&w$F;8aN*IK$Y{=fp3Hg|2DWEd@oc!KMs|jhoIW=5%_%gZK(Q=R(iZgK=t>@ zQ1x;W)O)8w#k&wH|I32=N~rYDgUVka_zyspuLV^(8O$|1(s3?Yzd{+Xu>h98`SMp!&)2Q2Bll zR6fg4@mvC*3$K9v@M@_1|0eJmsPH?j^>Hv7>b=9E`qjk1nNaD>fePOZ)s7cKrF$t< zyw^g#cLO{I-U5$<4@1e#UqQXU-?<*{Ft{)FaZvSeJXF6~3?wq(`*(N{Jo-H62~hE$4V7LO)O!V} z^wvYw(@UV@zYg+WbR+*L{Li84He>YTneh@1C&jpz?n&R6RTl5%tm6;0bWtI^PdD58@Qv z4rjt$F7keUGTemyT&VH#IGhgu36;+Dg2%fUY8PyY-UgM8p!&&g;0$=q zdT;-$;PbHG2q(b1q3YprsP`vUynoDtE3x;&BjJ5;Ec|bHF#Ib#4({LY`8o|MAN}z8 z@Or3ve1Gu&37m%g;3{)5TnsOTn_v_EKCrKb&V>ED@H%+H0DT%h0GGl;F7bXarEov^W_S|Z3{QkVgyZ3%Esy^+sB)eMRbK_D z_bv|h%itvJuYil;J@6p-N2q$(bA#vOV5odefQtVFsQ1o?s+U(lmGezd^>`OlzCQ|M z_$jzQ{4P8S{syWX`)qXgW1#Xm8!G+z!G3PwMNsMV1^+>)dV5{4-vpJv_d$(|`=G)f zMkjm=JQgZHTcGm!MX37t9#p=50{4P{ff@&+20cH=!9%dmf_m?4sQOz672hRL`Mwk? zy({5?@J6V1z8$I^KNRc_L#6j+sQUdOoB)3g4}<$}a!!UCmy4nNOYl(mDyZ>y8&tYq zfU57WLgnW>Q2BfksviFYm9M>C;`urX%04S_VQ^m!_1?vB4!iq z{z*{vatb^cc0twu#ZcuN4E9$Cz7;C|yMp}zsQ4a*>QCQ)x-LgnvlsP;b}s{VVR`bi6_USA94{}H$|{4~`2pMk26uRz87 z1XTWh1C`(1u5$h2c~J444OI^%cr5IPYR|U>_q(C$<)cvL`XW?1KY?n`-$T{U9#?z( zM?(2ehl+m=RQ^{(g)as7%b@aq6I6Y?6OMtmL&f(9JQ6+umG3{p{5Q4ta&A6GP=|B2+(^3ssNjL)FKn!Tkn!H1@lp>g`KV=|2TE-#r7B z-mcg9dt;!=`2x5QE`l@QE1}}~6jVR>4pja957hh5K$Y*nYgx;|nb6t+D!z9@rF%Ej zICv1g5Ply%AI`YW>wgVY|LTPbe>qgVH^NilJ#c6EOQ`z#9aQ;uzTWF6hPz^)1XT~y z;Y4^QoD464yTDta`p<1p_3&YMB76{Pocsyy4tIN{=W9PW3j0{7{2T{g1eZY7!)?L+ zbRk_0|o?!^@%M$$Oy6{Sl~mAA!5UZ$q`;lTi8iTd?o) zYJdMIsP`7a$?#lwGJFM8Jv{*B{}s3g{4rF${RS!@d%ni&;~1#=IuWWJ*1_4Z1vQR7 z0H?sOLB*p@3iZQ1q3q+J>TMd_3%(%m45;$0hAK}_U=`}U4UnuvS3~u?eO~9~Tm=>W z#qcJDEaXpQ0YA!_$8=x{tL$NCs5@Wb%W>gD5&;70ZxFYK*iS$mChAV^>GbU zdEW(3fLox(>oZW{4!F_#&EZh(G7)P0&4a3+3!(bqs{`KvRnA-BKJfOyj|KnF!F_Rm z6pn-6gUZKFulI5u3HQW46RQ2^2K$-8z8b1r7ebAX5>&mEp~}&KJHeZv+T|^9KX^M- ze(r^8$48*@@qMWL{sx`|{{|J`@o(_=PJ^n46;R>Ng$KYgRJhBb@_8*(yWId)PoIL* z;Wwbt-}Q}Nu0x^X84t(86X6Va9@IE~6;%1(1J8mVfEq`Cg{r3sH+i^uf#<p2-W%*s!S`bS71X@{#y5F7Uxs?`+feoJ6jVR?EmS;vz1j1BFx(&eL@4)D zg8RbYz6Pq_l;OefWzhNoRK45|mH)57(eRh>Aoypf^!I)XV-Fq*RX?wVdjB18Z}>ha zIddO85IzCbF29D#&!3>uiEj3Go(vDbIwx=iRJamU{q{rE&n9>RyaTE~e-|o0d)(sb z9t01={(Pu@e;QQz&WB2`4wb)Kq3Y*9pz`-1R6O5+D(Cm1#>xLe)$iY+>fzA0y8Ae& z@*E3Q{+UqkFM!kFGN|%g4i*26!Ti<86D(~;$1@NCx{qBOd`F!+J zsCaLKhr@fJ;{Q5S{+@=ar$0c+t1)k9u7o{sCA=G||NRp#gR^e+`RgjEbUqC=E`J2i zhdaN+$Hzs1gHYr7^-$$~3sgP48)|&t1(lC`pz8NNsB!!#RKC9(_*ed>(uyR6D*GD&CJkwbvt1={^SK|0AgPehW3O{|S}f{odv2 z9R^ij|GzTXhs?}19^A*l4f4%Kgd3KjkzQ0X7=Zck?{oQr)b zR613tbgqC$!|R~lyAvwj`-A^ipz{9&TmpXzyWq_C(6`_7f(Xv{|`{@w$o;}9|?EGejJ<$X9jx$6@LY;g&U#D`&i((yF5P|;d60+ zKUBZ@5G=q40^|32|GyfJ!u|7bclZ@J6+RK%cfZ@)Z-1!wC%_Bfb%9U8)3MM04-fY; zsPeoS9s}PCH69*?d&0+|()&TMKMi-o{>Q+7z&)_<`hH*E?+*{fehJijuY{A}8{oO{ zeyDsOe2@3X7(NHP(%OF~^b;(f=2?mTi*PD@E4+heHs;^)=#S=!77$*4-{Sc>{-^OY zc+$THhF|kYzPQXJvSI z3+%yv0sIkO`@tLFXjlsGeGIeyx`X{9sDAz+&kX!N8T`+|{cpiM9rG!{OfdWVL!jD} zt{*k=r%LUwO!%H){x955$F9HWm=T}R7kMV*wn~otEe&x$fq5*C`u$P3UBg4O+IsC; z%so5@@ZK!=7asi`hW!JQ?QT5{2TZ`@EM-pg)m>n{7;?_^L&Hnis1ejdiyp0xiM{7=C=R(AY;jN1pH{tn@pVkTq&{#W5QiRU}vz2KGMAxxhQ zezP$DjpqoS$8qcDsqttGb;Co5?_|uQF!y5K8}l)kr((Vfu7Piazry{OJo7Q1!J{#G zw!-s#8}qKXrGMWK2FWM=9ZwkjjfV4h%7k6Q^CO=5xF3Yu3e4j$UjXOuq<^~v^Bf!& z@w^zj7~=UeoWL_J*nb%KJi`0~^T%N?JeK(M_i~<# zv5&&OFVC6~UVc0C9E{s%;6CtTcs>5F=lL||@4-(({jKAfK^Xl#pXUHG`9I4+oo8I| zzgXlsE0@-P`(D% zPFc*Oznghph}$oC-o~T9E}lbqj^lZGaJvfgS|0s9m$(+XG5hy0Ob-(FW}eStejxLq zf8q8i?3#OCgZXOs#^8T0oI-rh!~J`~tqS+Yek6Pk)ZcyZzk~VJQ0GDVEAgDg^N1|` zEyDc+Zj7#hV|e}-w-ezDNoOkN*JIv?=Pj7^_maR3nE$~e-E082vBCX>z}MogzjtH5 z1@3P)|K}p`++hDJ{$CH~MWlH@_S1RZ%ai^+g84$8ALDQz&v?S=k15#hnajKy|Lfoq z{JxI)j1cDcxZQ&N9q=xm*_hM6&*jY52gjp$uNlm%;UR>%HH4du-*U|BgS~+Nb8s8O zb98XKB)oe}ps+8`Nx^?D{1eZA2LFwi7xOG54*l(kc?ISRc*bGw!>x!pF<)dF<`3eo zzmEqFVE#|cFT(FO%vT0?h1nhR5x9Q`^E95dnDzHQo`>;^vF{ziPsZ&S>{nxdJJ08N zeu~@OJTJri1E{|cg_$4Y---Br&TO0;U>^FnJ1@L5I7&DFNeJ^p%)LD41;3BM2k?6> z&kJ~7iT%Lf_Xg~5!h9*bj^|vSg~a=J+`4%V$NVMSCc=r>4}=%;9FDogvkT^%;IV`` zl4n2cKZC#KIiKfc_`LwP_3(dret_GzdHxIYeB7VUvyLbI+c}s|fDaK)e-m>4w*@!3 z|C#42*k8%>U7o{(-xqLyALePiHv{wEF~19@e=&wv@I1xyYMwXqq<=5P&`0zSxvazJ-X<8%$snl1bY|ueXtMmY{czgxCCCwa|7l}q5ftPPJfs4+>QIw zJP%`@4D)}dV)-U+ALc3WPCxcNFki&88T0R<{>}`P`H5gY5bnx5hrt@|zs-gD7UrMf z_62x+aQ_MReK9`@cjCP-WBv@!SF!(wXC~$gq5j^5`APV8p3?|>K0Jdb|92Ud3VuWX z&cp46!SN_~G|!iU{oS(T|7PO9H@JNR^P70~!v0a7ZwB`ikK(tP=RBTEcs|7w^PEnA zJ42x3u#XDn)8Mf@m*aL0dk_NDD)-`Vm0DdDO7t~!7Vl8+}~=p3Ka!RlaB{$tza3}zcFlp zb)|A+pi&szUPQx$8xmo)(4P=XU!hSwrWrSqW?YEtNufk(Z!jrPX;aDK z(2@=$^4jp)&$YKTvcjRXR{W!21*6`1nw&ndPsj#EhVM6+(VGw za-*q^LAz6^+CWmB6m8W2(~?qIL98XxMo8UM>-kqmmc&Zy(zdH71C?@8QZVJkdRIpZ zbvkbr+OyYG2b+`h)9|YLb)h@WnTFH9H@!<*v|QX%ul4`mr00#N9{hh&JcfR=)vzj? zmmgSGt7!|B$~`@aS|JW?YHdXpn|<^N1+~5rBtx$4BqVyWrjtOC-AB8{VGdKHdB~+| zPg!zX9j#a^C6ae>cal_*cqB~6X!a#>(qAZ7;zFsUu5WUeabsQBdumem{!=JgFI3Ex za&^64=M6-s^{#d3Rg{%QX}rCFg}2kn=EP1j%98mB~1(Y5=;GZLP{Wz!Db%?FEq`nii-;siMqi! zxs;KKyzdN2dxZQC4c4_}`Rr((6@Z2)BaXZsf}1sExk`Vi7L#aRv6u`r1Co*%sPIa% zA*m3H*Dh3Z1vHEs^lr1fAyFt;ZVpECN<>g9#q(OtzFNJ350?4#n#{nvI4w*X#d>+b zF~*!) zuJ+XA&|ju}`q!&9IAt<1npY_o8i~qOspv^FjcI+gwy_!}6Z!PhWu?) z=CdwYN(!n!NlMz7*SGsdJ(<$^N^K*>pal{t>XKGMZ&5_J=B0WxuUbXpDkcbhsxD_C zbhTNYvY=L{N0Se%v}JX$R!!n!p{h~nrS-u{&-2=EhiJ5VDR0w5O^%uNFHVX!mTjOF z1_tUiCdg>sz(8d%?kQK$`$*NCNv?s`A}uHKjuQ|sDUs81Puap+m)eH3Oka{t6cnYj z+k0<}=26E5zLTC`D6Y4ERGhS%d6DELS1Vs?VJ0*cEUVkp!zDl?i_01=nqQ_r%`ev( z&+4(5D>Wske;Htb@oLjOQX74^Mc=ZqqJKKdZVs!YRat#vdQ6k^_xOzS4;jg)chX=jw1XSTYPy{T4msv19Li@|vO#L&99APMYW zskh8=SnAc;(Sm}s=$>-5WYD$$nq+A7uR#nmwrvai$b4e7M2yr&XDq6e*X_UDv z(j1uCOxkC*bb3*W{{ApiTJUPmwHCUG@QBs?3~Wg~LNz547MSc^fUHFXIO4pRNZpp0 zs7Y;0C5S`lF3tL>g$|KUAHmy3RWO@AkOsA^BO(wCY04!O^io`GNgfRq@#zel*YB+l zd)&`1xUB_jjxU&;(6S|Ttp%QX1f>(v>4T;oEku&2w=lZR=tIOTNo=!{+^JxjT^aRm z)8ymEAWLMWx>HH9Fwyd@&PrmF`Dpz{03n{hfSOXO7kZkh3+oPqW6@f-kve+4hIhhv z2sYFzdS7lT9l?EW8kfyiG>a`i!qNf1Oj_rraf+Ta>8<1g4If*%t_fgSIuj1DySkIp zA4hCbe^JVZn`-qzOpRipPSuqg{fL)zzLi}I@mS4A7HY+ohM?6CHiXb}R%(kb9UyPf zBGxhXPt4-7o1vGkEXKNPN5@y-pwt9k?<#K5z;%-?;4H9>3Nx{MvuOm=la^fSm8(W{-SwIBL&3}*mP})9h`3C#e^c#xcI4IpmfBMO(Fzwa z_DT{1sev$7Zw=?*>}WBq?FzZpmP4#e1=8a@jKWqBp^FO}%EcOzd2wQjGF?0~A^2P& zZRFgT82VjwE=IwQ7Ly>#aM6|R!lmW@RzGrVQ!+cAF@4#5{K<7sz07n?Eahss(H9Vp z9bt(zHVvQ#kOJbbSz>yh0=9kXC^!SHZlsvpRXr5NcCG>t4?+8KXBS)yyZ$twyJ)5l zA<%*{)0A4ZG8n9uml_MwdYp>q#kG1b{nuq>n78H zGgwmvrAA#e9;l;l7HPyYYBd&E1r{&s6Rc+zHY7^Gg+%ALm>Zp0*2=7&Ovc14NUt_6 z?#x<$66v3KRk=T5os&dMy5=vZO=btfEI06PkHuapmozm88K|rcvt*lWL8Vrdd#km2 z;@Y!Kf>Wa<<`hs0#cWsql73UamoVSfn~@_nRm-NJ)IqvL>f7b2L-6XBvgTS~>Y_m& z%=Am!T0_nS7y53Uc`9eudXu$8Dm}@vWrm)$q-x4LwNx!uT2!QO1dx+pZw%Dv>2=nB ziEOZh5+6r#slCP`TWwdD(wT!~W#+Ab8zeH3knxg*W|f|h z^=t1>q|%Vs^l5S|GqtZ#Z7Ma%I9DNT`jDTCF-fs}NXe$T(OI>=YK(B69G_KSxzW{+ zPKYCFiT-KN#b#Sx+i1=VBa~S>IeWinwfYCtg|unVU28U3XW4#5V$CO?1{0_jBLrZh z*u+-0gGTB48}Y`zaPLoo9mDY+haE&`_@P=As)Wj3vi_Ws{gW4&k-5++8o!2dQ`VH*G*K zEw4{-UY{wQOBtTj0+KShR9m!j*z>DZd)ZyfHr9fRE7`6SQO&%#o_{F%Id!DB8%;f9 z8X_n1LA$jH%WQgug{agitth;&L`$^~X_JF5iCcAc8O#w8(5f`UO1UOM!@J8wdjHA4*i9SCECk6ZCQbrt4vJ2rY4|D zR9iSwVR@Z2W{cl4t@V!5^89JyZ!ejq@?KSoPhZ(#;dns{rLcOIcX07_Z+rV&`M6Z& zYDCKzewx@ZGz)a`LbS}cl_*zOQ{bl#mg^Bx=G{@d8F?RHgb}~qsM(H7cwH)nw)K}W zQ`@>da*?8GqrJFTo?P0DmJ_A*cWPR@42{f%=0>d=OqyflBn?HUDXnU0h}9P4NDQXO zItL|Vhk7%G6|L85kXj(gmwaefC`bgYmn4y^8<>PFozVO7L+7OW!tk|Rh9$aZYO0bA zvrh00eNI^(E|17k7L=st@pyXb&bj?Mo03vpD%KXC)qo|Ypbf2J!urAH747qo5%;sO z!zA5|7l(RmA1)Ld8*I_R+jcx8T4V6-)ic$~waUsxD4E@QRV zXQs7Dvfd08Ni?<-2G}9xh{;uei(UNYwh6|>D_AA7gg}YY%GHNRXYpB?7c1rBdPyL) zrEPn5bNsMTxnML%yU?VrQK1!{4opG^WX6yfPq&xOsSPy7MCY*kV*k*p8eAH#^w5n+ zFeU@}R$S`Ye3iGG05oBRD2rA|BbW_*Ll{%o)zKhsV5@5>!N`jjCRLU&(Tcvo28*jo zi~`TOnmT&4qEaXtMyQ5pMQxx}VIzTPI=5a|Xp=(!q`H?|C~%KdTlu(dm`xilHnTY* zFGWp}Ut!uhr*@`xZDOx(b{yfT10p9|Di}=Di&xZW6>6cwN+kq48|IoptRMR1N4!BV z389cM)PyZ%pr1&khIq9dE2(~i7ba=SMTaTO*^F&I9Zo*iq`I{oZngv2X3q$Iu7syy z>FF=jA&&n$J6hS*<<+}VOBw#rB)Kw~LVH$4w&JzVERlwlMU4JYHP|{Xwe+Gf6PJq? z?=8XNDqSP^Nz}Vmurha+hG*_zt*E^uPBDL&Ft*4%bD?! zDqE@D_LFmtY^&mB>aHUmr_(|?a2V-_u@X388V+Gj&-beE{#M;^#HG1MLikilh8R>9 zB}{in4dg#9Sb7+ddCjp284YAeh&j{TgGg*uCFRldPph=lmBAx_DXcC~8B(cy>JUu? zv-S?27Kw?c)I*}m%+2<;px$A~rn`i0HO-)7cz1-TF|8^dQJHJj2V;6zzpBLsr$bsQ zbDZYPZ0jNBh!<5un;7eSR-5E!_LHPW`FKnNhuEG~G>vB$&xnbtVO5ky)WwR?{)s0P z`Ug%?)icUkxcTO(!{kcAwTuoIHCYJi(|&4c4h|>|Q{2&_Ffvq2zNr+BSKKWOU;LXm z3>2ugB<@F(EVD$@p}aPq?Ql)I2?dVPx)PSkoZ5%E(XF%P%$7yGs9vurONvc1uSUOR zzmMaTeq9=HEr(8U3`;z=m)Q6^ozhPqyie%{&&8sV?aoY0bWRt<~G714d1e z3a(r=EiD-&r>I&}&`OY$se`ZqCl4Ib)wfwHx*lLAEj`@it1myl)2tbeXc(?GPAD+z zY6Lf=#@eZ_FSDG|BrJs>>ZxVIMSFKJzPj%8llM=~g zOuR~Qc`MO7{0O1SW(03h-F9mt3%gdjMXO@F1Jo>nQU{`X%YroH`GbnK8Ea`_CW=$Y z_9NwmgI2yixkp{Tly1a@K3Zr@)TMR$Hg<#DU$aUG>JyARhemcEhPJtqUd~;o4>*JN zsdmZsZ!I|P)Sn-Y5wO+GYFDtemwebRZlLs}hIo-q05aV&h%V`mAw*A0D~zC3W)Zk+ zI*$|94(C$FK8FQYmBalh$q*muO90n9Y^^rlHE4YVu9mpDsvU1(2flmr)fC#BesnFB38oL zZO!*M#wfH_Up#bU7Y621FZcE}aob3rXDImTQL0qA@KY>Qh$c++)OJ)#MzX~e2wzkU ziLS>s8Wml^2JkRZp_waJ4Q<7tp9h`Zv}z@)!i9uYWJYDWF@q6>)r3?|{cO+sS}G2A znZt)RgDZD@;xQAWJ8F~1ohsTPz`eZ~O8N&l6|+d{rZ6C<5p%g)8XbL&lgMzxf~y54 zl6^u9g|SR30gDz#HX|FVDyrFzPVHa%MJ<+Q7pvB6^oJ4nRE_Z#I@(e?>! zv~rzrH7gI259jOFsR-i^7%F83HHpe3r9N`qINJ#fcJ>N`(hTi(maTAcr5P;_GuC~l zNymqH)Z^MM9(Q)5s`2Zg{ChB8}V;cDz822rC?E0&p# zN?HF&)qtrMVY-xdIkd5lTU6ONr}HbBjzYBGVl!xpR1g&j$~thstJ z)fS;Dld^!THr|SUs%~+pU`pN;s4N9rw`?yB$>J>fQcc3KPbU+KC5<*nN-mR-uGOTf zz>8;r5zgs7oH&!E?jL$5l}a1e+qcC!YAVy|r^XAkqd_A1?F_xDQoEQN2rC3@!b-L! zX$9pBn4KIHB2`wyr+A;C*#jXD?Ww_vA*nHD>#%M0Erid?oxN}jolAORv4D2TJ+c9d zCUqsVncdYfEB-LsJW5<|Z9CM6wNj*s&?vRXlPmc#w4d6py)XW+-RUK7b-HxN6yC>nKACLT&rvj!8G44@1yNhmX@=iAw$!(kWETIw7`F>)OUAR4mea1ihB6NwTwW7C z%{HR2yP=peeL=IXc9C8Fq*_FWtNd&t4BSe@480~C@<$pYoZ6af*wNT_@LKPVM(35G zRrkLmbLeBN3A{XmQ7Ab5gzFAHg$=d3G>Prj*AA9&$0OXaGVXYMxl;Oi8Lh~tOD|n& zu`9hnwaVN&zL6-WXQ#Gh9Xg~gd7!L#TpFT<`~V%fcWtu;pIxLo*aXim(j9AtXBTI# zDd@sOzaX(ikUOH_b=cJ7IV7xcBFCPzePCk&6wJ5Oqww`f#4#Yk#j2zfX+I|X%Pv@i zqOVT?BnWdtR7%{4JKgC0xu9NvEO4$oUR@;SD=&Z!I4GqnbSWgUYwJF5n_^-L0JBp5 zYa~Pg*W9&(@3RasX`bI^cx`dyUI^!AGi4=PY*NCfETjr&$1|tToH1qk@l&Rs5YL!7`}pIJn?7Uu z^wBzup0cW5s5aP3*5%K|g>Eju#PbVmo|YR3lUvZy==*{MeY30m^yv*0>3&qWfj|Xvu#^@ z8k?8pDjR`(QAE9+x_Z^(DJQqXDW_aAnzE?Mt`6$q?D%A^+mBvR;i_F_iY~LTJgE+t zwQ=gqQ(`xsI6Fn?zNy%6s#dpbo|sG;!CBw$*i>)dnOShV|15VjsQ$wC zJ|DBHN`7?ZJ=zRq7bE?WjQ86gkhQa+UCej`^@*m(=E9~Cf;C1Cm-|d?N1`1z_;Att z&VO9}(UmtB;zFy~s>Y=)n|sP!^)EJCsCxr>&1!pJmvQrltD{>sQ!yPMm~GkI)a4b5 zo$X%-C)N0n&&(?24W!#Z1=~<-#DpvKZn+bEe1wpy(_w;!tt9Q8bMHLZ)F0B($2!VO zjiic8Du2G$O?ZI#O7+r}~vPn#KS+y6wIaeBsC) zAv@7S66wuhd&@8%pz(c2v&>)^?&Gx7PoJl8l!m0}O*X}q0tMoP*ZLtAcA1-Wk1g+v zFQ#Xzqh(*Mad5n4Ggtq}jRbG@F$p~cfy9LmcJetB-_h^awrma;Elm;2O*TVy2X5MI z**u`D-U_L#ZKx@axmP%WVBX2*r=Zf=g(~%%Z7GepSpE$Omr*T4oBiJ<8X8?4<^L>E zQvvKdEcVs0d^xe>O}dGVBK<;GQycxnL@TRORg90L{!#dAA>S9^b`j9*?$Msm(OBR8?2Uo=>M& z5doAtkY~?;FXa-xPBVjP9o!;fmZzp{S}7K{+}W@s7MOe`q=sMs-#cOLv41z1M&U-) zRWuJ7XK_2p8JmB&wAkvF3ftnt8qS6+@(>o$@4YsC*t6#g^hAdxKV)t5oj|P6ZeN znoUCeWp?jr99uAZGdME$bZ@ckl7=KJojpf`QPUD#xnWCI$oWK?;&$I-?6hB-*Fw!N z6Qkv}MCa!!C(Xd2I+7b-tP@?BrGW*>e!>6NUWkpX0*pPvt4geq$j?QSjO z<>qjVh{9S%i($i9JCTx~^?WDV;gEbBSZi_Bsy%ty$AR4;-!!wd1}~k?xTOx-cY^Ae z5!bm8FvWU}yIO4VtDLm+v@krP^n*dXyk|KN`q(kbr6~qq*YcxtJ zwa#bO)vegcF;f`V59uuF@c(ywr(l} z*R5*`HUp#CuTgQ^wxhi)_Xu&WX0^yrR4V?~MAoVwakq)Uf zT%IMQeqV%ca2GvnF)KPE5zsv77jzx|qsB@sV77L!Zb4(DGFd$-HD`XUD#MRnwo=-c z?t9QauCEc?^djXuHCYaIgE{;>fHenSo|;TfgSqxV&Lr<`?%%$TRu`R>VmVxsv^a3~ zZlMdUBd8cj#p+@tYe*Rm-cL%2mIv#E6f5}k6Vld0zD zLXgVtWvjZJIM2EIw3>6smd$)jsc2QjMOQyE2UVeFUi&#hE+O zUKaJ>+#02=|F+k$Hhn9VXB$4WD%D8#P5tEBONVe*jkgC7m*PEFd~#vi7o7X6+~`Yu z!^K^4DncFDwui!0--R!|X{fWyNj0E!FaJD~Ft#@KS!vi1>V0VO01Z? z!GzR-kIR$d4)rzvC{%T}l9f5CYYmakY8sdlF$7`L}HgS0PlkE^D3&L>DUNgt7G?5X!LtttAmdAFm zR2Jr4sQ;dFF8NgT&W8!Zy6x1_b=uAha=S{Ai!O8=4VzTaZ-?)QX3O>I_o{^LtfHvH zFDFDgK3ENPoBwFl>ei%+>G}LZM@}+Z`PW} z-?q_wwpJ*9Ln+HzufC+p?WEN7 z9fJvr^kZAk!eIYEAv$BrW;VgK7Sbf{^A?Seo4V)GDE0hOK&keieX;8D237JlhArL& z^uYH0D07;J=E?%iP8Haowo$UJHsYnZtOA%1$qH4W?bFG8Vb<7sVO1=)5`JQWZ-R88 zcxX=xpYd8I+&n8Yo1v?W+JJV=xVjmUy@^JW&ZgxHrSLgz$hHr4y!Cd~WRE5&>3)ff z?X7fkhmU9Nd*3=^hmSRE=(6uCH-?=);njg;`h_i_{8L+R6w`dvw5)K7glqe1ESPH9 z@H@NK=#srY?p;FcU|crx(DU^Hxe^-^jn&pdmP4$cNAO+RnXs*9SWT+&a=MLYhoRUenJ`G(o003~rYB4lx_bm%fvm z^oM1t4ALqwN_qTC#a<=A}h$z~#C~w5ZY4&W3$b=sJ3b zN|{dPzH>{g4}UV<0jB@5?TFLdb|k8&_AW9OR8=O0x(+RDFP#Zf_X zGG8}qVZh+Sh4W8+6QWyJ%w%rrtuk`5rJ*EZQVl=cL<4e+D=B5W9jw;$CRgHZhj#;e zAG}y9*k(GbBK!S<}$ zhoSyKbWp4pa?0%z-u9_%mTJ58n-1kaQz9vDt+$AEAQxQ9+}*4oKAr$xebV+_iZqha6F#g~EZh3FT9X-Hf!nw8+_YGVuuipU##T;)V{$P$WJ4#oTNe3Z zknMEz-lbaEDGI^T&F`mbQ-ISoTVUigm{Ky(Vh>J}*6Ni=9(KjEfOHPTsy>V@XhVeV zNIs=qZS^^JI-N?eqV9CrZb6lPmaw>`Y?|ZHo;OXgNy3gSyfcv>ZEA-aZOdW4Yd}k2 zrJ#Ol(J)z78Cxo6t(VK1j6ZfGEW>gz!!nlFs-N6v+^n{$#qt23?&P*Yb45Y@U|wL{ zg#Go@Zkz0iE8A3JGutx6IH$Av)a5$zRL%aH`c3k>W|8$0M1xH&`edk;paYoxL8auj zWnJ%)2RGYu!K_foVRo-@_n$dY-qTD{8(K2ir6&v$uIW10)W{$uH4~fA+p?Lx+W}kn zG8WSwHT;0_J&R$-5?Qw3}?f4dnF5k%o{eV9CjsiIl$K7E@?Z@CvA=h2brN-Lq@{JQ@WX~*2;H& z-8l)7hxbO#;1YIEm|XRP3)zOwg03~TF7s;(Xb<5EOSQ~I%2!G>L8EO7eJsCs!uRlW z|5~h%}?QQa@zvF%0Mx6+}9Vl*|98N8?y8RQ~oB_`7&+Xm+7$_0t4P3m?kK@p~P^4EDL z!*Yww3~xYFf}?X<1B#80>TM~Th>~ii0NU5}_DaW6rYEV|DmTCPZ(m_(cbyNztQu_= z&3$`sj;r|0lIgvmO>We4bIY%+%wef-j#K1t(xFPtOQ|3-!-z)+eI5y+=j9?aLOC3ibnA8 z2HR>4s`)+K-e74JHa3;RMVTH4Zl*1j{>X|p6khgK8OKIx*=y07U~CehI*brnGB z3_r(essXz~)W82E?kavB02vduDLK%pYw2!!2Gd&_EL?W7pA_)XwKDxdfou`QhN?E3 zR7{r-DXDp1^<)kdv+d@$oLHcA`JB(jb$jw3^3wt;Hm|l10n)J2^iLngBeZF57jVR* zgf88WM?FesC|2t2d~{l@_Vd0WU#<`ovmZg;D#&(!e<18j`F28XrRnbB9!M5QtAbQh zGxd^PjMSc~mngX5z^S4&T*v&{?uRtFc5!H#5I$Q9q#ZKrvhAR$7y3M3SZ{Ukm7Nk2 zYhLlvILNkY7zA5y(hMUed50Ow7P2y-4=NgMwP)ifr_ZPyh#8imev^X@xFB&dgUUM6 z4*RqEafCGHe<{Moq|kT#N_qB+3p*0&w%@c)nnuHKDYn=7dGnCpQqajRH#2xLgAVyz znNGdr;<^utOr4oSi(Oy<)m58XNR`Yvri*R}CS z+cWvHRfTe9l-QOgv7ub=MQxcHrOKD-7%0$W0}a7yglJMDzrUanQQYzo=62nj(I$ue zZnUO&Hi;#FIcC*nHd(IvGKoT3b=XF$rgW-;?-^^|x^<7BwY6t@!FIBaHMy0G29>Sn z(pif|y-(#tsFkm7my`E31^(v_j0zne+HuQ@_NhZSUr=Z*XtkNja+!}3?PiflZ5E7a z0*L-}YfkG%CRDAhX)}EnVa0Pp7K$W;&K&eP$^f%i@<9f|50pNd%DuAILu6{2FcjU6!Qi}t7MT6rT-Qk&SF@IwZdUqnhEqQo*(5Wx9W-2II~W zjYw7LBt@a^n;u*4Ak0|en)-i9 z=mgIDe13z2OH*DeF7Himw9JGl#^kL_S*w@ObrD)&6Jp!DF|nV@WhYr|tdY^mB`ta+ zf_zAnYii1l2cSQ>z_M#x$gu3zL?*rwqq;S$`?_gu+X0FeXC6o~*w-b)Un|)93b*Q4 zgM}+!wh3yJ4eRFgUW#@wZC4I)X*!oqU$s-pslB((@Na9e!PrW(Yb$fhYksqYS+m6E zG;*M=?rwFbTkSOb-X4vPMxGxyR=svH+jb(;)Z4WpnQe)NjYneWVMipWu5_QshJ^oX zLzHXO6{gx~4INO^vfUt5Z}97A8WRJ4yDeIdQS$+X;rEH`f@HQ?k?yZE{Oy?9R?}fH zWl#OzluYt5pp%tiP6V%xpFU^OU*Cs<#Rmp4nCqeSMWcFD^!i93%BGfpSKA!FjwkP9k z8^NXqIvv{%s3(M_qx%9C)u%&hwBxjigel9EVCs#bU;|qJFPB~_&~7+rehKG0Cb?N( zYHNdfw!x59suNnD??(m5Jco+^X+m+H*Wn(&pI;JX`7e z?3G`sTSuHz){kkiBc1&}w#uiORw3z=#Uf=+zth1yY8wHzouHME_L?m}R(Yz{bb1?d z9;5yjI!ri{Qw@8jTyTX>;uWO@5E&q{Y&n+OfVKf+RTMhBeMqpK@IkrArdUo(I8^lG zWQ#Db!*uQ=+w#L|a!AUiL)q%Iy`7_SZDTjzo7VFEFTB0&Mkvzq3?XW5>ni@g8hYjg6m=X;c2pzwhV)drM;5Sjy8(nH{z2-T^(ukMZ9=;h(o6$_s4&rKyPsDyC zfsh?$^ic=t{Y_8Rdnli=`7JyD85O@-L{t4Mhq;}3A2wsTT&U}tIQ=*0AZ-h)Fqgx2 zt3}nuk|Atdra&TH6%wm;%L?^J)rAVNYP1O$(dMFZ zTeY}jrImP+R+_5Ie8V4v?eCFK_i<)n0lI#OAcuWR1V6I@5BY? zt$(>7`^lH~S!^~YJXU=wZkHk0t8)oszk88hC(_sZo&O)wXVY;li^HUl`#5Nr1a_=V zN6h}VBj2&+95HhCy|&RE+f5lsU_6^&i1F|pKM`Xa68=jv`accWkvV%0{Lg?SS#=f` z*}\n" "Language-Team: French\n" "Language: fr\n" @@ -42,15 +42,15 @@ msgstr "{i} utilisations" msgid "Unlimited" msgstr "Sans limite" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Mot de passe incorrect" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Le mot de passe ne correspond pas" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Mot de passe incorrect" @@ -102,8 +102,8 @@ msgstr "Ordre de la liste" msgid "Book Title" msgstr "Titre du livre" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Note" @@ -145,7 +145,7 @@ msgstr "Danger" msgid "Automatically generated report" msgstr "Rapport gĆ©nĆ©rĆ© automatiquement" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Suppression par un modĆ©rateur" msgid "Domain block" msgstr "Blocage de domaine" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Livre audio" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "eBook" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Roman graphique" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Livre reliĆ©" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Livre brochĆ©" @@ -205,26 +205,26 @@ msgstr "FĆ©dĆ©rĆ©" msgid "Blocked" msgstr "BloquĆ©" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nā€™est pas une remote_id valide." -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nā€™est pas un nom de compte valide." -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nom du compteā€Æ:" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Ce nom est dĆ©jĆ  associĆ© Ć  un compte." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Ce nom est dĆ©jĆ  associĆ© Ć  un compte." msgid "Public" msgstr "Public" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Public" msgid "Unlisted" msgstr "Non listĆ©" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Non listĆ©" msgid "Followers" msgstr "AbonnĆ©(e)s" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "AbonnĆ©(e)s" msgid "Private" msgstr "PrivĆ©" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Actif" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "TerminĆ©" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Interrompu" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Import arrĆŖtĆ©" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Erreur lors du chargement du livre" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Impossible de trouver une correspondance pour le livre" @@ -368,103 +368,103 @@ msgstr "Citations" msgid "Everything else" msgstr "Tout le reste" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Mon fil dā€™actualitĆ©" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Accueil" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Mon fil dā€™actualitĆ© littĆ©raire" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Livres" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Catalan)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (EspĆ©ranto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Basque)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galicien)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italien)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (Finnois)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituanien)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "Paysā€‘Bas (NĆ©erlandais)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (NorvĆ©gien)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Polonais)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Portugais brĆ©silien)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Portugais europĆ©en)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Roumain)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (SuĆ©dois)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€åŒ–å­—" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (chinois traditionnel)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listes" @@ -1117,7 +1113,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 +1324,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:162 msgid "Cover" msgstr "Couverture" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Pardonā€Æ! Nous ne reconnaissons pas ce code." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Code de confirmationā€Æ:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s a citĆ© un passage de You have moved your account to %(username)s" +msgstr "Vous avez migrĆ© votre compte vers %(username)s" + +#: 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 "Vous pouvez annuler votre migration pour restaurer toutes les fonctionnalitĆ©s, mais certainĀ·eĀ·s abonnĆ©Ā·eĀ·s peuvent dĆ©jĆ  ne plus suivre ce compte." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Annuler la migration" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Se dĆ©connecter" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s vous a mentionnĆ© msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s vous a mentionnĆ©(e) dans un statut" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s a dĆ©mĆ©nagĆ© vers %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s a annulĆ© sa migration" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Un nouveau signalement a besoin dā€™ĆŖtre tr msgstr[1] "%(display_count)s nouveaux signalements ont besoin dā€™ĆŖtre traitĆ©s" #: 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 "Avertissement sur le contenu" @@ -4000,9 +4029,51 @@ msgstr "Confirmez votre mot de passe pour commencer Ć  configurer lā€™authentifi msgid "Set up 2FA" msgstr "Configurer lā€™authentification Ć  deux facteurs" +#: 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 "Migrer le compte" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "CrĆ©er un alias de redirection" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "DĆ©clarer un alias de redirection" + +#: 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 "DĆ©clarer un compte comme alias de redirection est obligatoire si vous souhaitez dĆ©placer ce compte vers un nouveau." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Cette action est rĆ©versible et ne changera pas les fonctionnalitĆ©s de ce compte." + +#: 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 "Entrez le nom d'utilisateur du compte que vous souhaitez dĆ©clarer comme alias (ex. : 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 +4103,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" @@ -4154,18 +4225,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 +4673,7 @@ msgid "Streams" msgstr "Flux" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "Diffusion" #: bookwyrm/templates/settings/celery.html:38 @@ -4900,19 +4999,19 @@ msgstr "Instanceā€Æ:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Statutā€Æ:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Logicielā€Æ:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Descriptionā€Æ:" @@ -4925,7 +5024,7 @@ msgid "Details" msgstr "DĆ©tails" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "ActivitĆ©" @@ -4939,7 +5038,7 @@ msgid "View all" msgstr "Voir tous" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Signalementsā€Æ:" @@ -4956,7 +5055,7 @@ msgid "Blocked by us:" msgstr "BloquĆ©s par nousā€Æ:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Remarques" @@ -5676,17 +5775,22 @@ msgstr "DerniĆØre activitĆ©" msgid "Remote instance" msgstr "Instance distante" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "DĆ©mĆ©nagĆ©" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "SupprimĆ©" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inactif" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Non dĆ©fini" @@ -5698,55 +5802,55 @@ msgstr "Voir le profil" msgid "Go to user admin" msgstr "AccĆ©der Ć  lā€™admininstration des comptes" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "DistantĀ·e" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "DĆ©tails du compte" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Email :" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Voir les rapports)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "BloquĆ© par compte:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Date dā€™ajout :" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "DerniĆØre date d'activitĆ© :" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "AbonnĆ©(e)s approuvĆ©s manuellement :" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Visible publiquement :" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Raison de la dĆ©sactivation :" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "DĆ©tails de lā€™instance" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Voir lā€™instance" @@ -5883,7 +5987,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:87 msgid "Create shelf" msgstr "CrĆ©er une Ć©tagĆØre" @@ -5891,58 +5995,66 @@ 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:25 +msgid "You have have moved to" +msgstr "Vous avez dĆ©mĆ©nagĆ© vers" + +#: 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 "Vous pouvez annuler cette migration pour restaurer toutes les fonctionnalitĆ©s, mais certainĀ·eĀ·s abonnĆ©Ā·eĀ·s peuvent dĆ©jĆ  ne plus suivre ce compte." + +#: bookwyrm/templates/shelf/shelf.html:39 #: 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:54 #: 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:112 #, 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:119 #, 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:131 msgid "Edit shelf" msgstr "Modifier lā€™Ć©tagĆØre" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 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:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Date dā€™ajout" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "CommencĆ©" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "TerminĆ©" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Jusquā€™Ć " -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Cette Ć©tagĆØre est vide" @@ -6248,6 +6360,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6505,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" @@ -6609,10 +6725,14 @@ msgid "Groups: %(username)s" msgstr "Groupes : %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "a dĆ©mĆ©nagĆ© vers" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Demandes dā€™abonnement" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6747,12 @@ msgstr "Listesā€Æ: %(username)s" msgid "Create list" msgstr "CrĆ©er une liste" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6824,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 +6851,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 +6867,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:48 #, 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 780a8def4f48af3d9148628b71fa01888de99c51..9b2c7c2ff22a3695dde4b588ba9ed2fcccbdd6bb 100644 GIT binary patch delta 34244 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 M#r7>6uq46%0l?-~v;Y7A delta 31233 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 N{Www83V6-;`9H#ZhQ\n" "Language-Team: Galician\n" "Language: gl\n" @@ -42,15 +42,15 @@ msgstr "{i} usos" msgid "Unlimited" msgstr "Sen lĆ­mite" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Contrasinal incorrecto" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "O contrasinal non concorda" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Contrasinal incorrecto" @@ -102,8 +102,8 @@ msgstr "Orde da lista" msgid "Book Title" msgstr "TĆ­tulo do libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "ValoraciĆ³n" @@ -145,7 +145,7 @@ msgstr "Perigo" msgid "Automatically generated report" msgstr "Denuncia creada automĆ”ticamente" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Eliminado pola moderaciĆ³n" msgid "Domain block" msgstr "Bloqueo de dominio" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audiolibro" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "eBook" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Novela grĆ”fica" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Tapa dura" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Libro de bolso" @@ -205,26 +205,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s non Ć© un remote_id vĆ”lido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s non Ć© un nome de usuaria vĆ”lido" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "identificador" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Xa existe unha usuaria con ese identificador." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Xa existe unha usuaria con ese identificador." msgid "Public" msgstr "PĆŗblico" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblico" msgid "Unlisted" msgstr "Non listado" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Non listado" msgid "Followers" msgstr "Seguidoras" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Seguidoras" msgid "Private" msgstr "Privado" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Activa" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Completa" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Detida" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "ImportaciĆ³n detida" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Erro ao cargar o libro" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Non se atopan coincidencias para o libro" @@ -368,103 +368,103 @@ msgstr "Citas" msgid "Everything else" msgstr "As outras cousas" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "CronoloxĆ­a de Inicio" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Inicio" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "CronoloxĆ­a de libros" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Libros" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (InglĆ©s)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Catalan)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (AlemĆ”n)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (EspaƱol)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Ɖuscaro)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galego)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (FinĆ©s)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (FrancĆ©s)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "Paises Baixos (Dutch)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (NorueguĆ©s)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Polaco)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (PortuguĆ©s brasileiro)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆ©s europeo)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (RumanĆ©s)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (ChinĆ©s simplificado)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (ChinĆ©s tradicional)" @@ -575,7 +575,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 +680,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 @@ -768,24 +768,24 @@ msgid "View ISNI record" msgstr "Ver rexistro 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 +797,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 a entrada 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" @@ -959,19 +955,19 @@ msgstr "Confirmar" msgid "Unable to connect to remote source." msgstr "Non se pode conectar coa 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 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 "Preme para engadir portada" -#: bookwyrm/templates/book/book.html:106 +#: bookwyrm/templates/book/book.html:108 msgid "Failed to load cover" msgstr "Fallou a carga da portada" -#: bookwyrm/templates/book/book.html:117 +#: bookwyrm/templates/book/book.html:119 msgid "Click to enlarge" msgstr "Preme para agrandar" @@ -1046,13 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listas" @@ -1117,8 +1113,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 "Cargar portada desde 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 +1324,7 @@ msgid "Add Another Author" msgstr "Engade outra Autora" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:147 +#: bookwyrm/templates/shelf/shelf.html:162 msgid "Cover" msgstr "Portada" @@ -1529,22 +1525,22 @@ msgstr "%(pages)s pĆ”xinas" 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 en %(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 o %(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 "valorouno" @@ -1552,12 +1548,12 @@ msgstr "valorouno" msgid "Series by" msgstr "Unha Serie 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 non ordenado" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "LamentĆ”molo! Non puidemos atopar ese cĆ³digo." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "CĆ³digo de confirmaciĆ³n:" @@ -1681,6 +1677,7 @@ msgstr "Suxerido" #: 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 +1752,7 @@ msgstr "%(username)s citou You have moved your account to %(username)s" +msgstr "Migraches a tĆŗa conta a %(username)s" + +#: 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 "Podes desfacer a migraciĆ³ns para restablecer todas as funciĆ³ns, mais Ć© posible que algunhas seguidoras deixasen de seguir esta conta." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Desfacer migraciĆ³n" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Desconectar" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s mencionoute nunha msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s mencionoute nun estado" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s migrou a %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s retractouse da migraciĆ³n" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Nova denuncia pendente de revisiĆ³n" msgstr[1] "Novas %(display_count)s new denuncias pendentes de revisiĆ³n" #: 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 "Aviso sobre o contido" @@ -4000,9 +4029,51 @@ msgstr "Confirma o teu contrasinal para comezar a usar 2FA." msgid "Set up 2FA" msgstr "Configurar 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 "Migrar Conta" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "Crear Alcume" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "Engadir outra conta como un alcume" + +#: 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 "Ɖ preciso facer que outra conta sexa un alcume se queres migrar desde esa conta a esta." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Esta acciĆ³n Ć© reversible e non afecta Ć” funcionabilidade desta conta." + +#: 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 "Escribe o identificador da conta que queres engadir como un alcume, ex. usuaria@exemplo.com:" + +#: bookwyrm/templates/preferences/alias_user.html:30 +#: bookwyrm/templates/preferences/move_user.html:35 +msgid "Confirm your password:" +msgstr "Confirma o teu contrasinal:" + +#: bookwyrm/templates/preferences/alias_user.html:39 +#: bookwyrm/templates/preferences/layout.html:28 +msgid "Aliases" +msgstr "Alcumes" + +#: bookwyrm/templates/preferences/alias_user.html:49 +msgid "Remove alias" +msgstr "Eliminar alcume" + #: 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 "Usuarias bloqueadas" @@ -4032,7 +4103,7 @@ msgstr "Novo contrasinal:" #: 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 "Eliminar conta" @@ -4154,18 +4225,47 @@ msgstr "Descargar ficheiro" msgid "Account" msgstr "Conta" -#: bookwyrm/templates/preferences/layout.html:31 +#: bookwyrm/templates/preferences/layout.html:32 +msgid "Move Account" +msgstr "Migrar Conta" + +#: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "Datos" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "Exportar CSV" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "RelaciĆ³ns" +#: bookwyrm/templates/preferences/move_user.html:12 +msgid "Migrate account to another server" +msgstr "Migrar a conta a outro servidor" + +#: 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 "Ao mover a conta vaiselle notificar Ć”s tĆŗas seguidoras e indicarlles que te sigan na nova conta." + +#: 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" +"%(user)s quedarĆ” marcada como migrada e non aparecerĆ” na secciĆ³n Descubrir ou serĆ” utilizable a menos que desfagas a migraciĆ³n.\n" +" " + +#: 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 "Lembra engadir esta usuaria como un alcume na outra conta antes de realizar a migraciĆ³n." + +#: 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 "Escribe o identificador da conta Ć” cal queres migrar, ex. usuaria@exemplo.com:" + #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" @@ -4574,7 +4674,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4900,19 +5000,19 @@ msgstr "Instancia:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Estado:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Software:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "VersiĆ³n:" @@ -4925,7 +5025,7 @@ msgid "Details" msgstr "Detalles" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Actividade" @@ -4939,7 +5039,7 @@ msgid "View all" msgstr "Ver todo" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Denuncias:" @@ -4956,7 +5056,7 @@ msgid "Blocked by us:" msgstr "Temos bloquedas:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notas" @@ -5676,17 +5776,22 @@ msgstr "ƚltima vez activa" msgid "Remote instance" msgstr "Instancia remota" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "Migrada" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "Eliminada" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inactiva" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Non establecido" @@ -5698,55 +5803,55 @@ msgstr "Ver perfil da usuaria" msgid "Go to user admin" msgstr "Ir Ć” xestiĆ³n da usuaria" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Remota" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detalles da usuaria" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Email:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Ver denuncias)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Bloqueada pola conta:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Engadido en:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Data da Ćŗltima actividade:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Seguidoras aprobadas manualmente:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Atopable:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "RazĆ³n da desactivaciĆ³n:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detalles da instancia" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Ver instancia" @@ -5883,7 +5988,7 @@ msgid "Need help?" msgstr "Precisas axuda?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Crear estante" @@ -5891,58 +5996,66 @@ msgstr "Crear estante" msgid "Edit Shelf" msgstr "Editar estante" -#: bookwyrm/templates/shelf/shelf.html:24 +#: bookwyrm/templates/shelf/shelf.html:25 +msgid "You have have moved to" +msgstr "Migraches a" + +#: 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 "Podes desfacer esta migraciĆ³n para restablecer todas as funciĆ³ns, pero algunhas seguidoras pode que deixasen de seguirte." + +#: bookwyrm/templates/shelf/shelf.html:39 #: bookwyrm/templates/user/relationships/followers.html:18 #: bookwyrm/templates/user/relationships/following.html:18 msgid "User profile" msgstr "Perfil da usuaria" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os libros" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s libro" msgstr[1] "%(formatted_count)s libros" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostrando %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Editar estante" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Eliminar estante" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "No estante" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Comezado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Rematado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Ata" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Este estante esta baleiro." @@ -6248,6 +6361,10 @@ msgstr "Liches %(read_count)s de %(goal_count)s libros. msgid "%(username)s has read %(read_count)s of %(goal_count)s books." msgstr "%(username)s leu %(read_count)s de %(goal_count)s libros." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "Seguir na nova conta" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6506,35 @@ msgstr "Deixar de ler" msgid "Finish reading" msgstr "Rematar a lectura" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Mostrar estado" -#: bookwyrm/templates/snippets/status/content_status.html:102 +#: bookwyrm/templates/snippets/status/content_status.html:91 #, python-format msgid "(Page %(page)s" msgstr "(PĆ”xina %(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 "Abrir imaxe en nova ventĆ”" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Agochar estado" @@ -6609,10 +6726,14 @@ msgid "Groups: %(username)s" msgstr "Grupos: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "migrou a" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Solicitudes de seguimento" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6748,12 @@ msgstr "Listas: %(username)s" msgid "Create list" msgstr "Crear lista" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "Desde hai %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6825,6 @@ msgstr "SĆ³ comentarios" msgid "No activities yet!" msgstr "Sen actividade!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "Desde hai %(date)s" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6730,10 +6852,6 @@ msgstr "Sen seguidoras que ti segues" msgid "View profile and more" msgstr "Ver perfil e mĆ”is" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Desconectar" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "O ficheiro supera o tamaƱo mĆ”ximo: 10MB" @@ -6750,7 +6868,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "%(num)d libro - por %(user)s" msgstr[1] "%(num)d libros - por %(user)s" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index 958cdcbf3644fb2077f764e7eba476b5fdc5c8e5..db21106f4de9c7b6e8ad92b26d83b98882a96325 100644 GIT binary patch delta 33912 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 delta 30733 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 dn!\n" "Language-Team: Italian\n" "Language: it\n" @@ -42,15 +42,15 @@ msgstr "{i} usi" msgid "Unlimited" msgstr "Illimitato" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Password errata" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "La password non corrisponde" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Password errata" @@ -102,8 +102,8 @@ msgstr "Ordina Lista" msgid "Book Title" msgstr "Titolo del libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Valutazione" @@ -145,7 +145,7 @@ msgstr "Attenzione" msgid "Automatically generated report" msgstr "Rapporto generato automaticamente" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Cancellazione del moderatore" msgid "Domain block" msgstr "Blocco del dominio" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audiolibro" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "eBook" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Graphic novel" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Copertina rigida" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Brossura" @@ -205,26 +205,26 @@ msgstr "Federato" msgid "Blocked" msgstr "Bloccato" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s non ĆØ un Id remoto valido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s non ĆØ un nome utente valido" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome utente" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Un utente con questo nome utente esiste giĆ ." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Un utente con questo nome utente esiste giĆ ." msgid "Public" msgstr "Pubblico" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Pubblico" msgid "Unlisted" msgstr "Non in lista" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Non in lista" msgid "Followers" msgstr "Followers" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Followers" msgid "Private" msgstr "Privata" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Attivo" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Completato" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Interrotto" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Importazione interrotta" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Errore nel caricamento del libro" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Impossibile trovare una corrispondenza per il libro" @@ -368,103 +368,103 @@ msgstr "Citazioni" msgid "Everything else" msgstr "Tutto il resto" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "La tua timeline" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Home" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Timeline dei libri" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Libri" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (Inglese)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (catalano)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (Tedesco)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Spagnolo)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Basque)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galiziano)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (Finlandese)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (Francese)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (Norvegese)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Polacco)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Portoghese Brasiliano)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Portoghese europeo)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "Rumeno (Romanian)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Svedese)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Cinese Semplificato)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Cinese Tradizionale)" @@ -512,7 +512,7 @@ msgstr "%(title)s ĆØ il libro piĆ¹ amato #: bookwyrm/templates/about/about.html:64 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." -msgstr "PiĆ¹ utenti di %(site_name) vogliono leggere %(title)s rispetto a qualsiasi altro libro." +msgstr "PiĆ¹ utenti di %(site_name)s vogliono leggere %(title)s rispetto a qualsiasi altro libro." #: bookwyrm/templates/about/about.html:83 #, python-format @@ -575,7 +575,7 @@ msgid "Software version:" msgstr "Versione 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 +680,7 @@ msgstr "La loro lettura piĆ¹ breve questā€™annoā€¦" #: 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 +768,24 @@ msgid "View ISNI record" msgstr "Visualizza record ISNI" #: bookwyrm/templates/author/author.html:95 -#: bookwyrm/templates/book/book.html:173 +#: bookwyrm/templates/book/book.html:175 msgid "View on ISFDB" msgstr "Vedi su 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 "Carica dati" #: bookwyrm/templates/author/author.html:104 -#: bookwyrm/templates/book/book.html:144 +#: bookwyrm/templates/book/book.html:146 msgid "View on OpenLibrary" msgstr "Visualizza su OpenLibrary" #: bookwyrm/templates/author/author.html:119 -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:160 msgid "View on Inventaire" msgstr "Visualizza su Inventaire" @@ -797,11 +797,7 @@ msgstr "Visualizza su LibraryThing" msgid "View on Goodreads" msgstr "Visualizza su Goodreads" -#: bookwyrm/templates/author/author.html:151 -msgid "View ISFDB entry" -msgstr "Vedi voce ISFDB" - -#: bookwyrm/templates/author/author.html:166 +#: bookwyrm/templates/author/author.html:158 #, python-format msgid "Books by %(name)s" msgstr "Libri di %(name)s" @@ -959,19 +955,19 @@ msgstr "Conferma" msgid "Unable to connect to remote source." msgstr "Impossibile connettersi alla sorgente 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 "Modifica 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 "Clicca per aggiungere una copertina" -#: bookwyrm/templates/book/book.html:106 +#: bookwyrm/templates/book/book.html:108 msgid "Failed to load cover" msgstr "Impossibile caricare la copertina" -#: bookwyrm/templates/book/book.html:117 +#: bookwyrm/templates/book/book.html:119 msgid "Click to enlarge" msgstr "Clicca per ingrandire" @@ -1046,13 +1042,13 @@ msgstr "Luoghi" #: 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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Liste" @@ -1117,8 +1113,8 @@ msgstr "Carica la copertina:" #: bookwyrm/templates/book/cover_add_modal.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:250 -msgid "Load cover from url:" -msgstr "Carica la copertina dall'url:" +msgid "Load cover from URL:" +msgstr "Carica la copertina dall'URL:" #: bookwyrm/templates/book/cover_show_modal.html:6 msgid "Book cover preview" @@ -1328,7 +1324,7 @@ msgid "Add Another Author" msgstr "Aggiungi un altro autore" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:147 +#: bookwyrm/templates/shelf/shelf.html:162 msgid "Cover" msgstr "Copertina" @@ -1529,22 +1525,22 @@ msgstr "%(pages)s, pagine" msgid "%(languages)s language" msgstr "lingua %(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 "Pubblicato il %(date)s da %(publisher)s." +#: bookwyrm/templates/book/publisher_info.html:65 +#, python-format +msgid "Published by %(publisher)s." +msgstr "Pubblicato da %(publisher)s." + #: bookwyrm/templates/book/publisher_info.html:67 #, python-format msgid "Published %(date)s" msgstr "Pubblicato il %(date)s" -#: bookwyrm/templates/book/publisher_info.html:69 -#, python-format -msgid "Published by %(publisher)s." -msgstr "Pubblicato da %(publisher)s." - -#: bookwyrm/templates/book/rating.html:13 +#: bookwyrm/templates/book/rating.html:19 msgid "rated it" msgstr "Valuta" @@ -1552,12 +1548,12 @@ msgstr "Valuta" msgid "Series by" msgstr "Serie di" -#: 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 non ordinato" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Ci dispiace! Non siamo riusciti a trovare quel codice." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Codice di conferma:" @@ -1681,6 +1677,7 @@ msgstr "Suggerimenti" #: 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 +1752,7 @@ msgstr "%(username)s ha citato You have moved your account to %(username)s" +msgstr "Hai spostato il tuo account a %(username)s" + +#: 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 "ƈ possibile annullare lo spostamento per ripristinare la funzionalitĆ  completa, ma alcuni follower potrebbero aver giĆ  smesso di seguire questo account." + +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Annulla spostamento" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Esci" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s ti ha menzionato msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s ti ha menzionato in uno stato" +#: bookwyrm/templates/notifications/items/move_user.html:18 +#, python-format +msgid "%(related_user)s has moved to %(username)s" +msgstr "%(related_user)s si ĆØ spostato in %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s ha annullato lo spostamento" + #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" @@ -3782,7 +3811,7 @@ msgstr[0] "Un nuovo report necessita di moderazione" msgstr[1] "%(display_count)s nuovi report necessitano di moderazione" #: 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 "Avviso sul contenuto" @@ -4000,9 +4029,51 @@ msgstr "Conferma la tua password per iniziare a configurare 2FA." msgid "Set up 2FA" msgstr "Configura 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 "Sposta account" + +#: bookwyrm/templates/preferences/alias_user.html:7 +#: bookwyrm/templates/preferences/alias_user.html:34 +msgid "Create Alias" +msgstr "Crea alias" + +#: bookwyrm/templates/preferences/alias_user.html:12 +msgid "Add another account as an alias" +msgstr "Aggiungi un altro account come alias" + +#: 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 "Contrassegnare un altro account come alias ĆØ necessario se si desidera spostare tale account su questo." + +#: bookwyrm/templates/preferences/alias_user.html:19 +msgid "This is a reversable action and will not change the functionality of this account." +msgstr "Questa ĆØ un'azione reversibile e non cambierĆ  la funzionalitĆ  di questo account." + +#: 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 "Inserisci il nome utente per l'account che vuoi aggiungere come alias, ad esempio user@example.com :" + +#: bookwyrm/templates/preferences/alias_user.html:30 +#: bookwyrm/templates/preferences/move_user.html:35 +msgid "Confirm your password:" +msgstr "Conferma la password:" + +#: bookwyrm/templates/preferences/alias_user.html:39 +#: bookwyrm/templates/preferences/layout.html:28 +msgid "Aliases" +msgstr "Alias" + +#: bookwyrm/templates/preferences/alias_user.html:49 +msgid "Remove alias" +msgstr "Rimuovi alias" + #: 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 "Utenti bloccati" @@ -4032,7 +4103,7 @@ msgstr "Nuova password:" #: 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 "Elimina account" @@ -4154,18 +4225,47 @@ msgstr "Scarica il file" msgid "Account" msgstr "Profilo" -#: bookwyrm/templates/preferences/layout.html:31 +#: bookwyrm/templates/preferences/layout.html:32 +msgid "Move Account" +msgstr "Sposta account" + +#: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "Dati" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "Esportazione CSV" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Relazioni" +#: bookwyrm/templates/preferences/move_user.html:12 +msgid "Migrate account to another server" +msgstr "Migra l'account su un altro server" + +#: 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 "Spostare il tuo account avviserĆ  tutti i tuoi follower e li dirigerĆ  a seguire il nuovo account." + +#: 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" +" %(user)s sarĆ  contrassegnato come spostato e non sarĆ  individuabile o utilizzabile a meno che non annulli lo spostamento.\n" +" " + +#: 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 "Ricordati di aggiungere questo utente come alias dell'account di destinazione prima di provare a spostarti." + +#: 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 "Inserisci il nome utente per l'account verso cui ti spostare ad es. user@example.com:" + #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" @@ -4574,8 +4674,8 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "Broadcast" +msgid "Broadcast" +msgstr "Trasmissione" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -4900,19 +5000,19 @@ msgstr "Istanza:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Stato:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Software:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Versione:" @@ -4925,7 +5025,7 @@ msgid "Details" msgstr "Dettagli" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "AttivitĆ " @@ -4939,7 +5039,7 @@ msgid "View all" msgstr "Vedi tutti" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Reports:" @@ -4956,7 +5056,7 @@ msgid "Blocked by us:" msgstr "Bloccati da noi:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Note" @@ -5676,17 +5776,22 @@ msgstr "Attivo l'ultima volta" msgid "Remote instance" msgstr "Istanza remota" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: bookwyrm/templates/settings/users/user_admin.html:82 +#: bookwyrm/templates/settings/users/user_info.html:29 +msgid "Moved" +msgstr "Trasferito" + +#: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" msgstr "Elimina" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inattivo" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Non impostato" @@ -5698,55 +5803,55 @@ msgstr "Visualizza il profilo dell'utente" msgid "Go to user admin" msgstr "Vai ad amministratore utente" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Locale" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Remoto" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Dettagli utente" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Email:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Visualizza reports)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Bloccato per conteggio:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Data di inserimento:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Attivo l'ultima volta:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Approvare manualmente i follower:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Scopribile:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Motivo della disattivazione:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Dettagli dell'istanza" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Visualizza istanza" @@ -5883,7 +5988,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:87 msgid "Create shelf" msgstr "Crea scaffale" @@ -5891,58 +5996,66 @@ msgstr "Crea scaffale" msgid "Edit Shelf" msgstr "Modifica Scaffale" -#: bookwyrm/templates/shelf/shelf.html:24 +#: bookwyrm/templates/shelf/shelf.html:25 +msgid "You have have moved to" +msgstr "Ti sei spostato in" + +#: 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 "ƈ possibile annullare questo spostamento per ripristinare la funzionalitĆ  completa, ma alcuni follower potrebbero aver giĆ  smesso di seguire questo account." + +#: bookwyrm/templates/shelf/shelf.html:39 #: 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:54 #: 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:112 #, 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:119 #, 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:131 msgid "Edit shelf" msgstr "Modifica scaffale" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Elimina scaffale" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Scaffali" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Iniziato" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Completato" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Finito" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Questo scaffale ĆØ vuoto." @@ -6248,6 +6361,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6506,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" @@ -6609,10 +6726,14 @@ msgid "Groups: %(username)s" msgstr "Gruppi: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "si ĆØ spostato in" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Richieste di seguirti" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6748,12 @@ msgstr "Liste: %(username)s" msgid "Create list" msgstr "Crea lista" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6825,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 +6852,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 +6868,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:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 7f23c75a3a3f1802c8a3d70918a7e4d0772e02c1..692025f6cd100343dfcc44f5429bd67c521d3a15 100644 GIT binary patch delta 30168 zcmZAA1$Y%#qqgDM!9%d%nxH`fAt6|BcXx`rmg3If?i4LhoZ?p8iWEw5rxbU$LZL`G z&pT_;pZ}Zd4EJ)M**k%LXXNYHCtt;OuLVY*?r`;r;W%mVSPsXj6w7f2)KjYC{M5s7 zQsD|rj0Z6jUc#jK3DaWYp47u|EQtfLF#dwM@DtX>&|Z$y6o=t{$8nw81RjyFtheLD z#VLIpCpFH)2;7dP@d;+f@V<_d3>#qv?2dVG1{TNPu{y@>=Qz2s5eDG|%!g|*0p7vn z^zXbT5KKZqe>38oSebYSOpaSI%I7#IF$r=1fsV5cgHZXGP%H2PYh(ODj*|sjqSD8r z>ivWo@NP_xH!vOjJAV9;6w_l$%x~j0Fh23N7>T{G8?HisOgGr%XT!|I3)pxQOhLRe zrpA#N2Nz*NT#X%YH@d?JWF6u-8F4i(!Bf_rLmg)^@l+HVjeBqmmK*LkPw_M^$Gsyc zQ;OQt#w$Hgf%&2iS^F4UHF{N9*pI@?P8>U5TJE`jMY zIFT4J)3^nhyc0ExS>bLhfthEs4cHb3<27WloThV(H&N*=e{h`Ecn7s&73oBtL#vPnL<_*TgIIEcj zCd7D{5_vy4AvPX{Dp$m&m$vDZZF)ltAip_k1-?bKGZ~*;wbKCOU}veN>Pge)&!x-_qFN6P%AJARemA5;RIF^&=Ouj?cr@y z$L~=~9e17CqQt0yr9=%l3&zKARD;DaJ61rgWDnE;`dEiz0^;LQ?aW=r`iBu%L4pSI z2kM<4cfDD%qNpvXjd`&x@&GvVFc^z(Fz@u{sHb2Ss^K@NSFYbiv!cmS6U>Yna42ek zg*LMO9SIa8Aw90b2t1DQ(Ai{GAU;8%#*N2dd!_ zsCu(7Ixax9w-giL9#p^X30vSQ>hRn`J&w;%OZghrkZ+smC=Mnfo*dOcHdF@%Fc}s> z4Wu?E#@48_(ib(b;i#3EiBWp~7ZT8Ey@F~m-*(42jAc**iMPX~Cq{Lg0SjOxD!(&o zpxteJFsj3m)+wkhn2S1`D^V+X9%JhHe@s9Pzd{v^zS9_pTB=~|jJYvC&PNU40?xn$ zyVy@3Utlnd_~qSZK>mA7JIPT4%#0i>Cj#{*y^Brs{Ab&1z7mZ_Eztwi5`I94DmaILG8UsUHlP~XiCUQh zsQmM&0p7Opzft+o_nGgA$uJl3a8$WwI0U=f_#2!=JobKjIQO&un$ZFhG?4YE2Df7^ zJZcLD9WYB6f+`=0J+L$;S9wg0r!hS~#UM;@(5z4x>M-U-O{4hBu{J*4x(L6HRIna$C5Ys{&?NSAE64qw&}iOCO^QM+?oLcD3=p8@F<&J5#tiCgBoaa)Y1cb}tV`EusHEVs;1e@D< zN7M@TIL`W~B`|=595@HHcZbk>Dp05P1E$1;C(J;yqw>R1OI#W?;D)FfcSOywH_paU zs1DPgG-kv2#KTQ0=?938|` ze86~^=(K4k2-Qw@q+izwCs2=sGMEYHp;lr)CculRy}pkcsB^}QJP9Tung&%a7iwjS zq6Spn#_ORb*4(CdMh$ELde8q<0$Pei7>FxTOSv00qy4Ckj-m!|71h8?)XKywOzftvKoHIYtI|&Iyk}wKYaTjXOf5$*Pg_^-_>vL4O4;X=Q z&YO-4qn5S`_Qu+n1dpNW-$bp@Q`DhrV^B}Q z9MlRd$7Hw}brz1HW_Arz<0EU#D`u}Vp!PZfm0toikjAJLScE!rt6Ty_32Z{Gz$?_! ze#Ao<>#FJK1ghd?)S0-AI#hpSQjB@cq^Ci39A@K1F){HPsDZaeO{6z!V(vr&sxa3U zSY_k8Q4JqMt;j9wU#N=FubTk}TGOD~$%0zRyr=;dMxBMqs2MlMjMyGIYpyeafM&EA zwdcQ~W_kj3XfC2UykdQX>gXM+T&x?WqlBm>4o0nHYt%}1L2Xq()RvA!t;96+p8ur; z^rqX4s(2Aq@FrHpXBdPX zi|Tk3YN8WteD*!|e-{ZqlAsYbx^E6kd(=P%p_XFc;sR6$ zM=(8JK&`+#)C~O}n?sliHQ=JCEvkX)*KJ2Yd(|6r;tbS`4`Nz8jvByYYwRcHY-Gmd zq?boE+zi!DcN?FI8qiYAh=);I@)$M1m`}Z*mR%+R7Oo}D~wCL7Y5@{)Lt$| zmEUXQM^GK#Mb(e~%;YCSZA~!hY~)3)U=fUor7)g8O)3)5V^kmO;6@C<*w4+USyEKR z6qpawVHDOut<+@ffU~hHMt@;C?1dWWAXK^0sB%*<7k zfX%I4F(L6Gs2NSgJU9o7;|Wwp30|4KO@W$e2x=g?P+L~O#;c>Nh8hxxhb^q%q4sJJ zs={p4q1=Fp@K+nZi0a@m>dp5GHQ<21%tX?lRxU4Q#X^_^TcHLt`7hRAr+E$u@$pC0 zK-QwRV3+j>Mi9S%+S53%%?hML%{YsVhuL_38!wJ(w>)ZK^)NHGwfPfXv;JCv=_F_d z^H2?LMa}dV)JV@*ub^gp4|O=7Vj%v5nK0muIi%sJ4y&L)Hb#|ihib0}s+~cuEieML zRFiGS4AiNfhpM;>HL%}MD|Q;yzy;I9BwhzY@eZn; zL?4YQ(bb6369~e5sD|reVr+@gus7Dg{-_3yqh@>_3*$A^;Y$6<)C)$fP$X)ArBM^C zh+g~Hmw3xhtiKM!RT8vBk5MytV+(%7{>0<_YaXK!sD>w_9?u0Bj2lsVeAcGN{A_-u zlLFOY4b;juK~1QKJSOxewc&!BGk&BK=1GWUJ_74|6oFl7SnW)1l4gC z)ZXSrEp-{xo3R-NVQwC-IzEi5f6{s#)y{KNc_+5d{Qf^40j)qX)ChxZ zJOtHHIBGxzQ7@#DsD@f$a_osIa02R$w+uDVU8ohiY~ycG^%KW2?dFZ+bG^TlDMEsl ztQ~3~y-*_`j2h`=)Bxt$^kq1J_!jieh`&7}sPffOXQVM|tGb{jHWJm&1XR5l{;uh8 z2?^T6wU`~ZqYlX()QcrnTr;33tW3Nj4#t^S5K{#BoYPnn70(pU=Y0k=!JNcLqgHB* zO+SIb#NW9DbjVW1Hv`Cu8fhMD6jmf&!a5%N5Wk4IuzCWs)GpR1J`dH=-?$OuC-fdO zXCLZuy@1-HhgbpK&jiL0sF29#{fmdQScZ7rK%e(dB<7-KR6DWH`y0-Q*pPUsBxZ%? zV^`w)P%o%FNzH(&qaMF+QLo$$xCjrSwzz#VZ^EwAoq%32gHSUcjyiPXZ2C0RVVjLQ z?JIG%kEKMNk?JYTtF{@|A>JBm<4)9BNSM;R7t&%R@%*SaZ6}Pb&;RcT=uq^u4zi9y zjdU_ACI09Xr`iTToVK(X% zFUJ|!H?7b41{0<;OWX-H@~)`zgKT`fbvC9ZeVL8#N3F<7)JopLEcgsHkfcF8|9Z^Q z1(^aRP&2QDVORru;Ski>c!weQ8P#A&uxTh9bw;9Wyb|j9uZ?=T+MxRBY2&j{Pr>qF z*NkvC3F$~UgPPe()XIEDHRPY(q^ChWM%hs_D}vhVny3cbpbqH(>u6N{?@=>ehI%uu zL#@Pdmw=Y^HEIui8BE7wQ` zL(MBVdrtEP?2Y?LUxr<=eJ-EV1pma+7!~I8en;%0w)i)U!24K2&wr}iKJS;tjW8z} z>rkKTS5co(5}LM?e38_$Y*;pD*vSP#452GkkIl-JZ7jM}_XTeC+ z`(QDu{k^C|{0PdN@Wbc@eclh7v9Ja4f~d!BE~?@>>t@sv??gQvM^T6E z9JWFKDD$1ND`q7=1FPa*)Y8W<Ty8VoCJMpytffYKO@^-xRO z$HqsZ2DThkZw+cfTWtCs)CwQOM)<qn7p) zHpA$}Ob4w|pJtu0H7>I0v5TAZgsAi~sFhuX>SrxR;8tvj?jxH~wS<{zJ=Cf1fEjQ+ z)~AJaHa&J}^Tx}LmB=rOdi9P))%yW=;%=OYearZqDVV6N+0wO|CI!$ z`FOs|`<(meU(qc6t4ij}&6f#6?)BhFOVgn34hdYMPJZ)U|xhN%A95 zpZ|Wf&8bg?`YM(m^@^U1dTdvs%ALT>cn?GM{0G!AU!M!2D%3>1sXC!5j6;2jEk>2! zh*vS9u34#s^-O*m)Y-{_`r6$9_4xHbJ&u!6kKG#7ht_s{}C`1()GX z)LxBlVB(<-O}Vo;oAhSi_?-9n9`%ZT)5yn`F4C4 zyAbcv-5xURK|E~_bJ(V$$_Mu}@r|f>@m{P5p26W*w71Xucg6>BB=K@?A5-82>J1gu zmp$T;jlo02r}y(Y>sZo8{Y|-m!RGY#L46Ish>bB~h)JJ}xrjeUZEd=tKJVWR4@Z5* zJj4{3Y?#k!hi({w90X>e4$nbskFPKjHX818cxgF9Q04ZF@Ogh>`3UDhhg|T z>hXDx`p%bpy!lQSifXVZ>cgmpwK=NeuGSH#aJ52z4nZBZ2{;=U<0dTfJ!gkg{u0j+e>dF> z_~;CCrmmwNyL;%5pHTzxcW0V+bz;;^b72sc$6#!SIy7TY6_#RpT#NdYJB9jiX)?=v zF&S!|j9Rhzs4d-ydb)O@R%}1&FuQjNq$ThkHNzCM%^qe#br_CnC<>Kd6}2J_QG4CN zruRm5Fbs7l$5wnvJ&d>5bdbuL z$(jq*KmpW%N~89+73$0ku<<#l!@CiK@fha8r>GgHU*hxrK~i2+xizTo6^EDD@BbZ_ znx*fKn#p+7z@}k6T!0$LJJgJ$FEfWI8FnI`7uE10)Z@Dgv*K;kt2r>Q4P06?dbs2o(@MnmXlBo&qB>;1?s8Tjhe`Dn}5Z| zpW6J7Ha%dac{<#*1hnKiP|s-u>XlgqHPU9N$EXjggORAEo`HHXtw)`WW2gZ=K~3lr zYGAQene^1Ccqr=eE{?SCI&}%C!*8uaP%nt@Q4McG4dg7U6U{dR1MM^PQ-SZ9{1AZi7wp*m=bYN!k9 zEQ~}AWD;toYfwwP549B+Q7d}WraSA+RwhGNdzOWO%#RvKc^hwtYOo_}i(Kneo4?e? zx1h=$vGJ>@L;S+V<7_bX)1U?thT58{8+iVe(2xY}ZC_MF(`>=z=zSKTW_$&;C4XTE zIvdTG)U2p-RcyQ^YUZO+hjuDzMHiu-j`cQu??#?~&HN+@+N&EFjJB~z;aZ*EiM6X>8w{#kKs!!hyj~T z17%SiR!5buk2+MHP^Z5)Y5?O=sLqHW`Y%xm}4>iKH zs2PN!W*&uFsrsmf+oQJbJ5cx+k=B?(-~am% z(2`F<9h%jsJ=}t7=s0SrE}&N67HZ~yp)c{2I(S@eeoz%kA+wqwok$!Ww&hPFcK( z?J?^w=BMJRsPq?D1oQ9ndB1PyiRvfuex84QK}fsbEM*kxv8sT1!n0rLh-hf2?nIun(#9dj}~*aC46n}R{8 z{5;n3sB(>MygOI}>g59X6>=dfpW8_WhI&TSNAtBRm=CD;lHP{Gs zy4#>C^h7l<1cPxd>M`7nn&}nPK%b$0E{Jx-oS_P+m8*_A_4QF(*bP(Z`JZGHR$>Sl zhrJBGtJ!q_-_2hrhG1s$2cY(H5vs$(s3pCEYWM|e3*sF$1I~guh?hXEL}!~m7`?y$ z`+=0pw5Aj6;u`4!fbsPe2W90cwSQw(&!# z6~2tF-b8l@EXR+i=Y7cuGlR{jtvP`+@D2Wi<4>AHoA;C{Uli40HPkD&1!^U_U}2R< zo%SQBtvrVs(2Y|(|H^np!Xf;GYUto;^B7%3y<*>>mNd~B^OsNAu_*E8=*^f>C@1yFyMeTjUv*z$-M@_W&S)PBL<{BjEFttU!C`O`YauBsbr%|7V4^cCCYxAR> zGml?FYY6ruzbI-2wxjm`0&1Xs=S|1SPy-Bc324OmQ8O=Q3)DnC*DX=EEVVrQL?w(=!-?cTnvHTrw+>8uex@fWcT7nV9SJCJ;r!c+|)aqn7TnDd4`=lM@UKzka5l`scZ z#@?tsKZsiDGpLG}FgM=92u%E^8Aw?iO}qxS$IGaCrLUOByCQ1qYM{*=Gs5(!hC@*UC~mEVYM>2j$-hM%u7#)xtVhjo4{9PuP+NM&re8y~ z_Yl?oN7Mik-gHgFMQ<9*qL!#CYG55vFQA^N4yK?Qo{JjLPpA&pqZ;0hdd!Zaw(2En zh5T=s`e{({5F0P(6426>Mm1Q;#%tMlL)43@1*+pA)(NNq%|@N-C8#~!fWi11*2IUX znHRootcEJz0(C~*E(A&w7>rtyUr{6c%NB@n#~ij~sB*bc<$9u)elhArvjNrMG1S1W zqE_Sqs>6?{@0xM$n$MI_q`vFaBA}T!M=fQ0Yd6$D`lA}0fNF3SYH3%a4%e@!=lv>b z0I#gk?wR(IptdqC7QztBjx8~dp8tsiB1zbf8sS^i8Ax^CoaX$fjvAw0JUvkzEs{32_Yu`mx`)Q> zsHY$wYLCmHR;WH|#+^_D?}c4_Oce7I|M!vEx_pm${xzb~1hj|MP^Y&8YAGk88vYTr zMH{gW?m%^%@QGd|AgAR$EZC{`NDLV12ur6HeL<2axG9D48&lZf?04QYDNCA>32}|W4tsba|vi^ zLr?<=L+xELY>5?6BVB`9(hD~J7&WjYugv3_1@-DJj!JKX`nc_b+Nv3-tyqd0&>qxh zihG2BI=+rNEYDGU6YDSYn~scFlz4U2KqsMQIuje=DjSde+SE^jI=qpnjw@LkqCQL7 zqgG%H(y!~xA)t;|qLyqwhTucghH2ooii#u9j*Kff#riW8y{B2(KaUXy+cPq1QJ5GiDP;B^lbK0Y%tgF7 zs(~(83wvW1Jc`FpQBO_MSY`l` zsFkXXI=nyOdfbDYE!XK1+t1sJfv8Wn@u=s17HY&xQBT8m)S=pM(=Q{h2&V%FT9Lh&9j~MJ@BjS+Ob3CerB01HeCbh#Boy@&6td|RPy?-v zIy=oU9J``sz8LlOe82Sy>hS)Jnt&6}Oe_T^b%}=(&HjPN*|5 z*ygW89kPR{0Xgx_$_1bfVM^5FeF^onJjS#50X4Cc3H%&afolX*@G0ssaT5A@|2!r& zZYFvIo8yc`W@X-?>O~7Q0}Dj0P!?1>k(dX|+4TOX$8ij5Aj?rt%ho{trw_G+S4hZ- zPf@2cbz(p7MU)fu*hJ!BY=l~&tEe~ST~x<`Nz4icqdvT{q1q{f+KPIprSFQlaSUpO zcO-Gmp*Tr`p7-adLy|bDpZ7kTx=X`VRR3^*)K4%$Na{ zUl28cx~R{LCN6<60wYi(-i+GI!>FY?i#j~FQBTEF8-I`5g6PTpycbqt{Em1ePQs<73i}iP9a~`8l%`#Gg$-;%Ezxe&0M4U63vQx1dVmG+t&QjAfACRTQw+;u zTh!@aizD$k4#V21&3oh$HYA=bjUWGU6I+3K_53$Z>*xJ7`ZT;u#vL4td(-(j&#-uq zpZC{mVZnahKPdbjQ}Nt~ruXyy3x;wT{JhWiDY%pJN3jcz%4q7nMLnL4GWj_ra3bnO zbPB!S|KB4JMZ#ySj!~KYym#|B)Lw5!?fvhlhVNoAtdqsh8HCd@43mVI$FnqQCA(t+ z9EZyP0o&kF)ESG&${SSAe@y~9r9WaW+>YLoqqgF$jYrF7UO0iM$15Z1O;-=Q;~LZw zr_XNoegJ9!W3da)!M^C9!{iS~_Zt$X63{7rhI%doLe0{JqgG%BcEnYvfhEsrPIVU4 ztF#E}@U}yp?tVBGhoTL9*t9CC5I_1A3TkD)dJ*O8?Baank z@_VB?7=n7yjIqu|HMkBVaSLj|k5L1tm)mSXJJgEJLT%x*+&urq3FHd*^L|k1f;EWm zL=7ljgxUM#s174AJ(fW|UTtl>C#w8R)ML8P#@C`=?b}cXvB)O7RsIW3v; zP*el=BK^F7%l!gXpmJV6=UW_rYUnXO$JaJ~C!e49Yq+PV8E49GR%kNvcsaAM1D-%X zELgy-NMTgITZMoM3_~5ZXQ;h=j~OtapgFB!sIAe(56Di#FA?JJyj1hYvFQ9Zgio#N ze3bI!{dbilEdzP6NqdL?;6%=!bBZEaxWBgzcCj9yg02)4F2r4)_Gi2CxzxNUKbyzC`E?!%*8;71D=s|L?_b(;S{O?|>;Ukn*)i`x*Pw zPAl@3*!HVnE7InfMqDQi2^C2Q;@0)ic2FF5(m)w}jR|ae5z7BSx$cy&LE0Vi_!8}1 zyKI?*#M+bgFL@0p*OU0KsApeSVZt-H`+GkqSv3$U=xT}!xgQa3&Apm1uWhFn zl^$aS+u=`y&y#nHGDB?IZ^YYhpP+0BZoWJ@C5X4jPL$J?fmM#snbY~3LdB{S_;SS} zV+w`&q;>MsfZl|<&JzyczRLXvdAj(%;$6Jjoix8gsqkv;`~C$2L$ z3cHc!CbS(_wpOB0H!@e*hU$_Yi~AXAi*18H*qIh5K7+hp$g8Q@a7B=pm2`bqC`%i2 zZ9873{bP)6r>Oq>yKz)FMU` z?QAM(ybzsaw#;qfSsCDG;ztQ@<$lN=m(QR7uJkmj>#(iVo^U3@OE9NROJc1`*;5Qe z*B<eLE^3J@8DU)wtchqa3-=?+k0E`wP3IS+|6T2Enm$!^ z>6_8-w5zLyEmw)(KRBuAxEBrS`oR`RMYt8|g(+B^hMw8R_`2YI0l7$eOw!tM-?Moc zs8g8yB*b6ZG_@H{+1z%u=G*o=li!?szxIC`l~PhD%4V*_x>Q*6RU>>UcK)X9Ny>e> zniKwxvik10gR)HtZ{?0j-4*0DBfOS+vryM~(q5XN_f@?h<=jVKb)q~U@tsuoj*6cM zC&krN)c3&U+|}$%_)hBmCl{(yj{GpnPRGxR)zQwo2D|6G;)A)r@2c~SKp4};!5<{4pi>TmD$doUmbf_ zFaAvVU%9WI|3Nh9($Qa3D9=5ag6%1o+SGHhkXFnNwLL0eX*naY14BC3deSvhh9+i_S^Q#8GCoKgHl*aGL z>O|g4Dl{R^uX~+pxPbJ0q-`Xut2U0Jow=knC;TsWGVY&6!$^O6ZiR8JWI<&nHb+DGL5*XF11K+K1^$yJh2jD9bOr zozyhG$y9SD+B(T`KlwN8#Bvfo$bHF{yG__T|A#5if(9~^5go7D##QbY3jJj(JjJ0j z+K0OXWd?Aoud({WUjDQ-*v4mkm9Fdy#GBCGW?MG3-v9N8Y~%ihjz^HG>m`j$$BR^m zO(*GXdSc4VCQmQ2DI++|%dws5zz4c5USWXz**L(-FSPvd^gy_d8y!`_KC80@dI~P+W|@5 ze|p7_lumxicIO^I-W;3XmUMoD@BOE}ZVnO?k&qSxX>>4^6OhT@EjUX^t3=*X(i#vy ziMlFNZWboNnv^+BIGl202;XKPKj2=}RgZe*$oq1=C+{cjzNB-xPBa?%!$iE4yxyPx z{~yDMeoG@sC^w7BU8!@(7O6}6A9U83I{|sR%2Vz*VW zSsHzA2XVzDdw<5~&w1o^q3mw#LHr=?gxXG^`ExcLOx{LY?jP#rQp;Syl-a>u# zToZMw+rl>L)S=TtM6TQPgtp#I;_K{y-qT@A2HTIkw1i`jH;KHw+~bLtrTzh&Wy^c# zuRMv{N!Y~Qj?B4KI%_*o=l>9XNM0PQOvAbH2jV3ut7|=J-MF)ozL)rZn?8qdJkn1Q z&ttc41K}&w<+nRder|97`Aw?xEd@K+ioI#5CAY3n?kMuVT;JM;9Gg~rG*uXUu? zBz-S+$`P*qRhfZ$Gt?rn9f^+^St#Mh-2Z#UB5xjdBW_)NXzVx^v++Q}J*iiL`vUhB z(&Lf#JLM`7A4mIjNgGGFDQWu%Ct%<|>zg5e)8xeBzDuUA>fFsqKaAB#TS+R+^tEUg+Zhp!EnlK!0eR!a_u7EwzUZrDfo;67w}&) zB2ia6^6O&{8kkI@x{7ko=dMWk=Hw3}y_hn%7INRCY2L>PPsBRJc+U~$-6)r zm)ZZCM5<6J#1<+`qn)^i5|2rGGb+`hQVi}wgxgTQ8|nXDlubzFD0$IHpH4YlLEM>1 zi}zL8pQyW(_@AT?`ttn!=@mDBj5Z^4p3q23?p_oeOWFg}^_Fm9I$UBKtwDMb?hWLP zpnNgz-sA<4mes5A|Nf{-y|1rtH2?2x!;ypw*l;sC$xS15xT_O>Z);5^9-R(!z2a_6 z-mlcTP1+N}UoJn&Eh3VXv@PThA)bpnl6#GAFjLW8z<~x5WRY%mE=j3WMk@CokR#Jl1e>`uC_ z)duf>t{@|Ad`FuH>3j!e7UBYzKXfG|b0VIz9bL5P*=Z;X_iWNjahIoodfWwUxg)rb zdPUR-R|xT*)QycXi66y(>8vnq{Ee@zDrhzBK zw~%*;yMxU*j{&ycm$F?bH=Z&hxkIR@D=CBCZQF}M`6i^*|N1vWt861r$aq7+>bCID z#DAutu{5-SdjjbLDcgs%u3vTRPk1?LXK*-oH{0mn`%D0j%)A5dZ)H delta 30256 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\n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -42,15 +42,15 @@ msgstr "{i} naudoja" msgid "Unlimited" msgstr "Neribota" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Neteisingas slaptažodis" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Slaptažodis nesutampa" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Neteisingas slaptažodis" @@ -102,8 +102,8 @@ msgstr "Kaip pridėta ÄÆ sąraŔą" msgid "Book Title" msgstr "Knygos antraÅ”tė" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Ä®vertinimas" @@ -145,7 +145,7 @@ msgstr "Pavojus" msgid "Automatically generated report" msgstr "AutomatiÅ”kai sugeneruota ataskaita" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Moderatorius iÅ”trynė" msgid "Domain block" msgstr "Blokuoti pagal domeną" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audioknyga" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "Elektroninė knyga" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Grafinė novelė" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Knyga kietais virÅ”eliais" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Knyga minkÅ”tais virÅ”eliais" @@ -205,26 +205,26 @@ msgstr "Susijungę" msgid "Blocked" msgstr "Užblokuoti" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s yra negaliojantis remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s yra negaliojantis naudotojo vardas" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "naudotojo vardas" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Toks naudotojo vardas jau egzistuoja." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Toks naudotojo vardas jau egzistuoja." msgid "Public" msgstr "VieÅ”as" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "VieÅ”as" msgid "Unlisted" msgstr "Slaptas" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Slaptas" msgid "Followers" msgstr "Sekėjai" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Sekėjai" msgid "Private" msgstr "Privatu" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktyvus" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Užbaigti" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Sustabdyta" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Importavimas sustojo" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Klaida ÄÆkeliant knygą" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Nepavyko rasti tokios knygos" @@ -368,103 +368,103 @@ msgstr "Citatos" msgid "Everything else" msgstr "Visa kita" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Pagrindinė siena" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Pagrindinis" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Knygų siena" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Knygos" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (Anglų)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (kataloniečių)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (Vokiečių)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Ispanų)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Baskų kalba)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (galisų)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italų (Italian)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (suomių)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (PrancÅ«zų)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norvegų (Norwegian)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (lenkų)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs brasileiro (Brazilijos portugalų)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Europos portugalų)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (rumunų)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Å vedų)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Supaprastinta kinų)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Tradicinė kinų)" @@ -575,7 +575,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 +684,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 +776,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 +805,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" @@ -967,19 +963,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 +1054,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "SąraÅ”ai" @@ -1129,8 +1125,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 +1336,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:162 msgid "Cover" msgstr "VirÅ”elis" @@ -1541,22 +1537,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 +1560,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" @@ -1599,7 +1595,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Deja, Å”io kodo neradome." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Patvirtinimo kodas:" @@ -1693,6 +1689,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 +1768,7 @@ msgstr "%(username)s citavo 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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\"" @@ -3776,6 +3795,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 +3845,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 +4063,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 +4137,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ą" @@ -4188,18 +4259,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 +4710,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" @@ -4946,19 +5044,19 @@ msgstr "Serveris:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "BÅ«sena:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Programinė ÄÆranga:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Versija:" @@ -4971,7 +5069,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:84 msgid "Activity" msgstr "Veikla" @@ -4985,7 +5083,7 @@ msgid "View all" msgstr "ŽiÅ«rėti viską" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "PraneÅ”imai:" @@ -5002,7 +5100,7 @@ msgid "Blocked by us:" msgstr "Blokuojame:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "UžraÅ”ai" @@ -5722,17 +5820,22 @@ msgstr "PaskutinÄÆ kartą aktyvus" msgid "Remote instance" msgstr "Nutolęs serveris" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "IÅ”trinta" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Neaktyvus" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Nenustatytas" @@ -5744,55 +5847,55 @@ msgstr "PeržiÅ«rėti nario paskyrą" msgid "Go to user admin" msgstr "Eiti ÄÆ administratoriaus naudotoją" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Vietinis" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Nutolęs" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Vartotojo duomenys" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "El. paÅ”tas:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(PeržiÅ«rėti ataskaitas)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Užblokavę:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Pridėjimo data:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "PaskutinÄÆ kartą aktyvus:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Patvirtinti sekėjai:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Aptinkama:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "IÅ”jungimo priežastis:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Serverio informacija" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "PeržiÅ«rėti serverÄÆ" @@ -5929,7 +6032,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:87 msgid "Create shelf" msgstr "Sukurti lentyną" @@ -5937,18 +6040,26 @@ msgstr "Sukurti lentyną" msgid "Edit Shelf" msgstr "Redaguoti lentyną" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "Nario paskyra" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -5957,40 +6068,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:119 #, 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:131 msgid "Edit shelf" msgstr "Redaguoti lentyną" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "IÅ”trinti lentyną" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Sudėta ÄÆ lentynas" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Pradėta" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Baigta" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Iki" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Å i lentyna tuŔčia." @@ -6308,6 +6419,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6449,35 +6564,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ą" @@ -6669,10 +6784,14 @@ msgid "Groups: %(username)s" msgstr "Grupės: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Sekti praÅ”ymus" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6687,6 +6806,12 @@ msgstr "SąraÅ”ai: %(username)s" msgid "Create list" msgstr "Sukurti sąraŔą" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6758,11 +6883,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 +6914,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 +6932,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:48 #, 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 088c596b16365b8c664e97097cf74bd173ca5f54..94ff7e1de4989a8f547f0e1df339dc48990bdc8c 100644 GIT binary patch delta 34499 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
    Ow|`7Rsqz6uQvNSeY*G6F
    
    delta 31291
    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
    KDeO%a;r{`kj>OUc
    
    diff --git a/locale/nl_NL/LC_MESSAGES/django.po b/locale/nl_NL/LC_MESSAGES/django.po
    index 0cb6c8ee5..c87aca2d2 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-11-02 21:32+0000\n"
    +"PO-Revision-Date: 2023-11-17 10:39\n"
     "Last-Translator: Mouse Reeve \n"
     "Language-Team: Dutch\n"
     "Language: nl\n"
    @@ -42,15 +42,15 @@ msgstr "{i} keer gebruikt"
     msgid "Unlimited"
     msgstr "Onbeperkt"
     
    -#: bookwyrm/forms/edit_user.py:88
    +#: bookwyrm/forms/edit_user.py:104
     msgid "Incorrect password"
     msgstr "Onjuist wachtwoord"
     
    -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90
    +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90
     msgid "Password does not match"
     msgstr "Wachtwoord komt niet overeen"
     
    -#: bookwyrm/forms/edit_user.py:118
    +#: bookwyrm/forms/edit_user.py:134
     msgid "Incorrect Password"
     msgstr "Onjuist wachtwoord"
     
    @@ -102,8 +102,8 @@ msgstr "Lijst volgorde"
     msgid "Book Title"
     msgstr "Boektitel"
     
    -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
    -#: bookwyrm/templates/shelf/shelf.html:188
    +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171
    +#: bookwyrm/templates/shelf/shelf.html:203
     #: bookwyrm/templates/snippets/create_status/review.html:32
     msgid "Rating"
     msgstr "Beoordeling"
    @@ -145,7 +145,7 @@ msgstr "Gevaar"
     msgid "Automatically generated report"
     msgstr "Automatisch gegenereerd rapport"
     
    -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47
    +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48
     #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214
     #: bookwyrm/templates/settings/link_domains/link_domains.html:19
     msgid "Pending"
    @@ -171,23 +171,23 @@ msgstr "Verwijdering moderator"
     msgid "Domain block"
     msgstr "Domeinblokkade"
     
    -#: bookwyrm/models/book.py:283
    +#: bookwyrm/models/book.py:282
     msgid "Audiobook"
     msgstr "Luisterboek"
     
    -#: bookwyrm/models/book.py:284
    +#: bookwyrm/models/book.py:283
     msgid "eBook"
     msgstr "eBook"
     
    -#: bookwyrm/models/book.py:285
    +#: bookwyrm/models/book.py:284
     msgid "Graphic novel"
     msgstr "Striproman"
     
    -#: bookwyrm/models/book.py:286
    +#: bookwyrm/models/book.py:285
     msgid "Hardcover"
     msgstr "Harde kaft"
     
    -#: bookwyrm/models/book.py:287
    +#: bookwyrm/models/book.py:286
     msgid "Paperback"
     msgstr "Zachte kaft"
     
    @@ -205,26 +205,26 @@ msgstr "Gefedereerd"
     msgid "Blocked"
     msgstr "Geblokkeerd"
     
    -#: bookwyrm/models/fields.py:29
    +#: bookwyrm/models/fields.py:30
     #, python-format
     msgid "%(value)s is not a valid remote_id"
     msgstr "%(value)s is geen geldige remote_id"
     
    -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
    +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48
     #, python-format
     msgid "%(value)s is not a valid username"
     msgstr "%(value)s is geen geldige gebruikersnaam"
     
    -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128
    +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129
     #: bookwyrm/templates/ostatus/error.html:29
     msgid "username"
     msgstr "gebruikersnaam"
     
    -#: bookwyrm/models/fields.py:197
    +#: bookwyrm/models/fields.py:198
     msgid "A user with that username already exists."
     msgstr "Er bestaat al een gebruiker met deze gebruikersnaam."
     
    -#: bookwyrm/models/fields.py:216
    +#: bookwyrm/models/fields.py:217
     #: bookwyrm/templates/snippets/privacy-icons.html:3
     #: bookwyrm/templates/snippets/privacy-icons.html:4
     #: bookwyrm/templates/snippets/privacy_select.html:11
    @@ -232,7 +232,7 @@ msgstr "Er bestaat al een gebruiker met deze gebruikersnaam."
     msgid "Public"
     msgstr "Openbaar"
     
    -#: bookwyrm/models/fields.py:217
    +#: bookwyrm/models/fields.py:218
     #: bookwyrm/templates/snippets/privacy-icons.html:7
     #: bookwyrm/templates/snippets/privacy-icons.html:8
     #: bookwyrm/templates/snippets/privacy_select.html:14
    @@ -240,7 +240,7 @@ msgstr "Openbaar"
     msgid "Unlisted"
     msgstr "Niet vermeld"
     
    -#: bookwyrm/models/fields.py:218
    +#: bookwyrm/models/fields.py:219
     #: bookwyrm/templates/snippets/privacy_select.html:17
     #: bookwyrm/templates/user/relationships/followers.html:6
     #: bookwyrm/templates/user/relationships/followers.html:11
    @@ -249,7 +249,7 @@ msgstr "Niet vermeld"
     msgid "Followers"
     msgstr "Volgers"
     
    -#: bookwyrm/models/fields.py:219
    +#: bookwyrm/models/fields.py:220
     #: bookwyrm/templates/snippets/create_status/post_options_block.html:6
     #: bookwyrm/templates/snippets/privacy-icons.html:15
     #: bookwyrm/templates/snippets/privacy-icons.html:16
    @@ -258,30 +258,30 @@ msgstr "Volgers"
     msgid "Private"
     msgstr "PrivƩ"
     
    -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174
    +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174
     #: bookwyrm/templates/settings/imports/imports.html:98
    -#: bookwyrm/templates/settings/users/user_admin.html:81
    -#: bookwyrm/templates/settings/users/user_info.html:28
    +#: bookwyrm/templates/settings/users/user_admin.html:87
    +#: bookwyrm/templates/settings/users/user_info.html:33
     msgid "Active"
     msgstr "Actief"
     
    -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172
    +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172
     msgid "Complete"
     msgstr "Voltooid"
     
    -#: bookwyrm/models/import_job.py:50
    +#: bookwyrm/models/import_job.py:51
     msgid "Stopped"
     msgstr "Gestopt"
     
    -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91
    +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92
     msgid "Import stopped"
     msgstr "Import gestopt"
     
    -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388
    +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381
     msgid "Error loading book"
     msgstr "Fout bij laden boek"
     
    -#: bookwyrm/models/import_job.py:372
    +#: bookwyrm/models/import_job.py:365
     msgid "Could not find a match for book"
     msgstr "Kan geen match vinden voor het boek"
     
    @@ -368,103 +368,103 @@ msgstr "Quotes"
     msgid "Everything else"
     msgstr "Overig"
     
    -#: bookwyrm/settings.py:223
    +#: bookwyrm/settings.py:230
     msgid "Home Timeline"
     msgstr "Tijdlijnen"
     
    -#: bookwyrm/settings.py:223
    +#: bookwyrm/settings.py:230
     msgid "Home"
     msgstr "Start"
     
    -#: bookwyrm/settings.py:224
    +#: bookwyrm/settings.py:231
     msgid "Books Timeline"
     msgstr "Boeken tijdlijn"
     
    -#: bookwyrm/settings.py:224
    +#: bookwyrm/settings.py:231
     #: bookwyrm/templates/guided_tour/user_profile.html:101
     #: bookwyrm/templates/search/layout.html:22
     #: bookwyrm/templates/search/layout.html:43
    -#: bookwyrm/templates/user/layout.html:97
    +#: bookwyrm/templates/user/layout.html:112
     msgid "Books"
     msgstr "Boeken"
     
    -#: bookwyrm/settings.py:296
    +#: bookwyrm/settings.py:303
     msgid "English"
     msgstr "Engels (English)"
     
    -#: bookwyrm/settings.py:297
    +#: bookwyrm/settings.py:304
     msgid "CatalĆ  (Catalan)"
     msgstr "CatalĆ  (Catalaans)"
     
    -#: bookwyrm/settings.py:298
    +#: bookwyrm/settings.py:305
     msgid "Deutsch (German)"
     msgstr "Duits (Deutsch)"
     
    -#: bookwyrm/settings.py:299
    +#: bookwyrm/settings.py:306
     msgid "Esperanto (Esperanto)"
     msgstr "Esperanto (Esperanto)"
     
    -#: bookwyrm/settings.py:300
    +#: bookwyrm/settings.py:307
     msgid "EspaƱol (Spanish)"
     msgstr "Spaans (EspaƱol)"
     
    -#: bookwyrm/settings.py:301
    +#: bookwyrm/settings.py:308
     msgid "Euskara (Basque)"
     msgstr "Euskara (Baskisch)"
     
    -#: bookwyrm/settings.py:302
    +#: bookwyrm/settings.py:309
     msgid "Galego (Galician)"
     msgstr "Galego (Galicisch)"
     
    -#: bookwyrm/settings.py:303
    +#: bookwyrm/settings.py:310
     msgid "Italiano (Italian)"
     msgstr "Italiano (Italiaans)"
     
    -#: bookwyrm/settings.py:304
    +#: bookwyrm/settings.py:311
     msgid "Suomi (Finnish)"
     msgstr "Suomi (Fins)"
     
    -#: bookwyrm/settings.py:305
    +#: bookwyrm/settings.py:312
     msgid "FranƧais (French)"
     msgstr "Frans (FranƧais)"
     
    -#: bookwyrm/settings.py:306
    +#: bookwyrm/settings.py:313
     msgid "Lietuvių (Lithuanian)"
     msgstr "Lietuvių (Litouws)"
     
    -#: bookwyrm/settings.py:307
    +#: bookwyrm/settings.py:314
     msgid "Nederlands (Dutch)"
     msgstr "Nederlands"
     
    -#: bookwyrm/settings.py:308
    +#: bookwyrm/settings.py:315
     msgid "Norsk (Norwegian)"
     msgstr "Norsk (Noors)"
     
    -#: bookwyrm/settings.py:309
    +#: bookwyrm/settings.py:316
     msgid "Polski (Polish)"
     msgstr "Polski (Pools)"
     
    -#: bookwyrm/settings.py:310
    +#: bookwyrm/settings.py:317
     msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)"
     msgstr "PortuguĆŖs do Brasil (Braziliaans-Portugees)"
     
    -#: bookwyrm/settings.py:311
    +#: bookwyrm/settings.py:318
     msgid "PortuguĆŖs Europeu (European Portuguese)"
     msgstr "PortuguĆŖs Europeu (Europeaans Portugees)"
     
    -#: bookwyrm/settings.py:312
    +#: bookwyrm/settings.py:319
     msgid "RomĆ¢nă (Romanian)"
     msgstr "RomĆ¢nă (Roemeens)"
     
    -#: bookwyrm/settings.py:313
    +#: bookwyrm/settings.py:320
     msgid "Svenska (Swedish)"
     msgstr "Svenska (Zweeds)"
     
    -#: bookwyrm/settings.py:314
    +#: bookwyrm/settings.py:321
     msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)"
     msgstr "ē®€ä½“äø­ę–‡ (Vereenvoudigd Chinees)"
     
    -#: bookwyrm/settings.py:315
    +#: bookwyrm/settings.py:322
     msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)"
     msgstr "ē®€ä½“äø­ę–‡ (Traditioneel Chinees)"
     
    @@ -575,7 +575,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 +680,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 +768,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 +797,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"
    @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6
     msgid "Lists"
     msgstr "Lijsten"
     
    @@ -1117,8 +1113,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 +1324,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:162
     msgid "Cover"
     msgstr "Omslag"
     
    @@ -1529,22 +1525,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 +1548,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"
     
    @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code."
     msgstr "Sorry! We konden die code niet vinden."
     
     #: bookwyrm/templates/confirm_email/confirm_email.html:19
    -#: bookwyrm/templates/settings/users/user_info.html:92
    +#: bookwyrm/templates/settings/users/user_info.html:98
     msgid "Confirmation code:"
     msgstr "Bevestigingscode:"
     
    @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s heeft You have moved your account to %(username)s"
    +msgstr "Je hebt je account verhuisd naar %(username)s"
    +
    +#: 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 "Je kan de verhuizing ongedaan maken om de volledige functionaliteit te herstellen, maar sommige volgers volgen dit account mogelijk al niet meer."
    +
    +#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32
    +msgid "Undo move"
    +msgstr "Verhuizing ongedaan maken"
    +
    +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82
    +msgid "Log out"
    +msgstr "Uitloggen"
    +
     #: bookwyrm/templates/notifications/items/accept.html:18
     #, python-format
     msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
    @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s heeft je genoemd
     msgid "%(related_user)s mentioned you in a status"
     msgstr "%(related_user)s heeft je genoemd in een status"
     
    +#: bookwyrm/templates/notifications/items/move_user.html:18
    +#, python-format
    +msgid "%(related_user)s has moved to %(username)s"
    +msgstr "%(related_user)s is verhuisd naar %(username)s"
    +
    +#: bookwyrm/templates/notifications/items/move_user.html:25
    +#, python-format
    +msgid "%(related_user)s has undone their move"
    +msgstr "%(related_user)s heeft hun verhuizing ongedaan gemaakt"
    +
     #: bookwyrm/templates/notifications/items/remove.html:17
     #, python-format
     msgid "has been removed from your group \"%(group_name)s\""
    @@ -3782,7 +3811,7 @@ msgstr[0] "Een nieuwe melding moet gemodereerd worden"
     msgstr[1] "%(display_count)s nieuwe meldingen moeten worden gemodereerd"
     
     #: 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 "Inhoudswaarschuwing"
     
    @@ -4000,9 +4029,51 @@ msgstr "Bevestig uw wachtwoord om te beginnen met het instellen van de tweestaps
     msgid "Set up 2FA"
     msgstr "Tweestapsverificatie instellen"
     
    +#: 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 "Verhuis account"
    +
    +#: bookwyrm/templates/preferences/alias_user.html:7
    +#: bookwyrm/templates/preferences/alias_user.html:34
    +msgid "Create Alias"
    +msgstr "Alias aanmaken"
    +
    +#: bookwyrm/templates/preferences/alias_user.html:12
    +msgid "Add another account as an alias"
    +msgstr "Een andere account als alias toevoegen"
    +
    +#: 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 "Een andere account als alias markering is vereist als je die account naar deze wilt verhuizen."
    +
    +#: bookwyrm/templates/preferences/alias_user.html:19
    +msgid "This is a reversable action and will not change the functionality of this account."
    +msgstr "Deze actie kan ongedaan worden gemaakt en zal de functionaliteit van deze account niet wijzigen."
    +
    +#: 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 "Voer de gebruikersnaam in voor het account dat je wilt toevoegen als een alias, bijvoorbeeld user@example.com :"
    +
    +#: bookwyrm/templates/preferences/alias_user.html:30
    +#: bookwyrm/templates/preferences/move_user.html:35
    +msgid "Confirm your password:"
    +msgstr "Bevestig wachtwoord:"
    +
    +#: bookwyrm/templates/preferences/alias_user.html:39
    +#: bookwyrm/templates/preferences/layout.html:28
    +msgid "Aliases"
    +msgstr "Aliassen"
    +
    +#: bookwyrm/templates/preferences/alias_user.html:49
    +msgid "Remove alias"
    +msgstr "Alias verwijderen"
    +
     #: 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 "Geblokkeerde gebruikers"
     
    @@ -4032,7 +4103,7 @@ msgstr "Nieuw wachtwoord:"
     #: 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 "Account Verwijderen"
    @@ -4154,18 +4225,47 @@ msgstr "Download bestand"
     msgid "Account"
     msgstr "Account"
     
    -#: bookwyrm/templates/preferences/layout.html:31
    +#: bookwyrm/templates/preferences/layout.html:32
    +msgid "Move  Account"
    +msgstr "Verhuis account"
    +
    +#: bookwyrm/templates/preferences/layout.html:39
     msgid "Data"
     msgstr "Gegevens"
     
    -#: bookwyrm/templates/preferences/layout.html:39
    +#: bookwyrm/templates/preferences/layout.html:47
     msgid "CSV export"
     msgstr "CSV export"
     
    -#: bookwyrm/templates/preferences/layout.html:42
    +#: bookwyrm/templates/preferences/layout.html:50
     msgid "Relationships"
     msgstr "Relaties"
     
    +#: bookwyrm/templates/preferences/move_user.html:12
    +msgid "Migrate account to another server"
    +msgstr "Account overzetten naar een andere server"
    +
    +#: 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 "Het verplaatsen van je account zal al je volgers op de hoogte stellen en doorsturen om het nieuwe account te volgen."
    +
    +#: 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"
    +"                %(user)s wordt gemarkeerd als verhuisd en zal niet vindbaar of bruikbaar zijn tenzij je de verhuizing ongedaan maakt.\n"
    +"                "
    +
    +#: 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 "Vergeet niet om deze gebruiker toe te voegen als een alias van het doelaccount voordat je probeert te verhuizen."
    +
    +#: 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 "Voer de gebruikersnaam in voor het account waar je naartoe wilt verhuizen, bijvoorbeeld user@example.com :"
    +
     #: bookwyrm/templates/reading_progress/finish.html:5
     #, python-format
     msgid "Finish \"%(book_title)s\""
    @@ -4574,8 +4674,8 @@ msgid "Streams"
     msgstr "Streams"
     
     #: bookwyrm/templates/settings/celery.html:32
    -msgid "Broadcasts"
    -msgstr "Broadcasts"
    +msgid "Broadcast"
    +msgstr "Uitzending"
     
     #: bookwyrm/templates/settings/celery.html:38
     msgid "Inbox"
    @@ -4900,19 +5000,19 @@ msgstr "Instance:"
     
     #: bookwyrm/templates/settings/federation/edit_instance.html:52
     #: bookwyrm/templates/settings/federation/instance.html:46
    -#: bookwyrm/templates/settings/users/user_info.html:113
    +#: bookwyrm/templates/settings/users/user_info.html:119
     msgid "Status:"
     msgstr "Status:"
     
     #: bookwyrm/templates/settings/federation/edit_instance.html:66
     #: bookwyrm/templates/settings/federation/instance.html:40
    -#: bookwyrm/templates/settings/users/user_info.html:107
    +#: bookwyrm/templates/settings/users/user_info.html:113
     msgid "Software:"
     msgstr "Software:"
     
     #: bookwyrm/templates/settings/federation/edit_instance.html:76
     #: bookwyrm/templates/settings/federation/instance.html:43
    -#: bookwyrm/templates/settings/users/user_info.html:110
    +#: bookwyrm/templates/settings/users/user_info.html:116
     msgid "Version:"
     msgstr "Versie:"
     
    @@ -4925,7 +5025,7 @@ msgid "Details"
     msgstr "Details"
     
     #: bookwyrm/templates/settings/federation/instance.html:53
    -#: bookwyrm/templates/user/layout.html:69
    +#: bookwyrm/templates/user/layout.html:84
     msgid "Activity"
     msgstr "Activiteit"
     
    @@ -4939,7 +5039,7 @@ msgid "View all"
     msgstr "Alles bekijken"
     
     #: bookwyrm/templates/settings/federation/instance.html:62
    -#: bookwyrm/templates/settings/users/user_info.html:60
    +#: bookwyrm/templates/settings/users/user_info.html:66
     msgid "Reports:"
     msgstr "Meldingen:"
     
    @@ -4956,7 +5056,7 @@ msgid "Blocked by us:"
     msgstr "Door ons geblokkeerd:"
     
     #: bookwyrm/templates/settings/federation/instance.html:90
    -#: bookwyrm/templates/settings/users/user_info.html:117
    +#: bookwyrm/templates/settings/users/user_info.html:123
     msgid "Notes"
     msgstr "Notities"
     
    @@ -5676,17 +5776,22 @@ msgstr "Laatst actief"
     msgid "Remote instance"
     msgstr "Externe instance"
     
    -#: bookwyrm/templates/settings/users/user_admin.html:86
    +#: bookwyrm/templates/settings/users/user_admin.html:82
    +#: bookwyrm/templates/settings/users/user_info.html:29
    +msgid "Moved"
    +msgstr "Verhuisd"
    +
    +#: bookwyrm/templates/settings/users/user_admin.html:93
     msgid "Deleted"
     msgstr "Verwijderd"
     
    -#: bookwyrm/templates/settings/users/user_admin.html:92
    -#: bookwyrm/templates/settings/users/user_info.html:32
    +#: bookwyrm/templates/settings/users/user_admin.html:99
    +#: bookwyrm/templates/settings/users/user_info.html:38
     msgid "Inactive"
     msgstr "Inactief"
     
    -#: bookwyrm/templates/settings/users/user_admin.html:101
    -#: bookwyrm/templates/settings/users/user_info.html:127
    +#: bookwyrm/templates/settings/users/user_admin.html:108
    +#: bookwyrm/templates/settings/users/user_info.html:133
     msgid "Not set"
     msgstr "Niet ingesteld"
     
    @@ -5698,55 +5803,55 @@ msgstr "Gebruikersprofiel bekijken"
     msgid "Go to user admin"
     msgstr "Ga naar gebruikersbeheer"
     
    -#: bookwyrm/templates/settings/users/user_info.html:40
    +#: bookwyrm/templates/settings/users/user_info.html:46
     msgid "Local"
     msgstr "Lokaal"
     
    -#: bookwyrm/templates/settings/users/user_info.html:42
    +#: bookwyrm/templates/settings/users/user_info.html:48
     msgid "Remote"
     msgstr "Extern"
     
    -#: bookwyrm/templates/settings/users/user_info.html:51
    +#: bookwyrm/templates/settings/users/user_info.html:57
     msgid "User details"
     msgstr "Gebruikersdetails"
     
    -#: bookwyrm/templates/settings/users/user_info.html:55
    +#: bookwyrm/templates/settings/users/user_info.html:61
     msgid "Email:"
     msgstr "E-mail:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:65
    +#: bookwyrm/templates/settings/users/user_info.html:71
     msgid "(View reports)"
     msgstr "(Bekijk meldingen)"
     
    -#: bookwyrm/templates/settings/users/user_info.html:71
    +#: bookwyrm/templates/settings/users/user_info.html:77
     msgid "Blocked by count:"
     msgstr "Aantal geblokkeerd:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:74
    +#: bookwyrm/templates/settings/users/user_info.html:80
     msgid "Date added:"
     msgstr "Datum toegevoegd:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:77
    +#: bookwyrm/templates/settings/users/user_info.html:83
     msgid "Last active date:"
     msgstr "Laatst actieve datum:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:80
    +#: bookwyrm/templates/settings/users/user_info.html:86
     msgid "Manually approved followers:"
     msgstr "Handmatig goedgekeurde volgers:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:83
    +#: bookwyrm/templates/settings/users/user_info.html:89
     msgid "Discoverable:"
     msgstr "Vindbaar:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:87
    +#: bookwyrm/templates/settings/users/user_info.html:93
     msgid "Deactivation reason:"
     msgstr "Reden voor deactivatie:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:102
    +#: bookwyrm/templates/settings/users/user_info.html:108
     msgid "Instance details"
     msgstr "Instance details"
     
    -#: bookwyrm/templates/settings/users/user_info.html:124
    +#: bookwyrm/templates/settings/users/user_info.html:130
     msgid "View instance"
     msgstr "Bekijk instance"
     
    @@ -5883,7 +5988,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:87
     msgid "Create shelf"
     msgstr "Nieuwe boekenplank maken"
     
    @@ -5891,58 +5996,66 @@ msgstr "Nieuwe boekenplank maken"
     msgid "Edit Shelf"
     msgstr "Bewerk boekenplank"
     
    -#: bookwyrm/templates/shelf/shelf.html:24
    +#: bookwyrm/templates/shelf/shelf.html:25
    +msgid "You have have moved to"
    +msgstr "Je bent verhuisd naar"
    +
    +#: 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 "Je kan deze verhuizing ongedaan maken om de volledige functionaliteit te herstellen, maar sommige volgers volgen dit account mogelijk al niet meer."
    +
    +#: bookwyrm/templates/shelf/shelf.html:39
     #: 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:54
     #: 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:112
     #, 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:119
     #, 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:131
     msgid "Edit shelf"
     msgstr "Bewerk boekenplank"
     
    -#: bookwyrm/templates/shelf/shelf.html:124
    +#: bookwyrm/templates/shelf/shelf.html:139
     msgid "Delete shelf"
     msgstr "Verwijder boekenplank"
     
    -#: bookwyrm/templates/shelf/shelf.html:152
    -#: bookwyrm/templates/shelf/shelf.html:178
    +#: bookwyrm/templates/shelf/shelf.html:167
    +#: bookwyrm/templates/shelf/shelf.html:193
     msgid "Shelved"
     msgstr "Op boekenplank gezet"
     
    -#: bookwyrm/templates/shelf/shelf.html:153
    -#: bookwyrm/templates/shelf/shelf.html:181
    +#: bookwyrm/templates/shelf/shelf.html:168
    +#: bookwyrm/templates/shelf/shelf.html:196
     msgid "Started"
     msgstr "Begonnen"
     
    -#: bookwyrm/templates/shelf/shelf.html:154
    -#: bookwyrm/templates/shelf/shelf.html:184
    +#: bookwyrm/templates/shelf/shelf.html:169
    +#: bookwyrm/templates/shelf/shelf.html:199
     msgid "Finished"
     msgstr "Uitgelezen"
     
    -#: bookwyrm/templates/shelf/shelf.html:154
    -#: bookwyrm/templates/shelf/shelf.html:184
    +#: bookwyrm/templates/shelf/shelf.html:169
    +#: bookwyrm/templates/shelf/shelf.html:199
     msgid "Until"
     msgstr "Tot"
     
    -#: bookwyrm/templates/shelf/shelf.html:210
    +#: bookwyrm/templates/shelf/shelf.html:225
     msgid "This shelf is empty."
     msgstr "Deze boekenplank is leeg."
     
    @@ -6248,6 +6361,10 @@ 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/page_text.html:8
     #, python-format
     msgid "page %(page)s of %(total_pages)s"
    @@ -6389,35 +6506,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"
     
    @@ -6609,10 +6726,14 @@ msgid "Groups: %(username)s"
     msgstr "Groepen: %(username)s"
     
     #: bookwyrm/templates/user/layout.html:50
    +msgid "has moved to"
    +msgstr "is verhuisd naar"
    +
    +#: bookwyrm/templates/user/layout.html:64
     msgid "Follow Requests"
     msgstr "Volgverzoeken"
     
    -#: bookwyrm/templates/user/layout.html:73
    +#: bookwyrm/templates/user/layout.html:88
     #: bookwyrm/templates/user/reviews_comments.html:6
     #: bookwyrm/templates/user/reviews_comments.html:12
     msgid "Reviews and Comments"
    @@ -6627,6 +6748,12 @@ msgstr "Lijsten: %(username)s"
     msgid "Create list"
     msgstr "Lijst aanmaken"
     
    +#: 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:31
     #, python-format
     msgid "%(username)s has no followers"
    @@ -6698,11 +6825,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 +6852,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 +6868,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:48
     #, 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 f2038692fe9d143a4c320cb0acdf23d3a47c94f5..ed03ba8c043a6f944b437ff285212d5c51d40754 100644
    GIT binary patch
    delta 25561
    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
    CF4zG8
    
    delta 25398
    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
    
    diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po
    index 3c125d8aa..7fb235df5 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-11-02 21:32+0000\n"
    +"PO-Revision-Date: 2023-11-04 20:12\n"
     "Last-Translator: Mouse Reeve \n"
     "Language-Team: Norwegian\n"
     "Language: no\n"
    @@ -42,15 +42,15 @@ msgstr "{i} ganger"
     msgid "Unlimited"
     msgstr "Ubegrenset"
     
    -#: bookwyrm/forms/edit_user.py:88
    +#: bookwyrm/forms/edit_user.py:104
     msgid "Incorrect password"
     msgstr "Feil passord"
     
    -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90
    +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90
     msgid "Password does not match"
     msgstr "Passordet samsvarer ikke"
     
    -#: bookwyrm/forms/edit_user.py:118
    +#: bookwyrm/forms/edit_user.py:134
     msgid "Incorrect Password"
     msgstr "Feil passord"
     
    @@ -102,8 +102,8 @@ msgstr "Liste rekkefĆølge"
     msgid "Book Title"
     msgstr "Boktittel"
     
    -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156
    -#: bookwyrm/templates/shelf/shelf.html:188
    +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171
    +#: bookwyrm/templates/shelf/shelf.html:203
     #: bookwyrm/templates/snippets/create_status/review.html:32
     msgid "Rating"
     msgstr "Vurdering"
    @@ -145,7 +145,7 @@ msgstr "Fare"
     msgid "Automatically generated report"
     msgstr "Automatisk generert rapport"
     
    -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47
    +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48
     #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214
     #: bookwyrm/templates/settings/link_domains/link_domains.html:19
     msgid "Pending"
    @@ -171,23 +171,23 @@ msgstr "ModeratĆør sletting"
     msgid "Domain block"
     msgstr "Domeneblokkering"
     
    -#: bookwyrm/models/book.py:283
    +#: bookwyrm/models/book.py:282
     msgid "Audiobook"
     msgstr "Lydbok"
     
    -#: bookwyrm/models/book.py:284
    +#: bookwyrm/models/book.py:283
     msgid "eBook"
     msgstr "e-bok"
     
    -#: bookwyrm/models/book.py:285
    +#: bookwyrm/models/book.py:284
     msgid "Graphic novel"
     msgstr "Tegneserie"
     
    -#: bookwyrm/models/book.py:286
    +#: bookwyrm/models/book.py:285
     msgid "Hardcover"
     msgstr "Innbundet"
     
    -#: bookwyrm/models/book.py:287
    +#: bookwyrm/models/book.py:286
     msgid "Paperback"
     msgstr "Paperback"
     
    @@ -205,26 +205,26 @@ msgstr "FĆøderert"
     msgid "Blocked"
     msgstr "Blokkert"
     
    -#: bookwyrm/models/fields.py:29
    +#: bookwyrm/models/fields.py:30
     #, python-format
     msgid "%(value)s is not a valid remote_id"
     msgstr "%(value)s er en ugyldig remote_id"
     
    -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47
    +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48
     #, python-format
     msgid "%(value)s is not a valid username"
     msgstr "%(value)s er et ugyldig brukernavn"
     
    -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128
    +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129
     #: bookwyrm/templates/ostatus/error.html:29
     msgid "username"
     msgstr "brukernavn"
     
    -#: bookwyrm/models/fields.py:197
    +#: bookwyrm/models/fields.py:198
     msgid "A user with that username already exists."
     msgstr "En bruker med det brukernavnet eksisterer allerede."
     
    -#: bookwyrm/models/fields.py:216
    +#: bookwyrm/models/fields.py:217
     #: bookwyrm/templates/snippets/privacy-icons.html:3
     #: bookwyrm/templates/snippets/privacy-icons.html:4
     #: bookwyrm/templates/snippets/privacy_select.html:11
    @@ -232,7 +232,7 @@ msgstr "En bruker med det brukernavnet eksisterer allerede."
     msgid "Public"
     msgstr "Offentlig"
     
    -#: bookwyrm/models/fields.py:217
    +#: bookwyrm/models/fields.py:218
     #: bookwyrm/templates/snippets/privacy-icons.html:7
     #: bookwyrm/templates/snippets/privacy-icons.html:8
     #: bookwyrm/templates/snippets/privacy_select.html:14
    @@ -240,7 +240,7 @@ msgstr "Offentlig"
     msgid "Unlisted"
     msgstr "UoppfĆørt"
     
    -#: bookwyrm/models/fields.py:218
    +#: bookwyrm/models/fields.py:219
     #: bookwyrm/templates/snippets/privacy_select.html:17
     #: bookwyrm/templates/user/relationships/followers.html:6
     #: bookwyrm/templates/user/relationships/followers.html:11
    @@ -249,7 +249,7 @@ msgstr "UoppfĆørt"
     msgid "Followers"
     msgstr "FĆølgere"
     
    -#: bookwyrm/models/fields.py:219
    +#: bookwyrm/models/fields.py:220
     #: bookwyrm/templates/snippets/create_status/post_options_block.html:6
     #: bookwyrm/templates/snippets/privacy-icons.html:15
     #: bookwyrm/templates/snippets/privacy-icons.html:16
    @@ -258,30 +258,30 @@ msgstr "FĆølgere"
     msgid "Private"
     msgstr "Privat"
     
    -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174
    +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174
     #: bookwyrm/templates/settings/imports/imports.html:98
    -#: bookwyrm/templates/settings/users/user_admin.html:81
    -#: bookwyrm/templates/settings/users/user_info.html:28
    +#: bookwyrm/templates/settings/users/user_admin.html:87
    +#: bookwyrm/templates/settings/users/user_info.html:33
     msgid "Active"
     msgstr "Aktiv"
     
    -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172
    +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172
     msgid "Complete"
     msgstr "Ferdig"
     
    -#: bookwyrm/models/import_job.py:50
    +#: bookwyrm/models/import_job.py:51
     msgid "Stopped"
     msgstr "Stoppet"
     
    -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91
    +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92
     msgid "Import stopped"
     msgstr "Importering stoppet"
     
    -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388
    +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381
     msgid "Error loading book"
     msgstr "Feilet ved lasting av bok"
     
    -#: bookwyrm/models/import_job.py:372
    +#: bookwyrm/models/import_job.py:365
     msgid "Could not find a match for book"
     msgstr "Fant ikke den boka"
     
    @@ -368,103 +368,103 @@ msgstr "Sitater"
     msgid "Everything else"
     msgstr "Andre ting"
     
    -#: bookwyrm/settings.py:223
    +#: bookwyrm/settings.py:230
     msgid "Home Timeline"
     msgstr "Lokal tidslinje"
     
    -#: bookwyrm/settings.py:223
    +#: bookwyrm/settings.py:230
     msgid "Home"
     msgstr "Hjem"
     
    -#: bookwyrm/settings.py:224
    +#: bookwyrm/settings.py:231
     msgid "Books Timeline"
     msgstr "Boktidslinja"
     
    -#: bookwyrm/settings.py:224
    +#: bookwyrm/settings.py:231
     #: bookwyrm/templates/guided_tour/user_profile.html:101
     #: bookwyrm/templates/search/layout.html:22
     #: bookwyrm/templates/search/layout.html:43
    -#: bookwyrm/templates/user/layout.html:97
    +#: bookwyrm/templates/user/layout.html:112
     msgid "Books"
     msgstr "BĆøker"
     
    -#: bookwyrm/settings.py:296
    +#: bookwyrm/settings.py:303
     msgid "English"
     msgstr "English (Engelsk)"
     
    -#: bookwyrm/settings.py:297
    +#: bookwyrm/settings.py:304
     msgid "CatalĆ  (Catalan)"
     msgstr "CatalĆ  (katalansk)"
     
    -#: bookwyrm/settings.py:298
    +#: bookwyrm/settings.py:305
     msgid "Deutsch (German)"
     msgstr "Deutsch (Tysk)"
     
    -#: bookwyrm/settings.py:299
    +#: bookwyrm/settings.py:306
     msgid "Esperanto (Esperanto)"
     msgstr "Esperanto (Esperanto)"
     
    -#: bookwyrm/settings.py:300
    +#: bookwyrm/settings.py:307
     msgid "EspaƱol (Spanish)"
     msgstr "EspaƱol (Spansk)"
     
    -#: bookwyrm/settings.py:301
    +#: bookwyrm/settings.py:308
     msgid "Euskara (Basque)"
     msgstr "Euskara (Baskisk)"
     
    -#: bookwyrm/settings.py:302
    +#: bookwyrm/settings.py:309
     msgid "Galego (Galician)"
     msgstr "Galego (Gallisk)"
     
    -#: bookwyrm/settings.py:303
    +#: bookwyrm/settings.py:310
     msgid "Italiano (Italian)"
     msgstr "Italiano (Italiensk)"
     
    -#: bookwyrm/settings.py:304
    +#: bookwyrm/settings.py:311
     msgid "Suomi (Finnish)"
     msgstr "Suomi (finsk)"
     
    -#: bookwyrm/settings.py:305
    +#: bookwyrm/settings.py:312
     msgid "FranƧais (French)"
     msgstr "FranƧais (Fransk)"
     
    -#: bookwyrm/settings.py:306
    +#: bookwyrm/settings.py:313
     msgid "Lietuvių (Lithuanian)"
     msgstr "Lietuvių (Litauisk)"
     
    -#: bookwyrm/settings.py:307
    +#: bookwyrm/settings.py:314
     msgid "Nederlands (Dutch)"
     msgstr ""
     
    -#: bookwyrm/settings.py:308
    +#: bookwyrm/settings.py:315
     msgid "Norsk (Norwegian)"
     msgstr "Norsk (Norsk)"
     
    -#: bookwyrm/settings.py:309
    +#: bookwyrm/settings.py:316
     msgid "Polski (Polish)"
     msgstr "Polski (Polsk)"
     
    -#: bookwyrm/settings.py:310
    +#: bookwyrm/settings.py:317
     msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)"
     msgstr "PortuguĆŖs - Brasil (Brasiliansk portugisisk)"
     
    -#: bookwyrm/settings.py:311
    +#: bookwyrm/settings.py:318
     msgid "PortuguĆŖs Europeu (European Portuguese)"
     msgstr "PortugueĢ‚s Europeu (Europeisk Portugisisk)"
     
    -#: bookwyrm/settings.py:312
    +#: bookwyrm/settings.py:319
     msgid "RomĆ¢nă (Romanian)"
     msgstr "RomĆ¢nă (romansk)"
     
    -#: bookwyrm/settings.py:313
    +#: bookwyrm/settings.py:320
     msgid "Svenska (Swedish)"
     msgstr "Svenska (Svensk)"
     
    -#: bookwyrm/settings.py:314
    +#: bookwyrm/settings.py:321
     msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)"
     msgstr "ē®€ä½“äø­ę–‡ (Forenklet kinesisk)"
     
    -#: bookwyrm/settings.py:315
    +#: bookwyrm/settings.py:322
     msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)"
     msgstr "ē¹é«”äø­ę–‡ (Tradisjonelt kinesisk)"
     
    @@ -575,7 +575,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 +680,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 +768,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 +797,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"
    @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6
     msgid "Lists"
     msgstr "Lister"
     
    @@ -1117,8 +1113,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 +1324,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:162
     msgid "Cover"
     msgstr "Omslag"
     
    @@ -1529,22 +1525,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 +1548,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"
     
    @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code."
     msgstr "Beklager, vi fant ikke den koden."
     
     #: bookwyrm/templates/confirm_email/confirm_email.html:19
    -#: bookwyrm/templates/settings/users/user_info.html:92
    +#: bookwyrm/templates/settings/users/user_info.html:98
     msgid "Confirmation code:"
     msgstr "Bekreftelseskode:"
     
    @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s siterte You have moved your account to %(username)s"
    +msgstr "Du har flyttet brukeren til  til %(username)s"
    +
    +#: 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 bookwyrm/templates/shelf/shelf.html:32
    +msgid "Undo move"
    +msgstr ""
    +
    +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82
    +msgid "Log out"
    +msgstr "Logg ut"
    +
     #: bookwyrm/templates/notifications/items/accept.html:18
     #, python-format
     msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\""
    @@ -3744,6 +3763,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\""
    @@ -3782,7 +3811,7 @@ msgstr[0] ""
     msgstr[1] ""
     
     #: 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 "Varsel om fĆølsomt innhold"
     
    @@ -4000,9 +4029,51 @@ msgstr ""
     msgid "Set up 2FA"
     msgstr "Sett opp 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 "Blokkerte brukere"
     
    @@ -4032,7 +4103,7 @@ msgstr "Nytt passord:"
     #: 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 "Slett konto"
    @@ -4154,18 +4225,45 @@ msgstr "Last ned fil"
     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 "Data"
     
    -#: bookwyrm/templates/preferences/layout.html:39
    +#: bookwyrm/templates/preferences/layout.html:47
     msgid "CSV export"
     msgstr "CSV-eksport"
     
    -#: bookwyrm/templates/preferences/layout.html:42
    +#: bookwyrm/templates/preferences/layout.html:50
     msgid "Relationships"
     msgstr "Relasjoner"
     
    +#: 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,7 +4672,7 @@ msgid "Streams"
     msgstr ""
     
     #: bookwyrm/templates/settings/celery.html:32
    -msgid "Broadcasts"
    +msgid "Broadcast"
     msgstr ""
     
     #: bookwyrm/templates/settings/celery.html:38
    @@ -4900,19 +4998,19 @@ msgstr "Instans:"
     
     #: bookwyrm/templates/settings/federation/edit_instance.html:52
     #: bookwyrm/templates/settings/federation/instance.html:46
    -#: bookwyrm/templates/settings/users/user_info.html:113
    +#: bookwyrm/templates/settings/users/user_info.html:119
     msgid "Status:"
     msgstr "Status:"
     
     #: bookwyrm/templates/settings/federation/edit_instance.html:66
     #: bookwyrm/templates/settings/federation/instance.html:40
    -#: bookwyrm/templates/settings/users/user_info.html:107
    +#: bookwyrm/templates/settings/users/user_info.html:113
     msgid "Software:"
     msgstr "Programvare:"
     
     #: bookwyrm/templates/settings/federation/edit_instance.html:76
     #: bookwyrm/templates/settings/federation/instance.html:43
    -#: bookwyrm/templates/settings/users/user_info.html:110
    +#: bookwyrm/templates/settings/users/user_info.html:116
     msgid "Version:"
     msgstr "Versjon:"
     
    @@ -4925,7 +5023,7 @@ msgid "Details"
     msgstr "Detaljer"
     
     #: bookwyrm/templates/settings/federation/instance.html:53
    -#: bookwyrm/templates/user/layout.html:69
    +#: bookwyrm/templates/user/layout.html:84
     msgid "Activity"
     msgstr "Aktivitet"
     
    @@ -4939,7 +5037,7 @@ msgid "View all"
     msgstr "Vis alle"
     
     #: bookwyrm/templates/settings/federation/instance.html:62
    -#: bookwyrm/templates/settings/users/user_info.html:60
    +#: bookwyrm/templates/settings/users/user_info.html:66
     msgid "Reports:"
     msgstr "Rapporter:"
     
    @@ -4956,7 +5054,7 @@ msgid "Blocked by us:"
     msgstr "Blokkert av oss:"
     
     #: bookwyrm/templates/settings/federation/instance.html:90
    -#: bookwyrm/templates/settings/users/user_info.html:117
    +#: bookwyrm/templates/settings/users/user_info.html:123
     msgid "Notes"
     msgstr "Notater"
     
    @@ -5676,17 +5774,22 @@ msgstr "Sist aktiv"
     msgid "Remote instance"
     msgstr "Ekstern instans"
     
    -#: bookwyrm/templates/settings/users/user_admin.html:86
    +#: 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 "Slettet"
     
    -#: bookwyrm/templates/settings/users/user_admin.html:92
    -#: bookwyrm/templates/settings/users/user_info.html:32
    +#: bookwyrm/templates/settings/users/user_admin.html:99
    +#: bookwyrm/templates/settings/users/user_info.html:38
     msgid "Inactive"
     msgstr "Inaktiv"
     
    -#: bookwyrm/templates/settings/users/user_admin.html:101
    -#: bookwyrm/templates/settings/users/user_info.html:127
    +#: bookwyrm/templates/settings/users/user_admin.html:108
    +#: bookwyrm/templates/settings/users/user_info.html:133
     msgid "Not set"
     msgstr "Ikke angitt"
     
    @@ -5698,55 +5801,55 @@ msgstr "Vis brukerprofil"
     msgid "Go to user admin"
     msgstr "GĆ„ til brukeradministrasjon"
     
    -#: bookwyrm/templates/settings/users/user_info.html:40
    +#: bookwyrm/templates/settings/users/user_info.html:46
     msgid "Local"
     msgstr "Lokal"
     
    -#: bookwyrm/templates/settings/users/user_info.html:42
    +#: bookwyrm/templates/settings/users/user_info.html:48
     msgid "Remote"
     msgstr "Ekstern"
     
    -#: bookwyrm/templates/settings/users/user_info.html:51
    +#: bookwyrm/templates/settings/users/user_info.html:57
     msgid "User details"
     msgstr "Brukerdetaljer"
     
    -#: bookwyrm/templates/settings/users/user_info.html:55
    +#: bookwyrm/templates/settings/users/user_info.html:61
     msgid "Email:"
     msgstr "E-post:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:65
    +#: bookwyrm/templates/settings/users/user_info.html:71
     msgid "(View reports)"
     msgstr "(vis rapporter)"
     
    -#: bookwyrm/templates/settings/users/user_info.html:71
    +#: bookwyrm/templates/settings/users/user_info.html:77
     msgid "Blocked by count:"
     msgstr "Blokkert av:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:74
    +#: bookwyrm/templates/settings/users/user_info.html:80
     msgid "Date added:"
     msgstr "Dato lagt til:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:77
    +#: bookwyrm/templates/settings/users/user_info.html:83
     msgid "Last active date:"
     msgstr "Sist aktiv dato:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:80
    +#: bookwyrm/templates/settings/users/user_info.html:86
     msgid "Manually approved followers:"
     msgstr "Manuelt godkjente fĆølgere:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:83
    +#: bookwyrm/templates/settings/users/user_info.html:89
     msgid "Discoverable:"
     msgstr "Synlig:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:87
    +#: bookwyrm/templates/settings/users/user_info.html:93
     msgid "Deactivation reason:"
     msgstr "Deaktiveringsgrunn:"
     
    -#: bookwyrm/templates/settings/users/user_info.html:102
    +#: bookwyrm/templates/settings/users/user_info.html:108
     msgid "Instance details"
     msgstr "Instansdetaljer"
     
    -#: bookwyrm/templates/settings/users/user_info.html:124
    +#: bookwyrm/templates/settings/users/user_info.html:130
     msgid "View instance"
     msgstr "Vis instans"
     
    @@ -5883,7 +5986,7 @@ msgid "Need help?"
     msgstr ""
     
     #: bookwyrm/templates/shelf/create_shelf_form.html:5
    -#: bookwyrm/templates/shelf/shelf.html:72
    +#: bookwyrm/templates/shelf/shelf.html:87
     msgid "Create shelf"
     msgstr "Lag hylle"
     
    @@ -5891,58 +5994,66 @@ msgstr "Lag hylle"
     msgid "Edit Shelf"
     msgstr "Rediger hylle"
     
    -#: bookwyrm/templates/shelf/shelf.html:24
    +#: 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 "Brukerprofil"
     
    -#: bookwyrm/templates/shelf/shelf.html:39
    +#: bookwyrm/templates/shelf/shelf.html:54
     #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53
     msgid "All books"
     msgstr "Alle bĆøker"
     
    -#: bookwyrm/templates/shelf/shelf.html:97
    +#: bookwyrm/templates/shelf/shelf.html:112
     #, python-format
     msgid "%(formatted_count)s book"
     msgid_plural "%(formatted_count)s books"
     msgstr[0] "%(formatted_count)s bok"
     msgstr[1] "%(formatted_count)s bĆøker"
     
    -#: bookwyrm/templates/shelf/shelf.html:104
    +#: bookwyrm/templates/shelf/shelf.html:119
     #, python-format
     msgid "(showing %(start)s-%(end)s)"
     msgstr "(viser %(start)s-%(end)s)"
     
    -#: bookwyrm/templates/shelf/shelf.html:116
    +#: bookwyrm/templates/shelf/shelf.html:131
     msgid "Edit shelf"
     msgstr "Rediger hylle"
     
    -#: bookwyrm/templates/shelf/shelf.html:124
    +#: bookwyrm/templates/shelf/shelf.html:139
     msgid "Delete shelf"
     msgstr "Slett hylle"
     
    -#: bookwyrm/templates/shelf/shelf.html:152
    -#: bookwyrm/templates/shelf/shelf.html:178
    +#: bookwyrm/templates/shelf/shelf.html:167
    +#: bookwyrm/templates/shelf/shelf.html:193
     msgid "Shelved"
     msgstr "Lagt pƄ hylla"
     
    -#: bookwyrm/templates/shelf/shelf.html:153
    -#: bookwyrm/templates/shelf/shelf.html:181
    +#: bookwyrm/templates/shelf/shelf.html:168
    +#: bookwyrm/templates/shelf/shelf.html:196
     msgid "Started"
     msgstr "Startet"
     
    -#: bookwyrm/templates/shelf/shelf.html:154
    -#: bookwyrm/templates/shelf/shelf.html:184
    +#: bookwyrm/templates/shelf/shelf.html:169
    +#: bookwyrm/templates/shelf/shelf.html:199
     msgid "Finished"
     msgstr "FullfĆørt"
     
    -#: bookwyrm/templates/shelf/shelf.html:154
    -#: bookwyrm/templates/shelf/shelf.html:184
    +#: bookwyrm/templates/shelf/shelf.html:169
    +#: bookwyrm/templates/shelf/shelf.html:199
     msgid "Until"
     msgstr ""
     
    -#: bookwyrm/templates/shelf/shelf.html:210
    +#: bookwyrm/templates/shelf/shelf.html:225
     msgid "This shelf is empty."
     msgstr "Denne hylla er tom."
     
    @@ -6248,6 +6359,10 @@ msgstr "Du har lest %(read_count)s av %(goal_count)s bĆøker
     msgid "%(username)s has read %(read_count)s of %(goal_count)s books."
     msgstr "%(username)s har lest %(read_count)s av %(goal_count)s bĆøker."
     
    +#: bookwyrm/templates/snippets/move_user_buttons.html:10
    +msgid "Follow at new account"
    +msgstr ""
    +
     #: bookwyrm/templates/snippets/page_text.html:8
     #, python-format
     msgid "page %(page)s of %(total_pages)s"
    @@ -6389,35 +6504,35 @@ msgstr "Slutt Ć„ lese"
     msgid "Finish reading"
     msgstr "FullfĆør lesing"
     
    -#: bookwyrm/templates/snippets/status/content_status.html:80
    +#: bookwyrm/templates/snippets/status/content_status.html:69
     msgid "Show status"
     msgstr "Vis status"
     
    -#: 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 "%(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 "ƅpne bilde i nytt vindu"
     
    -#: bookwyrm/templates/snippets/status/content_status.html:148
    +#: bookwyrm/templates/snippets/status/content_status.html:137
     msgid "Hide status"
     msgstr "Skjul status"
     
    @@ -6609,10 +6724,14 @@ msgid "Groups: %(username)s"
     msgstr "Grupper: %(username)s"
     
     #: bookwyrm/templates/user/layout.html:50
    +msgid "has moved to"
    +msgstr ""
    +
    +#: bookwyrm/templates/user/layout.html:64
     msgid "Follow Requests"
     msgstr "FĆølgeforespĆørsler"
     
    -#: bookwyrm/templates/user/layout.html:73
    +#: bookwyrm/templates/user/layout.html:88
     #: bookwyrm/templates/user/reviews_comments.html:6
     #: bookwyrm/templates/user/reviews_comments.html:12
     msgid "Reviews and Comments"
    @@ -6627,6 +6746,12 @@ msgstr "Lister: %(username)s"
     msgid "Create list"
     msgstr "Opprett liste"
     
    +#: bookwyrm/templates/user/moved.html:25
    +#: bookwyrm/templates/user/user_preview.html:22
    +#, python-format
    +msgid "Joined %(date)s"
    +msgstr "Ble med %(date)s"
    +
     #: bookwyrm/templates/user/relationships/followers.html:31
     #, python-format
     msgid "%(username)s has no followers"
    @@ -6698,11 +6823,6 @@ msgstr "Kun kommentarer"
     msgid "No activities yet!"
     msgstr "Ingen aktivitet enda!"
     
    -#: bookwyrm/templates/user/user_preview.html:22
    -#, python-format
    -msgid "Joined %(date)s"
    -msgstr "Ble med %(date)s"
    -
     #: bookwyrm/templates/user/user_preview.html:26
     #, python-format
     msgid "%(display_count)s follower"
    @@ -6730,10 +6850,6 @@ msgstr "Ingen fĆølgere du fĆølger"
     msgid "View profile and more"
     msgstr "Vis profil og mer"
     
    -#: bookwyrm/templates/user_menu.html:82
    -msgid "Log out"
    -msgstr "Logg ut"
    -
     #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28
     msgid "File exceeds maximum size: 10MB"
     msgstr "Filen overskrider maksimal stĆørrelse: 10MB"
    @@ -6750,7 +6866,7 @@ msgid_plural "%(num)d books - by %(user)s"
     msgstr[0] ""
     msgstr[1] ""
     
    -#: bookwyrm/templatetags/utilities.py:39
    +#: bookwyrm/templatetags/utilities.py:48
     #, python-format
     msgid "%(title)s: %(subtitle)s"
     msgstr "%(title)s: %(subtitle)s"
    diff --git a/locale/pl_PL/LC_MESSAGES/django.mo b/locale/pl_PL/LC_MESSAGES/django.mo
    index e7134182d0f9a041a402e9be1710fde4e2d93e13..d763756b16c37cc2fbb1d1e6f9c210ed9a7c206a 100644
    GIT binary patch
    delta 26149
    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 delta 26205 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
  • ^qU0l*(RIP#v?Wc~Xv(a_t&|%}-E7`-4I{EIBXuMtc9D7p?~tR5 z4;SBcnRtC~mPSD(qbd24yD_Eo-C{fUw}gw@8kKN7cV}w;%I#0MC1px_yEY1TPZN7Y zZCw}0{oVw9|6NbsXIlD|{JGo(h+ne#2?*=DVsPH8M;jK2iErk9!hOoNpPz6t!X3#k zPhVB|0_CJ6QP))xwvrh@oY%AyYAX#QzMRhbljbW&dQ-wRY`i9k`U26~mfuNwamvr} zwrU()va(IBPwE3&DrJW~jqpS6U#Z!Gw83hc>pu5T(nomLH4gT~c@H-ZZ8pT#>Fq1Q zKj6`39A%<#BmR3Grd(|z`)&C?HiJ(!ry}=QJC>P*hmn`xTeeAvTZq)=wuUO~AzoMk zuH}Rua<8G6h16P)`+Pa(Kd+$zY2Q*NwQVC4;Z~%L9g%i;$_G?LE00-y1upf>1~If z$nQ(I9r=?8>za)b`aiMgPhxoz%3}rFfWH6yO(Vx`L*t0&v*EkglFAP-H&&qGzSzUN z_{-p^r-XEUur|jTlvqW}MMytFExy0_KJTB~7FE6#_hQPXB<&xYK7cgW>)$jaY9Bd^ z?ATO#2QBO(o=p+uanG@}>XN6c4fi;;M*I-@x_%klRU3*!4IH=49fwywIXL%1jD`qDMgrZ*uzjqd(^9bDorO*oV?e-hU9mfK6(YCBt{WwGH(gv*iFg|Zn4 zCn9~Ft@oVpJK9-BdOLmitmY1-u&#Avj^ZxPot6rDZKaRiEG>fE8pNU~nV8(0w#Gtg z-KB;8U)xT6TS zvQt!JFElLdNcz85P4ati^BXniHi@mgJzEC3lW8g7Kc$uuu0`zvlxjj=1xjus?c#sR zEF)i6Z}R8icetMNx;{~kpICiA=P3Tl)@w|eHN;m@cM55L5RUOU-BiYzXe$>aBiJ^6 z0DIZ=(JDl^Hu>3UNLLA*VS>K@o}>JCgqCpga`j#JZCksn)x14hg%pgWW&|l6ZR;vp zl{Bv%>Q>@e2p^`*VbXu{?rs(A79}*B8oyv$U+d;SnJ77*^cS{v7u)I)vS->fl|0Hl z=|AxmguB_YE9fa1;it4+-KIUng2elncva^L6<$*?6A2e-EEn+~)iPH$3br8qFVc1q zZ;D@YkL0e){TKO9NdMrS^HoT`KvL$BQo=OtefCq>+V$^$R9lZ*3=EllJdbjITw6^C>|4EOq zX-}#1hkiRdg2Ew00_+6B2=C%PM0yKbIEwI18j0raNnSJ3i*bL!oshH>+%eJD|P1L9NrcTPZV$`zGoAxU>FWzVi*?c;r>2!g1>U#;t2N_9DFj-lELk_<{6Q zHop|^A-^tpV@cnEZ&Z;>L;jigZSEU>9P#TEJWk?uD$P+Q@gTyV2{$18|E~)+Eu1pJ zgy+#>fI1*th44Vqb?qlj*C^se2>(icS(D^kB<*|RQ{#Jcw8`qWC3_q90FvI5)q-Mq zu{H5hgnN=#z*ap=+7QC)NvlFwS3_$;{DJ#>hLPQ-jU@jL@$9{@j_z=Pov|zTM_bdM z@Ik_7kzWiu-*VR^T#-7BxSJE-OMDi0G8(^xr@6l)@89b&fsuCnQwUEboRj<^l*=8T zZ#XkZcu7Q8V(zBiuI)mam7qveGC zMKGE&ElJb$inImZTkS&J=eDJ4r2I@cmfQijkdiH_b)EF2r2Wm^p70g!7u-KkraNij zwtjXjM)}O-wLx8{u@mhyCoP2gzgJch$?O~@BPW%2k`SK?UgAq}Eot$*bK2)j@FywJ z-ox!9+$S`)j&xn)u_SioPCnCVQSu4lt#hxwg4p#OD#7V27EHa{0Nt+k9Vf zy4hswE8dR0-$)y5yKhF_@udIb?HL\n" "Language-Team: Polish\n" "Language: pl\n" @@ -42,15 +42,15 @@ msgstr "{i} użyć" msgid "Unlimited" msgstr "Nieskończone" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Niepoprawne hasło" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Hasła nie są identyczne" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Niepoprawne hasło" @@ -102,8 +102,8 @@ msgstr "Sortowanie" msgid "Book Title" msgstr "Tytuł książki" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Ocena" @@ -145,7 +145,7 @@ msgstr "Zagrożenie" msgid "Automatically generated report" msgstr "Automatycznie wygenerowany raport" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Usunięte przez moderatora" msgid "Domain block" msgstr "Blokada domeny" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audiobook" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "eBook" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Powieść ilustrowana" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Twarda oprawa" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Miękka oprawa" @@ -205,26 +205,26 @@ msgstr "Federacja" msgid "Blocked" msgstr "Zablokowane" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nie jest prawidłowym remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nie jest prawidłową nazwą użytkownika" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nazwa użytkownika" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Ta nazwa użytkownika jest już w użyciu." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Ta nazwa użytkownika jest już w użyciu." msgid "Public" msgstr "Publiczne" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Publiczne" msgid "Unlisted" msgstr "Niepubliczne" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Niepubliczne" msgid "Followers" msgstr "Obserwujący" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Obserwujący" msgid "Private" msgstr "Prywatne" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktywne" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Zakończone" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Wstrzymane" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Import wstrzymany" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Błąd wczytywania książki" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Nie znaleziono pasującej książki" @@ -368,103 +368,103 @@ msgstr "Cytaty" msgid "Everything else" msgstr "Wszystko inne" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Strona gÅ‚Ć³wna" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Start" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Oś czasu książek" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Książki" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (Angielski)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Kataloński)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (Niemiecki)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Hiszpański)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galicyjski)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Włoski)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (Fiński)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (Francuski)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litewski)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "Holenderski" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (Norweski)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Brazylijski Portugalski)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Portugalski)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Rumuński)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Szwedzki)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Uproszczony chiński)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Tradycyjny chiński)" @@ -575,7 +575,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 +684,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 +776,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 +805,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" @@ -967,19 +963,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 +1054,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listy" @@ -1129,8 +1125,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 +1336,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:162 msgid "Cover" msgstr "Okładka" @@ -1541,22 +1537,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 +1560,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 "" @@ -1599,7 +1595,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Nie udało nam się znaleÅŗć tego kodu." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Kod potwierdzający:" @@ -1693,6 +1689,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 +1768,7 @@ msgstr "%(username)s cytuje 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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\"" @@ -3776,6 +3795,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 +3845,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 +4063,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 +4137,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" @@ -4188,18 +4259,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 +4710,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4946,19 +5044,19 @@ msgstr "Instancja:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Status:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Oprogramowanie:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Wersja:" @@ -4971,7 +5069,7 @@ msgid "Details" msgstr "SzczegĆ³Å‚y" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Aktywność" @@ -4985,7 +5083,7 @@ msgid "View all" msgstr "Pokaż wszystko" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "" @@ -5002,7 +5100,7 @@ msgid "Blocked by us:" msgstr "Zablokowane przez nas:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notatki" @@ -5722,17 +5820,22 @@ msgstr "Ostatnia aktywność" msgid "Remote instance" msgstr "Zdalna instancja" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "Usunięte" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Nieaktywne" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "" @@ -5744,55 +5847,55 @@ msgstr "Wyświetl profil użytkownika" msgid "Go to user admin" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Lokalne" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Zdalne" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "SzczegĆ³Å‚y użytkownika" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "E-mail:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "PowĆ³d dezaktywacji:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "SzczegĆ³Å‚y instancji" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Zobacz instancję" @@ -5929,7 +6032,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:87 msgid "Create shelf" msgstr "UtwĆ³rz pĆ³Å‚kę" @@ -5937,18 +6040,26 @@ msgstr "UtwĆ³rz pĆ³Å‚kę" msgid "Edit Shelf" msgstr "Edytuj pĆ³Å‚kę" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "Profil użytkownika" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -5957,40 +6068,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:119 #, 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:131 msgid "Edit shelf" msgstr "Edytuj pĆ³Å‚kę" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Usuń pĆ³Å‚kę" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Na pĆ³Å‚ce" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Rozpoczęte" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Ukończone" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Do" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "PĆ³Å‚ka jest pusta." @@ -6308,6 +6419,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6449,35 +6564,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" @@ -6669,10 +6784,14 @@ msgid "Groups: %(username)s" msgstr "Grupy: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Prośby o obserwowanie" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6687,6 +6806,12 @@ msgstr "Listy: %(username)s" msgid "Create list" msgstr "UtwĆ³rz listę" +#: 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:31 #, python-format msgid "%(username)s has no followers" @@ -6758,11 +6883,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 +6914,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 +6932,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, 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 42da17a08b31601e4d80a782e3290ad350e5f86f..f5cceed233a1e171e866363d4cb8ac7c106e90e2 100644 GIT binary patch delta 24077 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 diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index 495ea43b3..cf9eee066 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-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-02 22:29\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -42,15 +42,15 @@ msgstr "{i} usos" msgid "Unlimited" msgstr "Ilimitado" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Senha incorreta" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "As senhas nĆ£o correspondem" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Senha incorreta" @@ -102,8 +102,8 @@ msgstr "Ordem de inserĆ§Ć£o" msgid "Book Title" msgstr "TĆ­tulo do livro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "AvaliaĆ§Ć£o" @@ -145,7 +145,7 @@ msgstr "Perigo" msgid "Automatically generated report" msgstr "RelatĆ³rio gerado automaticamente" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "ExclusĆ£o de moderador" msgid "Domain block" msgstr "Bloqueio de domĆ­nio" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Audiolivro" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "e-book" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Graphic novel" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Capa dura" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Capa mole" @@ -205,26 +205,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nĆ£o Ć© um remote_id vĆ”lido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nĆ£o Ć© um nome de usuĆ”rio vĆ”lido" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome de usuĆ”rio" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "JĆ” existe um usuĆ”rio com este nome." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "JĆ” existe um usuĆ”rio com este nome." msgid "Public" msgstr "PĆŗblico" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblico" msgid "Unlisted" msgstr "NĆ£o listado" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "NĆ£o listado" msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Seguidores" msgid "Private" msgstr "Particular" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Ativo" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Completo" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Parado" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "ImportaĆ§Ć£o interrompida" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Erro ao carregar livro" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "NĆ£o foi possĆ­vel encontrar o livro" @@ -368,103 +368,103 @@ msgstr "CitaƧƵes" msgid "Everything else" msgstr "Todo o resto" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Linha do tempo" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "PĆ”gina inicial" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Linha do tempo dos livros" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Livros" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (InglĆŖs)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (CatalĆ£o)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (AlemĆ£o)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Espanhol)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Basco)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galego)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (FinlandĆŖs)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (FrancĆŖs)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (NorueguĆŖs)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (PolonĆŖs)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (PortuguĆŖs do Brasil)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆŖs Europeu)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Romeno)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (ChinĆŖs simplificado)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (ChinĆŖs tradicional)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listas" @@ -1117,8 +1113,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 +1324,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:162 msgid "Cover" msgstr "Capa" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Desculpe! NĆ£o encontramos o cĆ³digo." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "CĆ³digo de confirmaĆ§Ć£o:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s citou 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Sair" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,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\"" @@ -3782,7 +3811,7 @@ msgstr[0] "" msgstr[1] "" #: 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 "Aviso de conteĆŗdo" @@ -4000,9 +4029,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 "UsuĆ”rios bloqueados" @@ -4032,7 +4103,7 @@ msgstr "Nova senha:" #: 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 "Excluir conta" @@ -4154,18 +4225,45 @@ msgstr "" msgid "Account" msgstr "Conta" -#: 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 "Dados" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "Exportar CSV" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "RelaƧƵes" +#: 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,7 +4672,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4900,19 +4998,19 @@ msgstr "InstĆ¢ncia:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Status:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Software:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "VersĆ£o:" @@ -4925,7 +5023,7 @@ msgid "Details" msgstr "Detalhes" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Atividade" @@ -4939,7 +5037,7 @@ msgid "View all" msgstr "Ver todos" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "DenĆŗncias:" @@ -4956,7 +5054,7 @@ msgid "Blocked by us:" msgstr "Bloqueados por nĆ³s:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notas" @@ -5676,17 +5774,22 @@ msgstr "ƚltima atividade" msgid "Remote instance" msgstr "InstĆ¢ncia remota" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inativo" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "NĆ£o definido" @@ -5698,55 +5801,55 @@ msgstr "Ver perfil do usuĆ”rio" msgid "Go to user admin" msgstr "Ir Ć  administraĆ§Ć£o de usuĆ”rios" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Remoto" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detalhes do usuĆ”rio" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "E-mail:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Ver denĆŗncias)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Bloqueado por:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Data da inclusĆ£o:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Data da Ćŗltima atividade:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Seguidores manualmente aprovados:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Publicamente visĆ­vel:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Motivo de desativaĆ§Ć£o:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detalhes da instĆ¢ncia" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Ver instĆ¢ncia" @@ -5883,7 +5986,7 @@ msgid "Need help?" msgstr "Precisa de ajuda?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Criar estante" @@ -5891,58 +5994,66 @@ msgstr "Criar estante" msgid "Edit Shelf" msgstr "Editar estante" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "Perfil do usuĆ”rio" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os livros" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s livro" msgstr[1] "%(formatted_count)s livros" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(mostrando %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Editar estante" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Excluir estante" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Adicionado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Iniciado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Terminado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Esta estante estĆ” vazia." @@ -6248,6 +6359,10 @@ msgstr "VocĆŖ leu %(read_count)s de %(goal_count)s livros%(read_count)s of %(goal_count)s books." msgstr "%(username)s leu %(read_count)s de %(goal_count)s livros." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6504,35 @@ msgstr "" msgid "Finish reading" msgstr "Terminar de ler" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Mostrar publicaĆ§Ć£o" -#: 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 "Abrir imagem em nova janela" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Esconder publicaĆ§Ć£o" @@ -6609,10 +6724,14 @@ msgid "Groups: %(username)s" msgstr "Grupos: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "SolicitaƧƵes para seguir" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6746,12 @@ msgstr "Listas: %(username)s" msgid "Create list" msgstr "Criar lista" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "Entrou %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6823,6 @@ msgstr "" msgid "No activities yet!" msgstr "Nenhuma atividade ainda!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "Entrou %(date)s" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6730,10 +6850,6 @@ msgstr "Nenhum seguidor que vocĆŖ segue" msgid "View profile and more" msgstr "Ver perfil e mais" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Sair" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "Arquivo excede o tamanho mĆ”ximo: 10MB" @@ -6750,7 +6866,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index 4e2f18bcbbc5be2dfd3fd9b19f47925cf4850486..0fa86ece7dbd1d09a6027fa7cda2a1aa8241db2b 100644 GIT binary patch delta 29886 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 delta 30060 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 ivy-X&pgXgb`anxQ|%P?=H+O)nU;\n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -42,15 +42,15 @@ msgstr "{i} utilizaƧƵes" msgid "Unlimited" msgstr "Ilimitado" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Palavra-passe incorreta" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Palavras-passe nĆ£o coincidem" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Palavra-passe Incorreta" @@ -102,8 +102,8 @@ msgstr "Ordem da Lista" msgid "Book Title" msgstr "TĆ­tulo do livro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "ClassificaĆ§Ć£o" @@ -145,7 +145,7 @@ msgstr "Perigo" msgid "Automatically generated report" msgstr "RelatĆ³rio gerado automaticamente" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "ExclusĆ£o do moderador" msgid "Domain block" msgstr "Bloqueio de domĆ­nio" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Livro-Ć”udio" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "eBook" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Novela grĆ”fica" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Capa dura" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Capa mole" @@ -205,26 +205,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nĆ£o Ć© um remote_id vĆ”lido" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nĆ£o Ć© um nome de utilizador vĆ”lido" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome de utilizador" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Um utilizador com o mesmo nome de utilizador jĆ” existe." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Um utilizador com o mesmo nome de utilizador jĆ” existe." msgid "Public" msgstr "PĆŗblico" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblico" msgid "Unlisted" msgstr "NĆ£o listado" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "NĆ£o listado" msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Seguidores" msgid "Private" msgstr "Privado" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Ativo" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "ConcluĆ­do" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Parado" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "A importaĆ§Ć£o parou" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Erro ao carregar o livro" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "NĆ£o foi possĆ­vel encontrar um resultado para o livro pedido" @@ -368,103 +368,103 @@ msgstr "CitaƧƵes" msgid "Everything else" msgstr "Tudo o resto" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Cronograma Inicial" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "InĆ­cio" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Cronograma de Livros" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Livros" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "InglĆŖs" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (catalĆ£o)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (AlemĆ£o)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Espanhol)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Basco)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Galician)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (finlandĆŖs)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (FrancĆŖs)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (lituano)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (NorueguĆŖs)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (Polaco)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (PortuguĆŖs brasileiro)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortugueĢ‚s (PortugueĢ‚s Europeu)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Romeno)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (sueco)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (ChinĆŖs simplificado)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (ChinĆŖs tradicional)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listas" @@ -1117,8 +1113,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 +1324,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:162 msgid "Cover" msgstr "Capa" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Pedimos desculpa, nĆ£o conseguimos encontrar esse cĆ³digo." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "CĆ³digo de confirmaĆ§Ć£o:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s citou 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Terminar sessĆ£o" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s menciounou-te num msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s mencionou-te numa actualizaĆ§Ć£o de estado" +#: 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 +3811,7 @@ msgstr[0] "" msgstr[1] "%(display_count)s novos domĆ­nio do link precisam de moderaĆ§Ć£o" #: 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 "Aviso de ConteĆŗdo" @@ -4000,9 +4029,51 @@ msgstr "Confirma a tua palavra-passe para comeƧar a configurar o 2FA." msgid "Set up 2FA" msgstr "Configurar 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 "Utilizadores Bloqueados" @@ -4032,7 +4103,7 @@ msgstr "Nova Palavra-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 "Apagar conta" @@ -4154,18 +4225,45 @@ msgstr "Descarregar ficheiro" msgid "Account" msgstr "Conta" -#: 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 "Dados" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "Exportar CSV" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "Relacionamentos" +#: 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 +4672,8 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "TransmissƵes" +msgid "Broadcast" +msgstr "" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -4900,19 +4998,19 @@ msgstr "DomĆ­nio:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Estado:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Software:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "VersĆ£o:" @@ -4925,7 +5023,7 @@ msgid "Details" msgstr "Detalhes" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Actividade" @@ -4939,7 +5037,7 @@ msgid "View all" msgstr "Ver todos" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "DenĆŗncias:" @@ -4956,7 +5054,7 @@ msgid "Blocked by us:" msgstr "Bloqueado por nĆ³s:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notas" @@ -5676,17 +5774,22 @@ msgstr "ƚltima atividade" msgid "Remote instance" msgstr "DomĆ­nio remoto" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "Apagado" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inativo" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "NĆ£o definido" @@ -5698,55 +5801,55 @@ msgstr "Ver perfil do utilizador" msgid "Go to user admin" msgstr "Ir para a administraĆ§Ć£o de utilizadores" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "Remoto" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detalhes do Utilizador" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Email:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Ver denĆŗncias)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Bloqueado por contagem:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Data de adiĆ§Ć£o:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "ƚltima vez ativo:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Seguidores manualmente aprovados:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "DetetĆ”vel:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "RazĆ£o da desativaĆ§Ć£o:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detalhes do domĆ­nio" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Ver domĆ­nio" @@ -5883,7 +5986,7 @@ msgid "Need help?" msgstr "Precisas de ajuda?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Criar prateleira" @@ -5891,58 +5994,66 @@ msgstr "Criar prateleira" msgid "Edit Shelf" msgstr "Editar prateleira" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "Perfil de utilizador" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os livros" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s livro" msgstr[1] "%(formatted_count)s livros" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(a exibir %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Editar prateleira" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Apagar prateleira" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Arquivado" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Iniciado" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "ConcluĆ­do" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "AtĆ©" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Esta prateleira estĆ” vazia." @@ -6248,6 +6359,10 @@ msgstr "Leste %(read_count)s de %(goal_count)s livros." msgid "%(username)s has read %(read_count)s of %(goal_count)s books." msgstr "%(username)s leu %(read_count)s de %(goal_count)s livros." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6504,35 @@ msgstr "Parar de ler" msgid "Finish reading" msgstr "Terminar leitura" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Mostrar o estado" -#: 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 "Abrir imagem numa nova janela" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Ocultar estado" @@ -6609,10 +6724,14 @@ msgid "Groups: %(username)s" msgstr "Grupos: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "SolicitaƧƵes para seguir" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6746,12 @@ msgstr "Listas: %(username)s" msgid "Create list" msgstr "Criar lista" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "Juntou-se em %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6823,6 @@ msgstr "Apenas comentĆ”rios" msgid "No activities yet!" msgstr "Ainda sem atividade!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "Juntou-se em %(date)s" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6730,10 +6850,6 @@ msgstr "NĆ£o hĆ” seguidores que tu segues" msgid "View profile and more" msgstr "Visualizar perfil e mais" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Terminar sessĆ£o" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "Ficheiro excede o tamanho mĆ”ximo: 10MB" @@ -6750,7 +6866,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/ro_RO/LC_MESSAGES/django.mo b/locale/ro_RO/LC_MESSAGES/django.mo index 7aa5899d19d92c606ad6941aff77df8c2a7c9863..1adb9470a35d5c9d6da68b6e5ed77cd89c5f1a06 100644 GIT binary patch delta 26468 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 F`ag(O*M9&2 delta 26604 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 diff --git a/locale/ro_RO/LC_MESSAGES/django.po b/locale/ro_RO/LC_MESSAGES/django.po index 54e13162c..ae743b734 100644 --- a/locale/ro_RO/LC_MESSAGES/django.po +++ b/locale/ro_RO/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-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-02 22:29\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Romanian\n" "Language: ro\n" @@ -42,15 +42,15 @@ msgstr "{i} utilizări" msgid "Unlimited" msgstr "Nelimitat" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Parolă incorectă" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Parola nu se potrivește" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "" @@ -102,8 +102,8 @@ msgstr "Ordonează după listă" msgid "Book Title" msgstr "Titlul cărții" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Rating" @@ -145,7 +145,7 @@ msgstr "Pericol" msgid "Automatically generated report" msgstr "Raport generat automat" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Șters de moderator" msgid "Domain block" msgstr "Blocat de domeniu" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Carte audio" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "Carte digitală" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Roman grafic" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Copertă dură" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Broșură" @@ -205,26 +205,26 @@ msgstr "Federat" msgid "Blocked" msgstr "Blocat" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nu este un remote_id valid" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nu este un nume de utilizator valid" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nume de utilizator" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "Un utilizator cu acel nume există deja." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Un utilizator cu acel nume există deja." msgid "Public" msgstr "Public" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Public" msgid "Unlisted" msgstr "Nelistat" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Nelistat" msgid "Followers" msgstr "Urmăritori" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Urmăritori" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Activ" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Eroare la Ć®ncărcarea cărții" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Nu a putut fi găsită o potrivire pentru carte" @@ -368,103 +368,103 @@ msgstr "Citate" msgid "Everything else" msgstr "Orice altceva" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Friză cronologică principală" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Acasă" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Friză cronologică de cărți" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Cărți" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "English (engleză)" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (catalană)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutsch (germană)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (spaniolă)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (galiciană)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (italiană)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (finlandeză)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧais (franceză)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (lituaniană)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (norvegiană)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (portugheză braziliană)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (portugheză europeană)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (romĆ¢nă)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (suedeză)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (chineză simplificată)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (chineză tradițională)" @@ -575,7 +575,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 +682,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 +772,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 +801,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" @@ -963,19 +959,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 +1048,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Liste" @@ -1123,8 +1119,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 +1330,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:162 msgid "Cover" msgstr "Copertă" @@ -1535,22 +1531,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 +1554,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 "" @@ -1593,7 +1589,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Ne pare rău! Nu am putut găsi acel cod." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "Cod de confirmare:" @@ -1687,6 +1683,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 +1760,7 @@ msgstr "%(username)s a citat 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Deconectați-vă" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3760,6 +3779,16 @@ msgstr "%(related_user)s v-a menționat Ć® msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s v-a menționat Ć®ntr-o stare" +#: 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\"" @@ -3799,7 +3828,7 @@ msgstr[1] "" msgstr[2] "%(display_count)s noi rapoarte au nevoie de moderare" #: 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 "Avertisment de conținut" @@ -4017,9 +4046,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 "Utilizatori blocați" @@ -4049,7 +4120,7 @@ msgstr "Parolă nouă:" #: 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 "Ștergeți cont" @@ -4171,18 +4242,45 @@ msgstr "Descărcați fișierul" msgid "Account" msgstr "Cont" -#: 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 "Date" -#: 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 "Relații" +#: 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\"" @@ -4592,7 +4690,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4922,19 +5020,19 @@ msgstr "Instanță:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Stare:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Program:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Versiune:" @@ -4947,7 +5045,7 @@ msgid "Details" msgstr "Detalii" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Activitate" @@ -4961,7 +5059,7 @@ msgid "View all" msgstr "Vedeți tot" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Raporturi:" @@ -4978,7 +5076,7 @@ msgid "Blocked by us:" msgstr "Blocat de noi:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Notes" @@ -5698,17 +5796,22 @@ msgstr "Ultima dată activ(ă)" msgid "Remote instance" msgstr "Instanță la distanță" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "Șters" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inactiv" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Neconfigurat" @@ -5720,55 +5823,55 @@ msgstr "Vizualizați profilul utilizatorului" msgid "Go to user admin" msgstr "Mergeți la utilizatorul admin" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "La distanță" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "Detaliile utilizatorului" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "Email:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Vizualizați raporturi)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Blocat după număr:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "Dată adăugată:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Ultima dată de activitate:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Urmăritori aprobați manual:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "Vizibil public:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Motiv de dezactivare:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Detaliile instanței" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Vizualizați instanță" @@ -5906,7 +6009,7 @@ msgid "Need help?" msgstr "Aveți nevoie de ajutor?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Creați un raft" @@ -5914,18 +6017,26 @@ msgstr "Creați un raft" msgid "Edit Shelf" msgstr "Editați raftul" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "Profilul utilizatorului" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Toate cărțile" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -5933,40 +6044,40 @@ msgstr[0] "%(formatted_count)s carte" msgstr[1] "" msgstr[2] "%(formatted_count)s cărți" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(se afișează %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Editați raft" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Ștergeți raft" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Pusă pe raft" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "Ǝncepută" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Terminată" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "PĆ¢nă la" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Acest raft este gol." @@ -6278,6 +6389,10 @@ msgstr "Ați citit %(read_count)s din %(goal_count)s cărț msgid "%(username)s has read %(read_count)s of %(goal_count)s books." msgstr "%(username)s a citit %(read_count)s din %(goal_count)s cărți." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6419,35 +6534,35 @@ msgstr "Opriți lectura" msgid "Finish reading" msgstr "Terminați de citit" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Arătați stare" -#: 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 "Deshideți imaginea Ć®ntr-o fereastră nouă" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Ascundeți starea" @@ -6639,10 +6754,14 @@ msgid "Groups: %(username)s" msgstr "Grupuri: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "Cereri de urmărire" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6657,6 +6776,12 @@ msgstr "Liste: %(username)s" msgid "Create list" msgstr "Creați listă" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "S-a alăturat %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6728,11 +6853,6 @@ msgstr "" msgid "No activities yet!" msgstr "Ǝncă nicio activitate!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "S-a alăturat %(date)s" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6762,10 +6882,6 @@ msgstr "Niciun urmăritor pe care Ć®l urmărești" msgid "View profile and more" msgstr "Vizualizați profil și multe altele" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Deconectați-vă" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "Fișierul depășește dimensiuneaz maximă: 10Mo" @@ -6783,7 +6899,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index 0086e52597aabd883480676c40cc5a33f57af649..bf045754c81b36aa35f9d6e7925738a4b3df14d2 100644 GIT binary patch delta 29826 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\n" "Language-Team: Swedish\n" "Language: sv\n" @@ -42,15 +42,15 @@ msgstr "{i} anvƤnder" msgid "Unlimited" msgstr "ObegrƤnsad" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "Felaktigt lƶsenord" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "Lƶsenord matchar inte" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "Felaktigt lƶsenord" @@ -102,8 +102,8 @@ msgstr "Listordning" msgid "Book Title" msgstr "Bokens titel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Recension" @@ -145,7 +145,7 @@ msgstr "Fara" msgid "Automatically generated report" msgstr "Automatiskt genererad rapport" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "Borttagning av moderator" msgid "Domain block" msgstr "DomƤnblockering" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "Ljudbok" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "E-bok" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "Grafisk novell" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "Inbunden" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "Pocketbok" @@ -205,26 +205,26 @@ msgstr "Federerad" msgid "Blocked" msgstr "Blockerad" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s Ƥr inte ett giltigt remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s Ƥr inte ett giltigt anvƤndarnamn" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "anvƤndarnamn" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "En anvƤndare med det anvƤndarnamnet finns redan." -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "En anvƤndare med det anvƤndarnamnet finns redan." msgid "Public" msgstr "Publik" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Publik" msgid "Unlisted" msgstr "Ej listad" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Ej listad" msgid "Followers" msgstr "Fƶljare" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "Fƶljare" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "Aktiv" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "Slutfƶrd" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "Avbruten" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "Import avbrƶts" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "Fel uppstod vid inlƤsning av boken" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "Kunde inte hitta en trƤff fƶr boken" @@ -368,103 +368,103 @@ msgstr "Citat" msgid "Everything else" msgstr "Allt annat" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "Tidslinje fƶr Hem" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "Hem" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "Tidslinjer fƶr bƶcker" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "Bƶcker" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "Engelska" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (katalanska)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Tyska (Tysk)" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "Spanska (Spansk)" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (Baskiska)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (Gallisk)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italienska (Italiensk)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Finland (Finska)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "Franska (Fransk)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Litauiska (Litauisk)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norska (Norska)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (polska)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs d Brasil (Brasiliansk Portugisiska)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Europeisk Portugisiska)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RumƤnien (RumƤnska)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (Svenska)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Fƶrenklad Kinesiska)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Traditionell Kinesiska)" @@ -575,7 +575,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 +680,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 +768,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 +797,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" @@ -959,19 +955,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 +1042,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "Listor" @@ -1117,8 +1113,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 +1324,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:162 msgid "Cover" msgstr "Omslag" @@ -1529,22 +1525,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 +1548,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" @@ -1587,7 +1583,7 @@ msgid "Sorry! We couldn't find that code." msgstr "TyvƤrr! Vi kunde inte hitta den dƤr koden." #: bookwyrm/templates/confirm_email/confirm_email.html:19 -#: bookwyrm/templates/settings/users/user_info.html:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "BekrƤftelsekod:" @@ -1681,6 +1677,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 +1752,7 @@ msgstr "%(username)s citerade 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +msgid "Log out" +msgstr "Logga ut" + #: bookwyrm/templates/notifications/items/accept.html:18 #, python-format msgid "%(related_user)s accepted your invitation to join group \"%(group_name)s\"" @@ -3744,6 +3763,16 @@ msgstr "%(related_user)s nƤmnde dig i ett msgid "%(related_user)s mentioned you in a status" msgstr "%(related_user)s nƤmnde dig i en statusuppdatering" +#: 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 +3811,7 @@ msgstr[0] "En ny rapport behƶver moderering" msgstr[1] "%(display_count)s nya rapporter behƶver moderering" #: 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 "InnehĆ„llsvarning" @@ -4000,9 +4029,51 @@ msgstr "BekrƤfta ditt lƶsenord fƶr att pĆ„bƶrja instƤllningen av 2FA." msgid "Set up 2FA" msgstr "StƤll in 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 "Blockerade anvƤndare" @@ -4032,7 +4103,7 @@ msgstr "Nytt lƶsenord:" #: 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 "Ta bort kontot" @@ -4154,18 +4225,45 @@ msgstr "Ladda ner fil" 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 "Data" -#: bookwyrm/templates/preferences/layout.html:39 +#: bookwyrm/templates/preferences/layout.html:47 msgid "CSV export" msgstr "CSV-export" -#: bookwyrm/templates/preferences/layout.html:42 +#: bookwyrm/templates/preferences/layout.html:50 msgid "Relationships" msgstr "FƶrhĆ„llanden" +#: 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 +4672,8 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" -msgstr "SƤndningar" +msgid "Broadcast" +msgstr "" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -4900,19 +4998,19 @@ msgstr "Instans:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" msgstr "Status:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:107 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" msgstr "Programvara:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:110 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "Version:" @@ -4925,7 +5023,7 @@ msgid "Details" msgstr "Detaljer" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "Aktivitet" @@ -4939,7 +5037,7 @@ msgid "View all" msgstr "Visa alla" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "Rapporter:" @@ -4956,7 +5054,7 @@ msgid "Blocked by us:" msgstr "Blockerade av oss:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "Anteckningar" @@ -5676,17 +5774,22 @@ msgstr "Senast aktiv" msgid "Remote instance" msgstr "FjƤrrinstans" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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 "Togs bort" -#: bookwyrm/templates/settings/users/user_admin.html:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "Inaktiv" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "Inte instƤlld" @@ -5698,55 +5801,55 @@ msgstr "Visa anvƤndarens profil" msgid "Go to user admin" msgstr "GĆ„ till anvƤndaradministratƶr" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "Lokal" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "FjƤrr" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "AnvƤndardetaljer" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "E-postadress:" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "(Visa rapporter)" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "Blockerade av antal:" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "TillƤgningsdatum:" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "Senaste aktiva datum:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "Manuellt godkƤnda fƶljare:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "UpptƤckbar:" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "Orsak till inaktivering:" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "Instansens detaljer" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "Visa instansen" @@ -5883,7 +5986,7 @@ msgid "Need help?" msgstr "Behƶver du hjƤlp?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "Skapa hylla" @@ -5891,58 +5994,66 @@ msgstr "Skapa hylla" msgid "Edit Shelf" msgstr "Redigera hylla" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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 "AnvƤndarprofil" -#: bookwyrm/templates/shelf/shelf.html:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alla bƶcker" -#: bookwyrm/templates/shelf/shelf.html:97 +#: bookwyrm/templates/shelf/shelf.html:112 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s bok" msgstr[1] "%(formatted_count)s bƶcker" -#: bookwyrm/templates/shelf/shelf.html:104 +#: bookwyrm/templates/shelf/shelf.html:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(visar %(start)s-%(end)s)" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "Redigera hylla" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "Ta bort hylla" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "Lagd pĆ„ hyllan" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "PĆ„bƶrjade" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "Avslutade" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "Till" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "Den hƤr hyllan Ƥr tom." @@ -6248,6 +6359,10 @@ msgstr "Du har lƤst %(read_count)s av %(goal_count)s bƶck msgid "%(username)s has read %(read_count)s of %(goal_count)s books." msgstr "%(username)s har lƤst %(read_count)s av %(goal_count)s bƶcker." +#: bookwyrm/templates/snippets/move_user_buttons.html:10 +msgid "Follow at new account" +msgstr "" + #: bookwyrm/templates/snippets/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6389,35 +6504,35 @@ msgstr "Sluta lƤs" msgid "Finish reading" msgstr "Sluta lƤs" -#: bookwyrm/templates/snippets/status/content_status.html:80 +#: bookwyrm/templates/snippets/status/content_status.html:69 msgid "Show status" msgstr "Visa status" -#: bookwyrm/templates/snippets/status/content_status.html:102 +#: bookwyrm/templates/snippets/status/content_status.html:91 #, python-format msgid "(Page %(page)s" msgstr "(Sida %(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 "" -#: bookwyrm/templates/snippets/status/content_status.html:127 +#: bookwyrm/templates/snippets/status/content_status.html:116 msgid "Open image in new window" msgstr "Ɩppna bild i nytt fƶnster" -#: bookwyrm/templates/snippets/status/content_status.html:148 +#: bookwyrm/templates/snippets/status/content_status.html:137 msgid "Hide status" msgstr "Gƶm status" @@ -6609,10 +6724,14 @@ msgid "Groups: %(username)s" msgstr "Grupper: %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "FƶljdfƶrfrĆ„gningar" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6627,6 +6746,12 @@ msgstr "Listor: %(username)s" msgid "Create list" msgstr "Skapa lista" +#: bookwyrm/templates/user/moved.html:25 +#: bookwyrm/templates/user/user_preview.html:22 +#, python-format +msgid "Joined %(date)s" +msgstr "Gick med %(date)s" + #: bookwyrm/templates/user/relationships/followers.html:31 #, python-format msgid "%(username)s has no followers" @@ -6698,11 +6823,6 @@ msgstr "Endast kommentarer" msgid "No activities yet!" msgstr "Inga aktiviteter Ƥn!" -#: bookwyrm/templates/user/user_preview.html:22 -#, python-format -msgid "Joined %(date)s" -msgstr "Gick med %(date)s" - #: bookwyrm/templates/user/user_preview.html:26 #, python-format msgid "%(display_count)s follower" @@ -6730,10 +6850,6 @@ msgstr "Inga fƶljare som du fƶljer" msgid "View profile and more" msgstr "Visa profil och mer" -#: bookwyrm/templates/user_menu.html:82 -msgid "Log out" -msgstr "Logga ut" - #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" msgstr "Filen ƶverskrider maximal storlek: 10 MB" @@ -6750,7 +6866,7 @@ msgid_plural "%(num)d books - by %(user)s" msgstr[0] "%(num)d bok - av %(user)s" msgstr[1] "%(num)d bƶcker - av %(user)s" -#: bookwyrm/templatetags/utilities.py:39 +#: bookwyrm/templatetags/utilities.py:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/uk_UA/LC_MESSAGES/django.mo b/locale/uk_UA/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c040fd6e830cb6e6aa48ed77ac999d13ff46f05 GIT binary patch literal 137627 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 e=U?A=?7#o#i_\n" +"Language-Team: Ukrainian\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: bookwyrm\n" +"X-Crowdin-Project-ID: 479239\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /[bookwyrm-social.bookwyrm] main/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 1553\n" + +#: bookwyrm/forms/admin.py:42 +msgid "One Day" +msgstr "ŠžŠ“ŠøŠ½ Š”ŠµŠ½ŃŒ" + +#: bookwyrm/forms/admin.py:43 +msgid "One Week" +msgstr "ŠžŠ“ŠøŠ½ Š¢ŠøŠ¶Š“ŠµŠ½ŃŒ" + +#: bookwyrm/forms/admin.py:44 +msgid "One Month" +msgstr "ŠžŠ“ŠøŠ½ ŠœŃ–ŃŃŃ†ŃŒ" + +#: bookwyrm/forms/admin.py:45 +msgid "Does Not Expire" +msgstr "ŠŠµŠ²ŠøчŠµŃ€ŠæŠ½ŠøŠ¹" + +#: bookwyrm/forms/admin.py:49 +#, python-brace-format +msgid "{i} uses" +msgstr "{i} Š²ŠøŠŗŠ¾Ń€ŠøстŠ°Š½ŃŒ" + +#: bookwyrm/forms/admin.py:50 +msgid "Unlimited" +msgstr "Š‘ŠµŠ· Š¾Š±Š¼ŠµŠ¶ŠµŠ½ŃŒ" + +#: bookwyrm/forms/edit_user.py:104 +msgid "Incorrect password" +msgstr "ŠŠµŠ²Ń–Ń€Š½ŠøŠ¹ ŠæŠ°Ń€Š¾Š»ŃŒ" + +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 +msgid "Password does not match" +msgstr "ŠŸŠ°Ń€Š¾Š»ŃŒ Š½Šµ Š·Š±Ń–Š³Š°Ń”Ń‚ŃŒŃŃ" + +#: bookwyrm/forms/edit_user.py:134 +msgid "Incorrect Password" +msgstr "ŠŠµŠæрŠ°Š²ŠøŠ»ŃŒŠ½ŠøŠ¹ ŠŸŠ°Ń€Š¾Š»ŃŒ" + +#: bookwyrm/forms/forms.py:54 +msgid "Reading finish date cannot be before start date." +msgstr "Š”Š°Ń‚Š° ŠæрŠ¾Ń‡ŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š“Š¾ Š“Š°Ń‚Šø ŠæŠ¾Ń‡Š°Ń‚Šŗу чŠøтŠ°Š½Š½Ń." + +#: bookwyrm/forms/forms.py:59 +msgid "Reading stopped date cannot be before start date." +msgstr "Š”Š°Ń‚Š° Š·ŃƒŠæŠøŠ½ŠŗŠø чŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø рŠ°Š½Ń–ŃˆŠµ Š“Š°Ń‚Šø ŠæŠ¾Ń‡Š°Ń‚Šŗу." + +#: bookwyrm/forms/forms.py:67 +msgid "Reading stopped date cannot be in the future." +msgstr "Š”Š°Ń‚Š° Š·ŃƒŠæŠøŠ½ŠŗŠø чŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š² Š¼Š°Š¹Š±ŃƒŃ‚Š½ŃŒŠ¾Š¼Ńƒ." + +#: bookwyrm/forms/forms.py:74 +msgid "Reading finished date cannot be in the future." +msgstr "Š”Š°Ń‚Š° ŠæрŠ¾Ń‡ŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š² Š¼Š°Š¹Š±ŃƒŃ‚Š½ŃŒŠ¾Š¼Ńƒ." + +#: bookwyrm/forms/landing.py:38 +msgid "Username or password are incorrect" +msgstr "Š†Š¼ā€™Ń ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° Š°Š±Š¾ ŠæŠ°Ń€Š¾Š»ŃŒ Š½ŠµŠ²Ń–Ń€Š½Ń–" + +#: bookwyrm/forms/landing.py:57 +msgid "User with this username already exists" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡ Š· тŠ°ŠŗŠøŠ¼ іŠ¼'яŠ¼ Š²Š¶Šµ ісŠ½ŃƒŃ”" + +#: bookwyrm/forms/landing.py:66 +msgid "A user with this email already exists." +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡ іŠ· цією ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Š¾ŃŽ Š°Š“рŠµŃŠ¾ŃŽ Š²Š¶Šµ ісŠ½ŃƒŃ”." + +#: bookwyrm/forms/landing.py:124 bookwyrm/forms/landing.py:132 +msgid "Incorrect code" +msgstr "ŠŠµŠæрŠ°Š²ŠøŠ»ŃŒŠ½ŠøŠ¹ ŠŗŠ¾Š“" + +#: bookwyrm/forms/links.py:36 +msgid "This domain is blocked. Please contact your administrator if you think this is an error." +msgstr "Š¦ŠµŠ¹ Š“Š¾Š¼ŠµŠ½ Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾. Š—Š²ŠµŃ€Š½Ń–Ń‚ŃŒŃŃ Š“Š¾ Š°Š“Š¼Ń–Š½Ń–стрŠ°Ń‚Š¾Ń€Š°, яŠŗщŠ¾ Š²Šø Š²Š²Š°Š¶Š°Ń”Ń‚Šµ цŠµ ŠæŠ¾Š¼ŠøŠ»ŠŗŠ¾ŃŽ." + +#: bookwyrm/forms/links.py:49 +msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending." +msgstr "Š¦Šµ ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° фŠ°Š¹Š» Š²Š¶Šµ Š±ŃƒŠ»Š¾ Š“Š¾Š“Š°Š½Š¾ Š“Š»Ń цієї ŠŗŠ½ŠøŠ³Šø. ŠÆŠŗщŠ¾ Š²Š¾Š½Š¾ Š½Šµ Š²Ń–Š“Š¾Š±Ń€Š°Š¶ŃƒŃ”Ń‚ŃŒŃŃ, Š“Š¾Š¼ŠµŠ½ Š²ŃŠµ щŠµ ŠæŠµŃ€ŠµŠ²Ń–Ń€ŃŃ”Ń‚ŃŒŃŃ." + +#: bookwyrm/forms/lists.py:26 +msgid "List Order" +msgstr "ŠŸŠ¾Ń€ŃŠ“ŠŗŠ¾Š¼" + +#: bookwyrm/forms/lists.py:27 +msgid "Book Title" +msgstr "ŠŠ°Š·Š²Š¾ŃŽ ŠŗŠ½ŠøŠ³Šø" + +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/templates/snippets/create_status/review.html:32 +msgid "Rating" +msgstr "Š ŠµŠ¹Ń‚ŠøŠ½Š³Š¾Š¼" + +#: bookwyrm/forms/lists.py:30 bookwyrm/templates/lists/list.html:185 +msgid "Sort By" +msgstr "Š”Š¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø Š·Š°" + +#: bookwyrm/forms/lists.py:34 +msgid "Ascending" +msgstr "Š—Š° Š·Ń€Š¾ŃŃ‚Š°Š½Š½ŃŠ¼" + +#: bookwyrm/forms/lists.py:35 +msgid "Descending" +msgstr "Š—Š° сŠæŠ°Š“Š°Š½Š½ŃŠ¼" + +#: bookwyrm/models/announcement.py:11 +msgid "Primary" +msgstr "ŠžŃŠ½Š¾Š²Š½ŠøŠ¹" + +#: bookwyrm/models/announcement.py:12 +msgid "Success" +msgstr "Š£ŃŠæіх" + +#: bookwyrm/models/announcement.py:13 +#: bookwyrm/templates/settings/invites/manage_invites.html:47 +msgid "Link" +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń" + +#: bookwyrm/models/announcement.py:14 +msgid "Warning" +msgstr "Š£Š²Š°Š³Š°" + +#: bookwyrm/models/announcement.py:15 +msgid "Danger" +msgstr "ŠŠµŠ±ŠµŠ·ŠæŠµŠŗŠ°" + +#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +msgid "Automatically generated report" +msgstr "ŠŠ²Ń‚Š¾Š¼Š°Ń‚ŠøчŠ½Š¾ Š·Š³ŠµŠ½ŠµŃ€Š¾Š²Š°Š½ŠøŠ¹ Š·Š²Ń–Ń‚" + +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 +#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/templates/settings/link_domains/link_domains.html:19 +msgid "Pending" +msgstr "ŠŸŠµŃ€ŠµŠ²Ń–Ń€ŃŃ”Ń‚ŃŒŃŃ" + +#: bookwyrm/models/base_model.py:19 +msgid "Self deletion" +msgstr "Š”Š°Š¼Š¾Š²ŠøŠ“Š°Š»ŠµŠ½Š½Ń" + +#: bookwyrm/models/base_model.py:20 +msgid "Self deactivation" +msgstr "Š”Š°Š¼Š¾Š“ŠµŠ°ŠŗтŠøŠ²Š°Ń†Ń–я" + +#: bookwyrm/models/base_model.py:21 +msgid "Moderator suspension" +msgstr "ŠŸŃ€ŠøŠ·ŃƒŠæŠøŠ½ŠµŠ½Š½Ń Š¼Š¾Š“ŠµŃ€Š°Ń‚Š¾Ń€Š¾Š¼" + +#: bookwyrm/models/base_model.py:22 +msgid "Moderator deletion" +msgstr "Š’ŠøŠ“Š°Š»ŠµŠ½Š½Ń Š¼Š¾Š“ŠµŃ€Š°Ń‚Š¾Ń€Š¾Š¼" + +#: bookwyrm/models/base_model.py:23 +msgid "Domain block" +msgstr "Š”Š¾Š¼ŠµŠ½ Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾" + +#: bookwyrm/models/book.py:282 +msgid "Audiobook" +msgstr "ŠŃƒŠ“іŠ¾ŠŗŠ½ŠøŠ³Š°" + +#: bookwyrm/models/book.py:283 +msgid "eBook" +msgstr "Š•Š»ŠµŠŗтрŠ¾Š½Š½Š° ŠŗŠ½ŠøŠ³Š°" + +#: bookwyrm/models/book.py:284 +msgid "Graphic novel" +msgstr "Š“Ń€Š°Ń„ічŠ½ŠøŠ¹ рŠ¾Š¼Š°Š½" + +#: bookwyrm/models/book.py:285 +msgid "Hardcover" +msgstr "Š¢Š²ŠµŃ€Š“Š° Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½ŠŗŠ°" + +#: bookwyrm/models/book.py:286 +msgid "Paperback" +msgstr "Šœ'яŠŗŠ° Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½ŠŗŠ°" + +#: bookwyrm/models/federated_server.py:11 +#: bookwyrm/templates/settings/federation/edit_instance.html:55 +#: bookwyrm/templates/settings/federation/instance_list.html:22 +msgid "Federated" +msgstr "Š¤ŠµŠ“ŠµŃ€ŃƒŃŽŃ‚ŃŒŃŃ" + +#: bookwyrm/models/federated_server.py:12 bookwyrm/models/link.py:71 +#: bookwyrm/templates/settings/federation/edit_instance.html:56 +#: bookwyrm/templates/settings/federation/instance.html:10 +#: bookwyrm/templates/settings/federation/instance_list.html:26 +#: bookwyrm/templates/settings/link_domains/link_domains.html:27 +msgid "Blocked" +msgstr "Š—Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Ń–" + +#: bookwyrm/models/fields.py:30 +#, python-format +msgid "%(value)s is not a valid remote_id" +msgstr "%(value)s Š½Šµ є Š“іŠ¹ŃŠ½ŠøŠ¼ remote_id" + +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#, python-format +msgid "%(value)s is not a valid username" +msgstr "%(value)s Š½Šµ є Š“іŠ¹ŃŠ½ŠøŠ¼ іŠ¼ŠµŠ½ŠµŠ¼ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/templates/ostatus/error.html:29 +msgid "username" +msgstr "іŠ¼'я ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/models/fields.py:198 +msgid "A user with that username already exists." +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡ іŠ· тŠ°ŠŗŠøŠ¼ іŠ¼'яŠ¼ Š²Š¶Šµ ісŠ½ŃƒŃ”." + +#: bookwyrm/models/fields.py:217 +#: bookwyrm/templates/snippets/privacy-icons.html:3 +#: bookwyrm/templates/snippets/privacy-icons.html:4 +#: bookwyrm/templates/snippets/privacy_select.html:11 +#: bookwyrm/templates/snippets/privacy_select_no_followers.html:11 +msgid "Public" +msgstr "Š‘Š°Ń‡ŃƒŃ‚ŃŒ усі" + +#: bookwyrm/models/fields.py:218 +#: bookwyrm/templates/snippets/privacy-icons.html:7 +#: bookwyrm/templates/snippets/privacy-icons.html:8 +#: bookwyrm/templates/snippets/privacy_select.html:14 +#: bookwyrm/templates/snippets/privacy_select_no_followers.html:14 +msgid "Unlisted" +msgstr "Š¢Ń–Š»ŃŒŠŗŠø ŠæŠ¾ ŠæŠ¾ŃŠøŠ»Š°Š½Š½ŃŽ" + +#: bookwyrm/models/fields.py:219 +#: bookwyrm/templates/snippets/privacy_select.html:17 +#: bookwyrm/templates/user/relationships/followers.html:6 +#: bookwyrm/templates/user/relationships/followers.html:11 +#: bookwyrm/templates/user/relationships/followers.html:21 +#: bookwyrm/templates/user/relationships/layout.html:11 +msgid "Followers" +msgstr "Š‘Š°Ń‡Š°Ń‚ŃŒ тіŠ»ŃŒŠŗŠø ŠæіŠ“ŠæŠøсŠ½ŠøŠŗŠø" + +#: bookwyrm/models/fields.py:220 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:6 +#: bookwyrm/templates/snippets/privacy-icons.html:15 +#: bookwyrm/templates/snippets/privacy-icons.html:16 +#: bookwyrm/templates/snippets/privacy_select.html:20 +#: bookwyrm/templates/snippets/privacy_select_no_followers.html:17 +msgid "Private" +msgstr "ŠŠµ Š±Š°Ń‡Šøть Š½Ń–Ń…Ń‚Š¾" + +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 +#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 +msgid "Active" +msgstr "Š’ ŠæрŠ¾Ń†ŠµŃŃ–" + +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +msgid "Complete" +msgstr "Š—Š°Š²ŠµŃ€ŃˆŠµŠ½Š¾" + +#: bookwyrm/models/import_job.py:51 +msgid "Stopped" +msgstr "Š—ŃƒŠæŠøŠ½ŠµŠ½Š¾" + +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 +msgid "Import stopped" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ Š·ŃƒŠæŠøŠ½ŠµŠ½Š¾" + +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 +msgid "Error loading book" +msgstr "ŠŸŠ¾Š¼ŠøŠ»ŠŗŠ° ŠæрŠø Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠµŠ½Š½Ń– ŠŗŠ½ŠøŠ³Šø" + +#: bookwyrm/models/import_job.py:365 +msgid "Could not find a match for book" +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ Š·Š½Š°Š¹Ń‚Šø Š²Ń–Š“ŠæŠ¾Š²Ń–Š“Š½Ńƒ ŠŗŠ½ŠøŠ³Ńƒ" + +#: bookwyrm/models/link.py:51 +msgid "Free" +msgstr "Š‘ŠµŠ·ŠæŠ»Š°Ń‚Š½Š¾" + +#: bookwyrm/models/link.py:52 +msgid "Purchasable" +msgstr "ŠœŠ¾Š¶Š½Š° ŠæрŠøŠ“Š±Š°Ń‚Šø" + +#: bookwyrm/models/link.py:53 +msgid "Available for loan" +msgstr "Š”Š¾ŃŃ‚ŃƒŠæŠ½Š¾ Š“Š»Ń ŠæŠ¾Š·ŠøŠŗŠø" + +#: bookwyrm/models/link.py:70 +#: bookwyrm/templates/settings/link_domains/link_domains.html:23 +msgid "Approved" +msgstr "Š”хŠ²Š°Š»ŠµŠ½Š¾" + +#: bookwyrm/models/report.py:84 +#: bookwyrm/templates/settings/reports/report.html:115 +#: bookwyrm/templates/snippets/create_status.html:26 +msgid "Comment" +msgstr "ŠŸŃ€Š¾ŠŗŠ¾Š¼ŠµŠ½Ń‚ŃƒŠ²Š°Ń‚Šø" + +#: bookwyrm/models/report.py:85 +msgid "Resolved report" +msgstr "" + +#: bookwyrm/models/report.py:86 +msgid "Re-opened report" +msgstr "" + +#: bookwyrm/models/report.py:87 +msgid "Messaged reporter" +msgstr "" + +#: bookwyrm/models/report.py:88 +msgid "Messaged reported user" +msgstr "" + +#: bookwyrm/models/report.py:89 +msgid "Suspended user" +msgstr "" + +#: bookwyrm/models/report.py:90 +msgid "Un-suspended user" +msgstr "" + +#: bookwyrm/models/report.py:91 +msgid "Changed user permission level" +msgstr "" + +#: bookwyrm/models/report.py:92 +msgid "Deleted user account" +msgstr "" + +#: bookwyrm/models/report.py:93 +msgid "Blocked domain" +msgstr "" + +#: bookwyrm/models/report.py:94 +msgid "Approved domain" +msgstr "" + +#: bookwyrm/models/report.py:95 +msgid "Deleted item" +msgstr "" + +#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +msgid "Reviews" +msgstr "Š ŠµŃ†ŠµŠ½Š·Ń–Ń—" + +#: bookwyrm/models/user.py:33 +msgid "Comments" +msgstr "ŠšŠ¾Š¼ŠµŠ½Ń‚Š°Ń€Ń–" + +#: bookwyrm/models/user.py:34 +msgid "Quotations" +msgstr "Š¦ŠøтŠ°Ń‚Šø" + +#: bookwyrm/models/user.py:35 +msgid "Everything else" +msgstr "Š’сŠµ іŠ½ŃˆŠµ" + +#: bookwyrm/settings.py:230 +msgid "Home Timeline" +msgstr "Š“Š¾Š»Š¾Š²Š½Š° Š”трічŠŗŠ°" + +#: bookwyrm/settings.py:230 +msgid "Home" +msgstr "Š“Š¾Š»Š¾Š²Š½Š°" + +#: bookwyrm/settings.py:231 +msgid "Books Timeline" +msgstr "ŠšŠ½ŠøŠ¶ŠŗŠ¾Š²Š° Š”трічŠŗŠ°" + +#: bookwyrm/settings.py:231 +#: bookwyrm/templates/guided_tour/user_profile.html:101 +#: bookwyrm/templates/search/layout.html:22 +#: bookwyrm/templates/search/layout.html:43 +#: bookwyrm/templates/user/layout.html:112 +msgid "Books" +msgstr "ŠšŠ½ŠøŠ³Šø" + +#: bookwyrm/settings.py:303 +msgid "English" +msgstr "ŠŠ½Š³Š»Ń–Š¹ŃŃŒŠŗŠ°" + +#: bookwyrm/settings.py:304 +msgid "CatalĆ  (Catalan)" +msgstr "CatalĆ  (ŠšŠ°Ń‚Š°Š»Š¾Š½ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:305 +msgid "Deutsch (German)" +msgstr "Deutsch (ŠŃ–Š¼ŠµŃ†ŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:306 +msgid "Esperanto (Esperanto)" +msgstr "Esperanto (Š•ŃŠæŠµŃ€Š°Š½Ń‚Š¾)" + +#: bookwyrm/settings.py:307 +msgid "EspaƱol (Spanish)" +msgstr "EspaƱol (Š†ŃŠæŠ°Š½ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:308 +msgid "Euskara (Basque)" +msgstr "Euskara (Š‘Š°ŃŠŗсьŠŗŠ°)" + +#: bookwyrm/settings.py:309 +msgid "Galego (Galician)" +msgstr "Galego (Š“Š°Š»Ń–сіŠ¹ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:310 +msgid "Italiano (Italian)" +msgstr "Italiano (Š†Ń‚Š°Š»Ń–Š¹ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:311 +msgid "Suomi (Finnish)" +msgstr "Suomi (Š¤Ń–Š½ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:312 +msgid "FranƧais (French)" +msgstr "FranƧais (Š¤Ń€Š°Š½Ń†ŃƒŠ·ŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:313 +msgid "Lietuvių (Lithuanian)" +msgstr "Lietuvių (Š›ŠøтŠ¾Š²ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:314 +msgid "Nederlands (Dutch)" +msgstr "" + +#: bookwyrm/settings.py:315 +msgid "Norsk (Norwegian)" +msgstr "Norsk (ŠŠ¾Ń€Š²ŠµŠ·ŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:316 +msgid "Polski (Polish)" +msgstr "Polski (ŠŸŠ¾Š»ŃŒŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:317 +msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" +msgstr "PortuguĆŖs do Brasil (Š‘Ń€Š°Š·ŠøŠ»ŃŒŃŃŒŠŗŠ° ŠæŠ¾Ń€Ń‚ŃƒŠ³Š°Š»ŃŒŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:318 +msgid "PortuguĆŖs Europeu (European Portuguese)" +msgstr "PortuguĆŖs Europeu (Š„Š²Ń€Š¾ŠæŠµŠ¹ŃŃŒŠŗŠ° ŠæŠ¾Ń€Ń‚ŃƒŠ³Š°Š»ŃŒŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:319 +msgid "RomĆ¢nă (Romanian)" +msgstr "RomĆ¢nă (Š ŃƒŠ¼ŃƒŠ½ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:320 +msgid "Svenska (Swedish)" +msgstr "Svenska (ŠØŠ²ŠµŠ“сьŠŗŠ°)" + +#: bookwyrm/settings.py:321 +msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" +msgstr "ē®€ä½“äø­ę–‡ (Š”ŠæрŠ¾Ń‰ŠµŠ½Š° ŠŗŠøтŠ°Š¹ŃŃŒŠŗŠ°)" + +#: bookwyrm/settings.py:322 +msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" +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/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:67 +msgid "Admin" +msgstr "ŠŠ“Š¼Ń–Š½Ń–стрŠ°Ń‚Š¾Ń€" + +#: bookwyrm/templates/about/about.html:140 +#: bookwyrm/templates/settings/users/user_moderation_actions.html:14 +#: 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
    for a total of %(pages_total)s pages!" +msgid_plural "In %(year)s, %(display_name)s read %(books_total)s books
    for a total of %(pages_total)s pages!" +msgstr[0] "Š£ %(year)s, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼ %(display_name)s Š±ŃƒŠ»Š° ŠæрŠ¾Ń‡ŠøтŠ°Š½Š° %(books_total)s ŠŗŠ½ŠøŠ³Š°
    Š°Š±Š¾ %(pages_total)s стŠ¾Ń€Ń–Š½Š¾Šŗ Š·Š°Š³Š°Š»Š¾Š¼!" +msgstr[1] "Š£ %(year)s, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼ %(display_name)s Š±ŃƒŠ»Š¾ ŠæрŠ¾Ń‡ŠøтŠ°Š½Š¾ %(books_total)s ŠŗŠ½ŠøŠ³Šø
    Š°Š±Š¾ %(pages_total)s стŠ¾Ń€Ń–Š½Š¾Šŗ Š·Š°Š³Š°Š»Š¾Š¼!" +msgstr[2] "Š£ %(year)s, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼ %(display_name)s Š±ŃƒŠ»Š¾ ŠæрŠ¾Ń‡ŠøтŠ°Š½Š¾ %(books_total)s ŠŗŠ½ŠøŠ³
    Š°Š±Š¾ %(pages_total)s стŠ¾Ń€Ń–Š½Š¾Šŗ Š·Š°Š³Š°Š»Š¾Š¼!" +msgstr[3] "Š£ %(year)s, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼ %(display_name)s Š±ŃƒŠ»Š¾ ŠæрŠ¾Ń‡ŠøтŠ°Š½Š¾ %(books_total)s ŠŗŠ½ŠøŠ³
    Š°Š±Š¾ %(pages_total)s стŠ¾Ń€Ń–Š½Š¾Šŗ Š·Š°Š³Š°Š»Š¾Š¼!" + +#: bookwyrm/templates/annual_summary/layout.html:124 +msgid "Thatā€™s great!" +msgstr "Š§ŃƒŠ“Š¾Š²Š¾!" + +#: bookwyrm/templates/annual_summary/layout.html:128 +#, python-format +msgid "That makes an average of %(pages)s pages per book." +msgstr "Š¦Šµ стŠ°Š½Š¾Š²Šøть Š² сŠµŃ€ŠµŠ“Š½ŃŒŠ¾Š¼Ńƒ %(pages)s стŠ¾Ń€Ń–Š½Š¾Šŗ Š½Š° ŠŗŠ½ŠøŠ³Ńƒ." + +#: bookwyrm/templates/annual_summary/layout.html:134 +#, python-format +msgid "(No page data was available for %(no_page_number)s book)" +msgid_plural "(No page data was available for %(no_page_number)s books)" +msgstr[0] "(Š”Š°Š½Ń– ŠæрŠ¾ ŠŗіŠ»ŃŒŠŗість стŠ¾Ń€Ń–Š½Š¾Šŗ Š½Šµ Š±ŃƒŠ»Š¾ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ Š“Š»Ń %(no_page_number)s ŠŗŠ½ŠøŠ³Šø)" +msgstr[1] "(Š”Š°Š½Ń– ŠæрŠ¾ ŠŗіŠ»ŃŒŠŗість стŠ¾Ń€Ń–Š½Š¾Šŗ Š½Šµ Š±ŃƒŠ»Š¾ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ Š“Š»Ń %(no_page_number)s ŠŗŠ½ŠøŠ³)" +msgstr[2] "(Š”Š°Š½Ń– ŠæрŠ¾ ŠŗіŠ»ŃŒŠŗість стŠ¾Ń€Ń–Š½Š¾Šŗ Š½Šµ Š±ŃƒŠ»Š¾ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ Š“Š»Ń %(no_page_number)s ŠŗŠ½ŠøŠ³)" +msgstr[3] "(Š”Š°Š½Ń– ŠæрŠ¾ ŠŗіŠ»ŃŒŠŗість стŠ¾Ń€Ń–Š½Š¾Šŗ Š½Šµ Š±ŃƒŠ»Š¾ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ Š“Š»Ń %(no_page_number)s ŠŗŠ½ŠøŠ³)" + +#: bookwyrm/templates/annual_summary/layout.html:150 +msgid "Their shortest read this yearā€¦" +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:65 +#: bookwyrm/templates/discover/large-book.html:22 +#: bookwyrm/templates/landing/large-book.html:26 +#: bookwyrm/templates/landing/small-book.html:18 +msgid "by" +msgstr "Š²Ń–Š“" + +#: bookwyrm/templates/annual_summary/layout.html:163 +#: bookwyrm/templates/annual_summary/layout.html:184 +#, python-format +msgid "%(pages)s pages" +msgstr "%(pages)s стŠ¾Ń€Ń–Š½Š¾Šŗ" + +#: bookwyrm/templates/annual_summary/layout.html:171 +msgid "ā€¦and the longest" +msgstr "ā€¦Ń– Š½Š°Š¹Š“Š¾Š²ŃˆŠøŠ¹" + +#: bookwyrm/templates/annual_summary/layout.html:202 +#, python-format +msgid "%(display_name)s set a goal of reading %(goal)s book in %(year)s,
    and achieved %(goal_percent)s%% of that goal" +msgid_plural "%(display_name)s set a goal of reading %(goal)s books in %(year)s,
    and achieved %(goal_percent)s%% of that goal" +msgstr[0] "%(display_name)s Š²ŃŃ‚Š°Š½Š¾Š²ŠøŠ²(-Š»Š°) ціŠ»ŃŒ ŠæрŠ¾Ń‡ŠøтŠ°Ń‚Šø %(goal)s ŠŗŠ½ŠøŠ³Ńƒ Š² %(year)s,
    і Š“Š¾ŃŃŠ³(-Š»Š°) %(goal_percent)s%% Š²Ń–Š“ цієї Š¼ŠµŃ‚Šø" +msgstr[1] "%(display_name)s Š²ŃŃ‚Š°Š½Š¾Š²ŠøŠ²(-Š»Š°) ціŠ»ŃŒ ŠæрŠ¾Ń‡ŠøтŠ°Ń‚Šø %(goal)s ŠŗŠ½ŠøŠ³Šø Š² %(year)s,
    і Š“Š¾ŃŃŠ³(-Š»Š°) %(goal_percent)s%% Š²Ń–Š“ цієї Š¼ŠµŃ‚Šø" +msgstr[2] "%(display_name)s Š²ŃŃ‚Š°Š½Š¾Š²ŠøŠ²(-Š»Š°) ціŠ»ŃŒ ŠæрŠ¾Ń‡ŠøтŠ°Ń‚Šø %(goal)s ŠŗŠ½ŠøŠ³Šø Š² %(year)s,
    і Š“Š¾ŃŃŠ³(-Š»Š°) %(goal_percent)s%% Š²Ń–Š“ цієї Š¼ŠµŃ‚Šø" +msgstr[3] "%(display_name)s Š²ŃŃ‚Š°Š½Š¾Š²ŠøŠ²(-Š»Š°) ціŠ»ŃŒ ŠæрŠ¾Ń‡ŠøтŠ°Ń‚Šø %(goal)s ŠŗŠ½ŠøŠ³Šø Š² %(year)s,
    і Š“Š¾ŃŃŠ³(-Š»Š°) %(goal_percent)s%% Š²Ń–Š“ цієї Š¼ŠµŃ‚Šø" + +#: bookwyrm/templates/annual_summary/layout.html:211 +msgid "Way to go!" +msgstr "Š¢Š°Šŗ трŠøŠ¼Š°Ń‚Šø!" + +#: bookwyrm/templates/annual_summary/layout.html:226 +#, python-format +msgid "%(display_name)s left %(ratings_total)s rating,
    their average rating is %(rating_average)s" +msgid_plural "%(display_name)s left %(ratings_total)s ratings,
    their average rating is %(rating_average)s" +msgstr[0] "%(display_name)s Š·Š°Š»ŠøшŠøŠ²(-Š»Š°) %(ratings_total)s Š¾Ń†Ń–Š½Šŗу,
    Š²Š¾Š½Š° Š“Š¾Ń€Ń–Š²Š½ŃŽŃ” %(rating_average)s" +msgstr[1] "%(display_name)s Š·Š°Š»ŠøшŠøŠ²(-Š»Š°) %(ratings_total)s Š¾Ń†Ń–Š½Š¾Šŗ,
    їх сŠµŃ€ŠµŠ“Š½Ń” Š·Š½Š°Ń‡ŠµŠ½Š½Ń - %(rating_average)s" +msgstr[2] "%(display_name)s Š·Š°Š»ŠøшŠøŠ²(-Š»Š°) %(ratings_total)s Š¾Ń†Ń–Š½Š¾Šŗ,
    їх сŠµŃ€ŠµŠ“Š½Ń” Š·Š½Š°Ń‡ŠµŠ½Š½Ń - %(rating_average)s" +msgstr[3] "%(display_name)s Š·Š°Š»ŠøшŠøŠ²(-Š»Š°) %(ratings_total)s Š¾Ń†Ń–Š½Š¾Šŗ,
    їх сŠµŃ€ŠµŠ“Š½Ń” Š·Š½Š°Ń‡ŠµŠ½Š½Ń - %(rating_average)s" + +#: bookwyrm/templates/annual_summary/layout.html:240 +msgid "Their best rated review" +msgstr "Š‡Ń… Š½Š°Š¹ŠŗрŠ°Ń‰Š° рŠµŃ†ŠµŠ½Š·Ń–я" + +#: bookwyrm/templates/annual_summary/layout.html:253 +#, python-format +msgid "Their rating: %(rating)s" +msgstr "Š‡Ń…Š½Ń–Š¹ рŠµŠ¹Ń‚ŠøŠ½Š³: %(rating)s" + +#: bookwyrm/templates/annual_summary/layout.html:270 +#, python-format +msgid "All the books %(display_name)s read in %(year)s" +msgstr "Š’сі ŠŗŠ½ŠøŠ¶ŠŗŠø %(display_name)s ŠæрŠ¾Ń‡ŠøтŠ°Š½Ń– Š² %(year)s" + +#: bookwyrm/templates/author/author.html:19 +#: bookwyrm/templates/author/author.html:20 +msgid "Edit Author" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø ŠŠ²Ń‚Š¾Ń€Š°" + +#: bookwyrm/templates/author/author.html:36 +msgid "Author details" +msgstr "ŠŸŠ¾Š“рŠ¾Š±Šøці ŠæрŠ¾ Š°Š²Ń‚Š¾Ń€Š°" + +#: bookwyrm/templates/author/author.html:40 +#: bookwyrm/templates/author/edit_author.html:42 +msgid "Aliases:" +msgstr "ŠŸŃŠµŠ²Š“Š¾Š½Ń–Š¼Šø:" + +#: bookwyrm/templates/author/author.html:49 +msgid "Born:" +msgstr "Š”Š°Ń‚Š° Š½Š°Ń€Š¾Š“Š¶ŠµŠ½Š½Ń:" + +#: bookwyrm/templates/author/author.html:56 +msgid "Died:" +msgstr "Š”Š°Ń‚Š° сŠ¼ŠµŃ€Ń‚Ń–:" + +#: bookwyrm/templates/author/author.html:66 +msgid "External links" +msgstr "Š—Š¾Š²Š½Ń–ŃˆŠ½Ń– ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń" + +#: bookwyrm/templates/author/author.html:71 +msgid "Wikipedia" +msgstr "Š’Ń–ŠŗіŠæŠµŠ“ія" + +#: bookwyrm/templates/author/author.html:79 +msgid "Website" +msgstr "Š’ŠµŠ±ŃŠ°Š¹Ń‚" + +#: bookwyrm/templates/author/author.html:87 +msgid "View ISNI record" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š·Š°ŠæŠøс ISNI" + +#: bookwyrm/templates/author/author.html:95 +#: 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:142 +#: bookwyrm/templates/book/sync_modal.html:5 +msgid "Load data" +msgstr "Š—Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š“Š°Š½Š½Ń–" + +#: bookwyrm/templates/author/author.html:104 +#: bookwyrm/templates/book/book.html:146 +msgid "View on OpenLibrary" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š½Š° OpenLibrary" + +#: bookwyrm/templates/author/author.html:119 +#: bookwyrm/templates/book/book.html:160 +msgid "View on Inventaire" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š½Š° Inventaire" + +#: bookwyrm/templates/author/author.html:135 +msgid "View on LibraryThing" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š½Š° LibraryThing" + +#: bookwyrm/templates/author/author.html:143 +msgid "View on Goodreads" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š½Š° Goodreads" + +#: bookwyrm/templates/author/author.html:158 +#, python-format +msgid "Books by %(name)s" +msgstr "ŠšŠ½ŠøŠ³Šø Š·Š° Š°Š²Ń‚Š¾Ń€ŃŃ‚Š²Š¾Š¼ %(name)s" + +#: bookwyrm/templates/author/edit_author.html:5 +msgid "Edit Author:" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Š½Š½Ń Š°Š²Ń‚Š¾Ń€Š°:" + +#: bookwyrm/templates/author/edit_author.html:13 +#: bookwyrm/templates/book/edit/edit_book.html:25 +msgid "Added:" +msgstr "Š”Š¾Š“Š°Š½Š¾:" + +#: bookwyrm/templates/author/edit_author.html:14 +#: bookwyrm/templates/book/edit/edit_book.html:28 +msgid "Updated:" +msgstr "ŠžŠ½Š¾Š²Š»ŠµŠ½Š¾:" + +#: bookwyrm/templates/author/edit_author.html:16 +#: bookwyrm/templates/book/edit/edit_book.html:32 +msgid "Last edited by:" +msgstr "Š’Š¾ŃŃ‚Š°Š½Š½Ń” Š²Ń–Š“рŠµŠ“Š°Š³Š¾Š²Š°Š½Š¾:" + +#: bookwyrm/templates/author/edit_author.html:33 +#: bookwyrm/templates/book/edit/edit_book_form.html:21 +msgid "Metadata" +msgstr "ŠœŠµŃ‚Š°Š“Š°Š½Ń–" + +#: bookwyrm/templates/author/edit_author.html:35 +#: bookwyrm/templates/lists/form.html:9 +#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:14 +#: bookwyrm/templates/shelf/form.html:9 +msgid "Name:" +msgstr "Š†Š¼'я:" + +#: bookwyrm/templates/author/edit_author.html:44 +#: bookwyrm/templates/book/edit/edit_book_form.html:89 +#: bookwyrm/templates/book/edit/edit_book_form.html:159 +msgid "Separate multiple values with commas." +msgstr "ŠÆŠŗщŠ¾ Š·Š½Š°Ń‡ŠµŠ½ŃŒ Š±Š°Š³Š°Ń‚Š¾, рŠ¾Š·Š“іŠ»Ń–Ń‚ŃŒ їх ŠŗŠ¾Š¼Š°Š¼Šø." + +#: bookwyrm/templates/author/edit_author.html:50 +msgid "Bio:" +msgstr "Š‘Ń–Š¾Š³Ń€Š°Ń„Ń–Ń:" + +#: bookwyrm/templates/author/edit_author.html:56 +msgid "Wikipedia link:" +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° Š’Ń–ŠŗіŠæŠµŠ“ію:" + +#: bookwyrm/templates/author/edit_author.html:60 +msgid "Website:" +msgstr "Š’ŠµŠ±ŃŠ°Š¹Ń‚:" + +#: bookwyrm/templates/author/edit_author.html:65 +msgid "Birth date:" +msgstr "Š”Š°Ń‚Š° Š½Š°Ń€Š¾Š“Š¶ŠµŠ½Š½Ń:" + +#: bookwyrm/templates/author/edit_author.html:72 +msgid "Death date:" +msgstr "Š”Š°Ń‚Š° сŠ¼ŠµŃ€Ń‚Ń–:" + +#: bookwyrm/templates/author/edit_author.html:79 +msgid "Author Identifiers" +msgstr "Š†Š“ŠµŠ½Ń‚ŠøфіŠŗŠ°Ń‚Š¾Ń€Šø ŠŠ²Ń‚Š¾Ń€Š°" + +#: bookwyrm/templates/author/edit_author.html:81 +msgid "Openlibrary key:" +msgstr "ŠšŠ»ŃŽŃ‡ Openlibrary:" + +#: bookwyrm/templates/author/edit_author.html:88 +#: bookwyrm/templates/book/edit/edit_book_form.html:334 +msgid "Inventaire ID:" +msgstr "Inventaire ID:" + +#: bookwyrm/templates/author/edit_author.html:95 +msgid "Librarything key:" +msgstr "ŠšŠ»ŃŽŃ‡ Librarything:" + +#: bookwyrm/templates/author/edit_author.html:102 +#: bookwyrm/templates/book/edit/edit_book_form.html:343 +msgid "Goodreads key:" +msgstr "ŠšŠ»ŃŽŃ‡ Goodreads:" + +#: bookwyrm/templates/author/edit_author.html:109 +msgid "ISFDB:" +msgstr "ISFDB:" + +#: bookwyrm/templates/author/edit_author.html:116 +msgid "ISNI:" +msgstr "ISNI:" + +#: bookwyrm/templates/author/edit_author.html:126 +#: bookwyrm/templates/book/book.html:220 +#: bookwyrm/templates/book/edit/edit_book.html:150 +#: bookwyrm/templates/book/file_links/add_link_modal.html:60 +#: bookwyrm/templates/book/file_links/edit_links.html:86 +#: bookwyrm/templates/groups/form.html:32 +#: bookwyrm/templates/lists/bookmark_button.html:15 +#: bookwyrm/templates/lists/edit_item_form.html:15 +#: bookwyrm/templates/lists/form.html:130 +#: bookwyrm/templates/preferences/edit_user.html:140 +#: bookwyrm/templates/readthrough/readthrough_modal.html:81 +#: bookwyrm/templates/settings/announcements/edit_announcement.html:120 +#: bookwyrm/templates/settings/federation/edit_instance.html:98 +#: bookwyrm/templates/settings/federation/instance.html:105 +#: bookwyrm/templates/settings/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/shelf/form.html:25 +#: bookwyrm/templates/snippets/reading_modals/layout.html:18 +msgid "Save" +msgstr "Š—Š±ŠµŃ€ŠµŠ³Ń‚Šø" + +#: bookwyrm/templates/author/edit_author.html:127 +#: bookwyrm/templates/author/sync_modal.html:23 +#: bookwyrm/templates/book/book.html:221 +#: bookwyrm/templates/book/cover_add_modal.html:33 +#: bookwyrm/templates/book/edit/edit_book.html:152 +#: bookwyrm/templates/book/edit/edit_book.html:155 +#: bookwyrm/templates/book/file_links/add_link_modal.html:59 +#: bookwyrm/templates/book/file_links/verification_modal.html:25 +#: bookwyrm/templates/book/sync_modal.html:23 +#: bookwyrm/templates/groups/delete_group_modal.html:15 +#: bookwyrm/templates/lists/add_item_modal.html:36 +#: bookwyrm/templates/lists/delete_list_modal.html:16 +#: bookwyrm/templates/preferences/disable-2fa.html:19 +#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 +#: bookwyrm/templates/readthrough/readthrough_modal.html:80 +#: bookwyrm/templates/search/barcode_modal.html:43 +#: bookwyrm/templates/settings/federation/instance.html:106 +#: bookwyrm/templates/settings/imports/complete_import_modal.html:16 +#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 +#: bookwyrm/templates/snippets/report_modal.html:52 +msgid "Cancel" +msgstr "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø" + +#: bookwyrm/templates/author/sync_modal.html:15 +#, python-format +msgid "Loading data will connect to %(source_name)s and check for any metadata about this author which aren't present here. Existing metadata will not be overwritten." +msgstr "ŠŸŃ€Š¾Ń†ŠµŃ Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠµŠ½Š½Ń Š“Š°Š½Šøх Š·'єŠ“Š½Š°Ń”Ń‚ŃŒŃŃ Š· %(source_name)s тŠ° ŠæŠµŃ€ŠµŠ²Ń–Ń€Šøть Š½Š°ŃŠ²Š½Ń–ŃŃ‚ŃŒ Š¼ŠµŃ‚Š°Š“Š°Š½Šøх ŠæрŠ¾ цьŠ¾Š³Š¾ Š°Š²Ń‚Š¾Ń€Š°, яŠŗŠøх тут Š½ŠµŠ¼Š°Ń”. ŠŠ°ŃŠ²Š½Ń– Š¼ŠµŃ‚Š°Š“Š°Š½Ń– Š½Šµ Š±ŃƒŠ“Šµ ŠæŠµŃ€ŠµŠ·Š°ŠæŠøсŠ°Š½Š¾." + +#: bookwyrm/templates/author/sync_modal.html:24 +#: bookwyrm/templates/book/edit/edit_book.html:137 +#: bookwyrm/templates/book/sync_modal.html:24 +#: bookwyrm/templates/groups/members.html:29 +#: bookwyrm/templates/landing/password_reset.html:52 +#: bookwyrm/templates/preferences/2fa.html:77 +#: bookwyrm/templates/settings/imports/complete_import_modal.html:19 +#: bookwyrm/templates/snippets/remove_from_group_button.html:17 +msgid "Confirm" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“ŠøтŠø" + +#: bookwyrm/templates/book/book.html:20 +msgid "Unable to connect to remote source." +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ ŠæіŠ“'єŠ“Š½Š°Ń‚Šøся Š“Š¾ Š²Ń–Š“Š“Š°Š»ŠµŠ½Š¾Š³Š¾ Š“Š¶ŠµŃ€ŠµŠ»Š°." + +#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74 +msgid "Edit Book" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø ŠšŠ½ŠøŠ³Ńƒ" + +#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102 +msgid "Click to add cover" +msgstr "ŠŠ°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ, щŠ¾Š± Š“Š¾Š“Š°Ń‚Šø Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½Šŗу" + +#: bookwyrm/templates/book/book.html:108 +msgid "Failed to load cover" +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½Šŗу" + +#: bookwyrm/templates/book/book.html:119 +msgid "Click to enlarge" +msgstr "ŠŠ°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š“Š»Ń Š·Š±Ń–Š»ŃŒŃˆŠµŠ½Š½Ń" + +#: bookwyrm/templates/book/book.html:196 +#, python-format +msgid "(%(review_count)s review)" +msgid_plural "(%(review_count)s reviews)" +msgstr[0] "(%(review_count)s рŠµŃ†ŠµŠ½Š·Ń–я)" +msgstr[1] "(%(review_count)s рŠµŃ†ŠµŠ½Š·Ń–Ń—)" +msgstr[2] "(%(review_count)s рŠµŃ†ŠµŠ½Š·Ń–Š¹)" +msgstr[3] "(%(review_count)s рŠµŃ†ŠµŠ½Š·Ń–Š¹)" + +#: bookwyrm/templates/book/book.html:209 +msgid "Add Description" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠžŠæŠøс" + +#: bookwyrm/templates/book/book.html:216 +#: bookwyrm/templates/book/edit/edit_book_form.html:53 +#: bookwyrm/templates/lists/form.html:13 bookwyrm/templates/shelf/form.html:17 +msgid "Description:" +msgstr "ŠžŠæŠøс:" + +#: bookwyrm/templates/book/book.html:232 +#, python-format +msgid "%(count)s edition" +msgid_plural "%(count)s editions" +msgstr[0] "%(count)s Š²ŠøŠ“Š°Š½Š½Ń" +msgstr[1] "%(count)s Š²ŠøŠ“Š°Š½Š½Ń" +msgstr[2] "%(count)s Š²ŠøŠ“Š°Š½ŃŒ" +msgstr[3] "%(count)s Š²ŠøŠ“Š°Š½ŃŒ" + +#: bookwyrm/templates/book/book.html:246 +msgid "You have shelved this edition in:" +msgstr "Š’Šø Š²Ń–Š“ŠŗŠ»Š°Š»Šø цŠµ Š²ŠøŠ“Š°Š½Š½Ń Š½Š° ŠæŠ¾Š»Šøцю:" + +#: bookwyrm/templates/book/book.html:261 +#, python-format +msgid "A different edition of this book is on your %(shelf_name)s shelf." +msgstr "Š†Š½ŃˆŠµ Š²ŠøŠ“Š°Š½Š½Ń цієї ŠŗŠ½ŠøŠ³Šø Š·Š½Š°Ń…Š¾Š“Šøться Š½Š° Š²Š°ŃˆŃ–Š¹ %(shelf_name)s ŠæŠ¾Š»Šøці." + +#: bookwyrm/templates/book/book.html:272 +msgid "Your reading activity" +msgstr "Š’Š°ŃˆŠ° чŠøтŠ°Ń†ŃŒŠŗŠ° Š°ŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ" + +#: bookwyrm/templates/book/book.html:278 +#: bookwyrm/templates/guided_tour/book.html:56 +msgid "Add read dates" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š“Š°Ń‚Šø ŠŗŠ¾Š»Šø ŠæрŠ¾Ń‡ŠøтŠ°Š½Š¾" + +#: bookwyrm/templates/book/book.html:286 +msgid "You don't have any reading activity for this book." +msgstr "Š’Šø Š½Šµ Š¼Š°Ń”Ń‚Šµ Š¶Š¾Š“Š½Š¾Ń— чŠøтŠ°Ń†ŃŒŠŗŠ¾Ń— Š°ŠŗтŠøŠ²Š½Š¾ŃŃ‚Ń– Š“Š»Ń цієї ŠŗŠ½ŠøŠ³Šø." + +#: bookwyrm/templates/book/book.html:312 +msgid "Your reviews" +msgstr "Š’Š°ŃˆŃ– Š²Ń–Š“Š³ŃƒŠŗŠø" + +#: bookwyrm/templates/book/book.html:318 +msgid "Your comments" +msgstr "Š’Š°ŃˆŃ– ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€Ń–" + +#: bookwyrm/templates/book/book.html:324 +msgid "Your quotes" +msgstr "Š’Š°ŃˆŃ– цŠøтŠ°Ń‚Šø" + +#: bookwyrm/templates/book/book.html:360 +msgid "Subjects" +msgstr "Š¢ŠµŠ¼Šø" + +#: bookwyrm/templates/book/book.html:372 +msgid "Places" +msgstr "ŠœŃ–ŃŃ†Ń" + +#: bookwyrm/templates/book/book.html:383 +#: bookwyrm/templates/groups/group.html:19 +#: 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/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 +msgid "Lists" +msgstr "Š”ŠæŠøсŠŗŠø" + +#: bookwyrm/templates/book/book.html:395 +msgid "Add to list" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š“Š¾ сŠæŠøсŠŗу" + +#: bookwyrm/templates/book/book.html:405 +#: bookwyrm/templates/book/cover_add_modal.html:32 +#: bookwyrm/templates/lists/add_item_modal.html:39 +#: bookwyrm/templates/lists/list.html:255 +#: bookwyrm/templates/settings/email_blocklist/domain_form.html:24 +#: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:32 +msgid "Add" +msgstr "Š”Š¾Š“Š°Ń‚Šø" + +#: bookwyrm/templates/book/book_identifiers.html:8 +msgid "ISBN:" +msgstr "ISBN:" + +#: bookwyrm/templates/book/book_identifiers.html:12 +#: bookwyrm/templates/book/book_identifiers.html:13 +msgid "Copy ISBN" +msgstr "" + +#: bookwyrm/templates/book/book_identifiers.html:16 +msgid "Copied ISBN!" +msgstr "" + +#: bookwyrm/templates/book/book_identifiers.html:23 +#: bookwyrm/templates/book/edit/edit_book_form.html:352 +msgid "OCLC Number:" +msgstr "ŠŠ¾Š¼ŠµŃ€ OCLC:" + +#: bookwyrm/templates/book/book_identifiers.html:30 +#: bookwyrm/templates/book/edit/edit_book_form.html:361 +msgid "ASIN:" +msgstr "ASIN:" + +#: bookwyrm/templates/book/book_identifiers.html:37 +#: bookwyrm/templates/book/edit/edit_book_form.html:370 +msgid "Audible ASIN:" +msgstr "Audible ASIN:" + +#: bookwyrm/templates/book/book_identifiers.html:44 +#: bookwyrm/templates/book/edit/edit_book_form.html:379 +msgid "ISFDB ID:" +msgstr "ISFDB ID:" + +#: bookwyrm/templates/book/book_identifiers.html:51 +msgid "Goodreads:" +msgstr "Goodreads:" + +#: bookwyrm/templates/book/cover_add_modal.html:5 +msgid "Add cover" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½Šŗу" + +#: bookwyrm/templates/book/cover_add_modal.html:17 +#: bookwyrm/templates/book/edit/edit_book_form.html:244 +msgid "Upload cover:" +msgstr "Š—Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½Šŗу:" + +#: bookwyrm/templates/book/cover_add_modal.html:23 +#: bookwyrm/templates/book/edit/edit_book_form.html:250 +msgid "Load cover from URL:" +msgstr "Š—Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½Šŗу Š· ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń:" + +#: bookwyrm/templates/book/cover_show_modal.html:6 +msgid "Book cover preview" +msgstr "ŠŸŠ¾ŠæŠµŃ€ŠµŠ“Š½Ń–Š¹ ŠæŠµŃ€ŠµŠ³Š»ŃŠ“ Š¾Š±ŠŗŠ»Š°Š“ŠøŠ½ŠŗŠø ŠŗŠ½ŠøŠ³Šø" + +#: bookwyrm/templates/book/cover_show_modal.html:11 +#: bookwyrm/templates/components/inline_form.html:8 +#: bookwyrm/templates/components/modal.html:13 +#: bookwyrm/templates/components/modal.html:30 +#: bookwyrm/templates/feed/suggested_books.html:67 +#: bookwyrm/templates/get_started/layout.html:27 +#: bookwyrm/templates/get_started/layout.html:60 +msgid "Close" +msgstr "Š—Š°ŠŗрŠøтŠø" + +#: bookwyrm/templates/book/edit/edit_book.html:8 +#: bookwyrm/templates/book/edit/edit_book.html:18 +#, python-format +msgid "Edit \"%(book_title)s\"" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø \"%(book_title)s\"" + +#: bookwyrm/templates/book/edit/edit_book.html:10 +#: bookwyrm/templates/book/edit/edit_book.html:20 +msgid "Add Book" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠŗŠ½ŠøŠ³Ńƒ" + +#: bookwyrm/templates/book/edit/edit_book.html:43 +msgid "Failed to save book, see errors below for more information." +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ Š·Š±ŠµŃ€ŠµŠ³Ń‚Šø ŠŗŠ½ŠøŠ³Ńƒ, Š“ŠøŠ²Ń–Ń‚ŃŒŃŃ ŠæŠ¾Š¼ŠøŠ»ŠŗŠø Š½ŠøŠ¶Ń‡Šµ Š“Š»Ń Š“Š¾Š“Š°Ń‚ŠŗŠ¾Š²Š¾Ń— іŠ½Ń„Š¾Ń€Š¼Š°Ń†Ń–Ń—." + +#: bookwyrm/templates/book/edit/edit_book.html:70 +msgid "Confirm Book Info" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“ŠøтŠø іŠ½Ń„Š¾Ń€Š¼Š°Ń†Ń–ŃŽ" + +#: bookwyrm/templates/book/edit/edit_book.html:78 +#, python-format +msgid "Is \"%(name)s\" one of these authors?" +msgstr "Š§Šø є \"%(name)s Š¾Š“Š½ŠøŠ¼ Š· цŠøх Š°Š²Ń‚Š¾Ń€Ń–Š²?" + +#: bookwyrm/templates/book/edit/edit_book.html:89 +#, python-format +msgid "Author of %(book_title)s" +msgstr "ŠŠ²Ń‚Š¾Ń€ %(book_title)s" + +#: bookwyrm/templates/book/edit/edit_book.html:93 +#, python-format +msgid "Author of %(alt_title)s" +msgstr "ŠŠ²Ń‚Š¾Ń€ %(alt_title)s" + +#: bookwyrm/templates/book/edit/edit_book.html:95 +msgid "Find more information at isni.org" +msgstr "Š—Š½Š°Š¹Ń‚Šø Š±Ń–Š»ŃŒŃˆŠµ іŠ½Ń„Š¾Ń€Š¼Š°Ń†Ń–Ń— Š½Š° isni.org" + +#: bookwyrm/templates/book/edit/edit_book.html:105 +msgid "This is a new author" +msgstr "Š¦Šµ Š½Š¾Š²ŠøŠ¹ Š°Š²Ń‚Š¾Ń€" + +#: bookwyrm/templates/book/edit/edit_book.html:115 +#, python-format +msgid "Creating a new author: %(name)s" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š½Ń Š½Š¾Š²Š¾Š³Š¾ Š°Š²Ń‚Š¾Ń€Š°: %(name)s" + +#: bookwyrm/templates/book/edit/edit_book.html:122 +msgid "Is this an edition of an existing work?" +msgstr "Š¦Šµ Š²ŠøŠ“Š°Š½Š½Ń Š²Š¶Šµ ісŠ½ŃƒŃŽŃ‡Š¾Š³Š¾ тŠ²Š¾Ń€Ńƒ?" + +#: bookwyrm/templates/book/edit/edit_book.html:130 +msgid "This is a new work" +msgstr "Š¦Šµ Š½Š¾Š²ŠøŠ¹ тŠ²Ń–Ń€" + +#: bookwyrm/templates/book/edit/edit_book.html:139 +#: bookwyrm/templates/feed/status.html:19 +#: bookwyrm/templates/guided_tour/book.html:44 +#: bookwyrm/templates/guided_tour/book.html:68 +#: bookwyrm/templates/guided_tour/book.html:91 +#: bookwyrm/templates/guided_tour/book.html:116 +#: bookwyrm/templates/guided_tour/book.html:140 +#: bookwyrm/templates/guided_tour/book.html:164 +#: bookwyrm/templates/guided_tour/book.html:188 +#: bookwyrm/templates/guided_tour/book.html:213 +#: bookwyrm/templates/guided_tour/book.html:237 +#: bookwyrm/templates/guided_tour/book.html:262 +#: bookwyrm/templates/guided_tour/book.html:290 +#: bookwyrm/templates/guided_tour/group.html:43 +#: bookwyrm/templates/guided_tour/group.html:66 +#: bookwyrm/templates/guided_tour/group.html:89 +#: bookwyrm/templates/guided_tour/group.html:108 +#: bookwyrm/templates/guided_tour/home.html:91 +#: bookwyrm/templates/guided_tour/home.html:115 +#: bookwyrm/templates/guided_tour/home.html:140 +#: bookwyrm/templates/guided_tour/home.html:165 +#: bookwyrm/templates/guided_tour/home.html:189 +#: bookwyrm/templates/guided_tour/home.html:212 +#: bookwyrm/templates/guided_tour/lists.html:47 +#: bookwyrm/templates/guided_tour/lists.html:70 +#: bookwyrm/templates/guided_tour/lists.html:94 +#: bookwyrm/templates/guided_tour/lists.html:117 +#: bookwyrm/templates/guided_tour/lists.html:136 +#: bookwyrm/templates/guided_tour/search.html:83 +#: bookwyrm/templates/guided_tour/search.html:110 +#: bookwyrm/templates/guided_tour/search.html:134 +#: bookwyrm/templates/guided_tour/search.html:155 +#: bookwyrm/templates/guided_tour/user_books.html:44 +#: bookwyrm/templates/guided_tour/user_books.html:67 +#: bookwyrm/templates/guided_tour/user_books.html:90 +#: bookwyrm/templates/guided_tour/user_books.html:118 +#: bookwyrm/templates/guided_tour/user_groups.html:44 +#: bookwyrm/templates/guided_tour/user_groups.html:67 +#: bookwyrm/templates/guided_tour/user_groups.html:91 +#: bookwyrm/templates/guided_tour/user_groups.html:110 +#: bookwyrm/templates/guided_tour/user_profile.html:43 +#: bookwyrm/templates/guided_tour/user_profile.html:66 +#: bookwyrm/templates/guided_tour/user_profile.html:89 +#: bookwyrm/templates/guided_tour/user_profile.html:112 +#: bookwyrm/templates/guided_tour/user_profile.html:135 +#: bookwyrm/templates/user/user.html:93 bookwyrm/templates/user_menu.html:18 +msgid "Back" +msgstr "ŠŠ°Š·Š°Š“" + +#: bookwyrm/templates/book/edit/edit_book_form.html:26 +#: bookwyrm/templates/snippets/create_status/review.html:15 +msgid "Title:" +msgstr "ŠŠ°Š·Š²Š°:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:35 +msgid "Sort Title:" +msgstr "" + +#: bookwyrm/templates/book/edit/edit_book_form.html:44 +msgid "Subtitle:" +msgstr "ŠŸŃ–Š“Š·Š°Š³Š¾Š»Š¾Š²Š¾Šŗ:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:64 +msgid "Series:" +msgstr "Š”ŠµŃ€Ń–Ń—:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:74 +msgid "Series number:" +msgstr "ŠŠ¾Š¼ŠµŃ€ сŠµŃ€Ń–Ń—:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:85 +msgid "Languages:" +msgstr "ŠœŠ¾Š²Šø:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:97 +msgid "Subjects:" +msgstr "Š¢ŠµŠ¼Šø:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:101 +msgid "Add subject" +msgstr "Š”Š¾Š“Š°Ń‚Šø тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/book/edit/edit_book_form.html:119 +msgid "Remove subject" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/book/edit/edit_book_form.html:142 +msgid "Add Another Subject" +msgstr "Š”Š¾Š“Š°Ń‚Šø іŠ½ŃˆŃƒ тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/book/edit/edit_book_form.html:150 +msgid "Publication" +msgstr "Š’ŠøŠ“Š°Š½Š½Ń" + +#: bookwyrm/templates/book/edit/edit_book_form.html:155 +msgid "Publisher:" +msgstr "Š’ŠøŠ“Š°Š²ŠµŃ†ŃŒ:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:167 +msgid "First published date:" +msgstr "Š”Š°Ń‚Š° ŠæŠµŃ€ŃˆŠ¾Š³Š¾ Š²ŠøŠ“Š°Š½Š½Ń:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:175 +msgid "Published date:" +msgstr "Š”Š°Ń‚Š° Š²ŠøŠ“Š°Š½Š½Ń:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:186 +msgid "Authors" +msgstr "ŠŠ²Ń‚Š¾Ń€Šø" + +#: bookwyrm/templates/book/edit/edit_book_form.html:197 +#, python-format +msgid "Remove %(name)s" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø %(name)s" + +#: bookwyrm/templates/book/edit/edit_book_form.html:200 +#, python-format +msgid "Author page for %(name)s" +msgstr "Š”тŠ¾Ń€Ń–Š½ŠŗŠ° Š°Š²Ń‚Š¾Ń€Š° Š“Š»Ń %(name)s" + +#: bookwyrm/templates/book/edit/edit_book_form.html:208 +msgid "Add Authors:" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š°Š²Ń‚Š¾Ń€Ń–Š²:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:211 +#: bookwyrm/templates/book/edit/edit_book_form.html:214 +msgid "Add Author" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š°Š²Ń‚Š¾Ń€Š°" + +#: bookwyrm/templates/book/edit/edit_book_form.html:212 +#: bookwyrm/templates/book/edit/edit_book_form.html:215 +msgid "Jane Doe" +msgstr "Š†Š»Š¾Š½Š° ŠŸŠ°Š²Š»ŃŽŠŗ" + +#: bookwyrm/templates/book/edit/edit_book_form.html:221 +msgid "Add Another Author" +msgstr "Š”Š¾Š“Š°Ń‚Šø іŠ½ŃˆŠ¾Š³Š¾ Š°Š²Ń‚Š¾Ń€Š°" + +#: bookwyrm/templates/book/edit/edit_book_form.html:231 +#: bookwyrm/templates/shelf/shelf.html:162 +msgid "Cover" +msgstr "ŠžŠ±ŠŗŠ»Š°Š“ŠøŠ½ŠŗŠ°" + +#: bookwyrm/templates/book/edit/edit_book_form.html:263 +msgid "Physical Properties" +msgstr "Š¤Ń–Š·ŠøчŠ½Ń– Š²Š»Š°ŃŃ‚ŠøŠ²Š¾ŃŃ‚Ń–" + +#: bookwyrm/templates/book/edit/edit_book_form.html:270 +#: bookwyrm/templates/book/editions/format_filter.html:6 +msgid "Format:" +msgstr "Š¤Š¾Ń€Š¼Š°Ń‚:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:280 +msgid "Format details:" +msgstr "Š”ŠµŃ‚Š°Š»Ń– фŠ¾Ń€Š¼Š°Ń‚Ńƒ:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:291 +msgid "Pages:" +msgstr "Š”тŠ¾Ń€Ń–Š½Š¾Šŗ:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:302 +msgid "Book Identifiers" +msgstr "Š†Š“ŠµŠ½Ń‚ŠøфіŠŗŠ°Ń‚Š¾Ń€Šø ŠŗŠ½ŠøŠ³Šø" + +#: bookwyrm/templates/book/edit/edit_book_form.html:307 +msgid "ISBN 13:" +msgstr "ISBN 13:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:316 +msgid "ISBN 10:" +msgstr "ISBN 10:" + +#: bookwyrm/templates/book/edit/edit_book_form.html:325 +msgid "Openlibrary ID:" +msgstr "Openlibrary ID:" + +#: bookwyrm/templates/book/editions/editions.html:4 +#, python-format +msgid "Editions of %(book_title)s" +msgstr "Š’ŠøŠ“Š°Š½Š½Ń %(book_title)s" + +#: bookwyrm/templates/book/editions/editions.html:8 +#, python-format +msgid "Editions of %(work_title)s" +msgstr "" + +#: bookwyrm/templates/book/editions/editions.html:55 +msgid "Can't find the edition you're looking for?" +msgstr "ŠŠµ Š¼Š¾Š¶ŠµŃ‚Šµ Š·Š½Š°Š¹Ń‚Šø ŠæŠ¾Ń‚ріŠ±Š½Šµ Š²ŠøŠ“Š°Š½Š½Ń?" + +#: bookwyrm/templates/book/editions/editions.html:76 +msgid "Add another edition" +msgstr "Š”Š¾Š“Š°Ń‚Šø іŠ½ŃˆŠµ Š²ŠøŠ“Š°Š½Š½Ń" + +#: bookwyrm/templates/book/editions/format_filter.html:9 +#: bookwyrm/templates/book/editions/language_filter.html:9 +msgid "Any" +msgstr "Š‘ŃƒŠ“ь-яŠŗŠ°" + +#: bookwyrm/templates/book/editions/language_filter.html:6 +#: bookwyrm/templates/preferences/edit_user.html:95 +msgid "Language:" +msgstr "ŠœŠ¾Š²Š°:" + +#: bookwyrm/templates/book/editions/search_filter.html:6 +msgid "Search editions" +msgstr "ŠŸŠ¾ŃˆŃƒŠŗ Š²ŠøŠ“Š°Š½ŃŒ" + +#: bookwyrm/templates/book/file_links/add_link_modal.html:6 +msgid "Add file link" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° фŠ°Š¹Š»" + +#: bookwyrm/templates/book/file_links/add_link_modal.html:19 +msgid "Links from unknown domains will need to be approved by a moderator before they are added." +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń Š· Š½ŠµŠ²Ń–Š“Š¾Š¼Šøх Š“Š¾Š¼ŠµŠ½Ń–Š² Š½ŠµŠ¾Š±Ń…Ń–Š“Š½Š¾ Š·Š°Ń‚Š²ŠµŃ€Š“ŠøтŠø Š¼Š¾Š“ŠµŃ€Š°Ń‚Š¾Ń€Š¾Š¼ ŠæŠµŃ€ŠµŠ“ тŠøŠ¼, яŠŗ Š²Š¾Š½Šø Š“Š¾Š“Š°Š“уться." + +#: bookwyrm/templates/book/file_links/add_link_modal.html:24 +msgid "URL:" +msgstr "URL:" + +#: bookwyrm/templates/book/file_links/add_link_modal.html:29 +msgid "File type:" +msgstr "Š¢ŠøŠæ фŠ°Š¹Š»Ńƒ:" + +#: bookwyrm/templates/book/file_links/add_link_modal.html:48 +msgid "Availability:" +msgstr "ŠŠ°ŃŠ²Š½Ń–ŃŃ‚ŃŒ:" + +#: bookwyrm/templates/book/file_links/edit_links.html:5 +#: bookwyrm/templates/book/file_links/edit_links.html:21 +#: bookwyrm/templates/book/file_links/links.html:53 +msgid "Edit links" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Š½Š½Ń ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń" + +#: bookwyrm/templates/book/file_links/edit_links.html:11 +#, python-format +msgid "Links for \"%(title)s\"" +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń Š“Š»Ń \"%(title)s\"" + +#: bookwyrm/templates/book/file_links/edit_links.html:32 +#: bookwyrm/templates/settings/link_domains/link_table.html:6 +msgid "URL" +msgstr "URL" + +#: bookwyrm/templates/book/file_links/edit_links.html:33 +#: bookwyrm/templates/settings/link_domains/link_table.html:7 +msgid "Added by" +msgstr "Š”Š¾Š“Š°Š½Š¾" + +#: bookwyrm/templates/book/file_links/edit_links.html:34 +#: bookwyrm/templates/settings/link_domains/link_table.html:8 +msgid "Filetype" +msgstr "Š¢ŠøŠæ фŠ°Š¹Š»Ńƒ" + +#: bookwyrm/templates/book/file_links/edit_links.html:35 +#: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:25 +#: bookwyrm/templates/settings/reports/report_links_table.html:5 +msgid "Domain" +msgstr "Š”Š¾Š¼ŠµŠ½" + +#: bookwyrm/templates/book/file_links/edit_links.html:36 +#: bookwyrm/templates/import/import.html:139 +#: bookwyrm/templates/import/import_status.html:134 +#: 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/users/user_admin.html:56 +#: bookwyrm/templates/settings/users/user_info.html:24 +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/reports/report_links_table.html:6 +#: bookwyrm/templates/settings/themes.html:99 +msgid "Actions" +msgstr "Š”Ń–Ń—" + +#: bookwyrm/templates/book/file_links/edit_links.html:48 +#: bookwyrm/templates/settings/link_domains/link_table.html:21 +msgid "Unknown user" +msgstr "ŠŠµŠ²Ń–Š“Š¾Š¼ŠøŠ¹ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡" + +#: bookwyrm/templates/book/file_links/edit_links.html:57 +#: bookwyrm/templates/book/file_links/verification_modal.html:22 +msgid "Report spam" +msgstr "ŠŸŠ¾Š²Ń–Š“Š¾Š¼ŠøтŠø ŠæрŠ¾ сŠæŠ°Š¼" + +#: bookwyrm/templates/book/file_links/edit_links.html:102 +msgid "No links available for this book." +msgstr "ŠŠµŠ¼Š°Ń” ŠæŠ¾ŃŠøŠ»Š°Š½ŃŒ Š“Š»Ń цієї ŠŗŠ½ŠøŠ³Šø." + +#: bookwyrm/templates/book/file_links/edit_links.html:113 +#: bookwyrm/templates/book/file_links/links.html:18 +msgid "Add link to file" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° фŠ°Š¹Š»" + +#: bookwyrm/templates/book/file_links/file_link_page.html:6 +msgid "File Links" +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° фŠ°Š¹Š»Šø" + +#: bookwyrm/templates/book/file_links/links.html:9 +msgid "Get a copy" +msgstr "ŠžŃ‚Ń€ŠøŠ¼Š°Ń‚Šø ŠŗŠ¾Šæію" + +#: bookwyrm/templates/book/file_links/links.html:47 +msgid "No links available" +msgstr "ŠŠµŠ¼Š°Ń” Š“Š¾ŃŃ‚ŃƒŠæŠ½Šøх ŠæŠ¾ŃŠøŠ»Š°Š½Š½ŃŒ" + +#: bookwyrm/templates/book/file_links/verification_modal.html:5 +msgid "Leaving BookWyrm" +msgstr "Š’Šø ŠæŠ¾ŠŗŠøŠ“Š°Ń”Ń‚Šµ BookWyrm" + +#: bookwyrm/templates/book/file_links/verification_modal.html:11 +#, python-format +msgid "This link is taking you to: %(link_url)s.
    Is that where you'd like to go?" +msgstr "Š¦Šµ ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š²ŠµŠ“Šµ Š½Š°: %(link_url)s.
    Š’Šø Š²ŠæŠµŠ²Š½ŠµŠ½Ń– щŠ¾ хŠ¾Ń‡ŠµŃ‚Šµ ŠæŠµŃ€ŠµŠ¹Ń‚Šø Š·Š° Š½ŠøŠ¼?" + +#: bookwyrm/templates/book/file_links/verification_modal.html:26 +#: bookwyrm/templates/setup/config.html:139 +msgid "Continue" +msgstr "ŠŸŃ€Š¾Š“Š¾Š²Š¶ŠøтŠø" + +#: bookwyrm/templates/book/publisher_info.html:23 +#, python-format +msgid "%(format)s, %(pages)s pages" +msgstr "%(format)s, %(pages)s стŠ¾Ń€Ń–Š½Š¾Šŗ" + +#: bookwyrm/templates/book/publisher_info.html:25 +#, python-format +msgid "%(pages)s pages" +msgstr "%(pages)s стŠ¾Ń€Ń–Š½Š¾Šŗ" + +#: bookwyrm/templates/book/publisher_info.html:38 +#, python-format +msgid "%(languages)s language" +msgstr "%(languages)s Š¼Š¾Š²Š°" + +#: 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/rating.html:19 +msgid "rated it" +msgstr "Š¾Ń†Ń–Š½ŠøŠ² у" + +#: bookwyrm/templates/book/series.html:11 +msgid "Series by" +msgstr "Š”ŠµŃ€Ń–я Š²Ń–Š“" + +#: bookwyrm/templates/book/series.html:28 +#, python-format +msgid "Book %(series_number)s" +msgstr "ŠšŠ½ŠøŠ³Š° %(series_number)s" + +#: bookwyrm/templates/book/series.html:28 +msgid "Unsorted Book" +msgstr "ŠŠµŃŠ¾Ń€Ń‚Š¾Š²Š°Š½Š° ŠšŠ½ŠøŠ³Š°" + +#: bookwyrm/templates/book/sync_modal.html:15 +#, python-format +msgid "Loading data will connect to %(source_name)s and check for any metadata about this book which aren't present here. Existing metadata will not be overwritten." +msgstr "ŠŸŃ€Š¾Ń†ŠµŃ Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠµŠ½Š½Ń Š“Š°Š½Šøх Š·'єŠ“Š½Š°Ń”Ń‚ŃŒŃŃ Š· %(source_name)s тŠ° ŠæŠµŃ€ŠµŠ²Ń–Ń€Šøть Š½Š°ŃŠ²Š½Ń–ŃŃ‚ŃŒ Š¼ŠµŃ‚Š°Š“Š°Š½Šøх ŠæрŠ¾ цю ŠŗŠ½ŠøŠ³Ńƒ, яŠŗŠøх тут Š½ŠµŠ¼Š°Ń”. ŠŠ°ŃŠ²Š½Ń– Š¼ŠµŃ‚Š°Š“Š°Š½Ń– Š½Šµ Š±ŃƒŠ“Šµ ŠæŠµŃ€ŠµŠ·Š°ŠæŠøсŠ°Š½Š¾." + +#: bookwyrm/templates/compose.html:5 bookwyrm/templates/compose.html:8 +msgid "Edit status" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/confirm_email/confirm_email.html:4 +msgid "Confirm email" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń email-Š°Š“рŠµŃŠø" + +#: bookwyrm/templates/confirm_email/confirm_email.html:7 +msgid "Confirm your email address" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“ьтŠµ сŠ²Š¾ŃŽ email-Š°Š“рŠµŃŃƒ" + +#: bookwyrm/templates/confirm_email/confirm_email.html:13 +msgid "A confirmation code has been sent to the email address you used to register your account." +msgstr "ŠŠ° Š²Š°ŃˆŃƒ ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Ńƒ Š°Š“рŠµŃŃƒ Š½Š°Š“ісŠ»Š°Š½Š¾ ŠŗŠ¾Š“ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń." + +#: bookwyrm/templates/confirm_email/confirm_email.html:15 +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 +msgid "Confirmation code:" +msgstr "ŠšŠ¾Š“ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń:" + +#: bookwyrm/templates/confirm_email/confirm_email.html:25 +#: bookwyrm/templates/landing/layout.html:81 +#: bookwyrm/templates/settings/dashboard/dashboard.html:102 +#: bookwyrm/templates/snippets/report_modal.html:53 +msgid "Submit" +msgstr "ŠŠ°Š“ісŠ»Š°Ń‚Šø" + +#: bookwyrm/templates/confirm_email/confirm_email.html:38 +msgid "Can't find your code?" +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ Š·Š½Š°Š¹Ń‚Šø ŠŗŠ¾Š“?" + +#: bookwyrm/templates/confirm_email/resend.html:5 +#: bookwyrm/templates/confirm_email/resend_modal.html:5 +msgid "Resend confirmation link" +msgstr "ŠŸŠ¾Š²Ń‚Š¾Ń€Š½Š¾ Š½Š°Š“ісŠ»Š°Ń‚Šø ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń Š½Š° ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Ńƒ ŠæŠ¾ŃˆŃ‚Ńƒ" + +#: bookwyrm/templates/confirm_email/resend_modal.html:15 +#: bookwyrm/templates/landing/layout.html:68 +#: bookwyrm/templates/landing/password_reset_request.html:24 +#: bookwyrm/templates/preferences/edit_user.html:53 +#: bookwyrm/templates/snippets/register_form.html:27 +msgid "Email address:" +msgstr "Š•Š»ŠµŠŗтрŠ¾Š½Š½Š° ŠæŠ¾ŃˆŃ‚Š°:" + +#: bookwyrm/templates/confirm_email/resend_modal.html:30 +msgid "Resend link" +msgstr "ŠŠ°Š“ісŠ»Š°Ń‚Šø ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń щŠµ рŠ°Š·" + +#: bookwyrm/templates/directory/community_filter.html:5 +msgid "Community" +msgstr "Š”ŠæіŠ»ŃŒŠ½Š¾Ń‚Š°" + +#: bookwyrm/templates/directory/community_filter.html:8 +#: bookwyrm/templates/settings/users/user_admin.html:25 +msgid "Local users" +msgstr "Š›Š¾ŠŗŠ°Š»ŃŒŠ½Ń– ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–" + +#: bookwyrm/templates/directory/community_filter.html:12 +#: bookwyrm/templates/settings/users/user_admin.html:33 +msgid "Federated community" +msgstr "Š¤ŠµŠ“ŠµŃ€Š°Ń‚ŠøŠ²Š½Š° сŠæіŠ»ŃŒŠ½Š¾Ń‚Š°" + +#: bookwyrm/templates/directory/directory.html:4 +#: bookwyrm/templates/directory/directory.html:9 +#: bookwyrm/templates/user_menu.html:34 +msgid "Directory" +msgstr "ŠšŠ°Ń‚Š°Š»Š¾Š³" + +#: bookwyrm/templates/directory/directory.html:17 +msgid "Make your profile discoverable to other BookWyrm users." +msgstr "Š—Ń€Š¾Š±ŠøтŠø сŠ²Ń–Š¹ ŠæрŠ¾Ń„Ń–Š»ŃŒ Š²ŠøŠ“ŠøŠ¼ŠøŠ¼ Š“Š»Ń іŠ½ŃˆŠøх ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š² BookWyrm." + +#: bookwyrm/templates/directory/directory.html:21 +msgid "Join Directory" +msgstr "ŠŸŃ€ŠøєŠ“Š½Š°Ń‚Šøся Š“Š¾ ŠšŠ°Ń‚Š°Š»Š¾Š³Ńƒ" + +#: bookwyrm/templates/directory/directory.html:24 +#, python-format +msgid "You can opt-out at any time in your profile settings." +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š²Ń–Š“'єŠ“Š½Š°Ń‚Šøся Š±ŃƒŠ“ь-ŠŗŠ¾Š»Šø Š² Š½Š°ŃŃ‚Ń€Š¾Š¹ŠŗŠ°Ń… ŠæрŠ¾Ń„Ń–Š»ŃŽ " + +#: bookwyrm/templates/directory/directory.html:29 +#: bookwyrm/templates/directory/directory.html:31 +#: bookwyrm/templates/feed/goal_card.html:17 +#: bookwyrm/templates/feed/summary_card.html:12 +#: bookwyrm/templates/feed/summary_card.html:14 +#: bookwyrm/templates/snippets/announcement.html:31 +msgid "Dismiss message" +msgstr "Š’Ń–Š“хŠøŠ»ŠøтŠø ŠæŠ¾Š²Ń–Š“Š¾Š¼Š»ŠµŠ½Š½Ń" + +#: bookwyrm/templates/directory/sort_filter.html:5 +msgid "Order by" +msgstr "Š”Š¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø Š·Š°" + +#: bookwyrm/templates/directory/sort_filter.html:9 +msgid "Recently active" +msgstr "ŠŠµŃ‰Š¾Š“Š°Š²Š½Š¾ Š°ŠŗтŠøŠ²Š½Ń–" + +#: bookwyrm/templates/directory/sort_filter.html:10 +msgid "Suggested" +msgstr "Š ŠµŠŗŠ¾Š¼ŠµŠ½Š“Š¾Š²Š°Š½Ń–" + +#: bookwyrm/templates/directory/user_card.html:17 +#: bookwyrm/templates/directory/user_card.html:18 +#: bookwyrm/templates/ostatus/remote_follow.html:21 +#: bookwyrm/templates/ostatus/remote_follow.html:22 +#: bookwyrm/templates/ostatus/subscribe.html:41 +#: 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" +msgstr "Š—Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½ŠøŠ¹ Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс" + +#: bookwyrm/templates/directory/user_card.html:40 +msgid "follower you follow" +msgid_plural "followers you follow" +msgstr[0] "ŠæіŠ“ŠæŠøсŠ½ŠøŠŗ, Š·Š° яŠŗŠøŠ¼ Š²Šø стŠµŠ¶ŠøтŠµ" +msgstr[1] "ŠæіŠ“ŠæŠøсŠ½ŠøŠŗіŠ², Š·Š° яŠŗŠøŠ¼Šø Š²Šø стŠµŠ¶ŠøтŠµ" +msgstr[2] "ŠæіŠ“ŠæŠøсŠ½ŠøŠŗіŠ², Š·Š° яŠŗŠøŠ¼Šø Š²Šø стŠµŠ¶ŠøтŠµ" +msgstr[3] "ŠæіŠ“ŠæŠøсŠ½ŠøŠŗіŠ², Š·Š° яŠŗŠøŠ¼Šø Š²Šø стŠµŠ¶ŠøтŠµ" + +#: bookwyrm/templates/directory/user_card.html:47 +msgid "book on your shelves" +msgid_plural "books on your shelves" +msgstr[0] "ŠŗŠ½ŠøŠ³Š° Š½Š° Š²Š°ŃˆŠøх ŠæŠ¾Š»Šøцях" +msgstr[1] "ŠŗŠ½ŠøŠ³Šø Š½Š° Š²Š°ŃˆŠøх ŠæŠ¾Š»Šøцях" +msgstr[2] "ŠŗŠ½ŠøŠ³Šø Š½Š° Š²Š°ŃˆŠøх ŠæŠ¾Š»Šøцях" +msgstr[3] "ŠŗŠ½ŠøŠ³Šø Š½Š° Š²Š°ŃˆŠøх ŠæŠ¾Š»Šøцях" + +#: bookwyrm/templates/directory/user_card.html:55 +msgid "posts" +msgstr "ŠæŠ¾ŃŃ‚Ń–Š²" + +#: bookwyrm/templates/directory/user_card.html:61 +msgid "last active" +msgstr "Š¾ŃŃ‚Š°Š½Š½Ń Š°ŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ" + +#: bookwyrm/templates/directory/user_type_filter.html:5 +msgid "User type" +msgstr "Š¢ŠøŠæ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/directory/user_type_filter.html:8 +msgid "BookWyrm users" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń– BookWyrm" + +#: bookwyrm/templates/directory/user_type_filter.html:12 +msgid "All known users" +msgstr "Š£ŃŃ– Š²Ń–Š“Š¾Š¼Ń– ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–" + +#: bookwyrm/templates/discover/card-header.html:8 +#, python-format +msgid "%(username)s wants to read %(book_title)s" +msgstr "%(username)s хŠ¾Ń‡Šµ ŠæрŠ¾Ń‡ŠøтŠ°Ń‚Šø %(book_title)s" + +#: bookwyrm/templates/discover/card-header.html:13 +#, python-format +msgid "%(username)s finished reading %(book_title)s" +msgstr "%(username)s Š·Š°ŠŗіŠ½Ń‡ŠøŠ²(-Š»Š°) чŠøтŠ°Ń‚Šø %(book_title)s" + +#: bookwyrm/templates/discover/card-header.html:18 +#, python-format +msgid "%(username)s started reading %(book_title)s" +msgstr "%(username)s ŠæŠ¾Ń‡Š°Š²(-Š»Š°) чŠøтŠ°Ń‚Šø %(book_title)s" + +#: bookwyrm/templates/discover/card-header.html:23 +#, python-format +msgid "%(username)s rated %(book_title)s" +msgstr "%(username)s Š¾Ń†Ń–Š½ŠøŠ²(-Š»Š°) %(book_title)s" + +#: bookwyrm/templates/discover/card-header.html:27 +#, python-format +msgid "%(username)s reviewed %(book_title)s" +msgstr "%(username)s рŠµŃ†ŠµŠ½Š·ŃƒŠ²Š°Š²(-Š»Š°) %(book_title)s" + +#: bookwyrm/templates/discover/card-header.html:31 +#, python-format +msgid "%(username)s commented on %(book_title)s" +msgstr "%(username)s ŠæрŠ¾ŠŗŠ¾Š¼ŠµŠ½Ń‚ŃƒŠ²Š°Š²(-Š»Š°) %(book_title)s" + +#: bookwyrm/templates/discover/card-header.html:35 +#, python-format +msgid "%(username)s quoted %(book_title)s" +msgstr "%(username)s ŠæрŠ¾Ń†ŠøтуŠ²Š°Š²(-Š»Š°) %(book_title)s" + +#: bookwyrm/templates/discover/discover.html:4 +#: bookwyrm/templates/discover/discover.html:10 +#: bookwyrm/templates/layout.html:94 +msgid "Discover" +msgstr "ŠžŠ³Š»ŃŠ“" + +#: bookwyrm/templates/discover/discover.html:12 +#, python-format +msgid "See what's new in the local %(site_name)s community" +msgstr "Š©Š¾ Š½Š¾Š²Š¾Š³Š¾ ŠŗŠ¾Ń—Ń‚ŃŒŃŃ у Š¼Ń–ŃŃ†ŠµŠ²Ń–Š¹ сŠæіŠ»ŃŒŠ½Š¾Ń‚Ń– %(site_name)s" + +#: bookwyrm/templates/discover/large-book.html:52 +#: bookwyrm/templates/discover/small-book.html:36 +msgid "View status" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/email/confirm/html_content.html:6 +#: bookwyrm/templates/email/confirm/text_content.html:4 +#, python-format +msgid "One last step before you join %(site_name)s! Please confirm your email address by clicking the link below:" +msgstr "Š¦Šµ Š¾ŃŃ‚Š°Š½Š½Ń” щŠ¾ трŠµŠ±Š° Š·Ń€Š¾Š±ŠøтŠø ŠæŠµŃ€ŠµŠ“ ŠæрŠøєŠ“Š½Š°Š½Š½ŃŠ¼ Š“Š¾ %(site_name)s! Š‘ŃƒŠ“ь Š»Š°ŃŠŗŠ°, ŠæіŠ“тŠ²ŠµŃ€Š“ьтŠµ Š²Š°ŃˆŃƒ Š°Š“рŠµŃŃƒ ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Š¾Ń— ŠæŠ¾ŃˆŃ‚Šø, Š½Š°Ń‚ŠøсŠ½ŃƒŠ²ŃˆŠø Š½Š° ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½ŠøŠ¶Ń‡Šµ:" + +#: bookwyrm/templates/email/confirm/html_content.html:11 +msgid "Confirm Email" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń email-Š°Š“рŠµŃŠø" + +#: bookwyrm/templates/email/confirm/html_content.html:15 +#, python-format +msgid "Or enter the code \"%(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:44 +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/user_menu.html:39 +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:101 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/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/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:104 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!

    Would you like to take the guided tour to help you get started?" +msgstr "Š›Š°ŃŠŗŠ°Š²Š¾ ŠæрŠ¾ŃŠøŠ¼Š¾ Š½Š° Bookwyrm!

    Š‘Š°Š¶Š°Ń”Ń‚Šµ ŠæрŠ¾Š¹Ń‚Šø ŠµŠŗсŠŗурсію, щŠ¾Š± ŠæŠ¾Ń‡Š°Ń‚Šø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‚Šøсь сŠµŃ€Š²Ń–сŠ¾Š¼?" + +#: bookwyrm/templates/guided_tour/home.html:17 +#: bookwyrm/templates/guided_tour/home.html:39 +#: bookwyrm/templates/snippets/footer.html:20 +msgid "Guided Tour" +msgstr "Š’ŃŃ‚ŃƒŠæŠ½ŠøŠ¹ Š¢ŃƒŃ€" + +#: bookwyrm/templates/guided_tour/home.html:25 +#: bookwyrm/templates/two_factor_auth/two_factor_prompt.html:36 +msgid "No thanks" +msgstr "ŠŃ–, Š“яŠŗую" + +#: bookwyrm/templates/guided_tour/home.html:33 +msgid "Yes please!" +msgstr "Š¢Š°Šŗ, Š±ŃƒŠ“ь Š»Š°ŃŠŗŠ°!" + +#: bookwyrm/templates/guided_tour/home.html:38 +msgid "If you ever change your mind, just click on the Guided Tour link to start your tour" +msgstr "ŠÆŠŗщŠ¾ ŠæŠµŃ€ŠµŠ“уŠ¼Š°Ń”Ń‚Šµ, ŠæрŠ¾ŃŃ‚Š¾ Š½Š°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° \"Š•ŠŗсŠŗурсія\", щŠ¾Š± рŠ¾Š·ŠæŠ¾Ń‡Š°Ń‚Šø Š·Š½Š°Š¹Š¾Š¼ŃŃ‚Š²Š¾" + +#: bookwyrm/templates/guided_tour/home.html:62 +msgid "Search for books, users, or lists using this search box." +msgstr "ŠØуŠŗŠ°Š¹Ń‚Šµ ŠŗŠ½ŠøŠ³Šø, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š² Š°Š±Š¾ сŠæŠøсŠŗŠø Š·Š° Š“Š¾ŠæŠ¾Š¼Š¾Š³Š¾ŃŽ цьŠ¾Š³Š¾ ŠæŠ¾Š»Ń." + +#: bookwyrm/templates/guided_tour/home.html:63 +msgid "Search box" +msgstr "ŠŸŠ¾Š»Šµ ŠæŠ¾ŃˆŃƒŠŗу" + +#: bookwyrm/templates/guided_tour/home.html:79 +msgid "Search book records by scanning an ISBN barcode using your device's camera - great when you're in the bookstore or library!" +msgstr "ŠØуŠŗŠ°Š¹Ń‚Šµ ŠŗŠ½ŠøŠ³Šø, сŠŗŠ°Š½ŃƒŃŽŃ‡Šø штрŠøх-ŠŗŠ¾Š“ ISBN Š·Š° Š“Š¾ŠæŠ¾Š¼Š¾Š³Š¾ŃŽ ŠŗŠ°Š¼ŠµŃ€Šø Š²Š°ŃˆŠ¾Š³Š¾ ŠæрŠøстрŠ¾ŃŽ - ŠŗŠ¾Ń€ŠøсŠ½Š¾, ŠŗŠ¾Š»Šø Š²Šø у ŠŗŠ½ŠøŠ¶Š½Š¾Š¼Ńƒ Š°Š±Š¾ Š±Ń–Š±Š»Ń–Š¾Ń‚ŠµŃ†Ń–!" + +#: bookwyrm/templates/guided_tour/home.html:80 +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!" +msgstr "Š’ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŠ¹Ń‚Šµ ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° Š”трічŠŗу, Š”ŠæŠøсŠŗŠø тŠ° ŠžŠ³Š»ŃŠ“, щŠ¾Š± ŠæŠ¾Š±Š°Ń‡ŠøтŠø Š¾ŃŃ‚Š°Š½Š½Ń– Š½Š¾Š²ŠøŠ½Šø Š· Š²Š°ŃˆŠ¾Ń— стрічŠŗŠø, тŠµŠ¼Š°Ń‚ŠøчŠ½Ń– сŠæŠøсŠŗŠø ŠŗŠ½ŠøŠ³ тŠ° Š¾ŃŃ‚Š°Š½Š½Ń– ŠæŠ¾Š“ії Š½Š° цьŠ¾Š¼Ńƒ іŠ½ŃŃ‚Š°Š½ŃŃ– BookWyrm!" + +#: bookwyrm/templates/guided_tour/home.html:103 +msgid "Navigation Bar" +msgstr "ŠŸŠ°Š½ŠµŠ»ŃŒ Š½Š°Š²Ń–Š³Š°Ń†Ń–Ń—" + +#: bookwyrm/templates/guided_tour/home.html:126 +msgid "Books on your reading status shelves will be shown here." +msgstr "ŠšŠ½ŠøŠ³Šø Š· ŠæŠ¾Š»Šøць стŠ°Ń‚ŃƒŃŃƒ чŠøтŠ°Š½Š½Ń Š±ŃƒŠ“уть ŠæŠ¾ŠŗŠ°Š·ŃƒŠ²Š°Ń‚Šøся тут." + +#: bookwyrm/templates/guided_tour/home.html:151 +msgid "Updates from people you are following will appear in your Home timeline.

    The Books tab shows activity from anyone, related to your books." +msgstr "ŠžŠ½Š¾Š²Š»ŠµŠ½Š½Ń Š²Ń–Š“ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š², Š·Š° яŠŗŠøŠ¼Šø Š²Šø сŠ»Ń–Š“ŠŗуєтŠµ, Š±ŃƒŠ“уть Š·'яŠ²Š»ŃŃ‚Šøся у Š²Š°ŃˆŃ–Š¹ Š“Š¾Š»Š¾Š²Š½Ń–Š¹ стрічці.

    Š’ŠŗŠ»Š°Š“ŠøŠ½ŠŗŠ° ŠšŠ½ŠøŠ³Šø Š¼Ń–стŠøтŠøŠ¼Šµ Š°ŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ Š²Ń–Š“ Š±ŃƒŠ“ь-ŠŗŠ¾Š³Š¾, ŠæŠ¾Š²'яŠ·Š°Š½Š¾Š³Š¾ Š· Š²Š°ŃˆŠøŠ¼Šø ŠŗŠ½ŠøŠ³Š°Š¼Šø." + +#: bookwyrm/templates/guided_tour/home.html:152 +msgid "Timelines" +msgstr "Š”трічŠŗŠø" + +#: bookwyrm/templates/guided_tour/home.html:176 +msgid "The bell will light up when you have a new notification. When it does, click on it to find out what exciting thing has happened!" +msgstr "Š”Š·Š²Ń–Š½Š¾Ń‡Š¾Šŗ ŠæіŠ“сŠ²Ń–Ń‚Šøться ŠæрŠø Š½Š¾Š²Š¾Š¼Ńƒ сŠæŠ¾Š²Ń–щŠµŠ½Š½Ń–. ŠšŠ¾Š»Šø цŠµ стŠ°Š½ŠµŃ‚ŃŒŃŃ, Š½Š°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° Š½ŃŒŠ¾Š³Š¾ щŠ¾Š± Š“іŠ·Š½Š°Ń‚Šøся щŠ¾ ŠæрŠøŠŗŠ¾Š»ŃŒŠ½Š¾Š³Š¾ стŠ°Š»Š¾ŃŃ!" + +#: bookwyrm/templates/guided_tour/home.html:177 +#: 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." +msgstr "Š’Š°Ńˆ ŠæрŠ¾Ń„Ń–Š»ŃŒ, ŠŗŠ½ŠøŠ³Šø, Š¾ŃŠ¾Š±Šøсті ŠæŠ¾Š²Ń–Š“Š¾Š¼Š»ŠµŠ½Š½Ń тŠ° Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½Š½Ń Š¼Š¾Š¶Š½Š° ŠæŠ¾Š“ŠøŠ²ŠøтŠøсь Š½Š°Ń‚ŠøсŠ½ŃƒŠ²ŃˆŠø Š½Š° Š²Š°ŃˆŠµ іŠ¼'я Š² цьŠ¾Š¼Ńƒ Š¼ŠµŠ½ŃŽ." + +#: bookwyrm/templates/guided_tour/home.html:200 +msgid "Try selecting Profile from the drop down menu to continue the tour." +msgstr "Š”ŠæрŠ¾Š±ŃƒŠ¹Ń‚Šµ Š²ŠøŠ±Ń€Š°Ń‚Šø ŠŸŃ€Š¾Ń„Ń–Š»ŃŒ Š· Š²ŠøŠæŠ°Š“Š°ŃŽŃ‡Š¾Š³Š¾ Š¼ŠµŠ½ŃŽ, щŠ¾Š± ŠæрŠ¾Š“Š¾Š²Š¶ŠøтŠø ŠµŠŗсŠŗурсію." + +#: bookwyrm/templates/guided_tour/home.html:201 +msgid "Profile and settings menu" +msgstr "ŠœŠµŠ½ŃŽ ŠæрŠ¾Ń„Ń–Š»ŃŽ тŠ° Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½ŃŒ" + +#: bookwyrm/templates/guided_tour/lists.html:13 +msgid "This is the lists page where you can discover book lists created by any user. A List is a collection of books, similar to a shelf." +msgstr "ŠŠ° ціŠ¹ стŠ¾Ń€Ń–Š½Ń†Ń– Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š·Š½Š°Š¹Ń‚Šø сŠæŠøсŠŗŠø ŠŗŠ½ŠøŠ³, стŠ²Š¾Ń€ŠµŠ½Ń– Š±ŃƒŠ“ь-яŠŗŠøŠ¼ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼. Š”ŠæŠøсŠ¾Šŗ - цŠµ Š½Š°Š±Ń–Ń€ ŠŗŠ½ŠøŠ³, схŠ¾Š¶ŠøŠ¹ Š½Š° ŠæŠ¾Š»Šøцю." + +#: bookwyrm/templates/guided_tour/lists.html:13 +msgid "Shelves are for organising books for yourself, whereas Lists are generally for sharing with others." +msgstr "ŠŸŠ¾Š»Šøці ŠæрŠøŠ·Š½Š°Ń‡ŠµŠ½Ń– Š“Š»Ń Š¾Ń€Š³Š°Š½Ń–Š·Š°Ń†Ń–Ń— ŠŗŠ½ŠøŠ³ Š“Š»Ń сŠµŠ±Šµ, тŠ¾Š“і яŠŗ Š”ŠæŠøсŠŗŠø, яŠŗ ŠæрŠ°Š²ŠøŠ»Š¾, Š“Š»Ń Š¾Š±Š¼Ń–Š½Ńƒ Š· іŠ½ŃˆŠøŠ¼Šø." + +#: bookwyrm/templates/guided_tour/lists.html:34 +msgid "Let's see how to create a new list." +msgstr "ŠŸŠ¾Š“ŠøŠ²Ń–Š¼Š¾ŃŃŒ, яŠŗ стŠ²Š¾Ń€ŠøтŠø Š½Š¾Š²ŠøŠ¹ сŠæŠøсŠ¾Šŗ." + +#: bookwyrm/templates/guided_tour/lists.html:34 +msgid "Click the Create List button, then Next to continue the tour" +msgstr "ŠŠ°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° ŠŗŠ½Š¾ŠæŠŗу Š”тŠ²Š¾Ń€ŠøтŠø Š”ŠæŠøсŠ¾Šŗ, Š° ŠæŠ¾Ń‚Ń–Š¼ Š”Š°Š»Ń– Š“Š»Ń ŠæрŠ¾Š“Š¾Š²Š¶ŠµŠ½Š½Ń ŠµŠŗсŠŗурсії" + +#: bookwyrm/templates/guided_tour/lists.html:35 +#: bookwyrm/templates/guided_tour/lists.html:59 +msgid "Creating a new list" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š½Ń Š½Š¾Š²Š¾Š³Š¾ сŠæŠøсŠŗу" + +#: bookwyrm/templates/guided_tour/lists.html:58 +msgid "You must give your list a name and can optionally give it a description to help other people understand what your list is about." +msgstr "Š’Šø ŠæŠ¾Š²ŠøŠ½Š½Ń– Š“Š°Ń‚Šø сŠ²Š¾Ń”Š¼Ńƒ сŠæŠøсŠŗу іŠ¼'я тŠ°, Š·Š° Š±Š°Š¶Š°Š½Š½ŃŠ¼, Š¾ŠæŠøс, щŠ¾Š± Š“Š¾ŠæŠ¾Š¼Š¾Š³Ń‚Šø іŠ½ŃˆŠøŠ¼ Š»ŃŽŠ“яŠ¼ Š·Ń€Š¾Š·ŃƒŠ¼Ń–Ń‚Šø, ŠæрŠ¾ щŠ¾ Š²Š°Ńˆ сŠæŠøсŠ¾Šŗ." + +#: bookwyrm/templates/guided_tour/lists.html:81 +msgid "Choose who can see your list here. List privacy options work just like we saw when posting book reviews. This is a common pattern throughout Bookwyrm." +msgstr "Š’ŠøŠ±ŠµŃ€Ń–Ń‚ŃŒ, хтŠ¾ Š¼Š¾Š¶Šµ Š±Š°Ń‡ŠøтŠø Š²Š°Ńˆ сŠæŠøсŠ¾Šŗ. ŠžŠæції ŠŗŠ¾Š½Ń„Ń–Š“ŠµŠ½Ń†Ń–Š¹Š½Š¾ŃŃ‚Ń– сŠæŠøсŠŗіŠ² ŠæрŠ°Ń†ŃŽŃŽŃ‚ŃŒ тŠ°Šŗ сŠ°Š¼Š¾, яŠŗ і Š“Š»Ń рŠµŃ†ŠµŠ½Š·Ń–Š¹. Š¦Šµ тŠøŠæŠ¾Š²ŠøŠ¹ ŠæіŠ“хіŠ“ усюŠ“Šø Š² BookWyrm." + +#: bookwyrm/templates/guided_tour/lists.html:82 +msgid "List privacy" +msgstr "ŠšŠ¾Š½Ń„Ń–Š“ŠµŠ½Ń†Ń–Š¹Š½Ń–ŃŃ‚ŃŒ сŠæŠøсŠŗіŠ²" + +#: bookwyrm/templates/guided_tour/lists.html:105 +msgid "You can also decide how your list is to be curated - only by you, by anyone, or by a group." +msgstr "Š’Šø тŠ°ŠŗŠ¾Š¶ Š¼Š¾Š¶ŠµŃ‚Šµ Š²ŠøрішŠøтŠø, ŠŗŠøŠ¼ Š²Š°Ńˆ сŠæŠøсŠ¾Šŗ Š±ŃƒŠ“Šµ ŠŗуруŠ²Š°Ń‚Šøся - тіŠ»ŃŒŠŗŠø Š²Š°Š¼Šø, ŠŗŠøŠ¼ Š·Š°Š²Š³Š¾Š“Š½Š¾, Š°Š±Š¾ Š³Ń€ŃƒŠæŠ¾ŃŽ." + +#: bookwyrm/templates/guided_tour/lists.html:106 +msgid "List curation" +msgstr "ŠšŃƒŃ€Š°Ń‚Š¾Ń€ŃŃ‚Š²Š¾ сŠæŠøсŠŗу" + +#: bookwyrm/templates/guided_tour/lists.html:128 +msgid "Next in our tour we will explore Groups!" +msgstr "Š”Š°Š»Ń– Š² ŠµŠŗсŠŗурсії Š¼Šø Š²ŠøŠ²Ń‡Š°Ń‚ŠøŠ¼ŠµŠ¼Š¾ Š“Ń€ŃƒŠæŠø!" + +#: bookwyrm/templates/guided_tour/lists.html:129 +msgid "Next: Groups" +msgstr "Š”Š°Š»Ń–: Š“Ń€ŃƒŠæŠø" + +#: bookwyrm/templates/guided_tour/lists.html:143 +msgid "Take me there" +msgstr "ŠŸŠµŃ€ŠµŠ¹Ń‚Šø" + +#: bookwyrm/templates/guided_tour/search.html:16 +msgid "If the book you are looking for is available on a remote catalogue such as Open Library, click on Import book." +msgstr "ŠÆŠŗщŠ¾ ŠŗŠ½ŠøŠ³Š°, яŠŗу Š²Šø шуŠŗŠ°Ń”Ń‚Šµ, Š“Š¾ŃŃ‚ŃƒŠæŠ½Š° Š½Š° Š²Ń–Š“Š“Š°Š»ŠµŠ½Š¾Š¼Ńƒ ŠŗŠ°Ń‚Š°Š»Š¾Š·Ń–, Š½Š°ŠæрŠøŠŗŠ»Š°Š“ Open Library, Š½Š°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø ŠŗŠ½ŠøŠ³Ńƒ." + +#: bookwyrm/templates/guided_tour/search.html:17 +#: bookwyrm/templates/guided_tour/search.html:44 +msgid "Searching" +msgstr "ŠŸŠ¾ŃˆŃƒŠŗ" + +#: bookwyrm/templates/guided_tour/search.html:43 +msgid "If the book you are looking for is already on this Bookwyrm instance, you can click on the title to go to the book's page." +msgstr "ŠÆŠŗщŠ¾ ŠŗŠ½ŠøŠ¶ŠŗŠ°, яŠŗу Š²Šø шуŠŗŠ°Ń”Ń‚Šµ, Š²Š¶Šµ Š·Š½Š°Ń…Š¾Š“Šøться Š½Š° цьŠ¾Š¼Ńƒ іŠ½ŃŃ‚Š°Š½ŃŃ– Bookwyrm, Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š½Š°Ń‚ŠøсŠ½ŃƒŃ‚Šø Š½Š° Š·Š°Š³Š¾Š»Š¾Š²Š¾Šŗ, щŠ¾Š± ŠæŠµŃ€ŠµŠ¹Ń‚Šø Š½Š° стŠ¾Ń€Ń–Š½Šŗу ŠŗŠ½ŠøŠ³Šø." + +#: bookwyrm/templates/guided_tour/search.html:71 +msgid "If the book you are looking for is not listed, try loading more records from other sources like Open Library or Inventaire." +msgstr "ŠÆŠŗщŠ¾ ŠŗŠ½ŠøŠ¶ŠŗŠø, яŠŗу Š²Šø шуŠŗŠ°Ń”Ń‚Šµ, Š½ŠµŠ¼Š°Ń” Š² сŠæŠøсŠŗу, сŠæрŠ¾Š±ŃƒŠ¹Ń‚Šµ Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š±Ń–Š»ŃŒŃˆŠµ Š·Š°ŠæŠøсіŠ² Š· іŠ½ŃˆŠøх Š“Š¶ŠµŃ€ŠµŠ», тŠ°ŠŗŠøх яŠŗ Open Library чŠø Inventaire." + +#: bookwyrm/templates/guided_tour/search.html:72 +msgid "Load more records" +msgstr "Š—Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š±Ń–Š»ŃŒŃˆŠµ Š·Š°ŠæŠøсіŠ²" + +#: bookwyrm/templates/guided_tour/search.html:98 +msgid "If your book is not in the results, try adjusting your search terms." +msgstr "ŠÆŠŗщŠ¾ Š²Š°ŃˆŠ¾Ń— ŠŗŠ½ŠøŠ³Šø Š½ŠµŠ¼Š°Ń” Š² рŠµŠ·ŃƒŠ»ŃŒŃ‚Š°Ń‚Š°Ń…, сŠæрŠ¾Š±ŃƒŠ¹Ń‚Šµ Š·Š¼Ń–Š½ŠøтŠø ŠæŠ¾ŃˆŃƒŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøт." + +#: bookwyrm/templates/guided_tour/search.html:99 +msgid "Search again" +msgstr "ŠØуŠŗŠ°Ń‚Šø Š·Š½Š¾Š²" + +#: bookwyrm/templates/guided_tour/search.html:121 +msgid "If you still can't find your book, you can add a record manually." +msgstr "ŠÆŠŗщŠ¾ Š²Šø Š²ŃŠµ щŠµ Š½Šµ Š¼Š¾Š¶ŠµŃ‚Šµ Š·Š½Š°Š¹Ń‚Šø сŠ²Š¾ŃŽ ŠŗŠ½ŠøŠ³Ńƒ, Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š“Š¾Š“Š°Ń‚Šø Š·Š°ŠæŠøс Š²Ń€ŃƒŃ‡Š½Ńƒ." + +#: bookwyrm/templates/guided_tour/search.html:122 +msgid "Add a record manually" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š½Ń Š·Š°ŠæŠøсу Š²Ń€ŃƒŃ‡Š½Ńƒ" + +#: bookwyrm/templates/guided_tour/search.html:147 +msgid "Import, manually add, or view an existing book to continue the tour." +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ¹Ń‚Šµ, Š“Š¾Š“Š°Š¹Ń‚Šµ Š²Ń€ŃƒŃ‡Š½Ńƒ Š°Š±Š¾ ŠæŠµŃ€ŠµŠ³Š»ŃŠ½ŃŒŃ‚Šµ Š½Š°ŃŠ²Š½Ńƒ ŠŗŠ½ŠøŠ³Ńƒ Š“Š»Ń ŠæрŠ¾Š“Š¾Š²Š¶ŠµŠ½Š½Ń ŠµŠŗсŠŗурсії." + +#: bookwyrm/templates/guided_tour/search.html:148 +msgid "Continue the tour" +msgstr "ŠŸŃ€Š¾Š“Š¾Š²Š¶ŠøтŠø ŠµŠŗсŠŗурсію" + +#: bookwyrm/templates/guided_tour/user_books.html:10 +msgid "This is the page where your books are listed, organised into shelves." +msgstr "Š¦Šµ стŠ¾Ń€Ń–Š½ŠŗŠ° Š· ŠæŠµŃ€ŠµŠ»Ń–ŠŗŠ¾Š¼ Š²Š°ŃˆŠøх ŠŗŠ½ŠøŠ³, яŠŗі Š¾Ń€Š³Š°Š½Ń–Š·Š¾Š²Š°Š½Ń– Š² ŠæŠ¾Š»Šøці." + +#: bookwyrm/templates/guided_tour/user_books.html:11 +#: bookwyrm/templates/user/books_header.html:4 +msgid "Your books" +msgstr "Š’Š°ŃˆŃ– ŠŗŠ½ŠøŠ³Šø" + +#: 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 "ŠŸŃ€Š¾Ń‡ŠøтŠ°Ń‚Šø, Š—Š°Ń€Š°Š· Š§ŠøтŠ°ŃŽ, ŠŸŃ€Š¾Ń‡ŠøтŠ°Š½Š¾, і Š§ŠøтŠ°Š½Š½Ń Š—ŃƒŠæŠøŠ½ŠµŠ½Š¾ - цŠµ стŠ°Š½Š“Š°Ń€Ń‚Š½Ń– ŠæŠ¾Š»Šøці. ŠŸŃ€Šø Š·Š¼Ń–Š½Ń– стŠ°Ń‚ŃƒŃŃƒ чŠøтŠ°Š½Š½Ń ŠŗŠ½ŠøŠ³Šø Š²Š¾Š½Š° Š°Š²Ń‚Š¾Š¼Š°Ń‚ŠøчŠ½Š¾ Š±ŃƒŠ“Šµ ŠæŠµŃ€ŠµŠ½ŠµŃŠµŠ½Š° Š² Š²Ń–Š“ŠæŠ¾Š²Ń–Š“Š½Ńƒ ŠæŠ¾Š»Šøцю. ŠšŠ½ŠøŠ¶ŠŗŠ° Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š»ŠøшŠµ Š½Š° Š¾Š“Š½Ń–Š¹ стŠ°Š½Š“Š°Ń€Ń‚Š½Ń–Š¹ ŠæŠ¾Š»Šøці Š¾Š“Š½Š¾Ń‡Š°ŃŠ½Š¾." + +#: bookwyrm/templates/guided_tour/user_books.html:32 +msgid "Reading status shelves" +msgstr "ŠŸŠ¾Š»Šøці стŠ°Ń‚ŃƒŃŃƒ чŠøтŠ°Š½Š½Ń" + +#: bookwyrm/templates/guided_tour/user_books.html:55 +msgid "You can create additional custom shelves to organise your books. A book on a custom shelf can be on any number of other shelves simultaneously, including one of the default reading status shelves" +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š¾Ń€Š³Š°Š½Ń–Š·ŃƒŠ²Š°Ń‚Šø Š²Š°ŃˆŃ– ŠŗŠ½ŠøŠ¶ŠŗŠø стŠ²Š¾Ń€ŠøŠ²ŃˆŠø Š“Š¾Š“Š°Ń‚ŠŗŠ¾Š²Ń– Š²Š»Š°ŃŠ½Ń– ŠæŠ¾Š»Šøці. ŠšŠ½ŠøŠ³Š° Š½Š° Š²Š»Š°ŃŠ½Ń–Š¹ ŠæŠ¾Š»Šøці Š¼Š¾Š¶Šµ Š¾Š“Š½Š¾Ń‡Š°ŃŠ½Š¾ Š±ŃƒŃ‚Šø Š½Š° Š±ŃƒŠ“ь-яŠŗŠøх іŠ½ŃˆŠøх ŠæŠ¾Š»Šøцях, Š² тŠ¾Š¼Ńƒ чŠøсŠ»Ń– стŠ°Š½Š“Š°Ń€Ń‚Š½Šøх (ŠŸŃ€Š¾Ń‡ŠøтŠ°Ń‚Šø, Š§ŠøтŠ°ŃŽ Š—Š°Ń€Š°Š·, і. т. Š“.)" + +#: bookwyrm/templates/guided_tour/user_books.html:56 +msgid "Adding custom shelves." +msgstr "Š”Š¾Š“Š°Š²Š°Š½Š½Ń Š²Š»Š°ŃŠ½Šøх ŠæŠ¾Š»Šøць." + +#: bookwyrm/templates/guided_tour/user_books.html:78 +msgid "If you have an export file from another service like Goodreads or LibraryThing, you can import it here." +msgstr "ŠÆŠŗщŠ¾ у Š²Š°Ń є фŠ°Š¹Š» ŠµŠŗсŠæŠ¾Ń€Ń‚Ńƒ Š· іŠ½ŃˆŠ¾Š³Š¾ сŠµŃ€Š²Ń–ŃŃƒ, Š½Š°ŠæрŠøŠŗŠ»Š°Š“ Goodreads чŠø LibraryThing, Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø Š¹Š¾Š³Š¾ тут." + +#: bookwyrm/templates/guided_tour/user_books.html:79 +msgid "Import from another service" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ Š· іŠ½ŃˆŠ¾Š³Š¾ сŠµŃ€Š²Ń–ŃŃƒ" + +#: bookwyrm/templates/guided_tour/user_books.html:101 +msgid "Now that we've explored book shelves, let's take a look at a related concept: book lists!" +msgstr "Š¢ŠµŠæŠµŃ€, ŠŗŠ¾Š»Šø Š¼Šø Š“Š¾ŃŠ»Ń–Š“ŠøŠ»Šø ŠŗŠ½ŠøŠ¶ŠŗŠ¾Š²Ń– ŠæŠ¾Š»Šøці, ŠæŠ¾Š³Š»ŃŠ½ŃŒŠ¼Š¾ Š½Š° ŠæŠ¾Š²'яŠ·Š°Š½Ńƒ ŠŗŠ¾Š½Ń†ŠµŠæцію: сŠæŠøсŠŗŠø ŠŗŠ½ŠøŠ³!" + +#: bookwyrm/templates/guided_tour/user_books.html:101 +msgid "Click on the Lists link here to continue the tour." +msgstr "ŠŠ°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° Š”ŠæŠøсŠŗŠø тут, щŠ¾Š± ŠæрŠ¾Š“Š¾Š²Š¶ŠøтŠø ŠµŠŗсŠŗурсію." + +#: bookwyrm/templates/guided_tour/user_groups.html:10 +msgid "You can create or join a group with other users. Groups can share group-curated book lists, and in future will be able to do other things." +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ стŠ²Š¾Ń€ŠøтŠø Š°Š±Š¾ ŠæрŠøєŠ“Š½Š°Ń‚Šøся Š“Š¾ Š³Ń€ŃƒŠæŠø Š· іŠ½ŃˆŠøŠ¼Šø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°Š¼Šø. Š“Ń€ŃƒŠæŠø Š¼Š¾Š¶ŃƒŃ‚ŃŒ ŠæŠ¾ŃˆŠøрюŠ²Š°Ń‚Šø ŠŗурŠ¾Š²Š°Š½Ń– сŠæŠøсŠŗŠø, і Š² Š¼Š°Š¹Š±ŃƒŃ‚Š½ŃŒŠ¾Š¼Ńƒ Š·Š¼Š¾Š¶ŃƒŃ‚ŃŒ рŠ¾Š±ŠøтŠø іŠ½ŃˆŃ– рŠµŃ‡Ń–." + +#: 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 +msgid "Groups" +msgstr "Š“Ń€ŃƒŠæŠø" + +#: bookwyrm/templates/guided_tour/user_groups.html:31 +msgid "Let's create a new group!" +msgstr "Š”тŠ²Š¾Ń€Ń–Š¼Š¾ Š½Š¾Š²Ńƒ Š³Ń€ŃƒŠæу!" + +#: bookwyrm/templates/guided_tour/user_groups.html:31 +msgid "Click the Create group button, then Next to continue the tour" +msgstr "ŠŠ°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° ŠŗŠ½Š¾ŠæŠŗу Š”тŠ²Š¾Ń€ŠøтŠø Š³Ń€ŃƒŠæу, Š° ŠæŠ¾Ń‚Ń–Š¼ Š”Š°Š»Ń– Š“Š»Ń ŠæрŠ¾Š“Š¾Š²Š¶ŠµŠ½Š½Ń туру" + +#: bookwyrm/templates/guided_tour/user_groups.html:55 +msgid "Give your group a name and describe what it is about. You can make user groups for any purpose - a reading group, a bunch of friends, whatever!" +msgstr "Š”Š°Š¹Ń‚Šµ Š½Š°Š·Š²Ńƒ Š²Š°ŃˆŃ–Š¹ Š³Ń€ŃƒŠæі тŠ° Š¾ŠæŠøшіть її. Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ стŠ²Š¾Ń€ŠøтŠø Š³Ń€ŃƒŠæŠø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š² Š· Š±ŃƒŠ“ь-яŠŗŠ¾Ń— Š¼ŠµŃ‚Šø - Š³Ń€ŃƒŠæŠ° Š“Š»Ń чŠøтŠ°Š½Š½Ń, Š³Ń€ŃƒŠæŠø Š“руŠ·Ń–Š², щŠ¾ Š·Š°Š²Š³Š¾Š“Š½Š¾!" + +#: bookwyrm/templates/guided_tour/user_groups.html:56 +msgid "Creating a group" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š½Ń Š³Ń€ŃƒŠæŠø" + +#: bookwyrm/templates/guided_tour/user_groups.html:78 +msgid "Groups have privacy settings just like posts and lists, except that group privacy cannot be Followers." +msgstr "Š“Ń€ŃƒŠæŠø Š¼Š°ŃŽŃ‚ŃŒ Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½Š½Ń ŠŗŠ¾Š½Ń„Ń–Š“ŠµŠ½Ń†Ń–Š¹Š½Š¾ŃŃ‚Ń–, яŠŗ і ŠæуŠ±Š»Ń–ŠŗŠ°Ń†Ń–Ń— тŠ° сŠæŠøсŠŗŠø, Š·Š° Š²ŠøŠ½ŃŃ‚ŠŗŠ¾Š¼ тŠ¾Š³Š¾, щŠ¾ ŠŗŠ¾Š½Ń„Ń–Š“ŠµŠ½Ń†Ń–Š¹Š½Ń–ŃŃ‚ŃŒ Š³Ń€ŃƒŠæŠø Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø ŠŸŃ–Š“ŠæŠøсŠ½ŠøŠŗŠ°Š¼." + +#: bookwyrm/templates/guided_tour/user_groups.html:79 +msgid "Group visibility" +msgstr "Š’ŠøŠ“ŠøŠ¼Ń–ŃŃ‚ŃŒ Š³Ń€ŃƒŠæŠø" + +#: bookwyrm/templates/guided_tour/user_groups.html:102 +msgid "Once you're happy with how everything is set up, click the Save button to create your new group." +msgstr "ŠÆŠŗщŠ¾ Š²Šø Š·Š°Š“Š¾Š²Š¾Š»ŠµŠ½Ń– тŠøŠ¼, яŠŗ Š²ŃŠµ Š½Š°Š»Š°ŃˆŃ‚Š¾Š²Š°Š½Š¾, Š½Š°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ ŠŗŠ½Š¾ŠæŠŗу Š—Š±ŠµŃ€ŠµŠ³Ń‚Šø, щŠ¾Š± стŠ²Š¾Ń€ŠøтŠø Š½Š¾Š²Ńƒ Š³Ń€ŃƒŠæу." + +#: bookwyrm/templates/guided_tour/user_groups.html:102 +msgid "Create and save a group to continue the tour." +msgstr "Š”тŠ²Š¾Ń€ŠøтŠø тŠ° Š·Š±ŠµŃ€ŠµŠ³Ń‚Šø Š³Ń€ŃƒŠæу Š“Š»Ń ŠæрŠ¾Š“Š¾Š²Š¶ŠµŠ½Š½Ń туру." + +#: bookwyrm/templates/guided_tour/user_groups.html:103 +msgid "Save your group" +msgstr "Š—Š±ŠµŃ€ŠµŠ³Ń‚Šø сŠ²Š¾ŃŽ Š³Ń€ŃƒŠæу" + +#: bookwyrm/templates/guided_tour/user_profile.html:10 +msgid "This is your user profile. All your latest activities will be listed here. Other Bookwyrm users can see parts of this page too - what they can see depends on your privacy settings." +msgstr "Š¦Šµ Š²Š°Ńˆ ŠæрŠ¾Ń„Ń–Š»ŃŒ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°. Š£ŃŃ– Š²Š°ŃˆŃ– Š¾ŃŃ‚Š°Š½Š½Ń– Š“ії Š±ŃƒŠ“уть ŠæŠµŃ€ŠµŃ€Š°Ń…Š¾Š²Š°Š½Ń– тут. Š†Š½ŃˆŃ– ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń– Bookwyrm Š¼Š¾Š¶ŃƒŃ‚ŃŒ тŠ°ŠŗŠ¾Š¶ Š±Š°Ń‡ŠøтŠø чŠ°ŃŃ‚ŠøŠ½Šø цієї стŠ¾Ń€Ń–Š½ŠŗŠø - тŠµ, щŠ¾ Š²Š¾Š½Šø Š¼Š¾Š¶ŃƒŃ‚ŃŒ Š±Š°Ń‡ŠøтŠø, Š·Š°Š»ŠµŠ¶Šøть Š²Ń–Š“ Š²Š°ŃˆŠøх Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½ŃŒ ŠŗŠ¾Š½Ń„Ń–Š“ŠµŠ½Ń†Ń–Š¹Š½Š¾ŃŃ‚Ń–." + +#: bookwyrm/templates/guided_tour/user_profile.html:11 +#: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14 +msgid "User Profile" +msgstr "ŠŸŃ€Š¾Ń„Ń–Š»ŃŒ ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/guided_tour/user_profile.html:31 +msgid "This tab shows everything you have read towards your annual reading goal, or allows you to set one. You don't have to set a reading goal if that's not your thing!" +msgstr "Š¦Ń Š²ŠŗŠ»Š°Š“ŠŗŠ° ŠæŠ¾ŠŗŠ°Š·ŃƒŃ” Š²ŃŠµ, щŠ¾ Š²Šø ŠæрŠ¾Ń‡ŠøтŠ°Š»Šø у рŠ°Š¼ŠŗŠ°Ń… річŠ½Š¾Ń— Š¼ŠµŃ‚Šø чŠøтŠ°Š½Š½Ń, Š°Š±Š¾ Š“Š¾Š·Š²Š¾Š»ŃŃ” її Š²ŃŃ‚Š°Š½Š¾Š²ŠøтŠø. Š¦Šµ Š½Šµ Š¾Š±Š¾Š²'яŠ·ŠŗŠ¾Š²Š¾. Š¢Ń–Š»ŃŒŠŗŠø яŠŗщŠ¾ Š²Š°Š¼ тŠ°ŠŗŠµ ŠæŠ¾Š“Š¾Š±Š°Ń”Ń‚ŃŒŃŃ." + +#: bookwyrm/templates/guided_tour/user_profile.html:32 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:94 +msgid "Reading Goal" +msgstr "ŠœŠµŃ‚Š° Š§ŠøтŠ°Š½Š½Ń" + +#: bookwyrm/templates/guided_tour/user_profile.html:54 +msgid "Here you can see your groups, or create a new one. A group brings together Bookwyrm users and allows them to curate lists together." +msgstr "Š¢ŃƒŃ‚ Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ ŠæŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø сŠ²Š¾Ń— Š³Ń€ŃƒŠæŠø, Š°Š±Š¾ стŠ²Š¾Ń€ŠøтŠø Š½Š¾Š²Ńƒ. Š“Ń€ŃƒŠæŠ° Š¾Š±'єŠ“Š½ŃƒŃ” ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š² Bookwyrm і Š“Š¾Š·Š²Š¾Š»ŃŃ” ŠŗŠµŃ€ŃƒŠ²Š°Ń‚Šø сŠæŠøсŠŗŠ°Š¼Šø рŠ°Š·Š¾Š¼." + +#: bookwyrm/templates/guided_tour/user_profile.html:77 +msgid "You can see your lists, or create a new one, here. A list is a collection of books that have something in common." +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ ŠæŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø сŠæŠøсŠŗŠø Š°Š±Š¾ стŠ²Š¾Ń€ŠøтŠø Š½Š¾Š²ŠøŠ¹. Š”ŠæŠøсŠ¾Šŗ - цŠµ ŠŗŠ¾Š»ŠµŠŗція ŠŗŠ½ŠøŠ³, щŠ¾ Š¼Š°ŃŽŃ‚ŃŒ щŠ¾ŃŃŒ сŠæіŠ»ŃŒŠ½Šµ." + +#: bookwyrm/templates/guided_tour/user_profile.html:100 +msgid "The Books tab shows your book shelves. We'll explore this later in the tour." +msgstr "Š’ŠŗŠ»Š°Š“ŠŗŠ° ŠšŠ½ŠøŠ³Šø ŠæŠ¾ŠŗŠ°Š·ŃƒŃ” Š²Š°ŃˆŃ– ŠŗŠ½ŠøŠ¶ŠŗŠ¾Š²Ń– ŠæŠ¾Š»Šøці. ŠœŠø Š“Š¾ŃŠ»Ń–Š“ŠøŠ¼Š¾ цŠµ ŠæіŠ·Š½Ń–ŃˆŠµ Š² ŠµŠŗсŠŗурсії." + +#: bookwyrm/templates/guided_tour/user_profile.html:123 +msgid "Now you understand the basics of your profile page, let's add a book to your shelves." +msgstr "Š¢ŠµŠæŠµŃ€, ŠŗŠ¾Š»Šø Š²Šø рŠ¾Š·Ń–Š±Ń€Š°Š»Šøся у стŠ¾Ń€Ń–Š½Ń†Ń– Š²Š°ŃˆŠ¾Š³Š¾ ŠæрŠ¾Ń„Ń–Š»ŃŽ, Š½ŃƒŠ¼Š¾ Š“Š¾Š“Š°Š¼Š¾ ŠŗŠ½ŠøŠ³Ńƒ Š“Š¾ Š²Š°ŃˆŠøх ŠæŠ¾Š»Šøць." + +#: bookwyrm/templates/guided_tour/user_profile.html:123 +msgid "Search for a title or author to continue the tour." +msgstr "ŠŸŠ¾ŃˆŃƒŠŗŠ°Š¹Ń‚Šµ Š½Š°Š·Š²Ńƒ ŠŗŠ½ŠøŠ³Šø Š°Š±Š¾ Š°Š²Ń‚Š¾Ń€Š°, щŠ¾Š± ŠæрŠ¾Š“Š¾Š²Š¶ŠøтŠø ŠµŠŗсŠŗурсію." + +#: bookwyrm/templates/guided_tour/user_profile.html:124 +msgid "Find a book" +msgstr "ŠŸŠ¾ŃˆŃƒŠŗ ŠŗŠ½ŠøŠ³" + +#: bookwyrm/templates/hashtag.html:12 +#, python-format +msgid "See tagged statuses in the local %(site_name)s community" +msgstr "Š”ŠøŠ²Ń–Ń‚ŃŒŃŃ Š²Ń–Š“Š¼Ń–чŠµŠ½Ń– стŠ°Ń‚ŃƒŃŠø у Š»Š¾ŠŗŠ°Š»ŃŒŠ½Ń–Š¹ сŠæіŠ»ŃŒŠ½Š¾Ń‚Ń– %(site_name)s" + +#: bookwyrm/templates/hashtag.html:25 +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" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø ŠšŠ½ŠøŠ³Šø" + +#: bookwyrm/templates/import/import.html:13 +msgid "Not a valid CSV file" +msgstr "ŠŠµŠŗŠ¾Ń€ŠµŠŗтŠ½ŠøŠ¹ 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 %(display_size)s books every %(import_limit_reset)s days." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: bookwyrm/templates/import/import.html:27 +#, python-format +msgid "You have %(display_left)s left." +msgstr "" + +#: bookwyrm/templates/import/import.html:34 +#, python-format +msgid "On average, recent imports have taken %(hours)s hours." +msgstr "Š’ сŠµŃ€ŠµŠ“Š½ŃŒŠ¾Š¼Ńƒ, Š½ŠµŠ“Š°Š²Š½Ń– іŠ¼ŠæŠ¾Ń€Ń‚Šø Š·Š°Š¹Š½ŃŠ»Šø %(hours)s Š³Š¾Š“ŠøŠ½." + +#: bookwyrm/templates/import/import.html:38 +#, python-format +msgid "On average, recent imports have taken %(minutes)s minutes." +msgstr "Š’ сŠµŃ€ŠµŠ“Š½ŃŒŠ¾Š¼Ńƒ, Š½ŠµŠ“Š°Š²Š½Ń– іŠ¼ŠæŠ¾Ń€Ń‚Šø Š·Š°Š¹Š½ŃŠ»Šø %(minutes)s хŠ²ŠøŠ»ŠøŠ½." + +#: bookwyrm/templates/import/import.html:53 +msgid "Data source:" +msgstr "Š”Š¶ŠµŃ€ŠµŠ»Š¾ Š“Š°Š½Šøх:" + +#: bookwyrm/templates/import/import.html:59 +msgid "Goodreads (CSV)" +msgstr "Goodreads (CSV)" + +#: bookwyrm/templates/import/import.html:62 +msgid "Storygraph (CSV)" +msgstr "Storygraph (CSV)" + +#: bookwyrm/templates/import/import.html:65 +msgid "LibraryThing (TSV)" +msgstr "LibraryThing (TSV)" + +#: bookwyrm/templates/import/import.html:68 +msgid "OpenLibrary (CSV)" +msgstr "OpenLibrary (CSV)" + +#: bookwyrm/templates/import/import.html:71 +msgid "Calibre (CSV)" +msgstr "Calibre (CSV)" + +#: bookwyrm/templates/import/import.html:77 +msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š“Š°Š½Ń– Goodreads Š½Š° стŠ¾Ń€Ń–Š½Ń†Ń– Import/Export Š²Š°ŃˆŠ¾Š³Š¾ Š¾Š±Š»Ń–ŠŗŠ¾Š²Š¾Š³Š¾ Š·Š°ŠæŠøсу Goodreads." + +#: bookwyrm/templates/import/import.html:86 +msgid "Data file:" +msgstr "Š¤Š°Š¹Š» Š“Š°Š½Šøх:" + +#: bookwyrm/templates/import/import.html:94 +msgid "Include reviews" +msgstr "Š Š°Š·Š¾Š¼ Š· рŠµŃ†ŠµŠ½Š·Ń–яŠ¼Šø" + +#: bookwyrm/templates/import/import.html:99 +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/settings/federation/instance_blocklist.html:78 +msgid "Import" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø" + +#: bookwyrm/templates/import/import.html:109 +msgid "You've reached the import limit." +msgstr "Š’Šø Š“Š¾ŃŃŠ³Š»Šø Š»Ń–Š¼Ń–Ń‚Ńƒ Š½Š° іŠ¼ŠæŠ¾Ń€Ń‚." + +#: bookwyrm/templates/import/import.html:118 +msgid "Imports are temporarily disabled; thank you for your patience." +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Š½Š½Ń тŠøŠ¼Ń‡Š°ŃŠ¾Š²Š¾ Š²Ń–Š“ŠŗŠ»ŃŽŃ‡ŠµŠ½Š¾; Š“яŠŗуєŠ¼Š¾ Š·Š° тŠµŃ€ŠæіŠ½Š½Ń." + +#: bookwyrm/templates/import/import.html:125 +msgid "Recent Imports" +msgstr "ŠžŃŃ‚Š°Š½Š½Ń– Š†Š¼ŠæŠ¾Ń€Ń‚Šø" + +#: bookwyrm/templates/import/import.html:130 +#: bookwyrm/templates/settings/imports/imports.html:120 +msgid "Date Created" +msgstr "Š”Š°Ń‚Š° Š”тŠ²Š¾Ń€ŠµŠ½Š½Ń" + +#: bookwyrm/templates/import/import.html:133 +msgid "Last Updated" +msgstr "ŠžŃŃ‚Š°Š½Š½Ń” ŠžŠ½Š¾Š²Š»ŠµŠ½Š½Ń" + +#: bookwyrm/templates/import/import.html:136 +#: bookwyrm/templates/settings/imports/imports.html:129 +msgid "Items" +msgstr "ŠžŠ“ŠøŠ½Šøць" + +#: bookwyrm/templates/import/import.html:145 +msgid "No recent imports" +msgstr "ŠžŃŃ‚Š°Š½Š½Ń–Š¼ чŠ°ŃŠ¾Š¼ іŠ¼ŠæŠ¾Ń€Ń‚Ń–Š² Š½Šµ Š±ŃƒŠ»Š¾" + +#: bookwyrm/templates/import/import_status.html:6 +#: bookwyrm/templates/import/import_status.html:15 +#: bookwyrm/templates/import/import_status.html:29 +msgid "Import Status" +msgstr "Š”тŠ°Ń‚ŃƒŃ Š†Š¼ŠæŠ¾Ń€Ń‚Ńƒ" + +#: bookwyrm/templates/import/import_status.html:13 +#: bookwyrm/templates/import/import_status.html:27 +msgid "Retry Status" +msgstr "Š”тŠ°Ń‚ŃƒŃ ŠŸŠ¾Š²Ń‚Š¾Ń€ŠµŠ½Š½Ń" + +#: bookwyrm/templates/import/import_status.html:22 +#: bookwyrm/templates/settings/celery.html:45 +#: bookwyrm/templates/settings/imports/imports.html:6 +#: bookwyrm/templates/settings/imports/imports.html:9 +#: bookwyrm/templates/settings/layout.html:82 +msgid "Imports" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚Šø" + +#: bookwyrm/templates/import/import_status.html:39 +msgid "Import started:" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ рŠ¾Š·ŠæŠ¾Ń‡Š°Ń‚Š¾:" + +#: bookwyrm/templates/import/import_status.html:48 +msgid "In progress" +msgstr "Š¢Ń€ŠøŠ²Š°Ń”" + +#: bookwyrm/templates/import/import_status.html:50 +msgid "Refresh" +msgstr "ŠžŠ½Š¾Š²ŠøтŠø" + +#: bookwyrm/templates/import/import_status.html:72 +#: bookwyrm/templates/settings/imports/imports.html:161 +msgid "Stop import" +msgstr "Š—ŃƒŠæŠøŠ½ŠøтŠø іŠ¼ŠæŠ¾Ń€Ń‚" + +#: bookwyrm/templates/import/import_status.html:78 +#, python-format +msgid "%(display_counter)s item needs manual approval." +msgid_plural "%(display_counter)s items need manual approval." +msgstr[0] "%(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃ” ручŠ½Š¾Š³Š¾ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń." +msgstr[1] "%(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š² ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ ручŠ½Š¾Š³Š¾ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń." +msgstr[2] "%(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š² ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ ручŠ½Š¾Š³Š¾ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń." +msgstr[3] "%(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š² ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ ручŠ½Š¾Š³Š¾ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń." + +#: bookwyrm/templates/import/import_status.html:83 +#: bookwyrm/templates/import/manual_review.html:8 +msgid "Review items" +msgstr "ŠžŠ³Š»ŃŠ“ ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š²" + +#: bookwyrm/templates/import/import_status.html:89 +#, python-format +msgid "%(display_counter)s item failed to import." +msgid_plural "%(display_counter)s items failed to import." +msgstr[0] "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø %(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚." +msgstr[1] "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø %(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š²." +msgstr[2] "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø %(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š²." +msgstr[3] "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø %(display_counter)s ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Ń–Š²." + +#: bookwyrm/templates/import/import_status.html:95 +msgid "View and troubleshoot failed items" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø тŠ° Š²ŠøŠæрŠ°Š²ŠøтŠø Š½ŠµŠ²Š“Š°Š»Ń– ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Šø." + +#: bookwyrm/templates/import/import_status.html:107 +msgid "Row" +msgstr "Š ŃŠ“Š¾Šŗ" + +#: bookwyrm/templates/import/import_status.html:110 +#: bookwyrm/templates/shelf/shelf.html:163 +#: bookwyrm/templates/shelf/shelf.html:185 +msgid "Title" +msgstr "ŠŠ°Š·Š²Š°" + +#: bookwyrm/templates/import/import_status.html:113 +msgid "ISBN" +msgstr "ISBN" + +#: bookwyrm/templates/import/import_status.html:117 +msgid "Openlibrary key" +msgstr "ŠšŠ»ŃŽŃ‡ Openlibrary" + +#: bookwyrm/templates/import/import_status.html:121 +#: bookwyrm/templates/shelf/shelf.html:164 +#: bookwyrm/templates/shelf/shelf.html:188 +msgid "Author" +msgstr "ŠŠ²Ń‚Š¾Ń€" + +#: bookwyrm/templates/import/import_status.html:124 +msgid "Shelf" +msgstr "ŠŸŠ¾Š»Šøця" + +#: bookwyrm/templates/import/import_status.html:127 +#: bookwyrm/templates/import/manual_review.html:13 +#: bookwyrm/templates/snippets/create_status.html:16 +msgid "Review" +msgstr "Š ŠµŃ†ŠµŠ½Š·Ń–я" + +#: bookwyrm/templates/import/import_status.html:131 +#: bookwyrm/templates/settings/link_domains/link_table.html:9 +msgid "Book" +msgstr "ŠšŠ½ŠøŠ³Š°" + +#: bookwyrm/templates/import/import_status.html:142 +msgid "Import preview unavailable." +msgstr "ŠŸŠ¾ŠæŠµŃ€ŠµŠ“Š½Ń–Š¹ ŠæŠµŃ€ŠµŠ³Š»ŃŠ“ іŠ¼ŠæŠ¾Ń€Ń‚Ńƒ Š½ŠµŠ“Š¾ŃŃ‚ŃƒŠæŠ½ŠøŠ¹." + +#: bookwyrm/templates/import/import_status.html:150 +msgid "No items currently need review" +msgstr "ŠŠ°Ń€Š°Š·Ń– Š¶Š¾Š“ŠµŠ½ ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚ Š½Šµ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃ” ŠæŠµŃ€ŠµŠ²Ń–Ń€ŠŗŠø" + +#: bookwyrm/templates/import/import_status.html:186 +msgid "View imported review" +msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚Šø іŠ¼ŠæŠ¾Ń€Ń‚Š¾Š²Š°Š½Ńƒ рŠµŃ†ŠµŠ½Š·Ń–ŃŽ" + +#: bookwyrm/templates/import/import_status.html:200 +msgid "Imported" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚Š¾Š²Š°Š½Š¾" + +#: bookwyrm/templates/import/import_status.html:206 +msgid "Needs manual review" +msgstr "ŠŸŠ¾Ń‚Ń€ŠµŠ±ŃƒŃ” ручŠ½Š¾Ń— ŠæŠµŃ€ŠµŠ²Ń–Ń€ŠŗŠø" + +#: bookwyrm/templates/import/import_status.html:219 +msgid "Retry" +msgstr "Š”ŠæрŠ¾Š±ŃƒŠ²Š°Ń‚Šø Š·Š½Š¾Š²Ńƒ" + +#: bookwyrm/templates/import/import_status.html:237 +msgid "This import is in an old format that is no longer supported. If you would like to troubleshoot missing items from this import, click the button below to update the import format." +msgstr "Š¦Šµ іŠ¼ŠæŠ¾Ń€Ń‚ стŠ°Ń€Š¾Š³Š¾ фŠ¾Ń€Š¼Š°Ń‚Ńƒ, яŠŗŠøŠ¹ Š±Ń–Š»ŃŒŃˆŠµ Š½Šµ ŠæіŠ“трŠøŠ¼ŃƒŃ”Ń‚ŃŒŃŃ. ŠÆŠŗщŠ¾ Š²Šø хŠ¾Ń‡ŠµŃ‚Šµ Š²ŠøŠæрŠ°Š²ŠøтŠø Š½ŠµŠ²Š“Š°Š»Ń– ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Šø Š· цьŠ¾Š³Š¾ іŠ¼ŠæŠ¾Ń€Ń‚Ńƒ, Š½Š°Ń‚ŠøсŠ½Ń–Ń‚ŃŒ Š½Š° ŠŗŠ½Š¾ŠæŠŗу Š½ŠøŠ¶Ń‡Šµ, щŠ¾Š± Š¾Š½Š¾Š²ŠøтŠø фŠ¾Ń€Š¼Š°Ń‚ іŠ¼ŠæŠ¾Ń€Ń‚Ńƒ." + +#: bookwyrm/templates/import/import_status.html:239 +msgid "Update import" +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:138 +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/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:21 +msgid "Permission Denied" +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 "" + +#: 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:88 +msgid "Feed" +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_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 "Š’Šø ŠæŠµŃ€ŠµŠ¼Ń–стŠøŠ»Šø сŠ²Ń–Š¹ Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс Š½Š° %(username)s" + +#: 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø ŠæŠµŃ€ŠµŠ¼Ń–щŠµŠ½Š½Ń" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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 "%(related_user)s ŠæрŠøŠ¹Š½ŃŠ²(-Š»Š°) Š²Š°ŃˆŠµ Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń Š“Š¾ Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" + +#: 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 "%(related_user)s тŠ° %(second_user)s ŠæрŠøŠ¹Š½ŃŠ»Šø Š²Š°ŃˆŠµ Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń Š“Š¾ Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх ŠæрŠøŠ¹Š½ŃŠ»Šø Š²Š°ŃˆŠµ Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń Š“Š¾ Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" + +#: bookwyrm/templates/notifications/items/add.html:33 +#, python-format +msgid "%(related_user)s added %(book_title)s to your list \"%(list_name)s\"" +msgstr "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) %(book_title)s Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" + +#: 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 "%(related_user)s ŠæрŠ¾ŠæŠ¾Š½ŃƒŃ” Š“Š¾Š“Š°Ń‚Šø %(book_title)s Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" + +#: 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 "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) %(book_title)s тŠ° %(second_book_title)s Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" + +#: 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 "%(related_user)s ŠæрŠ¾ŠæŠ¾Š½ŃƒŃ” Š“Š¾Š“Š°Ń‚Šø %(book_title)s тŠ° %(second_book_title)s Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" + +#: bookwyrm/templates/notifications/items/add.html:66 +#, python-format +msgid "%(related_user)s added a book to one of your lists" +msgstr "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) ŠŗŠ½ŠøŠ³Ńƒ Š“Š¾ Š¾Š“Š½Š¾Š³Š¾ Š· Š²Š°ŃˆŠøх сŠæŠøсŠŗіŠ²" + +#: 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] "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŃƒ ŠŗŠ½ŠøŠ³Ńƒ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" +msgstr[1] "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŠøх ŠŗŠ½ŠøŠ³ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" +msgstr[2] "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŠøх ŠŗŠ½ŠøŠ³ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" +msgstr[3] "%(related_user)s Š“Š¾Š“Š°Š²(-Š»Š°) %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŠøх ŠŗŠ½ŠøŠ³ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" + +#: 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] "%(related_user)s ŠæрŠ¾ŠæŠ¾Š½ŃƒŃ” Š“Š¾Š“Š°Ń‚Šø %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŃƒ ŠŗŠ½ŠøŠ³Ńƒ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" +msgstr[1] "%(related_user)s ŠæрŠ¾ŠæŠ¾Š½ŃƒŃ” Š“Š¾Š“Š°Ń‚Šø %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŠøх ŠŗŠ½ŠøŠ³ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" +msgstr[2] "%(related_user)s ŠæрŠ¾ŠæŠ¾Š½ŃƒŃ” Š“Š¾Š“Š°Ń‚Šø %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŠøх ŠŗŠ½ŠøŠ³ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" +msgstr[3] "%(related_user)s ŠæрŠ¾ŠæŠ¾Š½ŃƒŃ” Š“Š¾Š“Š°Ń‚Šø %(book_title)s, %(second_book_title)s, тŠ° %(display_count)s іŠ½ŃˆŠøх ŠŗŠ½ŠøŠ³ Š“Š¾ Š²Š°ŃˆŠ¾Š³Š¾ сŠæŠøсŠŗу \"%(list_name)s\"" + +#: bookwyrm/templates/notifications/items/boost.html:21 +#, python-format +msgid "%(related_user)s boosted your review of %(book_title)s" +msgstr "%(related_user)s ŠæŠ¾ŃˆŠøрŠøŠ²(-Š»Š°) Š²Š°Ńƒ рŠµŃ†ŠµŠ½Š·Ń–ŃŽ Š½Š° %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(second_user)s ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°ŃˆŃƒ рŠµŃ†ŠµŠ½Š·Ń–ŃŽ Š½Š° %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°ŃˆŃƒ рŠµŃ†ŠµŠ½Š·Ń–ŃŽ Š½Š° %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:44 +#, python-format +msgid "%(related_user)s boosted your comment on %(book_title)s" +msgstr "%(related_user)s ŠæŠ¾ŃˆŠøрŠøŠ²(-Š»Š°) Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(second_user)s ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:67 +#, python-format +msgid "%(related_user)s boosted your quote from %(book_title)s" +msgstr "%(related_user)s ŠæŠ¾ŃˆŠøрŠøŠ²(-Š»Š°) Š²Š°ŃˆŃƒ цŠøтŠ°Ń‚Ńƒ Š· %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(second_user)s ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°ŃˆŃƒ цŠøтŠ°Ń‚Ńƒ Š· %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°ŃˆŃƒ цŠøтŠ°Ń‚Ńƒ Š· %(book_title)s" + +#: bookwyrm/templates/notifications/items/boost.html:90 +#, python-format +msgid "%(related_user)s boosted your status" +msgstr "%(related_user)s ŠæŠ¾ŃˆŠøрŠøŠ²(-Š»Š°) Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/notifications/items/boost.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s boosted your status" +msgstr "%(related_user)s тŠ° %(second_user)s ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/notifications/items/boost.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others boosted your status" +msgstr "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх ŠæŠ¾ŃˆŠøрŠøŠ»Šø Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/notifications/items/fav.html:21 +#, python-format +msgid "%(related_user)s liked your review of %(book_title)s" +msgstr "%(related_user)s сŠæŠ¾Š“Š¾Š±Š°Š»Š°ŃŃŒ Š²Š°ŃˆŠ° рŠµŃ†ŠµŠ½Š·Ń–я Š½Š° %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(second_user)s сŠæŠ¾Š“Š¾Š±Š°Š»Š°ŃŃŒ Š²Š°ŃˆŠ° рŠµŃ†ŠµŠ½Š·Ń–я Š½Š° %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøŠ¼ сŠæŠ¾Š“Š¾Š±Š°Š»Š°ŃŃŒ Š²Š°ŃˆŠ° рŠµŃ†ŠµŠ½Š·Ń–я Š½Š° %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:44 +#, python-format +msgid "%(related_user)s liked your comment on %(book_title)s" +msgstr "%(related_user)s сŠæŠ¾Š“Š¾Š±Š°Š²ŃŃ Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(second_user)s сŠæŠ¾Š“Š¾Š±Š°Š²ŃŃ Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøŠ¼ сŠæŠ¾Š“Š¾Š±Š°Š²ŃŃ Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:67 +#, python-format +msgid "%(related_user)s liked your quote from %(book_title)s" +msgstr "%(related_user)s сŠæŠ¾Š“Š¾Š±Š°Š»Š°ŃŃŒ Š²Š°ŃˆŠ° цŠøтŠ°Ń‚Š° Š· %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(second_user)s сŠæŠ¾Š“Š¾Š±Š°Š»Š°ŃŃŒ Š²Š°ŃˆŠ° цŠøтŠ°Ń‚Š° Š· %(book_title)s" + +#: 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 "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøŠ¼ сŠæŠ¾Š“Š¾Š±Š°Š»Š°ŃŃŒ Š²Š°ŃˆŠ° цŠøтŠ°Ń‚Š° Š· %(book_title)s" + +#: bookwyrm/templates/notifications/items/fav.html:90 +#, python-format +msgid "%(related_user)s liked your status" +msgstr "%(related_user)s сŠæŠ¾Š“Š¾Š±Š°Š²ŃŃ Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/notifications/items/fav.html:96 +#, python-format +msgid "%(related_user)s and %(second_user)s liked your status" +msgstr "%(related_user)s тŠ° %(second_user)s сŠæŠ¾Š“Š¾Š±Š°Š²ŃŃ Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/notifications/items/fav.html:105 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others liked your status" +msgstr "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøŠ¼ сŠæŠ¾Š“Š¾Š±Š°Š²ŃŃ Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" + +#: bookwyrm/templates/notifications/items/follow.html:16 +#, python-format +msgid "%(related_user)s followed you" +msgstr "%(related_user)s тŠµŠæŠµŃ€ сŠ»Ń–Š“Šŗує Š·Š° Š²Š°Š¼Šø" + +#: bookwyrm/templates/notifications/items/follow.html:20 +#, python-format +msgid "%(related_user)s and %(second_user)s followed you" +msgstr "%(related_user)s тŠ° %(second_user)s тŠµŠæŠµŃ€ сŠ»Ń–Š“Šŗують Š·Š° Š²Š°Š¼Šø" + +#: bookwyrm/templates/notifications/items/follow.html:25 +#, python-format +msgid "%(related_user)s and %(other_user_display_count)s others followed you" +msgstr "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх тŠµŠæŠµŃ€ сŠ»Ń–Š“Šŗують Š·Š° Š²Š°Š¼Šø" + +#: bookwyrm/templates/notifications/items/follow_request.html:15 +#, python-format +msgid "%(related_user)s sent you a follow request" +msgstr "%(related_user)s Š½Š°Š“ісŠ»Š°Š²(-Š»Š°) Š²Š°Š¼ Š·Š°ŠæŠøт Š½Š° ŠæіŠ“ŠæŠøсŠŗу" + +#: 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 "%(related_user)s Š·Š°ŠæрŠ¾ŃˆŃƒŃ” Š²Š°Ń ŠæрŠøєŠ“Š½Š°Ń‚Šøся Š“Š¾ Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" + +#: 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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: 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 "%(related_user)s ŠæŠµŃ€ŠµŠ¼Ń–щŠµŠ½Š¾ Š½Š° %(username)s" + +#: bookwyrm/templates/notifications/items/move_user.html:25 +#, python-format +msgid "%(related_user)s has undone their move" +msgstr "%(related_user)s сŠŗŠ°ŃŃƒŠ²Š°Š² сŠ²Š¾Ń” ŠæŠµŃ€ŠµŠ¼Ń–щŠµŠ½Š½Ń" + +#: 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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: 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/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 "" + +#: 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:7 +#: 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 "" + +#: 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 "" + +#: bookwyrm/templates/reading_progress/start.html:5 +#, python-format +msgid "Start \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/reading_progress/stop.html:5 +#, python-format +msgid "Stop Reading \"%(book_title)s\"" +msgstr "" + +#: bookwyrm/templates/reading_progress/want.html:5 +#, python-format +msgid "Want to Read \"%(book_title)s\"" +msgstr "" + +#: 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 "" + +#: 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 "" + +#: 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 "" + +#: bookwyrm/templates/settings/celery.html:14 +msgid "You can set up monitoring to check if Celery is running by querying:" +msgstr "" + +#: 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 "" + +#: 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 "" + +#: 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 "" + +#: 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 "" + +#: 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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: bookwyrm/templates/settings/dashboard/warnings/email_config.html:8 +#, python-format +msgid "Your outgoing email address, %(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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: 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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: 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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: 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 "" + +#: 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:119 +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:113 +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:116 +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:84 +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:66 +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:123 +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 +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 "" + +#: 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:60 +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 "" + +#: 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 "Š”ŠŗŠ°Ń€Š³Š° #%(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 "Successfully added theme" +msgstr "Š¢ŠµŠ¼Ńƒ усŠæішŠ½Š¾ Š“Š¾Š“Š°Š½Š¾" + +#: bookwyrm/templates/settings/themes.html:26 +msgid "How to add a theme" +msgstr "ŠÆŠŗ Š“Š¾Š“Š°Ń‚Šø тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/settings/themes.html:29 +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:32 +msgid "Run ./bw-dev compile_themes and ./bw-dev collectstatic." +msgstr "Š—Š°Šæустіть ./bw-dev compile_themes тŠ° ./bw-dev collectstatic." + +#: bookwyrm/templates/settings/themes.html:35 +msgid "Add the file name using the form below to make it available in the application interface." +msgstr "Š”Š¾Š“Š°Š¹Ń‚Šµ Š½Š°Š·Š²Ńƒ фŠ°Š¹Š»Ńƒ Š²ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŃŽŃ‡Šø фŠ¾Ń€Š¼Ńƒ Š½ŠøŠ¶Ń‡Šµ, щŠ¾Š± Š·Ń€Š¾Š±ŠøтŠø її Š“Š¾ŃŃ‚ŃƒŠæŠ½Š¾ŃŽ Š² іŠ½Ń‚ŠµŃ€Ń„ŠµŠ¹ŃŃ– BookWyrm." + +#: bookwyrm/templates/settings/themes.html:42 +#: bookwyrm/templates/settings/themes.html:82 +msgid "Add theme" +msgstr "Š”Š¾Š“Š°Ń‚Šø тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/settings/themes.html:48 +msgid "Unable to save theme" +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ Š·Š±ŠµŃ€ŠµŠ³Ń‚Šø тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/settings/themes.html:63 +#: bookwyrm/templates/settings/themes.html:93 +msgid "Theme name" +msgstr "ŠŠ°Š·Š²Š° тŠµŠ¼Šø" + +#: bookwyrm/templates/settings/themes.html:73 +msgid "Theme filename" +msgstr "Š†Š¼'я фŠ°Š¹Š»Ńƒ тŠµŠ¼Šø" + +#: bookwyrm/templates/settings/themes.html:88 +msgid "Available Themes" +msgstr "Š”Š¾ŃŃ‚ŃƒŠæŠ½Ń– тŠµŠ¼Šø" + +#: bookwyrm/templates/settings/themes.html:96 +msgid "File" +msgstr "Š¤Š°Š¹Š»" + +#: bookwyrm/templates/settings/themes.html:111 +msgid "Remove theme" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø тŠµŠ¼Ńƒ" + +#: bookwyrm/templates/settings/users/delete_user_form.html:5 +#: bookwyrm/templates/settings/users/user_moderation_actions.html:38 +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: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" +msgstr "ŠŠµŠ°ŠŗтŠøŠ²Š½ŠøŠ¹" + +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 +msgid "Not set" +msgstr "ŠŠµ Š²ŃŃ‚Š°Š½Š¾Š²Š»ŠµŠ½Š¾" + +#: bookwyrm/templates/settings/users/user_info.html:16 +msgid "View user profile" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø ŠæрŠ¾Ń„Ń–Š»ŃŒ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/settings/users/user_info.html:19 +msgid "Go to user admin" +msgstr "ŠŸŠµŃ€ŠµŠ¹Ń‚Šø Š“Š¾ Š°Š“Š¼Ń–Š½Ń–ŃŃ‚Ń€ŃƒŠ²Š°Š½Š½Ń ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/settings/users/user_info.html:46 +msgid "Local" +msgstr "ŠœŃ–сцŠµŠ²ŠøŠ¹" + +#: bookwyrm/templates/settings/users/user_info.html:48 +msgid "Remote" +msgstr "Š— іŠ½ŃˆŠ¾Š³Š¾ сŠµŃ€Š²ŠµŃ€Š°" + +#: bookwyrm/templates/settings/users/user_info.html:57 +msgid "User details" +msgstr "ŠŸŠ¾Š“рŠ¾Š±Šøці ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/settings/users/user_info.html:61 +msgid "Email:" +msgstr "Š•Š»ŠµŠŗтрŠ¾Š½Š½Š° ŠæŠ¾ŃˆŃ‚Š°:" + +#: bookwyrm/templates/settings/users/user_info.html:71 +msgid "(View reports)" +msgstr "(ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø сŠŗŠ°Ń€Š³Šø)" + +#: bookwyrm/templates/settings/users/user_info.html:77 +msgid "Blocked by count:" +msgstr "Š—Š°Š±Š»Š¾ŠŗуŠ²Š°Š»Šø цьŠ¾Š³Š¾ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°:" + +#: bookwyrm/templates/settings/users/user_info.html:80 +msgid "Date added:" +msgstr "Š—Š°Ń€ŠµŃ”ŃŃ‚Ń€ŃƒŠ²Š°Š²ŃŃ Š°Š±Š¾ Š±ŃƒŠ»Š¾ Š“Š¾Š“Š°Š½Š¾:" + +#: bookwyrm/templates/settings/users/user_info.html:83 +msgid "Last active date:" +msgstr "ŠžŃŃ‚Š°Š½Š½Ń Š°ŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ:" + +#: bookwyrm/templates/settings/users/user_info.html:86 +msgid "Manually approved followers:" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“Š¶ŃƒŃ” ŠæіŠ“ŠæŠøсŠ½ŠøŠŗіŠ² Š²Ń€ŃƒŃ‡Š½Ńƒ:" + +#: bookwyrm/templates/settings/users/user_info.html:89 +msgid "Discoverable:" +msgstr "Š’ŠøŠ“ŠøŠ¼ŠøŠ¹:" + +#: bookwyrm/templates/settings/users/user_info.html:93 +msgid "Deactivation reason:" +msgstr "ŠŸŃ€ŠøчŠøŠ½Š° Š“ŠµŠ°ŠŗтŠøŠ²Š°Ń†Ń–Ń—:" + +#: bookwyrm/templates/settings/users/user_info.html:108 +msgid "Instance details" +msgstr "ŠŸŠ¾Š“рŠ¾Š±Šøці іŠ½ŃŃ‚Š°Š½ŃŃƒ" + +#: bookwyrm/templates/settings/users/user_info.html:130 +msgid "View instance" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø іŠ½ŃŃ‚Š°Š½Ń" + +#: bookwyrm/templates/settings/users/user_moderation_actions.html:5 +msgid "Permanently deleted" +msgstr "Š’ŠøŠ“Š°Š»ŠµŠ½Š¾ Š¾ŃŃ‚Š°Ń‚Š¾Ń‡Š½Š¾" + +#: bookwyrm/templates/settings/users/user_moderation_actions.html:8 +msgid "User Actions" +msgstr "ŠšŠµŃ€ŃƒŠ²Š°Š½Š½Ń ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼" + +#: bookwyrm/templates/settings/users/user_moderation_actions.html:21 +msgid "Activate user" +msgstr "ŠŠŗтŠøŠ²ŃƒŠ²Š°Ń‚Šø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/settings/users/user_moderation_actions.html:27 +msgid "Suspend user" +msgstr "Š—Š°Š±Š»Š¾ŠŗуŠ²Š°Ń‚Šø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/settings/users/user_moderation_actions.html:32 +msgid "Un-suspend user" +msgstr "Š Š¾Š·Š±Š»Š¾ŠŗуŠ²Š°Ń‚Šø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" + +#: bookwyrm/templates/settings/users/user_moderation_actions.html:54 +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:49 +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:87 +msgid "Create shelf" +msgstr "Š”тŠ²Š¾Ń€ŠøтŠø ŠæŠ¾Š»Šøцю" + +#: bookwyrm/templates/shelf/edit_shelf_form.html:5 +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/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 +msgid "All books" +msgstr "Š£ŃŃ– ŠŗŠ½ŠøŠ³Šø" + +#: bookwyrm/templates/shelf/shelf.html:112 +#, 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:119 +#, python-format +msgid "(showing %(start)s-%(end)s)" +msgstr "(ŠæŠ¾ŠŗŠ°Š·ŃƒŃŽŃ‚ŃŒŃŃ %(start)s-%(end)s)" + +#: bookwyrm/templates/shelf/shelf.html:131 +msgid "Edit shelf" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø ŠæŠ¾Š»Šøцю" + +#: bookwyrm/templates/shelf/shelf.html:139 +msgid "Delete shelf" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø ŠæŠ¾Š»Šøцю" + +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 +msgid "Shelved" +msgstr "Š”Š¾Š“Š°Š½Š¾ Š“Š¾ ŠæŠ¾Š»Šøці" + +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 +msgid "Started" +msgstr "ŠŸŠ¾Ń‡Š°Ń‚Š¾" + +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 +msgid "Finished" +msgstr "ŠŸŃ€Š¾Ń‡ŠøтŠ°Š½Š¾" + +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 +msgid "Until" +msgstr "Š”Š¾" + +#: bookwyrm/templates/shelf/shelf.html:225 +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/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/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:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 +msgid "Follow Requests" +msgstr "Š—Š°ŠæŠøтŠø Š½Š° ŠæіŠ“ŠæŠøсŠŗу" + +#: bookwyrm/templates/user/layout.html:88 +#: 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:31 +#, 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] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: 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:48 +#, 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 1d1227f8092b70c68bb692fb532759090142aa83..566e3c144ec509cf8408d2092449d3af7e01e5db 100644 GIT binary patch literal 94539 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 ByKw*j literal 44096 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 S0TOg?KN0&d0;IH0jQ%f4%`RX7 diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 77591afa9..7fa0b00bd 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-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-02 22:29\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -42,15 +42,15 @@ msgstr "{i} ꬔä½æē”Ø" msgid "Unlimited" msgstr "äøå—限" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "åƆē é”™čÆÆ" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "äø¤ę¬”č¾“å…„ēš„åƆē äøäø€č‡“" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "åƆē é”™čÆÆ" @@ -102,8 +102,8 @@ msgstr "列č”Øé”ŗåŗ" msgid "Book Title" msgstr "书名" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "čƄ价" @@ -145,7 +145,7 @@ msgstr "危险" msgid "Automatically generated report" msgstr "č‡ŖåŠØē”Ÿęˆēš„äø¾ęŠ„" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "ä»²č£å‘˜åˆ é™¤" msgid "Domain block" msgstr "åŸŸåå±č”½" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "ęœ‰å£°ä¹¦ē±" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "ē”µå­ä¹¦" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "图像小čÆ“" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "ē²¾č£…" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "å¹³č£…" @@ -205,26 +205,26 @@ msgstr "č·Øē«™" msgid "Blocked" msgstr "å·²å±č”½" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ē”Øęˆ·å" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "ē”Øęˆ·å" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "å·²ē»å­˜åœØä½æē”ØčÆ„ē”Øęˆ·åēš„ē”Øęˆ·ć€‚" -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "å·²ē»å­˜åœØä½æē”ØčÆ„ē”Øęˆ·åēš„ē”Øęˆ·ć€‚" msgid "Public" msgstr "公开" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "公开" msgid "Unlisted" msgstr "äøå…¬å¼€" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "äøå…¬å¼€" msgid "Followers" msgstr "关ę³Ø者" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "关ę³Ø者" msgid "Private" msgstr "ē§åƆ" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "ꓻ跃" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "å·²å®Œęˆ" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "å·²åœę­¢" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "åÆ¼å…„åœę­¢" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "åŠ č½½ä¹¦ē±ę—¶å‡ŗ错" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "ę‰¾äøåˆ°åŒ¹é…ēš„书" @@ -368,103 +368,103 @@ msgstr "引ē”Ø" msgid "Everything else" msgstr "ę‰€ęœ‰å…¶å®ƒå†…å®¹" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "äø»é”µę—¶é—“ēŗæ" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "äø»é”µ" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "书ē›®ę—¶é—“ēŗæ" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "书ē›®" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "Englishļ¼ˆč‹±čÆ­ļ¼‰" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (åŠ ę³°ē½—å°¼äŗščÆ­)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutschļ¼ˆå¾·čÆ­ļ¼‰" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱolļ¼ˆč„æē­ē‰™čÆ­ļ¼‰" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galegoļ¼ˆåŠ åˆ©č„æäŗščÆ­ļ¼‰" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italianoļ¼ˆę„å¤§åˆ©čÆ­ļ¼‰" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi ļ¼ˆFinnish/čŠ¬å…°čÆ­ļ¼‰" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧaisļ¼ˆę³•čÆ­ļ¼‰" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuviųļ¼ˆē«‹é™¶å®›čÆ­ļ¼‰" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norskļ¼ˆęŒŖå؁čÆ­ļ¼‰" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (ę³¢å…°čÆ­)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasilļ¼ˆå·“č„æ葔萄ē‰™čÆ­ļ¼‰" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortugueĢ‚s Europeuļ¼ˆę¬§ę“²č‘”萄ē‰™čÆ­ļ¼‰" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă ļ¼ˆē½—马尼äŗščÆ­ļ¼‰" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenskaļ¼ˆē‘žå…øčÆ­ļ¼‰" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ļ¼ˆē¹ä½“äø­ę–‡ļ¼‰" @@ -575,7 +575,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 +678,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 +764,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 +793,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 ꉀ著ēš„书" @@ -955,19 +951,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 +1036,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "列č”Ø" @@ -1111,8 +1107,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 +1318,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:162 msgid "Cover" msgstr "封面" @@ -1523,22 +1519,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 +1542,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 "" @@ -1581,7 +1577,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:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "ē”®č®¤ä»£ē :" @@ -1675,6 +1671,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 +1744,7 @@ msgstr "%(username)s 引ē”Øäŗ† 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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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\"" @@ -3728,6 +3747,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 +3794,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 +4012,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 +4086,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 "删除åøå·" @@ -4137,18 +4208,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 +4653,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4877,19 +4975,19 @@ msgstr "实例:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 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 +#: bookwyrm/templates/settings/users/user_info.html:113 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 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "ē‰ˆęœ¬:" @@ -4902,7 +5000,7 @@ msgid "Details" msgstr "čƦē»†" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "ę“»åŠØ" @@ -4916,7 +5014,7 @@ msgid "View all" msgstr "ęŸ„ēœ‹å…ØéƒØ" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "ęŠ„å‘Š:" @@ -4933,7 +5031,7 @@ msgid "Blocked by us:" msgstr "ęˆ‘ä»¬ę‰€å±č”½ēš„:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "备ę³Ø" @@ -5653,17 +5751,22 @@ msgstr "ęœ€åŽęˆ–ē¼ŗ" msgid "Remote instance" msgstr "ē§»é™¤ęœåŠ”å™Ø" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "停ē”Ø" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "ęœŖč®¾ē½®" @@ -5675,55 +5778,55 @@ msgstr "ęŸ„ēœ‹ē”ØꈷäøŖäŗŗ资ꖙ" msgid "Go to user admin" msgstr "č½¬åˆ°ē”Øꈷē®”ē†å‘˜" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "ęœ¬ē«™" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "čæœē«Æ" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "ē”ØꈷčÆ¦ęƒ…" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "邮ē®±ļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "ļ¼ˆęŸ„ēœ‹ęŠ„告ļ¼‰" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "č¢«å±č”½ę¬”ę•°ļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "ę·»åŠ ę—„ęœŸļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "ęœ€åŽę“»č·ƒę—„ęœŸļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "ꉋåŠØ通čæ‡ēš„å…³ę³Ø者ļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "åÆ发ēŽ°ļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "停ē”Ø原因ļ¼š" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "实例čÆ¦ęƒ…" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "ęŸ„ēœ‹å®žä¾‹" @@ -5860,7 +5963,7 @@ msgid "Need help?" msgstr "éœ€č¦åø®åŠ©ļ¼Ÿ" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "创å»ŗä¹¦ęž¶" @@ -5868,57 +5971,65 @@ msgstr "创å»ŗä¹¦ęž¶" msgid "Edit Shelf" msgstr "ē¼–č¾‘ä¹¦ęž¶" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, 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:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "ļ¼ˆę­£åœØę˜¾ē¤ŗ %(start)s 到 %(end)sļ¼‰" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "ē¼–č¾‘ä¹¦ęž¶" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "åˆ é™¤ä¹¦ęž¶" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "äøŠęž¶ę—¶é—“" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "å¼€å§‹ę—¶é—“" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "å®Œęˆę—¶é—“" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "ē›“到" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "ę­¤ä¹¦ęž¶ę˜Æē©ŗēš„怂" @@ -6218,6 +6329,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6359,35 +6474,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 "隐藏ēŠ¶ę€" @@ -6579,10 +6694,14 @@ msgid "Groups: %(username)s" msgstr "ē¾¤ē»„ļ¼š %(username)s" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "关ę³ØčÆ·ę±‚" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6597,6 +6716,12 @@ msgstr "列č”Ø: %(username)s" 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:31 #, python-format msgid "%(username)s has no followers" @@ -6668,11 +6793,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 +6818,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 +6833,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:48 #, 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 f9ca27be9b891b3b13c30e68d084e0cd54184a43..c2dabfbf0ffb731a3a105637765bc897dd541ca0 100644 GIT binary patch literal 38029 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�qC|0Iv&yqu6@Yo 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 e2&tN2w#Q2L2Q@c#j@9$7d5 literal 38839 zcmchg34D~*x&L4Hiu+oZssoCE5hUF_oRYHRJjnwd;md#&19+uPRv_jk_oP9^~q@9pP5A5XsLIp@4*KhJs2 zd1vs~Cm+5j;B&{JLGUT~+Q~uC?XV!2-C3bQ(5rV4Tm&zHr@?z*2bh9q!!NU*kAuD7QLwMY4>Wm*$+ww&57cwz zkYNa_;IZ(23x5b6jXWKyUl*9X(zpRC{R{AT_*Hled=*{-e+5;)6H0^NM0h$>JGwwU zR|551DO5cMLDl0{sB&+ID);kH>8qjg{Ss7vZ?^E?L$&)YsQmr~mCvz#{P>*+mA*Gr zx)@adq@l`r5UQS2;mL3|)VME)O7|7xEAVjSSK(>!b*Os13D1CkhpO+%SNU=}L8b2n z)i0MpwZ9)!zBfSCXBbqyKL?e*5~{!MhnoMB;azYJRJvw3AHD~b-}I}4;3UOE$;+YY zwc6xuQ0?0RRlmJZ<$fP3-LIgY`vX+EKSQPa8&o}x>g(%!2Glr3p!%&FRDCYB`2JA! zxXE}ARDUKceiBqUGoZ?u2Q{DTq3W|9s-Jd1)$3)b{9d*2H!S=usOSC(8S3D~Yl5H$ zycwPcCqnh_6Hw1T4b_j&L*={I^SLg|B1Q1f9TJR3d+RsLqE^bJt;`zBO>d>^X6e+;jHS*ZR!x1VQMsPw&|(v?D$ zca!l>3m*+Nf5t)0&j+FEy8x;^&p?&G87luq<2Q^yu=t-t)wkK?cc9Asz`{@Hk1j(# z3#z`CLA4_R)qfeNc{2rSzAS_)?8&J=;Kt2BsbmMM3 zae!~{1@JuLyFs;Y5Y+s-9Y)~ipvrj&D!(~U^{a>Kr?pV&cSE)FWvG68&EynkL4zBfa-_c@J#q! zsPdbQf42C)L$&+pfj+v|j{2Lw)Pr1S8a|TqsE`)l%C;TkD1}gt2q56F_RQt9-rE7#k;dh|s&DnIK>d^

    X;zjxq~@Za!Uc*G#z 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 K+Af^UV*h`HluhUW diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index c6f7dc28b..9815b9a59 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-11-02 21:32+0000\n" +"PO-Revision-Date: 2023-11-02 22:28\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -42,15 +42,15 @@ msgstr "" msgid "Unlimited" msgstr "äøå—限" -#: bookwyrm/forms/edit_user.py:88 +#: bookwyrm/forms/edit_user.py:104 msgid "Incorrect password" msgstr "åƆē¢¼äøę­£ē¢ŗ" -#: bookwyrm/forms/edit_user.py:95 bookwyrm/forms/landing.py:90 +#: bookwyrm/forms/edit_user.py:111 bookwyrm/forms/landing.py:90 msgid "Password does not match" msgstr "åƆē¢¼äøäø€č‡“" -#: bookwyrm/forms/edit_user.py:118 +#: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" msgstr "åƆē¢¼äøę­£ē¢ŗ" @@ -102,8 +102,8 @@ msgstr "列č”Ø順åŗ" msgid "Book Title" msgstr "ę›ø名" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:188 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 +#: bookwyrm/templates/shelf/shelf.html:203 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "č©•åƒ¹" @@ -145,7 +145,7 @@ msgstr "危éšŖ" msgid "Automatically generated report" msgstr "č‡Ŗ動ē”Ÿęˆēš„報告" -#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:47 +#: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 #: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" @@ -171,23 +171,23 @@ msgstr "" msgid "Domain block" msgstr "" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:282 msgid "Audiobook" msgstr "ęœ‰č²ę›ø" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:283 msgid "eBook" msgstr "電子ę›ø" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:284 msgid "Graphic novel" msgstr "圖像小čŖŖ" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:285 msgid "Hardcover" msgstr "ē²¾č£ę›ø" -#: bookwyrm/models/book.py:287 +#: bookwyrm/models/book.py:286 msgid "Paperback" msgstr "å¹³č£ę›ø" @@ -205,26 +205,26 @@ msgstr "č·Øē«™" msgid "Blocked" msgstr "已封鎖" -#: bookwyrm/models/fields.py:29 +#: bookwyrm/models/fields.py:30 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ remote_id" -#: bookwyrm/models/fields.py:38 bookwyrm/models/fields.py:47 +#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ä½æē”Øč€…åēر" -#: bookwyrm/models/fields.py:192 bookwyrm/templates/layout.html:128 +#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "ä½æē”Øč€…åēر" -#: bookwyrm/models/fields.py:197 +#: bookwyrm/models/fields.py:198 msgid "A user with that username already exists." msgstr "å·²ē¶“å­˜åœØä½æē”Øč©²åēرēš„ä½æē”Ø者怂" -#: bookwyrm/models/fields.py:216 +#: bookwyrm/models/fields.py:217 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "å·²ē¶“å­˜åœØä½æē”Øč©²åēرēš„ä½æē”Ø者怂" msgid "Public" msgstr "公開" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:218 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "公開" msgid "Unlisted" msgstr "äøå…¬é–‹" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:219 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "äøå…¬é–‹" msgid "Followers" msgstr "關ę³Ø者" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:220 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -258,30 +258,30 @@ msgstr "關ę³Ø者" msgid "Private" msgstr "ē§åƆ" -#: bookwyrm/models/import_job.py:48 bookwyrm/templates/import/import.html:174 +#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:81 -#: bookwyrm/templates/settings/users/user_info.html:28 +#: bookwyrm/templates/settings/users/user_admin.html:87 +#: bookwyrm/templates/settings/users/user_info.html:33 msgid "Active" msgstr "ę“»čŗ" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 msgid "Complete" msgstr "å·²å®Œęˆ" -#: bookwyrm/models/import_job.py:50 +#: bookwyrm/models/import_job.py:51 msgid "Stopped" msgstr "å·²åœę­¢" -#: bookwyrm/models/import_job.py:83 bookwyrm/models/import_job.py:91 +#: bookwyrm/models/import_job.py:84 bookwyrm/models/import_job.py:92 msgid "Import stopped" msgstr "åŒÆå…„å·²åœę­¢" -#: bookwyrm/models/import_job.py:363 bookwyrm/models/import_job.py:388 +#: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" msgstr "" -#: bookwyrm/models/import_job.py:372 +#: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" msgstr "" @@ -368,103 +368,103 @@ msgstr "引ē”Ø" msgid "Everything else" msgstr "ę‰€ęœ‰å…¶ä»–å…§å®¹" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home Timeline" msgstr "äø»é ę™‚é–“ē·š" -#: bookwyrm/settings.py:223 +#: bookwyrm/settings.py:230 msgid "Home" msgstr "äø»é " -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 msgid "Books Timeline" msgstr "ę›øē›®ę™‚é–“ē·š" -#: bookwyrm/settings.py:224 +#: bookwyrm/settings.py:231 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:97 +#: bookwyrm/templates/user/layout.html:112 msgid "Books" msgstr "ę›øē›®" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:303 msgid "English" msgstr "Englishļ¼ˆč‹±čŖžļ¼‰" -#: bookwyrm/settings.py:297 +#: bookwyrm/settings.py:304 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (åŠ ę³°ē¾…å°¼äŗžčŖž)" -#: bookwyrm/settings.py:298 +#: bookwyrm/settings.py:305 msgid "Deutsch (German)" msgstr "Deutschļ¼ˆå¾·čŖžļ¼‰" -#: bookwyrm/settings.py:299 +#: bookwyrm/settings.py:306 msgid "Esperanto (Esperanto)" msgstr "Esperanto (äø–ē•ŒčŖž)" -#: bookwyrm/settings.py:300 +#: bookwyrm/settings.py:307 msgid "EspaƱol (Spanish)" msgstr "EspaƱolļ¼ˆč„æē­ē‰™čŖžļ¼‰" -#: bookwyrm/settings.py:301 +#: bookwyrm/settings.py:308 msgid "Euskara (Basque)" msgstr "Euskara (å·“ę–Æ克čŖž)" -#: bookwyrm/settings.py:302 +#: bookwyrm/settings.py:309 msgid "Galego (Galician)" msgstr "Galego (加利č„æäŗžčŖž)" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:310 msgid "Italiano (Italian)" msgstr "Italiano (ę„å¤§åˆ©čŖž)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:311 msgid "Suomi (Finnish)" msgstr "Suomi (čŠ¬č˜­čŖž)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:312 msgid "FranƧais (French)" msgstr "FranƧaisļ¼ˆę³•čŖžļ¼‰" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:313 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (ē«‹é™¶å®›čŖž)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" msgstr "Nederlands (č·č˜­čŖž)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" msgstr "Norsk (ęŒŖå؁čŖž)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:316 msgid "Polski (Polish)" msgstr "Polski (ę³¢č˜­čŖž)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:317 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (å·“č„æ葔萄ē‰™čŖž)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:318 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (ę­ę“²č‘”č„ē‰™čŖž)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:319 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (ē¾…馬尼äŗžčŖž)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:320 msgid "Svenska (Swedish)" msgstr "Svenska (ē‘žå…øčŖž)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:321 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē°”體äø­ę–‡" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:322 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡" @@ -575,7 +575,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 +678,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 +764,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 +793,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 ꉀ著ēš„ę›ø" @@ -955,19 +951,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 +1036,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:91 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:106 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "列č”Ø" @@ -1111,8 +1107,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 +1318,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:162 msgid "Cover" msgstr "封面" @@ -1523,22 +1519,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 +1542,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 "" @@ -1581,7 +1577,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:92 +#: bookwyrm/templates/settings/users/user_info.html:98 msgid "Confirmation code:" msgstr "" @@ -1675,6 +1671,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 +1744,7 @@ msgstr "" #: bookwyrm/templates/discover/discover.html:4 #: bookwyrm/templates/discover/discover.html:10 -#: bookwyrm/templates/layout.html:93 +#: bookwyrm/templates/layout.html:94 msgid "Discover" msgstr "" @@ -1879,20 +1876,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 "" @@ -1988,19 +1985,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:101 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:102 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:103 #: 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 +2006,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:104 bookwyrm/templates/user/user.html:40 #: bookwyrm/templatetags/shelf_tags.py:17 msgid "Stopped Reading" msgstr "" @@ -2019,7 +2016,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 +2035,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 @@ -2528,8 +2525,8 @@ 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" @@ -2692,7 +2689,8 @@ 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:100 msgid "Groups" msgstr "" @@ -2737,7 +2735,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 +2744,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:94 msgid "Reading Goal" msgstr "閱讀ē›®ęؙ" @@ -2785,7 +2783,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:79 msgid "Import Books" msgstr "åŒÆå…„ę›øē›®" @@ -2796,7 +2794,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 +2854,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 +2951,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:163 +#: bookwyrm/templates/shelf/shelf.html:185 msgid "Title" msgstr "ęؙ锌" @@ -2967,8 +2965,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:164 +#: bookwyrm/templates/shelf/shelf.html:188 msgid "Author" msgstr "ä½œč€…" @@ -3125,7 +3123,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 +3134,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 +3142,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 +3191,39 @@ 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 +#: bookwyrm/templates/layout.html:88 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 "" @@ -3480,6 +3482,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 bookwyrm/templates/shelf/shelf.html:32 +msgid "Undo move" +msgstr "" + +#: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 +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\"" @@ -3728,6 +3747,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 +3794,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 +4012,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 +4086,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 "" @@ -4137,18 +4208,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 +4651,7 @@ msgid "Streams" msgstr "" #: bookwyrm/templates/settings/celery.html:32 -msgid "Broadcasts" +msgid "Broadcast" msgstr "" #: bookwyrm/templates/settings/celery.html:38 @@ -4875,19 +4973,19 @@ msgstr "åƦ例:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:119 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 +#: bookwyrm/templates/settings/users/user_info.html:113 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 +#: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" msgstr "ē‰ˆęœ¬:" @@ -4900,7 +4998,7 @@ msgid "Details" msgstr "č©³ē“°" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:69 +#: bookwyrm/templates/user/layout.html:84 msgid "Activity" msgstr "ę“»å‹•" @@ -4914,7 +5012,7 @@ msgid "View all" msgstr "ęŖ¢č¦–å…ØéƒØ" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:60 +#: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" msgstr "čˆ‰å ±:" @@ -4931,7 +5029,7 @@ msgid "Blocked by us:" msgstr "ęˆ‘å€‘ę‰€å°éŽ–ēš„:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:117 +#: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" msgstr "備čØ»" @@ -5651,17 +5749,22 @@ msgstr "ęœ€å¾Œę“»čŗ" msgid "Remote instance" msgstr "ē§»é™¤ä¼ŗ꜍å™Ø" -#: bookwyrm/templates/settings/users/user_admin.html:86 +#: 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:92 -#: bookwyrm/templates/settings/users/user_info.html:32 +#: bookwyrm/templates/settings/users/user_admin.html:99 +#: bookwyrm/templates/settings/users/user_info.html:38 msgid "Inactive" msgstr "停ē”Ø" -#: bookwyrm/templates/settings/users/user_admin.html:101 -#: bookwyrm/templates/settings/users/user_info.html:127 +#: bookwyrm/templates/settings/users/user_admin.html:108 +#: bookwyrm/templates/settings/users/user_info.html:133 msgid "Not set" msgstr "ęœŖčح定" @@ -5673,55 +5776,55 @@ msgstr "ęŖ¢č¦–ä½æē”Øč€…č³‡ę–™" msgid "Go to user admin" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:40 +#: bookwyrm/templates/settings/users/user_info.html:46 msgid "Local" msgstr "ęœ¬ē«™" -#: bookwyrm/templates/settings/users/user_info.html:42 +#: bookwyrm/templates/settings/users/user_info.html:48 msgid "Remote" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:51 +#: bookwyrm/templates/settings/users/user_info.html:57 msgid "User details" msgstr "ä½æē”Øč€…č©³ęƒ…" -#: bookwyrm/templates/settings/users/user_info.html:55 +#: bookwyrm/templates/settings/users/user_info.html:61 msgid "Email:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:65 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "(View reports)" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Blocked by count:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:74 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Date added:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Last active date:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:86 msgid "Manually approved followers:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:89 msgid "Discoverable:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:87 +#: bookwyrm/templates/settings/users/user_info.html:93 msgid "Deactivation reason:" msgstr "" -#: bookwyrm/templates/settings/users/user_info.html:102 +#: bookwyrm/templates/settings/users/user_info.html:108 msgid "Instance details" msgstr "åÆ¦ä¾‹č©³ęƒ…" -#: bookwyrm/templates/settings/users/user_info.html:124 +#: bookwyrm/templates/settings/users/user_info.html:130 msgid "View instance" msgstr "ęŖ¢č¦–åƦ例" @@ -5858,7 +5961,7 @@ msgid "Need help?" msgstr "" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:72 +#: bookwyrm/templates/shelf/shelf.html:87 msgid "Create shelf" msgstr "å»ŗē«‹ę›øꞶ" @@ -5866,57 +5969,65 @@ msgstr "å»ŗē«‹ę›øꞶ" msgid "Edit Shelf" msgstr "ē·Øč¼Æę›øꞶ" -#: bookwyrm/templates/shelf/shelf.html:24 +#: 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:39 +#: bookwyrm/templates/shelf/shelf.html:54 #: 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:112 #, 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:119 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:116 +#: bookwyrm/templates/shelf/shelf.html:131 msgid "Edit shelf" msgstr "ē·Øč¼Æę›øꞶ" -#: bookwyrm/templates/shelf/shelf.html:124 +#: bookwyrm/templates/shelf/shelf.html:139 msgid "Delete shelf" msgstr "åˆŖ除ę›øꞶ" -#: bookwyrm/templates/shelf/shelf.html:152 -#: bookwyrm/templates/shelf/shelf.html:178 +#: bookwyrm/templates/shelf/shelf.html:167 +#: bookwyrm/templates/shelf/shelf.html:193 msgid "Shelved" msgstr "äøŠęž¶ę™‚é–“" -#: bookwyrm/templates/shelf/shelf.html:153 -#: bookwyrm/templates/shelf/shelf.html:181 +#: bookwyrm/templates/shelf/shelf.html:168 +#: bookwyrm/templates/shelf/shelf.html:196 msgid "Started" msgstr "é–‹å§‹ę™‚é–“" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Finished" msgstr "å®Œęˆę™‚é–“" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:184 +#: bookwyrm/templates/shelf/shelf.html:169 +#: bookwyrm/templates/shelf/shelf.html:199 msgid "Until" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:210 +#: bookwyrm/templates/shelf/shelf.html:225 msgid "This shelf is empty." msgstr "ę­¤ę›øꞶę˜Æē©ŗēš„怂" @@ -6216,6 +6327,10 @@ 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/page_text.html:8 #, python-format msgid "page %(page)s of %(total_pages)s" @@ -6357,35 +6472,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 "" @@ -6577,10 +6692,14 @@ msgid "Groups: %(username)s" msgstr "" #: bookwyrm/templates/user/layout.html:50 +msgid "has moved to" +msgstr "" + +#: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" msgstr "關ę³Ø請걂" -#: bookwyrm/templates/user/layout.html:73 +#: bookwyrm/templates/user/layout.html:88 #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" @@ -6595,6 +6714,12 @@ msgstr "列č”Ø: %(username)s" 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:31 #, python-format msgid "%(username)s has no followers" @@ -6666,11 +6791,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 +6816,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 +6831,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:48 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "" From 7fcadb1d4d9d4c5001fc734376cbd184bb8768d7 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 13 Dec 2023 20:55:38 +1100 Subject: [PATCH 221/458] fix upsert_statuses - remote_id is now updated on import of statuses - statuses cannot be imported unless source has target listed in alsoKnownAs or movedTo - add alert boxes to import and export screens advising of the above - update tests accordingly --- bookwyrm/models/bookwyrm_import_job.py | 86 +++++++++++++------ bookwyrm/templates/import/import_user.html | 6 +- .../templates/preferences/export-user.html | 5 ++ .../tests/models/test_bookwyrm_import_job.py | 34 +++++++- 4 files changed, 103 insertions(+), 28 deletions(-) diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 461f2cf0f..9a11fd932 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -178,33 +178,41 @@ def upsert_statuses(user, cls, data, book_remote_id): 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 - # 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 + instance = parsed.to_model(model=cls, save=True, overwrite=True) - # save new status or do update it if it already exists - parsed = activitypub.parse(status) - 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] - print(instance.id, instance.privacy) + instance.remote_id = instance.get_remote_id() # update the remote_id + instance.save() # save and broadcast - for val in [ - "progress", - "progress_mode", - "position", - "endposition", - "position_mode", - ]: - if status.get(val): - print(val, status[val]) - instance.val = status[val] - instance.save() + else: + logger.info("User does not have permission to import statuses") def upsert_lists(user, lists, book_id): @@ -369,7 +377,7 @@ def upsert_follows(user, values): if not created: # this request probably failed to connect with the remote - # that means we should save to trigger a re-broadcast + # and should save to trigger a re-broadcast follow_request.save() @@ -419,3 +427,33 @@ def update_followers_address(user, field): 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/templates/import/import_user.html b/bookwyrm/templates/import/import_user.html index f94236958..70b21673c 100644 --- a/bookwyrm/templates/import/import_user.html +++ b/bookwyrm/templates/import/import_user.html @@ -13,7 +13,11 @@ {% trans "Not a valid import file" %} {% endif %} - +

    + {% 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 %}

    diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 8ecca1863..a468c3f74 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -41,6 +41,11 @@ {% endblocktrans %}

    {% 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 next_available %}

    {% blocktrans trimmed %} diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index 3f72f7205..adc04706c 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -312,7 +312,10 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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"): + 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 ) @@ -345,7 +348,11 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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"): + + 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 ) @@ -371,7 +378,10 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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"): + 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 ) @@ -394,6 +404,24 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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""" From 4a4046a704d9d2abfa72b51f1da33e6f6d0c908a Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Thu, 14 Dec 2023 11:30:01 -0800 Subject: [PATCH 222/458] Shows message if empty and renames "search" to "filter" --- bookwyrm/templates/shelf/search_filter_field.html | 9 --------- bookwyrm/templates/shelf/shelf.html | 6 ++++-- bookwyrm/templates/shelf/shelves_filter_field.html | 9 +++++++++ .../{search_filters.html => shelves_filters.html} | 2 +- bookwyrm/views/shelf/shelf.py | 11 +++++++---- 5 files changed, 21 insertions(+), 16 deletions(-) delete mode 100644 bookwyrm/templates/shelf/search_filter_field.html create mode 100644 bookwyrm/templates/shelf/shelves_filter_field.html rename bookwyrm/templates/shelf/{search_filters.html => shelves_filters.html} (66%) diff --git a/bookwyrm/templates/shelf/search_filter_field.html b/bookwyrm/templates/shelf/search_filter_field.html deleted file mode 100644 index 5641bae85..000000000 --- a/bookwyrm/templates/shelf/search_filter_field.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends 'snippets/filters_panel/filter_field.html' %} -{% load i18n %} - -{% block filter %} -

    - - -
    -{% endblock %} diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 91d9ee99f..60b822322 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -101,18 +101,20 @@ {% plural %} {{ formatted_count }} books {% endblocktrans %} - {% if books.has_other_pages %} {% blocktrans trimmed with start=books.start_index end=books.end_index %} (showing {{ start }}-{{ end }}) {% endblocktrans %} {% endif %} + {% if shelves_filter_msg %} + - {{ shelves_filter_msg }} "{{ shelves_filter_query }}" + {% endif %} {% endif %} {% endwith %} {% if books|length > 0 %} - {% include 'shelf/search_filters.html' with user=user query=query %} + {% include 'shelf/shelves_filters.html' with user=user query=query %} {% endif %} diff --git a/bookwyrm/templates/shelf/shelves_filter_field.html b/bookwyrm/templates/shelf/shelves_filter_field.html new file mode 100644 index 000000000..707f033ea --- /dev/null +++ b/bookwyrm/templates/shelf/shelves_filter_field.html @@ -0,0 +1,9 @@ +{% extends 'snippets/filters_panel/filter_field.html' %} +{% load i18n %} + +{% block filter %} +
    + + +
    +{% endblock %} diff --git a/bookwyrm/templates/shelf/search_filters.html b/bookwyrm/templates/shelf/shelves_filters.html similarity index 66% rename from bookwyrm/templates/shelf/search_filters.html rename to bookwyrm/templates/shelf/shelves_filters.html index 840eec57e..ad7fc3dbc 100644 --- a/bookwyrm/templates/shelf/search_filters.html +++ b/bookwyrm/templates/shelf/shelves_filters.html @@ -1,5 +1,5 @@ {% extends 'snippets/filters_panel/filters_panel.html' %} {% block filter_fields %} - {% include 'shelf/search_filter_field.html' %} + {% include 'shelf/shelves_filter_field.html' %} {% endblock %} diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index 0617fcc56..2b9ab176a 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -34,7 +34,8 @@ class Shelf(View): else: shelves = models.Shelf.privacy_filter(request.user).filter(user=user).all() - shelves_search_query = request.GET.get("shelves_q") + shelves_filter_query = request.GET.get("filter") + shelves_filter_msg = "" # get the shelf and make sure the logged in user should be able to see it if shelf_identifier: @@ -92,8 +93,9 @@ class Shelf(View): books = sort_books(books, request.GET.get("sort")) - if shelves_search_query: - books = search(shelves_search_query, books=books) + if shelves_filter_query: + books = search(shelves_filter_query, books=books) or books + shelves_filter_msg = "We couldn't find any books that matched" paginated = Paginator( books, @@ -112,7 +114,8 @@ class Shelf(View): "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), - "shelves_search_query": shelves_search_query, + "shelves_filter_query": shelves_filter_query, + "shelves_filter_msg": shelves_filter_msg, } return TemplateResponse(request, "shelf/shelf.html", data) From bd3acdbf31887801138324574726cff2e6c21a6f Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Thu, 14 Dec 2023 12:33:27 -0800 Subject: [PATCH 223/458] Puts string in template --- bookwyrm/templates/shelf/shelf.html | 4 ++-- bookwyrm/views/shelf/shelf.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 60b822322..d224b0a4f 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -106,8 +106,8 @@ (showing {{ start }}-{{ end }}) {% endblocktrans %} {% endif %} - {% if shelves_filter_msg %} - - {{ shelves_filter_msg }} "{{ shelves_filter_query }}" + {% if show_shelves_filter_msg %} + - {% trans "We couldn't find any books that matched" %} "{{ shelves_filter_query }}" {% endif %} {% endif %} diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index 2b9ab176a..eae57b409 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -35,7 +35,7 @@ class Shelf(View): shelves = models.Shelf.privacy_filter(request.user).filter(user=user).all() shelves_filter_query = request.GET.get("filter") - shelves_filter_msg = "" + show_shelves_filter_msg = False # get the shelf and make sure the logged in user should be able to see it if shelf_identifier: @@ -95,7 +95,7 @@ class Shelf(View): if shelves_filter_query: books = search(shelves_filter_query, books=books) or books - shelves_filter_msg = "We couldn't find any books that matched" + show_shelves_filter_msg = True paginated = Paginator( books, @@ -115,7 +115,7 @@ class Shelf(View): page.number, on_each_side=2, on_ends=1 ), "shelves_filter_query": shelves_filter_query, - "shelves_filter_msg": shelves_filter_msg, + "show_shelves_filter_msg": show_shelves_filter_msg, } return TemplateResponse(request, "shelf/shelf.html", data) From 44d21d1ba474ae71b05fd0195f9a7ae7c73719cc Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Thu, 14 Dec 2023 13:04:45 -0800 Subject: [PATCH 224/458] Updates view logic --- bookwyrm/templates/shelf/shelf.html | 14 +++++++------- bookwyrm/views/shelf/shelf.py | 4 +--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index d224b0a4f..faadd84ab 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -106,16 +106,11 @@ (showing {{ start }}-{{ end }}) {% endblocktrans %} {% endif %} - {% if show_shelves_filter_msg %} - - {% trans "We couldn't find any books that matched" %} "{{ shelves_filter_query }}" - {% endif %} {% endif %} {% endwith %} - {% if books|length > 0 %} - {% include 'shelf/shelves_filters.html' with user=user query=query %} - {% endif %} + {% include 'shelf/shelves_filters.html' with user=user query=query %} {% if is_self and shelf.id %} @@ -215,7 +210,12 @@
  • {% else %} -

    {% trans "This shelf is empty." %}

    +

    {% if shelves_filter_query %} + {% trans "We couldn't find any books that matched" %} "{{ shelves_filter_query }}" + {% else %} + {% trans "This shelf is empty." %} + {% endif %} +

    {% endif %}
    diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index eae57b409..17e17433f 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -94,8 +94,7 @@ class Shelf(View): books = sort_books(books, request.GET.get("sort")) if shelves_filter_query: - books = search(shelves_filter_query, books=books) or books - show_shelves_filter_msg = True + books = search(shelves_filter_query, books=books) paginated = Paginator( books, @@ -115,7 +114,6 @@ class Shelf(View): page.number, on_each_side=2, on_ends=1 ), "shelves_filter_query": shelves_filter_query, - "show_shelves_filter_msg": show_shelves_filter_msg, } return TemplateResponse(request, "shelf/shelf.html", data) From fb369584442c64e70e3ec41c2f39aed240741666 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Thu, 14 Dec 2023 13:47:51 -0800 Subject: [PATCH 225/458] Removes unused variable --- bookwyrm/views/shelf/shelf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index 17e17433f..aac8085d0 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -35,7 +35,6 @@ class Shelf(View): shelves = models.Shelf.privacy_filter(request.user).filter(user=user).all() shelves_filter_query = request.GET.get("filter") - show_shelves_filter_msg = False # get the shelf and make sure the logged in user should be able to see it if shelf_identifier: From a4172214d16f2515b72c238df47f15229b9578a4 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Fri, 15 Dec 2023 13:17:23 -0800 Subject: [PATCH 226/458] Updates size of filters panel label --- bookwyrm/views/shelf/shelf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/views/shelf/shelf.py b/bookwyrm/views/shelf/shelf.py index aac8085d0..a39512fe6 100644 --- a/bookwyrm/views/shelf/shelf.py +++ b/bookwyrm/views/shelf/shelf.py @@ -113,6 +113,7 @@ class Shelf(View): page.number, on_each_side=2, on_ends=1 ), "shelves_filter_query": shelves_filter_query, + "size": "small", } return TemplateResponse(request, "shelf/shelf.html", data) From b728bb43232651d968be7aa477c2c62570d4b427 Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Sat, 16 Dec 2023 12:05:35 -0800 Subject: [PATCH 227/458] Uses block trans --- bookwyrm/templates/shelf/shelf.html | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index faadd84ab..71f4bc088 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -210,12 +210,17 @@ {% else %} -

    {% if shelves_filter_query %} - {% trans "We couldn't find any books that matched" %} "{{ shelves_filter_query }}" - {% else %} - {% trans "This shelf is empty." %} - {% endif %} -

    +

    + + {% if shelves_filter_query %} + {% blocktrans trimmed %} + We couldn't find any books that matched {{ shelves_filter_query }} + {% endblocktrans %} + {% else %} + {% trans "This shelf is empty." %} + {% endif %} + +

    {% endif %}
    From 430e4eb90dd108ce8cbbd1409464ddec30360e58 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 17 Dec 2023 06:52:49 -0800 Subject: [PATCH 228/458] Update bookwyrm/settings.py Co-authored-by: Demid --- bookwyrm/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index f0e3a8422..b3c918703 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -328,7 +328,7 @@ LANGUAGES = [ ("pt-pt", _("PortuguĆŖs Europeu (European Portuguese)")), ("ro-ro", _("RomĆ¢nă (Romanian)")), ("sv-se", _("Svenska (Swedish)")), - ("uk-ua", _("Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukranian)")), + ("uk-ua", _("Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)")), ("zh-hans", _("ē®€ä½“äø­ę–‡ (Simplified Chinese)")), ("zh-hant", _("ē¹é«”äø­ę–‡ (Traditional Chinese)")), ] From 47cdc14bc081b369d48511c10804f3a1daa5b35d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 17 Dec 2023 06:54:39 -0800 Subject: [PATCH 229/458] Update bookwyrm/migrations/0189_alter_user_preferred_language.py Co-authored-by: Demid --- bookwyrm/migrations/0189_alter_user_preferred_language.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/migrations/0189_alter_user_preferred_language.py b/bookwyrm/migrations/0189_alter_user_preferred_language.py index 37cdeb410..d9d9777c7 100644 --- a/bookwyrm/migrations/0189_alter_user_preferred_language.py +++ b/bookwyrm/migrations/0189_alter_user_preferred_language.py @@ -34,7 +34,7 @@ class Migration(migrations.Migration): ("pt-pt", "PortuguĆŖs Europeu (European Portuguese)"), ("ro-ro", "RomĆ¢nă (Romanian)"), ("sv-se", "Svenska (Swedish)"), - ("uk-ua", "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukranian)"), + ("uk-ua", "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)"), ("zh-hans", "ē®€ä½“äø­ę–‡ (Simplified Chinese)"), ("zh-hant", "ē¹é«”äø­ę–‡ (Traditional Chinese)"), ], From 9b3f4933acade43f391668accbe8f791161e590f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 17 Dec 2023 06:55:43 -0800 Subject: [PATCH 230/458] Fixes language code for Ukrainian --- bw-dev | 2 +- locale/en_US/LC_MESSAGES/django.po | 8 +- locale/eo_UY/LC_MESSAGES/django.mo | Bin 145168 -> 145168 bytes locale/eo_UY/LC_MESSAGES/django.po | 2 +- locale/es_ES/LC_MESSAGES/django.mo | Bin 149896 -> 149896 bytes locale/es_ES/LC_MESSAGES/django.po | 2 +- locale/eu_ES/LC_MESSAGES/django.mo | Bin 150964 -> 151115 bytes locale/eu_ES/LC_MESSAGES/django.po | 42 +++--- locale/fr_FR/LC_MESSAGES/django.mo | Bin 154174 -> 44850 bytes locale/gl_ES/LC_MESSAGES/django.mo | Bin 146412 -> 146412 bytes locale/gl_ES/LC_MESSAGES/django.po | 2 +- locale/it_IT/LC_MESSAGES/django.mo | Bin 146772 -> 146772 bytes locale/it_IT/LC_MESSAGES/django.po | 2 +- locale/nl_NL/LC_MESSAGES/django.mo | Bin 148744 -> 148744 bytes locale/nl_NL/LC_MESSAGES/django.po | 2 +- locale/uk_UA/LC_MESSAGES/django.mo | Bin 137627 -> 146444 bytes locale/uk_UA/LC_MESSAGES/django.po | 194 +++++++++++++-------------- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 94539 -> 44096 bytes locale/zh_Hant/LC_MESSAGES/django.mo | Bin 38029 -> 38839 bytes 19 files changed, 130 insertions(+), 126 deletions(-) diff --git a/bw-dev b/bw-dev index 1fd1ea4aa..27c20fe45 100755 --- a/bw-dev +++ b/bw-dev @@ -150,7 +150,6 @@ case "$CMD" in git fetch origin l10n_main:l10n_main git checkout l10n_main locale/ca_ES git checkout l10n_main locale/de_DE - git checkout l10n_main locale/en_UK git checkout l10n_main locale/eo_UY git checkout l10n_main locale/es_ES git checkout l10n_main locale/eu_ES @@ -166,6 +165,7 @@ case "$CMD" in git checkout l10n_main locale/pt_BR git checkout l10n_main locale/ro_RO git checkout l10n_main locale/sv_SE + git checkout l10n_main locale/uk_UA git checkout l10n_main locale/zh_Hans git checkout l10n_main locale/zh_Hant runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@ diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 9c0243f7e..e72c13488 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-12-12 23:38+0000\n" +"POT-Creation-Date: 2023-12-17 14:55+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -461,10 +461,14 @@ msgid "Svenska (Swedish)" msgstr "" #: bookwyrm/settings.py:331 -msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukranian)" msgstr "" #: bookwyrm/settings.py:332 +msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" +msgstr "" + +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "" diff --git a/locale/eo_UY/LC_MESSAGES/django.mo b/locale/eo_UY/LC_MESSAGES/django.mo index 96e639c49bb0d2f45972499ac0ad14b22e006e6a..1502e9eed90f3a18da552f3b8bf11aafc53b9c95 100644 GIT binary patch delta 28 kcmbR6j$^_*j)pCa$^l$Px`xII1_o9J=G%1x7#}|a0FX8bp#T5? delta 28 kcmbR6j$^_*j)pCa$^l%4x(4P7hNf1=7Ta|L7#}|a0FbB&tpET3 diff --git a/locale/eo_UY/LC_MESSAGES/django.po b/locale/eo_UY/LC_MESSAGES/django.po index 83cecfab2..907921f69 100644 --- a/locale/eo_UY/LC_MESSAGES/django.po +++ b/locale/eo_UY/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-07 15:38\n" +"PO-Revision-Date: 2023-12-13 00:07\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Esperanto\n" "Language: eo\n" diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index 7e41239ead09b4ffc5a2ccc0250b8729ffc8f8d3..7247be33430e9bc3859b7375d511bff1b7fa4eb1 100644 GIT binary patch delta 28 jcmeB}%-J!SvtbLPasZc+uA#Alfq|8Q*>>Fk#^|2_dzuJm delta 28 jcmeB}%-J!SvtbLPasZd1u7R\n" "Language-Team: Spanish\n" "Language: es\n" diff --git a/locale/eu_ES/LC_MESSAGES/django.mo b/locale/eu_ES/LC_MESSAGES/django.mo index ebdc996cb8c2c4430af07d8ce47949590658e981..89ea5b63e7b04a0b30538da10d10246e0c0f5d8b 100644 GIT binary patch delta 12308 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

    q zWtG1*^`@v5bVtp61nToCo{LcLt@l3Pi<-b$)Ic{-5p@om36()@ZFSUhbq;g>eH2>L zpp_3n9h=eE5Ocf-3sJ{sA8H~;Q4zR=+M4UAiH06A)<8Yq6m@UJV;}7AwdbQI_<>77 zq1%eu!@Zs-JTGA*+O4Bz;Kr!uy5c|_f(>vz`tSs5LjRx!sQ8`Px*Di&#rmj-b;bJV zrclre^H9fW1!^T9p+dJGHNhjO7tf(i#T`^Kh8(l4eOLvR#Ak6Zmi^xRRjeP?|5jAU z51{%#i!8*o{-mIe!+tP(QyUfHSnP`lsEZ?jn#fwzo&E{xYxz4|kGDP79yb#lcEY^p zM-BW8YD?y$`hOi8>-=w|puIoqJ#g8p|Aks<=tG9zl7RT>qj$@s-Dg8A)0$) zN1Tg#ZZ9^)GpKRyJ!K-`!}}TEYDqzR(-(c1hWh%Qk6L*VDum8ybDSz;N9rw6+59vr zq%%-S`wHsV?L@8kEJk55DkttcW7>V_YK9Fc=zKqns`o*KYz#h&&!Dc@I~a{M&YG?0 zf?833)cYem)4b28p}sqEF&!77B3kk%a~#8e;{0nb@25d4j6)@1GAg-7q9XGYYNZQ2 zU&rRu^HJ{|LuK=CsOPJkGZATyO{gcKA~F?~YpRwoYjj;gh;W<=C<$f_2Q(e???SzWhMAQUcLgm0V)bm$S{f4>c%?g@hD;g3} zSLbxpP4^NiLaR|L{Q~vkF^om$SCf=YP!oF?HGxdj^KYWIrU3QZaVIJV&Y+IBTTDTF z^atvA-NA`i?t=MC<>{#Q^QgaIxPeNlzp*oxx@f-jx}iGG!^OB9)lbXcO#drUx$=Qm z{{*M%{C`0qfe$(qnJe{qRFdSPR-T7Cc56{tz73V6hf$&Y4YiUI#U_H`*oAs$)ajXn zO6KLL32yZK46Ew=@1+ntCa4t_qe6cTHBk9WW-sfaE}YJ&Bz+Pq;!ISi^H39i2etQW zy!O4Qq&w+-{wL}b-N6{fx1uhar0av4$fKwZ{hm`$k;p}D#Y$|6n^7JAhI%jLiV1Z^ zR74_BE3Spgfml>T9zrdwFS^YrJV`-0umtsDJ}Oz(pjNaG73xFY=NC~OUqiij$E$~4 zH50lQbrHp)`gs(!g;P-z$wf{0wX2+eb&yYk23qS`fckpf>eY9kI@*Ie9p_OU{E2$s zxn}C&r~#^=R#*pvE5g15AUKbrhb2z zi4H|YXd-Ihr%@|?9uf2Gr?|@f7j+&Tzfr19ShVgg{HKDj0ralr|P+x&s z`C-&CEJp3I^QRfGG3thEhf3ab)QX=)O*{{^prxoQ`dwrk*V;uvGrxkGQK_4zg9@k) zBT>h30P46+L``6(=VGi!{e9Fz4x{=xj@r_5sEFJ|MXJ;-(|=_Q{{4SF3hJ;4F2n@X zRr)=uqp-h>l~5tQAAQ&il@tBFc0X#R(@@Fw0xA+eq9%S7lhOIxY+Vnmr1Rg8f;#e} zj^AX|%w1Gu7GeNbdG$`W&58!0R_sTuY&^b*&!9pd_Kz_F)qf0X%N|1gPs5eA~uoo&KL$MwDu{FMp8t{Z?5h_=1qXw>g*Yq3h+19h?UCzJ$ zBr<{qbvz4|9P==ky{L}2qat(AYd?ls`DM(;8yJfjmJ_@YS71HrAEVwsi(1Gvul+vT z2_D0Cw(A71(qtNxoh~XDa!`A@0=0rwsK{(ZP3!>bLi!n-U`fXbhO{N>SZ1IGo{S@K zHYx{xMfHCRmDJ_k5@vwIcZ%*aE*q4SXBbQEW-GfMnD}2Y8M_ zEhHN?@#jzrU4rA#T}dH|!aX5Q@K39)QCXUg_3;vFpomhY-VK$MS*Xb5q9U;jwSZ4h z6WEW+fzznxZlP|x@KE!96XZSDN~EBh$&X61Ow`I}pk}%N)xi?fp07onjsmZJ59$j3 z0hJ?_N*k-ACK8Eyz9lNxl2I4j_+UHd?^O!glQpP;cA!G`ZSVoUw>__-Ru~dyKCgm0 zJwDW)w?<8{y=MYyVLed&4M8pF2~=d$u&U1gYZNrI4XErtj0)XV^kJDYCS(mzS=`Y z%9@ZiM19@?74m_o2n_Q+ABBqKWDLi-sJ(v$8{rnzy>X$e;|BL8vYZqAFB5T?%LjR= z3#Mjy$11|1s1+txFdbxLbLy*5TW}H^;vc9}5?RqiFcEb#4o7WGnr9X!QJ+?k^Pf!N z3mT?jg?pUfZ?k!*V^x6sO0^E6e$#cUpOe~{n)>%$X)YTB)cGGHW=&U&YVkaOyeu z1YSgS*y{lk>LJ)n&tpk^2bB}6QAxTUHSiWxzq^qLyVmygPH>h@~Dh&qtvamVlbbP}K9IG5Gs`viHG!&(}~PeH%4_ zk5Mn2Ky6hqY9&!VbIh9IG3p&q$yTkF$(3llPCWs2%GyR6d!e>yB-YgV&!lh|U&ie? zy0#PiH{R$v=0ix-HVie9MW}mV zC2H&TMRWeOr{`%j|y$QShI(5*pGS!M&mAAh($Ob zXEbtxe=M)q*jzvZ@HXumP+PICi8;RK@Hllhsi|Y_q)?}s6a0U9=P{G|=H`yI2J5wO ztTr}(|AzypSBNuL?@-ZkJWR%8s4R_q$lH5V_76v$=V_RO3$X*%jCX>+eup6)TSeGP?d{Cg z4n%FCAN5_4fkPPIT24XPeKXj=o!;J@-&v^kH&HJhLT$y5s3a>w<;*SAR+R2wLfZsq zQD20qSgoUZ?>W@-dH6WKi22^@xrI1;tj zt5DC^PB2MZA9dF^M{P|Tue}fI;u(U^(V%a& ztr&+7COg4@4I79G@pV+lt!_^6zfh**WUA{>k%;Q%r2>O)*yR@wvr7lY4zZ)k z`}BBbif^QU3~v-J9%2`VR0%fzXCEn9nT3mo+esnieLOyL?D$F9DPza`Qvzp3*@H@q z8k@fGjhr@t8Pn~Mz%tja7%1D-i4LqEXV)m)@3-re4Rp-56AN2s+S5t|!e`s%9DizH z$7H)!;Lc3DRN<*CyJ^Wl+1Ym4|Jfd1$V*pkJzp`fbF%Hz!({`0D?E~8f14VNpPgCw{tdfzc*!v-sp*Bk+D>jr#Q%BT z=O2?!tYQn@P-j59K))2bTHs0-r&@T*gp{$9vV5bmCRu@DNp@@*o>VLuV_~iJ5y6Mb z{P#nJvl5)hk`?|}|AF_Co!XT%$Hq5K2~IU_Qg&9FkBy+y4YTdqfxDfZu)^?ePF2VG T|HoO}!-=#f6)x!E)Up2!0Ji|6 delta 12194 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 gNNDB7\n" "Language-Team: Basque\n" "Language: eu\n" @@ -602,7 +602,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 +619,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." @@ -1723,7 +1723,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 @@ -3614,12 +3614,12 @@ msgstr "%(related_user)s eta beste %(other #: bookwyrm/templates/notifications/items/boost.html:90 #, python-format msgid "%(related_user)s boosted your status" -msgstr "%(related_user)s(e)k zure egoera bultzatu du" +msgstr "%(related_user)s erabiltzaileak zure egoera bultzatu du" #: bookwyrm/templates/notifications/items/boost.html:96 #, python-format msgid "%(related_user)s and %(second_user)s boosted your status" -msgstr "%(related_user)s eta %(second_user)s(e)k zure egoera bultzatu dute" +msgstr "%(related_user)s eta %(second_user)s erabiltzaileek zure egoera bultzatu dute" #: bookwyrm/templates/notifications/items/boost.html:105 #, python-format @@ -3674,17 +3674,17 @@ msgstr "%(related_user)s eta beste %(other #: bookwyrm/templates/notifications/items/fav.html:90 #, python-format msgid "%(related_user)s liked your status" -msgstr "%(related_user)s(e)k zure egoera maitatu zuen" +msgstr "%(related_user)s erabiltzaileak zure egoera atsegin du" #: bookwyrm/templates/notifications/items/fav.html:96 #, python-format msgid "%(related_user)s and %(second_user)s liked your status" -msgstr "%(related_user)s eta %(second_user)s (e)k zure egoera atsegin dute" +msgstr "%(related_user)s eta %(second_user)s erabiltzaileek zure egoera atsegin dute" #: bookwyrm/templates/notifications/items/fav.html:105 #, python-format msgid "%(related_user)s and %(other_user_display_count)s others liked your status" -msgstr "%(related_user)s eta %(other_user_display_count)s erabiltzailek zure egoera maitatu zuten" +msgstr "%(related_user)s eta %(other_user_display_count)s erabiltzailek zure egoera atsegin dute" #: bookwyrm/templates/notifications/items/follow.html:16 #, python-format @@ -3761,7 +3761,7 @@ msgstr "%(related_user)s erabiltzaileak %(related_user)s mentioned you in a status" -msgstr "%(related_user)s(e)k aipatu egin zaitu egoera batean" +msgstr "%(related_user)s erabiltzaileak aipatu zaitu egoera batean" #: bookwyrm/templates/notifications/items/move_user.html:18 #, python-format @@ -3801,7 +3801,7 @@ msgstr "%(related_user)s(e)k %(book_ti #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format msgid "%(related_user)s replied to your status" -msgstr "%(related_user)s(e)k zure egoerari erantzun zion" +msgstr "%(related_user)s erabiltzaileak zure egoerari erantzun dio" #: bookwyrm/templates/notifications/items/report.html:15 #, python-format @@ -6444,7 +6444,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 @@ -6555,7 +6555,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 @@ -6575,12 +6575,12 @@ 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 @@ -6605,12 +6605,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 @@ -6694,7 +6694,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" @@ -6703,7 +6703,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 @@ -6790,7 +6790,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" @@ -6875,7 +6875,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/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 46882a4dceaf89059a11ee6c1a3fce74cc85843c..4cdcbf8ea2a3ffdeed740317a055f435e5954b7c 100644 GIT binary patch literal 44850 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 diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index 9b2c7c2ff22a3695dde4b588ba9ed2fcccbdd6bb..1794c286a83a5e5b169b9633583d3f1aa266c9a6 100644 GIT binary patch delta 28 kcmaF!o#V}Sj)pCaAN{$EbPbIa3=FIc%(nmbXZ-jY0Jvcc7XSbN delta 28 kcmaF!o#V}Sj)pCaAN{!ubq$Oa49u*Ijko{yXZ-jY0Jwq-8vp\n" "Language-Team: Galician\n" "Language: gl\n" diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index db21106f4de9c7b6e8ad92b26d83b98882a96325..dd274f967840fd1a5f9cbc31c39fd82b2cb978dd 100644 GIT binary patch delta 28 kcmccei{r{Kj)pCayxv?!x`xII1_o9JX4}QR8EroS0G#OwZ~y=R delta 28 kcmccei{r{Kj)pCayxv@fx(3Dy1{PLEhTFxx8EroS0G$X4a{vGU diff --git a/locale/it_IT/LC_MESSAGES/django.po b/locale/it_IT/LC_MESSAGES/django.po index ac2ed38a1..e4220bdfe 100644 --- a/locale/it_IT/LC_MESSAGES/django.po +++ b/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-03 08:21\n" +"PO-Revision-Date: 2023-12-13 00:06\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Italian\n" "Language: it\n" diff --git a/locale/nl_NL/LC_MESSAGES/django.mo b/locale/nl_NL/LC_MESSAGES/django.mo index 94ff7e1de4989a8f547f0e1df339dc48990bdc8c..dd0b3c670c611985f9123b9797a7153e87f06e20 100644 GIT binary patch delta 28 jcmeC^;_T?+Y}mr69KdCyYiO)sU|?lnwp}-X@%9%0dddjU delta 28 jcmeC^;_T?+Y}mr69KdC$YiO=uXkcY*xm`Da@%9%0dnO3l diff --git a/locale/nl_NL/LC_MESSAGES/django.po b/locale/nl_NL/LC_MESSAGES/django.po index c87aca2d2..f37532b2d 100644 --- a/locale/nl_NL/LC_MESSAGES/django.po +++ b/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-17 10:39\n" +"PO-Revision-Date: 2023-12-13 00:06\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Dutch\n" "Language: nl\n" diff --git a/locale/uk_UA/LC_MESSAGES/django.mo b/locale/uk_UA/LC_MESSAGES/django.mo index 1c040fd6e830cb6e6aa48ed77ac999d13ff46f05..656ccf163afc3ad68539e92623519d8a26bf32ae 100644 GIT binary patch delta 30089 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\n" "Language-Team: Ukrainian\n" "Language: uk\n" @@ -4920,44 +4920,44 @@ msgstr[3] "" #: 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 "" +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 "" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š“Š¾Š¼ŠµŠ½" #: bookwyrm/templates/settings/email_blocklist/domain_form.html:11 msgid "Domain:" -msgstr "" +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 "" +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 "" +msgstr "ŠšŠ¾Š»Šø хтŠ¾ŃŃŒ сŠæрŠ¾Š±ŃƒŃ” Š·Š°Ń€ŠµŃ”ŃŃ‚Ń€ŃƒŠ²Š°Ń‚Šø Š°Š“рŠµŃŃƒ ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Š¾Ń— ŠæŠ¾ŃˆŃ‚Šø Š· цьŠ¾Š³Š¾ Š“Š¾Š¼ŠµŠ½Ńƒ, Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс Š½Šµ Š±ŃƒŠ“Šµ стŠ²Š¾Ń€ŠµŠ½Š¾, хŠ¾Ń‡Š° сŠ°Š¼Š° рŠµŃ”стрŠ°Ń†Ń–я Š±ŃƒŠ“Šµ Š²ŠøŠ³Š»ŃŠ“Š°Ń‚Šø рŠ¾Š±Š¾Ń‡Š¾ŃŽ." #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:29 #: bookwyrm/templates/settings/ip_blocklist/ip_blocklist.html:27 msgid "Options" -msgstr "" +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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +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 "" +msgstr "ŠŠ°Ń€Š°Š·Ń– Š½ŠµŠ¼Š°Ń” Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Šøх Š“Š¾Š¼ŠµŠ½Ń–Š²" #: bookwyrm/templates/settings/email_config.html:6 #: bookwyrm/templates/settings/email_config.html:8 @@ -4976,19 +4976,19 @@ msgstr "Š¢ŠµŃŃ‚Š¾Š²ŠøŠ¹ email усŠæішŠ½Š¾ Š½Š°Š“ісŠ»Š°Š½ŠøŠ¹." #: bookwyrm/templates/settings/email_config.html:32 #: bookwyrm/templates/setup/config.html:102 msgid "Email sender:" -msgstr "" +msgstr "Š’Ń–Š“ŠæрŠ°Š²Š½ŠøŠŗ:" #: bookwyrm/templates/settings/email_config.html:39 msgid "Email backend:" -msgstr "" +msgstr "Email-Š±ŠµŠŗŠµŠ½Š“:" #: bookwyrm/templates/settings/email_config.html:46 msgid "Host:" -msgstr "" +msgstr "Š„Š¾ŃŃ‚:" #: bookwyrm/templates/settings/email_config.html:53 msgid "Host user:" -msgstr "" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡ хŠ¾ŃŃ‚Š°:" #: bookwyrm/templates/settings/email_config.html:60 msgid "Port:" @@ -5020,7 +5020,7 @@ msgstr "Š’Ń–Š“ŠæрŠ°Š²ŠøтŠø тŠµŃŃ‚Š¾Š²ŠøŠ¹ email" #: bookwyrm/templates/settings/federation/instance_list.html:9 #: bookwyrm/templates/settings/federation/instance_list.html:10 msgid "Add instance" -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚Šø іŠ½ŃŃ‚Š°Š½Ń" #: bookwyrm/templates/settings/federation/edit_instance.html:12 #: bookwyrm/templates/settings/federation/instance.html:24 @@ -5029,227 +5029,227 @@ msgstr "" #: bookwyrm/templates/settings/federation/instance_list.html:5 #: bookwyrm/templates/settings/layout.html:47 msgid "Federated Instances" -msgstr "" +msgstr "Š†Š½ŃŃ‚Š°Š½ŃŠø Š£ Š¤ŠµŠ“ŠµŃ€Š°Ń†Ń–Ń—" #: bookwyrm/templates/settings/federation/edit_instance.html:28 #: bookwyrm/templates/settings/federation/instance_blocklist.html:28 msgid "Import block list" -msgstr "" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø сŠæŠøсŠ¾Šŗ Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Šøх" #: bookwyrm/templates/settings/federation/edit_instance.html:43 msgid "Instance:" -msgstr "" +msgstr "Š†Š½ŃŃ‚Š°Š½Ń:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 #: bookwyrm/templates/settings/users/user_info.html:119 msgid "Status:" -msgstr "" +msgstr "Š”тŠ°Ń‚ŃƒŃ:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 #: bookwyrm/templates/settings/users/user_info.html:113 msgid "Software:" -msgstr "" +msgstr "ŠŸŠž:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 #: bookwyrm/templates/settings/users/user_info.html:116 msgid "Version:" -msgstr "" +msgstr "Š’ŠµŃ€ŃŃ–я:" #: bookwyrm/templates/settings/federation/instance.html:17 msgid "Refresh data" -msgstr "" +msgstr "ŠžŠ½Š¾Š²ŠøтŠø Š“Š°Š½Ń–" #: bookwyrm/templates/settings/federation/instance.html:37 msgid "Details" -msgstr "" +msgstr "ŠŸŠ¾Š“рŠ¾Š±Šøці" #: bookwyrm/templates/settings/federation/instance.html:53 #: bookwyrm/templates/user/layout.html:84 msgid "Activity" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ" #: bookwyrm/templates/settings/federation/instance.html:56 msgid "Users:" -msgstr "" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š²:" #: bookwyrm/templates/settings/federation/instance.html:59 #: bookwyrm/templates/settings/federation/instance.html:65 msgid "View all" -msgstr "" +msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š²ŃŃ–Ń…" #: bookwyrm/templates/settings/federation/instance.html:62 #: bookwyrm/templates/settings/users/user_info.html:66 msgid "Reports:" -msgstr "" +msgstr "Š”ŠŗŠ°Ń€Š³:" #: bookwyrm/templates/settings/federation/instance.html:68 msgid "Followed by us:" -msgstr "" +msgstr "ŠœŠø ŠæіŠ“ŠæŠøсŠ°Š½Ń– Š½Š°:" #: bookwyrm/templates/settings/federation/instance.html:73 msgid "Followed by them:" -msgstr "" +msgstr "Š’Š¾Š½Šø ŠæіŠ“ŠæŠøсŠ°Š½Ń– Š½Š°:" #: bookwyrm/templates/settings/federation/instance.html:78 msgid "Blocked by us:" -msgstr "" +msgstr "Š—Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Šøх Š½Š°Š¼Šø:" #: bookwyrm/templates/settings/federation/instance.html:90 #: bookwyrm/templates/settings/users/user_info.html:123 msgid "Notes" -msgstr "" +msgstr "ŠŠ¾Ń‚Š°Ń‚ŠŗŠø" #: bookwyrm/templates/settings/federation/instance.html:97 msgid "No notes" -msgstr "" +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 "" +msgstr "Š—Š°Š±Š»Š¾ŠŗуŠ²Š°Ń‚Šø" #: bookwyrm/templates/settings/federation/instance.html:117 msgid "All users from this instance will be deactivated." -msgstr "" +msgstr "Š£ŃŃ–Ń… ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š² Š· цьŠ¾Š³Š¾ іŠ½ŃŃ‚Š°Š½ŃŃƒ Š±ŃƒŠ“Šµ Š“ŠµŠ°ŠŗтŠøŠ²Š¾Š²Š°Š½Š¾." #: bookwyrm/templates/settings/federation/instance.html:122 #: bookwyrm/templates/snippets/block_button.html:10 msgid "Un-block" -msgstr "" +msgstr "Š Š¾Š·Š±Š»Š¾ŠŗуŠ²Š°Ń‚Šø" #: bookwyrm/templates/settings/federation/instance.html:123 msgid "All users from this instance will be re-activated." -msgstr "" +msgstr "Š£ŃŃ–Ń… ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š² Š· цьŠ¾Š³Š¾ іŠ½ŃŃ‚Š°Š½ŃŃƒ Š±ŃƒŠ“Šµ рŠµŠ°ŠŗтŠøŠ²Š¾Š²Š°Š½Š¾." #: bookwyrm/templates/settings/federation/instance_blocklist.html:6 #: bookwyrm/templates/settings/federation/instance_blocklist.html:15 msgid "Import Blocklist" -msgstr "" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø Š”ŠæŠøсŠ¾Šŗ Š—Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Šøх" #: bookwyrm/templates/settings/federation/instance_blocklist.html:38 msgid "Success!" -msgstr "" +msgstr "Š£ŃŠæішŠ½Š¾!" #: bookwyrm/templates/settings/federation/instance_blocklist.html:42 msgid "Successfully blocked:" -msgstr "" +msgstr "Š£ŃŠæішŠ½Š¾ Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾:" #: bookwyrm/templates/settings/federation/instance_blocklist.html:44 msgid "Failed:" -msgstr "" +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 "" +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 "" +msgstr "ŠŠ°Š·Š²Š° іŠ½ŃŃ‚Š°Š½ŃŃƒ" #: bookwyrm/templates/settings/federation/instance_list.html:44 msgid "Last updated" -msgstr "" +msgstr "ŠžŃŃ‚Š°Š½Š½Ń” Š¾Š½Š¾Š²Š»ŠµŠ½Š½Ń" #: bookwyrm/templates/settings/federation/instance_list.html:48 #: bookwyrm/templates/settings/federation/software_filter.html:5 msgid "Software" -msgstr "" +msgstr "ŠŸŠž" #: bookwyrm/templates/settings/federation/instance_list.html:70 msgid "No instances found" -msgstr "" +msgstr "Š†Š½ŃŃ‚Š°Š½ŃŃ–Š² Š½Šµ Š·Š½Š°Š¹Š“ŠµŠ½Š¾" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 msgid "Stop import?" -msgstr "" +msgstr "Š—ŃƒŠæŠøŠ½ŠøтŠø іŠ¼ŠæŠ¾Ń€Ń‚?" #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" -msgstr "" +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 "" +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 "" +msgstr "ŠŸŠ¾ŠŗŠø іŠ¼ŠæŠ¾Ń€Ń‚Šø Š²ŠøŠ¼ŠŗŠ½ŠµŠ½Ń–, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń– Š½Šµ Š·Š¼Š¾Š¶ŃƒŃ‚ŃŒ Š“Š¾Š“Š°Š²Š°Ń‚Šø Š½Š¾Š²Ń–, Š°Š»Šµ Š½Š° Š½Š°ŃŠ²Š½ŠøŠ¹ іŠ¼ŠæŠ¾Ń€Ń‚ цŠµ Š½Šµ Š²ŠæŠ»ŠøŠ½Šµ." #: bookwyrm/templates/settings/imports/imports.html:36 msgid "Disable imports" -msgstr "" +msgstr "Š’ŠøŠ¼ŠŗŠ½ŃƒŃ‚Šø іŠ¼ŠæŠ¾Ń€Ń‚Šø" #: bookwyrm/templates/settings/imports/imports.html:50 msgid "Users are currently unable to start new imports" -msgstr "" +msgstr "ŠŠ°Ń€Š°Š·Ń– ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń– Š½Šµ Š¼Š¾Š¶ŃƒŃ‚ŃŒ Š“Š¾Š“Š°Ń‚Šø Š½Š¾Š²ŠøŠ¹ іŠ¼ŠæŠ¾Ń€Ń‚" #: bookwyrm/templates/settings/imports/imports.html:55 msgid "Enable imports" -msgstr "" +msgstr "Š£Š²Ń–Š¼ŠŗŠ½ŃƒŃ‚Šø іŠ¼ŠæŠ¾Ń€Ń‚Šø" #: bookwyrm/templates/settings/imports/imports.html:63 msgid "Limit the amount of imports" -msgstr "" +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 "" +msgstr "Š”ŠµŃŠŗі ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń– Š¼Š¾Š¶ŃƒŃ‚ŃŒ сŠæрŠ¾Š±ŃƒŠ²Š°Ń‚Šø іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø Š²ŠµŠ»ŠøŠŗу ŠŗіŠ»ŃŒŠŗість ŠŗŠ½ŠøŠ³, щŠ¾ Š½Šµ Š·Š°Š²Š°Š“Šøть Š¾Š±Š¼ŠµŠ¶ŠøтŠø." #: bookwyrm/templates/settings/imports/imports.html:75 msgid "Set the value to 0 to not enforce any limit." -msgstr "" +msgstr "Š’стŠ°Š½Š¾Š²Ń–Ń‚ŃŒ Š·Š½Š°Ń‡ŠµŠ½Š½Ń 0, Š°Š±Šø Š½Šµ Š²ŃŃ‚Š°Š½Š¾Š²Š»ŃŽŠ²Š°Ń‚Šø Š¶Š¾Š“Š½Šøх Š¾Š±Š¼ŠµŠ¶ŠµŠ½ŃŒ." #: bookwyrm/templates/settings/imports/imports.html:78 msgid "Set import limit to" -msgstr "" +msgstr "Š’стŠ°Š½Š¾Š²ŠøтŠø Š¾Š±Š¼ŠµŠ¶ŠµŠ½Š½Ń іŠ¼ŠæŠ¾Ń€Ń‚Ńƒ у" #: bookwyrm/templates/settings/imports/imports.html:80 msgid "books every" -msgstr "" +msgstr "ŠŗŠ½ŠøŠ³ ŠŗŠ¾Š¶Š½Ń–" #: bookwyrm/templates/settings/imports/imports.html:82 msgid "days." -msgstr "" +msgstr "Š“Š½Ń–Š²." #: bookwyrm/templates/settings/imports/imports.html:86 msgid "Set limit" -msgstr "" +msgstr "Š’стŠ°Š½Š¾Š²ŠøтŠø Š»Ń–Š¼Ń–Ń‚" #: bookwyrm/templates/settings/imports/imports.html:102 msgid "Completed" -msgstr "" +msgstr "Š—Š°Š²ŠµŃ€ŃˆŠµŠ½Ń–" #: bookwyrm/templates/settings/imports/imports.html:116 msgid "User" -msgstr "" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡" #: bookwyrm/templates/settings/imports/imports.html:125 msgid "Date Updated" -msgstr "" +msgstr "ŠžŃŃ‚Š°Š½Š½Ń” ŠžŠ½Š¾Š²Š»ŠµŠ½Š½Ń" #: bookwyrm/templates/settings/imports/imports.html:132 msgid "Pending items" -msgstr "" +msgstr "Š’ Š¾Ń‡Ń–ŠŗуŠ²Š°Š½Š½Ń–" #: bookwyrm/templates/settings/imports/imports.html:135 msgid "Successful items" -msgstr "" +msgstr "Š£ŃŠæішŠ½Š¾ іŠ¼ŠæŠ¾Ń€Ń‚Š¾Š²Š°Š½Š¾" #: bookwyrm/templates/settings/imports/imports.html:170 msgid "No matching imports found." -msgstr "" +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 "" +msgstr "Š—Š°ŠæŠøтŠø ŠŠ° Š—Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:15 #: bookwyrm/templates/settings/invites/manage_invites.html:3 @@ -5257,62 +5257,62 @@ msgstr "" #: bookwyrm/templates/settings/layout.html:42 #: bookwyrm/templates/user_menu.html:60 msgid "Invites" -msgstr "" +msgstr "Š—Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:23 msgid "Ignored Invite Requests" -msgstr "" +msgstr "ŠŸŃ€Š¾Ń–Š³Š½Š¾Ń€Š¾Š²Š°Š½Ń– Š—Š°ŠæŠøтŠø ŠŠ° Š—Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:36 msgid "Date requested" -msgstr "" +msgstr "Š”Š°Ń‚Š° Š·Š²ŠµŃ€Š½ŠµŠ½Š½Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:40 msgid "Date accepted" -msgstr "" +msgstr "Š”Š°Ń‚Š° ŠæрŠøŠ¹Š½ŃŃ‚Ń‚Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:45 msgid "Answer" -msgstr "" +msgstr "Š’Ń–Š“ŠæŠ¾Š²Ń–Š“ь" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:51 msgid "Action" -msgstr "" +msgstr "Š”Ń–Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:54 msgid "No requests" -msgstr "" +msgstr "ŠŠµŠ¼Š°Ń” Š·Š°ŠæŠøтіŠ²" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:66 #: bookwyrm/templates/settings/invites/status_filter.html:16 msgid "Accepted" -msgstr "" +msgstr "ŠŸŃ€ŠøŠ¹Š½ŃŃ‚Š¾" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:68 #: bookwyrm/templates/settings/invites/status_filter.html:12 msgid "Sent" -msgstr "" +msgstr "Š’Ń–Š“ŠæрŠ°Š²Š»ŠµŠ½Š¾" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:70 #: bookwyrm/templates/settings/invites/status_filter.html:8 msgid "Requested" -msgstr "" +msgstr "Š—Š°ŠæрŠ¾ŃˆŠµŠ½Š¾ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡ŠµŠ¼" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:80 msgid "Send invite" -msgstr "" +msgstr "ŠŠ°Š“ісŠ»Š°Ń‚Šø Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:82 msgid "Re-send invite" -msgstr "" +msgstr "ŠŠ°Š“ісŠ»Š°Ń‚Šø Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń щŠµ рŠ°Š·" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:102 msgid "Ignore" -msgstr "" +msgstr "Š†Š³Š½Š¾Ń€ŃƒŠ²Š°Ń‚Šø" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:104 msgid "Un-ignore" -msgstr "" +msgstr "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø іŠ³Š½Š¾Ń€ŃƒŠ²Š°Š½Š½Ń" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:116 msgid "Back to pending requests" @@ -5562,22 +5562,22 @@ msgstr "ŠžŃŠŗŠ°Ń€Š¶ŠµŠ½Ń– ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń" #: bookwyrm/templates/settings/reports/report.html:66 msgid "Moderation Activity" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń‚Š¾Ń€Ń–Š²" #: bookwyrm/templates/settings/reports/report.html:73 #, python-format msgid "%(user)s opened this report" -msgstr "" +msgstr "%(user)s Š²Ń–Š“ŠŗрŠøŠ²(-Š»Š°) цю сŠŗŠ°Ń€Š³Ńƒ" #: bookwyrm/templates/settings/reports/report.html:86 #, python-format msgid "%(user)s commented on this report:" -msgstr "" +msgstr "%(user)s ŠæрŠ¾ŠŗŠ¾Š¼ŠµŠ½Ń‚ŃƒŠ²Š°Š²(-Š»Š°) цю сŠŗŠ°Ń€Š³Ńƒ:" #: bookwyrm/templates/settings/reports/report.html:90 #, python-format msgid "%(user)s took an action on this report:" -msgstr "" +msgstr "%(user)s Š²Š¶ŠøŠ²(-Š»Š°) Š·Š°Ń…Š¾Š“іŠ² ŠæŠ¾ ціŠ¹ сŠŗŠ°Ń€Š·Ń–:" #: bookwyrm/templates/settings/reports/report_header.html:6 #, python-format @@ -5601,7 +5601,7 @@ msgstr "Š”ŠŗŠ°Ń€Š³Š° #%(report_id)s: ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡ @%(username)s" #: bookwyrm/templates/settings/reports/report_links_table.html:19 msgid "Approve domain" -msgstr "" +msgstr "ŠŸŃ–Š“тŠ²ŠµŃ€Š“ŠøтŠø Š“Š¾Š¼ŠµŠ½" #: bookwyrm/templates/settings/reports/report_links_table.html:26 msgid "Block domain" @@ -5821,7 +5821,7 @@ msgstr "Š†Š½ŃˆŠøŠ¹ іŠ½ŃŃ‚Š°Š½Ń" #: bookwyrm/templates/settings/users/user_admin.html:82 #: bookwyrm/templates/settings/users/user_info.html:29 msgid "Moved" -msgstr "" +msgstr "ŠŸŠµŃ€ŠµŠ¼Ń–щŠµŠ½Š¾" #: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" @@ -6040,11 +6040,11 @@ msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø ŠæŠ¾Š»Šøцю" #: bookwyrm/templates/shelf/shelf.html:25 msgid "You have have moved to" -msgstr "" +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 "" +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ сŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø цŠµŠ¹ ŠŗрŠ¾Šŗ, щŠ¾Š± Š²Ń–Š“Š½Š¾Š²ŠøтŠø Š²ŃŃ– фуŠ½Šŗції, Š°Š»Šµ Š“ŠµŃŠŗі ŠæіŠ“ŠæŠøсŠ½ŠøŠŗŠø Š²Š¶Šµ Š¼Š¾Š³Š»Šø Š²Ń–Š“ŠæŠøсŠ°Ń‚Šøся." #: bookwyrm/templates/shelf/shelf.html:39 #: bookwyrm/templates/user/relationships/followers.html:18 @@ -6208,7 +6208,7 @@ msgstr "ŠšŠ¾Š¼ŠµŠ½Ń‚Š°Ń€:" #: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Update" -msgstr "" +msgstr "ŠžŠ½Š¾Š²ŠøтŠø" #: bookwyrm/templates/snippets/create_status/post_options_block.html:21 msgid "Post" @@ -6419,7 +6419,7 @@ msgstr "%(username)s ŠæрŠ¾Ń‡ŠøтŠ°Š²(-Š»Š°) %(read_count)s #: bookwyrm/templates/snippets/move_user_buttons.html:10 msgid "Follow at new account" -msgstr "" +msgstr "ŠŸŃ–Š“ŠæŠøсŠ°Ń‚Šøся Š½Š° Š½Š¾Š²ŠøŠ¹ Š°ŠŗŠ°ŃƒŠ½Ń‚" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format @@ -6783,7 +6783,7 @@ msgstr "Š“Ń€ŃƒŠæŠø: %(username)s" #: bookwyrm/templates/user/layout.html:50 msgid "has moved to" -msgstr "" +msgstr "ŠæŠµŃ€ŠµŃ—Ń…Š°Š²(-Š»Š°) Š“Š¾" #: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" @@ -6885,10 +6885,10 @@ msgstr "Š–Š¾Š“Š½Š¾Ń— Š°ŠŗтŠøŠ²Š½Š¾ŃŃ‚Ń– Š½Š°Ń€Š°Š·Ń–!" #, python-format msgid "%(display_count)s follower" msgid_plural "%(display_count)s followers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +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 diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 566e3c144ec509cf8408d2092449d3af7e01e5db..1d1227f8092b70c68bb692fb532759090142aa83 100644 GIT binary patch literal 44096 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 S0TOg?KN0&d0;IH0jQ%f4%`RX7 literal 94539 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 ByKw*j diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo index c2dabfbf0ffb731a3a105637765bc897dd541ca0..f9ca27be9b891b3b13c30e68d084e0cd54184a43 100644 GIT binary patch literal 38839 zcmchg34D~*x&L4Hiu+oZssoCE5hUF_oRYHRJjnwd;md#&19+uPRv_jk_oP9^~q@9pP5A5XsLIp@4*KhJs2 zd1vs~Cm+5j;B&{JLGUT~+Q~uC?XV!2-C3bQ(5rV4Tm&zHr@?z*2bh9q!!NU*kAuD7QLwMY4>Wm*$+ww&57cwz zkYNa_;IZ(23x5b6jXWKyUl*9X(zpRC{R{AT_*Hled=*{-e+5;)6H0^NM0h$>JGwwU zR|551DO5cMLDl0{sB&+ID);kH>8qjg{Ss7vZ?^E?L$&)YsQmr~mCvz#{P>*+mA*Gr zx)@adq@l`r5UQS2;mL3|)VME)O7|7xEAVjSSK(>!b*Os13D1CkhpO+%SNU=}L8b2n z)i0MpwZ9)!zBfSCXBbqyKL?e*5~{!MhnoMB;azYJRJvw3AHD~b-}I}4;3UOE$;+YY zwc6xuQ0?0RRlmJZ<$fP3-LIgY`vX+EKSQPa8&o}x>g(%!2Glr3p!%&FRDCYB`2JA! zxXE}ARDUKceiBqUGoZ?u2Q{DTq3W|9s-Jd1)$3)b{9d*2H!S=usOSC(8S3D~Yl5H$ zycwPcCqnh_6Hw1T4b_j&L*={I^SLg|B1Q1f9TJR3d+RsLqE^bJt;`zBO>d>^X6e+;jHS*ZR!x1VQMsPw&|(v?D$ zca!l>3m*+Nf5t)0&j+FEy8x;^&p?&G87luq<2Q^yu=t-t)wkK?cc9Asz`{@Hk1j(# z3#z`CLA4_R)qfeNc{2rSzAS_)?8&J=;Kt2BsbmMM3 zae!~{1@JuLyFs;Y5Y+s-9Y)~ipvrj&D!(~U^{a>Kr?pV&cSE)FWvG68&EynkL4zBfa-_c@J#q! zsPdbQf42C)L$&+pfj+v|j{2Lw)Pr1S8a|TqsE`)l%C;TkD1}gt2q56F_RQt9-rE7#k;dh|s&DnIK>d^

    X;zjxq~@Za!Uc*G#z z?hByu=?;~yx5<5>^1BXVG6Z))jpG8S`YwagGh5&%;CGBaHvSq)4>v>Q^AGqbc*0FS zpYFyh;n9Q-gsR7IsP^3s)gR?h<;9`$dl0H0=0dgODOdsk)N?zb#_y|8`Mm;F-jAT#`#Y$4@Gexk zqlWnWj)%&>3p^HfH(m*QBM*dX*955g&V?$k9;%<0L)GUw*ctADO4nq36Ds{*pz852 zsQR5S)Ys!osBw$H3*eW1x>KR_Oh>5nec%aj5LEehK{qd;>Q!Um55n`2CtLg) z*b{jdRQvx3Rlk2h)&Gd$e&0GCc0=w4rJqJX^-~Gw?ox429-}0JPb~RRq!FG`oC%XD^&V_!xQ0=Bm8rpgzAqAj6I;rxdJNv zy-?#c8min3RK8Q7o|_H3z21#czPB&vuJ%gsRuqEd0Ard)R#`CbEMkKYJYucx859laZ^T^!5~p2^6fb_&1>X>wT#8aoC-{Uyg=q*NIT`cBp*54ljh?gR0kG zq3VC=-ChrMfXeRzsQgNy>U$$pyKjXo^id5TRJv-|6@JOW*Fe>8Gh|5yyNoA}^7kh(cm?4*p~m+esCFGu z=Iw`5pz8f;sBtcZs{a5BzZt5Xx0rkmJIeZP!=YDXPB8`eY3>upf!z5+i5 z--bLI96!eQTLzww{1iN0=}i8q#s3p(oI6)|_JPXh7I*=XC$W~gyE z{|iCz0DJ&m1K);f?i4N8KM9rZI(Q}gCDik$Cp^!A%KrkBdqDN$ zWw1Z|JXHOjvH0!A2IE(t>h&$y5&q1={|BmmhbDbF9iZBK5>!1efNmU3z6qW{_#IHs zje*C(BvgIB1Xa&Rpz@guPk}2f{snjfa-+%Lfm&BTf=b_`nmk}XsQmUq_0u;@{v}ks z-he9q&ldi^g?|8*|FQS`bf1FCryEqgdRcfWRK0Jo_}ifJyT{~msB*@d`~Xz_9)^1E zQK)*Yu=p2^yNxeHJ^yXvPmNjQJH`);$EJMxGojY^h43@5KkNY~LapOxq1y9Z<7-g$ z`Gv8?_&2EXk6_U%{$waQVseSeeW3EY5vo1IEIejR86Sq42eaY1a5Yr=m!Y2jIaL4s z&g2%8|7`O6Q0@4@i<%xb$B~ex$~j&UksIQwQ-w;?}bYDU8s7$X7Rs- zCnL8&>5G5D!{AZl{QhtZ)N`jo<$JcVtA$?%wO+5X@Ov$MEQ}DIvhc@@E1>58CaC)E zhRXlj7XL$d3i5A^??SDMqsII4PcoisycnwfS3tGvW~lr|Soqyg^{#>{Zz4P%*1=A2 zvBft))$5y3&;P{aU&Buz|F`jPQ2T*46X~@hq0$e6nt#JhjvK3?>Ng&$9y5)LEqs;9 zFG1DsW#bPm{Fo8bVc{O1`LL#0~|PlOxc9dI}73{QK| z$M=CJA>Rm9kGm~AYI4Hl8mM+nHqN*BWl;584Nr#+@ND=hRDOSgs`p<^KKzS*-W~%L zUt;_;RQ`RS+A#>~xm(}>7&Un{)VRI?Ro=Hu{tZ-q??8>)-=UsAj7{SVcnXw$>JHT} zHyiIX#-PegL9NG$Q29-TDsQ%Nxp5oRJpMZD3iD9;p7fAUe=d}KiOGG9w^(>N)N}Vk z)$a+YeS15Uef4XoaXRc_-=1#pEaXc~9tu^zJE7`*pUGn^K4J0$CO>TQ40tK&=Ue#8 z7XCe`ar-e;zr77LZw{&T?Kl~#ob!xbp!%gJR6F|{he6fr9;o`3nfwq`x~cFq_$X98 z)$^KV%AA1(Yna29>@V zs$Szwo&}ZeQInsx_-9StZG0JOzyG$yzXi2_9yZ0-r#Dpo*F&{qFgz2Eglc~Rs-BCX z*2yZ9pEK@)nt$K2_&*u{X7PtS;`2Wq-blLBV0U;gRC%*3{xRbdQ0-i4@(WPqH$t`d z6_bBv%t6)vU6cP|JZh@1@2RjO@#jMI^R-ar4u#6^cBtn^!&_k$RC!;v@b8-Z8r1y# z9n^DwvGBvE`Sd42_1C#j`Q2dQL!r`t*22d^m7jvD*F@L_E`=)hW#g;HUmO1jmCySy z0zWa`r|$;UuFFln&Ugz{`g`G#FacHn8h8|}v+()G#ZdEl8PqsG3-$bVQ_6h(8^were+*sC?%^)n_?We%qk(-wU;$eFJuZe}gx|^JaKf zz!K!G@OtXkZZ!GF#;ozLQ2OTF6 zxY76%sD3$gzVD~A;rYlH!<*nRsC=J*YR7x97d&o(uTNj&&Bi<7SmI;wPWY;YU-YO? z{~6DIzS;0*qx;jM@AhmX=~ob)-I zxM!4z&v*~_cLiY@V}>Yr7XMV-5%&Cvu!iur3G0i~NBuP(|9S9n_-ClKQDV>FbsxFqW_T{E)vZaKkMh1vXoH z`9~0b9Wv_DeTG|Ht;t=8Kf%II#XrIP1Bw3zZVU2-miK7n0mw^mvvC6n|0Q9k<4!@= zKKNPqFBrwWieGz{KKJ6k6!wE1EWay|uf+cWOc5S_{($G#xZ0wyi}Alp*w>1}eu;k& zVL!&{leM_V@E=LOFCmY_p~~IoZ~UExJly2-@V|xoH}Vb(dly-sN$}UW({LkjN2|`b zlktb2(~JBO0+SX|M|ee1-18RxB4MStOL4~$c2`lFW6Xa&WgLt90&+8HzHHBa)hJwm zI}*1Ox0`gIBK`ev2(muIaNR6F$=h&O%fsg)!hdCP!{8>uj)&`D7hE^o>&RD-=PvjZ zZX>P?cQaunuoK)vx-(!5cE!Cw_+Mf8`7ZLZP=G6udy@V-+>QA4SqvY*y@&sD+%5Re zAwK-vji(&frzlKuOYQl;ugAp9EKCR`_6FT(x@o(>;^U&3|8ej}REr_XYu{MX`NgZo}l*tZCO4f*HrC%6t4_eppXvOb@otY08k z;qQ$5EpDx)!y8_+THA3=S-5AX5b;3WKC!5@KTuou)P!gJ;Lf9J*E26zeXe{eStcQ|e^ z?)%6;!u<@_Ncu-`Q*dK&AK)&>y+Yi4*co>#{=?vnJgd+3_S3$ra^66-0oCKqU zf6fwafpd}j!P|-JZQ)lE_D@{+860}xtL9%s{98rgP3He^m^c4*#!;lbh5V1f9fxzD z&RxrrHHl0t)h!(vovf@(j*q2+{RO7?6Brb#zQDO|Fi_ zRYntIYAh`D6I@l3sfku9VOV@*LbAq${l=&Fo8Z3kc)GeWI^m--+E2Q68787tF>sHkeM_rjsj^st9_idUQkJZ$u8d`3 z9Z8ppX2^rA)0wC`xs9yuOIJiwvGV&yC6i;-Az~z%P;*m}bVaOk9IqAkn<~AZWHsqn zspVZC>bPiPLPXJR%kGjUKi`p&{%UobOo(;a6F4qfS))OTr)h`=gn)QC z!%~&Z#O{liA2>-^CsJ5Jx7t|VKs)vg9iB>#NyXCXpsU(GE*=|SXsZ{y9WW+M)Q#~B zwW>_gotb2$rn)@J*mn!|>Dr#L@^~hmOt?M{yEhC|e-=MNhGbKIUpOkMSaoGQR<2|! z#m$d4C8U^sh15*JDr8NOt726QsXFz(OgvLbk6zW2p#N-n_t!8ck3N)P;_NHF;=6`WJN`}IZz!o6^&O$qUGgo zdMkqrQy?;m85&=(iYG=V6;KtYefsOW)q*I+ z4{6Y^G9FFG)TYWxxvE6Q;}+Q-!wFzV4E#0&L}4{B3%^FeS@lQT3nn8Dq@j zANfQoR#N;(B7wnD7L!T~`V|S3pUA{Z1|(BVRI*28h!PW$iCCm8n$X1ejnIN{b@QFt znj&2@hGt}Zs_v0=&8RQL%39Y?w7NQ#WZ&V-Rn?UfBBSG#m`#-Gf+;S|rY|EQ@bkeC z8B|V9}x%)O^EVnN)%L%knTrZgV?#C@}+Tm>F)S>ra~|x`2_|TwH=X zCZwt&70EQi?KYq&#?OSx*wvlNl9kC+Y2^G%dw=HA^0Gdi%=D+{6^k)e(Q&B0=%~tAkH}pZmzoY`$wVd< zA63Ivg*oSYhbPkXnpM=>LSco*ps{L3^p6;|$J546eQ$_oZmb!l z>h*9fr>luW*-wac?rJKD5Z1B#D3`i!*YsxYOnMO(`e{TbX^Z_*qX)&Uz$ttW5S&WXSst9(B zs1cDtXpKThsOptTBE!;*Xn0s((kTkk${gS{+W<5fE72oTyjsJsK?zi8A;n;+IZHi4 zJ6|X;V4-rhXgBN4@Akwnsox1xN!DkWZ#m{?d8DjHYN5RX4fnTV>($LMpZCX0?krum zgGSv-FKr$A0lxGA$}V71njIQk$4b{2v-+IZPhls-B2I%VoDOz-7pu}sQtjSrYh5DU z9j@f-VmgGRu#+dc7@a~$AVe-?!k3h%qI@mTLa?gQQDtsFPltiNUoC~rSCcXom>tC% z)d9k<3G;Fq7X|8!Ycq_AD=5vPO_HX^GAvl?ft8CCPe~6C3HOmR75Zo&1~^6pQB zqthrBOlVzq@}X@ez7m_sV6lFxctOj}``q!wC3dUA`8b@oY3&5RK%AF;Z4EE79$cg! zMR|4J@MpN(c8eM%W6E1; zVTcyF`I(pQf(SilAA8>a}zsK)SLJt%T#GGSQHc zLDxA^c0yrZ`}ssEX{k+bA$4M>_9sBMl{(FMjZ(PnLvdb>NsASyly15vxG7nYh@hOi zM{bH@^^d5+W+M=@M1NZMVkZqvj(5Qvb-B-}cp*7lS9(V2<)!Db8sGa1yD{cejZPKFb_LIgH$AaamlRXaQH8?&h z6-`Z`-?_bW3wm&TY>eQs1ygY_HxLBSf?+9?u=hGEi`|3_6@zK%_8ljs{a;x{GTi-; z2ZME4=5)M2H`b&$in~Boa!qB%j+0603rzP+v@$scE1e`|9LC&VJBom6ashMI*-^{RM8gVPm!&6w5rDgYF9cK!Yb1Kj3*OirbdGy{_cf# znPE?y=1I}O$|m=LI`S9C__GfA>xrbhmaxZVDd>)Q2pg_D1qWU;Nc*>1{X=69WP+h& z>833`Eek$f2w}LfjwZx19Tg-)Ls$DXiSl-$yGCc>v&*HpweQqEnw_Z3O+KwPmq==& zIJLJ6CUvc(zFgEb_{UagDyj;h>vq=_fvExGSK?5^#;5wJG+K?hjq98Lu_Ov>A^bg`!n#rPnBKFDRCsa&a1jvvM$8 zyKO1(SDEZoNON$hj9?t|=0&qF7+x7I6Oz?6l^mc+ z-1cg4xQ^la6Iw4`pjo4394f|JR|UoEHC92(7Ar7k3J-VoE^lv~;WCj+r_xA3pk5$& za%q6a*-DY&$;x;cZEYjcRFk>Tl@4}Oz;7SqYdgE8VsX=6XY@n=#v=4YZga04)Qc8{ zPqt>6hch_~d!CDF6XdTfLhIDMaPq$kI4CY zd!ztfPIXJS+wm;TwZ*f@9^7Zz9q=&gGa-GbkSqt)T?I4zp@-QYHYB_pFGOAC_CDSU zwM%hTPai=h?i?a>%UNu$lfqCI%dPJHL%3c|40j6?-NxBw2^RJfrAV^tgj9x^)P#sL zrtrH3TERvykg#mK#P;%8Op_1tXyJn)#6%d{=olvP)yv`>B+xz?( z!@mR4{$=k2SYmEproo&ZQLd04Yb|wboI``&>#=JPnH-%NA61^_;W-Yp-jE(ITV#AH znHbYCG9sB`o`)t|G((FN(lIhpdHGRdcKD0zgsw)o8&3H*-!5$?(tm=U$wXvoJ0Eq8 z7OvD3MSu=(eh&>s_|srI60M;7I|d_k)clYO4IeMHZb`j{_rW%TJ_beLLMg8(To>E~ z1AU!>HoS9Rdx@Djk_Du1tT+qL(rK1(r|G}%664if z(jUS*Dz(lPIA)+<$1WrlA5)PbY&_GIS?pg*gf@%UTgrtF(f*`)*qW7!ky>#3vp+7h z%Wky02~&1axAyjv6}Qi-Ra$pNys*HO)9Q1ksR~7Zgaxa~EU5720PlX@ySHw$It1HSlynIEgF=4Fe^B<1#JR4f{*=p}ud{gGE$_JW-^ z%TAm6z04ZpDyafowghrpmR48M&F$+@Y^sXzgf?n6kcxP34GKQSNg50F;vRNtTq`uA#ieX)lXjbUoLd|F7GXD5M>?G>i?fTA7bZryHTQ5C zh6hcrV8&OlO%xU|vs%TpX+-N&++UQ)EKrkBDH+y*wr-wIwceVwexJ>{7=7hUh92(l zrZ%YxgzB!S%)f8XO9-6Jx910Y`*K>ceZ(L7qyJgQcE{Z(y;Za0LL zgAmEW-+j>I^Q)z>Y(GkXgx%F|rD@iA& zn9^;&`sl)nFC0>p`u2mjY&4ND2JKye8wF`g|9vI*WPf)*;=F_D{IoisdrvcG-DZ=P z8C+AX1)^zCR93kC`SSwrMOB`+$E$b=$}WWg;l4wlv1Zcj|F-iZi!9{-zs%cfUssH; zPS{TOr9*3T`^DvZ!tbByz-|SUQ^63>cB+d{m;L@j73X$1<31{;{g*VYe&lw5_k~V3 z9Bgg}`K8K(&CYj*PQw3*%3hQ-|R+of+^D5TupWgDp_z=oTE-n77Y_|~p6ikWB=QeQ8?3h{YqiAIYT=z(X~ zhmPRK%k&_J;NxX_aKrHN@+=w(rf~aj;Jed}55#h7BWcEW?wU#R5{bK9_X7o&K*{`t zb70@z4|sEha&cW!9_Wt5{&F)FV8QDP*iwW=N>oPN0dI&g=!=s21{4w(wa0fCh4~{D zzy{RZ;X6WY&2YbOyW19L0I(|+|8N6Uz?Y15^X+#Ta?(Ekq3Lz)Q1pNu+|({-XJe1+ z8<8c0%1c61{Ky#_5AnTjUT+`;N=fj4jo6pIYN5F8V^s!UKo+4u?9 zj?s5c^fkP`Jmr5;QZh0Yt)jG0E{#mAxbH@6=MF;#4Y|Ixs+aWW)xo|1Q8JR-vQl^R z+mpM)c!GO4etba}U47fgfhAY8rcPn-?v$Y2)iSBFL9^XbE?Cxc0W7Cc~xyLut0l7tWs@ML00@E%{p$6IcbDGy} zr3@>!c+}d5w$yIRHmuptZ(Xu8rc>Aavx~X~Z#CBCX3uEaF{@?zoLv2ueB+Gl)YVOU zrsbY|9+A;~t8qrKPe1SXr!UOF<{5R?tHsZ>-}tgmF3Yc(roN9bip&djLYp%5UbUcE zvs>mIXoHOKB+bZgsCSl2Q63*z=Kr!lKb5kLi)V3Msh+o+4p7Qr^txIyB`#9R-6@eBXGY@s-r$Kh}wC1N9$*!gL zndTSfXSYnxEuE5odPDP)#+KSi*}5%0S<93cnxEU6UAiUvRBe#mvLL^1t5imPqmRyS zpPpYgGtdgF-_ovbVXg9YGqNkTs^yWErM3ArlbUvI%Re(o74ns!TFtwkvwFO=EjxKT zHE4ceO(gssjMqllO^>@ia2n#-ZGL@HW?{v;9G&87m((|+ebRpJ$1uJ%XqTenu-kI# z8yTnU<~2=wW(B#qtF!YK2h_uS`E~2Fi{|Av&TLsSzck41*q&dqJjl*Me=QA>dwy5G zVNT#tDiR;iP1&cH8A#0rN1O{ZrM5p|-n{(YE&EHB-7=}=si!R_tgOq;tE=4N)w!k1 z!}z)_*}BE~mFt4$gi3_{GC)6_UAw|Y}pdE2KN8d|38&d%H1 zw2P)KP~BY5wi&#Alji2G%h#{*Eq|kSQqzuIEh}fg)i}Fp_q3K3b?mr)Rpn;v%ub)? zn&I}tmPvDSd-r6QtfLZ&39@shXB*}Pe*PFRCi0seXC9UY2RNomhqrkoXj!o-J7r#J zkl(wIts=m&@O>}aOtBz8ZA{oRHNRvLLr!-24YP7vS;y`{ztBx63{KFzWo6T@S*()j z4b2Oe`x%ME%$-}WB^CNyK=C3Ca&-%`wF?+*pM*H(kl*?}3T;*}Q;e=)Z*A1v{tx_e zM*ZbpeCa!CL4Opq`?6YV%L+jl87=j*at-tIyOy_XSjfmRkTyFoT?)Hp_>IJm@%xxa ze%sT{b9UwG>QSOhOw@38@(>*v+yUaaH! z=W`2pdKDbxc1&$qvZ`pJIXO3fX?Dvjsl%4~85%3|quiUp>UGZGAF zfK_{%_pAzXk20+`SUsAbZpia*zIpgopi6S~ODxD&iL54VZhm29^NZV>H!NvYGTEtX zv(N2x^9RkB-PO>%VU{6Wvol^GxMgxJvonmb3G7l+Bzs~QW4hbLgp+>XWPV{5hCZxs zTRj@?c>AbOU(2Q)YkV`>>)(%fF34?qhMmu6f`)Nx#O)jr_AP(lFx?xFjz7-< zFt@Ufj&!{%TeE@P%5;?58Iau8)@Gjwm#AOdVbrEwO${ruN}L>dF_(48HYlV zdaCXBilisA^B?g?lAxgM>_;$Rzw%|IeSQ?v_DOH11;r*OwuU!AC(X;Q-W_15=AN=G zq>Vs2_DC!p4~E61#h^HIGxlWX&sN3#q2BNzZzp{^-|?0@w`6il z{bO#UbT3A7K zVN!O>o>2AfeLTPJakBJ^TFWrEqA}ZuA(5Ro%Z(HJeBFGnszN4^jWG$y-da&FmDaRXF?c6)9Llgj1bwW108{Mw~WZ`p)FU-+%9Qv~x$>(!nA3Y(uz1;%3E=@wbvR2V4duE5nNGEtD?9PnM%QofLKEr;O zUG+rkHWnI~2mZ+m2QaPa@Mud7{NQSH?3vmG9RfuW7$%AbE6cy8ordfjqsYWdC4xVNzk%nhYoXYbzp55pX6M> zkZ^i~61p|KWgaK3EbDqz1LYb~IoU09^Oz(IfBkcuM)vO4ZuBPuE?azU3ulZ-pmbRcaHwHe)9SsZm+s~g>YyFeCjVp7Dc3=?A&(71?c1pO>Klw~{ z^K#DaX142bcky9Xw+<7UVQyz}5&n?JwDA$98N5KVna(;`@Q7J?&1-e<5vn$)I%FGh z9MJuf#!Rz3Xntg+E|J_dtto)Q6}rDV(fzkq(b`t)wpfop55k6B=RWC5;t)cy_lUb$I54_(W<%i?GqK}*SiGqSa)J-y**Gqe0Pp!PP-{<+$< z`R(he#+H^{%Yru7iV@z&@NDz6tu6JnT*l7w3Z;>gf;WZGF5Iiu=?-Sjb}SdOH9yvE zon@PK2D9>*Q_B#nn4e#R70O!UA7A%{J;qW8yNUK0Y9h7ufveus+$RIS_Xes^|M6xn3I z1gB;EQ;*3nSlqImOB-OKD&uC2vXBtHeWZjn;IK(OXuji&&%4^ z=pB2r7>2o5I~-zlxo-IIAJX`wWYl`TJ?M*wu$X-{QW)dvf$`!=DdAT;!ynOvF(3I2 zQ{VHp31IixNEDmo_9nxxObJ*F(i?6{6Da&WqcneI|Y0QaW zpWn>*)lL*I@b>fb8Q#P4;%+}bWjSz0`$_BzXEK=~{)nvIAnRa1eQDm=*xWEXuq!!_ zaMroKqp&b7O}Oc}NX#K_;aQLC*rcUr^oqsbgZTF?mRfeUd;by;z&dZKU5w7|+P#}h zswWn*ugiq3ZFCEB`!2MlY*Jl1H#?~`D9qlL*_-q0S25l70^HzrKC{DKs&b;_g%FEO z8EbmUC=cSXJYEk(wV9&(36-VE{Ux zw`J(EQ1(Y$$!^39wmNuo*CyC6Xr_%N^RJ46+?vTuMRtzj3w!qO|IH6qwA1GnZqChn zo~d4>kGM8epg#)HE+>Vp^e6JdRO93`JvZ-3S-P86+1(m%l(Msy*cFyueym>>swO>*$Y}sD`e|7H8wWwoXcv{>~g1U^)&|&`hxRy z{+X2pTin0X@;ytU?Bk2kpuBcqi!zn8d_HF^68OQ-&R-j56n-PdvT*N1+hyTTFJ4I$ zI-)fr>Y`<{v^LA-7e<&{TV^co+>o95tkV;#v98?G2)m6|_&#VoCl_D$e#AR-cfUZD z+^eP5yLU_+T|D@@%4%@$*0^}EqWvmt_D1;Qo133)Acc;fejhA;+0OMr+i9Y0t2sQG zaVX8Nnx0#}+A^kVrQyOX6)L^ptg`T!=hjUSPORLN?RqD`BbeBF_2bu%3HGMQV(cc% zC$m$$7u>7W!l3X*XBBV#{D6gfhfC;#Sj=;nfxI4fJ~IQI4mN|)D`e)Uc0H$?Su{Gb z+hN`pMF!bA-Xs?aw)f}-x!^H#v{m-kPX*a_z=CWyQtjlTl3L3w3OtBk$oRENtJXiw zF+@A=6kgmq!EZ%wu=PWk2-BfWjA<-;GQ3N)?zK?=jRa|_*5Ar-22)v1cNP6yCJgqm zg_c@Rv2gNhxF*!}STo71@DJGpij(n1YGr=!TmuReP1AM?OMz%LqClMK+_bBQi zv2lkxKTEV|_#R*Li<`2`8=9BwXL`i%z%T+yXf^w_-3VD)?TNFS^I)?p|x;l{<)dHg4T7;&QeE6 zy)RwwL#5Z80=Me;ZNTmk+!rz|!cWVCF}`_#!!U-YzWw&p(+rItSna&dI#drkGhMGp z-3^zJlp$=ZUy|nXp7rX>+5XOu3#|m#xBoSh1|uWHv)=NtLc7X>T8nQ9>or0 zE-4RvxufwB-Z79ooXTi3XNdW$-?r1_Ak!SE7yPT;Hm&uWxGkRl|aP#F~pZljxeR;vmP!n7-Ha%}WOMC5SB4d+b?1wYg z9{{AK^i7+^2fQowh znijRTuo~^PuWzPP=iK6NUne!|JiIRoU-z|nr_^p0w(pdWsK4)Jw^%tK=*>cS+Gu}- z`j{EFb~VSSP5;4+TYEh6F>Bn~>-$z|>N@g8qZWUMzj@1kI`>joD!>Q2* zGWLDQmvh65D0WyDm%lS2-e#QtTA<(D3Drz1>^X%yAA+2H=Kg;wUIVH}yj8;N_Es4a K+Af^UV*h`HluhUW literal 38029 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�qC|0Iv&yqu6@Yo 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 e2&tN2w#Q2L2Q@c#j@9$7d5 From 37547189163837ae1b81dd805d59931b6c48aedb Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 30 Dec 2023 15:54:06 -0800 Subject: [PATCH 231/458] Updates locales again --- locale/ca_ES/LC_MESSAGES/django.mo | Bin 145991 -> 150169 bytes locale/ca_ES/LC_MESSAGES/django.po | 78 ++--- locale/de_DE/LC_MESSAGES/django.mo | Bin 30883 -> 151036 bytes locale/en_US/LC_MESSAGES/django.po | 4 +- locale/fr_FR/LC_MESSAGES/django.mo | Bin 44850 -> 154174 bytes locale/gl_ES/LC_MESSAGES/django.mo | Bin 146412 -> 146416 bytes locale/gl_ES/LC_MESSAGES/django.po | 6 +- locale/uk_UA/LC_MESSAGES/django.mo | Bin 146444 -> 169840 bytes locale/uk_UA/LC_MESSAGES/django.po | 450 ++++++++++++++------------- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 44096 -> 94539 bytes locale/zh_Hant/LC_MESSAGES/django.mo | Bin 38839 -> 38029 bytes 11 files changed, 271 insertions(+), 267 deletions(-) diff --git a/locale/ca_ES/LC_MESSAGES/django.mo b/locale/ca_ES/LC_MESSAGES/django.mo index 1f5e30a2e788b527450e5805aead3e802f9309ab..c98411bd01bbc131161205cd091df5cc089ad268 100644 GIT binary patch delta 35015 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 delta 31153 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\n" "Language-Team: Catalan\n" "Language: ca\n" @@ -72,7 +72,7 @@ msgstr "La data de finalitzaciĆ³ de la lectura no pot ser en el futur." #: bookwyrm/forms/landing.py:38 msgid "Username or password are incorrect" -msgstr "Nom d'usuari o contrasenya incorrectes" +msgstr "El nom d'usuari o la contrasenya sĆ³n incorrectes" #: bookwyrm/forms/landing.py:57 msgid "User with this username already exists" @@ -84,7 +84,7 @@ msgstr "Ja existeix un usuari amb aquesta adreƧa electrĆ²nica." #: bookwyrm/forms/landing.py:124 bookwyrm/forms/landing.py:132 msgid "Incorrect code" -msgstr "Codi incorrecte" +msgstr "El codi no Ć©s correcte" #: bookwyrm/forms/links.py:36 msgid "This domain is blocked. Please contact your administrator if you think this is an error." @@ -701,8 +701,8 @@ msgstr "ā€¦ i la mĆ©s llarga" #, python-format msgid "%(display_name)s set a goal of reading %(goal)s book in %(year)s,
    and achieved %(goal_percent)s%% of that goal" msgid_plural "%(display_name)s set a goal of reading %(goal)s books in %(year)s,
    and achieved %(goal_percent)s%% of that goal" -msgstr[0] "%(display_name)s havia fixat com a objectiu llegir %(goal)s llibre l'any %(year)s,
    i ha assolit llegir %(goal_percent)s%% d'aquell objectiu" -msgstr[1] "%(display_name)s havia fixat com a objectiu llegir %(goal)s llibres l'any %(year)s,
    i ha assolit llegir %(goal_percent)s d'aquell objectiu" +msgstr[0] "%(display_name)s havia fixat com a objectiu llegir %(goal)s llibres l'any %(year)s,
    i ha assolit llegir %(goal_percent)s%% d'aquell objectiu" +msgstr[1] "%(display_name)s s'havia fixat com a objectiu llegir %(goal)s llibres l'any %(year)s,
    i ha assolit llegir un %(goal_percent)s%% d'aquell objectiu" #: bookwyrm/templates/annual_summary/layout.html:211 msgid "Way to go!" @@ -1114,7 +1114,7 @@ msgstr "Carregueu una portada:" #: bookwyrm/templates/book/cover_add_modal.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:250 msgid "Load cover from URL:" -msgstr "" +msgstr "Carregueu portada desde una url:" #: bookwyrm/templates/book/cover_show_modal.html:6 msgid "Book cover preview" @@ -1490,7 +1490,7 @@ msgstr "EnllaƧos a fitxers" #: bookwyrm/templates/book/file_links/links.html:9 msgid "Get a copy" -msgstr "Obtingeu una cĆ²pia" +msgstr "Obtingueu-ne una cĆ²pia" #: bookwyrm/templates/book/file_links/links.html:47 msgid "No links available" @@ -2805,8 +2805,8 @@ msgstr "Fitxer CSV no vĆ lid" #, 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] "Actualment, se't permet la importaciĆ³ de %(import_size_limit)s llibres cada %(import_limit_reset)s dies." +msgstr[0] "Actualment se us permet la importaciĆ³ de %(display_size)s llibres cada %(import_limit_reset)s dia." +msgstr[1] "Actualment se us permet la importaciĆ³ de %(display_size)s llibres cada %(import_limit_reset)s dies." #: bookwyrm/templates/import/import.html:27 #, python-format @@ -3226,7 +3226,7 @@ msgstr "contrasenya" #: bookwyrm/templates/layout.html:136 msgid "Show/Hide password" -msgstr "" +msgstr "Mostra/Oculta la contrasenya" #: bookwyrm/templates/layout.html:150 msgid "Join" @@ -3498,15 +3498,15 @@ msgstr "Llistes desades" #: bookwyrm/templates/moved.html:27 #, python-format msgid "You have moved your account to
    %(username)s" -msgstr "" +msgstr "Has mogut el teu compte a %(username)s" #: 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 "" +msgstr "Pots desfer el trasllat per restaurar totes les funcionalitats, perĆ² alguns seguidors potser ja han deixat de seguir aquest compte." #: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 msgid "Undo move" -msgstr "" +msgstr "DesfĆ©s el trasllat" #: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:82 msgid "Log out" @@ -3766,12 +3766,12 @@ msgstr "%(related_user)s us ha mencionat e #: bookwyrm/templates/notifications/items/move_user.html:18 #, python-format msgid "%(related_user)s has moved to %(username)s" -msgstr "" +msgstr "%(related_user)s s'ha mogut a %(username)s" #: bookwyrm/templates/notifications/items/move_user.html:25 #, python-format msgid "%(related_user)s has undone their move" -msgstr "" +msgstr "%(related_user)s ha desfet el seu canvi" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format @@ -4034,42 +4034,42 @@ msgstr "Configura 2FA" #: bookwyrm/templates/preferences/move_user.html:7 #: bookwyrm/templates/preferences/move_user.html:39 msgid "Move Account" -msgstr "" +msgstr "Moure al compte" #: bookwyrm/templates/preferences/alias_user.html:7 #: bookwyrm/templates/preferences/alias_user.html:34 msgid "Create Alias" -msgstr "" +msgstr "Crea un Ć lies" #: bookwyrm/templates/preferences/alias_user.html:12 msgid "Add another account as an alias" -msgstr "" +msgstr "Afegeix un altre compte com a Ć lies" #: 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 "" +msgstr "Per a moure un altre compte sobre aquest, heu de marcar abans el primer com a Ć lies." #: bookwyrm/templates/preferences/alias_user.html:19 msgid "This is a reversable action and will not change the functionality of this account." -msgstr "" +msgstr "Aquesta acciĆ³ Ć©s reversible i no alterarĆ  la funcionalitat d'aquest compte." #: 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 "" +msgstr "Entreu el nom d'usuari del compte que voleu afegir com a Ć lies. Per exemple, usuari@exemple.com:" #: bookwyrm/templates/preferences/alias_user.html:30 #: bookwyrm/templates/preferences/move_user.html:35 msgid "Confirm your password:" -msgstr "" +msgstr "Confirmeu contrasenya:" #: bookwyrm/templates/preferences/alias_user.html:39 #: bookwyrm/templates/preferences/layout.html:28 msgid "Aliases" -msgstr "" +msgstr "ƀlies" #: bookwyrm/templates/preferences/alias_user.html:49 msgid "Remove alias" -msgstr "" +msgstr "Esborra l'Ć lies" #: bookwyrm/templates/preferences/blocks.html:4 #: bookwyrm/templates/preferences/blocks.html:7 @@ -4227,7 +4227,7 @@ msgstr "Compte" #: bookwyrm/templates/preferences/layout.html:32 msgid "Move Account" -msgstr "" +msgstr "Moure al compte" #: bookwyrm/templates/preferences/layout.html:39 msgid "Data" @@ -4243,26 +4243,28 @@ msgstr "Relacions" #: bookwyrm/templates/preferences/move_user.html:12 msgid "Migrate account to another server" -msgstr "" +msgstr "Trasllada el compte a un altre servidor" #: 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 "" +msgstr "El trasllat del compte es notificarĆ  a tots els vostres seguidors i els convidarĆ  a seguir-vos al compte nou." #: 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 "" +msgstr "\n" +" %(user)s es marcarĆ  com a traslladat i no es podrĆ  localitzar o utilitzar si no en desfeu el trasllat.\n" +" " #: 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 "" +msgstr "Recordeu afegir aquest usuari com a Ć lies del compte destĆ­ abans de fer el trasllat." #: 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 "" +msgstr "Entreu el nom d'usuari del compte que voleu afegir com a Ć lies. Per exemple, usuari@exemple.com:" #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format @@ -4661,7 +4663,7 @@ msgstr "Estat del Celery" #: bookwyrm/templates/settings/celery.html:14 msgid "You can set up monitoring to check if Celery is running by querying:" -msgstr "" +msgstr "Podeu configurar la supervisiĆ³ per revisar si el Celery s'estĆ  executant:" #: bookwyrm/templates/settings/celery.html:22 msgid "Queues" @@ -4673,7 +4675,7 @@ msgstr "Reproduccions" #: bookwyrm/templates/settings/celery.html:32 msgid "Broadcast" -msgstr "" +msgstr "Difondre" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" @@ -5777,7 +5779,7 @@ msgstr "InstĆ ncia remota" #: bookwyrm/templates/settings/users/user_admin.html:82 #: bookwyrm/templates/settings/users/user_info.html:29 msgid "Moved" -msgstr "" +msgstr "Mogut" #: bookwyrm/templates/settings/users/user_admin.html:93 msgid "Deleted" @@ -5996,11 +5998,11 @@ msgstr "Edita el prestatge" #: bookwyrm/templates/shelf/shelf.html:25 msgid "You have have moved to" -msgstr "" +msgstr "Us heu traslladat a" #: 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 "" +msgstr "Podeu desfer aquest trasllat per recuperar totes les funcionalitats, perĆ² alguns seguidors poden haver deixat de seguir aquest compte." #: bookwyrm/templates/shelf/shelf.html:39 #: bookwyrm/templates/user/relationships/followers.html:18 @@ -6361,7 +6363,7 @@ msgstr "%(username)s ha llegit %(read_count)s de %(goal_cou #: bookwyrm/templates/snippets/move_user_buttons.html:10 msgid "Follow at new account" -msgstr "" +msgstr "Seguiu al compte nou" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format @@ -6725,7 +6727,7 @@ msgstr "Grups: %(username)s" #: bookwyrm/templates/user/layout.html:50 msgid "has moved to" -msgstr "" +msgstr "s'ha traslladat a" #: bookwyrm/templates/user/layout.html:64 msgid "Follow Requests" @@ -6828,7 +6830,7 @@ msgstr "Encara no hi ha activitats." 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 diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo index 4ce83f72b3f3850c58528f13afcd23442a75a515..47ebdd534f608e4ad92d3633c8fcfdb929ac0eed 100644 GIT binary patch literal 151036 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 YpMR+9`Y)HK^v2)!8LIOK4=zpq1-SJHivR!s literal 30883 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\n" "Language-Team: English \n" @@ -461,7 +461,7 @@ msgid "Svenska (Swedish)" msgstr "" #: bookwyrm/settings.py:331 -msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukranian)" +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" msgstr "" #: bookwyrm/settings.py:332 diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 4cdcbf8ea2a3ffdeed740317a055f435e5954b7c..46882a4dceaf89059a11ee6c1a3fce74cc85843c 100644 GIT binary patch literal 154174 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 literal 44850 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 M-|>ArH~iNB0iQBnO#lD@ diff --git a/locale/gl_ES/LC_MESSAGES/django.po b/locale/gl_ES/LC_MESSAGES/django.po index db5095ef6..3dcef726d 100644 --- a/locale/gl_ES/LC_MESSAGES/django.po +++ b/locale/gl_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-12-13 00:06\n" +"PO-Revision-Date: 2023-12-21 05:43\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Galician\n" "Language: gl\n" @@ -701,8 +701,8 @@ msgstr "ā€¦e a mĆ”is longa" #, python-format msgid "%(display_name)s set a goal of reading %(goal)s book in %(year)s,
    and achieved %(goal_percent)s%% of that goal" msgid_plural "%(display_name)s set a goal of reading %(goal)s books in %(year)s,
    and achieved %(goal_percent)s%% of that goal" -msgstr[0] "%(display_name)s ten como obxectivo ler %(goal)s libro en %(year)s,
    e vai polo %(goal_percent)s dese obxectivo" -msgstr[1] "%(display_name)s ten como obxectivo ler %(goal)s libros en %(year)s,
    e vai polo %(goal_percent)s dese obxectivo" +msgstr[0] "%(display_name)s ten como obxectivo ler %(goal)s libro en %(year)s,
    e vai polo %(goal_percent)s%% dese obxectivo" +msgstr[1] "%(display_name)s ten como obxectivo ler %(goal)s libros en %(year)s,
    e vai polo %(goal_percent)s%% dese obxectivo" #: bookwyrm/templates/annual_summary/layout.html:211 msgid "Way to go!" diff --git a/locale/uk_UA/LC_MESSAGES/django.mo b/locale/uk_UA/LC_MESSAGES/django.mo index 656ccf163afc3ad68539e92623519d8a26bf32ae..5d96992b62c914befd45413716c01186cf4b4e37 100644 GIT binary patch delta 42760 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 diff --git a/locale/uk_UA/LC_MESSAGES/django.po b/locale/uk_UA/LC_MESSAGES/django.po index 4637fbfa6..3496d7dce 100644 --- a/locale/uk_UA/LC_MESSAGES/django.po +++ b/locale/uk_UA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-12-17 09:02\n" +"PO-Revision-Date: 2023-12-24 09:07\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Ukrainian\n" "Language: uk\n" @@ -310,47 +310,47 @@ msgstr "ŠŸŃ€Š¾ŠŗŠ¾Š¼ŠµŠ½Ń‚ŃƒŠ²Š°Ń‚Šø" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "Š”ŠŗŠ°Ń€Š³Ńƒ рŠ¾Š·Š³Š»ŃŠ½ŃƒŃ‚Š¾" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "Š”ŠŗŠ°Ń€Š³Ńƒ Š²Ń–Š“ŠŗрŠøтŠ¾ Š·Š½Š¾Š²" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "ŠŠ°ŠæŠøсŠ°Š½Š¾ Š°Š²Ń‚Š¾Ń€Ńƒ сŠŗŠ°Ń€Š³Šø" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "ŠŠ°ŠæŠøсŠ°Š½Š¾ тŠ¾Š¼Ńƒ, Š½Š° ŠŗŠ¾Š³Š¾ ŠæŠ¾ŃŠŗŠ°Ń€Š¶ŠøŠ»Šøся" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° рŠ°Š·Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Š Ń–Š²ŠµŠ½ŃŒ Š“Š¾ŃŃ‚ŃƒŠæу ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° Š·Š¼Ń–Š½ŠµŠ½Š¾" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "ŠŠŗŠ°ŃƒŠ½Ń‚ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° Š²ŠøŠ“Š°Š»ŠµŠ½Š¾" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "Š”Š¾Š¼ŠµŠ½ Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "Š”Š¾Š¼ŠµŠ½ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š¾" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "Š—Š°ŠæŠøс Š²ŠøŠ“Š°Š»ŠµŠ½Š¾" #: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -434,7 +434,7 @@ msgstr "Lietuvių (Š›ŠøтŠ¾Š²ŃŃŒŠŗŠ°)" #: bookwyrm/settings.py:314 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Nederlands (ŠŃ–Š“ŠµŃ€Š»Š°Š½Š“сьŠŗŠ°)" #: bookwyrm/settings.py:315 msgid "Norsk (Norwegian)" @@ -1084,11 +1084,11 @@ msgstr "ISBN:" #: bookwyrm/templates/book/book_identifiers.html:12 #: bookwyrm/templates/book/book_identifiers.html:13 msgid "Copy ISBN" -msgstr "" +msgstr "Š”ŠŗŠ¾ŠæіюŠ²Š°Ń‚Šø ISBN" #: bookwyrm/templates/book/book_identifiers.html:16 msgid "Copied ISBN!" -msgstr "" +msgstr "ISBN сŠŗŠ¾ŠæіŠ¹Š¾Š²Š°Š½Š¾!" #: bookwyrm/templates/book/book_identifiers.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:352 @@ -1253,7 +1253,7 @@ msgstr "ŠŠ°Š·Š²Š°:" #: bookwyrm/templates/book/edit/edit_book_form.html:35 msgid "Sort Title:" -msgstr "" +msgstr "ŠŠ°Š·Š²Š° Š”Š»Ń Š”Š¾Ń€Ń‚ŃƒŠ²Š°Š½Š½Ń:" #: bookwyrm/templates/book/edit/edit_book_form.html:44 msgid "Subtitle:" @@ -1381,7 +1381,7 @@ msgstr "Š’ŠøŠ“Š°Š½Š½Ń %(book_title)s" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format msgid "Editions of
    %(work_title)s" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š½Š½Ń %(work_title)s" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -1693,7 +1693,7 @@ msgstr "Š ŠµŠŗŠ¾Š¼ŠµŠ½Š“Š¾Š²Š°Š½Ń–" #: bookwyrm/templates/user/user_preview.html:16 #: bookwyrm/templates/user/user_preview.html:17 msgid "Locked account" -msgstr "Š—Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½ŠøŠ¹ Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс" +msgstr "ŠŠŗŠ°ŃƒŠ½Ń‚ Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š¾" #: bookwyrm/templates/directory/user_card.html:40 msgid "follower you follow" @@ -1838,7 +1838,7 @@ msgstr "Š”Ń–Š·Š½Š°Š¹Ń‚ŠµŃŃ Š±Ń–Š»ŃŒŃˆŠµ open an issue if you are seeing unexpected failed items." -msgstr "" +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 "" +msgstr "Š—Š°Ń€ŠµŃ”ŃŃ‚Ń€ŃƒŠ²Š°Ń‚Šøся" #: bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" -msgstr "" +msgstr "ŠŠµŠ¼Š°Ń” Š”Š¾Š·Š²Š¾Š»Ńƒ" #: bookwyrm/templates/landing/invite.html:22 msgid "Sorry! This invite code is no longer valid." -msgstr "" +msgstr "Š’ŠøŠ±Š°Ń‡Ń‚Šµ! Š¦ŠµŠ¹ ŠŗŠ¾Š“ Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń Š±Ń–Š»ŃŒŃˆŠµ Š½Šµ Š“іŠ¹ŃŠ½ŠøŠ¹." #: bookwyrm/templates/landing/landing.html:9 msgid "Recent Books" -msgstr "" +msgstr "ŠŠµŠ“Š°Š²Š½Ń– ŠšŠ½ŠøŠ³Šø" #: bookwyrm/templates/landing/layout.html:17 msgid "Decentralized" -msgstr "" +msgstr "Š”ŠµŃ†ŠµŠ½Ń‚Ń€Š°Š»Ń–Š·Š¾Š²Š°Š½Š¾" #: bookwyrm/templates/landing/layout.html:23 msgid "Friendly" -msgstr "" +msgstr "Š”Ń€ŃƒŠ¶Š½ŃŒŠ¾" #: bookwyrm/templates/landing/layout.html:29 msgid "Anti-Corporate" -msgstr "" +msgstr "ŠŠ½Ń‚ŠøŠŗŠ¾Ń€ŠæŠ¾Ń€Š°Ń‚ŠøŠ²Š½Š¾" #: bookwyrm/templates/landing/layout.html:46 #, python-format msgid "Join %(name)s" -msgstr "" +msgstr "ŠŸŃ€ŠøєŠ“Š½ŃƒŠ¹ŃŃ Š“Š¾ %(name)s" #: bookwyrm/templates/landing/layout.html:48 msgid "Request an Invitation" -msgstr "" +msgstr "ŠŸŠ¾Š“Š°Ń‚Šø Š—Š°ŃŠ²Šŗу Š½Š° Š—Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń" #: bookwyrm/templates/landing/layout.html:50 #, python-format msgid "%(name)s registration is closed" -msgstr "" +msgstr "рŠµŃ”стрŠ°Ń†Ń–я Š½Š° %(name)s Š·Š°ŠŗрŠøтŠ°" #: bookwyrm/templates/landing/layout.html:61 msgid "Thank you! Your request has been received." -msgstr "" +msgstr "Š”яŠŗуєŠ¼Š¾, Š²Š°Ńˆ Š·Š°ŠæŠøт Š¾Ń‚Ń€ŠøŠ¼Š°Š½Š¾." #: bookwyrm/templates/landing/layout.html:90 msgid "Your Account" -msgstr "" +msgstr "Š’Š°Ńˆ ŠŠŗŠ°ŃƒŠ½Ń‚" #: bookwyrm/templates/landing/login.html:4 msgid "Login" -msgstr "" +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 "" +msgstr "Š£Š²Ń–Š¹Ń‚Šø" #: bookwyrm/templates/landing/login.html:15 msgid "Success! Email address confirmed." -msgstr "" +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 "" +msgstr "Š†Š¼'я ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° (username):" #: bookwyrm/templates/landing/login.html:27 #: bookwyrm/templates/landing/password_reset.html:26 @@ -3185,12 +3185,12 @@ msgstr "" #: bookwyrm/templates/preferences/2fa.html:91 #: bookwyrm/templates/snippets/register_form.html:45 msgid "Password:" -msgstr "" +msgstr "ŠŸŠ°Ń€Š¾Š»ŃŒ:" #: bookwyrm/templates/landing/login.html:39 bookwyrm/templates/layout.html:139 #: bookwyrm/templates/ostatus/error.html:34 msgid "Forgot your password?" -msgstr "" +msgstr "Š—Š°Š±ŃƒŠ»Šø ŠæŠ°Ń€Š¾Š»ŃŒ?" #: bookwyrm/templates/landing/login.html:61 #: bookwyrm/templates/landing/reactivate.html:54 @@ -3201,54 +3201,54 @@ msgstr "Š”Š¾ŠŗŠ»Š°Š“Š½Ń–ŃˆŠµ ŠæрŠ¾ цŠµŠ¹ сŠ°Š¹Ń‚" #: bookwyrm/templates/preferences/change_password.html:33 #: bookwyrm/templates/preferences/delete_user.html:35 msgid "Confirm password:" -msgstr "" +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 "" +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń Š“Š»Ń Š²Ń–Š“Š½Š¾Š²Š»ŠµŠ½Š½Ń ŠæŠ°Ń€Š¾Š»ŃŽ Š±ŃƒŠ“Šµ Š½Š°Š“ісŠ»Š°Š½Š¾ Š½Š° %(email)s яŠŗщŠ¾ ісŠ½ŃƒŃ” Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠ°Ń Š· цŠøŠ¼ email." #: bookwyrm/templates/landing/password_reset_request.html:20 msgid "A link to reset your password will be sent to your email address" -msgstr "" +msgstr "ŠŸŠ¾ŃŠøŠ»Š°Š½Š½Ń Š“Š»Ń Š²Ń–Š“Š½Š¾Š²Š»ŠµŠ½Š½Ń ŠæŠ°Ń€Š¾Š»Ń Š±ŃƒŠ»Š¾ Š½Š°Š“ісŠ»Š°Š½Š¾ Š½Š° Š²Š°ŃˆŃƒ ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Ńƒ Š°Š“рŠµŃŃƒ" #: bookwyrm/templates/landing/password_reset_request.html:34 msgid "Reset password" -msgstr "" +msgstr "Š”ŠŗŠøŠ½ŃƒŃ‚Šø ŠæŠ°Ń€Š¾Š»ŃŒ" #: bookwyrm/templates/landing/reactivate.html:4 #: bookwyrm/templates/landing/reactivate.html:7 msgid "Reactivate Account" -msgstr "" +msgstr "ŠŸŠ¾Š²Ń‚Š¾Ń€Š½Š° ŠŠŗтŠøŠ²Š°Ń†Ń–я ŠžŠ±Š»Ń–ŠŗŠ¾Š²Š¾Š³Š¾ Š—Š°ŠæŠøсу" #: bookwyrm/templates/landing/reactivate.html:32 msgid "Reactivate account" -msgstr "" +msgstr "Š ŠµŠ°ŠŗтŠøŠ²ŃƒŠ²Š°Ń‚Šø Š°ŠŗŠ°ŃƒŠ½Ń‚" #: bookwyrm/templates/layout.html:13 #, python-format msgid "%(site_name)s search" -msgstr "" +msgstr "ŠŸŠ¾ŃˆŃƒŠŗ ŠæŠ¾ %(site_name)s" #: bookwyrm/templates/layout.html:39 msgid "Search for a book, user, or list" -msgstr "" +msgstr "ŠØуŠŗŠ°Ń‚Šø ŠŗŠ½ŠøŠ³Ńƒ, ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° Š°Š±Š¾ сŠæŠøсŠ¾Šŗ" #: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55 msgid "Scan Barcode" -msgstr "" +msgstr "Š”ŠŗŠ°Š½ŃƒŠ²Š°Ń‚Šø ŠØтрŠøх-ŠŗŠ¾Š“" #: bookwyrm/templates/layout.html:69 msgid "Main navigation menu" -msgstr "" +msgstr "Š“Š¾Š»Š¾Š²Š½Šµ Š¼ŠµŠ½ŃŽ Š½Š°Š²Ń–Š³Š°Ń†Ń–Ń—" #: bookwyrm/templates/layout.html:88 msgid "Feed" -msgstr "" +msgstr "Š”трічŠŗŠ° ŠæŠ¾Š“іŠ¹" #: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33 msgid "password" -msgstr "" +msgstr "ŠæŠ°Ń€Š¾Š»ŃŒ" #: bookwyrm/templates/layout.html:136 msgid "Show/Hide password" @@ -3256,176 +3256,176 @@ msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚Šø/ŠŸŃ€ŠøхŠ¾Š²Š°Ń‚Šø ŠæŠ°Ń€Š¾Š»ŃŒ" #: bookwyrm/templates/layout.html:150 msgid "Join" -msgstr "" +msgstr "ŠŸŃ€ŠøєŠ“Š½Š°Ń‚Šøся" #: bookwyrm/templates/layout.html:196 msgid "Successfully posted status" -msgstr "" +msgstr "Š”тŠ°Ń‚ŃƒŃ усŠæішŠ½Š¾ Š¾ŠæуŠ±Š»Ń–ŠŗŠ¾Š²Š°Š½Š¾" #: bookwyrm/templates/layout.html:197 msgid "Error posting status" -msgstr "" +msgstr "ŠŸŠ¾Š¼ŠøŠ»ŠŗŠ° ŠæуŠ±Š»Ń–ŠŗŠ°Ń†Ń–Ń— стŠ°Ń‚ŃƒŃŃƒ" #: bookwyrm/templates/lists/add_item_modal.html:8 #, python-format msgid "Add \"%(title)s\" to this list" -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚Šø \"%(title)s\" Š“Š¾ цьŠ¾Š³Š¾ сŠæŠøсŠŗу" #: bookwyrm/templates/lists/add_item_modal.html:12 #, python-format msgid "Suggest \"%(title)s\" for this list" -msgstr "" +msgstr "Š—Š°ŠæрŠ¾ŠæŠ¾Š½ŃƒŠ²Š°Ń‚Šø Š“Š¾Š“Š°Ń‚Šø \"%(title)s\" у цŠµŠ¹ сŠæŠøсŠ¾Šŗ" #: bookwyrm/templates/lists/add_item_modal.html:41 #: bookwyrm/templates/lists/list.html:257 msgid "Suggest" -msgstr "" +msgstr "Š—Š°ŠæрŠ¾ŠæŠ¾Š½ŃƒŠ²Š°Ń‚Šø" #: bookwyrm/templates/lists/bookmark_button.html:30 msgid "Un-save" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø" #: bookwyrm/templates/lists/created_text.html:5 #, python-format msgid "Created by %(username)s and managed by %(groupname)s" -msgstr "" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š¾ %(username)s і ŠŗŠµŃ€ŃƒŃ”Ń‚ŃŒŃŃ %(groupname)s" #: bookwyrm/templates/lists/created_text.html:7 #, python-format msgid "Created and curated by %(username)s" -msgstr "" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š¾ тŠ° Šŗурується %(username)s" #: bookwyrm/templates/lists/created_text.html:9 #, python-format msgid "Created by %(username)s" -msgstr "" +msgstr "Š”тŠ²Š¾Ń€ŠµŠ½Š¾ %(username)s" #: bookwyrm/templates/lists/curate.html:12 msgid "Curate" -msgstr "" +msgstr "ŠšŃƒŃ€ŃƒŠ²Š°Ń‚Šø" #: bookwyrm/templates/lists/curate.html:21 msgid "Pending Books" -msgstr "" +msgstr "ŠšŠ½ŠøŠ³Šø Š² ŠžŃ‡Ń–ŠŗуŠ²Š°Š½Š½Ń–" #: bookwyrm/templates/lists/curate.html:24 msgid "You're all set!" -msgstr "" +msgstr "Š’сŠµ Š³Š¾Ń‚Š¾Š²Š¾!" #: bookwyrm/templates/lists/curate.html:45 #: bookwyrm/templates/lists/list.html:93 #, python-format msgid "%(username)s says:" -msgstr "" +msgstr "%(username)s ŠæŠøшŠµ:" #: bookwyrm/templates/lists/curate.html:55 msgid "Suggested by" -msgstr "" +msgstr "Š—Š°ŠæрŠ¾ŠæŠ¾Š½Š¾Š²Š°Š½Š¾" #: bookwyrm/templates/lists/curate.html:77 msgid "Discard" -msgstr "" +msgstr "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø" #: bookwyrm/templates/lists/delete_list_modal.html:4 msgid "Delete this list?" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø цŠµŠ¹ сŠæŠøсŠ¾Šŗ?" #: bookwyrm/templates/lists/edit_form.html:5 #: bookwyrm/templates/lists/layout.html:23 msgid "Edit List" -msgstr "" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø Š”ŠæŠøсŠ¾Šŗ" #: bookwyrm/templates/lists/embed-list.html:8 #, python-format msgid "%(list_name)s, a list by %(owner)s" -msgstr "" +msgstr "%(list_name)s, сŠæŠøсŠ¾Šŗ Š²Ń–Š“ %(owner)s" #: bookwyrm/templates/lists/embed-list.html:20 #, python-format msgid "on %(site_name)s" -msgstr "" +msgstr "Š½Š° %(site_name)s" #: bookwyrm/templates/lists/embed-list.html:29 msgid "This list is currently empty" -msgstr "" +msgstr "Š¦ŠµŠ¹ сŠæŠøсŠ¾Šŗ Š½Š°Ń€Š°Š·Ń– ŠæŠ¾Ń€Š¾Š¶Š½Ń–Š¹" #: bookwyrm/templates/lists/form.html:19 msgid "List curation:" -msgstr "" +msgstr "ŠÆŠŗ Š±ŃƒŠ“Šµ ŠŗуруŠ²Š°Ń‚Šøся сŠæŠøсŠ¾Šŗ:" #: bookwyrm/templates/lists/form.html:31 msgid "Closed" -msgstr "" +msgstr "Š—Š°ŠŗрŠøтŠøŠ¹" #: bookwyrm/templates/lists/form.html:34 msgid "Only you can add and remove books to this list" -msgstr "" +msgstr "Š¢Ń–Š»ŃŒŠŗŠø Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š“Š¾Š“Š°Š²Š°Ń‚Šø тŠ° Š²ŠøŠ“Š°Š»ŃŃ‚Šø ŠŗŠ½ŠøŠ³Šø Š· цьŠ¾Š³Š¾ сŠæŠøсŠŗу" #: bookwyrm/templates/lists/form.html:48 msgid "Curated" -msgstr "" +msgstr "ŠšŃƒŃ€Š¾Š²Š°Š½ŠøŠ¹" #: bookwyrm/templates/lists/form.html:51 msgid "Anyone can suggest books, subject to your approval" -msgstr "" +msgstr "Š‘ŃƒŠ“ь-хтŠ¾ Š¼Š¾Š¶Šµ ŠæрŠ¾ŠæŠ¾Š½ŃƒŠ²Š°Ń‚Šø ŠŗŠ½ŠøŠ³Šø, Š²Šø їх схŠ²Š°Š»ŃŽŃ”Ń‚Šµ" #: bookwyrm/templates/lists/form.html:65 msgctxt "curation type" msgid "Open" -msgstr "" +msgstr "Š’Ń–Š“ŠŗрŠøтŠøŠ¹" #: bookwyrm/templates/lists/form.html:68 msgid "Anyone can add books to this list" -msgstr "" +msgstr "Š‘ŃƒŠ“ь-хтŠ¾ Š¼Š¾Š¶Šµ Š“Š¾Š“Š°Ń‚Šø ŠŗŠ½ŠøŠ³Šø Š“Š¾ цьŠ¾Š³Š¾ сŠæŠøсŠŗу" #: bookwyrm/templates/lists/form.html:82 msgid "Group" -msgstr "" +msgstr "Š“Ń€ŃƒŠæŠ¾Š²ŠøŠ¹" #: bookwyrm/templates/lists/form.html:85 msgid "Group members can add to and remove from this list" -msgstr "" +msgstr "Š£Ń‡Š°ŃŠ½ŠøŠŗŠø Š³Ń€ŃƒŠæŠø Š¼Š¾Š¶ŃƒŃ‚ŃŒ Š“Š¾Š“Š°Š²Š°Ń‚Šø тŠ° Š²ŠøŠ“Š°Š»ŃŃ‚Šø ŠŗŠ½ŠøŠ³Šø Š· цьŠ¾Š³Š¾ сŠæŠøсŠŗу" #: bookwyrm/templates/lists/form.html:90 msgid "Select Group" -msgstr "" +msgstr "Š’ŠøŠ±Ń€Š°Ń‚Šø Š“Ń€ŃƒŠæу" #: bookwyrm/templates/lists/form.html:94 msgid "Select a group" -msgstr "" +msgstr "Š’ŠøŠ±ŠµŃ€Ń–Ń‚ŃŒ Š³Ń€ŃƒŠæу" #: bookwyrm/templates/lists/form.html:105 msgid "You don't have any Groups yet!" -msgstr "" +msgstr "Š£ Š²Š°Ń Š½ŠµŠ¼Š°Ń” Š¶Š¾Š“Š½Š¾Ń— Š³Ń€ŃƒŠæŠø!" #: bookwyrm/templates/lists/form.html:107 msgid "Create a Group" -msgstr "" +msgstr "Š”тŠ²Š¾Ń€ŠøтŠø Š“Ń€ŃƒŠæу" #: bookwyrm/templates/lists/form.html:121 msgid "Delete list" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø сŠæŠøсŠ¾Šŗ" #: bookwyrm/templates/lists/item_notes_field.html:7 #: bookwyrm/templates/settings/federation/edit_instance.html:86 msgid "Notes:" -msgstr "" +msgstr "ŠŠ¾Ń‚Š°Ń‚ŠŗŠø:" #: bookwyrm/templates/lists/item_notes_field.html:19 msgid "An optional note that will be displayed with the book." -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚ŠŗŠ¾Š²Ń– ŠæрŠøŠ¼Ń–Ń‚ŠŗŠø, щŠ¾ ŠæŠ¾ŠŗŠ°Š·ŃƒŠ²Š°Ń‚ŠøŠ¼ŃƒŃ‚ŃŒŃŃ Š· ŠŗŠ½ŠøŠ³Š¾ŃŽ." #: bookwyrm/templates/lists/list.html:37 msgid "That book is already on this list." -msgstr "" +msgstr "Š¦Ń ŠŗŠ½ŠøŠ³Š° Š²Š¶Šµ є Š² цьŠ¾Š¼Ńƒ сŠæŠøсŠŗу." #: bookwyrm/templates/lists/list.html:45 msgid "You successfully suggested a book for this list!" -msgstr "" +msgstr "Š’Šø усŠæішŠ½Š¾ Š·Š°ŠæрŠ¾ŠæŠ¾Š½ŃƒŠ²Š°Š»Šø ŠŗŠ½ŠøŠ³Ńƒ Š“Š»Ń цьŠ¾Š³Š¾ сŠæŠøсŠŗу!" #: bookwyrm/templates/lists/list.html:47 msgid "You successfully added a book to this list!" -msgstr "" +msgstr "Š’Šø усŠæішŠ½Š¾ Š“Š¾Š“Š°Š»Šø ŠŗŠ½ŠøŠ³Ńƒ Š“Š¾ цьŠ¾Š³Š¾ сŠæŠøсŠŗу!" #: bookwyrm/templates/lists/list.html:54 msgid "This list is currently empty." @@ -3433,35 +3433,35 @@ msgstr "Š¦ŠµŠ¹ сŠæŠøсŠ¾Šŗ Š½Š°Ń€Š°Š·Ń– ŠæŠ¾Ń€Š¾Š¶Š½Ń–Š¹." #: bookwyrm/templates/lists/list.html:104 msgid "Edit notes" -msgstr "" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø Š½Š¾Ń‚Š°Ń‚ŠŗŠø" #: bookwyrm/templates/lists/list.html:119 msgid "Add notes" -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚Šø Š½Š¾Ń‚Š°Ń‚ŠŗŠø" #: bookwyrm/templates/lists/list.html:131 #, python-format msgid "Added by %(username)s" -msgstr "" +msgstr "Š”Š¾Š“Š°Š½Š¾ %(username)s" #: bookwyrm/templates/lists/list.html:146 msgid "List position" -msgstr "" +msgstr "ŠŸŠ¾Š·Šøція Š² сŠæŠøсŠŗу" #: bookwyrm/templates/lists/list.html:152 #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:23 msgid "Set" -msgstr "" +msgstr "Š’стŠ°Š½Š¾Š²ŠøтŠø" #: bookwyrm/templates/lists/list.html:167 #: bookwyrm/templates/snippets/remove_from_group_button.html:20 msgid "Remove" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø" #: bookwyrm/templates/lists/list.html:181 #: bookwyrm/templates/lists/list.html:198 msgid "Sort List" -msgstr "" +msgstr "Š’Ń–Š“сŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø Š”ŠæŠøсŠ¾Šŗ" #: bookwyrm/templates/lists/list.html:191 msgid "Direction" @@ -3469,62 +3469,62 @@ msgstr "ŠŠ°ŠæряŠ¼Š¾Šŗ сŠ¾Ń€Ń‚ŃƒŠ²Š°Š½Š½Ń" #: bookwyrm/templates/lists/list.html:205 msgid "Add Books" -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠšŠ½ŠøŠ³Šø" #: bookwyrm/templates/lists/list.html:207 msgid "Suggest Books" -msgstr "" +msgstr "Š—Š°ŠæрŠ¾ŠæŠ¾Š½ŃƒŠ²Š°Ń‚Šø ŠšŠ½ŠøŠ³Šø" #: bookwyrm/templates/lists/list.html:218 msgid "search" -msgstr "" +msgstr "ŠæŠ¾ŃˆŃƒŠŗ" #: bookwyrm/templates/lists/list.html:224 msgid "Clear search" -msgstr "" +msgstr "ŠžŃ‡ŠøстŠøтŠø ŠæŠ¾ŃˆŃƒŠŗ" #: bookwyrm/templates/lists/list.html:229 #, python-format msgid "No books found matching the query \"%(query)s\"" -msgstr "" +msgstr "ŠŸŠ¾ Š·Š°ŠæŠøту \"%(query)s\" Š½Šµ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ Š¶Š¾Š“Š½Š¾Ń— ŠŗŠ½ŠøŠ³Šø" #: bookwyrm/templates/lists/list.html:268 msgid "Embed this list on a website" -msgstr "" +msgstr "Š’стŠ°Š²ŠøтŠø цŠµŠ¹ сŠæŠøсŠ¾Šŗ Š½Š° сŠ°Š¹Ń‚" #: bookwyrm/templates/lists/list.html:276 msgid "Copy embed code" -msgstr "" +msgstr "Š”ŠŗŠ¾ŠæіюŠ²Š°Ń‚Šø ŠŗŠ¾Š“ Š²ŃŃ‚Š°Š²ŠŗŠø" #: bookwyrm/templates/lists/list.html:278 #, python-format msgid "%(list_name)s, a list by %(owner)s on %(site_name)s" -msgstr "" +msgstr "%(list_name)s, сŠæŠøсŠ¾Šŗ %(owner)s Š½Š° %(site_name)s" #: bookwyrm/templates/lists/list_items.html:15 msgid "Saved" -msgstr "" +msgstr "Š—Š±ŠµŃ€ŠµŠ¶ŠµŠ½Š¾" #: bookwyrm/templates/lists/list_items.html:50 msgid "No lists found." -msgstr "" +msgstr "ŠŠµ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ Š¶Š¾Š“Š½Š¾Š³Š¾ сŠæŠøсŠŗу." #: bookwyrm/templates/lists/lists.html:14 bookwyrm/templates/user/lists.html:14 msgid "Your Lists" -msgstr "" +msgstr "Š’Š°ŃˆŃ– Š”ŠæŠøсŠŗŠø" #: bookwyrm/templates/lists/lists.html:36 msgid "All Lists" -msgstr "" +msgstr "Š’сі Š”ŠæŠøсŠŗŠø" #: bookwyrm/templates/lists/lists.html:40 msgid "Saved Lists" -msgstr "" +msgstr "Š—Š±ŠµŃ€ŠµŠ¶ŠµŠ½Ń– Š”ŠæŠøсŠŗŠø" #: bookwyrm/templates/moved.html:27 #, python-format msgid "You have moved your account to %(username)s" -msgstr "Š’Šø ŠæŠµŃ€ŠµŠ¼Ń–стŠøŠ»Šø сŠ²Ń–Š¹ Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс Š½Š° %(username)s" +msgstr "Š’Šø ŠæŠµŃ€ŠµŠ¼Ń–стŠøŠ»Šø сŠ²Ń–Š¹ Š°ŠŗŠ°ŃƒŠ½Ń‚ Š½Š° %(username)s" #: bookwyrm/templates/moved.html:32 msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account." @@ -3749,51 +3749,51 @@ msgstr "%(related_user)s Š·Š°ŠæрŠ¾ŃˆŃƒŃ” #: bookwyrm/templates/notifications/items/join.html:16 #, python-format msgid "has joined your group \"%(group_name)s\"" -msgstr "" +msgstr "ŠæрŠøєŠ“Š½Š°Š²ŃŃ Š“Š¾ Š²Š°ŃˆŠ¾Ń— Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" #: bookwyrm/templates/notifications/items/leave.html:18 #, python-format msgid "%(related_user)s has left your group \"%(group_name)s\"" -msgstr "" +msgstr "%(related_user)s Š²ŠøŠ¹ŃˆŠ¾Š²(-Š»Š°) Š· Š²Š°ŃˆŠ¾Ń— Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" #: 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 "" +msgstr "%(related_user)s тŠ° %(second_user)s Š²ŠøŠ¹ŃˆŠ»Šø Š· Š²Š°ŃˆŠ¾Ń— Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" #: 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 "" +msgstr "%(related_user)s тŠ° %(other_user_display_count)s іŠ½ŃˆŠøх Š²ŠøŠ¹ŃˆŠ»Šø Š· Š²Š°ŃˆŠ¾Ń— Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" #: 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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "ŠŠ¾Š²ŠøŠ¹ Š“Š¾Š¼ŠµŠ½ ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃ” ŠæŠµŃ€ŠµŠ²Ń–Ń€ŠŗŠø" +msgstr[1] "%(display_count)s Š½Š¾Š²Šøх Š“Š¾Š¼ŠµŠ½Ń–Š² ŠæŠ¾ŃŠøŠ»Š°Š½ŃŒ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" +msgstr[2] "%(display_count)s Š½Š¾Š²Šøх Š“Š¾Š¼ŠµŠ½Ń–Š² ŠæŠ¾ŃŠøŠ»Š°Š½ŃŒ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" +msgstr[3] "%(display_count)s Š½Š¾Š²Šøх Š“Š¾Š¼ŠµŠ½Ń–Š² ŠæŠ¾ŃŠøŠ»Š°Š½ŃŒ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" #: bookwyrm/templates/notifications/items/mention.html:20 #, python-format msgid "%(related_user)s mentioned you in a review of %(book_title)s" -msgstr "" +msgstr "%(related_user)s Š·Š³Š°Š“Š°Š²(-Š»Š°) Š²Š°Ń Š² рŠµŃ†ŠµŠ½Š·Ń–Ń— Š½Š° %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:26 #, python-format msgid "%(related_user)s mentioned you in a comment on %(book_title)s" -msgstr "" +msgstr "%(related_user)s Š·Š³Š°Š“Š°Š²(-Š»Š°) Š²Š°Ń Š² ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€Ń– Š“Š¾ %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:32 #, python-format msgid "%(related_user)s mentioned you in a quote from %(book_title)s" -msgstr "" +msgstr "%(related_user)s Š·Š³Š°Š“Š°Š²(-Š»Š°) Š²Š°Ń Š² цŠøтŠ°Ń‚Ń– Š· %(book_title)s" #: bookwyrm/templates/notifications/items/mention.html:38 #, python-format msgid "%(related_user)s mentioned you in a status" -msgstr "" +msgstr "%(related_user)s Š·Š³Š°Š“Š°Š²(-Š»Š°) Š²Š°Ń Š² стŠ°Ń‚ŃƒŃŃ–" #: bookwyrm/templates/notifications/items/move_user.html:18 #, python-format @@ -3808,46 +3808,46 @@ msgstr "%(related_user)s сŠŗŠ°ŃŃƒŠ²Š°Š² сŠ²Š¾Ń” ŠæŠµŃ€ŠµŠ¼Ń–щŠµŠ½Š½Ń" #: bookwyrm/templates/notifications/items/remove.html:17 #, python-format msgid "has been removed from your group \"%(group_name)s\"" -msgstr "" +msgstr "Š²ŠøŠ“Š°Š»ŠµŠ½Š¾ Š· Š²Š°ŃˆŠ¾Ń— Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" #: bookwyrm/templates/notifications/items/remove.html:23 #, python-format msgid "You have been removed from the \"%(group_name)s\" group" -msgstr "" +msgstr "Š’Šø Š±ŃƒŠ»Šø Š²ŠøŠŗŠ»ŃŽŃ‡ŠµŠ½Ń– Š· Š³Ń€ŃƒŠæŠø \"%(group_name)s\"" #: bookwyrm/templates/notifications/items/reply.html:21 #, python-format msgid "%(related_user)s replied to your review of %(book_title)s" -msgstr "" +msgstr "%(related_user)s Š²Ń–Š“ŠæŠ¾Š²Ń–Š²(-Š»Š°) Š½Š° Š²Š°ŃˆŃƒ рŠµŃ†ŠµŠ½Š·Ń–ŃŽ Š½Š° %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:27 #, python-format msgid "%(related_user)s replied to your comment on %(book_title)s" -msgstr "" +msgstr "%(related_user)s Š²Ń–Š“ŠæŠ¾Š²Ń–Š²(-Š»Š°) Š½Š° Š²Š°Ńˆ ŠŗŠ¾Š¼ŠµŠ½Ń‚Š°Ń€ Š“Š¾ %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:33 #, python-format msgid "%(related_user)s replied to your quote from %(book_title)s" -msgstr "" +msgstr "%(related_user)s Š²Ń–Š“ŠæŠ¾Š²Ń–Š²(-Š»Š°) Š½Š° Š²Š°ŃˆŃƒ цŠøтŠ°Ń‚Ńƒ Š· %(book_title)s" #: bookwyrm/templates/notifications/items/reply.html:39 #, python-format msgid "%(related_user)s replied to your status" -msgstr "" +msgstr "%(related_user)s Š²Ń–Š“ŠæŠ¾Š²Ń–Š²(-Š»Š°) Š½Š° Š²Š°Ńˆ стŠ°Ń‚ŃƒŃ" #: 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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "ŠŠ¾Š²Š° сŠŗŠ°Ń€Š³Š° ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃ” Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" +msgstr[1] "%(display_count)s Š½Š¾Š²Ń– сŠŗŠ°Ń€Š³Šø ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" +msgstr[2] "%(display_count)s Š½Š¾Š²Šøх сŠŗŠ°Ń€Š³ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" +msgstr[3] "%(display_count)s Š½Š¾Š²Šøх сŠŗŠ°Ń€Š³ ŠæŠ¾Ń‚Ń€ŠµŠ±ŃƒŃŽŃ‚ŃŒ Š¼Š¾Š“ŠµŃ€Š°Ń†Ń–Ń—" #: bookwyrm/templates/notifications/items/status_preview.html:4 #: bookwyrm/templates/snippets/status/content_status.html:62 msgid "Content warning" -msgstr "" +msgstr "ŠŸŠ¾ŠæŠµŃ€ŠµŠ“Š¶ŠµŠ½Š½Ń ŠæрŠ¾ Š²Š¼Ń–ст" #: bookwyrm/templates/notifications/items/update.html:16 #, python-format @@ -4178,14 +4178,14 @@ msgstr "" #: bookwyrm/templates/preferences/edit_user.html:7 #: bookwyrm/templates/preferences/layout.html:15 msgid "Edit Profile" -msgstr "" +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/user_menu.html:29 msgid "Profile" -msgstr "" +msgstr "ŠŸŃ€Š¾Ń„Ń–Š»ŃŒ" #: bookwyrm/templates/preferences/edit_user.html:13 #: bookwyrm/templates/preferences/edit_user.html:64 @@ -4231,7 +4231,7 @@ msgstr "" #: bookwyrm/templates/preferences/edit_user.html:123 msgid "Hide followers and following on profile" -msgstr "" +msgstr "ŠŸŃ€ŠøхŠ¾Š²Š°Ń‚Šø ŠæіŠ“ŠæŠøсŠ½ŠøŠŗіŠ² і ŠæіŠ“ŠæŠøсŠŗŠø Š² ŠæрŠ¾Ń„Ń–Š»Ń–" #: bookwyrm/templates/preferences/edit_user.html:128 msgid "Default post privacy:" @@ -4245,7 +4245,7 @@ msgstr "" #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 msgid "CSV Export" -msgstr "" +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." @@ -4301,26 +4301,26 @@ msgstr "" #: bookwyrm/templates/reading_progress/finish.html:5 #, python-format msgid "Finish \"%(book_title)s\"" -msgstr "" +msgstr "Š—Š°Š²ŠµŃ€ŃˆŠøтŠø Š§ŠøтŠ°Ń‚Šø \"%(book_title)s\"" #: bookwyrm/templates/reading_progress/start.html:5 #, python-format msgid "Start \"%(book_title)s\"" -msgstr "" +msgstr "ŠŸŠ¾Ń‡Š°Ń‚Šø Š§ŠøтŠ°Ń‚Šø \"%(book_title)s\"" #: bookwyrm/templates/reading_progress/stop.html:5 #, python-format msgid "Stop Reading \"%(book_title)s\"" -msgstr "" +msgstr "ŠŸŃ€ŠøŠæŠøŠ½ŠøтŠø Š§ŠøтŠ°Ń‚Šø \"%(book_title)s\"" #: bookwyrm/templates/reading_progress/want.html:5 #, python-format msgid "Want to Read \"%(book_title)s\"" -msgstr "" +msgstr "Š„Š¾Ń‡Ńƒ ŠŸŃ€Š¾Ń‡ŠøтŠ°Ń‚Šø \"%(book_title)s\"" #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:4 msgid "Delete these read dates?" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø ці Š“Š°Ń‚Šø чŠøтŠ°Š½Š½Ń?" #: bookwyrm/templates/readthrough/delete_readthrough_modal.html:8 #, python-format @@ -4398,11 +4398,13 @@ msgstr "" msgid "\n" " Scan Barcode\n" " " -msgstr "" +msgstr "\n" +" Š”ŠŗŠ°Š½ŃƒŠ²Š°Ń‚Šø ŠØтрŠøх-ŠŗŠ¾Š“\n" +" " #: bookwyrm/templates/search/barcode_modal.html:21 msgid "Requesting camera..." -msgstr "" +msgstr "Š—Š°ŠæŠøтуєŠ¼Š¾ ŠŗŠ°Š¼ŠµŃ€Ńƒ..." #: bookwyrm/templates/search/barcode_modal.html:22 msgid "Grant access to the camera to scan a book's barcode." @@ -4415,7 +4417,7 @@ msgstr "" #: bookwyrm/templates/search/barcode_modal.html:31 msgctxt "barcode scanner" msgid "Scanning..." -msgstr "" +msgstr "Š”ŠŗŠ°Š½ŃƒŠ²Š°Š½Š½Ń..." #: bookwyrm/templates/search/barcode_modal.html:32 msgid "Align your book's barcode with the camera." @@ -4424,7 +4426,7 @@ msgstr "" #: bookwyrm/templates/search/barcode_modal.html:36 msgctxt "barcode scanner" msgid "ISBN scanned" -msgstr "" +msgstr "ISBN Š²Ń–Š“сŠŗŠ°Š½Š¾Š²Š°Š½Š¾" #: bookwyrm/templates/search/barcode_modal.html:37 msgctxt "followed by ISBN" @@ -4459,7 +4461,7 @@ msgstr "" #: bookwyrm/templates/search/book.html:117 msgid "Manually add book" -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠŗŠ½ŠøŠ³Ńƒ Š²Ń€ŃƒŃ‡Š½Ńƒ" #: bookwyrm/templates/search/book.html:122 msgid "Log in to import or add books." @@ -4507,7 +4509,7 @@ msgstr "" #: bookwyrm/templates/settings/federation/instance.html:93 #: bookwyrm/templates/snippets/status/status_options.html:25 msgid "Edit" -msgstr "" +msgstr "Š ŠµŠ“Š°Š³ŃƒŠ²Š°Ń‚Šø" #: bookwyrm/templates/settings/announcements/announcement.html:32 #: bookwyrm/templates/settings/announcements/announcements.html:3 @@ -4602,7 +4604,7 @@ msgstr "" #: bookwyrm/templates/settings/announcements/edit_announcement.html:98 msgid "Color:" -msgstr "" +msgstr "ŠšŠ¾Š»Ń–Ń€:" #: bookwyrm/templates/settings/automod/rules.html:7 #: bookwyrm/templates/settings/automod/rules.html:11 @@ -4632,7 +4634,7 @@ msgstr "" #: bookwyrm/templates/settings/automod/rules.html:47 msgid "Enabled:" -msgstr "" +msgstr "Š£Š²Ń–Š¼ŠŗŠ½ŠµŠ½Š¾:" #: bookwyrm/templates/settings/automod/rules.html:59 msgid "Delete schedule" @@ -4676,52 +4678,52 @@ msgstr "" #: bookwyrm/templates/settings/automod/rules.html:140 msgid "Add rule" -msgstr "" +msgstr "Š”Š¾Š“Š°Ń‚Šø ŠæрŠ°Š²ŠøŠ»Š¾" #: bookwyrm/templates/settings/automod/rules.html:147 msgid "Current Rules" -msgstr "" +msgstr "ŠŸŠ¾Ń‚Š¾Ń‡Š½Ń– ŠŸŃ€Š°Š²ŠøŠ»Š°" #: bookwyrm/templates/settings/automod/rules.html:151 msgid "Show rules" -msgstr "" +msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚Šø ŠæрŠ°Š²ŠøŠ»Š°" #: bookwyrm/templates/settings/automod/rules.html:188 msgid "Remove rule" -msgstr "" +msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø ŠæрŠ°Š²ŠøŠ»Š¾" #: bookwyrm/templates/settings/celery.html:6 #: bookwyrm/templates/settings/celery.html:8 msgid "Celery Status" -msgstr "" +msgstr "Š”тŠ°Š½ Celery" #: bookwyrm/templates/settings/celery.html:14 msgid "You can set up monitoring to check if Celery is running by querying:" -msgstr "" +msgstr "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Ń‚Šø Š¼Š¾Š½Ń–Ń‚Š¾Ń€ŠøŠ½Š³ стŠ°Š½Ńƒ Celery Š²ŠøŠŗŠ¾Ń€ŠøстŠ°Š² цŠµŠ¹ URL:" #: bookwyrm/templates/settings/celery.html:22 msgid "Queues" -msgstr "" +msgstr "Š§ŠµŃ€Š³Šø" #: bookwyrm/templates/settings/celery.html:26 msgid "Streams" -msgstr "" +msgstr "Š”тріŠ¼Šø" #: bookwyrm/templates/settings/celery.html:32 msgid "Broadcast" -msgstr "" +msgstr "ŠØŠøрŠ¾ŠŗŠ¾Š¼Š¾Š²Š»ŠµŠ½Š½Ń" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" -msgstr "" +msgstr "Š’Ń…Ń–Š“Š½Ń–" #: bookwyrm/templates/settings/celery.html:51 msgid "Import triggered" -msgstr "" +msgstr "Š Š¾Š·ŠæŠ¾Ń‡Š°Ń‚Ń– іŠ¼ŠæŠ¾Ń€Ń‚Šø" #: bookwyrm/templates/settings/celery.html:57 msgid "Connectors" -msgstr "" +msgstr "ŠšŠ¾Š½ŠµŠŗтŠ¾Ń€Šø" #: bookwyrm/templates/settings/celery.html:64 #: bookwyrm/templates/settings/site.html:91 @@ -4730,192 +4732,192 @@ msgstr "Š—Š¾Š±Ń€Š°Š¶ŠµŠ½Š½Ń" #: bookwyrm/templates/settings/celery.html:70 msgid "Suggested Users" -msgstr "" +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 "" +msgstr "ŠŸŠ¾ŃˆŃ‚Š°" #: bookwyrm/templates/settings/celery.html:89 msgid "Misc" -msgstr "" +msgstr "Š Ń–Š·Š½Šµ" #: bookwyrm/templates/settings/celery.html:96 msgid "Low priority" -msgstr "" +msgstr "ŠŠøŠ·ŃŒŠŗŠøŠ¹ ŠæріŠ¾Ń€ŠøтŠµŃ‚" #: bookwyrm/templates/settings/celery.html:102 msgid "Medium priority" -msgstr "" +msgstr "Š”ŠµŃ€ŠµŠ“Š½Ń–Š¹ ŠæріŠ¾Ń€ŠøтŠµŃ‚" #: bookwyrm/templates/settings/celery.html:108 msgid "High priority" -msgstr "" +msgstr "Š’ŠøсŠ¾ŠŗŠøŠ¹ ŠæріŠ¾Ń€ŠøтŠµŃ‚" #: bookwyrm/templates/settings/celery.html:118 msgid "Could not connect to Redis broker" -msgstr "" +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ ŠæіŠ“ŠŗŠ»ŃŽŃ‡ŠøтŠøся Š“Š¾ Redis" #: bookwyrm/templates/settings/celery.html:126 msgid "Active Tasks" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Ń– Š·Š°Š²Š“Š°Š½Š½Ń" #: bookwyrm/templates/settings/celery.html:131 #: bookwyrm/templates/settings/imports/imports.html:113 msgid "ID" -msgstr "" +msgstr "ID" #: bookwyrm/templates/settings/celery.html:132 msgid "Task name" -msgstr "" +msgstr "ŠŠ°Š·Š²Š° Š·Š°Š²Š“Š°Š½Š½Ń" #: bookwyrm/templates/settings/celery.html:133 msgid "Run time" -msgstr "" +msgstr "Š§Š°Ń Š²ŠøŠŗŠ¾Š½Š°Š½Š½Ń" #: bookwyrm/templates/settings/celery.html:134 msgid "Priority" -msgstr "" +msgstr "ŠŸŃ€Ń–Š¾Ń€ŠøтŠµŃ‚" #: bookwyrm/templates/settings/celery.html:139 msgid "No active tasks" -msgstr "" +msgstr "ŠŠµŠ¼Š°Ń” Š°ŠŗтŠøŠ²Š½Šøх Š·Š°Š²Š“Š°Š½ŃŒ" #: bookwyrm/templates/settings/celery.html:157 msgid "Workers" -msgstr "" +msgstr "Š’Š¾Ń€ŠŗŠµŃ€Šø" #: bookwyrm/templates/settings/celery.html:162 msgid "Uptime:" -msgstr "" +msgstr "ŠŸŃ€Š°Ń†ŃŽŃ” Š±ŠµŠ·ŠæŠµŃ€ŠµŠ±Ń–Š¹Š½Š¾:" #: bookwyrm/templates/settings/celery.html:172 msgid "Could not connect to Celery" -msgstr "" +msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ ŠæіŠ“ŠŗŠ»ŃŽŃ‡ŠøтŠøся Š“Š¾ Š”elery" #: bookwyrm/templates/settings/celery.html:178 #: bookwyrm/templates/settings/celery.html:201 msgid "Clear Queues" -msgstr "" +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 "" +msgstr "ŠžŃ‡ŠøщŠµŠ½Š½Ń чŠµŃ€Š³ Š¼Š¾Š¶Šµ сŠæрŠøчŠøŠ½ŠøтŠø сŠµŃ€Š¹Š¾Š·Š½Ń– ŠæрŠ¾Š±Š»ŠµŠ¼Šø, Š²ŠŗŠ»ŃŽŃ‡Š°ŃŽŃ‡Šø Š²Ń‚Ń€Š°Ń‚Ńƒ Š“Š°Š½Šøх! Š¦Ń Š¾Šæція Š“Š»Ń тŠøх, хтŠ¾ Š“іŠ¹ŃŠ½Š¾ Š·Š½Š°Ń” щŠ¾ рŠ¾Š±Šøть. ŠŸŠµŃ€Ńˆ Š½Ń–Š¶ Š¾Ń‡ŠøстŠøтŠø чŠµŃ€Š³Šø, Š²Šø Š¼ŃƒŃŠøтŠµ Š·ŃƒŠæŠøŠ½ŠøтŠø Celery." #: bookwyrm/templates/settings/celery.html:208 msgid "Errors" -msgstr "" +msgstr "ŠŸŠ¾Š¼ŠøŠ»ŠŗŠø" #: bookwyrm/templates/settings/dashboard/dashboard.html:6 #: bookwyrm/templates/settings/dashboard/dashboard.html:8 #: bookwyrm/templates/settings/layout.html:28 msgid "Dashboard" -msgstr "" +msgstr "ŠŸŠ°Š½ŠµŠ»ŃŒ ŠŗŠµŃ€ŃƒŠ²Š°Š½Š½Ń" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 #: bookwyrm/templates/settings/dashboard/dashboard.html:109 msgid "Total users" -msgstr "" +msgstr "Š’ŃŃŒŠ¾Š³Š¾ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š²" #: bookwyrm/templates/settings/dashboard/dashboard.html:21 #: bookwyrm/templates/settings/dashboard/user_chart.html:16 msgid "Active this month" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Šøх у цьŠ¾Š¼Ńƒ Š¼Ń–ŃŃŃ†Ń–" #: bookwyrm/templates/settings/dashboard/dashboard.html:27 msgid "Statuses" -msgstr "" +msgstr "Š”тŠ°Ń‚ŃƒŃŃ–Š²" #: bookwyrm/templates/settings/dashboard/dashboard.html:33 #: bookwyrm/templates/settings/dashboard/works_chart.html:11 msgid "Works" -msgstr "" +msgstr "Š¢Š²Š¾Ń€Ń–Š²" #: bookwyrm/templates/settings/dashboard/dashboard.html:74 msgid "Instance Activity" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ Š†Š½ŃŃ‚Š°Š½ŃŃƒ" #: bookwyrm/templates/settings/dashboard/dashboard.html:92 msgid "Interval:" -msgstr "" +msgstr "Š†Š½Ń‚ŠµŃ€Š²Š°Š»:" #: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Days" -msgstr "" +msgstr "Š”Š½Ń–" #: bookwyrm/templates/settings/dashboard/dashboard.html:97 msgid "Weeks" -msgstr "" +msgstr "Š¢ŠøŠ¶Š½Ń–" #: bookwyrm/templates/settings/dashboard/dashboard.html:115 msgid "User signup activity" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ ŠæŠ¾ рŠµŃ”стрŠ°Ń†Ń–ŃŃ…" #: bookwyrm/templates/settings/dashboard/dashboard.html:121 msgid "Status activity" -msgstr "" +msgstr "ŠŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ ŠæŠ¾ стŠ°Ń‚ŃƒŃŠ°Ń…" #: bookwyrm/templates/settings/dashboard/dashboard.html:127 msgid "Works created" -msgstr "" +msgstr "Š¢Š²Š¾Ń€Ń–Š² стŠ²Š¾Ń€ŠµŠ½Š¾" #: bookwyrm/templates/settings/dashboard/registration_chart.html:10 msgid "Registrations" -msgstr "" +msgstr "Š ŠµŃ”стрŠ°Ń†Ń–Ń—" #: bookwyrm/templates/settings/dashboard/status_chart.html:11 msgid "Statuses posted" -msgstr "" +msgstr "ŠžŠæуŠ±Š»Ń–ŠŗŠ¾Š²Š°Š½Ń– стŠ°Ń‚ŃƒŃŠø" #: bookwyrm/templates/settings/dashboard/user_chart.html:11 msgid "Total" -msgstr "" +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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +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 "" +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 "" +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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +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 "" +msgstr "Š’Š°ŃˆŠ¾Š¼Ńƒ іŠ½ŃŃ‚Š°Š½ŃŃƒ Š±Ń€Š°Šŗує ŠŗŠ¾Š“ŠµŠŗсу ŠæŠ¾Š²ŠµŠ“іŠ½ŠŗŠø." #: bookwyrm/templates/settings/dashboard/warnings/missing_privacy.html:8 msgid "Your instance is missing a privacy policy." -msgstr "" +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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +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 diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 1d1227f8092b70c68bb692fb532759090142aa83..566e3c144ec509cf8408d2092449d3af7e01e5db 100644 GIT binary patch literal 94539 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 ByKw*j literal 44096 zcmchg2b@*axwp49YV0MkL_I(dF*Li5SP(2IC<M7qS`ptP!bO!t_JPsaueiR)7yTX%TZ}>4d z7+wbNg2Ui)*blx1kAU4Sh@y|fvtbHe3x~ie_umXp#{EM$0=@}PgM%(K|FMvwMblwd zxDG*`>}(sPaDw4}eYZ82BaUkKuv1Tj4?QO?Vjm zZ}<^-;H4IRIF$Q1cc1L;PeMJ{3({TDx$sbUq5EG655|2xRQrF%-IdNfRQ%7u!{H40 zQMd@630Fdu?{#=2{1sF^-h_JY9jNE_z0AsS6jV7*gv$36sC-X{ihluAx>rE8|9Gf= zdlnuIzXVh8M^N$KhH8&}23S5vK&5{Q>;k(&r85XB-gu~XnhcfyY^d@tgi3!Y>;hka z$HN~%#s7ozZMZ+~_n^wX&*fIWqoB&u1M0bRpu&ej<$F8Sb7P^}uNJDE9)L>!L8y2$ zpxWy(sQ9a)+Vy#;`Lqpce0>WlUe|$9G#8!;mEKpN{J#Z{g0H)O8&vt;boYBu?Yi$E ztN-y(YUQ+Oi&zlZ9F1FkS050(C>pvrMJR5>n$nkSb*r8feqT}MKdy9O%1``v%G`!9le zZWUxoM@_H~ddLQb!W3ILGoCsC#zEJIWsk?80Do+|Jy|M1T4}KK)L+(EpD&1vJ z^?n&D-)&I!_y#-#{s&Zl7NFAmGt~OI?-0u;1y!#zpz3=*RQ&!>>0RR-4%KeA!K>j& zsQNqy)ebMZ`#a7bLe>AL@KD$WRo{1^(m!yh)%#fZQQW7w`z)w*H+TyC zF;qMJ87jTML&e|c26G<I+cqv)H-9xduwUZ-h$c+wc?c zS5WEv-FeWB){e(PmE%;XdUl6upR?gn@B(-=yauX1w?oyV3igIGp~|rtYMg!r>bd`b z>Zd=r`(5Wj!>zt2!W7}BL6!3=cm});s(w?U@_8C6ov%Q}`yN#L{T8a+ZBXs|CRF*~ zg{tTNBP`xgP|u$LRnBhkZrBUP~~_WO3pq5kAYu>YM0mD-3ImC`%v?6|C=q}Q=rOmK2$yWI|swFaNi7% zh0~$hVJTEORzda8I;e7Qhuz_;Q1RY&z6TY5|68m)he4J5RH*Xwgh#`E@RM*LRDXg! zRJ>0@wbPkU@vrsp&p_p0>F!#n_Gy4B-+T{W47=fe%EP|_`{MpNRKI)_rBCHN8LA%L zq57{6>;Z?tPr-YkZ-NY+=nkm(o1psV8&L6n0#&cyLDl20P|qE3 zm&wz^VQ<_Q!fW7Y=Zmlp?)Tv!*eh-G<{qf|KLvgQE`n@@qKzK@SEzP7e5B2<6QJ7X zRH$}44Qf2~fhxz@&i+vKyaFoT^-%S_1!_EwhKhebRDB+Tioe+XS3<>K>+bC^^gC3$ zd>^V@zjSviRQtT^+^^iyI}$3N6Jb}_&Hb;0k{83E>T@&f0dI$jKiN44YFsUZ>W42v z_3tLAa=hx{zkq7TKS9Z(eJZS;AA{?U%9hkP&bQ?ir9F7`+a)j+{5j=0PRA5BGGadA0v&J1^=7 zl}{Qf-SMzHoC=lx8mRH~52*edJjUeK?NH^O0o5N1oln6W?lln65~V6F`~j$XOoeKf z`B3>Tho{0hquQ40yra)^FwTBe*N!Pl#7yJ@beqHXd`uBu-?hbhVKFm|7^==uRspmGqL*Q%f z{w36S{|oE^56#;;dk#DYcLh{^7r~R@YIr#OD(nkigGztjI+H&qL56H}0o3?g3cJCt zLCJ|$cmETH`CM<~=St^oP;x8>KM5P*DR2W+`F;e?hJS}-9rYb&eA@Z(@z#$sq1y2` z@LqTkf3AQV;HB_y@OW4@!Swdw@HE^r;TiBnsQi8j)n5lN>5hdTg-5^?RDbk?2gCEB z+G&9MU+=uxdAqX$s=vm%JMX*?>iLOKa;B$~WWgEbNVY98@`1K$ZKa9^UGF)A=q`dEbX!;NhRMe(ML7&tRzX4|DgYp~`iq^hAHE0sz;h;=oG6FNZ;Ep^RQcvPpK`8;%744Nzw7Rwxx47@ zx1suTp9d}7RN zdqCB%kGpSoRyfBxb5P}(09D^9?my4{7rXlzcp~BJ-2Xey*P)(kcK2J(e>x9+$ol^T zsC;_4`$Fds_rDXKM0gdv7*2z#*EgWj|2L@Tf9`B`|97C`?Kj!l;}EELM?;OfQ=!(Q zv*3R4VyN|N0Mv8WK*hhod58Otgd*W?K8#7eH2ta zr$Wj1)1dOZ2x@#>?Ys?Yp4EEzea@*+^_b`G)$ZN^HSfL&4}{-$|9^){zYVJ0-i2CE z_n&Ix{1~Y4^PtK(5FQAJyZctC_PN`chX>$(0A3Csgo^)lsB!u|cNd(0fGY2wq4GI! zn(-KC3M#y}yDx((=TPToJ-iaCJsyC{Zwgd;vpxKAcdv0aIll>&-jCh=JLjA5Bly1u zLwij3azUk^f?Ah*z~1misCW$?-U!uR3!uue3abBJg4e=tLZyGq4C6^q@w!2+Fa6*x zZ~*KM7kT&&cogpML6zfI?q7gv@3-9l+?keMf2jHmcHRQ@Tn1`hUf2|0&cs|FygKnPur61eMPbQ1v<)>bdSv^YdJID9l6kX9HBekGlI=sB&$C z2g9#HJ^w0{T>F*teRwGDPs}#p2E$|vRAFAHJ zfy)1n&Uc{d`@ZwYhb^6MQ1Q=pUItbEp-}722q<}XxBE|qia*Q47eSSG9Xt}g0rmXb z&c8#&-}ez8Pf+zZ87kg|P~n%kdnh~%_Xw!+k97aLq2}8?@RM*d{5X6TD*jiX#>o$$ z()~Hq^S^Wc-u>Tl{uL_U=uvBz!=Ro^LHYN9O7|RhUk=so*Sq^psQ6Xz7?^kWRH%4! z+`ZJ@E8#KtzwG|scK!fr9eEud1OE>Dz$4~axh{dq=LV?yd>Tq$x(l8T?}IAu(@^7Y zJ=FYaf*QX+gGa-+pyC}c-*_}sJDv*l+#u(59{y>ld^7M`SOxpSO;F`%_3;04{spT1 z|8V!w3oM@#oToX@c3uX16MraFKKHx-gU&{%axH;9;3}y8coi!DUqH2UGt~2M!yDn> zq3U_vLi7JDlzSvpJ7l4rd(izKaV~?B%g;ll_nQ0v3@U!n{ojSk|9yBIJm4`a-$~Aa z&aqJWKI(kZxyIQ9mF_p8=GW^``AC}zT$ihD!t!9<<|xk|6LD{9yk9Zq4GHy-Uhov^~;0Kxlqq9 zg(}x`?%ocS{&!(N_!{g1_gjn(1V06}-qk^ki&x+kumF!&_!5&FgP`1Z!As!;sD9WC zRiE!e<@0N(au(hFCn){z9jNmC)p_6(=03)mf+}}!=Vk6c9G-~(T~O_EzjLyOH$t`Z z5~%!FL$%9V=T@kEzXO&2>+b%&^Dj{8?!VOPc{o&hXF#QQE>wN`L(Tg^?yiPPw;rAV zAB0MO2~@kR^YE|3V{yOc{w?t1xZj5#gU2nibb3Lx?}bqL-3U|gR@f8X50&3asB*ms zPllVJ@_QXB|35;-i=H&Oa2OnpvkSZs*27Q3bubGLT5kP*FI4`kp!|2hGhpARjJHCC zPloF6rBL%`ExZQ420sf=e%k6a0cyO>g(}aNov%874#(i%3U7iptgv{iog18AhN{=A zup9iX`ya5<+Tm!Z_BjD6-az-i8LD4zha=!<=T_%YtLR(&M?tmc5~%o3L#+dApq~2$ zyaArM+Tu@winke_3BL+ezjvVeVc%ygz2l+$PlbbEFQ|6E$N3#+w=Y`1JODLLHbSlE z--SKlFW`ajz-Ntz!Gm!h>+VzB-5sjjecgQrJRA2Ics*R={(pe#r+1uIRA;gpNH>&J-i%u5xyCBIqnwh`W=gV zF7A(F|10K3+z(-Xf*FnZJ!Udyo+9&Gf&J^4(bzx1bJt`4Jp3~}0CP3|HMsAV9qRWL z%*Syr$2^A7?``-|!Zq)2#y%hO5!?)=s0Di+tic?Q-&*)3{Pg?2A-Wj%7YG}MxfJ_f zF>|nM{@st+i1`P8cj4Fh_d5Px#1t^oJiI&heX&0eHKr=ue`u$NUv>99;yr`WPh&3r z^}tf${_-0|It)tx5cVHp`eLs2ynjX50PK?8>oK+1ze9NE z-{bD_TW6YhuVBBz-RJVm0Do>YVUl_A?>YSc3v&nlH^E*WPvJknF8Q!O>__-Z*gpl2 z#^`)M`76iqQT*P8kHdX1L$LQE?(Nv0#9W5G9>%|Wuw06H1Czr44$Nxo{|1-C1L2ME zP0TjTcQIS=`!^_grQaWM?=WlhBwUSKKeCE`ggF~?h#dS*!@TL?a$n>Avg>yVw z-(T?emzdAH-(2_~m{0TkT+A()_dM)$=PgcQ3E^7X^}7x;9rIoMj)L#OTgm${sNdHy zKX?0L?1M4)5&jv>$?ksxe)?U7yA?B(u$SOc{APy``*Q_;=U@(ZzXxC!%nah|_f^8~ z$6VxY^R>TI@jn6o8!&fxz+n6i#XSS+_f^bv+=pX+k9`dMIh;uNvDi<=#J~T*?*}+u zg9qS$gok|_zc1i-6TAn%=i$c^&+UV~D}MS-bpMyl8P3<<;#vJ>!;cewC-#5GeyaPQ zi~9lmx5M-Bn}9hBGZgbPjDA0Ys0HEoY2q$(`v&J$!cW6&#(gDbAaNeVy$~}Jd-C@d z4(Wm4C+xF?odNs6vpU7g5+{e>A7CT=1`HDs{19^&&z*t)neg9ne*&{sX=3ynl1Q)8 z{kq_HBc_7z17S5RQ)GT=%s+$8{(Qmha}s_@>t9IoUef3RkH$Z@}$tznnN@ zv7ZO^jfH-FFd4Uhg|H($uEPGTKZ)OZ!j8dw2fwL2a}_3wS&6%dX~2A&@NP2r50oGF zYcRdBUk&xU4^ATdbC^-s7vcAR;0VmGFh2{i?9T(ZKYvs(9-(f$@oMF!_ z>vj0g@;I;K9)kT*_y+6?=Xlr=*!3HM*@C$obApGhg4bbE_(_L;0u%pwV!47mHpL$B zMdHrH+<>_g^LPBt!1Tf1haLvma?43J2h)UmJG)4u{`_V=#9T z=Uccl*!RPH8S@9+kH8Z#7ht9k=W|fM6__01eewGm_7v1_0p^@wL*B!8i1TZ>4)bHo zSmKR`Pv9T__QU?=g!@GgIGDH#@UMy^!ZY#vmb)(`>>;QFh8cu82y+SM1%Li-_;JiIObyR9!ZnzWVE??Q+12?z{GQwMu$px4fpzXz;JI&N z|36T_v$1C}Y0L|lPZEC(jDOF>7Fdq|C77o?d?9|n!<^1D`t^7JyK&!+`xwlHn5Xf7 z4C;4?A-Wm%B;IRqIIP2*k9`E}k2wm{#B;yJT!49>u+L)h`1i(~g5NoC4Ak#*cpe-M z4}?qI{{rI7!kxn;e}5wU70e?ZPhp?K{+on5j(@RRP9!b;x)A4&@KW5Ba0#Y6_D{i& z`SXk5Cvod{Az=e?UxNJ|%rCG%3!lU2Hy-y*#5oeizasXnIIfKSU;}Y(h1Ywe({O(V z`}Od@;s@bi+|!8nDyA0qD9n}kJ%pKn{WeVL*ZuVJY<*2#Cf75c8kMc8%8t+EqFs6B zci~%EGaBDf*<5wHuBRfz)?TUZr`M)OXY!;PNLW?6W^}###df@_>+9;%Rf-sApPG=Z zcgHTn^Sg|2XGLYcwkkd0gA&?ByiN($q^mQeGA5m`=~0);XX;YvR4$XQpth;e*>n|U z%Td1xnKX^ohaz^aX>BG~o~fZlx_3{NXRB+gGIg0Q#LK1YNQ0#Fb!jzn2e+CpKPH{a zRNOf-n;okL5mVV3RX3N)kI7Vx%j_mreizZ|D(kAKM_Gz=>qokaOzQKQTzeH$HQ7?b zEAdXDs&}e?IyEMj8Fg`2RkdzR&wSTQC_Eu|hOt9Qv!lpGZBz0Ib?DzWeTf<buIg-E=FZBB z-A9SbL=4a9M(^XRsK?H}!*bctxlBGEovyl%tIUiq)zzFmcN>x?=<3QkN>!DmIqR~i z`r3*#V*>vhGmMbxOie|mB2_txD5ER$bs8A-JC(}TW@>syyX*k(QMGYu<-Z?Do2gVsE1QNUP2aBzitd;Qc=U$bjg$$7ZOsV5`{FkNt=*H z@aPi_KrYsds?@rnfnJ`i$VlF%MrJZKNL(_eCUs*nsZ4dcvMQCXsL<34a-U`hQ^;mY zCTC+aT^>fbQm(438EXw8(H%x^Z91PHpUqXI##dHVkx40w5ZWP+kU$-hGc}SKn;x01 z4{6|ClNq0Eu((N?DcM|Is9a4ZQ;|(S{Gct}Gf5D!>X*i8!==aKF%%l{JjD zn(|CEpu9X&Tj$7B1Pcvbl^K_*A{A?0sP1y)1IOvvy2^1G#e$V}6QThXBv4V28c<(1 zCY#F>g5z>VP07Nucn!+r%X5{rmL_fuEDI^mjzbMmoc0pp2xD84(_%43s%R6%V@!;k zknEm4&K7$jlq-lx*7VAnQCWFZS5iOywPtm%l1z>UR8^+)8P%z(N+vEewy`zY@io4f zDWsYqD}5(KQ+ZHvB(gfRd}&BlWYTIsNn!e!$3O6iT&8!&N3!Fo20f6Wq3)^AFj|xl zzR6W38bH#R6EI*RKaM5sX}EYGki(Y6T($<@?V_8yqcG2|&IPCC10LbfK8 zDo@vFnp$(%>}6(_>MT~T6ne?snes5%!%R%q*5yAYuAroqqbft(Fy{6ks^f>Gw7Di1&kGx_(EvIjohyqjPnVAk ze^i~yYEAQeyW3}uRZ&qDE7Ui3uyhBVvD6uHfQgLuv_elumsc_XFR#oY05rt0S7lWI z{bfcvQ#S==DRwdF>lut;a_LWpwg?_0qy~lvw@k=Yr^aOSjIgj$r_nvn$Fk>gw9wn7X>!d|BVV-A}K`B8F>B?@LG$3BC4|y%rQg8KI-)QCrIy z84~V{g;BXohE7e7L!zfgR%QC6K7*dGal=|rm#Z9E&%i~qw$|Z^JVV$EYU*cPpwS4) z`jLImI{H>;$+kBskIVFx_!v*tT`#$+vhM2okt$xFP(GSkq9rw=vO0qVw&q~9nULy! zx_3SikR;)+)N|Hf9J!jZXkc2qfKin-6}FbBI+x0~JW~}79K)t2lN#phOEj>GO+jhg znk$c2`51z-`HcOohz6=nSWgFLYbxr?>q>4~LT+*mN}&Rz9J)t+jif7HwImgnk|eZ{ z;vJY$O;dxBW+k61w1$>kVYMi^;^j#>+Vi_u5jA+~CLu;Vr9zp3;%z+zirx6W8&}g(U*@M+) zOmJjUVO5hq4IEZygn+rU+?mxyi<~rfEI0;bwEfJn6S^;ij7ry6)uk9T{K>Jzlusaw zjCQ4t)M?DR-W9p@sJhrEZgY#L%@qQ+JPd(+9LE~pWB8ArD|xrsCROk=9W-}cRRZ5LFrLu%jPCv%a^Bf z^dbz?2TL^)FxDXypu>%nYDihK<@FK^p*wIPC$FPLuDG|BLPl4x?+brYY}iL44&t3y zSM%*K85P+TH4nAnYYqt$vxQA@h#Y2Wu(2f$Q!O}b(gtfh1%o3o27=oLjjY<6+Q~t( zkRiJ`DAAti?_*0l3n~`ezQybsRw9#g;cvWSD2vQl%khOaG-$e4AP*`enqmuaLc8US z%#ADQcH3lVzuw8oY9-y&;wWwvV*SeWxXSV@tHqU>p!_rKN;ZVCDcSjiA8S{&iSsMj zG(=aDVbIFL1|ofLWp#Zuvh}`9S?bJwLoX+sQjf}2qEV1aWld#%jAQ3Mw%}CP-E396 z#t*7vq)S=+Pza?<#oI%25*hU)k+||#vr)xxO6W*kmXw~c=Z&%YX>m>RGUck{r_D#2 zi^o9AE7^KyYpN!=GZZjn7eA@yN{NzOrWZDr zbf!blSg+1jXCnP+S2+d`zx+Bnvn(>p*=FJIsE~R^Wrg$%7w9IgcG|!83Q?spRgSL7 z<}$XG2rGJ@XmIdyRCqO6YJ4X!xH{}b1_wPhGNghU8P?O-LwZsi%KWw?FAp4UdXc+E zN-;H!H};XVa61D$oO>cU-G@n#V-ZfcwHZei$5Njvgu*ct2iJt1O$JMORXq)BCoq)E z-TB%qQzpmeIFqZx*JfBM=shLZbwOB`oWnD9I)7Cn9=)P{14^;leNFC{JS22W!HPIe zvKLXC8ayaCr3AG%bkJ+aC9k=uXHlF{Lu>=D)yy=6OBEw5dkQmoC~=sKDIs@hbWL_l zO$sUBD|Jnpt=8~r^j|#Dx%8)9(Fm^Vvg3m{Qw+tOLC?YbHTBiC8d6&IMrP~k*o20| zoJ{CGh2&8Ov=Ji$r}#nsm5w*5U3ES+eoSTgn3M(SiOSGdeWD?LtY22LF{_895gY@; zxq#VKzcA?uLm#f;l!WFhiT7BuZ{KQkKRvCZi;~0-E^Dqz?(D{rVisfLVj?$$Caf6oM8OR=(iUBkaR3UZ3L#CU|m& zgeK?52w4dpl%cwGRdzI6C8CtGbq;_16aqV2N2!mx;~{7?^UcxThuUFhkJ*!VyMf5=N^^`$p=z%)NEdbtD;vzn{qD zOFr~I>e_@%T^D&t^U=*0nrtU$IGaF#Aii^4YIW@#%nDZ?2C?RBh$L~7jBSbvnT+y# zy$<(W_@g9K6vXd1)~=AhPZGjVc4^kqu}AO;Cm>eXJ}QncR-taCp{c6us_ckdHr3>3 z?Q8jI6eP|(!%7zGZYdp;hL#DLDQaFjIp0HtrQY|$=PmtHAV_t+ zHB8z|8L*RlY<{{XiIT^K%2z}AXqSqxwJk}#or5YubhcMWjntq_4g0%j*q8}<_P13j zlpgMHHA$mkRq678-E>tnEL&S&#eomWbUb1oro$xtiPcJTAO=TC-B*aIz@-(?R)ErS zms}9S=4M#f!EieqG|Kzf_Lik0JarLi=57>AErwyP*g8(S zu3~vCq$4d6ws+9fz}S+yDO_KwJ3I)Rb_wN%uvsW6A0ecJmo1y|z9L+rw?_(xa=Qt$ z4M-f9*?5C40_|^EbmQ>h*1R`rd&eKG_cvyG)1NgWS1!6w&;dD4Hg@`>W(a%R*fE;T z0BM={v%%#K(@ygqre(?$oEsB&wgl>sL2^|0S~~ONwu%)&Npi)ib!tpytrF1{k(XNUOUE%OUL`aC%g`i+B8j_NmZjrSF%IZ3nRK` z2p6wPH_a96@C+vhl)~41bC$`Qqo33jxm;G&P-@aBBr!sj$8gogDm1~hItES;cDSR$ zaSh_tgiYA6*&8Rl!m^F9U>_ap&UXG;Hzt>@A3a8w&uRljSE=ekUb0BG(H%h{t$^fA z8~C}Y0`Q0rBZ8w!udW1}c3x()&8MHLQZB!pV~U5lMTI$LK-fcCtUcGUmFy<8DcLR`rAT{>QT5t_ zxq4knzjMDC$TgftAj56d^>TzlDua+Lp4=bj)l@WdxKKdWU2%h96WcZBI%Sbf8;Z#E z^3s8-yE$@og&l@B5W~p;zVvQLBUp2GV5ci)0&=NX{SS@`zY7bFuv*I&4n|{(j*)6z zbqa%~vZfp<&aq-hPjM}ud~hSR^kg_+)A7cn-HZ~Vb*^LylH)!damGP5 zd(3H#E@2v4)FZ`ur^R8AmJa+&KIomSPCDT&dHJ~^Ba2N%$c!hoNA>{oV=hQshwyqe zVy*9?Zm!H%au8M)-NJi%nr9j>JFg`jLwCER#L=`$M7LzB&|5Mwm3W6S-X*$43!$d5 z$)cc#T#9eF0r5e0OC_s1lQ$ieY(ZTvi$22~*TZ4Wk+2AIQdzr}6112~7J7eeyeG3a zpU;+8vgB2i24k$7^a%;Z=N2aG#*g8(zmhCrf+?F0m1uv86S>~fi&Q0~TOCtUs^ab> zjduW|({!djVK=QhsR;OL*p}OC93c%=OxXvmu9QRAfPGLNlJ}+LxtT@)kJ0UsQi+pw zY0S$_gvky!xZ7suMgzlHlarcvqRT-d9GB6Vn~(j4rQ8mQwVGD)5t=~30% zyI5?^v0V6&6J%w%wwIvPeSPNq%_JG^=18LgVLE ze@^mUpAYL^Ui*Oh+R&{GgG63&9c;tII|$0pHYC-&XTXAqWx$#fj?~-U0VIcb;4p-c>GJ!?XwS(BN!wphpd`TZJJ$x1g{jz_)7BQ-; zxZbrSeQ{S#L^J7X-XyI{kGzxH1c|wRocIy#65iqp0@kW?I^T>%dbbIM&pJuME1m4z z-A{!*exC8+65Y$*|8R-!-3a(_X(mQNSb(I2w10LNwxITf8cK2pmjojnlI8xGYlrYq zh@fb8$rAa8Y!R2%h~3a66^>+w?0#VBsI4LjfA{KvvN*0j8QRrXXNf(2|Gq@hndL5z zQ2%8K#I`aMAzBKP+NtQRx(LEw)^(A1A&N> zZrh9VHfhIAq^WvAmkl~2icIq3PNl5*6)PsBB-L<_@pT}Vc)*Vxs7p9Mi>=4}>O+9ugDZN+o4r)OK4rrQilw?zW0r^l(vPv z2QkRXQfKu$>&)K$&hC9yzf`||W#^vvseb$p(Tga(N958qc`je{lKZv1aFFUhy1wGR z+U$LoRdHCO_sB0HqJ5p(djx{2EHzZ`m9t6Xz4BE5Aw!7RhgZ$oqm`xZ8*}Ht>kb(@ zc<2@FMLx4nze5JvYtX$%aHL%pu73J*z+YLzVL4xS(!LkpG~&wM7qrJy;dnW*_Z4iH zweu)TUBIVDhYYLYwc)DXdY6qoa!qY;<}W_;qLf)L?sw54QL-~|NbwiC5+$wc*0es;fM@%+x@6Y8?aAiN%RHmU zA8OCL6fdDX?K!?(Q>9vWJXU;hd2z|~*0tLUYagfRt}eGc{!rUvlUvtqX<59s_~g_# z8XlxDv7l3V3u|W;r_F6{n!+1GCvx|?dqgjgcr>RhS*`V_mww>Zw_Jz5#N!>F{_F`w>)*XurO{;eC5p7}G zB1+l1?xCL1n_H(9XH9S3G_!5$?Bas;g&9w_ZrfITVr6mh2AuTvn_H(VQeoSpg{=+6 zdE1!|g(j`iXTVMS87MpWQj$E%-C3LnAkZ{O_EacC+CbJriznZYF#za#&5C}cfU5<9PU*64$%vZO!0;e zBPeB}sMAw+Sl%uxb~-$#nM`y^Dzq$L+q!l|%aapL?zBGjT%qydwuXs?Y3ps|wNHxa z4b9tj(5d9t_Tbuy#pj4P)h+!M2g>_R%PLUqnUYxVCuzpJO*2g=f8-{Z- ziKwvt;nuaAkciDqb1aqS9m|Uo*YQt*PG_!ms$pEW;*6Drhi8NqZ(Gtpi#Kn1vGwVR zDv%X|Vzq2r+qz?^%JIsJR-ODR~ObUZQedJQmGmjMijzrt!sC*EnM5uw7M|uxw5FRX>OtM zm8dX-^=3(o;)X4)uS|*zWg_8G@fGl-gV?OaEqaJbSjU$|Eo+yz z%$-tr__1~yt=+t3V;mIGNURssb9w{A#1U6F_^ErBd4GC%apSZwu7cPuu32HVqX#V& z@B7l2owx)ab-&5^4}8Fvnz`%zvBKnu4D8l*uM}T+ucNe)``uV9*^s7%QxCu+oWxU#&ykGRu<+ytb&G4 zK^k}H`kiCjVrT94Mgu8tX?yCi*0o<`9u}u>E=-*g6`JNzoz@*wi(6I{7BSk~d-l{q zQ)6Vq&4I$zx^4=?wk+DsX^s{oeNiT?BuKy69&8Av6EN_{$wm5Bp zwJIWv5u{1eu^AR_Y+JaYrD+Gcoa^v3TI<6LsQ?k9)@{!tpdGgAdRJ(QZ%1F$niSTK z<}FXN#Jst6SyX6Tz>JQh(#_j!LO&{Qn%uT%MPj%HcX95LmJLry2DdF-6S~uEt;=UM zZ)#$gqd7)N2jed2O%BA)itUA2O;PcY^@S;mynwcR`YLMG^_9y)Y=Q9b4h}0UsfGpE z>SYmZSuKTxx>A^l^IBfo((>G*mIpVt%f`Z#$%VC>SwDloE=*fo*wTbx6k@Rv9I@=N z5T7E!L7~wG;%9ux`G9EN3vBC}np$6esK`H1-bwbyOY}~vk(X`r#+Ee;3NOt6kk3WM zHBYltTOy_y_-e;eYlABCgo(x;Fe=VpU!1+RxL|5nIo!n_plL3nDl9?qM7K4#!_pQ9 zndpdv)@*5RS{?@#=4?U47IsW3%vun&Z9#CZU=)*I+v9UvR!>BJOnZ{i=qPO7Xe&hP z%dfP~o*w(gt*)4D4Ue;Cc}S^q6k_RmNb8P8%}t9tEXS79&H;tF3&T_i1z};Zy_4;N zI+TEkSbTIg4T{cIT=-=1rTM6B#Ya}O&6ASHCc_p2wuwkF?R(=mg(~ zO`JX>v})tSEpygKZ4;j^&VM>y+8^8AvZ9F+wya)HA1|0%T>f-aT)#;IWW@{YNTZgm z3tG36RKTv*UJvpaWbu4WN;;@YNW$j5JM7dUPQeu;i`HSj#7}DSc``ePcj(_zW_qNf zzMw^*F!v$bTt+2f?jOF!lQC2^`6(=FhBa~WX_rzRWs$okHWpTHi(0lkT71G6$PNxI z)l;Pz8W{Xx&rP$pZeU28BZ#Wli&ZrQ5_RsX_Ag^wUwH;e7d1CMg4lBf)cjlsqx7;X zQ|~gbTQ^Q7L$)i$B@KlYtM%XdM*kSLux<;BM`7+P72HmK9J}mzi$TzCv=>^;AGfY? z2WJMXZDCajhf8tbv?tUhA&?q|12;#f_j4@FRg@6}QfL(BMXl&t#&OUxI{NuToZvNY zncVJh8ELsC9h~qXxg(UU)`uRCSB@QsEN%5{J(8d(KDo896}79-I5YG%y3n+_CT!zn zWcuvF_J&yN565h=xGTLMW8ce>A5xg!K|Y7=te>6eSi|KKQOKt7aKoEhXGJ8_x{z&2 ztZGUd<;c!p4Ji#`ci+brRy|l;x`Y({XwdZTusMzEH%s}Mn!ICM%lwtdORb(^Ya!WH z2)>~!gN@d=T9@?4?I@*eFii~&FwHMkLxY#g1dHaURpy9Qo4tC{#v^@Uv9~r9R->VE z_Ni6SGTO8z6q}h8+)*LyS)!Jvm(Y_b23m}!9*)BF)ol%pt!q|=?L<(WU0JayW-^l@ zt=%d6dG^lkh$XoPty@)`#Idm{-$Bs2W2f(3J2ah-p5HYri5KhNH9V1$W=i419-PKD zIqPGC&e=J*@Tg7~l7}Jj3b*yi=1tRkaV9sXuz0ao+L6!?o|{>i{gSmvL^Beimuz+P z8d@o8edQ%|(blOiS%(&y=C@6HhW%e#!*tY5qIde_l`|Rdo*>FJV3u!Y8Bn*_X}Fd^ zor*J!kx+Bzpena)ZE}Z;^`<7a4NX&8S3k|lTv+k=&MGMH%g9Wut zI6jeZS1FR|?k+Bi+5ANumNHzLx4go)rky{1Ei714d>#clAXa~$f1dX6k6%-0&$?oZ zKXFZ!)cZYr6&u+p5qgM@5ZabENpUcTDRPYc5X7d5@ff?@Q`xnv3y8rvE!!UEOe(q5 z(5zeL6ee#htesStHl^hSos@78tVL|;68hkItu$)8CF_0DWCt${N{;v2=1q)R7HyHv zVbK0MOf>Cx5+^KbXT_M>6vt-~Vk2Bwyqygo<#r;tJ*mUMaG~IWq;v&jr(n9jF}bf5pS_~pRwTWW zU%g6a>JX*nd3NX1Qb9cN4yZn)m3%U}-#K!8L>8`~w4{XPmRO}$j?21Vaq`{?&k?FI&0F1?s2Oo-&OsR9*#)ERnv(_Cf;vH{=^jWPba7@2vwYL4RAb+HFV665B%A5&O2d+8c0OB^JYT(q4M{wTADt8QnTe5I zEU9!-pq^b=Xna~Ha?^F=ghY@gk^FX6|3pO69loU{b3au~z_ed?js)zgBInm$|VE8ErL zydA7v9UN*WDU7rX;*{qtrrlj@M@%y^l-pMTbi8oGncS>P@slTsaU{I8fpvWj!#&ns zIJTTVjiyO_4~v?;Qw$A?j*)cWIel7~@xfNwuml%7E;0<)c@94D2wf|!5v?KguB|v&K!`r9O}{E zg*6M+I4^NhMx$y*7MIK}%vi2dYjZnjHa{*xIVd?&9!H1AD`rQr1PQ>CwE_n6i$;#(%+lwU<@-th#x7l(iA+OlPJ z%a%2fA37W2VI2;lE`ubEYc9=D zpHFS`7PYQh7r6v8*s4rv{S6Mz7`T;X+LJI>ylMdCbT}_yv(I5DIuV+6P@kSDY~Dbq zNjT+Ck_;CY6Xrld&fxINSmhUIuLsIiFaw0$rl**%e$^=t9LIIltNJsm5qptUi2cepFn> z3rCBaH!W#hxdU-ah# z+usl>u6mHU!1zeswlS~&Cts|lG!N#jE6$qOQ8Gm4X_AI$~6Gz7;xZBu8JwsDkz7tyToh*Vhr1Y%!@mRshSXk->45Q$*J zs4#bRDItFu(2^+a2Q7)P|JTcoCZDVc+LN#w6KxSVu0^PZY3)aZo7NU)=q4Q14dpTn zk+{JqKLI?@eo~|N4CDXh#hzcgv4bs@XPeX{jhXP)1{$7DysV(508YF-Yn!~jF?(!X z%NLt?6rudQX#mMLZ8*T{I6Ac9Ep6&`jIm;NaoI{wm`0UkjgyqG#7=nOCq5wv6N=+u zpI5x(qzksk*0Jp97S^VXJN!1+L;OtDqWL+JIl^IOycj;RLYi0DN&AxM&)Zpc($VSs zT!X7|p*9h+nRaYzg6q-dV8k*lY^`7pHE(^=_VI|1P*V~pOw$`CVMXwlYs}F>IX5rv zwR8?@4jn9M*$z+YmcL|U|7OY!MdLUgY11ASXXQSzQ~!?K2YlyhvzFTMg3FSbTK^~U zW=3$>k{CK)pSz|Q9vwnr@nlcNr`)j;V!q*QHwdft6MaiPc(#A^no9U4zk5ykCq8|R zy^Ak5vTuqHBto9nU>(|-S=g#e)Z`0wyIhDmMcBh~l#Cg1pxL^Ev!wt8HA1c9oRO^3 z^k4Ffty0Zf8k#pxvo{aIt2XhmkKUGU*|MRqtf^(u_LkM$E+!nYKqe&y0Lwt>sU!Y+0-q;v`?%Kb2)BCO3qdr7E3WXK(_tRV%d(<&O18>C`!K zFxdG?mz!*A*~4$~ckp&4*pl62N?*7^M0sj!Xh5^stArC5l(E1}rfUmFoUW-|I&I|* zkH*JL<|em|YJyH{h@@y(C}=*5YIE63XRD7NUWFIJJiz7v`;8CWsPKRvA#r~6#8b*A zY>Bkm2gOyJ->?Z{>GPB0uv(aE>G_#Pl6+swJBgK*!>UjPAA+T*=y$dX_={URN3}t! z3;GwAOHJP~RcYw;u&obq)n=Nf4V;ChWbW$dEFSuZ)$rolZsK%m1$)^tOr`J=N>HS| zwoTY#dp48F42*GRAo=QtTczK&h7|RW5u;y zLnpm19@p$&*x|%u*>*jWYI;|1;jT~jtzW&(O65srWQj88EWPGU^DIf?>~*RgD#kXJ zH^en0l%JjTm?JrR!jM_Fc~=6M$4D^jhV3%L9DZ1XK=Z2Z>6=+pA>}|iXd-r|hh55z zUHaU?(skaXe#nH|dzg*tntx%!?H!%^kR@*K?464=S(lHjAIWdTTEfM) ze9)iu21=)oU*$*L7-BocBt-YAex8Xo$k|$P-8`MmapLAj=$e7nOxX5rpwV4i%O}9;dr|95he{0{yB~CKR+!gmwr4c S0TOg?KN0&d0;IH0jQ%f4%`RX7 diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo index f9ca27be9b891b3b13c30e68d084e0cd54184a43..c2dabfbf0ffb731a3a105637765bc897dd541ca0 100644 GIT binary patch literal 38029 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�qC|0Iv&yqu6@Yo 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 e2&tN2w#Q2L2Q@c#j@9$7d5 literal 38839 zcmchg34D~*x&L4Hiu+oZssoCE5hUF_oRYHRJjnwd;md#&19+uPRv_jk_oP9^~q@9pP5A5XsLIp@4*KhJs2 zd1vs~Cm+5j;B&{JLGUT~+Q~uC?XV!2-C3bQ(5rV4Tm&zHr@?z*2bh9q!!NU*kAuD7QLwMY4>Wm*$+ww&57cwz zkYNa_;IZ(23x5b6jXWKyUl*9X(zpRC{R{AT_*Hled=*{-e+5;)6H0^NM0h$>JGwwU zR|551DO5cMLDl0{sB&+ID);kH>8qjg{Ss7vZ?^E?L$&)YsQmr~mCvz#{P>*+mA*Gr zx)@adq@l`r5UQS2;mL3|)VME)O7|7xEAVjSSK(>!b*Os13D1CkhpO+%SNU=}L8b2n z)i0MpwZ9)!zBfSCXBbqyKL?e*5~{!MhnoMB;azYJRJvw3AHD~b-}I}4;3UOE$;+YY zwc6xuQ0?0RRlmJZ<$fP3-LIgY`vX+EKSQPa8&o}x>g(%!2Glr3p!%&FRDCYB`2JA! zxXE}ARDUKceiBqUGoZ?u2Q{DTq3W|9s-Jd1)$3)b{9d*2H!S=usOSC(8S3D~Yl5H$ zycwPcCqnh_6Hw1T4b_j&L*={I^SLg|B1Q1f9TJR3d+RsLqE^bJt;`zBO>d>^X6e+;jHS*ZR!x1VQMsPw&|(v?D$ zca!l>3m*+Nf5t)0&j+FEy8x;^&p?&G87luq<2Q^yu=t-t)wkK?cc9Asz`{@Hk1j(# z3#z`CLA4_R)qfeNc{2rSzAS_)?8&J=;Kt2BsbmMM3 zae!~{1@JuLyFs;Y5Y+s-9Y)~ipvrj&D!(~U^{a>Kr?pV&cSE)FWvG68&EynkL4zBfa-_c@J#q! zsPdbQf42C)L$&+pfj+v|j{2Lw)Pr1S8a|TqsE`)l%C;TkD1}gt2q56F_RQt9-rE7#k;dh|s&DnIK>d^

    X;zjxq~@Za!Uc*G#z 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 K+Af^UV*h`HluhUW From 09b2dea9955010bd7ad7e9c1ae1c35e4cf74770e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dato=20Sim=C3=B3?= Date: Mon, 1 Jan 2024 09:01:21 -0300 Subject: [PATCH 232/458] dev-tools: ensure we install Node from upstream Fixes: #3173 ("`bw-dev build` fails") --- dev-tools/Dockerfile | 1 + dev-tools/nodejs.pref | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 dev-tools/nodejs.pref diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index f6a7bb793..3b7740a78 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -6,6 +6,7 @@ ENV PYTHONUNBUFFERED=1 ENV NPM_CONFIG_UPDATE_NOTIFIER=false ENV PIP_ROOT_USER_ACTION=ignore PIP_DISABLE_PIP_VERSION_CHECK=1 +COPY nodejs.pref /etc/apt/preferences.d/ COPY nodejs.sources /etc/apt/sources.list.d/ COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/dev-tools/ diff --git a/dev-tools/nodejs.pref b/dev-tools/nodejs.pref new file mode 100644 index 000000000..69e01c2c5 --- /dev/null +++ b/dev-tools/nodejs.pref @@ -0,0 +1,4 @@ +Package: nodejs +Pin: origin deb.nodesource.com +Pin-Priority: 995 +Explanation: prefer upstream packaging over Debian's From 0e3936cb613430f128a2fdc9109f515bddf43118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 1 Jan 2024 18:16:28 +0100 Subject: [PATCH 233/458] naturalday_partial: do naturalize date and datetime objects --- bookwyrm/templatetags/date_ext.py | 2 +- bookwyrm/tests/templatetags/test_date_ext.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templatetags/date_ext.py b/bookwyrm/templatetags/date_ext.py index 6dc320bed..ae2690321 100644 --- a/bookwyrm/templatetags/date_ext.py +++ b/bookwyrm/templatetags/date_ext.py @@ -17,7 +17,7 @@ def naturalday_partial(date, arg=None): """ django_formats = ("DATE_FORMAT", "SHORT_DATE_FORMAT", "YEAR_MONTH_FORMAT") if not isinstance(date, PartialDate): - return defaultfilters.date(date, arg) + return naturalday(date, arg) if arg is None: arg = "DATE_FORMAT" if date.has_day: diff --git a/bookwyrm/tests/templatetags/test_date_ext.py b/bookwyrm/tests/templatetags/test_date_ext.py index f7ea73891..ebeb82907 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,14 @@ class PartialDateTags(TestCase): 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)) From 0d908b594cd858b74b32541e23a090fa7f321617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 1 Jan 2024 18:23:51 +0100 Subject: [PATCH 234/458] naturalday_partial: do not naturalize dates with missing parts --- bookwyrm/templatetags/date_ext.py | 4 +++- bookwyrm/tests/templatetags/test_date_ext.py | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templatetags/date_ext.py b/bookwyrm/templatetags/date_ext.py index ae2690321..bdad92f4c 100644 --- a/bookwyrm/templatetags/date_ext.py +++ b/bookwyrm/templatetags/date_ext.py @@ -27,4 +27,6 @@ def naturalday_partial(date, arg=None): fmt = "YEAR_MONTH_FORMAT" if arg == "DATE_FORMAT" else arg else: fmt = "Y" if arg in django_formats else arg - return naturalday(date, fmt) + if date.has_day: + return naturalday(date, fmt) + return defaultfilters.date(date, fmt) diff --git a/bookwyrm/tests/templatetags/test_date_ext.py b/bookwyrm/tests/templatetags/test_date_ext.py index ebeb82907..bd31a95c9 100644 --- a/bookwyrm/tests/templatetags/test_date_ext.py +++ b/bookwyrm/tests/templatetags/test_date_ext.py @@ -77,3 +77,9 @@ class PartialDateTags(TestCase): 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")) From 4711b3bc1931e38fae814738b2ac72ef6970ab35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 1 Jan 2024 18:29:00 +0100 Subject: [PATCH 235/458] naturalday_partial: simplify/refactor --- bookwyrm/templatetags/date_ext.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/bookwyrm/templatetags/date_ext.py b/bookwyrm/templatetags/date_ext.py index bdad92f4c..efe55f2d9 100644 --- a/bookwyrm/templatetags/date_ext.py +++ b/bookwyrm/templatetags/date_ext.py @@ -15,18 +15,10 @@ def naturalday_partial(date, arg=None): If arg is a Django-defined format such as "DATE_FORMAT", it will be adjusted so that the precision of the PartialDate object is honored. """ - django_formats = ("DATE_FORMAT", "SHORT_DATE_FORMAT", "YEAR_MONTH_FORMAT") - if not isinstance(date, PartialDate): + if not isinstance(date, PartialDate) or date.has_day: return naturalday(date, arg) - if arg is None: - arg = "DATE_FORMAT" - if date.has_day: - fmt = arg - elif date.has_month: - # there is no SHORT_YEAR_MONTH_FORMAT, so we ignore SHORT_DATE_FORMAT :( - fmt = "YEAR_MONTH_FORMAT" if arg == "DATE_FORMAT" else arg - else: - fmt = "Y" if arg in django_formats else arg - if date.has_day: - return naturalday(date, fmt) - return defaultfilters.date(date, fmt) + if not arg or arg == "DATE_FORMAT": + arg = "YEAR_MONTH_FORMAT" if date.has_month else "Y" + elif not date.has_month and arg in ("SHORT_DATE_FORMAT", "YEAR_MONTH_FORMAT"): + arg = "Y" + return defaultfilters.date(date, arg) From 86d79f537ad7fa56ced93862b4a7b0afc8e5de41 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 1 Jan 2024 19:29:24 -0800 Subject: [PATCH 236/458] Adds merge migration --- bookwyrm/migrations/0191_merge_20240102_0326.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 bookwyrm/migrations/0191_merge_20240102_0326.py diff --git a/bookwyrm/migrations/0191_merge_20240102_0326.py b/bookwyrm/migrations/0191_merge_20240102_0326.py new file mode 100644 index 000000000..5f1fd88d2 --- /dev/null +++ b/bookwyrm/migrations/0191_merge_20240102_0326.py @@ -0,0 +1,14 @@ +# 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 = [ + ] From f72ada4780d203a4cbe2469e0bedb4fb3d7b0fd9 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 1 Jan 2024 19:29:43 -0800 Subject: [PATCH 237/458] Updates javascript cache buster just in case --- bookwyrm/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index b3c918703..fcc91857a 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -31,7 +31,7 @@ RELEASE_API = env( PAGE_LENGTH = env.int("PAGE_LENGTH", 15) DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") -JS_CACHE = "ac315a3b" +JS_CACHE = "8a89cad7" # email EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend") From e2249f25154af85d190be23cde2401d77327b7ad Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 1 Jan 2024 19:30:03 -0800 Subject: [PATCH 238/458] Updates locales --- locale/ca_ES/LC_MESSAGES/django.mo | Bin 150169 -> 149032 bytes locale/ca_ES/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/de_DE/LC_MESSAGES/django.mo | Bin 151036 -> 149930 bytes locale/de_DE/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/en_US/LC_MESSAGES/django.po | 415 +++++++++++++++++++++------ locale/eo_UY/LC_MESSAGES/django.mo | Bin 145168 -> 144089 bytes locale/eo_UY/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/es_ES/LC_MESSAGES/django.mo | Bin 149896 -> 148786 bytes locale/es_ES/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/eu_ES/LC_MESSAGES/django.mo | Bin 151115 -> 150037 bytes locale/eu_ES/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/fi_FI/LC_MESSAGES/django.mo | Bin 143879 -> 143133 bytes locale/fi_FI/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/fr_FR/LC_MESSAGES/django.mo | Bin 154174 -> 153012 bytes locale/fr_FR/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/gl_ES/LC_MESSAGES/django.mo | Bin 146416 -> 145356 bytes locale/gl_ES/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/it_IT/LC_MESSAGES/django.mo | Bin 146772 -> 145641 bytes locale/it_IT/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/lt_LT/LC_MESSAGES/django.mo | Bin 145743 -> 145033 bytes locale/lt_LT/LC_MESSAGES/django.po | 407 +++++++++++++++----------- locale/nl_NL/LC_MESSAGES/django.mo | Bin 148744 -> 147633 bytes locale/nl_NL/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/no_NO/LC_MESSAGES/django.mo | Bin 96773 -> 96055 bytes locale/no_NO/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/pl_PL/LC_MESSAGES/django.mo | Bin 130667 -> 130388 bytes locale/pl_PL/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/pt_BR/LC_MESSAGES/django.mo | Bin 92338 -> 92307 bytes locale/pt_BR/LC_MESSAGES/django.po | 401 +++++++++++++++----------- locale/pt_PT/LC_MESSAGES/django.mo | Bin 139503 -> 138784 bytes locale/pt_PT/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/ro_RO/LC_MESSAGES/django.mo | Bin 124127 -> 123365 bytes locale/ro_RO/LC_MESSAGES/django.po | 406 +++++++++++++++----------- locale/sv_SE/LC_MESSAGES/django.mo | Bin 138546 -> 137804 bytes locale/sv_SE/LC_MESSAGES/django.po | 405 +++++++++++++++----------- locale/uk_UA/LC_MESSAGES/django.mo | Bin 169840 -> 168423 bytes locale/uk_UA/LC_MESSAGES/django.po | 407 +++++++++++++++----------- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 94539 -> 94511 bytes locale/zh_Hans/LC_MESSAGES/django.po | 400 +++++++++++++++----------- locale/zh_Hant/LC_MESSAGES/django.mo | Bin 38029 -> 38001 bytes locale/zh_Hant/LC_MESSAGES/django.po | 400 +++++++++++++++----------- 41 files changed, 4953 insertions(+), 3553 deletions(-) diff --git a/locale/ca_ES/LC_MESSAGES/django.mo b/locale/ca_ES/LC_MESSAGES/django.mo index c98411bd01bbc131161205cd091df5cc089ad268..ff27fe43358cc89955063433521227cd82b93e5d 100644 GIT binary patch delta 30917 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 diff --git a/locale/ca_ES/LC_MESSAGES/django.po b/locale/ca_ES/LC_MESSAGES/django.po index 4d59cdbfc..f73aa49bf 100644 --- a/locale/ca_ES/LC_MESSAGES/django.po +++ b/locale/ca_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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-12-30 22:25\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:11\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Catalan\n" "Language: ca\n" @@ -102,8 +102,8 @@ msgstr "Ordre del llistat" msgid "Book Title" msgstr "TĆ­tol del llibre" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "ValoraciĆ³" @@ -141,7 +141,7 @@ msgstr "AdvertĆØncia" msgid "Danger" msgstr "Alerta" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "Informe generat automĆ ticament" @@ -205,26 +205,26 @@ msgstr "Federat" msgid "Blocked" msgstr "Blocat" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s no Ć©s una remote_id vĆ lida" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s no Ć©s un nom d'usuari vĆ lid" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nom d'usuari" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Ja existeix un usuari amb aquest nom." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Ja existeix un usuari amb aquest nom." msgid "Public" msgstr "PĆŗblic" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblic" msgid "Unlisted" msgstr "No llistat" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "No llistat" msgid "Followers" msgstr "Seguidors" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Privat" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Actiu" @@ -352,122 +351,143 @@ msgstr "Domini aprovat" msgid "Deleted item" msgstr "Element suprimit" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Ressenya" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Comentaris" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Citacions" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Tota la resta" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "LĆ­nia de temps Inici" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Inici" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Cronologia dels llibres" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Llibres" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (AnglĆØs)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ " -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch (Alemany)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (espanyol)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskera (Basc)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (gallec)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (italiĆ )" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (finĆØs)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (francĆØs)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (LituĆ )" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "PaĆÆsos Baixos (HolandĆØs)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (noruec)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (polonĆØs)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (portuguĆØs del Brasil)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆØs europeu)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (romanĆØs)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (suec)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (xinĆØs simplificat)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (xinĆØs tradicional)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "PermĆ­s denegat" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,13 +1076,13 @@ msgstr "Llocs" #: 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 "Llistes" @@ -1324,7 +1358,7 @@ msgid "Add Another Author" msgstr "Afegiu un altre autor" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Coberta" @@ -1451,8 +1485,9 @@ msgstr "Domini" #: 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 "Estat" @@ -1461,7 +1496,7 @@ msgstr "Estat" #: 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 "Accions" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Perdona'ns! No hem pogut trobar aquest codi." #: 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 "Codi de confirmaciĆ³:" @@ -1752,7 +1787,7 @@ msgstr "%(username)s ha citat %(username)s" msgstr "Missatges Directes amb %(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 "Missatges directes" @@ -1945,7 +1980,7 @@ msgstr "Actualitzacions" #: 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 "Els teus llibres" @@ -1993,19 +2028,19 @@ msgid "Add to your books" msgstr "Afegir als vostres llibres" #: 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 "Pendent de llegir" #: 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 "Lectures actuals" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Llegits" #: 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 "Deixat de llegir" @@ -2511,8 +2546,8 @@ msgid "Barcode reader" msgstr "Lector de codi de 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 "Utilitzeu els enllaƧos Activitat, Llistes i Descobriu per descobrir les Ćŗltimes novetats de les vostres activitats, llistes de llibres per temes, i els Ćŗltims esdeveniments d'aquest servidor 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" @@ -2543,8 +2578,8 @@ msgid "Notifications" msgstr "Notificacions" #: 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 "Es pot accedir all vostre perfil, llibres, missatges directes i configuraciĆ³ clicant a sobre del vostre nom en aquest 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." @@ -2699,8 +2734,7 @@ msgstr "Podeu crear o unir-vos a un grup amb altres usuĆ ries. Els grups poden 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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grups" @@ -2754,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal, msgstr "Aquesta pestanya mostra tot el que heu llegit de cara al vostre objectiu de lectura anual, o us permet establir-ne un si no en teniu." #: 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 "Objectiu de lectura" @@ -2793,7 +2827,7 @@ msgstr "Cap activitat per a aquesta etiqueta!" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importa Llibres" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Fila" #: 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 "TĆ­tol" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Clau d'OpenLibrary" #: 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 "Autor/a" @@ -3085,10 +3119,6 @@ msgstr "Contacteu amb l'administrador o Has mogut el teu compte a %(us msgid "You can undo the move to restore full functionality, but some followers may have already unfollowed this account." msgstr "Pots desfer el trasllat per restaurar totes les funcionalitats, perĆ² alguns seguidors potser ja han deixat de seguir aquest compte." -#: bookwyrm/templates/moved.html:42 bookwyrm/templates/shelf/shelf.html:32 +#: bookwyrm/templates/moved.html:42 msgid "Undo move" msgstr "DesfĆ©s el trasllat" -#: 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 "Desconnecta" @@ -3716,6 +3743,13 @@ msgstr "S'ha completat el vostre import." msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" msgstr "%(related_user)s us ha convidat a unir-vos al grup \"%(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\"" @@ -4148,7 +4182,7 @@ msgstr "Edita el perfil" #: 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 "Perfil" @@ -5000,19 +5034,19 @@ msgstr "InstĆ ncia:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Status:" msgstr "Estat:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:107 msgid "Software:" msgstr "Programari:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "VersiĆ³:" @@ -5025,7 +5059,7 @@ msgid "Details" msgstr "Detalls" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "Activitat" @@ -5039,7 +5073,7 @@ msgid "View all" msgstr "Mostra tots" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "Informes:" @@ -5056,7 +5090,7 @@ msgid "Blocked by us:" msgstr "Bloquejat per nosaltres:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "Notes" @@ -5213,7 +5247,7 @@ msgstr "Peticions d'invitaciĆ³" #: 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 "Invitacions" @@ -5687,57 +5721,73 @@ msgid "Set instance default theme" msgstr "Estableix el tema per defecte de la instĆ ncia" #: 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 afegit correctament" -#: bookwyrm/templates/settings/themes.html:26 +#: bookwyrm/templates/settings/themes.html:35 msgid "How to add a theme" msgstr "Com afegir un tema" -#: 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 "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" @@ -5776,106 +5826,108 @@ msgstr "Actiu per Ćŗltima vegada" msgid "Remote instance" msgstr "InstĆ ncia remota" -#: bookwyrm/templates/settings/users/user_admin.html:82 -#: bookwyrm/templates/settings/users/user_info.html:29 -msgid "Moved" -msgstr "Mogut" - -#: bookwyrm/templates/settings/users/user_admin.html:93 -msgid "Deleted" -msgstr "Eliminat" - -#: bookwyrm/templates/settings/users/user_admin.html:99 -#: bookwyrm/templates/settings/users/user_info.html:38 -msgid "Inactive" -msgstr "Inactiu" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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" -#: bookwyrm/templates/settings/users/user_info.html:46 +#: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:48 +#: bookwyrm/templates/settings/users/user_info.html:42 msgid "Remote" msgstr "Remot" -#: bookwyrm/templates/settings/users/user_info.html:57 +#: bookwyrm/templates/settings/users/user_info.html:51 msgid "User details" msgstr "Detalls de l'usuari" -#: bookwyrm/templates/settings/users/user_info.html:61 +#: bookwyrm/templates/settings/users/user_info.html:55 msgid "Email:" msgstr "Correu electrĆ²nic:" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:65 msgid "(View reports)" msgstr "(Mostra informes)" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "Blocked by count:" msgstr "Bloquejat pel compte:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:74 msgid "Date added:" msgstr "Data en quĆØ es va afegir:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Last active date:" msgstr "Data d'Ćŗltima activitat:" -#: bookwyrm/templates/settings/users/user_info.html:86 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Manually approved followers:" msgstr "Seguidors aprovats manualment:" -#: bookwyrm/templates/settings/users/user_info.html:89 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Discoverable:" msgstr "Visible:" -#: bookwyrm/templates/settings/users/user_info.html:93 +#: bookwyrm/templates/settings/users/user_info.html:87 msgid "Deactivation reason:" msgstr "RaĆ³ de desactivaciĆ³:" -#: bookwyrm/templates/settings/users/user_info.html:108 +#: bookwyrm/templates/settings/users/user_info.html:102 msgid "Instance details" msgstr "Detalls de la instĆ ncia" -#: bookwyrm/templates/settings/users/user_info.html:130 +#: bookwyrm/templates/settings/users/user_info.html:124 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:" @@ -5931,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Ć³" @@ -5988,7 +6040,7 @@ msgid "Need help?" msgstr "Necessiteu ajuda?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "Crea un prestatge" @@ -5996,66 +6048,58 @@ msgstr "Crea un prestatge" msgid "Edit Shelf" msgstr "Edita el prestatge" -#: bookwyrm/templates/shelf/shelf.html:25 -msgid "You have have moved to" -msgstr "Us heu traslladat a" - -#: 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 "Podeu desfer aquest trasllat per recuperar totes les funcionalitats, perĆ² alguns seguidors poden haver deixat de seguir aquest compte." - -#: bookwyrm/templates/shelf/shelf.html:39 +#: 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:54 +#: 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:112 +#: 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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Edita el prestatge" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "Elimina el prestatge" -#: 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 "Arxivat" -#: 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 "ComenƧat" -#: 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 "Finalitzat" -#: 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 "Fins" -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "Aquest prestatge Ć©s buit." @@ -6365,6 +6409,11 @@ msgstr "%(username)s ha llegit %(read_count)s de %(goal_cou 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" @@ -6667,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" @@ -6725,15 +6786,11 @@ msgstr "Els teus grups" msgid "Groups: %(username)s" msgstr "Grups: %(username)s" -#: bookwyrm/templates/user/layout.html:50 -msgid "has moved to" -msgstr "s'ha traslladat a" - -#: bookwyrm/templates/user/layout.html:64 +#: bookwyrm/templates/user/layout.html:59 msgid "Follow Requests" msgstr "Peticions de seguiment" -#: 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" @@ -6754,7 +6811,7 @@ msgstr "Crea una llista" msgid "Joined %(date)s" msgstr "Unit el %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s no tĆ© seguidors" @@ -6868,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:48 +#: 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 47ebdd534f608e4ad92d3633c8fcfdb929ac0eed..57ec9f361d52e047f1f0a2fa25d36fb1bb0ed8e2 100644 GIT binary patch delta 30917 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 PL;pV`>{KJ5e&YWFY)ljG diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index afdfc2f3b..c88645d94 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-06 12:24\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -102,8 +102,8 @@ msgstr "Reihenfolge der Liste" msgid "Book Title" msgstr "Buchtitel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Bewertung" @@ -141,7 +141,7 @@ msgstr "Warnung" msgid "Danger" msgstr "Gefahr" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "Automatisch generierter Bericht" @@ -205,26 +205,26 @@ msgstr "Fƶderiert" msgid "Blocked" msgstr "Blockiert" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ist keine gĆ¼ltige remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ist kein gĆ¼ltiger Benutzer*inname" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "Benutzer*inname" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Dieser Benutzer*inname ist bereits vergeben." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Dieser Benutzer*inname ist bereits vergeben." msgid "Public" msgstr "Ɩffentlich" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Ɩffentlich" msgid "Unlisted" msgstr "Ungelistet" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Ungelistet" msgid "Followers" msgstr "Follower*innen" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Privat" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiv" @@ -352,122 +351,143 @@ msgstr "Zugelassene Domain" msgid "Deleted item" msgstr "Gelƶschter Eintrag" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Rezensionen" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Kommentare" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Zitate" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Alles andere" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Start-Zeitleiste" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Startseite" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "BĆ¼cher-Timeline" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "BĆ¼cher" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (Englisch)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Katalanisch)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Spanisch)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Baskisch)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Galizisch)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Italienisch)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (Finnisch)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (Franzƶsisch)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litauisch)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "Nederlands (NiederlƤndisch)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (Norwegisch)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (Polnisch)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (brasilianisches Portugiesisch)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortugueĢ‚s Europeu (Portugiesisch)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (RumƤnisch)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Schwedisch)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (vereinfachtes Chinesisch)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Chinesisch, traditionell)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Zugiff verweigert" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Listen" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Cover" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Tut uns leid! Dieser Code ist uns nicht bekannt." #: 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 "BestƤtigungscode:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Leseliste" #: 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 "Liest gerade" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Gelesen" #: 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 "Aufgehƶrt zu lesen" @@ -2511,8 +2546,8 @@ msgid "Barcode reader" msgstr "Barcode-Leser" #: 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 "Verwende die Feed-, Listen- und Entdecken-Links, um die neuesten Nachrichten aus deinem Feed zu finden, themenbezogene BĆ¼cherlisten und die neuesten Ereignisse auf diesem 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" @@ -2543,8 +2578,8 @@ msgid "Notifications" msgstr "Benachrichtigungen" #: bookwyrm/templates/guided_tour/home.html:200 -msgid "Your profile, books, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "Dein Profil, deine BĆ¼cher, Direktnachrichten und Einstellungen kƶnnen durch Klicken auf deinen Namen in diesem MenĆ¼ abgerufen werden." +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." @@ -2699,8 +2734,7 @@ msgstr "Du kannst eine Gruppe mit anderen Personen erstellen oder beitreten. Gru #: 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 "Gruppen" @@ -2754,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal, msgstr "Diese Registerkarte zeigt alles, was du gelesen hast, um dein jƤhrliches Leseziel zu erreichen oder lƤsst dich eines setzen. Du musst kein Leseziel setzen, wenn du das nicht mƶchtest!" #: 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 "Leseziel" @@ -2793,7 +2827,7 @@ msgstr "Keine AktivitƤten fĆ¼r diesen Hashtag bisher!" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "BĆ¼cher importieren" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Zeile" #: 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 "Titel" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-SchlĆ¼ssel" #: 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 "Autor*in" @@ -3085,10 +3119,6 @@ msgstr "Kontaktiere deine*n Administrator*in oder 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" @@ -3086,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 "" @@ -3866,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 "" @@ -4109,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 "" @@ -4244,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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" msgstr "" #: 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." +msgid "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." msgstr "" #: bookwyrm/templates/preferences/export.html:20 @@ -4269,11 +4487,7 @@ msgstr "" msgid "Data" msgstr "" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "" @@ -4763,7 +4977,8 @@ msgid "Active Tasks" msgstr "" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "" @@ -5157,9 +5372,14 @@ 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 "" @@ -5172,70 +5392,107 @@ msgstr "" 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 +#: 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:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:102 -msgid "Completed" +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:116 -msgid "User" +#: 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 "Date Updated" -msgstr "" - -#: bookwyrm/templates/settings/imports/imports.html:132 -msgid "Pending items" +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:170 +#: 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 @@ -6048,17 +6305,15 @@ msgstr "" 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:66 +msgid "Import Books" +msgstr "" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/eo_UY/LC_MESSAGES/django.mo b/locale/eo_UY/LC_MESSAGES/django.mo index 1502e9eed90f3a18da552f3b8bf11aafc53b9c95..5f0b83ecbc7c750295ef2399ac1b273f37ecb9f1 100644 GIT binary patch delta 30917 zcmZA91$Y(70;b_Uf#8||!4o971$PMU?ry=|y>a*84l_6mPH-C>26r3Wb#S=Ae*dXr zmuLIA&0B6=)#oH|XUeN+*B(Z5Z~H}_;c%_>DU~T z;z#ty`28IxEe2yktbi%78CJx>m={lA3G@tboWfWNv*A#z<2bIffk0Cdq7HPNgV+Y2 zVWvTj6B82-cAR9G3Ugu+EQMV$6K=&scn4GCC(MOOUB@YoRj?XP#vFJD12O&(4Uk9( zfw&~J#Q^M!K{y3#;6_Y`k%yWYWX4Lw+oH;E#eyEk`3Dmak2c(KwqpuZ{$HMYlH$e^8cqa7!W((z9`ZS66}asD8lcr25^-N^r( z(&HTGC7!_*xMw_%!-s)R@IG^A$Rt*k^edBC|1|{0PIkQJnL;PT?;=UggsG0x4wFxF zoJBYaS7Ewv<5^ruy#I8^nTTm-IL?0Dh&!?SOk>trjq<3x~t1LtEne`qCgEHG}tVZ`&(S{vMjp_qnI_Qo(Af;W+E;WS=s{1=B1 zZ@z>wc+VxEB`deocpkNsjab)C_zPA&4EgXnmP9|6 zsTtP6Rv3W|FgeRxANybk6*y_ua#XN7_QIB!1+SqtU6gfZ zuN1-{;>$6u$8nBgUE(iTUJb0&dNZ(r*q``*WFW3nXoESYGf?OFGP?K@`(Y<`N;iCr zRk8ji$H|DRFdbe%U;JuyHk%hz6pTW8QjCVFFg9kwsF>dyr>EisRIrN8sO`;QC2V>J zj75HT)JnKEe=4e>MW_x|U?kjtI&NFg53i#?zQh>l*<#v@h0!$ABm|;kYK)6nFb)=0 z0j!7#u@(kmdsKttQ1upCSE4%DgqrCd)WA<-JiKasimLY&U3CAJo8N@8S~;Hz1G8S-IP+K;u2;5w$@Ls0V6ghN1>G9yQZxsE(Fl z5N<&Y>=GtM_Y(n)DBfPPM2WF0@obn97oj@Xi+Yx)Pz~Qg)q8`H@iVHy@2H6++GjdW zhsw``+EWEld!P)mvaVB!fEucg>Zmztb9F(De5iE_s-Z=g2>(P4Xcy`rTJE#FZ zN3F;YEQrzeo6TGj)$Rg3O8?GU0vb`z116(CY5-#~Kh8ttUqtPN>o)!v)xk?t$Dgb| z2hBucqc(3c)aEOLdNhqt?YG3(^zZai0EeTNZYrk0CD;k~VLr_Iw;50v&LqANb9q?W zLuS{vJ8T9x2i4wk8{dMPh#$a`*z*Yc4Y#A)lt92yvt)fxOF9mHaUN>KOHcz_Y4f++ z{NpzN3`QmYGHNs5wm!xn;%`s`ihs90{M^gry0u}+%renT-C@i~|Zw_+e(L9Os7mw+1nj@rdBPMH~} z#F)ghpmuA1)PTxjR;-V)a5SpibQ@ocYG3O7P4h2mU=L9*s1K;6&vxFJA2pE@s7+S|RlX}G$067N z7oe+-J`+$!&IMB;I%sApXO^$d$*e5{3K5yi0;c{>oJfBCmG6oEI0Cgmbx#n2LI~GcgdC*!Tg|N}WOtE!3lXiyFvx z)G3H@-L#VhHQ{_1pwIuJ1cFGYgPK7fRKufCD=-*6y^ zizRND6=;K6xq+y5CSYP*ivINP>>{8UoI&mOE2s)jQ7iKWHLyrGP23MP!{n&+45)_l zq3TsewbvN+%)?MC*%vjjL8yL4p{tS4CZGn^qGomwC*wb;6=;0R%)B#dW&=?jEkO-n zBdXqh?2RWeHh(cA^O2|ljYmyj;ceDmfz`I)Hq1%<5US%(s3nf}FOLP|qBhlN zRK5AA6!^laqZ;^zT2kk(F*>TgA8KHUQ4>gQ(=%c%;@Po3j&KPu2InUZK=&TM3&3yK220&H zzl2(gp(=-^F!TYxpu$n84gwyU52ci-cwTD})Jm2@orc<|6=;Ep(Ctb_=um8Br_I8MXQPU{Q2YE3p@~!pHCkUO@VDow<)q#pUQr z#(LD!Z$)){47EA0+Voebfq0&na`8}`I1Oqd`A{<}kD6&SRQb*}e~^t&#)Mk?g#p? z4*#<5Ms;)oRqz^WCGMe~{eKu8^F1?58j5;!l~B*P9%?1RQ1$v?Djbcfw+dBmGrCm> z>?aV2ai5!KpB*)Til~MgpjN0gCc!?aM=}*P(-o*0o1x_qL%mvYEMLdWj=fo zqaIN$)C#mi4YbEA);~3YktA%umG~Fde{C9y_Qs4n4#pupDeBp0M9nYV63|G(Fdp{7oHz#a;Vx8#cbE;G|4c{OF+S0Jm=w#S zmbMip$067l7ohggH`HE;{Lb`~0P_%cg9)fWLz~eGHM3r*4kp43}cgV$;R)a8hnFV(yyo)IUh{C z3F?uwLUq^!HK0+b0Zm1h<8Q4_d~8Fc<{5YQ4w{%B?xA2st_s3j|n+U2!T z9reRRH~}?)KTvyM6K2J8s1^N*`cR7Y$qXQ!wIpiKHNya%|KSAm?B}66Sc__KpN-!} zE&W^6K>Rd!09%=7S+x+)Jp8Np2DQWucOL;KyA|4 z?hiAvRH%eps1C|v60Cw6aa+_(`l6O@DrUf0m>Kt@2J`|o^N*+je?tu<#!vGI5?g~Y zC+TiZ0(z!lsFC+aE$uKHA8+H~Ha;KK@SmuGZN^~y+vY#DzC}&o3#vVT$K!nj$x#E% zW_0-p*5jRV3DoW^k2(dlF)g;mWH=Gk;VRTQ-+?NB2-V{OYJBZh~s36>3v; zK)vA>Vjetz8SxWp=Ba#5yZL=RuJ;vLnFMvv0kw2}P#vvAjWhza0!LAs=?v;PT}3tg z4ijREC}uC@LQSLyro$Sj)6);t&oor~3!}Iuu#N=1Vt1oDx{d1S5o!RhQ8WIDnsKbC zChmutd7zD_!%4(*VHP}yYVWo66M9z|14&QdMl%iNMxFmqjD)qZI@U)uum&}t%~%+B zqc+_aRJ|Xlf%-)^15AyYX$I85b7MaYMeUJYs8iz}C!iTzKoz`>1Mo5Gn6->y8t#mG zg$~9boPv7R8*Tan%uoCys-5gH&B_)=&A1|JK+RAccSOp&PHzIaNLY`mcpvp_-k>`C zi5hYISZ1bysD^T(W?T%DV^!3ObVR+7x}iFng=%jJY9%+I`q_?=bp8($=tRPC)UM4J z+noCbsD?YBmVOLssi&eg-!fDO`!NfiK&{v()WCe=n0kJw0VG3BBoit>KYD-uFGnB) z35`&@es25L$xMqNbtd&p$X>4tSLBzYE1~d(|Vhd1@VioGmx))t7 z)qMhLIC?zOVRF<+)1pS66SV@Ns7F!()nOy7gRN2T`aM_;uV4wx5Z~kd38({RCLWGj z;eDuy-HXrpS3}Q8&h=}|Mzj^1a58dy0@f%Q@4`=B~ph}u-Etr4h> z525Oxvff0s^TOtTcL}JXZvwknP%DxQHPT=k&w^?&FKS>#Q7^2rs0Q1iCek1ErkjR( zBd$RW_yB6<{Y&Pp*?4!<9vX@~Le~i=pqZ{lHMkMgz)sWvj-j6IdDH-Jp*B&p0P_OMj2d7Q ztc0C$2=2lHSU9oAIfuPb@p4JbXT~ths`I~=fR^sM&G-+4h$l~KW>5q*fJ&%=*0nal z3dF;#8?Z0&Z@0= z`g!0c*20{@oPTYO(ZS{gG97ah{|oggcpvpne~j82FRUM|KTrdWn$8R;zBLJ|<5Z~4 z7J~Z8sU+$Vv_VbSO~?7yJAFC{YG@^TcQxt-v&+WMqXv2dRqlyR{|~iUzoAwrdU~@$ zaZ%}sQ0=5e4X6-m6IVp_)7vGWrIed+G^%333?{uC9wuH5RUuJEV<76$WI&bAg)=b} z8{$>e%H_^v23`PFu8fV>vbxO)=<9W7n=lTwG_z1MU5n{(8)^WzP@C$J&5xeh%-kQd zlb!^7V|mnG*^lY*D5|~JsCK>}d&YHqvX}&a)U!&Cdgo_DbyUR0o1xxlT~GrYiTXZ2 z7d5jTs1-SiYUjL7e}Fn&|Do#nW;KsIDSChZmyLjSZ7FLtR0EArBkhbjE`3ldF$1+1 zcB3BMaa70WZ2Tsw-UHO0cxlt$p*|(Qp&n7fY#wKn&VM%on%QTZjB&D?XSooylzDQP z8LmYw;ZD?MI)oa)MN~&OQ7dr|`D*37K}{@Uh{yX=b{?!oyd&z7>_K-3frkXtQR|%M z`}!@^2>o+;oCnwiwQFnTHa|$X_&4zjI1Xp!@$h39ztzZVz7IUct;CDw^Elt}J?ho` zUw-puELOnd{imLt3vm9skr7hRo^dcrdAL>)CE)KzdsPbR2KNc>^`Oi!sqNw@mbszO85)?B_oC$-87ep;x zGYrCwSOL$Y-XAH7o9}=jsJ+nywI@2D9zky#ABK7nO~m@R(IwEGK+I6HVMf*_$ID?wl4b;lLMGe%AU&@@*l&EJE zjQWu1j(RUl#!R>dwaG4{8oY_xd{58^-(U#7!xk7^+8nzvsCx6POHiA41#(JUCxSp8 z682+j{D^6>aT)WicoXF6(hB<5*Pu3hLM;D`y6n7Ip4(U=Wr>t!OJ7 z?~cCu{0}FfigQpiTI$WpE2n9bJ+n-Cv|dILVi zX7~oxe)WpxL#{r0|Negx0cE_m8UIrT@sLVpX=kB2nu|H{4{V8-ZF<4VW~L=kyS)zT z&Dj^h-04bHD=9>v63rrkN1oAd}QgD+}v{<9FsRom>&W~f(eZ!CxlusmKx z9hcN~%p)0yX^5}H!gvbfWAwV_6`Kq-u{@~LQx7xZT2#lEQF|&yJ=c6K?pTkXSXipj zs4oa7>U*4j@g6FEuz~6DI@Tcm1NC*fdPCDuM@&R~GHPJUttU_~u2-nz7rT*(r$NO_ zxCC@g>!Fsq4GzJDsP{l%WBVdPtyDpbhiy;;=!@zg9Ce;Ip^n!+)cfKL4#&_YW?+YL zIq|2s4BaVBO(1VGkM|!Q-^8h8gf;g#Z}AhZQH2(~34QqVYiS8;h0p~1EB4a>Dk8=!Tbn-a+ z@B;3|@Xp2>UCfu%_+8D{?Jc;0{H)zP&Mv%-J8^DzW9=Ru@4xwu*V9aJJ&qKRJ>nb<9BRBd}u#D$MGqS#IF5~AF&V>WF`oKCz7vcS%L?2IkPnqzk!b<9(Z>>n|{Q4)uul~wetnF!f_{XU#(~K}CYU%w^A1=YD%~Kdt zV-wU~7>cSl2Lo{_4#R_}&xq2q%qeMx8gK{HqZy2@p2ZjfIyN&<-}&aEX1WcvnNFgP z*>zO;hp3hM4>iEgs3nat+iX@p)c1%qsFe*xbzB`)uN7+G?PqiTwY!Irpbo=r!Ih|y z??MgWGU^5M5F2CKId;?GIpVWWkEGpPGk~tB4u@hvoQ|6D8B{;lP!oDJm-DZs`$B>` z@|kChk9s6Qm=?34z7^L*b<`ErK_Ao%$64p1R%A7%!QI#m@1VY@)R^z_{yW0SxR3Zh zE`dh8Y9}r*$K=^UGs0wxj5$yZmPUQL)x|34zu4n+#1_~a&!8S%nI)!P3)E8gK|Pv5 zs2Pt$9rr0V-<@v@EVZsit;itgh9UMcQ`-`Z(@*ef< zqpUOojD>110V+QjwPN|uT~DAW0WH}poAC*?X?~z)7G;&$R0&Y0B%?JyYJg=?OWVMv zx3}?rs1+HD8qiGCK<1;~l^kZ_I32*LCesEk^fUZ@!kMl~?Wx)_@i z--McJg0*HMsZcAJ1yw&cs$LPBUKQ0|U6+79<=WVcMW_lZP{(eA^$co8uP`%4TIccp z9}Tjj%KvFyhatqbq4vfT)FXOt^P~P{9$`FGdu|{BZLZv?3Y~36f7GLyjGDrtC{hmD^>wSNsY;0G92=l>IdAdI@nobL?S zj(8nxiu+OdL7R=CsD@jhI_!&D^4X|{7uozxs1-V9)32ch_5v5t8G+h6Gf*qK0JGypRQbDGIsaOc zmn3LppHYv(XPfCL05!n07>qeld!!!f3ric+BkG7jI0Dt)GSmxagN<)Pl{ARK2gLhJAOLV-^QBkcz04 zX@Vm#3^m|qNPXA&NkE$_`fl?TD-mksxlj#m#@x6YwX|32IPlIPmEfjjHt~O zf*L>(^ucPV6{?9Ea0iU6o_Z5dM+2-QP&1u~nqfF<1`BNZpIDptY8;KuUh_AfW3W3> z-+kt{WPPzC@k3YxL-w0rRF1$h#E;=}%{1--)4?{>((JME^QakJL(SwaYUb}zGmd=F zyqFTA@(ZALcO}%bZitz%8|snGM{UB*sPc!=)i;@|1oXA~9csqa|28Yq5VZ$dq0*P4 zmToOx!U)vLO*~}sXIdAdmU=bn^c+O*dj!?-XVgGr9_IWjA?aZ=;;g8OB~c@8Xye^c zD>KffFS6;|Q1ABBHvNfB|B322;D{MmX4Ia@gX%aG^+>B7;rwexbxBaiEl^9|A9LU^ z>t@uFKS1q`52%K|p&E*D)XXftH7)89(Nolb zzFPf`nJ*-nP;bNtfXATxH|C@i6hjHhugVvy=-_E3n0S4095{iG?ukS(9H8vk`BK zTG2_EQ0IR-0WJAz)Nwq7n(4pT1izuqeS>qx_NcF3{joI8L9O7ws7LwO8uh$sH$7_i zhobgKWgG8;uAapJ0$Q3;He&{AAWKk7yc@gYHPo@JbiurMTB0`NXw)lw25OHiwQfeO z%pueOu3~F^fLeiy7dii`SpA}TrcF>C^hOO}B5GhOQ8SJ}y@)QO8n}a6>PM)7B)Me1 zC!|MpTp9HUn`36|iCXE!sD5@{;{5A4oFhS-=rLx;xR*_X#ZW*0S4MpY?2g*~Gf@q0 zvGF^o27jQwH7C4ce{X<_*F^2Hj+hl^pvwR45(px29W~-_m=EJ#HA_|&y$x79q8`~u z%!pI0J5ek105#B8s1E(EnLSeoRj(pyZ`DCP61O`6E#+X;u^WMEXgt=!8CV0Kp&nI{ z>*iQhK*g(Ker$yLdOZWx(Rmz=x3Ck2-7v@Q0xJI|G62_kOrReL@30_tx@kICi7L1b zHKXmQPp_M()9?!QhWvqAp+vXLDaek+i08vf*atP!L#RD+7Ij)~V|1PWM+EfY^2VFM z=l5+h(zvMIoEX(%M%1P(fLg*@sLjG8`P%hgX(w^=Efzcy>l7W(KFNxKcfcX+%YQ|1@&m-qv|I^ z@BjZV8-Xk<5MNV(o)E|1L(u`KYB{hH7Xp>Jc47)w_TycLTMe4=^2mL9JZSU6Wo2 zRlnL@&c6Z;NKnOAsAtv5#`~eZ=MS^-(Wv*p6x33$N0r}=n&~m?Y1F_jqV~wYs2P94 z;uzze*-I7gxn@L-NzjsaM-8MOY7-4Z?e2r9fqt|4-Zx7g7mJgg1`A*-R7VR@E3gr@ zX^)`lUq!ud?x6K&X^Wr1a9!c@Yya6kqX3`dea4>3f zF2WGphU)kU>J)uL^%Lu{nOH*PG`LP6flOo+LXE67YDPU!=e|E?#f7M6e+o6z=jeT7 zTH`)3ujDkSy-*c3q1vc{G)C=}t~Pxj#?$#9VH0Mc3NFBzxB;_c*{5dYeXK)JGari@ z&?3~p_o9~gBx(S+um;{o%{=cjGqGY=oOl`Z{`Y@I6VNW5f_io+Gvc{vFx)y9^-P!GR9ug0C-jA>UkR1p2=zUnJ$nECZvp`|cnI|lzkqrK@m`t= z0jQ77U{twcs2Nqk5?B{=;apS)r>!?p1Am4Z$XC?L`MxrHBH1hZ{XYu{fn*dzJ+r2$ zkKHz?jwYa<^$gU&R-roDVB>pHr{gecW*J|b0awIe;$f(Pk4NRtMeVuWuQ~r3;bRiC z+drY+(W%~;^dhJMRYpCc+Nej;3AG|aP;bP!sME0-^&Yr`+5<`7nwbZo2ACN&k;$l) z_`@ZjSK|)Uj4q;<>KBo?ScI^{WxlAuh{r4RKw3vU(F(aGd|FH4I~7$k|i+%*1>c-|1JSNljW#}cA}Q*0_qif8#Tixs2P8;aoX69&OtrHov0cp3!9?d6Qg9)Sfc$fSD zYH$66n)yxCO5e9}_c;N5q4*EA`#+(UEM8O}XRC)tfNJ1YG*j*c)*}8Et6`bwKHe3Y zh1y)(P@C{LM#8VC_J5%EM5GwTSjZ-HorDCm`BI}cNe*jaRD2Y9&sfj^Rc0{`~)ufEx6~ z^YMOni;nGy7ebAAIjVv6Hhv9N{vK-J&rmB6IldWCJk)Uv#`IVKwIaY=M)gb9xK)EMK8!;PEpJ#zU<@TGY%7qBd<+)QsDro^fwfJEKq&n1w;O7}Mba z)FXc4$G^YQ62BusOY;>KkL+(|7!%cizco2(F9c&47ROn*95v9Q34FZ&SB=W3<9Y>q zV~d2Q!)vI19-!WwuUrCJ$|#9U$8k^%CB$5q7B#bam|sm)=QyyuX0lih6;$e*A}7mlHUPr?5{lAMZahE0x^G`=3@_h*5YC zlucn@NGW~1KM}3Ky_CO$9dS{hkN0=Tv4VWO|8%=O)*yW|_QEKse7ql812Hr4Imq#K zox=pOlkfm5V}jJ?8MQ!dma(We-XExjj$tSkP2=PJ1;Y?jgVECZcz;gFje0~aPepBW1Je0;|5;sYY()Gr zs$Q=2=Ft_yy2LAE7hHyFKVb$Rr-IIZAc54_9<$;^RKvSa&pt**V`9|aNQat19-Cel zwQ0k!0(L}|i$Lx2BbWuxq00S0wdk%dv>#X3!!E* z2Q`zUs1DNQ@bUgvF|(qc-9pTXD^cI;Z`kx=A?CB8JT@o2Kk75(CaT_D)MkH<%`lmp z(~Nu|>diJ1b*|^3-s!v0gZsIE@_BlW)?#tDB0NdYjEiIBy=D`SP2MXTPiGYrcT$kI zfin6~YeND*jXCZ*<#M%CiQle$6xOwp3d;$v@-=b&nU1n8sT_)D$iGeaG~vd!%rV>6 zeCqWiEeH8^xC@ZJh59oIk2CGJ_qG~LLSHg3+lu_K;=NAbYtq7P!$avzS7hQl2uHSq zTwvX0>y05_Nh>Hbkw8hp1;VE`^8Vj#ol3T~wB)RyMsM4yS{_CC1nxu~R$UsScGXns z4YPHXp3#O|(N0F%sYZMS>7@ztGIQc_uOjawY2k#qT;~OWH5ANBhOSWDZ^JQ|>LF9m zNkAi~xPM(c2-L70cCzJ_=STV3HoZ9MT}ew$z2!E|gGE)4>w;c)^GMiFf$DVDg76aC zSXv5nrm?)gHU610|JVWXx!|NEubFMQ3vJ9L-hnc??Le>5MkK=JDASd^^f;V51!Z=V zcSx^0T}!xIlTiwjp{{-093y85H$R4Ze=tybCH=wGmhJa=_4g|=^?WFip8F&#F#^BfG;Y0ou9M%CyEEyVNxMv+ zx-t+CqOA&qSCPiAeVmxY4-jsoJZ@b-sPmJwn}myNj}<1N9hsSFbh$00g3XD)A+Hu` zgK206VSS{&BK@!}7ee|+8XLg9jPS2Z@B0;$D}nzbFE`&itN!I6GFW1E_T zf_%4dve22{<-cFqhy>V9!U$jDUPsw!G{jG2&NuN-q z==4>aSGxEA%aQ1}(J%W|3g=T$-#$B$zmc*5wvlaw+tNTT^50@p)OCS;zT|lSEw4Tc zeq9C0e?qynwtiK@x|$ozpI4}Ol!E*!&U?9puTbzY>FWu%wv`g%L+(@z>I!8WXz=9g z`h)ms?xn;Rq#F-`k%xr&_*fsjJi&e_Uqb2xpj6#+kN0;>oY=g!aFh6YyKynpNf z5~xwG7QZ#9udNr!KStVC%6}t#fjbf5Dz=_)_|O*qZX;@cr*waYm5F;XHOi?uu0L(d ziAayb{ejv|xCe3T+F)B!I0p3^5N}4_e9E@K_}H4e0pW?{r?>U|DK~?=nhw+!0uf~D zYC>UMU%9uEmY4xlMb{2QdB?f=4WRQ6rli4<)c*^IaF-?hJn4Rf_1)(Mc_p}`lRm-r z!LPFT37=n^QR{D8GcR5tEi?I- zDcgW>1osP{F z0;+c*wH95kp@gn>gxlaFTB}2t-vxR9Bk;;wM%fh9?94rb_!#0Zsn-MZ;CRdy{xB>} za7jXW?RXYb`XS*Gv{Z-mx|A%&9X~v4>i~BGp<&#*)=}yp-lxM zH^N9E}BwrzBTH4k}PY#EiyVh5^lC(?Iu z`%-oY^>rQN&Ous9+wnp28WOLp%qK+r6yTahLwRurwzQq?wT*YCLQ(EJHolGUA;Og@ z7esh$_{6pW?mvWdZMCJQkXw*$qcfCv(5Oc(dPx#kb8*lt?ZRg|7)Qnr>Y-=6xVxjn?g$jd>Qw1kV0cFJ3W z?=Sq|?fgXp-EAXEKga!v3JWe2=TM9f4Z{9v2G>z?MwaIYSQY;R4ak~3;JtXjqwDXibPt9(GN7?+3;XB#~ zx|xZ^XST!1$@km9>kxlT`V?BYOwC7FnX+YZ3T_}zS4HY{#{-lvPq|H`$Fl7-wRWR? zR9k*0<$k;LRhd;%XIRBnxJg4bsr2hAV8iceL@)czl)J}0kaD`l;veBlI{3Rjlo&&6 z)vydX-EGYqwq!QjJ%0`0z0#52+yuS9A4p8ArMO>m$EWNk+DT0QAE;|K^?sTl|2Z~3 zT`AX}d!b2lorW~Hl!Q3kv2CTcq|LMg8Epr!pS($=g;Fs#`jWnd#_Llrp{g?qPcXdVseDnh-U zr1STe&P&SwK|B{_HWE)rxWDps6T0QxQ~$D3JYL- zY)qMhS|4yj@-Yl8#dj$EK1Bk=HE6qDb}~)BXn?)aB&*T zN5j7^exdAaqmhxM_p}Yqqii4Uj1)R;)1njqLO2cT`eyL{xrDma{cNMxiLB;cNuxU` zyxcaRk{wCgPTpbC^^3S{Dv-iwqnbi0shy83e0wB5(BY1^!*a-3&AuPKjltEGPWy8cN)c zyACatqjtC7@{SPSXXAUQ@E1MDyFoKnWT1PDJc6t8x9~GqTfhAqTnSe z{7XhE?xEaGxLZ)573tL(KySjj29mC;6?YinQ`9|4cm*A;51-o2-yJ~dx1{{bt*bRT z9Z1_u>0x#_QwR^F<~`#7VG`~c^t6MUqRu7qpOE*!mS0C=VbaHNPbDvq@}ZP%%$=Ds z!*Md^@b&&WnQz-vctGMPD*Q)AIN{%~XQUknuiQProkMezxC_$cT$NJ)T<=NiNcauu zKS+N{e5uV#Ol@7SNh^*2VSd}gKFYu2KFVF!mRH%*#QC4|CuK8Hzqe^a?<{_EWgCp` zjqydDlF?O~t0H*`u?z8~bh6o-%7!9+f$g+69l138>smnBVx*0?`4cIdlK3&=?i#m~PxhG_V z{5HT*)LX^vukY3;XgGvO5(-qMQY;FWw=K;j{+2Se@H&3@)dM!9UL4Y5aYt~kq>X5# zts-xt8s~0jJ3Wbge;Ytl+H1${hEb?L6^{MNq=E0;x)NYE8csvrE|cVZC$6g~l{b?9 zoN)eMb-g+Km}~1R`kD57k>Ay(bs{aJZKIf8Bh4tFYdXdbf7vrx`SKL6ZW6tJE+d|u z?iOM?nz@PZxPM(kNIOLBjF^k`k(6yr=GXA*z5FXDA$HpqolJ?bbUxhOcvQSY!Lg`o zFz&bE9(3Rmu15pEuC>1cxPS>)K6RR~V%h zkye;8A$C|0wrqKCzcE=e z8ji|+JA6-{H12znYul=$2@fIXF;#r*n3I!thxGcyw_vH?x*0}%GF>#bX$h!%nEMQO zPtq!2H1fydQ_M`eU+r*qQMbB&+f>FT9Kmzkm8tlMJ09V=xD$_aFQt*oG}4QK9H+9b zQ?X^_l=!9YmShtIdTT&$W<^TXGGR& uo3pU}i71)XCu8J@K_NcjzW)a@*J!i= delta 31768 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 Pr2qfH)h+HfE7|`8i+M`E diff --git a/locale/eo_UY/LC_MESSAGES/django.po b/locale/eo_UY/LC_MESSAGES/django.po index 907921f69..2b04f98b6 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-12-13 00:07\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Esperanto\n" "Language: eo\n" @@ -102,8 +102,8 @@ msgstr "Ordo de listo" msgid "Book Title" msgstr "Titolo de la libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Takso" @@ -141,7 +141,7 @@ msgstr "Averto" msgid "Danger" msgstr "Danĝero" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "AÅ­tomate generita raporto" @@ -205,26 +205,26 @@ msgstr "Federaciita" msgid "Blocked" msgstr "Blokita" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s ne estas valida remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s ne estas valida uzantnomo" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "uzantnomo" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Uzanto kun tiu uzantnomo jam ekzistas." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Uzanto kun tiu uzantnomo jam ekzistas." msgid "Public" msgstr "Publika" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Publika" msgid "Unlisted" msgstr "Nelistigita" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Nelistigita" msgid "Followers" msgstr "Sekvantoj" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Privata" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiva" @@ -352,122 +351,143 @@ msgstr "Aprobis la domajnon" msgid "Deleted item" msgstr "Forigis la eron" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Recenzoj" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Komentoj" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Citaĵoj" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Ĉio alia" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Hejma novaĵfluo" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Hejmo" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Libra novaĵfluo" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Libroj" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (Angla)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Kataluna)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch (Germana)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Hispana)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (EÅ­ska)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Galega)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Itala)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (Finna)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (Franca)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litova)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "Nederlands (Nederlanda)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (Norvega)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (Pola)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Brazila portugala)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (EÅ­ropa portugala)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Rumana)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Sveda)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Simpligita ĉina)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Tradicia ĉina)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Mankas permeso" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Listoj" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Kovrilo" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Pardonu! Ni ne sukcesis trovi tiun kodon." #: 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 "Konfirmkodo:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Legota" #: 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 "Legata" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Legita" #: 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 "Haltigita legado" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupoj" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Legocelo" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importi librojn" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Linio" #: 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 "Titolo" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Ŝlosilo de Openlibrary" #: 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 "AÅ­toro" @@ -3085,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" @@ -906,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" @@ -1042,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: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 "Listas" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Portada" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Sentimos que no pudimos encontrar ese cĆ³digo." #: 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 "CĆ³digoĀ de confirmaciĆ³n:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Para leer" #: 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 "Leyendo actualmente" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "LeĆ­do" #: 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 "Lectura interrumpida" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupos" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Objetivo de lectura" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importar libros" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Fila" #: 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 "TĆ­tulo" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Clave de OpenLibrary" #: 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 "Autor/Autora" @@ -3085,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" @@ -906,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" @@ -1042,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: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 "Zerrendak" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Azala" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Barkatu! Ezin izan dugu kode hori aurkitu." #: 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 "Berrespen kodea:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Irakurtzeko" #: 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 "Orain irakurtzen" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Irakurrita" #: 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 "Irakurtzeari utzita" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Taldeak" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Irakurketa-helburua" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Inportatu liburuak" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Errenkada" #: 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 "Izenburua" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-ren giltza" #: 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 "Egilea" @@ -3085,10 +3119,6 @@ msgstr "Jar zaitez harremanetan zure administratzailearekin edo 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" @@ -906,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" @@ -1042,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: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 "Listat" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Kansikuva" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Koodia ei lƶytynyt." #: 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 "Vahvistuskoodi:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Lukujono" #: 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 "Luettavana" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Luettu" #: 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 "JƤi kesken" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "RyhmƤt" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Lukutavoite" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Tuo kirjoja" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Rivi" #: 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 "Nimi" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-avain" #: 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 "TekijƤ" @@ -3085,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." @@ -3216,10 +3246,6 @@ msgstr "Skannaa viivakoodi" msgid "Main navigation menu" msgstr "PƤƤvalikko" -#: bookwyrm/templates/layout.html:88 -msgid "Feed" -msgstr "Syƶte" - #: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33 msgid "password" msgstr "salasana" @@ -3428,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" @@ -3504,11 +3531,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 "Kirjaudu ulos" @@ -3716,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\"" @@ -4148,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" @@ -4998,19 +5032,19 @@ msgstr "Palvelin:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Status:" msgstr "Tila:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:107 msgid "Software:" msgstr "Ohjelmisto:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "Versio:" @@ -5023,7 +5057,7 @@ msgid "Details" msgstr "LisƤtiedot" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "Aktiivisuus" @@ -5037,7 +5071,7 @@ msgid "View all" msgstr "NƤytƤ kaikki" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "Raportteja:" @@ -5054,7 +5088,7 @@ msgid "Blocked by us:" msgstr "TƤƤltƤ estettyjƤ:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "MerkintƶjƤ" @@ -5211,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" @@ -5685,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" @@ -5774,106 +5824,108 @@ msgstr "Viimeksi paikalla" msgid "Remote instance" msgstr "EtƤpalvelin" -#: 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 "Poistettu" - -#: bookwyrm/templates/settings/users/user_admin.html:99 -#: bookwyrm/templates/settings/users/user_info.html:38 -msgid "Inactive" -msgstr "Ei aktiivinen" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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" -#: bookwyrm/templates/settings/users/user_info.html:46 +#: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" msgstr "Paikallinen" -#: bookwyrm/templates/settings/users/user_info.html:48 +#: bookwyrm/templates/settings/users/user_info.html:42 msgid "Remote" msgstr "EtƤ" -#: bookwyrm/templates/settings/users/user_info.html:57 +#: bookwyrm/templates/settings/users/user_info.html:51 msgid "User details" msgstr "KƤyttƤjƤn tiedot" -#: bookwyrm/templates/settings/users/user_info.html:61 +#: bookwyrm/templates/settings/users/user_info.html:55 msgid "Email:" msgstr "SƤhkƶpostiosoite:" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:65 msgid "(View reports)" msgstr "(NƤytƤ raportit)" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "Blocked by count:" msgstr "EstƤneiden mƤƤrƤ:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:74 msgid "Date added:" msgstr "LisƤtty:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Last active date:" msgstr "Viimeksi paikalla:" -#: bookwyrm/templates/settings/users/user_info.html:86 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Manually approved followers:" msgstr "KƤsin hyvƤksytyt seuraajat:" -#: bookwyrm/templates/settings/users/user_info.html:89 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Discoverable:" msgstr "LƶydettƤvissƤ:" -#: bookwyrm/templates/settings/users/user_info.html:93 +#: bookwyrm/templates/settings/users/user_info.html:87 msgid "Deactivation reason:" msgstr "Poistumisen syy:" -#: bookwyrm/templates/settings/users/user_info.html:108 +#: bookwyrm/templates/settings/users/user_info.html:102 msgid "Instance details" msgstr "Palvelimen tiedot" -#: bookwyrm/templates/settings/users/user_info.html:130 +#: bookwyrm/templates/settings/users/user_info.html:124 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:" @@ -5929,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" @@ -5986,7 +6038,7 @@ msgid "Need help?" msgstr "Tarvitsetko apua?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "Luo hylly" @@ -5994,66 +6046,58 @@ msgstr "Luo hylly" msgid "Edit Shelf" msgstr "Muokkaa hyllyƤ" -#: 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/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:54 +#: 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:112 +#: 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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Muokkaa hyllyƤ" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "Poista hylly" -#: 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 "Hyllytetty" -#: 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 "Aloitettu" -#: 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 "Luettu" -#: 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 "Lopetettu" -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "Hylly on tyhjƤ." @@ -6363,6 +6407,11 @@ msgstr "%(username)s on lukenut %(read_count)s/%(goal_count 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" @@ -6665,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" @@ -6723,15 +6784,11 @@ msgstr "Omat ryhmƤt" msgid "Groups: %(username)s" msgstr "RyhmƤt: %(username)s" -#: 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 "Seuraamispyynnƶt" -#: 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" @@ -6752,7 +6809,7 @@ msgstr "Luo lista" msgid "Joined %(date)s" msgstr "Liittynyt %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: 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" @@ -6866,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:48 +#: 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 46882a4dceaf89059a11ee6c1a3fce74cc85843c..1b3148f925749c58c5c0af8d9a502d676311710c 100644 GIT binary patch delta 30917 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
    +_%xfo6Y~*2j9R(3Ha$U7 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⋘lAYKsTXY&FCeryVJAkIP?_@SUgM3}nxpUIeeez3CKb|`o@%Hg8;{4t32vt@q z_!%|wa#tmuhg#nd4kA4{H4<^(C2cNw*GT(;yFD$ArOYpcOOw8lGV_UdApDS9S2gY! z%FQA#ko%oYSKgEazMo(y$P-S*I~1IVx?DVD!?AQQl5i&)_;{`V7{Jw}pQGWj+>I$4 zOFU(KjR6_lP-?9pWgabW<<_;2xUL9FEheoBWlGs$6}P^jOn1ULY}sanBkX9-kam@N zBZ%j;ZQh~1bar$ptt7clep~69Ets8#qR7#e#ispCIFv>^5?@6A9A7TwXlMraaa&Hw z5#-k=-UL5h1Bs6%zL12nwroRRzbV)x8cxc6JHGS4yzbv5x3yKr6COp*BdR2{W6nw5 zUD7)f{}$_f(#;s+U(rPuo0f^X$GFdN$C1_ulafCXA7fG4ePf5Sm%1(V)26yM;TWFh zZc4>R+-V8V$K7~>dpV6Ja<)ug(!L?>KjO`3 zN7rKRCd6Co>r*5J8ri}F3F}H=olAN`8e5EoxHp+>r$1>QugL`d)lK8)srLnWt#Lf@ zC8S4iPvP!G{o$lFWw0*!ODPwoALtDuVFr;T+`rn6^ANtut!o%}UefQ-fUXIYPfK0^ z&L%CdNp>dF_)X$BiT{jEwzVHzAtXU~c=v77uI+4=I^0`1CN{cnRL`n)Nt;t+yeDJ) z#AB)5(5UYJ%c&g^6V`V?cy#3wwx~BUBI@%PZ){(0cbnyn?G^5g42=zsiS4~+5l zi0<3RJGgILw6_QC22vv?HpbhxhqqhbzEtftnA-g!!UDbO=#$F5Li_a#kBZ0<)sxau z|@hnQ*t6y~A9ubk@fu`#~#vC0U7VGU39upJVGd#u&AtpRFHbR}M)o$V5(6BJ_ zX@-%8MMi{uPNoLrn^IJ0pKx!4Mn`AiQE}d0;nCs6cb=`~X_7Eyuh5wP8$q`Eo|B1E zl`dAYWU1)IcV5sxMoWO?P$#yHS&*pYWFxs z16O*#(CE-Uhu1JulA^Ss{o_KTVtpewEk\n" "Language-Team: French\n" "Language: fr\n" @@ -102,8 +102,8 @@ msgstr "Ordre de la liste" msgid "Book Title" msgstr "Titre du livre" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Note" @@ -141,7 +141,7 @@ msgstr "Avertissement" msgid "Danger" msgstr "Danger" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "Rapport gĆ©nĆ©rĆ© automatiquement" @@ -205,26 +205,26 @@ msgstr "FĆ©dĆ©rĆ©" msgid "Blocked" msgstr "BloquĆ©" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nā€™est pas une remote_id valide." -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nā€™est pas un nom de compte valide." -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nom du compteā€Æ:" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Ce nom est dĆ©jĆ  associĆ© Ć  un compte." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Ce nom est dĆ©jĆ  associĆ© Ć  un compte." msgid "Public" msgstr "Public" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Public" msgid "Unlisted" msgstr "Non listĆ©" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Non listĆ©" msgid "Followers" msgstr "AbonnĆ©(e)s" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "PrivĆ©" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Actif" @@ -352,122 +351,143 @@ msgstr "Domaine approuvĆ©" msgid "Deleted item" msgstr "Item supprimĆ©" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Critiques" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Commentaires" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Citations" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Tout le reste" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Mon fil dā€™actualitĆ©" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Accueil" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Mon fil dā€™actualitĆ© littĆ©raire" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Livres" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Catalan)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (EspĆ©ranto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Basque)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Galicien)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Italien)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (Finnois)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituanien)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "Paysā€‘Bas (NĆ©erlandais)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (NorvĆ©gien)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (Polonais)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Portugais brĆ©silien)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Portugais europĆ©en)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Roumain)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (SuĆ©dois)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€åŒ–å­—" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (chinois traditionnel)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Autorisation refusĆ©e" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Listes" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Couverture" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Pardonā€Æ! Nous ne reconnaissons pas ce code." #: 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 "Code de confirmationā€Æ:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "ƀ lire" #: 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 "Lectures en cours" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Lu" #: 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 "Lecture interrompue" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Groupes" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "DĆ©fi lecture" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importer des livres" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Ligne" #: 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 "Titre" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "ClĆ© Openlibrary" #: 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 "Auteur/autrice" @@ -3085,10 +3119,6 @@ msgstr "Contactez votre administrateurĀ·ice ou 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" @@ -5775,106 +5825,108 @@ msgstr "DerniĆØre activitĆ©" msgid "Remote instance" msgstr "Instance distante" -#: bookwyrm/templates/settings/users/user_admin.html:82 -#: bookwyrm/templates/settings/users/user_info.html:29 -msgid "Moved" -msgstr "DĆ©mĆ©nagĆ©" - -#: bookwyrm/templates/settings/users/user_admin.html:93 -msgid "Deleted" -msgstr "SupprimĆ©" - -#: bookwyrm/templates/settings/users/user_admin.html:99 -#: bookwyrm/templates/settings/users/user_info.html:38 -msgid "Inactive" -msgstr "Inactif" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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" -#: bookwyrm/templates/settings/users/user_info.html:46 +#: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" msgstr "Local" -#: bookwyrm/templates/settings/users/user_info.html:48 +#: bookwyrm/templates/settings/users/user_info.html:42 msgid "Remote" msgstr "DistantĀ·e" -#: bookwyrm/templates/settings/users/user_info.html:57 +#: bookwyrm/templates/settings/users/user_info.html:51 msgid "User details" msgstr "DĆ©tails du compte" -#: bookwyrm/templates/settings/users/user_info.html:61 +#: bookwyrm/templates/settings/users/user_info.html:55 msgid "Email:" msgstr "Email :" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:65 msgid "(View reports)" msgstr "(Voir les rapports)" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "Blocked by count:" msgstr "BloquĆ© par compte:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:74 msgid "Date added:" msgstr "Date dā€™ajout :" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Last active date:" msgstr "DerniĆØre date d'activitĆ© :" -#: bookwyrm/templates/settings/users/user_info.html:86 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Manually approved followers:" msgstr "AbonnĆ©(e)s approuvĆ©s manuellement :" -#: bookwyrm/templates/settings/users/user_info.html:89 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Discoverable:" msgstr "Visible publiquement :" -#: bookwyrm/templates/settings/users/user_info.html:93 +#: bookwyrm/templates/settings/users/user_info.html:87 msgid "Deactivation reason:" msgstr "Raison de la dĆ©sactivation :" -#: bookwyrm/templates/settings/users/user_info.html:108 +#: bookwyrm/templates/settings/users/user_info.html:102 msgid "Instance details" msgstr "DĆ©tails de lā€™instance" -#: bookwyrm/templates/settings/users/user_info.html:130 +#: bookwyrm/templates/settings/users/user_info.html:124 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ā€Æ:" @@ -5930,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" @@ -5987,7 +6039,7 @@ msgid "Need help?" msgstr "Besoin dā€™aideĀ ?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "CrĆ©er une Ć©tagĆØre" @@ -5995,66 +6047,58 @@ msgstr "CrĆ©er une Ć©tagĆØre" msgid "Edit Shelf" msgstr "Modifier lā€™Ć©tagĆØre" -#: bookwyrm/templates/shelf/shelf.html:25 -msgid "You have have moved to" -msgstr "Vous avez dĆ©mĆ©nagĆ© vers" - -#: 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 "Vous pouvez annuler cette migration pour restaurer toutes les fonctionnalitĆ©s, mais certainĀ·eĀ·s abonnĆ©Ā·eĀ·s peuvent dĆ©jĆ  ne plus suivre ce compte." - -#: bookwyrm/templates/shelf/shelf.html:39 +#: 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:54 +#: 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:112 +#: 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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Modifier lā€™Ć©tagĆØre" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "Supprimer lā€™Ć©tagĆØre" -#: 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 "Date dā€™ajout" -#: 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 "CommencĆ©" -#: 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 "TerminĆ©" -#: 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 "Jusquā€™Ć " -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "Cette Ć©tagĆØre est vide" @@ -6364,6 +6408,11 @@ msgstr "%(username)s a lu %(read_count)s sur %(goal_count)s 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" @@ -6666,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" @@ -6724,15 +6785,11 @@ msgstr "Vos Groupes" msgid "Groups: %(username)s" msgstr "Groupes : %(username)s" -#: bookwyrm/templates/user/layout.html:50 -msgid "has moved to" -msgstr "a dĆ©mĆ©nagĆ© vers" - -#: bookwyrm/templates/user/layout.html:64 +#: bookwyrm/templates/user/layout.html:59 msgid "Follow Requests" msgstr "Demandes dā€™abonnement" -#: 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 +6810,7 @@ msgstr "CrĆ©er une liste" msgid "Joined %(date)s" msgstr "A rejoint ce serveur %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s nā€™a pas dā€™abonnĆ©(e)" @@ -6867,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:48 +#: 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 ff8156a3ac9139b285baa84bf11e8063f369c702..132cd95847f5dd8137eccc9e0ed3bd1f5f67dd33 100644 GIT binary patch delta 30885 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 JpwA-T{{bDTL?r+K delta 31769 zcmZA92YgNUm)lk zZoz1Lh{>_-D3jk6^AhiC<8v`H@ipkt(jF#|3~ypu{0qC|J7f}0m(h-sTj{tIQ;#uj z#wEmCe(yL0o%hK9oRMQ4=P{-k$9Cce%<98H$9wnO**}r+Fl{TG?^MHo(cF3)1KWMi!9SWhkGTlIkDu@sY9_aqInLKC z>D=W={0hrZ2D7p})vz&k#Oc@>Ut?=*%ks9u?bsGQzN~v;0+ASo^Dq=$YaNGIffI(l zI0fTy2?k=8b>`63#O}lgp&RdE9+%@JVOd)c58Pk|HUc%UJ;@l;#E-X z)yJfoX)6NBuoI@io|qa3s{oEeJ^xeDA6KIvo;^ zdco*XN7V@gU=vh_gD?e-KpmFJs0x4C^p~iWaJHH9>982lY^aqC!Hn1x(_#}S+We?xV27v1<0HLwgnna==E83GznBh(VL#NHT*Iq(LmgO8}aOu5fA zoE=rKC?>?Rm>DagCej?$aTl8(hdNUOQD0Feo<)uL5^7-AZT=IR|H54idd44r3QV8{Umcry1j482( zjW@ROcGm7l`yQvCEie)_qsf>W=b{>1gE|90S`VRK#TQZK|3(e;HR^FobjB=wHdMR} zs=W}@fZN)57^c+oA5B0Fc~A|H!!)?iTY!#H9qdKz?a!z;-EGvs-lJA1%~{iNPSgrk zMDGfq+HH(#rz?hI944oK=L!K8yoajz0+Zr9Op6JBGlwPvYGBz=FQ!7M!`RsxiJC}% z)S(-JD!&}R!fn_Z&!PG$e2z)0qtXOap%Q9@p{R;csDd7wJ{mQkX{f`s+@}ADD*q4a z)PF)Pb++?nV!2T56hS?qE=`nYQ|fw`%s7N zgpHp^mAh`!|F*uex-OXVDN*GzU10q+@;o-9B&x$osFBvgir5A9W?YIYzZ(5;7it2( zSg)a0=n-m$A5bfi;-cAtbf~ja1XZuLhd@RGEl^t#Y3*knhMMvBHXe^!%DJe|iltZx z4`K&=f-SJYC9|c=F&**am>#cS7JP~tm?!z~rhqSIAR!NG2EnM6sE3+y3!H^rQ3G&Y zHYP*O#22-sZd6A>SRSjQ$`3`Y;3(8Y$0HN-IMWDdDHm8bqt3!H>nYS8pGAMXYUA%w z4JG-*bdVO+PG;1=15pDii#psjQ0;U@%{&@2>G>Z(z)ivw)J!&^8a{wpiIb?6xq{l$ zXQ+lgp&Ckl#dPe8Er{pEJU9fk5{pqQxE~$*-DIpANl;61Ddw zQ3Lzh#zRmuY+=*GPz^_;>Wx9QHxsq@3sEb&88xvTsHf`ydbDKc2&jSksF{7hNtpDS zS%I0TnXf|4Y&)u>tEhoJLe+bReKGNM^RwX)RJ~28z2A=-&{5O`E?;N;6}W2)KEvX~ zKcSYs_zknf)vzD&x~L^Rh^lu9wL-TsJ3hwmFvU%iJ_!Se&q9?yfEv(g)QViW=`jg6 zNze?Qpho%zHPTP$gX#V>9cMr_R1nobY1ERIw^m2h4?zvA3F?frv+13&De>+&5chcq zFa{_17C&6zF075EZ*x-7gN^Y%R>9yq=C@yiaWe4(s16$6H6Ko`Q1L$2{-~Aopq_@w zs1=xp8I`_SXmRjxKx$IhsgScN)#oA7Jgg<6R> zs1;6dpZ&+wNPiyZ0s&S06BFTIsHK03>Nvpzb2$A_=><@Su7Zu%LmlGwsEI_QW;Oyf z(>bW}t8D%b8$XE|wDy+?Xh#27ork8PFKXoe)&i)8N?>BFiW*=Y)S+yJNiY&~V_yuw z*{FdZL{0DlCdDh5P-W^oAC+KNF;2i;ftoygw)9$DNj6yX$4YfjxFbi%%y)RCoW_k-X!^DqF z$5~KYPzV!ZRZM}kP-muzO^W;n`jahL7YH1hXSGXJ7;qR!!R{DiG3zbm)G{jQq=}15YrrV4KsG0qU z>fo5ozl=IWw@`bU@TJ+3WavjcJ!)z5V>&F3>9GbzU~3ycj2hr&WMUrYl?gZr{xy4< z7B%A>s0It6mb4UVM&)gM7HUftpgLTSIwJ>A13HB|8#hrMK0&pU;+2_zFXq?tpOJt% ztc03jebme&QIF3s)G42g>SzmQ#AB!dTt}UO#~6euUz-&TMtvw%Lk%F*Iuv#0=3pj0 z|34AXo?JwAa39s+TN}^vpBY#nY9I|z1B*uO{czNP=V1}tfLgg5HvOUX9qLe~dSkxu zWI^xm|APsrLUYt1>WCV^U{u3%Z2me-PkcM-5S~IU>3P&s@ds+j|HM}K4>rR(Z_NrX zKp*03QS~;wW&KMN*h)e$K0+PFfOqDX%0;mc@j0jtQ@u9>&44QBkKHjp7RGo~!v|4^ z^f+e5)2NBuL#^C@)}$X;e=U9H52k|xSb}<c>BPj+UeLdIM^vKcQCa2xh`xZTvoJ zpwCb%@y43uquHtqsPaWohqShbfJWBVCPbn-7>-%+d(?=Rpk}feHN#VwAAiF__zpFo zfKO)T#ZUt-jT%S|)FE$T?TE#RdwLPjo-Ra)s$LUJs^`B00UefZsDboCtwb#9Yz#)tcmkHkxu^mD zZv7io|08ON6Zp8if6(s5jhYEQRl}02WVVX5JRnPfQ}0$NP#LLxMV3jzw`3s-xSe z6?l$X0iVR?FeS&V#QjhW7sd?O5_J|LQ62Qhd^iF1^lU-(a~jqD<-{HnctC>Q{jX6S zWl3T>%8434LDY%_qh?&o#zRmuZ*AkDIFWcH2I2=)dj*pki=%gi(Vz5&9s+7O3iU!5 zj0tcueuGm{4ctRLMo+K;zD6ColF3ZHa;SlZpa$3uHPbNkwvPjd4@RAlSE!ZpBus8* zkQ!Am0}jGmsK;nNs^L|r=XWQ%@n_UtKeFlmDO}!PN)80GU;;h=PAZr8*X;>Wr#2e(+)qO_yd1Ukhfo7Jg*tpUQ60R)Kuna{tXOf>z$&8Z zg`ft|95s<}n;(PTpZ~ujpyzi6>h$kN?cp=jh+ktEenP!?!qS)l_O*^i4P>TuF}jJb zMQ!0})QbI%+KM}v2j8GaOO+$7X}CJ7!xpHKc0i517iuPhQCl(+)!__mj*Cz)qW`cF zrt@`q|IJ4j1`uD4h42^D3cp45lRX{JzZ%M$&Wx}KYU#_PI;xKvKzr1Z_ChWF5Y#Jl zCh9TTfST#AsG0tOn!r6&M=w$J-=iMalzt}e=g0G}&*R)A=tWT;RiP7V#@%hf7}UVN z!|XT}Relqy!^@~cb=UeF)y^kW$4Sx~GojiEK$S1+A)t zbd%8#b?ADd2H-($$ynak9BYrevdD3I1b6-a%!OC@ACfRl$xlSeZ(zT*6s5Ce*ZCQrE2GN zdA~jPK)uMWp$7IAt77I{JpUR=8v={5H)`qqa+{fFN4<#hqgJ3W>d=(3=@n6juo~(q zXo|C3{QQ90nzwn(D>->ym-pv@G}x5%aMan@m6zvVFOFj*l*B(#pMDwhnTlCaXT#r` z-&zbc&|uVns$1)$I&O+OY@Ja*G4(}l!EDroH=$nT$MW&~tD!3-cuzIzbUv~1L;+@` zsZr&!p~~e&9oE9A6{>(*p{h2$4yv6Nr~yTyp0c5+`m0a_-{c{%iNG#YgT3;bj6ryW z_;;uZbqW|8qYh;oRQWEbQyz=cv1UP+(+01hJ`KwiG86b3Rlc5$x3YS=5YX4_7@IH& zwM27KGv0{#a5riow@`=cZ=0Vw(5ygaEJAt??28RhD{=$_@D!@Om#B6=B4@|rBndJJ znNfR|6ZQC&Ky_5r#=}uhM=WZ9V^QDd7ocYL6KZ8nq1w4*(;uQfHD9CZB`<9D-XFcc z|0_X2r?-x^8LEL$)JS7ckIi7zO3X%`-UFyT`~}tVMH~MURqr9{Y&^H=|Dg`MQ^agh zRve}0zb^sJ>;q0hzoKR@m!Ot1xR{yYM${7SLmjFUr~zC?b@V4{CGI0%t(<>R6DwTY z<^3r;7#k7qgW8gV=ov=fF9PbQM+x(N{TAvFWiILB$1Ro|b$VNsGCxR+z(d4;$FVrK zw97e+0cFhhfk(KNc(t-F=L5b$y`o>2GjGW1!7lGV^^6JT`R_wU>GCe`zf4$()rlvm z;PUsfh{Lfg3c+JY@t5`H@YnGsvd?)6`6R4&92i;h?iup_kMZH+oVj%8Eot4L^ zGx8R-C5ft1@;%q^f2LMxgdK7MtL3)XH46`L(N?nKwaAU^!~b ze#39@1L~=2Si^kTZI2p==M(|W@ORV_Jwc5)bxrg9W<%{=F4Tue6zY939@W80)Zsga zYVb1ZP~Jr!e2m5LDR#nKwanu<5~=5LW}1LAAGO3wQIF3SEQNcq3%FJ^QZ}Bu4~%OiyCNQOsDVv!35kSgrJr<(#8j)W;PEspe3l8 zt+nY}P)ofF+u}VNuU60H{6IVkRnMos`B+YYLBzXYdz^}i>EC%lpd-FTbV#f zIPsaN^p7?@aRZZH9<{`aP#rBrJr(OP3~$=>>J813hoDY>N7S2jIC`GD_}6O$R**3B z8?&^P8=F%cfqLT&K|MxGQG31{o8mpxi>7=N^EAX_4dO?zB&KNUaw4%Z#^46jdm?u; zm-7T4G~@Z#UR-K!p6lDFiassOp(}$$iH|_NySJhSbP~(pGpvdQTAI_}6Tc?D4|SM7 zVld`tWmcdS>U%&>R68SD@%-x$tsy}(dyDljZ)?+FAJkGEM&3=%ebh?iZtHT+V=$`0 zH0?}>0jT#vE!0xaL><~)sCqXrFTO&Zov%FYO~u-%51DSL4o9IL%T<^f_hAM61xH|t z4(7cu8GVV*!2-Ar^%Pw~J*M|j?I!4GKV4DnmOyQdrw)NJ1a_cCS|!xw{U_L6a0zkW zPA>01x!#H@*CEX1{ioIs@GAdfm67R`0z-VGY88>nGc@}xR3a(-llx3J}zf3 z@$}IyXCeNEaTpWh^8Op~hj@Va53w%qU&S5D-Jg8EXR?=iw-g6w_$fR zP<5!wsfp|GJ-$RO*)tD^jwM|^%iE zZ$^({ZQ=>Wnw6=Kor#~q>R4=?IfQ+2DDg4lc>X66NHX4h9#2P&EYk$@s*FQDr%Nyq zoN4;o@p+3xNV`glQ`fP}@>5EaHik=?{L=xDG z8gbwhV@1>wH$WBaf~7D9wFRqCFPP1!f&GeF+8d~?dSKI^SU*}*|6o=$2eR@WCm(^L zR0u*#TNvo#hq(-EkdE<$}qY{t^~04tz>ym^zhMJ@GU)VqHi>b-K*=69QFzL1Q; z?s|ZC5zrpzoo4nV2sM++sF~KW=}l~U7u3@bg?aG~mc!)J&A_Xp+G}d#ZBgy@M6GZf zF2hl{LC=5S48D=@I93~oA)C?TCQx>cS=v^p!_xzGXojO^G6(gPEWsSO8g+V4ptj~JCd4;3 z{UfSF-??VSSy3xl2zB~Pp$>PQxjg?`k`5$jZ+oN8z;M*z8-p6iLd=3YQRUCs{5v-O z9;=d`YMyx`HbS+x4o~1d)C9htZ#tfgn!xh;JpXz#?Ib}X{)jq!Nfwx;&V=eP7wRb} zf!d17s3mTInn`a|{ZXinC!y*sLY3cyn)!az$MJcL!si|W)d+N2=yGb|a-4@xup?(; z{37#eeZ1HVpuiGyCQ73QR0FqRW2}M6mb#pt*wDHMwdVzvnE_Nstwc-I)_OV+&{A}@ z1qPyKG7+_>Gf;^-XDkq@=W(hL z(2_MV2~Id_@8i&o6R-rXN1gUtsI%}92V>?Hrh{py!?+Nq;a=1Xo2)cj)CM(xJ~loG zTj}|qLO^@;H)`Z>P&4&eWoDKdwS+lP9hO54U>mB#GpJ9+$Cw{|SDTK5QCn0M)qX>3 zJ5>8U6xZ|LkAM!#NGyiaZGq#~^QZ=HqE_mO)mdY{52VAwq}Rh!D`a1~tHLs68Ht zYIh210?Sb4HlynAU&r&W2G5b85ns0cg<9fws5e`N^`@hOs3i|ZH?}~%ANr#n!zrjO zT!EU%kJf$GUr;M?4K=`j*LzIIDL0r7vZG#^LFmR1)Bqx_-(djpnW)3GA2pMcsHMJ! zn(;e~#56yey&j61`B>BdXQ1jY^bpXJtwt^N9veS|<%nNE?NyqM#;mBB<;5T@iCTe9 zsDTZ_uDAr%L5fYr3|N@Bzl}FQt+=Np0X-%WsD}HXW-ts(;Z&P`5;c&^=zZQ%^M$Nf9llejiuX`6`G{I-->v3M z6hy65CDhECpx%hBQJ<0?)Xe9j&eRsvmYhco^g5={^ZyS4&G?G_tlrJw=^R1L=oqcic{%fA8Z!f=0Fw3*a`? zQ*jeDu;-`_66`YRDNuWv-5Q8m`tqm=bwri#joQNgm=hHTP1ij<0 zqT;Vn4JF=fRw5&62HCL%7Ds(eAB%dCtV6BHVN|*6HvR%N<5YXhfO4YZ1yCzm(L+Fw zRU=f#ZBQfYZjC_|9E=*^Bvc2hZT>zRKaM(F*KGQI)C8WQ>N|VQO8B8xv=EL%PXz)R z`Elzl)MaZ=U!yc%12cZTu+~&_j zwYLH@>-pbEz=wpB=*H8i$MFfOgLkMcaSj@jp&qMrsD?75I?83!3t)ZXMKA^j;{be$ z{jmEX^Of%wcGdHr@38r)cOq(O9${?^JYs%x5r;a>IgXkE=0kN@3pKC?s4Z-Pnt318 zN_~r(`AnO?9<@TpQJTM+GbRV!8r%+3K9W|i)sPA|m zZF;Vs%~lk`f~40+4X__-g~p*~J`J^1i%=b|wC+N+d&)yVhwV0M#!oQ>6Pz-8{tap% ztx)-$P!;1)D=;24vz1sBe?kr9A5^&nr_EozX2pEOd!r^Y1GQ3~-2`+f&Y(tk!}<)> zL4se*O#M*itct$Js%kD+vkD zmH1~L#e!ttn%7uon0)RLaC@iSPB_+8Xq7dUHHv>NKHG{OSd4UgatxEEXgrbEl~ zm+_o=Y`(GvqB^L68hJGgz}Bce9gcb&C!%IN9d-Jb;yGN6I^{#pn~(2FsDZ3UeSbKL z+Nv8^Q_p|e3ucBbusHGVs1D|#9+PFLB|V64yo>rYOMKCM56F)i$hWADC!y*s#9Fu) zbtn^EG80IH%Fl)#&9E#16=;b5*b21*15h&_hFaS3HohG7xNbt7k<-`{AEIX1{C6|J zDAd`SVqJ(j>>I3me&_jD2Pa6-j4xm(yoOrR%9qUa5I0eN$SC zdW?TY9m}dzfN%r5(2RYs)L!R3M*~Fov1GuzhDr)Kn*M)Pb*;?Y=E6{HEMuqZkSKg?5OtKSP6qrk7+N|z&GL~eg5wy(4B;ko8}DcKy|bq zRqz-_<2lsRQS(oGI8g%|hFXD9sI#yLHKEO@JwA#$J6BL=;u%)Ox7bk6f5lrSV*+Z= zr=y;R6{wkRM0KzqHKQx2h902GKSP}%pW9~7Gol{X^635WL6z%|8qoKs!#*E#(7&^s zfcESNs-p|26?lr;qt~dz>3_%UVSUs9TA&`^j;N=hALqRz@;oBs|qf%JDx z{ha90ObZgw;V6k(@=B-%>!D`Q8MX97Q6t}o8sJWwzaKTAKTrd>jcWH3s@-JwOn!RQ z0J5W2qToHA|NI0hk)TuA4YgMzQ5EN)2DBX2;3m|b@39_4eMLKNHq(8NS;BlIXbUQ0Qw*{3#nw%zjt`znMJ*bXtp`W?U6@SVB-s+8%Y7x}sKUENW((ZT?P$?=Lbwi9?lS63 zJVu@JH&_CFADfk`ff{%>RQ^Eg4_JWsYSfCH_sa8kjewT?9%|;VQ4J(|V$6gZPyrh+ ziF1k9#G-f`HK6qW7~QCu2ckZvYoeCA8)^dmQHORsHqrAxg@Bgkt}XBqD-uuo)a+$V z)SiW)2G|*Onxjz-4@A8;#^NYkhMGX&Gc)k7QD>qKs-H$U9Xp`+=l@p(v;v8rn+7wX zn|J`0#o9LgThzd&*!Zug8QnlVb}vu^O!LAlady5tmGDyXNSE~>*ARQ+#JGmS@0Xf|r=)?jtCLKEnPrP1Db(uT#K6NY3mi#fF7a-l>I+rAZkM8Q7hEk>OpPM zO4MOJjH>53LqH?Hfm+(9sFA-xJ&tMKm={YH)Z-X~p*R_J7M`OzEc({G3F~2D;sa0} ztwarc3u=oFqW1ng(yzz4LqJRRuPu=Dotbe~)Q3=c48W$S5f4T+Fb>u59Mr&9+4v^Z z8Q70n!DFa1brrQ@FHlP#@Lux#6(OJjltCTFx~O+|dsN3mPz^0Zt;{Y|$7fI-T}RFI zuJsveML(csoce?L>~N#X=d%W(_xFD#ZGp-*qb9235Y&L;P)q+k`r~rcN*u+!cmXxA zcc?x0{b+vH3r2Mqih5OdL)DvxTCt_*(MZ=3&z4!kBx9K z_QDrf4nti&&NZBawQzuskM}VAMfejjX8<`g^e*~A|LNNzXKj2J^*!iDt@!O~YwN7DXI2aoe zUx4cHAB@N3DSfMV;oyc*(_gJJjA^N^Q#h zg__Y*)QXf(W43N0x{1%j>i82TzyxW1^eM={|0SRfQ=%TDjHrfl*?1|`0IHw{*x2T` zK|R-zm=8yyX1W%&^vBSRH&IWK%h$*Irp|Z88e&5&W&23dZ_f~sDX4u)sIF^Y!GTo#%1RD z*Qe3~64cRd)K{mIs3pFGIq^MeU^%iF15sxp7`4>(P#v{IHQXJ&TW6huDz_9hz>TOC z*pr3lUnBdC1nuD!)VI}Fs2ODC|F%?TA`hy8qNwzWsD^5xwxF@KHEO_}upN%T@pub0 zz^H5{{w+==p4#)3kN4NW_nnC-FC1_#HMP?%6}&R|2Wr=9PO5^@2&4)5kfDT~RNNQn`Gb%Xk7? z;*#7x-v4mnJ*IT=JDof}-XB2r2I>{h^S7FSPUSUJLyu8=_y(I`wjdwx$7~cbVrLrakX}VC`76}f$Y0nT z;!@V?)+XpZ6R4FNf%+`DhHdoxH!ET)ZbY5l{n#4MV;?M1)C_D9h7n(ff#_Szd`Nwb z`gYp~HIOsd39q4^s>;R9)6fv}67Ph1;f+D>fB!p=Ky4D1qAEN_9me-q6qA?m@qUpg zk6NLss6*KR^=52=D%S=zknyN59)DY(qdrUCpdQ;#sQPJ3^8A+|kfo%L_m@Z^sMEa( zwYP^+d;JgU!=p?ovzLQ0g!oRZf=No72J2WGqbAY@^%QkSHx5G$U=ix+*i_m+{})Nn z%x<8b>%UPe@Cvom3CploSPX-30?xQ+S@YO+My>y*hA zp#ooAKT%fKO3E)Iyw0|xw0xB9MBOU-?{9ylz%?Sjkl4W%I&K@AL&bii6(PSFcRA9x z(7-gp-`ft@TA$-8Ll@$; zg~k)8Mz~zOZ(Bc4ZE`|vb9u;FPK~~{S+zBa@JZZ-QA*(I&YgsN8udonx|6Vg4XaFk z+G$LD1>x$1dF?uBxmVK1E7IZ#b9wkq%gdI6K^h-d72IdT$(ie6Q_x9IBR_M0zIGC5 zYCG&{%PTJ(<>%V;%B1%u?JMf7wrMW>S_Qez>AWl;VIKv)p|j3}7uv@1P#}`VN`KM# zf0Q|G2b2wSkk`pJ97!9qi1(mO2|G}I!XzMEhcZ#*1>h*|?3CF<-eK=~C9sIQ8yVFx z8|vD}&8yK_#Le$yygxxGy}th7YDa_XN!K_31%!2dz$Bz4=AOVkmAYZJy)}ft;qJ`6 zmOBOcRT7h_kB{8=-rL0g{o%Hawo-#s$V7Y`1`*eFf_Sa?(Ds?Kq^9;UQaWNiOk_)x zil5Tn&oh|RFR#qh^PxmO?w?tS@9+)&z^%8|W%4_4_ac2WX&32JR{(K0ZPg{biZp&V z=%gTifN&e-aqId>olm4)C0to&tO5z$$Sg#o%WNSP3?=@Qye6c5OGDEL$C3Vo^uxAX zG16br*dXpzgg;;U#92fXDr98*V)V;Y z!d`PJsBaokg1o_Xf1M2#Xe7=5pzb@$=|M?0g|32l`*!m3#>k2iP zKQB@77zO!ttM~E{zDU9Qq;DV`ZYyQLJKQ-L)J4j+)!@n3wV3#6?#09x;I(*HXg1GJ z#Q24s_X9T{HTM&qPU*bdS7?0}_jcR5J~UquPD`uX2iU_q&(}uEt+ONA;lqE^bAg#c=M{geQ<6VC(r&ZYp;pJy4qoY$sD!I|}Q1%e|Gf%nYC*4z~kQ z-U)7g3+(*{o`VKQP=7rR@;F%y8H+iqf}eM7pQf})+~*eNGnAC13h1h28{SL&JL2)gZ*cG8 z4rCy@1`=*)%PW4I`YlNNd<`VNlz15u#&YMP-pKe5oilwCMQT&JUQG#I5rn(qU0Q2S z*oXVIH;4B*WwTSWH}^Es#t?r@y%;QoCj z_;ul#JmUy`%dKlIr4Hh4O6{feRpQ0T`;NOdX}V6~S?*S(4Yu{tP%aJOP+W@*>9HF3 z8B@jk=U2qPyw=lx3;iRGMKty;_b=rBNTHmPyFU$WqQNWVjpnY)t*bm~)2Vy_KVR2~ z|G-_4I&qX+Y%~05uRdwIe&=pT-oM22lU~-FYCo{9*~X`nQI+rjZvDuc(N zMi=gcr0E(gzhrU6iz{w&R23wILp& z%m+mD6Ns)UG*lXQV3_S}uWdY%3SV>Iu<>n#4-pQboSX3Y_*C68c}^43wZ)d2Ol~>4 zO~z2tl2;m=kv|Kok+;B>kM-7~ELJ6tAECWh2I~RZa}%yWp00z$ClIbk+rJZ@gn9M* z|H>57PyhPe#z-1(>@CiBB?^5Ve}EwlvRx|UDfdQO;s;9HA)M%o{JeB=+vW?c*lt?Z z^))?Br)*POK7#r+xLw4<$ty~kJcKKfcFJ3W?=Sr1?yRGMKDH61pXGi{g}dAX2+bIDvo-&)B@5f``I{B*m5=;T z6ZHOqATzC2=YGuXOWD`7lbQS_sA~rGKAE8NJ85kxH;`MuoZ#{}?Pzc@38}eL*-G6> zn{5X&$_`*Zc|VX=g<7dF5$T(0ycP8_*m^mLr?chHlU{;y{F2OjMUeL`p>N1PL|Pj> z$Y1X|BWy=8rkwY`$-7B|mnk%xLVdX-x%Uu%gtKW#S4HZ@5a%zmoyU}4LA(TIek7iO z@Bs3j5pP7eE@^)fu7)+SH|i>-pMG>Lv^FQ)n2MjT-{Q~q^z$^L$|L+;nai?B{}$zOw6X}mw-#)Nh4!M)shDOboO zIV-(+3@eyU7Est9Q&O=Eg?bVHiGo)tG=#Ky+($_7g5}T`+fn8q`OC12Z8R-;Wyy14 zd)ljoy1G!NC->*;51Ve5h1C3H9N%km|9~=J7;_IC+{@( zAa%>tg>Xvp>d`}f!n*uzn{{w2@v`I{CVZZIHt|0C{bynd&m>Zk%G2Y|M)?1yQB7BW?k2YTzxxc?$=5A~w)vMrO`WY!VxOH_Qrx$6PC_UT`XA4kuDe9aj{{eY-Z265ORv>*0_hjxJ}|H zDm*9S2f|-of01?|{&XLHmZG@{-2B4V`+u(G?VqAANsFYFr=)+N_5DJIa@Tg2+jgLiCzAL1>PdJGbrRTe56CF?#Q;ZAZzZ>%zFVK9 z;i5#cP~aOXrKE5j+tPgE&nVLz|GZ?{QuJ`mUSHI;uP{cpl$zi3!_nQVQ9 zU(;SJ`MqsgFVYIwHY({g(t!fH;xScxuh?vL>QMX}lj!|(De)q7HxKjC%oTjW{rMV3 z+97Hez!Id7p=>)c-^QPf^$W>D?7A&Fi4xz_`BXcA5ZiZB8=peHt|{DK(b6sQgQ!1+ zJ1Oy&@x|gYdA1QMPmOqNL5*D86^ZAf)@s5;8Tyt#Y>prOg!M{PMJcO$P!4P;`2x-Y0K8}_M3uDqTwXm*W)Yp%k6nd zax+_XG+_@p_o(7y$NUv}H%V_pd<$0pqMPBwC(%Vao0gushq-^@jwP)wCMACiKE#5w z`^FAuH+387w@o!{!Vx^f9YV!>+-V8V#+`Vadl8LXq>=s%E%gFLwp9| z5qO65(zZ-5($W@*91osUr2fc_XO^))E`V*eFi&({DqVY(=YS}k}!oxV(xpkC0%@021#dxg6rG&(v9kBoD73y%&jynSvp zS4hH?-9lsjZv+o&xlSfZRU)WZ@u1?x+(kKPl+i$G*lU;P>Cjy<$1)E)M}A%q5c_lLaBY-2>H=%^TX@2F^ZYPn=10ed zZ+GYO$>K^8;%%%OorG>L8{qReai@k1JkCv{?7L>B`2=dGVnX|CEZze^>rAYF9D}Dz zw${7l5uJJx?HwIXX^vJTr;DZ{qu6jWPtp(VD!e^UVV~p)lWHDOar7Hh+-E_e{|5^C Bgu4I$ diff --git a/locale/gl_ES/LC_MESSAGES/django.po b/locale/gl_ES/LC_MESSAGES/django.po index 3dcef726d..0212c0acd 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-12-21 05:43\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:11\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Galician\n" "Language: gl\n" @@ -102,8 +102,8 @@ msgstr "Orde da lista" msgid "Book Title" msgstr "TĆ­tulo do libro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "ValoraciĆ³n" @@ -141,7 +141,7 @@ msgstr "Advertencia" msgid "Danger" msgstr "Perigo" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "Denuncia creada automĆ”ticamente" @@ -205,26 +205,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s non Ć© un remote_id vĆ”lido" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s non Ć© un nome de usuaria vĆ”lido" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "identificador" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Xa existe unha usuaria con ese identificador." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Xa existe unha usuaria con ese identificador." msgid "Public" msgstr "PĆŗblico" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblico" msgid "Unlisted" msgstr "Non listado" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Non listado" msgid "Followers" msgstr "Seguidoras" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Privado" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Activa" @@ -352,122 +351,143 @@ msgstr "Dominio aprobado" msgid "Deleted item" msgstr "Elemento eliminado" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "RecensiĆ³ns" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Comentarios" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Citas" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "As outras cousas" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "CronoloxĆ­a de Inicio" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Inicio" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "CronoloxĆ­a de libros" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Libros" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (InglĆ©s)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Catalan)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch (AlemĆ”n)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (EspaƱol)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Ɖuscaro)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Galego)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (FinĆ©s)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (FrancĆ©s)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "Paises Baixos (Dutch)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (NorueguĆ©s)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (Polaco)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (PortuguĆ©s brasileiro)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆ©s europeo)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (RumanĆ©s)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (ChinĆ©s simplificado)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (ChinĆ©s tradicional)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Permiso denegado" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Listas" @@ -1324,7 +1358,7 @@ msgid "Add Another Author" msgstr "Engade outra Autora" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Portada" @@ -1451,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" @@ -1461,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 "AcciĆ³ns" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "LamentĆ”molo! Non puidemos atopar ese cĆ³digo." #: 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 "CĆ³digo de confirmaciĆ³n:" @@ -1752,7 +1787,7 @@ msgstr "%(username)s citou %(username)s" msgstr "Mensaxes Directas 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 "Mensaxes Directas" @@ -1945,7 +1980,7 @@ msgstr "ActualizaciĆ³ns" #: 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 libros" @@ -1993,19 +2028,19 @@ msgid "Add to your books" msgstr "Engadir aos teus libros" #: 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 "Pendentes" #: 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 "Lectura actual" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Lidos" #: 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 "Abandonados" @@ -2511,8 +2546,8 @@ msgid "Barcode reader" msgstr "Lector 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 "Usa as ligazĆ³ns a CronoloxĆ­a, Listas e Descubrir para ver as Ćŗltimas novas na tĆŗa cronoloxĆ­a, listas de libros por tema, e as Ćŗltimas actualizaciĆ³ns neste servidor 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" @@ -2543,8 +2578,8 @@ msgid "Notifications" msgstr "NotificaciĆ³ns" #: 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, libros, mensaxes directas e axustes son accesibles premendo no teu nome neste 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." @@ -2699,8 +2734,7 @@ msgstr "Podes crear ou unirte a un grupo con outras persoas. Os grupos poden cre #: 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 "Grupos" @@ -2754,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal, msgstr "Este apartado mostra todo o que leches este ano e permiteche establecer un obxectivo de lectura. Non tes que establecer un obxectivo se non queres!" #: 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 "Obxectivo de lectura" @@ -2793,7 +2827,7 @@ msgstr "AĆ­nda non hai actividade para este cancelo!" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importar libros" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Fila" #: 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 "TĆ­tulo" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Chave en Openlibrary" #: 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 "AutorĆ­a" @@ -3085,10 +3119,6 @@ msgstr "Contacta coa administraciĆ³n ou DATA_UPLOAD_MAX_MEMORY_SIZE setting.\n" +" " +msgstr "" + #: bookwyrm/templates/500.html:4 msgid "Oops!" msgstr "Ops!" @@ -536,12 +570,12 @@ msgstr "I moderatori e gli amministratori di %(site_name)s mantengono il sito at msgid "Moderator" msgstr "Moderatori" -#: 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" @@ -906,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" @@ -1042,13 +1076,13 @@ msgstr "Luoghi" #: 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 "Liste" @@ -1324,7 +1358,7 @@ msgid "Add Another Author" msgstr "Aggiungi un altro autore" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Copertina" @@ -1451,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 "Stato" @@ -1461,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 "Azioni" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Ci dispiace! Non siamo riusciti a trovare quel codice." #: 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 "Codice di conferma:" @@ -1752,7 +1787,7 @@ msgstr "%(username)s ha citato %(username)s" msgstr "Messaggi diretti 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 "Messaggi diretti" @@ -1945,7 +1980,7 @@ msgstr "Aggiornamenti" #: 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 "I tuoi libri" @@ -1993,19 +2028,19 @@ msgid "Add to your books" msgstr "Aggiungi ai tuoi libri" #: 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 "Da leggere" #: 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 "Letture correnti" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Letti" #: 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 "Lettura in pausa" @@ -2511,8 +2546,8 @@ msgid "Barcode reader" msgstr "Lettore di codici a barre" #: 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 i link Feed, Liste e Scopri per scoprire le ultime novitĆ  del tuo feed, elenchi di libri per argomento, e gli ultimi avvenimenti su questo server 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" @@ -2543,8 +2578,8 @@ msgid "Notifications" msgstr "Notifiche" #: 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 "Il tuo profilo, i libri, i messaggi diretti e le impostazioni possono essere consultati cliccando sul tuo nome nel 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." @@ -2699,8 +2734,7 @@ msgstr "Puoi creare o unirti a un gruppo con altri utenti. I gruppi possono cond #: 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 "Gruppi" @@ -2754,7 +2788,7 @@ msgid "This tab shows everything you have read towards your annual reading goal, msgstr "Questa scheda mostra tutto quello che hai letto per raggiungere il tuo obiettivo di lettura annuale, o ti permette di impostarne uno. Non devi impostare un obiettivo di lettura se non vuoi!" #: 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 "Obiettivo di lettura" @@ -2793,7 +2827,7 @@ msgstr "Non c'ĆØ ancora nessuna attivitĆ  per questo hashtag!" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importa libri" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Riga" #: 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 "Titolo" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Chiave OpenLibrary" #: 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 "Autore" @@ -3085,10 +3119,6 @@ msgstr "Contatta il tuo amministratore o 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" @@ -5776,106 +5826,108 @@ msgstr "Attivo l'ultima volta" msgid "Remote instance" msgstr "Istanza remota" -#: bookwyrm/templates/settings/users/user_admin.html:82 -#: bookwyrm/templates/settings/users/user_info.html:29 -msgid "Moved" -msgstr "Trasferito" - -#: bookwyrm/templates/settings/users/user_admin.html:93 -msgid "Deleted" -msgstr "Elimina" - -#: bookwyrm/templates/settings/users/user_admin.html:99 -#: bookwyrm/templates/settings/users/user_info.html:38 -msgid "Inactive" -msgstr "Inattivo" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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" -#: bookwyrm/templates/settings/users/user_info.html:46 +#: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" msgstr "Locale" -#: bookwyrm/templates/settings/users/user_info.html:48 +#: bookwyrm/templates/settings/users/user_info.html:42 msgid "Remote" msgstr "Remoto" -#: bookwyrm/templates/settings/users/user_info.html:57 +#: bookwyrm/templates/settings/users/user_info.html:51 msgid "User details" msgstr "Dettagli utente" -#: bookwyrm/templates/settings/users/user_info.html:61 +#: bookwyrm/templates/settings/users/user_info.html:55 msgid "Email:" msgstr "Email:" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:65 msgid "(View reports)" msgstr "(Visualizza reports)" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "Blocked by count:" msgstr "Bloccato per conteggio:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:74 msgid "Date added:" msgstr "Data di inserimento:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Last active date:" msgstr "Attivo l'ultima volta:" -#: bookwyrm/templates/settings/users/user_info.html:86 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Manually approved followers:" msgstr "Approvare manualmente i follower:" -#: bookwyrm/templates/settings/users/user_info.html:89 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Discoverable:" msgstr "Scopribile:" -#: bookwyrm/templates/settings/users/user_info.html:93 +#: bookwyrm/templates/settings/users/user_info.html:87 msgid "Deactivation reason:" msgstr "Motivo della disattivazione:" -#: bookwyrm/templates/settings/users/user_info.html:108 +#: bookwyrm/templates/settings/users/user_info.html:102 msgid "Instance details" msgstr "Dettagli dell'istanza" -#: bookwyrm/templates/settings/users/user_info.html:130 +#: bookwyrm/templates/settings/users/user_info.html:124 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:" @@ -5931,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" @@ -5988,7 +6040,7 @@ msgid "Need help?" msgstr "Hai bisogno di aiuto?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "Crea scaffale" @@ -5996,66 +6048,58 @@ msgstr "Crea scaffale" msgid "Edit Shelf" msgstr "Modifica Scaffale" -#: bookwyrm/templates/shelf/shelf.html:25 -msgid "You have have moved to" -msgstr "Ti sei spostato in" - -#: 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 "ƈ possibile annullare questo spostamento per ripristinare la funzionalitĆ  completa, ma alcuni follower potrebbero aver giĆ  smesso di seguire questo account." - -#: bookwyrm/templates/shelf/shelf.html:39 +#: 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:54 +#: 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:112 +#: 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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Modifica scaffale" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "Elimina scaffale" -#: 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 "Scaffali" -#: 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 "Iniziato" -#: 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 "Completato" -#: 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 "Finito" -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "Questo scaffale ĆØ vuoto." @@ -6365,6 +6409,11 @@ msgstr "%(username)s ha letto %(read_count)s di %(goal_coun 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" @@ -6667,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" @@ -6725,15 +6786,11 @@ msgstr "I tuoi gruppi" msgid "Groups: %(username)s" msgstr "Gruppi: %(username)s" -#: bookwyrm/templates/user/layout.html:50 -msgid "has moved to" -msgstr "si ĆØ spostato in" - -#: bookwyrm/templates/user/layout.html:64 +#: bookwyrm/templates/user/layout.html:59 msgid "Follow Requests" msgstr "Richieste di seguirti" -#: 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" @@ -6754,7 +6811,7 @@ msgstr "Crea lista" msgid "Joined %(date)s" msgstr "Registrato %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s non ha followers" @@ -6868,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:48 +#: bookwyrm/templatetags/utilities.py:49 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 692025f6cd100343dfcc44f5429bd67c521d3a15..1a92d92fe106735d258001fd68ee43e4740efeff 100644 GIT binary patch delta 30077 zcmYk_1$Y%#qqgDM3Bd!wB}kCqK|*l%;=$b=io0&yiaW(A?i9D;F2Oz|6nB^6dY*UI z;#|!2Pw(YEvo}f3_eZ>mKIVCJ?~V9TraN5S{TwF+ZqDjBWuiGwr8-J=oTfb-Cpk95 z1ULZG<0MRkTQDV_#ESSBOJbg$j#C)>V0PSswecP{!9u+p=YZpQojC-akkGid0xv>fs$DtUG2Qeom?B_VCu?*(LRu~uOViNjy z)({9H;Sg%X_puVD?XLok(-{kT9A^|JBz|Ck<7~&vsQgI-%?hl*n#7M_1`Hfz(o3T1 zHAM}$C#Jz!n2P?Lodgo$RZNC2Z9E2_y=*_yeEgnBk7I9D9%8 zjQB9nk!FtzQg|cjlW{ecqLO@xt8mU($C-#_|6u*w5xDe+<1E19;~Zxt-m;Dz?>H-n zhfQ!Cg3fi^haITB6SGY+KExfw7f*Ja`Pgs@2M@pCI_xpkY+1T##(!}e>C>mPWOE5r zp5Zu5%6Ve#G?Rlw{0+9jp0gaM1YXBpn0mJ348|GAVmV3vG|on)2hQQ3;ap_Wjt`y4 zaj2C{JkN1D;sP&$Dg^u)_77}`nn^>JqbN(7cp(Rec&){34{pW!82Fdt)Wcrb5YJ+E z3|YeYz=qfi_hAU8UFtaTFdTUTo#vPgy;lh6aQQ7WhoT?`5nqbwJ)CCDNBk)pT?*5& zAN{ZmY5;ezI2LB#65~K*QJrbn7ZbAKU2y_dMID695RMsCv>yRK5*AsPqh2&?F)HrI z=y(kM@f`Aga&FrALsYqUHvOwjkFv(3$H&;@Cqu1322?xwF`9;2mVi2_g1%S>gRud| z$04WzO~aVD0%PMQRK0x|1COI#EEg~i-nIE}P>=T)R6Ft3n)1O?OO=Cw8ZLnTSQ=wv zb=33P#M%Yb(GXMze_%%Z6E%RgwM8dU13QNr@C}TEk5LVN#4PApZ&orJY5+N{1u-u1(x`T7u4nyo5NJk% z1~M5#@gQo+-lMi4_69ysFg5Z3IJGbcKVn`?w$VHV;i!h!VnW=B{uqIp;C0l1@1eH( zzm2Sa2Lc~RNP{i@HUk)es<<7s0!L6YJcHBmGHM_lH&GV@HuK4e(YKfx??G+FQB*q@ zZ2E1~K%QcJeB&jc5&3O3GfIdWNFLNXybfvrT`&>$!7exfQ{fL(2dTE1Ez5>#xCp9V zI7Y#`sP-CRTsYzuZcRG%~2~k9;52{|BHYcUWF>S+j;`ER9CPgKEixhdzTr&1e`(qDCXu( z*?2dPGVv*U%zzG{+KaI9>&UTjo}k{O^ZucZp8wkfnqcw0W{DP}mT(hlMu$*`<^*a$ z=WPCMoBzhEW1;3$J1*;QKMgvqvJ5)p6Q7h9Ql|LS} zhjVOv9V&k}CdV_F9Ur60CEag66|K-s7ZHsEKE7rhasDhVK zhw&z={4?xidw;ks8{cE)I>ao%wdmv$ZHN)APMR?3x;4} zREOk=$Td^>99|DoO|X%Cw%oPZk00#v=dsI9z!npmWlfJSr&HGo%E zpChJVLe!Q7ViXKUo$f5C0p_vsk~Uu1S|8PJ8=Kz~^>`0PJ!Rui?Rn=A(B3SxZo-7b zkDw}CLpAge_1L__K#XfGd_)4+Q+Dwy+Sqg4fWXhoirT#TE z7kXn57)C&j$Cx27xvFSdiOo#rcfhI#OeHf}-!Beci z9*YVjXylEp9Z`EV0JVhUQ7bS9we*WoXJjv`-WAk`&qLG}e78nBZQ=o_2`01gbf^`~ zcAE81Ng#}btXLhj*Mrb~Dp03(6DGrBsDa$E`HxXc{1r9e_-D+F)1hXV17~9~REJls zw=oX!$6f-l34BC#C2A%eQ7hNm`Uh&y7ofIq3F^hO-o_(P z^&?U3-bK~-J|z%~zz@_wVx2WBkQCKWLDY=PpdQak7=$fRGZ=wtcp3)aJk*M;Lw`Jk zYUezvo$IKM?_nMKcRmtGPeS-PvjROaF7dIbJ^m9_VH0ZPM=>5opvv7wt;lQCfWFvx z%=2bq2~p`msDb4`)hmPU_y1Z1;*-z_wS-+zGwO-)a1d$$lTZyTLCt6G>~s(Nye=+UtQBABUl~W`=b!YDw2&DDFme{1Uaa z&i^FSGv|SpW%|L2{ds25S<}i2ZN?YNbA4f9!pQ zZ!h>Cw!y+zd313JmcS2K8Vf|SZ8!+ke%x#35GO{(vtOfC1@e%fr7Vnk3M!*kpgtzX zwy3kS6>W~aU z9h$MI4kudYp*mWPDz_8W(LvM_UqB5k=`FL8X;CW}g4)sos4Xmus#h1&=v1{Opo(Kr z1*c&ZT!g9d6$WC!Z8LyusD=xnR;U~%!@8)I>xSuYG-}J%pgP`*+JbYa2|mJD^zS?; zpbkFSj6`?LK$7En(lcTzyo?p`J=VjLcg;-aqE>1-YK6Ag_#xDU&ZAcNChAPw$3plC z-RD2gJu|{$n3jxcxB+|MIt;#V8n}p>c_gZ%2dF)Nhnm?})IbwFFnb<~e#8r+>J_)~ zO1PVN^#`oKMi}>@IV>qqOO*??w52c@%F8i`OVniErC zC5(>kP}5(+Ls?N3e#0nO1v6m{R0jhv4UR#rz-rVC z_h33ajT-Q4)D}f~YB~-?ZIw3*fe-@aF*^3flsFhQfce&4sIzeeli(Lr!wH_5hBBby zWl#gEiyA;b)OWx6r~&T49C#9A==uL*GyI;L0!c6y1u|n0=0WXcZKQ(J&Bh0yW-trY z@HU%&9QES4fI1tGP%HQfqvCt?$8T6q&ws2Je0G!23S;9g^uc4OiYGBIp2LC|{iRu{ zQrMn&CG3jZP#tD|Wd@oHwW5Vk|^6&Q60=jz4?}6T-=MANCawzk5Gs81!l!0|Cs@mLLKJH|FQlWadi?jfM%#I=xiN; zp~T0a_H;LD12WXWklsUe=)5zJbpWb-AgaBLsCIJM{QO=5TB=euqde+V zhodTXMh&b#YRQJ98W@9`$t2WFXQAHd%TWWnYkiNZ7vsHI**KV!cpzp+ZzTd+`u?bf z#$aNcg}HD&hTv_~*2Mi_%B4WfG%IQ#g;4pWtl_AYZG<`ly;1!vL``6wiF=(bHsK(u z!4ozfY2&vsA?dHJQ9s%xMGZJ3s^h%qt|Y31@~E>Dj(Two!#ubQGvmLQSkHgdPo{&E zs5f6IYU#sKOVtq7(RkDV=b~o32DLStQBTbtRKr&=5&C>Kd!7_EfwY(b^I=kKjPB=u zZvyIIm~{&36}kx3(Lq#4Cs8xKh??nb8-IwJ@mm}Jf)j{G|6+c}GZWR$A?qpBfG(mp zHG#(j)NqWi=6O$yzQnU&HO!7`U@&SRqp>hfMjfs*m;f)JR_GyWfFDpR`3>FnznR|& zB}ScvN#9t1Jr?sx&6$@5kEl9^ew8P=#IyoaY9T%JUwbf zN?D3N?`*Hs9;-V;W3}naIe6I`#EYd-w-x#FMcF&PKgpzM(#p z0(^~WPy-3I7RDgrWl;lagIcj}sI3@;={bMSR03M6?Wm4!pu5zl5x+&vz&DD=-HO<# zj#6Q5%!J9%i{UsMOX3sEh#`I+_rs?aYGsF@`dNZ8=-*jGKr`8j+UujJj<2GY@DXaM zKVo7`5Y^-UyC4f{W))B~tA!ePGgJqiQT2PH4)-VP=Q0^~S4*8fa(KijBAN6{z}0Q0+d#EchzA$LlUxU<}i7 zX4J@YqefZ^HGpuNUJnNlZ-?#~LHCTH%KOGNTNr@ass z57Z0l0c!7k6Pd>^4Qc=_aWVGA7?>ilnQ#W={o-|U5zx%@p$}L4x{V&&*TPp^H~d`Mp_Cr zpvu--sE!+9I_!vA^2w-~u0*|>|3MwL^Qc33&BouL2KEKje)Qy&)AJvnfKFu~>Xn<> z#&e(=D1z#^ChCy3M0GF`HNaV@Jzt1wr$(SjZ-$47w?mcBk;0fCb>>Q-`~ANXff*#! z#|HQs^(j_4r5SN`RKrbdyrZ=r29iF?#{WXC#0Jz14`T+5Kn>tM>g@cm`Ds(}{A}TK;womuTj(xXYSU1B)Y%BM@ocD9cOKMZRSwlrZ5!{4I{l+j1Dubk za8qipnb~;~v?RAs4LwE8_#5ieE>@7KmZzE7T8VY2 zGw?su*4^W`tn#L52jXKQ~X(d zzef!)TLzDF4@aX8ZO4or_gA{J@F4MLI9AX9hD;vk5DA4co6mD6i^thQybgXt|E%WK z8!MZ6^VP)zq>sX`SRusYG{)Un8UwR?+@B3MMeXrQ)T{g$mcTDq9gF19E1KtT5`okt z{Dbk6QXUs3qNq!MGo_QV%f*^M{&Oc|FwGS%TSc zJI2=Yf1iNPz#G(I`ex%X_^SfFXcA&Q%#Yo03Tlb{!c4tpsIB`QYhXXr%AB$J#q*dM zS42%eS9cJ(f$c60SkL`#+)H1BvsQhC@+j zsu5~JEl`K8Gx}g}%!U2(@%%R@u!aOZW^wbIifOHxP)nN~^;8taJXj7}<3LQ0_b?O2 zDBy8_bQ_8lh!4S1cnT|HKtU64jB0OjL9ZF%Y7#VnZ5V_nP)qvM#y_EEl)R9s7=)Tp zW>k7E)Y9g|hSYq$ThJ>(WBn;wGbiNpo7~ zVMX#cqF%Y*P!;2p@;JLNC(guYI2nhR_PAS`xQxgB+tI#wlJt~iJ*o({V~vxe^$R^-#~d7xis<4XXTMbpQVMCIMCWjv8s=nmm^njMs4~>Mk zi}(fnj2-KnS99A29;ZVTmb{@kTw|M>v+x2BQf^f5_-eLIhHjQA^5y&dg6&Qk2#!Q*tt z)W3V&KRlj_M~Ro|Xg*u~JDK*+<08^0boRJ^#+S2;*PPlTUCh_vx?Md^XA0aw_mFk- zxPNFg33b@~x|{M-QSsm&CcX(f5HHiy;|#}*I1KalG9S}BQTZi$n-|nt5vYRRLFV*6MSbnAz(5<}Qq=pxcd+?1Y>wL7$=DJ=5?)OWssu_iwlqY@86_xpbsfgB_hK|MYlQ5D8wJY0Zk za3ku&=#cdys^fdskEn97|1ghZYSd$02vx5JD!&D4V!bd>&-o|<>gX>e;1<*i;vA~N zQ*_@CSb%uqaV9++^}c9MYFaWiL zQ&A(HgUVlxYUqSbzlX7jzr`T*OfdgmNQ)X!MpS-Y)C!eCwO0oVVjI*Kki`>t{`Dq1 zO@cc3f~t^cq8Vvsj3C|s^=i&K$)s1os>BClEIf-^sef(!C2GcBPy>oG*-R_}wjdse z8PGeK$4SrmG7>bxd#DEAq7Iug#k`0T<0hgTFe<0KXE34F2dBf%S#}Lz%|s~e?@n%W|)uJG^iI%DNKjw&>!DfeP@~h#6#_A zFzWHjfm*RVsKZQAyhjTa05QX5;$vtd9_EP+Aq71Goa^xJpnCc1Zoc-T3@4H z6kkwF8hephp;V}u2cr&I2x?FB+jwbAL%b?#KwVK=I2hIbcSKVln4D~zE>1P_tlJA`Uj}3{_z*jzeW~y ziAR47<|IH3qyuWky-|l~4E~NQPz@(qYM$R5n2C68)T`Tzn&Dj3fRMI07~Ed8mOc zMGa&*nRKb_1J^g^u(PxEeI2LL~DNs*EPSn7P+x)6F-qhxIw&`Bf(=iFP z;& zLbZP!)!}XHTV!j!PPA2~;S8vPWl&9=);ptv3~uqS7;?$`!WpaMUSo zVdDd=6HxeE6Lka6zX~SbU}jPPHRGzNEoqGzu{-KZ>KxRJ_u2R* z)Xcx2X6m=mY+)kQ(~%C99*UZ1Nz_)=z+BjGBhSB1^%@ei^ruiud=K?}`}}RTA_r;( z@}UM$0X5L3s58?WHINZF7AK+xkbIL}IdoUf8jgAlTY3o;ARyJi4%FTsL{&J6I#f4N zr}_zM06)+@T$@b?DNrkw1GRE>P)pwu)m|6WO7uYuY&2@%-kAh6 z&;J+#TDnQ7Jzj!(K6jw@>Li9?q)m^z)2u`q>`HoO)QZhPt<*-;mTW_P2Rw%Z@hxhl zy6rOgebIgXrxI{GM$KdgY5<3=mr+aq7&Xw>=!1T{&Dn{Ls+R%zH=PrT+M;~c;;4a@ zM{Pk>)IjR(=J{7fQxYm-YaD`q<0uTr`w+{2MC0!Cvzl;`*{8}(_18HW^YhmB%IQCoN&)!t_tPjt+@$U;%+^)ZFM|Mw(NlY}W4j1N(J>3`gG z7>YU@N9t$2O=fhqnCQLo(7sFjGs!uSDos>348Ru)5TSw&QOBRqm_QSIb7Yo4N# zXLNQ90eSg&9osOF6Y8&5;dZnMo zBKR6LksRlF{g2i5KwF9DtE`xu0uQA;0q(Y!L#qtdgW8mx$!umS2U47V;oeXQ<8b#wzY zpx3B3pWpw?kKYnnOQG8Hb|avMhN4dYJX8k z#=kHK_oF6u2Mgi{)WAY7oAPCle188!KqKjmdc%#v?6?JWc!P z+VkqDEo+N9{XJ3jy{Ii6ixqJOR>C{zujfCNyJptqC`QJ=HGdO}e&Htj7{2i)7+<#3& z$xtJ&hdN}-P+v^8p$2#uwH0SkhwHh`k8<4%EItO29*EkC!s!0}UsVEWNa&32Hy705 zS&4d%_n>ANfg1TG)Ruikm5+VHY(;w1*~o_4%9^MN3`Gra9ID-!r~$0L!Sk=cKO|@` z&!Lw5D(Y~>zG-F{h-x4+YKg;8ds@V%mq)cz6V*W*)ByUU+Ffbgh+3f?sDWL&={4W+ zZjqo4zM>kAcFR;ufa)+1)o^;$W0oJaRSi)q)Du;Il#NfZ@g=C0TaOyZRvZ7v#t(Z5 z=*@H*)$udyM^uARZktmb7qzD;FbH#Fb*zb+`Eu({)KhR8bw(nwG(JVGNX|QEz>QJ) z-Yx`m*oL4A&OsHth5i`lu6aMCKvl?x8rW~B6{&&hunp?VW)IAOGg0;bLCyRWY9%jP zuOlnxbsi8Za-v=&zo7=u$l3|jpcl25qp=W9!7O+NbK@rr!;t&- zM>D81Fam@1{4XY;j*g*TJhxCC#(iLxDm`jz@}g#1618PjQ7hF6bq405CbG`Pcc50} zBxc1IsCvmCnyoA#_56nu(Bszz)zKL1bktL@2(`x>P%Cs0HRH>uf#1f?9%hR9h_`!e zmVOaxK??f%#X;cS~ zFbKb*PI=0gX6B_)=~YqnyI6;yPX83tK>kE+-70K>o4o`y(xk7<$V;H&wNV4}q8`u5 zs8{c5n|==UaeEiFq@LGiD*{kklo|Dz5{Bxy0_v>PM{P|v%!b|x1d0;ag&OH+)J%Qe zn7?F5jEZ+hH82YGB3gjzc&qg=rY3$7wE}NZ9sB)f>Lo(0SO{jsn#j}Sbp{Yn2V+o& zX`YR5MHM`O+S51K0i(S&Th$%IiI2nrco{W-c<;;#=0dGpebj(@pxPOMTDdQ!qbjr?1WmGX*PWx zYUNI&`n&##=U+2sSSYCUQ|hfrH^2lbe~Ma?Yk7qeAK zQ1vpP4sAXR!YZgYVdpPA|C-5E60+lJR0EM%1MgsG%=^`B$uj(h_({}<&Dd||m3ss; z690}mgc-h@6)cNdi7x2AUr+;HiJHhRF9Ge%S=0b7VL|l!;o<*CfU|&V;0S7|pJ5}6 z!w+E8(eL;-jzeu#F^`YiK@HTQZiVG=DE7eWCWz|e{?;oq>a!yf_0&8O-m>HpIQCj#9)l1ImI~h*v;u zWlvQ515qnI5_R~-VH};VnFQ3pGMlj(HPXGP!*ddI;lHTQ?>Mo1+!srTwH)g3HbYII z18OUVp;lxjY5;3d1KNt3&_C!)|IP&hs&E-~2A#3`A{#I8mPypE9$%41XKeXt;cNsP1N3gMSWI8N$BJLO-WYNfE%E;up?@v`l8Ov z7%u_s=~SDr5VZxXFbH>G7mUP-STT`VnQJ(b_+#vkT@w4azleN>YPf0=V?ERgwLlG^ zKWYm`q5APoAdsKHJezO{wKw;%Ecz!kr@kht!|pf?KVuObl+4Hdeg1BIN<0bwLy&pU zH_*rZcrJjE#K+=bY?Z>td4UhGr9S`vm(s`m1Hyu-*b1Ka^H`n&&r|!jpX>R8eB3`Y z?24U94@u)zbmpNROP{npP6-S{J#M{FA5!B`Z_=e0j<+x~=1OO_x&bEF^WTMl8vX-| z;TIf)h0>cn+=JvS71^xiAOu64)BMq7K~^tb`v?hqO!vQ@;sn$tR$;VxHpk z@2n)C$7MU}@j8yR@Edl=8X3(JA4NSCX)~DtA) z-^h|Xmr+ki;VeA=8c{U@I@L{4ug>16Q@a>-syE{l+>IJ&)vTtYrl_;f33aI6pkA$? zP=_!|HXnx_b>d)73_uOI1S)@HHlBZVu!{t}U=CU@p&ERQVfYF=U~q^Tz+}|YFGj7@ zdDPZr%I@P7$F^7zS7J4Mhw89g4)eHIL-qH24xaxs1iU0@=@y~l>roZXp&rj`HvS0p zLVANC_ywC|=A33g@p&9kTha@aKMIw<2X)9Y24Doj1AHoA{Txsn|)7vt$z6fwNazB4f*vUxZUJ48)UWg9M;8Nm0uM~_p%nqcrZFIxW zOzc5kPx(^Zw`rr2ZRe476J@7z>(4r!A!?M0Z){_8DHMgll;%!L+6nTOQBGGO z?)}`Us1sou3$=Mia29FxsFzM{as_OZ&kyta ze?=Z~x1~}iDu*$HaKeGg;PNLNor;?Y|AV@!*v=-9_Z#7c)Ei8mFX2CIna||8U;5w( zX-~NIA*QP{<^SOQ;~b*UcM|^M9!2F%WHcphHH9Z~PvFjIJ5xnJ!tW?Egm6E?J;}d8 z+!x1j>l#hGEP2UjX9jma?qS5^o-J^=xy0*>vSarDkE$mm*&n+$%LL79ji^tM3rwN$ z1HTM%5an-iC!(CLjRxl}ZOY|S1r9&qa#MT66E5d~tAfH^P+(KcG=R^7QeePntyJ)uFAaSb_Abr2Ts71AGT}MlXfx+F8uB zBOgb`aVk}(;VHii;CIsAk#~Xe|5F+6A=EiboNq18U)=Snb6%3C??peaAGQz0H`0!- z`J}l=^9+&EM9Se9EMo_vLVE~D=PpabHSJ(#;b9tSWXoluP6^`Wu^Hub&95yQ^4j|B7L;>zbOe%Xz(?KE^^-^BOdn)!X>z0(NHqt^C^=aXOX7sEAhp64}ZP# z5E(_CwcM?2MkhPaTBNn1zwWd%j(P+5(TIC(B;gpDU2zU6lL>#Lz;P-*C9JChdAjti zF2Xk0l`{NX#)*kbNY}p@e_orYmySqE^12b$SDc?$F59NN{0dpx8+9AMqA?FunTQ$;?7Ap6?!k)4%A-@ z?iDnmiyxUf^U15ot?xd%Ivf7~zuRbZBKa3kS1#^j+-8gjpcN6`8>3 zC&}AIx~?mPbJz(g9##8)*k&q$f9g8rsWc7K&;dW}cdtL~p#CL&7%AUzGI{@!z5)|- z$K_7SU7ft2S6kxIDbw4grJ&80WG*1R8sVw>YNG1_ql!YI%@p2AS})?uxeE}#i4AZA z`L(#y6W&6Z!nW=f+ql}y3hg9u3G#0+_gaRJxEoXGwrxNeZ3x$*ab16t z--kMX6V6V#zP4^&!n&$*_p@nvs5hSYzc$a8db+%qY#=@vZ@72Z_zE(!+OP_~rJ*S{ zUXyaCXmC1rYr?t6n}d5PS6PL*%2IYXX+N)1gj+E1a#-Fb*4F!9S93DXP@xzmz=Sk> zmqv5opWIzY-)UzOk8n!TCfN91{Es?YxOEkygI6|>AD1`L0(hxA_*@-T{E@+ zS7}TazrJ#sk(t6~D$Sq!U+#1?5@gf$P=_4r5?{A#BqikRI&np4x(WsM&`vZyb$@AfUN%~^^NLmeB_b>h8AuEwpHsP$D zaSu9rOu>~l{Tbms-1&)rvSo<6R|4WoY}!gYkVe$!mkN$Q<&~u$Z|Hi;{Z^7#ll)Eg z{5jc)wBSBNMmq}hCOn(_HsOn;@k<}~>S6~JNL)YnO3nQjo$<36CkkoZRi84QnZ2&` zm>j>@dP@62xh32WDSKJ(|L@$ouG3Hs?hopa3N=VuNq8yw>xoa|?m^mDZvE^`R~GVO za_2Kq_kZ5V23=xMKMnQP+dh;ygg(-7>+((|@R0(#T2Z(nx30dVjl~`|UW^8E6Yj#D zg?j|~ZEPd;C|8ZUDzhCzUK#Fs@umSl3XTf+5`TY3MT@ zo+j-mwkEDClK3t=leVPQC!PnZm~8ilIKSI4zy5a4+5wiZb^c>8yUCADyfJn4|22+t z#THV%1r+eH@txR##%GfLne>O;x^`f5+)X2k+!UUD8aqRLu#NZprOg@SWhPHQ;{J-d zZvD*HvV7s*Z!?sck<4-2`RuHfR)?@Z4OO!hr(sHE*lP^&hlG1lCJ6U1$T_6lu=zh} zNO}#@Yuf~GUMf7}{&`)az&0YKNV|nmi1Y79_ZmxDC0n)*DXAIMGX|dC=4YW{UDrsf zVJFm`w77O6qsa@m_45+ux8UYjq^3}NTR{!z8o-^J&j05AWE)oc5B-Ph6X_#qED81g zAitz-I4xlh_a)*7D0h)^AvUic@#2K5l7EYO&GkPG8Jh%tZtkQbAti_=$%02oCJQi z1E@eaoI4unX{eonf(yy(Oq#Agxs#HX-l(-;GFLJVZu3I=*T%lb{cG4H^!mfo+6;P^OyA zpF-I|gp;GLql6RTcFKehzHG}WFAw!YN!N9n^xK4A5q8(VkZs^Qg~k&eX)8vjP+>Y> zL&3R(@8bgQCgg|W&#N!>hT1k-5l&0l_GI#Nd#4j|U2n*rfS;>G>aON4VHp(Ata&^Jt(01!r*Un!%mbh9|ly=0DM>Q-Ji>wv&6djaZ}w)48H) z$UDbflK2MhKget6C7~+!QCp!Fi7~i45|5-%2JUF&=f;Vo_vem9I5zpdr1!Fem`M0f z?o`~m4sj2o%n{<(snd=XTTFNr=^=zKV{-DntH>-yMh+6!kdT&mLma?8ibA{b*DEjO z5>Q6ha6CtTAHt^zPq&>%C4PYTGVRmJ?3FU5osEcoG+Kujh`X z^FNRdn^37XzP1(pi6^1q3KaVF+D3kHTSn=nsgs^^x-!uD&#NfmX*O~Y_fsa4v`d8l zM>rAn!c<<*-y|B;_rU7hH^}J3t?PfplT&!T?LcYMf9bps=~)@5uEeBQ=YB)lb>jD^ z8k6P;74EsDA0a*xe_m<*O#klxjL03^;D0!S#v0p#&nexMv?9c_ zk)E0G7+bbJX+d^CYV-o}^K`tGa!-htBm9xFy|6Cj-e5W6)yeyza{BjQ10tWfH&Zzm zg(_0H7hzr9Y)2+${@a}VSL9zKdI+Zz*VU2mI_|gJX}B+PH=z?<4Qcmx$~`CEn)Kq_ zmxy2Y@}I%BkP5~n9Gk)yur7tha{tb~j=UOnFcrvOOTF9NSxH|@z8~QYSQQuk(%wN^ zCoWzly{L^JqFfbj??L{Plf(nuNohD2jr_dok+zmQg1ZZqpHo&>S>lhm-*X3${+0C0 zgtK!OBHn^KAK}xOgf^p_YR<-A+E!8}KmGx=nnJqP;|?l?aj&LeZYu8c*|e-j$p)LA zN9?P#&70EmCE2z|`8)wJ{lh|X<_gIf8k944!Cax+{7QP}b>FsXi>GV-ZMOn^P6lpE K65^9T_WuE@CfG~> delta 30751 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 bH@9m@A10vY`-enzjT>8ZN7F)n<^2C2?yswR diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po index 9abce3d3f..2b37a592e 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-02 22:29\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -102,8 +102,8 @@ msgstr "Kaip pridėta ÄÆ sąraŔą" msgid "Book Title" msgstr "Knygos antraÅ”tė" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Ä®vertinimas" @@ -141,7 +141,7 @@ msgstr "Ä®spėjimas" msgid "Danger" msgstr "Pavojus" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "AutomatiÅ”kai sugeneruota ataskaita" @@ -205,26 +205,26 @@ msgstr "Susijungę" msgid "Blocked" msgstr "Užblokuoti" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s yra negaliojantis remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s yra negaliojantis naudotojo vardas" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "naudotojo vardas" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Toks naudotojo vardas jau egzistuoja." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Toks naudotojo vardas jau egzistuoja." msgid "Public" msgstr "VieÅ”as" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "VieÅ”as" msgid "Unlisted" msgstr "Slaptas" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Slaptas" msgid "Followers" msgstr "Sekėjai" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Privatu" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktyvus" @@ -352,122 +351,143 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Apžvalgos" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Komentarai" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Citatos" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Visa kita" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Pagrindinė siena" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Pagrindinis" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Knygų siena" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Knygos" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (Anglų)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (kataloniečių)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch (Vokiečių)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Ispanų)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Baskų kalba)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (galisų)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italų (Italian)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (suomių)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (PrancÅ«zų)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norvegų (Norwegian)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (lenkų)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs brasileiro (Brazilijos portugalų)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Europos portugalų)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (rumunų)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Å vedų)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Supaprastinta kinų)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Tradicinė kinų)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Prieiga draudžiama" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -914,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" @@ -1054,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: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 "SąraÅ”ai" @@ -1336,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "VirÅ”elis" @@ -1463,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" @@ -1473,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" @@ -1595,7 +1630,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Deja, Å”io kodo neradome." #: 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 "Patvirtinimo kodas:" @@ -1768,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" @@ -1961,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" @@ -2009,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: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 "Norimos perskaityti" #: 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 "Å iuo metu skaitomos" #: 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 @@ -2030,7 +2065,7 @@ msgid "Read" msgstr "Perskaitytos" #: 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 "Nustota skaityti" @@ -2531,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" @@ -2563,8 +2598,8 @@ 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." @@ -2719,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupės" @@ -2774,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Skaitymo tikslas" @@ -2813,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importuoti knygas" @@ -2990,8 +3024,8 @@ msgid "Row" msgstr "Eilutė" #: 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 "Pavadinimas" @@ -3004,8 +3038,8 @@ msgid "Openlibrary key" msgstr "ā€žOpenlibraryā€œ raktas" #: 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 "Autorius" @@ -3111,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." @@ -3242,10 +3272,6 @@ msgstr "Skenuoti brÅ«kÅ”ninÄÆ kodą" msgid "Main navigation menu" msgstr "Pagrindinis navigacijos meniu" -#: bookwyrm/templates/layout.html:88 -msgid "Feed" -msgstr "Srautas" - #: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33 msgid "password" msgstr "slaptažodis" @@ -3454,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" @@ -3530,11 +3557,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 "Atsijungti" @@ -3746,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\"" @@ -4182,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" @@ -5044,19 +5080,19 @@ msgstr "Serveris:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Status:" msgstr "BÅ«sena:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:107 msgid "Software:" msgstr "Programinė ÄÆranga:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "Versija:" @@ -5069,7 +5105,7 @@ msgid "Details" msgstr "IÅ”sami informacija" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "Veikla" @@ -5083,7 +5119,7 @@ msgid "View all" msgstr "ŽiÅ«rėti viską" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "PraneÅ”imai:" @@ -5100,7 +5136,7 @@ msgid "Blocked by us:" msgstr "Blokuojame:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "UžraÅ”ai" @@ -5257,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" @@ -5731,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ą" @@ -5820,106 +5872,108 @@ msgstr "PaskutinÄÆ kartą aktyvus" msgid "Remote instance" msgstr "Nutolęs serveris" -#: 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 "IÅ”trinta" - -#: bookwyrm/templates/settings/users/user_admin.html:99 -#: bookwyrm/templates/settings/users/user_info.html:38 -msgid "Inactive" -msgstr "Neaktyvus" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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ą" -#: bookwyrm/templates/settings/users/user_info.html:46 +#: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" msgstr "Vietinis" -#: bookwyrm/templates/settings/users/user_info.html:48 +#: bookwyrm/templates/settings/users/user_info.html:42 msgid "Remote" msgstr "Nutolęs" -#: bookwyrm/templates/settings/users/user_info.html:57 +#: bookwyrm/templates/settings/users/user_info.html:51 msgid "User details" msgstr "Vartotojo duomenys" -#: bookwyrm/templates/settings/users/user_info.html:61 +#: bookwyrm/templates/settings/users/user_info.html:55 msgid "Email:" msgstr "El. paÅ”tas:" -#: bookwyrm/templates/settings/users/user_info.html:71 +#: bookwyrm/templates/settings/users/user_info.html:65 msgid "(View reports)" msgstr "(PeržiÅ«rėti ataskaitas)" -#: bookwyrm/templates/settings/users/user_info.html:77 +#: bookwyrm/templates/settings/users/user_info.html:71 msgid "Blocked by count:" msgstr "Užblokavę:" -#: bookwyrm/templates/settings/users/user_info.html:80 +#: bookwyrm/templates/settings/users/user_info.html:74 msgid "Date added:" msgstr "Pridėjimo data:" -#: bookwyrm/templates/settings/users/user_info.html:83 +#: bookwyrm/templates/settings/users/user_info.html:77 msgid "Last active date:" msgstr "PaskutinÄÆ kartą aktyvus:" -#: bookwyrm/templates/settings/users/user_info.html:86 +#: bookwyrm/templates/settings/users/user_info.html:80 msgid "Manually approved followers:" msgstr "Patvirtinti sekėjai:" -#: bookwyrm/templates/settings/users/user_info.html:89 +#: bookwyrm/templates/settings/users/user_info.html:83 msgid "Discoverable:" msgstr "Aptinkama:" -#: bookwyrm/templates/settings/users/user_info.html:93 +#: bookwyrm/templates/settings/users/user_info.html:87 msgid "Deactivation reason:" msgstr "IÅ”jungimo priežastis:" -#: bookwyrm/templates/settings/users/user_info.html:108 +#: bookwyrm/templates/settings/users/user_info.html:102 msgid "Instance details" msgstr "Serverio informacija" -#: bookwyrm/templates/settings/users/user_info.html:130 +#: bookwyrm/templates/settings/users/user_info.html:124 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:" @@ -5975,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" @@ -6032,7 +6086,7 @@ msgid "Need help?" msgstr "Reikia pagalbos?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "Sukurti lentyną" @@ -6040,26 +6094,18 @@ msgstr "Sukurti lentyną" msgid "Edit Shelf" msgstr "Redaguoti lentyną" -#: 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/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:54 +#: 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:112 +#: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -6068,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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Redaguoti lentyną" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "IÅ”trinti lentyną" -#: 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 "Sudėta ÄÆ lentynas" -#: 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 "Pradėta" -#: 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 "Baigta" -#: 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 "Iki" -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "Å i lentyna tuŔčia." @@ -6423,6 +6469,11 @@ msgstr "%(username)s perskaitė %(read_count)s iÅ” %(goal_c 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" @@ -6725,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" @@ -6783,15 +6846,11 @@ msgstr "JÅ«sų grupės" msgid "Groups: %(username)s" msgstr "Grupės: %(username)s" -#: 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 "Sekti praÅ”ymus" -#: 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" @@ -6812,7 +6871,7 @@ msgstr "Sukurti sąraŔą" msgid "Joined %(date)s" msgstr "Prisijungė %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s neturi sekėjų" @@ -6932,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:48 +#: 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 dd0b3c670c611985f9123b9797a7153e87f06e20..2c66d828b451b562d2bec7d4c340e9fb642c38dd 100644 GIT binary patch delta 30917 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 IeuYy0AJj4w=Kufz diff --git a/locale/nl_NL/LC_MESSAGES/django.po b/locale/nl_NL/LC_MESSAGES/django.po index f37532b2d..06ff309e1 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-12-13 00:06\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Dutch\n" "Language: nl\n" @@ -102,8 +102,8 @@ msgstr "Lijst volgorde" msgid "Book Title" msgstr "Boektitel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Beoordeling" @@ -141,7 +141,7 @@ msgstr "Waarschuwing" msgid "Danger" msgstr "Gevaar" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "Automatisch gegenereerd rapport" @@ -205,26 +205,26 @@ msgstr "Gefedereerd" msgid "Blocked" msgstr "Geblokkeerd" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s is geen geldige remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s is geen geldige gebruikersnaam" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "gebruikersnaam" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "Er bestaat al een gebruiker met deze gebruikersnaam." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "Er bestaat al een gebruiker met deze gebruikersnaam." msgid "Public" msgstr "Openbaar" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Openbaar" msgid "Unlisted" msgstr "Niet vermeld" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "Niet vermeld" msgid "Followers" msgstr "Volgers" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "PrivĆ©" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Actief" @@ -352,122 +351,143 @@ msgstr "Domein goedgekeurd" msgid "Deleted item" msgstr "Item verwijderd" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Recensies" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Opmerkingen" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Quotes" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Overig" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Tijdlijnen" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Start" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Boeken tijdlijn" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Boeken" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "Engels (English)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (Catalaans)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Duits (Deutsch)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "Spaans (EspaƱol)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Baskisch)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Galicisch)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Italiaans)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (Fins)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "Frans (FranƧais)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litouws)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "Nederlands" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (Noors)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (Pools)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (Braziliaans-Portugees)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (Europeaans Portugees)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Roemeens)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Zweeds)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Vereenvoudigd Chinees)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Traditioneel Chinees)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Toestemming geweigerd" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Lijsten" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Omslag" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Sorry! We konden die code niet vinden." #: 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 "Bevestigingscode:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Te lezen" #: 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 "Aan het lezen" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Gelezen" #: 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 "Gestopt met lezen" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Groepen" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Leesdoel" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importeer boeken" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Rij" #: 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 "Titel" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Openlibrary sleutel" #: 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 "Auteur" @@ -3085,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" @@ -5988,7 +6040,7 @@ msgid "Need help?" msgstr "Hulp nodig?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "Nieuwe boekenplank maken" @@ -5996,66 +6048,58 @@ msgstr "Nieuwe boekenplank maken" msgid "Edit Shelf" msgstr "Bewerk boekenplank" -#: bookwyrm/templates/shelf/shelf.html:25 -msgid "You have have moved to" -msgstr "Je bent verhuisd naar" - -#: 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 "Je kan deze verhuizing ongedaan maken om de volledige functionaliteit te herstellen, maar sommige volgers volgen dit account mogelijk al niet meer." - -#: bookwyrm/templates/shelf/shelf.html:39 +#: 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:54 +#: 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:112 +#: 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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Bewerk boekenplank" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "Verwijder boekenplank" -#: 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 "Op boekenplank gezet" -#: 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 "Begonnen" -#: 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 "Uitgelezen" -#: 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 "Tot" -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "Deze boekenplank is leeg." @@ -6365,6 +6409,11 @@ msgstr "%(username)s heeft %(read_count)s van %(goal_count) 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" @@ -6667,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" @@ -6725,15 +6786,11 @@ msgstr "Jouw groepen" msgid "Groups: %(username)s" msgstr "Groepen: %(username)s" -#: bookwyrm/templates/user/layout.html:50 -msgid "has moved to" -msgstr "is verhuisd naar" - -#: bookwyrm/templates/user/layout.html:64 +#: bookwyrm/templates/user/layout.html:59 msgid "Follow Requests" msgstr "Volgverzoeken" -#: 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" @@ -6754,7 +6811,7 @@ msgstr "Lijst aanmaken" msgid "Joined %(date)s" msgstr "Lid geworden %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s heeft geen volgers" @@ -6868,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:48 +#: 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 ed03ba8c043a6f944b437ff285212d5c51d40754..9fad84bd2222cd9495f1343c1ba14f7787d1aec3 100644 GIT binary patch delta 25298 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 delta 26027 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%0D(|Suh;<% zwKeA{V$tODQ2ycSNInU76Y9Pv-q)4|kgr7j#`xjdL&CF}%EL%R zb3Y=j>pl-v;?8aJm5IIK-a`YC+#g>#Y@I^XKSEhs@+(M3+j^hUVLk2+#Mf~z<32-q zM#>j!|8+Ga&=QjqtVe}-@`;M^U|u`oUgS4XHibHIn3Ovw&*a0&wzFB}6Uh%oT}6m5 zC7+3OZ=N5=y^Z_Bl~en#t0|SfQ|A;8Bz=zb7j%5-qsprHJ9ismew6)z*-={+U|HA#@+D)C0uhAdn?@_NQg?+i_kdDJHwB1zuKhHLDfJWPr{)YQI zDm>^Jt201^a9fNNl!8HEc}l!`J*&c!i)bO|x zd%IoL5)$L%Vk2tQBV4Vt&G`QpZW5W0nDAfR6&l;?zoI&k31M;l-SPh`jgE|sN^m8{ zxq8_mZx7L-iSC3%SFC$Lf-5{eF2*$|u3x+>+}+&W%ik5P_FZw|uAXsmJlk^+kN1rX z^Y`|o@!6+)hxYC3j*X0spmHqDMkcsIcw)ey_!w7$JDy<_*gD~d_)MO@@p0ji(Qbd! zpg%*2cZVgqV%!M{p%Lx`({O@2G11#rSZJ)Pr`r`87Dlfr#uXkH z?>e~B70%tu&5FdbSAvhL`+L}EQ=Crmfjuj(iXaU9^4rPEQ|gb z6U+M1Spu7*MiLWUeZ39G(v+6HJlmAm7#Yn;Q6P%tk3G0D!PTF&r-!KM$fzi{x3k#L{;}>vMoQ9d`h(oD bfli%BG6|819ISX{SkVOcj*T%s6H@;l>qUmk diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po index 7fb235df5..3c3cc66c5 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-04 20:12\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Norwegian\n" "Language: no\n" @@ -102,8 +102,8 @@ msgstr "Liste rekkefĆølge" msgid "Book Title" msgstr "Boktittel" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "Vurdering" @@ -141,7 +141,7 @@ msgstr "Advarsel" msgid "Danger" msgstr "Fare" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "Automatisk generert rapport" @@ -205,26 +205,26 @@ msgstr "FĆøderert" msgid "Blocked" msgstr "Blokkert" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s er en ugyldig remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s er et ugyldig brukernavn" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "brukernavn" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "En bruker med det brukernavnet eksisterer allerede." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "En bruker med det brukernavnet eksisterer allerede." msgid "Public" msgstr "Offentlig" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "Offentlig" msgid "Unlisted" msgstr "UoppfĆørt" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "UoppfĆørt" msgid "Followers" msgstr "FĆølgere" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Privat" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiv" @@ -352,122 +351,143 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Anmeldelser" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "Kommentarer" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "Sitater" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Andre ting" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Lokal tidslinje" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "Hjem" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Boktidslinja" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "BĆøker" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (Engelsk)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (katalansk)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch (Tysk)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Spansk)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Baskisk)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Gallisk)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Italiensk)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (finsk)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (Fransk)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litauisk)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (Norsk)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (Polsk)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs - Brasil (Brasiliansk portugisisk)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortugueĢ‚s Europeu (Europeisk Portugisisk)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (romansk)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Svensk)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (Forenklet kinesisk)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (Tradisjonelt kinesisk)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "Tilgang nektet" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Lister" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Omslag" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Beklager, vi fant ikke den koden." #: 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 "Bekreftelseskode:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "ƅ lese" #: 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 "Leser nĆ„" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Lest" #: 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 "Stoppet lesing" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupper" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "LesemĆ„l" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importer bĆøker" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Rad" #: 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 "Tittel" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Openlibrary nĆøkkel" #: 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 "Forfatter" @@ -3085,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" @@ -914,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" @@ -1054,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: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 "Listy" @@ -1336,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Okładka" @@ -1463,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" @@ -1473,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" @@ -1595,7 +1630,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Nie udało nam się znaleÅŗć tego kodu." #: 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 "Kod potwierdzający:" @@ -1768,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" @@ -1961,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" @@ -2009,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: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 "Do przeczytania" #: 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 "Obecnie czytane" #: 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 @@ -2030,7 +2065,7 @@ msgid "Read" msgstr "Przeczytane" #: 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 "Zaprzestano czytania" @@ -2531,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 @@ -2563,8 +2598,8 @@ 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." @@ -2719,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupy" @@ -2774,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Cel czytania" @@ -2813,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importuj książki" @@ -2990,8 +3024,8 @@ msgid "Row" msgstr "Wiersz" #: 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 "Tytuł" @@ -3004,8 +3038,8 @@ msgid "Openlibrary key" msgstr "Klucz Openlibrary" #: 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 "Autor" @@ -3111,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." @@ -3242,10 +3272,6 @@ msgstr "Skanuj kod kreskowy" msgid "Main navigation menu" msgstr "GÅ‚Ć³wne menu nawigacji" -#: bookwyrm/templates/layout.html:88 -msgid "Feed" -msgstr "Kanał" - #: bookwyrm/templates/layout.html:134 bookwyrm/templates/ostatus/error.html:33 msgid "password" msgstr "hasło" @@ -3454,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ń" @@ -3530,11 +3557,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 "Wyloguj się" @@ -3746,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\"" @@ -4182,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" @@ -5044,19 +5080,19 @@ msgstr "Instancja:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: bookwyrm/templates/settings/users/user_info.html:113 msgid "Status:" msgstr "Status:" #: bookwyrm/templates/settings/federation/edit_instance.html:66 #: bookwyrm/templates/settings/federation/instance.html:40 -#: bookwyrm/templates/settings/users/user_info.html:113 +#: bookwyrm/templates/settings/users/user_info.html:107 msgid "Software:" msgstr "Oprogramowanie:" #: bookwyrm/templates/settings/federation/edit_instance.html:76 #: bookwyrm/templates/settings/federation/instance.html:43 -#: bookwyrm/templates/settings/users/user_info.html:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "Wersja:" @@ -5069,7 +5105,7 @@ msgid "Details" msgstr "SzczegĆ³Å‚y" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "Aktywność" @@ -5083,7 +5119,7 @@ msgid "View all" msgstr "Pokaż wszystko" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "" @@ -5100,7 +5136,7 @@ msgid "Blocked by us:" msgstr "Zablokowane przez nas:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "Notatki" @@ -5257,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" @@ -5731,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" @@ -5820,106 +5872,108 @@ msgstr "Ostatnia aktywność" msgid "Remote instance" msgstr "Zdalna instancja" -#: 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 "Usunięte" - -#: bookwyrm/templates/settings/users/user_admin.html:99 -#: bookwyrm/templates/settings/users/user_info.html:38 -msgid "Inactive" -msgstr "Nieaktywne" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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 "" -#: bookwyrm/templates/settings/users/user_info.html:46 +#: bookwyrm/templates/settings/users/user_info.html:40 msgid "Local" msgstr "Lokalne" -#: bookwyrm/templates/settings/users/user_info.html:48 +#: bookwyrm/templates/settings/users/user_info.html:42 msgid "Remote" msgstr "Zdalne" -#: bookwyrm/templates/settings/users/user_info.html:57 +#: bookwyrm/templates/settings/users/user_info.html:51 msgid "User details" msgstr "SzczegĆ³Å‚y użytkownika" -#: bookwyrm/templates/settings/users/user_info.html:61 +#: bookwyrm/templates/settings/users/user_info.html:55 msgid "Email:" msgstr "E-mail:" -#: 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 "PowĆ³d dezaktywacji:" -#: bookwyrm/templates/settings/users/user_info.html:108 +#: bookwyrm/templates/settings/users/user_info.html:102 msgid "Instance details" msgstr "SzczegĆ³Å‚y instancji" -#: bookwyrm/templates/settings/users/user_info.html:130 +#: bookwyrm/templates/settings/users/user_info.html:124 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:" @@ -5975,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" @@ -6032,7 +6086,7 @@ msgid "Need help?" msgstr "Potrzebujesz pomocy?" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -#: bookwyrm/templates/shelf/shelf.html:87 +#: bookwyrm/templates/shelf/shelf.html:74 msgid "Create shelf" msgstr "UtwĆ³rz pĆ³Å‚kę" @@ -6040,26 +6094,18 @@ msgstr "UtwĆ³rz pĆ³Å‚kę" msgid "Edit Shelf" msgstr "Edytuj pĆ³Å‚kę" -#: 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/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:54 +#: 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:112 +#: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -6068,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:119 +#: 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:131 +#: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" msgstr "Edytuj pĆ³Å‚kę" -#: bookwyrm/templates/shelf/shelf.html:139 +#: bookwyrm/templates/shelf/shelf.html:126 msgid "Delete shelf" msgstr "Usuń pĆ³Å‚kę" -#: 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 "Na pĆ³Å‚ce" -#: 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 "Rozpoczęte" -#: 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 "Ukończone" -#: 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 "Do" -#: bookwyrm/templates/shelf/shelf.html:225 +#: bookwyrm/templates/shelf/shelf.html:212 msgid "This shelf is empty." msgstr "PĆ³Å‚ka jest pusta." @@ -6423,6 +6469,11 @@ msgstr "%(username)s ma przeczytane %(read_count)s z %(goal 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" @@ -6725,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" @@ -6783,15 +6846,11 @@ msgstr "Twoje grupy" msgid "Groups: %(username)s" msgstr "Grupy: %(username)s" -#: 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 "Prośby o obserwowanie" -#: 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" @@ -6812,7 +6871,7 @@ msgstr "UtwĆ³rz listę" msgid "Joined %(date)s" msgstr "Dołączono %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s nie ma obserwujących" @@ -6932,7 +6991,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: bookwyrm/templatetags/utilities.py:48 +#: 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 f5cceed233a1e171e866363d4cb8ac7c106e90e2..565cb0e0d06b992397c7537a90d526cc88d2b992 100644 GIT binary patch delta 23601 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 RHc$MmS&8j;GkT7+`X5t>^;rM_ delta 23617 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 diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index cf9eee066..a8965b165 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-02 22:29\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -102,8 +102,8 @@ msgstr "Ordem de inserĆ§Ć£o" msgid "Book Title" msgstr "TĆ­tulo do livro" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "AvaliaĆ§Ć£o" @@ -141,7 +141,7 @@ msgstr "AtenĆ§Ć£o" msgid "Danger" msgstr "Perigo" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "RelatĆ³rio gerado automaticamente" @@ -205,26 +205,26 @@ msgstr "Federado" msgid "Blocked" msgstr "Bloqueado" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s nĆ£o Ć© um remote_id vĆ”lido" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s nĆ£o Ć© um nome de usuĆ”rio vĆ”lido" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "nome de usuĆ”rio" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "JĆ” existe um usuĆ”rio com este nome." -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "JĆ” existe um usuĆ”rio com este nome." msgid "Public" msgstr "PĆŗblico" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "PĆŗblico" msgid "Unlisted" msgstr "NĆ£o listado" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "NĆ£o listado" msgid "Followers" msgstr "Seguidores" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "Particular" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Ativo" @@ -352,122 +351,143 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "Resenhas" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "ComentĆ”rios" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "CitaƧƵes" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "Todo o resto" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "Linha do tempo" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "PĆ”gina inicial" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "Linha do tempo dos livros" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "Livros" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "English (InglĆŖs)" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (CatalĆ£o)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutsch (AlemĆ£o)" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (Esperanto)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱol (Espanhol)" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (Basco)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (Galego)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (FinlandĆŖs)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧais (FrancĆŖs)" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (NorueguĆŖs)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (PolonĆŖs)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (PortuguĆŖs do Brasil)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (PortuguĆŖs Europeu)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (Romeno)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡ (ChinĆŖs simplificado)" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ (ChinĆŖs tradicional)" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "PermissĆ£o negada" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -906,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" @@ -1042,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: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 "Listas" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Capa" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Desculpe! NĆ£o encontramos o cĆ³digo." #: 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 "CĆ³digo de confirmaĆ§Ć£o:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Quero ler" #: 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 "Lendo atualmente" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Lido" #: 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 "Finalizar leitura" @@ -2511,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 @@ -2543,7 +2578,7 @@ 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 @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupos" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Meta de leitura" @@ -2793,7 +2827,7 @@ msgstr "" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importar livros" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Linha" #: 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 "TĆ­tulo" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Chave Openlibrary" #: 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 "Autor/a" @@ -3085,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" @@ -906,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" @@ -1042,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: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 "Listas" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Capa" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Pedimos desculpa, nĆ£o conseguimos encontrar esse cĆ³digo." #: 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 "CĆ³digo de confirmaĆ§Ć£o:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Para Ler" #: 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 "Leituras atuais" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "Lido" #: 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 "Leitura Parada" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupos" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Meta de leitura" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importar livros" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Linha" #: 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 "TĆ­tulo" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Id da Openlibrary" #: 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 "Autor(a)" @@ -3085,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" @@ -910,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" @@ -1048,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: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 "Liste" @@ -1330,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Copertă" @@ -1457,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" @@ -1467,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" @@ -1589,7 +1624,7 @@ msgid "Sorry! We couldn't find that code." msgstr "Ne pare rău! Nu am putut găsi acel cod." #: 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 "Cod de confirmare:" @@ -1760,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" @@ -1953,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." @@ -2001,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: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 "De citit" #: 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 "Lectură Ć®n curs" #: 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 @@ -2022,7 +2057,7 @@ msgid "Read" msgstr "Citite" #: 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 "Lectură oprită" @@ -2521,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" @@ -2553,8 +2588,8 @@ 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." @@ -2709,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupuri" @@ -2764,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "Obiectiv de lectură" @@ -2803,7 +2837,7 @@ msgstr "" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importați cărți" @@ -2977,8 +3011,8 @@ msgid "Row" msgstr "Linie" #: 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 "Titlu" @@ -2991,8 +3025,8 @@ msgid "Openlibrary key" msgstr "Cheie OpenLibrary" #: 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 "Autor" @@ -3098,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" @@ -906,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" @@ -1042,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: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 "Listor" @@ -1324,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:162 +#: bookwyrm/templates/shelf/shelf.html:149 msgid "Cover" msgstr "Omslag" @@ -1451,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" @@ -1461,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" @@ -1583,7 +1618,7 @@ msgid "Sorry! We couldn't find that code." msgstr "TyvƤrr! Vi kunde inte hitta den dƤr koden." #: 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 "BekrƤftelsekod:" @@ -1752,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" @@ -1945,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" @@ -1993,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: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 "Att lƤsa" #: 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 "LƤser just nu" #: 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 @@ -2014,7 +2049,7 @@ msgid "Read" msgstr "LƤsta" #: 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 "Slutade lƤsa" @@ -2511,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" @@ -2543,8 +2578,8 @@ 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." @@ -2699,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "Grupper" @@ -2754,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "LƤs-mĆ„l" @@ -2793,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:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Importera bƶcker" @@ -2964,8 +2998,8 @@ msgid "Row" msgstr "Rad" #: 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 "Titel" @@ -2978,8 +3012,8 @@ msgid "Openlibrary key" msgstr "Openlibrary-nyckel" #: 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 "Fƶrfattare" @@ -3085,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 "ŠŠµ Š—Š½Š°Š¹Š“ŠµŠ½Š¾" @@ -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" @@ -914,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" @@ -1054,13 +1088,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 "Š”ŠæŠøсŠŗŠø" @@ -1336,7 +1370,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 "ŠžŠ±ŠŗŠ»Š°Š“ŠøŠ½ŠŗŠ°" @@ -1463,8 +1497,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 "Š”тŠ°Ń‚ŃƒŃ" @@ -1473,7 +1508,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 "Š”Ń–Ń—" @@ -1595,7 +1630,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 "ŠšŠ¾Š“ ŠæіŠ“тŠ²ŠµŃ€Š“Š¶ŠµŠ½Š½Ń:" @@ -1768,7 +1803,7 @@ msgstr "%(username)s ŠæрŠ¾Ń†ŠøтуŠ²Š°Š²(-Š»Š°) < #: 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 "ŠžŠ³Š»ŃŠ“" @@ -1923,7 +1958,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 "ŠžŃŠ¾Š±Šøсті ŠŸŠ¾Š²Ń–Š“Š¾Š¼Š»ŠµŠ½Š½Ń" @@ -1961,7 +1996,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 "Š’Š°ŃˆŃ– ŠŗŠ½ŠøŠ³Šø" @@ -2009,19 +2044,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 @@ -2030,7 +2065,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 "Š§ŠøтŠ°Š½Š½Ń Š—ŃƒŠæŠøŠ½ŠµŠ½Š¾" @@ -2531,8 +2566,8 @@ 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!" -msgstr "Š’ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŠ¹Ń‚Šµ ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š½Š° Š”трічŠŗу, Š”ŠæŠøсŠŗŠø тŠ° ŠžŠ³Š»ŃŠ“, щŠ¾Š± ŠæŠ¾Š±Š°Ń‡ŠøтŠø Š¾ŃŃ‚Š°Š½Š½Ń– Š½Š¾Š²ŠøŠ½Šø Š· Š²Š°ŃˆŠ¾Ń— стрічŠŗŠø, тŠµŠ¼Š°Ń‚ŠøчŠ½Ń– сŠæŠøсŠŗŠø ŠŗŠ½ŠøŠ³ тŠ° Š¾ŃŃ‚Š°Š½Š½Ń– ŠæŠ¾Š“ії Š½Š° цьŠ¾Š¼Ńƒ іŠ½ŃŃ‚Š°Š½ŃŃ– 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" @@ -2563,8 +2598,8 @@ 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." -msgstr "Š’Š°Ńˆ ŠæрŠ¾Ń„Ń–Š»ŃŒ, ŠŗŠ½ŠøŠ³Šø, Š¾ŃŠ¾Š±Šøсті ŠæŠ¾Š²Ń–Š“Š¾Š¼Š»ŠµŠ½Š½Ń тŠ° Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½Š½Ń Š¼Š¾Š¶Š½Š° ŠæŠ¾Š“ŠøŠ²ŠøтŠøсь Š½Š°Ń‚ŠøсŠ½ŃƒŠ²ŃˆŠø Š½Š° Š²Š°ŃˆŠµ іŠ¼'я Š² цьŠ¾Š¼Ńƒ Š¼ŠµŠ½ŃŽ." +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." @@ -2719,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 "Š“Ń€ŃƒŠæŠø" @@ -2774,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 "ŠœŠµŃ‚Š° Š§ŠøтŠ°Š½Š½Ń" @@ -2813,7 +2847,7 @@ msgstr "ŠŸŠ¾ŠŗŠø щŠ¾ Š½Ń–Ń…Ń‚Š¾ Š½Šµ Š²ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŠ²Š°Š² цŠµŠ¹ хŠµŃˆ #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø ŠšŠ½ŠøŠ³Šø" @@ -2990,8 +3024,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 "ŠŠ°Š·Š²Š°" @@ -3004,8 +3038,8 @@ msgid "Openlibrary key" msgstr "ŠšŠ»ŃŽŃ‡ Openlibrary" #: 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 "ŠŠ²Ń‚Š¾Ń€" @@ -3111,10 +3145,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 "Š’ŠøŠ±Š°Ń‡Ń‚Šµ! Š¦ŠµŠ¹ ŠŗŠ¾Š“ Š·Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń Š±Ń–Š»ŃŒŃˆŠµ Š½Šµ Š“іŠ¹ŃŠ½ŠøŠ¹." @@ -3242,10 +3272,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 "ŠæŠ°Ń€Š¾Š»ŃŒ" @@ -3454,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 "Š’ŠøŠ“Š°Š»ŠøтŠø" @@ -3530,11 +3557,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 "Š’ŠøŠ¹Ń‚Šø" @@ -3746,6 +3773,15 @@ msgstr "Š’Š°Ńˆ іŠ¼ŠæŠ¾Ń€Ń‚ Š·Š°Š²ŠµŃ€ŃˆŠµŠ½Š¾." msgid "%(related_user)s invited you to join the group \"%(group_name)s\"" msgstr "%(related_user)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\"" @@ -4182,7 +4218,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 "ŠŸŃ€Š¾Ń„Ń–Š»ŃŒ" @@ -5044,19 +5080,19 @@ msgstr "Š†Š½ŃŃ‚Š°Š½Ń:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: 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:113 +#: 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:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "Š’ŠµŃ€ŃŃ–я:" @@ -5069,7 +5105,7 @@ msgid "Details" msgstr "ŠŸŠ¾Š“рŠ¾Š±Šøці" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "ŠŠŗтŠøŠ²Š½Ń–ŃŃ‚ŃŒ" @@ -5083,7 +5119,7 @@ msgid "View all" msgstr "ŠŸŠµŃ€ŠµŠ³Š»ŃŠ½ŃƒŃ‚Šø Š²ŃŃ–Ń…" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "Š”ŠŗŠ°Ń€Š³:" @@ -5100,7 +5136,7 @@ msgid "Blocked by us:" msgstr "Š—Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Šøх Š½Š°Š¼Šø:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "ŠŠ¾Ń‚Š°Ń‚ŠŗŠø" @@ -5257,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 "Š—Š°ŠæрŠ¾ŃˆŠµŠ½Š½Ń" @@ -5731,57 +5767,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/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 "Š—Š°Šæустіть ./bw-dev compile_themes тŠ° ./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 "Š”Š¾Š“Š°Š¹Ń‚Šµ Š½Š°Š·Š²Ńƒ фŠ°Š¹Š»Ńƒ Š²ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŃŽŃ‡Šø фŠ¾Ń€Š¼Ńƒ Š½ŠøŠ¶Ń‡Šµ, щŠ¾Š± Š·Ń€Š¾Š±ŠøтŠø її Š“Š¾ŃŃ‚ŃƒŠæŠ½Š¾ŃŽ Š² іŠ½Ń‚ŠµŃ€Ń„ŠµŠ¹ŃŃ– BookWyrm." -#: 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 "Š’ŠøŠ“Š°Š»ŠøтŠø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° Š½Š°Š·Š°Š²Š¶Š“Šø" @@ -5820,106 +5872,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" -msgstr "ŠŠµŠ°ŠŗтŠøŠ²Š½ŠøŠ¹" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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 "ŠŸŠµŃ€ŠµŠ¹Ń‚Šø Š“Š¾ Š°Š“Š¼Ń–Š½Ń–ŃŃ‚Ń€ŃƒŠ²Š°Š½Š½Ń ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°" -#: 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 "Š Ń–Š²ŠµŠ½ŃŒ Š“Š¾ŃŃ‚ŃƒŠæу:" @@ -5975,7 +6029,7 @@ msgstr "Š’Š°Ńˆ Š“Š¾Š¼ŠµŠ½, Š·Š“Š°Ń”Ń‚ŃŒŃŃ, Š½Š°Š»Š°ŃˆŃ‚Š¾Š²Š°Š½ŠøŠ¹ Š½ŠµŠæрŠ° 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:49 +#: bookwyrm/templates/setup/config.html:52 bookwyrm/templates/user_menu.html:44 msgid "Settings" msgstr "ŠŠ°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½Š½Ń" @@ -6032,7 +6086,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 "Š”тŠ²Š¾Ń€ŠøтŠø ŠæŠ¾Š»Šøцю" @@ -6040,26 +6094,18 @@ 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/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: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:99 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" @@ -6068,40 +6114,40 @@ msgstr[1] "%(formatted_count)s ŠŗŠ½ŠøŠ³Šø" msgstr[2] "%(formatted_count)s ŠŗŠ½ŠøŠ³" msgstr[3] "%(formatted_count)s ŠŗŠ½ŠøŠ³" -#: bookwyrm/templates/shelf/shelf.html:119 +#: bookwyrm/templates/shelf/shelf.html:106 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "(ŠæŠ¾ŠŗŠ°Š·ŃƒŃŽŃ‚ŃŒŃŃ %(start)s-%(end)s)" -#: 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 "Š¦Ń ŠæŠ¾Š»Šøця ŠæŠ¾Ń€Š¾Š¶Š½Ń." @@ -6423,6 +6469,11 @@ msgstr "%(username)s ŠæрŠ¾Ń‡ŠøтŠ°Š²(-Š»Š°) %(read_count)s 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" @@ -6725,6 +6776,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 "Š”Š²Š¾Ń„Š°ŠŗтŠ¾Ń€Š½Š° Š°ŃƒŃ‚ŠµŠ½Ń‚ŠøфіŠŗŠ°Ń†Ń–я" @@ -6783,15 +6846,11 @@ msgstr "Š’Š°ŃˆŃ– Š“Ń€ŃƒŠæŠø" msgid "Groups: %(username)s" msgstr "Š“Ń€ŃƒŠæŠø: %(username)s" -#: 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" @@ -6812,7 +6871,7 @@ msgstr "Š”тŠ²Š¾Ń€ŠøтŠø сŠæŠøсŠ¾Šŗ" msgid "Joined %(date)s" msgstr "ŠŸŃ€ŠøєŠ“Š½Š°Š²ŃŃ %(date)s" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s Š½Šµ Š¼Š°Ń” ŠæіŠ“ŠæŠøсŠ½ŠøŠŗіŠ²" @@ -6932,7 +6991,7 @@ msgstr[1] "%(num)d ŠŗŠ½ŠøŠ³Šø ā€“ Š²Ń–Š“ %(user)s" msgstr[2] "%(num)d ŠŗŠ½ŠøŠ³ ā€“ Š²Ń–Š“ %(user)s" msgstr[3] "%(num)d ŠŗŠ½ŠøŠ³ ā€“ Š²Ń–Š“ %(user)s" -#: bookwyrm/templatetags/utilities.py:48 +#: bookwyrm/templatetags/utilities.py:49 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "%(title)s: %(subtitle)s" diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 566e3c144ec509cf8408d2092449d3af7e01e5db..b365646885b2efc9452a0b57d440a887bf3bca74 100644 GIT binary patch delta 25520 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 W`!s*N>l2pV7(QZiNJLPchW`WJdgHqQ diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 7fa0b00bd..3f8bd34d5 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-02 22:29\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -102,8 +102,8 @@ msgstr "列č”Øé”ŗåŗ" msgid "Book Title" msgstr "书名" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "čƄ价" @@ -141,7 +141,7 @@ msgstr "č­¦å‘Š" msgid "Danger" msgstr "危险" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "č‡ŖåŠØē”Ÿęˆēš„äø¾ęŠ„" @@ -205,26 +205,26 @@ msgstr "č·Øē«™" msgid "Blocked" msgstr "å·²å±č”½" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ē”Øęˆ·å" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "ē”Øęˆ·å" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "å·²ē»å­˜åœØä½æē”ØčÆ„ē”Øęˆ·åēš„ē”Øęˆ·ć€‚" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "å·²ē»å­˜åœØä½æē”ØčÆ„ē”Øęˆ·åēš„ē”Øęˆ·ć€‚" msgid "Public" msgstr "公开" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "公开" msgid "Unlisted" msgstr "äøå…¬å¼€" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "äøå…¬å¼€" msgid "Followers" msgstr "关ę³Ø者" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "ē§åƆ" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "ꓻ跃" @@ -352,122 +351,143 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "书čƄ" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "čƄč®ŗ" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "引ē”Ø" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "ę‰€ęœ‰å…¶å®ƒå†…å®¹" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "äø»é”µę—¶é—“ēŗæ" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "äø»é”µ" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "书ē›®ę—¶é—“ēŗæ" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "书ē›®" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "Englishļ¼ˆč‹±čÆ­ļ¼‰" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (åŠ ę³°ē½—å°¼äŗščÆ­)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutschļ¼ˆå¾·čÆ­ļ¼‰" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱolļ¼ˆč„æē­ē‰™čÆ­ļ¼‰" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galegoļ¼ˆåŠ åˆ©č„æäŗščÆ­ļ¼‰" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italianoļ¼ˆę„å¤§åˆ©čÆ­ļ¼‰" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi ļ¼ˆFinnish/čŠ¬å…°čÆ­ļ¼‰" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧaisļ¼ˆę³•čÆ­ļ¼‰" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuviųļ¼ˆē«‹é™¶å®›čÆ­ļ¼‰" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norskļ¼ˆęŒŖå؁čÆ­ļ¼‰" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (ę³¢å…°čÆ­)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasilļ¼ˆå·“č„æ葔萄ē‰™čÆ­ļ¼‰" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortugueĢ‚s Europeuļ¼ˆę¬§ę“²č‘”萄ē‰™čÆ­ļ¼‰" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă ļ¼ˆē½—马尼äŗščÆ­ļ¼‰" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenskaļ¼ˆē‘žå…øčÆ­ļ¼‰" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē®€ä½“äø­ę–‡" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡ļ¼ˆē¹ä½“äø­ę–‡ļ¼‰" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "ę²”ęœ‰ęƒé™" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -902,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" @@ -1036,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: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 "列č”Ø" @@ -1318,7 +1352,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 "封面" @@ -1445,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 "ēŠ¶ę€" @@ -1455,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 "åŠØ作" @@ -1577,7 +1612,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 "ē”®č®¤ä»£ē :" @@ -1744,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 "ē§äæ”" @@ -1937,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 "ä½ ēš„书ē›®" @@ -1985,19 +2020,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 @@ -2006,7 +2041,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 "å·²åœę­¢é˜…čÆ»" @@ -2501,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 @@ -2533,7 +2568,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 @@ -2689,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "ē¾¤ē»„" @@ -2744,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "阅čÆ»ē›®ę ‡" @@ -2783,7 +2817,7 @@ msgstr "" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "åƼ兄书ē›®" @@ -2951,8 +2985,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 "ę ‡é¢˜" @@ -2965,8 +2999,8 @@ msgid "Openlibrary key" msgstr "Openlibrary key" #: 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 "ä½œč€…" @@ -3072,10 +3106,6 @@ 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\"" @@ -4131,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 "äøŖäŗŗ资ꖙ" @@ -4975,19 +5008,19 @@ msgstr "实例:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: 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:113 +#: 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:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "ē‰ˆęœ¬:" @@ -5000,7 +5033,7 @@ msgid "Details" msgstr "čƦē»†" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "ę“»åŠØ" @@ -5014,7 +5047,7 @@ msgid "View all" msgstr "ęŸ„ēœ‹å…ØéƒØ" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "ęŠ„å‘Š:" @@ -5031,7 +5064,7 @@ msgid "Blocked by us:" msgstr "ęˆ‘ä»¬ę‰€å±č”½ēš„:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "备ę³Ø" @@ -5188,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 "邀čÆ·" @@ -5662,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 "ę°ø久删除ē”Øꈷ" @@ -5751,106 +5800,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" -msgstr "停ē”Ø" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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 "č½¬åˆ°ē”Øꈷē®”ē†å‘˜" -#: 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 "č®æ问ēŗ§åˆ«:" @@ -5906,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 "č®¾ē½®" @@ -5963,7 +6014,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 "创å»ŗä¹¦ęž¶" @@ -5971,65 +6022,57 @@ 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/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: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:99 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "%(formatted_count)s ęœ¬ä¹¦ē±" -#: bookwyrm/templates/shelf/shelf.html:119 +#: bookwyrm/templates/shelf/shelf.html:106 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "ļ¼ˆę­£åœØę˜¾ē¤ŗ %(start)s 到 %(end)sļ¼‰" -#: 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 "ę­¤ä¹¦ęž¶ę˜Æē©ŗēš„怂" @@ -6333,6 +6376,11 @@ msgstr "%(username)s å·²ē»é˜…čÆ»äŗ† %(goal_count)s ęœ¬ä¹¦ 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" @@ -6635,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 "双重čŗ«ä»½éŖŒčÆę£€ęŸ„" @@ -6693,15 +6753,11 @@ msgstr "ę‚Øēš„ē¾¤ē»„" msgid "Groups: %(username)s" msgstr "ē¾¤ē»„ļ¼š %(username)s" -#: 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" @@ -6722,7 +6778,7 @@ msgstr "创å»ŗ列č”Ø" msgid "Joined %(date)s" msgstr "åœØ %(date)s 加兄" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s ę²”ęœ‰å…³ę³Ø者" @@ -6833,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:48 +#: 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 c2dabfbf0ffb731a3a105637765bc897dd541ca0..e9e223f74ebeacd4c6d2ef24a7a0324cf2e268a7 100644 GIT binary patch delta 13084 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 delta 13105 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 D0M!dd diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index 9815b9a59..6b9e9a19b 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-11-02 21:32+0000\n" -"PO-Revision-Date: 2023-11-02 22:28\n" +"POT-Creation-Date: 2023-12-30 23:52+0000\n" +"PO-Revision-Date: 2024-01-02 03:12\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -102,8 +102,8 @@ msgstr "列č”Ø順åŗ" msgid "Book Title" msgstr "ę›ø名" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:171 -#: bookwyrm/templates/shelf/shelf.html:203 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 +#: bookwyrm/templates/shelf/shelf.html:190 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "č©•åƒ¹" @@ -141,7 +141,7 @@ msgstr "č­¦å‘Š" msgid "Danger" msgstr "危éšŖ" -#: bookwyrm/models/antispam.py:112 bookwyrm/models/antispam.py:146 +#: bookwyrm/models/antispam.py:113 bookwyrm/models/antispam.py:147 msgid "Automatically generated report" msgstr "č‡Ŗ動ē”Ÿęˆēš„報告" @@ -205,26 +205,26 @@ msgstr "č·Øē«™" msgid "Blocked" msgstr "已封鎖" -#: bookwyrm/models/fields.py:30 +#: bookwyrm/models/fields.py:35 #, python-format msgid "%(value)s is not a valid remote_id" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ remote_id" -#: bookwyrm/models/fields.py:39 bookwyrm/models/fields.py:48 +#: bookwyrm/models/fields.py:44 bookwyrm/models/fields.py:53 #, python-format msgid "%(value)s is not a valid username" msgstr "%(value)s äøę˜Æ꜉ꕈēš„ä½æē”Øč€…åēر" -#: bookwyrm/models/fields.py:193 bookwyrm/templates/layout.html:129 +#: bookwyrm/models/fields.py:198 bookwyrm/templates/layout.html:129 #: bookwyrm/templates/ostatus/error.html:29 msgid "username" msgstr "ä½æē”Øč€…åēر" -#: bookwyrm/models/fields.py:198 +#: bookwyrm/models/fields.py:203 msgid "A user with that username already exists." msgstr "å·²ē¶“å­˜åœØä½æē”Øč©²åēرēš„ä½æē”Ø者怂" -#: bookwyrm/models/fields.py:217 +#: bookwyrm/models/fields.py:222 #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 #: bookwyrm/templates/snippets/privacy_select.html:11 @@ -232,7 +232,7 @@ msgstr "å·²ē¶“å­˜åœØä½æē”Øč©²åēرēš„ä½æē”Ø者怂" msgid "Public" msgstr "公開" -#: bookwyrm/models/fields.py:218 +#: bookwyrm/models/fields.py:223 #: bookwyrm/templates/snippets/privacy-icons.html:7 #: bookwyrm/templates/snippets/privacy-icons.html:8 #: bookwyrm/templates/snippets/privacy_select.html:14 @@ -240,7 +240,7 @@ msgstr "公開" msgid "Unlisted" msgstr "äøå…¬é–‹" -#: bookwyrm/models/fields.py:219 +#: bookwyrm/models/fields.py:224 #: bookwyrm/templates/snippets/privacy_select.html:17 #: bookwyrm/templates/user/relationships/followers.html:6 #: bookwyrm/templates/user/relationships/followers.html:11 @@ -249,7 +249,7 @@ msgstr "äøå…¬é–‹" msgid "Followers" msgstr "關ę³Ø者" -#: bookwyrm/models/fields.py:220 +#: bookwyrm/models/fields.py:225 #: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 @@ -260,8 +260,7 @@ msgstr "ē§åƆ" #: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 #: bookwyrm/templates/settings/imports/imports.html:98 -#: bookwyrm/templates/settings/users/user_admin.html:87 -#: bookwyrm/templates/settings/users/user_info.html:33 +#: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "ę“»čŗ" @@ -352,122 +351,143 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:32 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" msgstr "ę›øč©•" -#: bookwyrm/models/user.py:33 +#: bookwyrm/models/user.py:34 msgid "Comments" msgstr "č©•č«–" -#: bookwyrm/models/user.py:34 +#: bookwyrm/models/user.py:35 msgid "Quotations" msgstr "引ē”Ø" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:36 msgid "Everything else" msgstr "ę‰€ęœ‰å…¶ä»–å…§å®¹" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home Timeline" msgstr "äø»é ę™‚é–“ē·š" -#: bookwyrm/settings.py:230 +#: bookwyrm/settings.py:232 msgid "Home" msgstr "äø»é " -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 msgid "Books Timeline" msgstr "ę›øē›®ę™‚é–“ē·š" -#: bookwyrm/settings.py:231 +#: bookwyrm/settings.py:233 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 #: bookwyrm/templates/search/layout.html:43 -#: bookwyrm/templates/user/layout.html:112 +#: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "ę›øē›®" -#: bookwyrm/settings.py:303 +#: bookwyrm/settings.py:313 msgid "English" msgstr "Englishļ¼ˆč‹±čŖžļ¼‰" -#: bookwyrm/settings.py:304 +#: bookwyrm/settings.py:314 msgid "CatalĆ  (Catalan)" msgstr "CatalĆ  (åŠ ę³°ē¾…å°¼äŗžčŖž)" -#: bookwyrm/settings.py:305 +#: bookwyrm/settings.py:315 msgid "Deutsch (German)" msgstr "Deutschļ¼ˆå¾·čŖžļ¼‰" -#: bookwyrm/settings.py:306 +#: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" msgstr "Esperanto (äø–ē•ŒčŖž)" -#: bookwyrm/settings.py:307 +#: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" msgstr "EspaƱolļ¼ˆč„æē­ē‰™čŖžļ¼‰" -#: bookwyrm/settings.py:308 +#: bookwyrm/settings.py:318 msgid "Euskara (Basque)" msgstr "Euskara (å·“ę–Æ克čŖž)" -#: bookwyrm/settings.py:309 +#: bookwyrm/settings.py:319 msgid "Galego (Galician)" msgstr "Galego (加利č„æäŗžčŖž)" -#: bookwyrm/settings.py:310 +#: bookwyrm/settings.py:320 msgid "Italiano (Italian)" msgstr "Italiano (ę„å¤§åˆ©čŖž)" -#: bookwyrm/settings.py:311 +#: bookwyrm/settings.py:321 msgid "Suomi (Finnish)" msgstr "Suomi (čŠ¬č˜­čŖž)" -#: bookwyrm/settings.py:312 +#: bookwyrm/settings.py:322 msgid "FranƧais (French)" msgstr "FranƧaisļ¼ˆę³•čŖžļ¼‰" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:323 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (ē«‹é™¶å®›čŖž)" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" msgstr "Nederlands (č·č˜­čŖž)" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" msgstr "Norsk (ęŒŖå؁čŖž)" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:326 msgid "Polski (Polish)" msgstr "Polski (ę³¢č˜­čŖž)" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "PortuguĆŖs do Brasil (å·“č„æ葔萄ē‰™čŖž)" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:328 msgid "PortuguĆŖs Europeu (European Portuguese)" msgstr "PortuguĆŖs Europeu (ę­ę“²č‘”č„ē‰™čŖž)" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:329 msgid "RomĆ¢nă (Romanian)" msgstr "RomĆ¢nă (ē¾…馬尼äŗžčŖž)" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:330 msgid "Svenska (Swedish)" msgstr "Svenska (ē‘žå…øčŖž)" -#: bookwyrm/settings.py:321 +#: bookwyrm/settings.py:331 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" msgstr "ē°”體äø­ę–‡" -#: bookwyrm/settings.py:322 +#: bookwyrm/settings.py:333 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "ē¹é«”äø­ę–‡" +#: bookwyrm/templates/403.html:5 +msgid "Oh no!" +msgstr "" + +#: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 +msgid "Permission Denied" +msgstr "ę²’ęœ‰ę¬Šé™" + +#: bookwyrm/templates/403.html:11 +#, python-format +msgid "You do not have permission to view this page or perform this action. Your user permission level is %(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" @@ -902,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" @@ -1036,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: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 "列č”Ø" @@ -1318,7 +1352,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 "封面" @@ -1445,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 "ē‹€ę…‹" @@ -1455,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 "動作" @@ -1577,7 +1612,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 "" @@ -1744,7 +1779,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 "" @@ -1899,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 "ē§äæ”" @@ -1937,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 "ä½ ēš„ę›øē›®" @@ -1985,19 +2020,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 @@ -2006,7 +2041,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 "" @@ -2501,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 @@ -2533,7 +2568,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 @@ -2689,8 +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:100 +#: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "" @@ -2744,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:94 +#: bookwyrm/templates/user/goal.html:6 bookwyrm/templates/user/layout.html:89 msgid "Reading Goal" msgstr "閱讀ē›®ęؙ" @@ -2783,7 +2817,7 @@ msgstr "" #: bookwyrm/templates/import/import.html:5 #: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:79 +#: bookwyrm/templates/shelf/shelf.html:66 msgid "Import Books" msgstr "åŒÆå…„ę›øē›®" @@ -2951,8 +2985,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 "ęؙ锌" @@ -2965,8 +2999,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 "ä½œč€…" @@ -3072,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 "ꊱꭉļ¼ę­¤é‚€č«‹ē¢¼å·²äøå†ęœ‰ę•ˆć€‚" @@ -3203,10 +3233,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 "åƆē¢¼" @@ -3415,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 "ē§»é™¤" @@ -3491,11 +3518,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 "ē™»å‡ŗ" @@ -3701,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\"" @@ -4131,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 "ä½æē”Øč€…č³‡ę–™" @@ -4973,19 +5006,19 @@ msgstr "åƦ例:" #: bookwyrm/templates/settings/federation/edit_instance.html:52 #: bookwyrm/templates/settings/federation/instance.html:46 -#: bookwyrm/templates/settings/users/user_info.html:119 +#: 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:113 +#: 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:116 +#: bookwyrm/templates/settings/users/user_info.html:110 msgid "Version:" msgstr "ē‰ˆęœ¬:" @@ -4998,7 +5031,7 @@ msgid "Details" msgstr "č©³ē“°" #: bookwyrm/templates/settings/federation/instance.html:53 -#: bookwyrm/templates/user/layout.html:84 +#: bookwyrm/templates/user/layout.html:79 msgid "Activity" msgstr "ę“»å‹•" @@ -5012,7 +5045,7 @@ msgid "View all" msgstr "ęŖ¢č¦–å…ØéƒØ" #: bookwyrm/templates/settings/federation/instance.html:62 -#: bookwyrm/templates/settings/users/user_info.html:66 +#: bookwyrm/templates/settings/users/user_info.html:60 msgid "Reports:" msgstr "čˆ‰å ±:" @@ -5029,7 +5062,7 @@ msgid "Blocked by us:" msgstr "ęˆ‘å€‘ę‰€å°éŽ–ēš„:" #: bookwyrm/templates/settings/federation/instance.html:90 -#: bookwyrm/templates/settings/users/user_info.html:123 +#: bookwyrm/templates/settings/users/user_info.html:117 msgid "Notes" msgstr "備čØ»" @@ -5186,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 "邀請" @@ -5660,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 "" @@ -5749,106 +5798,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" -msgstr "停ē”Ø" - -#: bookwyrm/templates/settings/users/user_admin.html:108 -#: bookwyrm/templates/settings/users/user_info.html:133 +#: 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 "" -#: 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 "čØŖå•ę¬Šé™:" @@ -5904,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 "čح定" @@ -5961,7 +6012,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 "å»ŗē«‹ę›øꞶ" @@ -5969,65 +6020,57 @@ 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/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: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:99 #, python-format msgid "%(formatted_count)s book" msgid_plural "%(formatted_count)s books" msgstr[0] "" -#: 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 "ę­¤ę›øꞶę˜Æē©ŗēš„怂" @@ -6331,6 +6374,11 @@ msgstr "%(username)s å·²ē¶“閱讀äŗ† %(goal_count)s ęœ¬ę›ø 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" @@ -6633,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 "" @@ -6691,15 +6751,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" @@ -6720,7 +6776,7 @@ msgstr "å»ŗē«‹åˆ—č”Ø" msgid "Joined %(date)s" msgstr "åœØ %(date)s 加兄" -#: bookwyrm/templates/user/relationships/followers.html:31 +#: bookwyrm/templates/user/relationships/followers.html:36 #, python-format msgid "%(username)s has no followers" msgstr "%(username)s ę²’ęœ‰é—œę³Ø者" @@ -6831,7 +6887,7 @@ msgid "%(num)d book - by %(user)s" msgid_plural "%(num)d books - by %(user)s" msgstr[0] "" -#: bookwyrm/templatetags/utilities.py:48 +#: bookwyrm/templatetags/utilities.py:49 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "" From 913a19c8f0bdc8f5693d266f4b41808493d0a27d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 1 Jan 2024 19:33:49 -0800 Subject: [PATCH 239/458] Formats migration file --- bookwyrm/migrations/0191_merge_20240102_0326.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bookwyrm/migrations/0191_merge_20240102_0326.py b/bookwyrm/migrations/0191_merge_20240102_0326.py index 5f1fd88d2..485c14af8 100644 --- a/bookwyrm/migrations/0191_merge_20240102_0326.py +++ b/bookwyrm/migrations/0191_merge_20240102_0326.py @@ -6,9 +6,8 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0189_alter_user_preferred_language'), - ('bookwyrm', '0190_alter_notification_notification_type'), + ("bookwyrm", "0189_alter_user_preferred_language"), + ("bookwyrm", "0190_alter_notification_notification_type"), ] - operations = [ - ] + operations = [] From d9a640c809dafd17b53654b5ad0f7afbafb6e8d5 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 08:36:42 -0800 Subject: [PATCH 240/458] Fixes version number --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index faef31a43..39e898a4f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.0 +0.7.1 From 2a85378456ef26d50702fc35417928a2c99bd7d3 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 09:57:41 -0800 Subject: [PATCH 241/458] Removes part of migration causing upgrade issues --- bookwyrm/migrations/0184_auto_20231106_0421.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bookwyrm/migrations/0184_auto_20231106_0421.py b/bookwyrm/migrations/0184_auto_20231106_0421.py index e8197dea1..23bacc502 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 - ), ] From 381490e31d80670e8bb790a97b46b30611e32b9e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 10:35:30 -0800 Subject: [PATCH 242/458] Adds management command to clear all deleted user data --- .../commands/erase_deleted_user_data.py | 40 +++++++++++++++++++ bookwyrm/models/user.py | 14 +++++++ bw-dev | 5 ++- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 bookwyrm/management/commands/erase_deleted_user_data.py 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 000000000..fd3c790ce --- /dev/null +++ b/bookwyrm/management/commands/erase_deleted_user_data.py @@ -0,0 +1,40 @@ +""" 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="") diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 75ca1d527..89fd39b73 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -523,6 +523,20 @@ class KeyPair(ActivitypubMixin, BookWyrmModel): 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/bw-dev b/bw-dev index 27c20fe45..5a36f78e0 100755 --- a/bw-dev +++ b/bw-dev @@ -246,6 +246,9 @@ case "$CMD" in remove_remote_user_preview_images) runweb python manage.py remove_remote_user_preview_images ;; + erase_deleted_user_data) + runweb python manage.py erase_deleted_user_data "$@" + ;; copy_media_to_s3) awscommand "bookwyrm_media_volume:/images"\ "s3 cp /images s3://${AWS_STORAGE_BUCKET_NAME}/images\ @@ -297,7 +300,7 @@ case "$CMD" in echo "Unrecognised command. Try:" echo " setup" echo " up [container]" - echo " down" + echo " down" echo " service_ports_web" echo " initdb" echo " resetdb" From d6f7f76c4d8c35ebafb994f6f4ee01b932ae2bf0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 11:37:01 -0800 Subject: [PATCH 243/458] Removes outdated/unused version and updating code I had the bright idea of creating this update script but it doesn't work and hasn't been maintained, so it's just sitting there causing confusing and requiring weird things to exist in other places. Now, the unused `version` field can be removed and I can scrap the management command for getting versions. --- .../management/commands/instance_version.py | 54 ------------------- ..._version_sitesettings_available_version.py | 18 +++++++ bookwyrm/models/site.py | 2 +- bookwyrm/views/admin/dashboard.py | 18 ++----- update.sh | 37 ------------- 5 files changed, 24 insertions(+), 105 deletions(-) delete mode 100644 bookwyrm/management/commands/instance_version.py create mode 100644 bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py delete mode 100755 update.sh diff --git a/bookwyrm/management/commands/instance_version.py b/bookwyrm/management/commands/instance_version.py deleted file mode 100644 index ca150d640..000000000 --- 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/migrations/0192_rename_version_sitesettings_available_version.py b/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py new file mode 100644 index 000000000..219ae32f6 --- /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/models/site.py b/bookwyrm/models/site.py index bd53f1f07..7ca7e0015 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -45,7 +45,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) diff --git a/bookwyrm/views/admin/dashboard.py b/bookwyrm/views/admin/dashboard.py index 9d256fc6c..c5648ff11 100644 --- a/bookwyrm/views/admin/dashboard.py +++ b/bookwyrm/views/admin/dashboard.py @@ -15,7 +15,6 @@ from django.views import View from csp.decorators import csp_update from bookwyrm import models, settings -from bookwyrm.connectors.abstract_connector import get_data from bookwyrm.utils import regex @@ -59,18 +58,11 @@ class Dashboard(View): == site._meta.get_field("privacy_policy").get_default() ) - # check version - - try: - release = get_data(settings.RELEASE_API, timeout=3) - available_version = release.get("tag_name", None) - if available_version and version.parse(available_version) > version.parse( - settings.VERSION - ): - data["current_version"] = settings.VERSION - data["available_version"] = available_version - except: # pylint: disable= bare-except - pass + if site.available_version and version.parse(site.available_version) > version.parse( + settings.VERSION + ): + data["current_version"] = settings.VERSION + data["available_version"] = site.available_version return TemplateResponse(request, "settings/dashboard/dashboard.html", data) diff --git a/update.sh b/update.sh deleted file mode 100755 index 727ce1b24..000000000 --- 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! --------------- āœØ" From 5509941aa4d14fc5422644cac5e8ff658e1fbd5b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 12:23:32 -0800 Subject: [PATCH 244/458] Adds schedule-able task to check for version updates --- ..._version_sitesettings_available_version.py | 8 +++---- bookwyrm/models/site.py | 14 ++++++++++++ .../settings/dashboard/dashboard.html | 4 ++++ .../dashboard/warnings/check_for_updates.html | 22 +++++++++++++++++++ bookwyrm/views/admin/dashboard.py | 21 +++++++++++++++++- 5 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html diff --git a/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py b/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py index 219ae32f6..db67b4e92 100644 --- a/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py +++ b/bookwyrm/migrations/0192_rename_version_sitesettings_available_version.py @@ -6,13 +6,13 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0191_merge_20240102_0326'), + ("bookwyrm", "0191_merge_20240102_0326"), ] operations = [ migrations.RenameField( - model_name='sitesettings', - old_name='version', - new_name='available_version', + model_name="sitesettings", + old_name="version", + new_name="available_version", ), ] diff --git a/bookwyrm/models/site.py b/bookwyrm/models/site.py index 7ca7e0015..f82a4d94b 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -10,8 +10,11 @@ from django.dispatch import receiver 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 @@ -244,3 +247,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/templates/settings/dashboard/dashboard.html b/bookwyrm/templates/settings/dashboard/dashboard.html index 4c109c7e1..d43b3bade 100644 --- a/bookwyrm/templates/settings/dashboard/dashboard.html +++ b/bookwyrm/templates/settings/dashboard/dashboard.html @@ -45,6 +45,10 @@ {% include 'settings/dashboard/warnings/update_version.html' with warning_level="warning" fullwidth=True %} {% endif %} + {% if schedule_form %} + {% include 'settings/dashboard/warnings/check_for_updates.html' with warning_level="success" fullwidth=True %} + {% endif %} + {% if missing_privacy or missing_conduct %}

    {% if missing_privacy %} diff --git a/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html b/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html new file mode 100644 index 000000000..07f11a62d --- /dev/null +++ b/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html @@ -0,0 +1,22 @@ +{% extends 'settings/dashboard/warnings/layout.html' %} +{% load i18n %} + +{% block warning_text %} + +
    + {% csrf_token %} + +

    + {% blocktrans trimmed with current=current_version available=available_version %} + Check for available version updates? (Recommended) + {% endblocktrans %} +

    + + {{ schedule_form.every.as_hidden }} + {{ schedule_form.period.as_hidden }} + + +
    + +{% endblock %} + diff --git a/bookwyrm/views/admin/dashboard.py b/bookwyrm/views/admin/dashboard.py index c5648ff11..ea0675f59 100644 --- a/bookwyrm/views/admin/dashboard.py +++ b/bookwyrm/views/admin/dashboard.py @@ -6,15 +6,18 @@ from dateutil.parser import parse from packaging import version from django.contrib.auth.decorators import login_required, permission_required +from django.db import transaction from django.db.models import Q +from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils import timezone from django.utils.decorators import method_decorator from django.views import View +from django_celery_beat.models import PeriodicTask from csp.decorators import csp_update -from bookwyrm import models, settings +from bookwyrm import forms, models, settings from bookwyrm.utils import regex @@ -64,8 +67,24 @@ class Dashboard(View): data["current_version"] = settings.VERSION data["available_version"] = site.available_version + if not PeriodicTask.objects.filter(name="check-for-updates").exists(): + data["schedule_form"] = forms.IntervalScheduleForm({"every": 1, "period": "days"}) + return TemplateResponse(request, "settings/dashboard/dashboard.html", data) + def post(self, request): + """ Create a schedule task to check for updates """ + schedule_form = forms.IntervalScheduleForm(request.POST) + + with transaction.atomic(): + schedule = schedule_form.save(request) + PeriodicTask.objects.get_or_create( + interval=schedule, + name="check-for-updates", + task="bookwyrm.models.site.check_for_updates_task" + ) + return redirect("settings-dashboard") + def get_charts_and_stats(request): """Defines the dashboard charts""" From f36af42f414196f3e12d30a843470979cbcb9713 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 13:05:44 -0800 Subject: [PATCH 245/458] Adds view to see scheduled tasks --- bookwyrm/models/site.py | 2 +- bookwyrm/templates/settings/layout.html | 4 + bookwyrm/templates/settings/schedules.html | 116 +++++++++++++++++++++ bookwyrm/urls.py | 5 + bookwyrm/views/__init__.py | 1 + bookwyrm/views/admin/dashboard.py | 14 +-- bookwyrm/views/admin/schedule.py | 23 ++++ 7 files changed, 158 insertions(+), 7 deletions(-) create mode 100644 bookwyrm/templates/settings/schedules.html create mode 100644 bookwyrm/views/admin/schedule.py diff --git a/bookwyrm/models/site.py b/bookwyrm/models/site.py index f82a4d94b..ad0dbff64 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -251,7 +251,7 @@ def preview_image(instance, *args, **kwargs): @app.task(queue=MISC) def check_for_updates_task(): - """ See if git remote knows about a new version """ + """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) diff --git a/bookwyrm/templates/settings/layout.html b/bookwyrm/templates/settings/layout.html index dcaaaeb38..70c7ef0f4 100644 --- a/bookwyrm/templates/settings/layout.html +++ b/bookwyrm/templates/settings/layout.html @@ -85,6 +85,10 @@ {% url 'settings-celery' as url %} {% trans "Celery status" %}
  • +
  • + {% url 'settings-schedules' as url %} + {% trans "Scheduled tasks" %} +
  • {% url 'settings-email-config' as url %} {% trans "Email Configuration" %} diff --git a/bookwyrm/templates/settings/schedules.html b/bookwyrm/templates/settings/schedules.html new file mode 100644 index 000000000..fe096092d --- /dev/null +++ b/bookwyrm/templates/settings/schedules.html @@ -0,0 +1,116 @@ +{% extends 'settings/layout.html' %} +{% load i18n %} +{% load humanize %} +{% load utilities %} + +{% block title %} +{% trans "Scheduled tasks" %} +{% endblock %} + +{% block header %} +{% trans "Scheduled tasks" %} +{% endblock %} + +{% block panel %} + +
    +

    {% trans "Tasks" %}

    +
    + + + + + + + + + + + {% for task in tasks %} + + + + + + + + + + {% empty %} + + + + {% endfor %} +
    + {% trans "Name" %} + + {% trans "Celery task" %} + + {% trans "Date changed" %} + + {% trans "Last run at" %} + + {% trans "Schedule" %} + + {% trans "Schedule ID" %} + + {% trans "Enabled" %} +
    + {{ task.name }} + + {{ task.task }} + + {{ task.date_changed }} + + {{ task.last_run_at }} + + {% firstof task.interval task.crontab "None" %} + + {{ task.interval.id }} + + {{ task.enabled|yesno }} +
    + {% trans "No scheduled tasks" %} +
    +
    +
    + +
    +

    {% trans "Schedules" %}

    +
    + + + + + + + {% for schedule in schedules %} + + + + + + {% empty %} + + + + {% endfor %} +
    + {% trans "ID" %} + + {% trans "Schedule" %} + + {% trans "Tasks" %} +
    + {{ schedule.id }} + + {{ schedule }} + + {{ schedule.periodictask_set.count }} +
    + {% trans "No schedules found" %} +
    +
    +
    + +{% endblock %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 76e60245b..64742347a 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -359,6 +359,11 @@ urlpatterns = [ re_path( r"^settings/celery/ping/?$", views.celery_ping, name="settings-celery-ping" ), + re_path( + r"^settings/schedules/?$", + views.ScheduledTasks.as_view(), + name="settings-schedules", + ), re_path( r"^settings/email-config/?$", views.EmailConfig.as_view(), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 3be813208..d77f2675f 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -5,6 +5,7 @@ from .admin.announcements import EditAnnouncement, delete_announcement from .admin.automod import AutoMod, automod_delete, run_automod from .admin.automod import schedule_automod_task, unschedule_automod_task from .admin.celery_status import CeleryStatus, celery_ping +from .admin.schedule import ScheduledTasks from .admin.dashboard import Dashboard from .admin.federation import Federation, FederatedServer from .admin.federation import AddFederatedServer, ImportServerBlocklist diff --git a/bookwyrm/views/admin/dashboard.py b/bookwyrm/views/admin/dashboard.py index ea0675f59..4b2575fa6 100644 --- a/bookwyrm/views/admin/dashboard.py +++ b/bookwyrm/views/admin/dashboard.py @@ -61,19 +61,21 @@ class Dashboard(View): == site._meta.get_field("privacy_policy").get_default() ) - if site.available_version and version.parse(site.available_version) > version.parse( - settings.VERSION - ): + if site.available_version and version.parse( + site.available_version + ) > version.parse(settings.VERSION): data["current_version"] = settings.VERSION data["available_version"] = site.available_version if not PeriodicTask.objects.filter(name="check-for-updates").exists(): - data["schedule_form"] = forms.IntervalScheduleForm({"every": 1, "period": "days"}) + data["schedule_form"] = forms.IntervalScheduleForm( + {"every": 1, "period": "days"} + ) return TemplateResponse(request, "settings/dashboard/dashboard.html", data) def post(self, request): - """ Create a schedule task to check for updates """ + """Create a schedule task to check for updates""" schedule_form = forms.IntervalScheduleForm(request.POST) with transaction.atomic(): @@ -81,7 +83,7 @@ class Dashboard(View): PeriodicTask.objects.get_or_create( interval=schedule, name="check-for-updates", - task="bookwyrm.models.site.check_for_updates_task" + task="bookwyrm.models.site.check_for_updates_task", ) return redirect("settings-dashboard") diff --git a/bookwyrm/views/admin/schedule.py b/bookwyrm/views/admin/schedule.py new file mode 100644 index 000000000..ce5944ee5 --- /dev/null +++ b/bookwyrm/views/admin/schedule.py @@ -0,0 +1,23 @@ +""" Scheduled celery tasks """ +from django.contrib.auth.decorators import login_required, permission_required +from django.template.response import TemplateResponse +from django.utils.decorators import method_decorator +from django.views import View +from django_celery_beat.models import PeriodicTask, IntervalSchedule + + +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.edit_instance_settings", raise_exception=True), + name="dispatch", +) +# pylint: disable=no-self-use +class ScheduledTasks(View): + """Manage automated flagging""" + + def get(self, request): + """view schedules""" + data = {} + data["tasks"] = PeriodicTask.objects.all() + data["schedules"] = IntervalSchedule.objects.all() + return TemplateResponse(request, "settings/schedules.html", data) From 8be9e91d2162871faae0aaabbecdf8da449b6c2d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 13:16:53 -0800 Subject: [PATCH 246/458] Re-use schedules rather than creating new ones --- bookwyrm/views/admin/automod.py | 4 ++-- bookwyrm/views/admin/dashboard.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bookwyrm/views/admin/automod.py b/bookwyrm/views/admin/automod.py index 9a32dd9ee..58818ad9b 100644 --- a/bookwyrm/views/admin/automod.py +++ b/bookwyrm/views/admin/automod.py @@ -6,7 +6,7 @@ from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View from django.views.decorators.http import require_POST -from django_celery_beat.models import PeriodicTask +from django_celery_beat.models import PeriodicTask, IntervalSchedule from bookwyrm import forms, models @@ -54,7 +54,7 @@ def schedule_automod_task(request): return TemplateResponse(request, "settings/automod/rules.html", data) with transaction.atomic(): - schedule = form.save(request) + schedule, _ = IntervalSchedule.objects.get_or_create(**form.cleaned_data) PeriodicTask.objects.get_or_create( interval=schedule, name="automod-task", diff --git a/bookwyrm/views/admin/dashboard.py b/bookwyrm/views/admin/dashboard.py index 4b2575fa6..a4c630067 100644 --- a/bookwyrm/views/admin/dashboard.py +++ b/bookwyrm/views/admin/dashboard.py @@ -13,7 +13,7 @@ from django.template.response import TemplateResponse from django.utils import timezone from django.utils.decorators import method_decorator from django.views import View -from django_celery_beat.models import PeriodicTask +from django_celery_beat.models import PeriodicTask, IntervalSchedule from csp.decorators import csp_update @@ -79,7 +79,9 @@ class Dashboard(View): schedule_form = forms.IntervalScheduleForm(request.POST) with transaction.atomic(): - schedule = schedule_form.save(request) + schedule, _ = IntervalSchedule.objects.get_or_create( + **schedule_form.cleaned_data + ) PeriodicTask.objects.get_or_create( interval=schedule, name="check-for-updates", From 193a1c7d54564c3ab35be20e27681566c2305581 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 13:28:25 -0800 Subject: [PATCH 247/458] updates wording and fixes get or create logic --- VERSION | 2 +- .../settings/dashboard/warnings/check_for_updates.html | 4 ++-- bookwyrm/views/admin/dashboard.py | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 39e898a4f..ee6cdce3c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.1 +0.6.1 diff --git a/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html b/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html index 07f11a62d..f0a2a8013 100644 --- a/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html +++ b/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html @@ -8,14 +8,14 @@

    {% blocktrans trimmed with current=current_version available=available_version %} - Check for available version updates? (Recommended) + Would you like to automatically check for new BookWyrm releases? (recommended) {% endblocktrans %}

    {{ schedule_form.every.as_hidden }} {{ schedule_form.period.as_hidden }} - + {% endblock %} diff --git a/bookwyrm/views/admin/dashboard.py b/bookwyrm/views/admin/dashboard.py index a4c630067..21b19bf16 100644 --- a/bookwyrm/views/admin/dashboard.py +++ b/bookwyrm/views/admin/dashboard.py @@ -77,6 +77,8 @@ class Dashboard(View): def post(self, request): """Create a schedule task to check for updates""" schedule_form = forms.IntervalScheduleForm(request.POST) + if not schedule_form.is_valid(): + raise schedule_form.ValidationError(schedule_form.errors) with transaction.atomic(): schedule, _ = IntervalSchedule.objects.get_or_create( From d287581620a5d1238988803d05ce2ce9c6cbf52b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 13:31:18 -0800 Subject: [PATCH 248/458] Fixes html validation error --- .../settings/dashboard/warnings/check_for_updates.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html b/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html index f0a2a8013..00f320824 100644 --- a/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html +++ b/bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html @@ -1,6 +1,8 @@ {% extends 'settings/dashboard/warnings/layout.html' %} {% load i18n %} +{% block warning_link %}#{% endblock %} + {% block warning_text %}
    From 01db77a74584c6df18bc8dc624cacf8dbebb30f6 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 2 Jan 2024 18:29:55 -0800 Subject: [PATCH 249/458] Adds success message --- bookwyrm/management/commands/erase_deleted_user_data.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bookwyrm/management/commands/erase_deleted_user_data.py b/bookwyrm/management/commands/erase_deleted_user_data.py index fd3c790ce..40c3f042b 100644 --- a/bookwyrm/management/commands/erase_deleted_user_data.py +++ b/bookwyrm/management/commands/erase_deleted_user_data.py @@ -38,3 +38,6 @@ class Command(BaseCommand): 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") From db8c686dd35df0126ee770455651d99d15458c82 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Wed, 3 Jan 2024 15:43:15 +0100 Subject: [PATCH 250/458] Include book Readtrhough in the csv export --- bookwyrm/views/preferences/export.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index f54d97ccb..c691e2f50 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -54,6 +54,7 @@ class Export(View): fields = ( ["title", "author_text"] + deduplication_fields + + ["start_date", "finish_date", "stopped_date"] + ["rating", "review_name", "review_cw", "review_content"] ) writer.writerow(fields) @@ -70,6 +71,18 @@ class Export(View): book.rating = review_rating.rating if review_rating else None + readthrough = ( + models.ReadThrough.objects.filter( + user=request.user, book=book + ) + .order_by("-finish_date") + .first() + ) + if readthrough: + book.start_date = readthrough.start_date + book.finish_date = readthrough.finish_date + book.stopped_date = readthrough.stopped_date + review = ( models.Review.objects.filter( user=request.user, book=book, content__isnull=False From 766a2163ddc745afe0ecc4871f38d37235cb2cb9 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Wed, 3 Jan 2024 20:41:31 +0100 Subject: [PATCH 251/458] Code formatting --- bookwyrm/views/preferences/export.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index c691e2f50..5a3b0fd8e 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -72,9 +72,7 @@ class Export(View): book.rating = review_rating.rating if review_rating else None readthrough = ( - models.ReadThrough.objects.filter( - user=request.user, book=book - ) + models.ReadThrough.objects.filter(user=request.user, book=book) .order_by("-finish_date") .first() ) From ae5950f1871f2ac168c810a0a6bc98c7b5e37474 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Thu, 4 Jan 2024 11:03:07 +0100 Subject: [PATCH 252/458] Add readthrough fields to text_export.py --- bookwyrm/tests/views/preferences/test_export.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index 4f498f589..d633ae952 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -66,7 +66,7 @@ class ExportViews(TestCase): # pylint: disable=line-too-long self.assertEqual( export.content, - b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,rating,review_name,review_cw,review_content\r\nTest Book,," + b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content\r\nTest Book,," + self.book.remote_id.encode("utf-8") - + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,\r\n", + + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,\r\n", ) From 9acb5f66fee9e64f43c703f1dd631146f35a7724 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Thu, 4 Jan 2024 11:26:44 +0100 Subject: [PATCH 253/458] Convert DateTime to date --- bookwyrm/views/preferences/export.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 5a3b0fd8e..4353cf259 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -77,9 +77,9 @@ class Export(View): .first() ) if readthrough: - book.start_date = readthrough.start_date - book.finish_date = readthrough.finish_date - book.stopped_date = readthrough.stopped_date + book.start_date = readthrough.start_date.date() if readthrough.start_date else "" + book.finish_date = readthrough.finish_date.date() if readthrough.finish_date else "" + book.stopped_date = readthrough.stopped_date.date() if readthrough.stopped_date else "" review = ( models.Review.objects.filter( From 51cb70d34423afb65653947bff15a90a8fc3278e Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Thu, 4 Jan 2024 11:27:17 +0100 Subject: [PATCH 254/458] Change readhtrough order --- bookwyrm/views/preferences/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 4353cf259..c8badbc8c 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -73,7 +73,7 @@ class Export(View): readthrough = ( models.ReadThrough.objects.filter(user=request.user, book=book) - .order_by("-finish_date") + .order_by("-start_date","-finish_date") .first() ) if readthrough: From 30c9ec9611530ee8d98eaef8fc046c5e514d9f28 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Thu, 4 Jan 2024 11:28:17 +0100 Subject: [PATCH 255/458] Prevent lint error See @hughrun 's explanation https://github.com/bookwyrm-social/bookwyrm/pull/3189#issuecomment-1876145423 --- bookwyrm/tests/views/preferences/test_export.py | 4 +++- bookwyrm/views/preferences/export.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index d633ae952..2ef0f96fb 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -38,6 +38,8 @@ class ExportViews(TestCase): parent_work=self.work, isbn_13="9781234567890", bnf_id="beep", + start_date="2023-01-04", + finish_date="2024-01-04" ) def setUp(self): @@ -68,5 +70,5 @@ class ExportViews(TestCase): export.content, b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content\r\nTest Book,," + self.book.remote_id.encode("utf-8") - + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,\r\n", + + b",,,,,beep,,,,,,123456789X,9781234567890,,,2023-01-04,2024-01-04,,,,\r\n", ) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index c8badbc8c..2450a427d 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -103,7 +103,7 @@ class Export(View): ) -# pylint: disable=no-self-use +# pylint: disable=no-self-use,too-many-locals @method_decorator(login_required, name="dispatch") class ExportUser(View): """Let users export user data to import into another Bookwyrm instance""" From ebcc81dd73b295141a16407fded008d3c0abb85d Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Thu, 4 Jan 2024 11:33:26 +0100 Subject: [PATCH 256/458] Revert changes to default book These changes were introduced by mistake in my previous commit. --- bookwyrm/tests/views/preferences/test_export.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index 2ef0f96fb..74201ddad 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -37,9 +37,7 @@ class ExportViews(TestCase): remote_id="https://example.com/book/1", parent_work=self.work, isbn_13="9781234567890", - bnf_id="beep", - start_date="2023-01-04", - finish_date="2024-01-04" + bnf_id="beep" ) def setUp(self): @@ -70,5 +68,5 @@ class ExportViews(TestCase): export.content, b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content\r\nTest Book,," + self.book.remote_id.encode("utf-8") - + b",,,,,beep,,,,,,123456789X,9781234567890,,,2023-01-04,2024-01-04,,,,\r\n", + + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,\r\n", ) From c2622a510cd40eb3883eae4d01ccf2095754aa3b Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Thu, 4 Jan 2024 11:40:40 +0100 Subject: [PATCH 257/458] Change else statement to None vs "" --- bookwyrm/views/preferences/export.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 2450a427d..a6d51e24a 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -77,9 +77,9 @@ class Export(View): .first() ) if readthrough: - book.start_date = readthrough.start_date.date() if readthrough.start_date else "" - book.finish_date = readthrough.finish_date.date() if readthrough.finish_date else "" - book.stopped_date = readthrough.stopped_date.date() if readthrough.stopped_date else "" + book.start_date = readthrough.start_date.date() if readthrough.start_date else None + book.finish_date = readthrough.finish_date.date() if readthrough.finish_date else None + book.stopped_date = readthrough.stopped_date.date() if readthrough.stopped_date else None review = ( models.Review.objects.filter( From 6cd2c9113506cf71756fc1bb5f025297fbcc4f53 Mon Sep 17 00:00:00 2001 From: Wesley Aptekar-Cassels Date: Thu, 4 Jan 2024 18:58:12 -0500 Subject: [PATCH 258/458] Allow page numbers to be text, instead of integers. Fixes: #2640 --- .../0192_make_page_positions_text.py | 23 +++++++++++++++++++ bookwyrm/models/status.py | 10 ++++---- .../snippets/create_status/quotation.html | 6 ++--- bookwyrm/tests/views/books/test_book.py | 8 ++++--- 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 bookwyrm/migrations/0192_make_page_positions_text.py 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 000000000..940a9e941 --- /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/models/status.py b/bookwyrm/models/status.py index cc44fe2bf..f33c32824 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -338,11 +338,13 @@ class Quotation(BookStatus): 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, diff --git a/bookwyrm/templates/snippets/create_status/quotation.html b/bookwyrm/templates/snippets/create_status/quotation.html index bd1d817ad..dc17585a9 100644 --- a/bookwyrm/templates/snippets/create_status/quotation.html +++ b/bookwyrm/templates/snippets/create_status/quotation.html @@ -56,8 +56,7 @@ uuid: a unique identifier used to make html "id" attributes unique and clarify j Date: Fri, 5 Jan 2024 17:42:04 +0000 Subject: [PATCH 259/458] Bump pycryptodome from 3.16.0 to 3.19.1 Bumps [pycryptodome](https://github.com/Legrandin/pycryptodome) from 3.16.0 to 3.19.1. - [Release notes](https://github.com/Legrandin/pycryptodome/releases) - [Changelog](https://github.com/Legrandin/pycryptodome/blob/master/Changelog.rst) - [Commits](https://github.com/Legrandin/pycryptodome/compare/v3.16.0...v3.19.1) --- updated-dependencies: - dependency-name: pycryptodome dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0b09f3c19..6509effc7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ libsass==0.22.0 Markdown==3.4.1 Pillow==10.0.1 psycopg2==2.9.5 -pycryptodome==3.16.0 +pycryptodome==3.19.1 python-dateutil==2.8.2 redis==4.5.4 requests==2.31.0 From 93cab480d6a7cc1d8897d8a0a765c6ce9f5301a4 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Sat, 6 Jan 2024 09:50:14 +0100 Subject: [PATCH 260/458] Code format --- bookwyrm/tests/views/preferences/test_export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index 74201ddad..d633ae952 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -37,7 +37,7 @@ class ExportViews(TestCase): remote_id="https://example.com/book/1", parent_work=self.work, isbn_13="9781234567890", - bnf_id="beep" + bnf_id="beep", ) def setUp(self): From ce18d343e8de7a40b2da17fae0ebff1c065eda9f Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Sat, 6 Jan 2024 09:53:22 +0100 Subject: [PATCH 261/458] Fix pylint error and code format --- bookwyrm/views/preferences/export.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index a6d51e24a..3443be461 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -17,7 +17,7 @@ from bookwyrm import models from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from bookwyrm.settings import PAGE_LENGTH -# pylint: disable=no-self-use +# pylint: disable=no-self-use,too-many-locals @method_decorator(login_required, name="dispatch") class Export(View): """Let users export data""" @@ -73,13 +73,21 @@ class Export(View): readthrough = ( models.ReadThrough.objects.filter(user=request.user, book=book) - .order_by("-start_date","-finish_date") + .order_by("-start_date", "-finish_date") .first() ) if readthrough: - book.start_date = readthrough.start_date.date() if readthrough.start_date else None - book.finish_date = readthrough.finish_date.date() if readthrough.finish_date else None - book.stopped_date = readthrough.stopped_date.date() if readthrough.stopped_date else None + book.start_date = ( + readthrough.start_date.date() if readthrough.start_date else None + ) + book.finish_date = ( + readthrough.finish_date.date() if readthrough.finish_date else None + ) + book.stopped_date = ( + readthrough.stopped_date.date() + if readthrough.stopped_date + else None + ) review = ( models.Review.objects.filter( @@ -103,7 +111,7 @@ class Export(View): ) -# pylint: disable=no-self-use,too-many-locals +# pylint: disable=no-self-use @method_decorator(login_required, name="dispatch") class ExportUser(View): """Let users export user data to import into another Bookwyrm instance""" From 83ff880603745adf2ef92b8ca489f9d2a7ea1d88 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 7 Jan 2024 08:31:48 -0800 Subject: [PATCH 262/458] Revert "Don't show notification for user follow request if the user is inactive" --- bookwyrm/templates/notifications/item.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bookwyrm/templates/notifications/item.html b/bookwyrm/templates/notifications/item.html index a1329d31e..ac60ad46f 100644 --- a/bookwyrm/templates/notifications/item.html +++ b/bookwyrm/templates/notifications/item.html @@ -10,9 +10,7 @@ {% 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' %} From 1a682753c0f126a8319389397d7558d88183b989 Mon Sep 17 00:00:00 2001 From: Rohan Sureshkumar Date: Tue, 9 Jan 2024 15:31:05 +0530 Subject: [PATCH 263/458] Issue-3187: changes --- bookwyrm/templates/feed/feed.html | 2 +- bookwyrm/views/feed.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index 7ecf10b70..820314b7a 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -33,7 +33,7 @@ - {% if request.user.show_goal and not goal and tab.key == 'home' %} + {% if request.user.show_goal and not goal and tab.key == 'home' and has_read_throughs %} {% now 'Y' as year %}
    {% include 'feed/goal_card.html' with year=year %} diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index 17218b93e..381d233e9 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -52,6 +52,8 @@ class Feed(View): suggestions = suggested_users.get_suggestions(request.user) + readthroughs = models.ReadThrough.objects.filter(user=request.user) + data = { **feed_page_data(request.user), **{ @@ -66,6 +68,7 @@ class Feed(View): "path": f"/{tab['key']}", "annual_summary_year": get_annual_summary_year(), "has_tour": True, + "has_read_throughs": True if len(readthroughs) else False, }, } return TemplateResponse(request, "feed/feed.html", data) From 854eb36618fe4371b37b4da3a86c68d6778d195b Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Sat, 13 Jan 2024 16:43:41 +0000 Subject: [PATCH 264/458] Export bookshelves and review date --- .../tests/views/preferences/test_export.py | 9 +++-- bookwyrm/views/preferences/export.py | 36 +++++++++++++++++-- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index d633ae952..7a1bcd6db 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -18,7 +18,9 @@ class ExportViews(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData( + self, + ): # pylint: disable=bad-classmethod-argument, disable=invalid-name """we need basic test data and mocks""" with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( "bookwyrm.activitystreams.populate_stream_task.delay" @@ -40,6 +42,7 @@ class ExportViews(TestCase): bnf_id="beep", ) + # pylint: disable=invalid-name def setUp(self): """individual test setup""" self.factory = RequestFactory() @@ -66,7 +69,7 @@ class ExportViews(TestCase): # pylint: disable=line-too-long self.assertEqual( export.content, - b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content\r\nTest Book,," + b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content,review_published,shelf,shelf_name,shelf_date\r\nTest Book,," + self.book.remote_id.encode("utf-8") - + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,\r\n", + + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,,,,,\r\n", ) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 3443be461..d16f3aaa3 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -17,6 +17,7 @@ from bookwyrm import models from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from bookwyrm.settings import PAGE_LENGTH + # pylint: disable=no-self-use,too-many-locals @method_decorator(login_required, name="dispatch") class Export(View): @@ -54,8 +55,19 @@ class Export(View): fields = ( ["title", "author_text"] + deduplication_fields - + ["start_date", "finish_date", "stopped_date"] - + ["rating", "review_name", "review_cw", "review_content"] + + [ + "start_date", + "finish_date", + "stopped_date", + "rating", + "review_name", + "review_cw", + "review_content", + "review_published", + "shelf", + "shelf_name", + "shelf_date", + ] ) writer.writerow(fields) @@ -97,9 +109,27 @@ class Export(View): .first() ) if review: + book.review_published = ( + review.published_date.date() if review.published_date else None + ) book.review_name = review.name book.review_cw = review.content_warning - book.review_content = review.raw_content + book.review_content = ( + review.raw_content if review.raw_content else review.content + ) # GoodReads imported reviews do not have raw_content, but content. + + shelfbook = ( + models.ShelfBook.objects.filter(user=request.user, book=book) + .order_by("-shelved_date", "-created_date", "-updated_date") + .last() + ) + if shelfbook: + book.shelf = shelfbook.shelf.identifier + book.shelf_name = shelfbook.shelf.name + book.shelf_date = ( + shelfbook.shelved_date.date() if shelfbook.shelved_date else None + ) + writer.writerow([getattr(book, field, "") or "" for field in fields]) return HttpResponse( From 9a487b0442c0d9e94b511491bf61bd00b3cfebfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 13 Jan 2024 17:51:14 +0100 Subject: [PATCH 265/458] Ensure dev-tools uses bookworm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In 1937177e1 ("dev-tools: use apt source for Node instead of setup script"), I introduced the use of `Signed-By` with a public key block, which is only supported in bookworm (bullseye only supports fingerprints, TTBOMK). Python's Docker images already use bookworm by default, but we explicitly require it now to avoid build errors if someone has a very old image laying around (see, e.g., #3190). (This can be dropped after Debian 13 ā€˜trixieā€™ is released.) --- dev-tools/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index 3b7740a78..6c132944f 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.9-bookworm WORKDIR /app/dev-tools ENV PATH="/app/dev-tools/node_modules/.bin:$PATH" From eb13eb98828509b96c34fbbcae272d37050789f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sat, 13 Jan 2024 18:55:13 +0100 Subject: [PATCH 266/458] Invalidate `active_shelf` when switching editions --- bookwyrm/views/books/editions.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bookwyrm/views/books/editions.py b/bookwyrm/views/books/editions.py index 54d1bd84c..0d59d0bcc 100644 --- a/bookwyrm/views/books/editions.py +++ b/bookwyrm/views/books/editions.py @@ -3,6 +3,7 @@ from functools import reduce import operator from django.contrib.auth.decorators import login_required +from django.core.cache import cache as django_cache from django.core.paginator import Paginator from django.db import transaction from django.db.models import Q @@ -103,4 +104,10 @@ def switch_edition(request): readthrough.book = new_edition readthrough.save() + django_cache.delete_many( + [ + f"active_shelf-{request.user.id}-{book_id}" + for book_id in new_edition.parent_work.editions.values_list("id", flat=True) + ] + ) return redirect(f"/book/{new_edition.id}") From cbd08127efe8105576be779ad7f0fa938878a36a Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 14 Jan 2024 12:14:44 +1100 Subject: [PATCH 267/458] initial work on fixing user exports with s3 - custom storages - tar.gz within bucket using s3_tar - slightly changes export directory structure - major problems still outstanding re delivering s3 files to end users --- .../migrations/0192_auto_20240114_0055.py | 53 ++ bookwyrm/models/bookwyrm_export_job.py | 460 ++++++++++++------ bookwyrm/models/job.py | 7 +- bookwyrm/settings.py | 1 + bookwyrm/storage_backends.py | 14 + bookwyrm/templatetags/utilities.py | 27 +- exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 | Bin 0 -> 3820 bytes exports/ba15a57f-e29e-4a29-aaf4-306b66960273 | Bin 0 -> 41614 bytes requirements.txt | 1 + 9 files changed, 408 insertions(+), 155 deletions(-) create mode 100644 bookwyrm/migrations/0192_auto_20240114_0055.py create mode 100644 exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 create mode 100644 exports/ba15a57f-e29e-4a29-aaf4-306b66960273 diff --git a/bookwyrm/migrations/0192_auto_20240114_0055.py b/bookwyrm/migrations/0192_auto_20240114_0055.py new file mode 100644 index 000000000..f4d324f7f --- /dev/null +++ b/bookwyrm/migrations/0192_auto_20240114_0055.py @@ -0,0 +1,53 @@ +# Generated by Django 3.2.23 on 2024-01-14 00:55 + +import bookwyrm.storage_backends +import django.core.serializers.json +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0191_merge_20240102_0326'), + ] + + operations = [ + migrations.AddField( + model_name='bookwyrmexportjob', + name='export_json', + field=models.JSONField(encoder=django.core.serializers.json.DjangoJSONEncoder, null=True), + ), + migrations.AddField( + model_name='bookwyrmexportjob', + name='json_completed', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='bookwyrmexportjob', + name='export_data', + field=models.FileField(null=True, storage=bookwyrm.storage_backends.ExportsFileStorage, upload_to=''), + ), + migrations.CreateModel( + name='AddFileToTar', + fields=[ + ('childjob_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='bookwyrm.childjob')), + ('parent_export_job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='child_edition_export_jobs', to='bookwyrm.bookwyrmexportjob')), + ], + options={ + 'abstract': False, + }, + bases=('bookwyrm.childjob',), + ), + migrations.CreateModel( + name='AddBookToUserExportJob', + fields=[ + ('childjob_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='bookwyrm.childjob')), + ('edition', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bookwyrm.edition')), + ], + options={ + 'abstract': False, + }, + bases=('bookwyrm.childjob',), + ), + ] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 1f6085e0c..12a9792e2 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -2,94 +2,347 @@ import dataclasses import logging +import boto3 +from s3_tar import S3Tar from uuid import uuid4 -from django.db.models import FileField +from django.db.models import CASCADE, BooleanField, FileField, ForeignKey, JSONField from django.db.models import Q from django.core.serializers.json import DjangoJSONEncoder -from django.core.files.base import ContentFile +from django.core.files.base import ContentFile, File +from django.utils import timezone + +from bookwyrm import settings, storage_backends 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.models.job import ParentJob, ChildJob, ParentTask, SubTask 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) + if settings.USE_S3: + storage = storage_backends.ExportsS3Storage + else: + storage = storage_backends.ExportsFileStorage + + export_data = FileField(null=True, storage=storage) # use custom storage backend here + export_json = JSONField(null=True, encoder=DjangoJSONEncoder) + json_completed = BooleanField(default=False) + def start_job(self): """Start the job""" - start_export_task.delay(job_id=self.id, no_children=True) - return self + task = start_export_task.delay(job_id=self.id, no_children=False) + self.task_id = task.id + self.save(update_fields=["task_id"]) + + + 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: + if not self.json_completed: + + try: + self.json_completed = True + self.save(update_fields=["json_completed"]) + + # add json file to tarfile + tar_job = AddFileToTar.objects.create( + parent_job=self, + parent_export_job=self + ) + tar_job.start_job() + + except Exception as err: # pylint: disable=broad-except + logger.exception("job %s failed with error: %s", self.id, err) + tar_job.set_status("failed") + self.stop_job(reason="failed") + + else: + self.complete_job() + + +class AddBookToUserExportJob(ChildJob): + """append book metadata for each book in an export""" + + edition = ForeignKey(Edition, on_delete=CASCADE) + + def start_job(self): + """Start the job""" + try: + + book = {} + book["work"] = self.edition.parent_work.to_activity() + book["edition"] = self.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 self.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=self.parent_job.user, book=self.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=self.edition, user=self.parent_job.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=self.parent_job.user, book=self.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=self.parent_job.user, book=self.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=self.parent_job.user, book=self.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=self.parent_job.user, book=self.edition).distinct().values() + ) + book["readthroughs"] = list(book_readthroughs) + + self.parent_job.export_json["books"].append(book) + self.parent_job.save(update_fields=["export_json"]) + self.complete_job() + + except Exception as err: # pylint: disable=broad-except + logger.exception("AddBookToUserExportJob %s Failed with error: %s", self.id, err) + self.set_status("failed") + + +class AddFileToTar(ChildJob): + """add files to export""" + + parent_export_job = ForeignKey( + BookwyrmExportJob, on_delete=CASCADE, related_name="child_edition_export_jobs" + ) # TODO: do we actually need this? Does self.parent_job.export_data work? + + + def start_job(self): + """Start the job""" + + # NOTE we are doing this all in one big job, which has the potential to block a thread + # This is because we need to refer to the same s3_job or BookwyrmTarFile whilst writing + # Alternatives using a series of jobs in a loop would be beter + # but Hugh couldn't make that work + + try: + task_id=self.parent_export_job.task_id + export_data = self.parent_export_job.export_data + export_json = self.parent_export_job.export_json + json_data = DjangoJSONEncoder().encode(export_json) + user = self.parent_export_job.user + editions = get_books_for_user(user) + + if settings.USE_S3: + s3_job = S3Tar( + settings.AWS_STORAGE_BUCKET_NAME, + f"exports/{str(self.parent_export_job.task_id)}.tar.gz" + ) + + # TODO: either encrypt the file or we will need to get it to the user + # from this secure part of the bucket + export_data.save("archive.json", ContentFile(json_data.encode("utf-8"))) + + s3_job.add_file( + f"exports/{export_data.name}" + ) + s3_job.add_file( + f"images/{user.avatar.name}", + folder="avatar" + ) + for book in editions: + if getattr(book, "cover", False): + cover_name = f"images/{book.cover.name}" + s3_job.add_file( + cover_name, + folder="covers" + ) + + s3_job.tar() + # delete export json as soon as it's tarred + # there is probably a better way to do this + # Currently this merely makes the file empty + export_data.delete(save=False) + + else: + # TODO: is the export_data file open to the world? + logger.info( "export file URL: %s",export_data.url) + + export_data.open("wb") + with BookwyrmTarFile.open(mode="w:gz", fileobj=export_data) 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", directory=f"avatar/") # TODO: does this work? + + for book in editions: + if getattr(book, "cover", False): + tar.add_image(book.cover) + + export_data.close() + + + self.complete_job() + + except Exception as err: # pylint: disable=broad-except + logger.exception("AddFileToTar %s Failed with error: %s", self.id, err) + self.stop_job(reason="failed") + self.parent_job.stop_job(reason="failed") @app.task(queue=IMPORTS, base=ParentTask) def start_export_task(**kwargs): - """trigger the child tasks for each row""" + """trigger the child tasks for user export""" + 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 + + # prepare the initial file and base json 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"]) + job.export_json = job.user.to_activity() + job.save(update_fields=["export_data", "export_json"]) + + # let's go + json_export.delay(job_id=job.id, job_user=job.user.id, no_children=False) + 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") +@app.task(queue=IMPORTS, base=ParentTask) +def export_saved_lists_task(**kwargs): + """add user saved lists to export JSON""" + + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + saved_lists = List.objects.filter(id__in=job.user.saved_lists.all()).distinct() + job.export_json["saved_lists"] = [l.remote_id for l in saved_lists] + job.save(update_fields=["export_json"]) -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")) +@app.task(queue=IMPORTS, base=ParentTask) +def export_follows_task(**kwargs): + """add user follows to export JSON""" - # 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() + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + follows = UserFollows.objects.filter(user_subject=job.user).distinct() + following = User.objects.filter(userfollows_user_object__in=follows).distinct() + job.export_json["follows"] = [f.remote_id for f in following] + job.save(update_fields=["export_json"]) -def json_export( - user, -): # pylint: disable=too-many-locals, too-many-statements, too-many-branches +@app.task(queue=IMPORTS, base=ParentTask) +def export_blocks_task(**kwargs): + """add user blocks to export JSON""" + + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + blocks = UserBlocks.objects.filter(user_subject=job.user).distinct() + blocking = User.objects.filter(userblocks_user_object__in=blocks).distinct() + job.export_json["blocks"] = [b.remote_id for b in blocking] + job.save(update_fields=["export_json"]) + + +@app.task(queue=IMPORTS, base=ParentTask) +def export_reading_goals_task(**kwargs): + """add user reading goals to export JSON""" + + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + reading_goals = AnnualGoal.objects.filter(user=job.user).distinct() + job.export_json["goals"] = [] + for goal in reading_goals: + exported_user["goals"].append( + {"goal": goal.goal, "year": goal.year, "privacy": goal.privacy} + ) + job.save(update_fields=["export_json"]) + + +@app.task(queue=IMPORTS, base=ParentTask) +def json_export(**kwargs): """Generate an export for a user""" - # User as AP object - exported_user = user.to_activity() + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + job.set_status("active") + job_id = kwargs["job_id"] + # I don't love this but it prevents a JSON encoding error # when there is no user image if isinstance( - exported_user["icon"], + job.export_json["icon"], dataclasses._MISSING_TYPE, # pylint: disable=protected-access ): - exported_user["icon"] = {} + job.export_json["icon"] = {} else: # change the URL to be relative to the JSON file - file_type = exported_user["icon"]["url"].rsplit(".", maxsplit=1)[-1] + file_type = job.export_json["icon"]["url"].rsplit(".", maxsplit=1)[-1] filename = f"avatar.{file_type}" - exported_user["icon"]["url"] = filename + job.export_json["icon"]["url"] = filename # Additional settings - can't be serialized as AP vals = [ @@ -98,120 +351,45 @@ def json_export( "default_post_privacy", "show_suggested_users", ] - exported_user["settings"] = {} + job.export_json["settings"] = {} for k in vals: - exported_user["settings"][k] = getattr(user, k) + job.export_json["settings"][k] = getattr(job.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} - ) + job.export_json["books"] = [] - # Reading history - can't be serialized as AP - readthroughs = ReadThrough.objects.filter(user=user).distinct().values() - readthroughs = list(readthroughs) + # save settings we just updated + job.save(update_fields=["export_json"]) - # Books - editions = get_books_for_user(user) - exported_user["books"] = [] + # trigger subtasks + export_saved_lists_task.delay(job_id=job_id, no_children=False) + export_follows_task.delay(job_id=job_id, no_children=False) + export_blocks_task.delay(job_id=job_id, no_children=False) + trigger_books_jobs.delay(job_id=job_id, no_children=False) - 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}" +@app.task(queue=IMPORTS, base=ParentTask) +def trigger_books_jobs(**kwargs): + """trigger tasks to get data for each book""" - # authors - book["authors"] = [] - for author in edition.authors.all(): - book["authors"].append(author.to_activity()) + try: + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + editions = get_books_for_user(job.user) - # 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() - ) + if len(editions) == 0: + job.notify_child_job_complete() + return - 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) + for edition in editions: + try: + edition_job = AddBookToUserExportJob.objects.create(edition=edition, parent_job=job) + edition_job.start_job() + except Exception as err: # pylint: disable=broad-except + logger.exception("AddBookToUserExportJob %s Failed with error: %s", edition_job.id, err) + edition_job.set_status("failed") + except Exception as err: # pylint: disable=broad-except + logger.exception("trigger_books_jobs %s Failed with error: %s", job.id, err) + job.set_status("failed") def get_books_for_user(user): """Get all the books and editions related to a user""" diff --git a/bookwyrm/models/job.py b/bookwyrm/models/job.py index 4f5cb2093..5a2653571 100644 --- a/bookwyrm/models/job.py +++ b/bookwyrm/models/job.py @@ -135,8 +135,7 @@ class ParentJob(Job): ) app.control.revoke(list(tasks)) - for task in self.pending_child_jobs: - task.update(status=self.Status.STOPPED) + self.pending_child_jobs.update(status=self.Status.STOPPED) @property def has_completed(self): @@ -248,7 +247,7 @@ class SubTask(app.Task): """ def before_start( - self, task_id, args, kwargs + self, task_id, *args, **kwargs ): # pylint: disable=no-self-use, unused-argument """Handler called before the task starts. Override. @@ -272,7 +271,7 @@ class SubTask(app.Task): child_job.set_status(ChildJob.Status.ACTIVE) def on_success( - self, retval, task_id, args, kwargs + self, retval, task_id, *args, **kwargs ): # pylint: disable=no-self-use, unused-argument """Run by the worker if the task executes successfully. Override. diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index fcc91857a..7896850e3 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -442,3 +442,4 @@ if HTTP_X_FORWARDED_PROTO: # 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" +DATA_UPLOAD_MAX_MEMORY_SIZE = (1024**2 * 20) # 20MB TEMPORARY FIX WHILST WORKING ON THIS \ No newline at end of file diff --git a/bookwyrm/storage_backends.py b/bookwyrm/storage_backends.py index 6dd9f522c..c97b4e848 100644 --- a/bookwyrm/storage_backends.py +++ b/bookwyrm/storage_backends.py @@ -1,6 +1,7 @@ """Handles backends for storages""" import os from tempfile import SpooledTemporaryFile +from django.core.files.storage import FileSystemStorage from storages.backends.s3boto3 import S3Boto3Storage from storages.backends.azure_storage import AzureStorage @@ -61,3 +62,16 @@ class AzureImagesStorage(AzureStorage): # pylint: disable=abstract-method location = "images" overwrite_files = False + +class ExportsFileStorage(FileSystemStorage): # pylint: disable=abstract-method + """Storage class for exports contents with local files""" + + location = "exports" + overwrite_files = False + +class ExportsS3Storage(S3Boto3Storage): # pylint: disable=abstract-method + """Storage class for exports contents with S3""" + + location = "exports" + default_acl = None + overwrite_files = False \ No newline at end of file diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index fca66688a..754db41dd 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _ from django.templatetags.static import static from bookwyrm.models import User -from bookwyrm.settings import INSTANCE_ACTOR_USERNAME +from bookwyrm.settings import INSTANCE_ACTOR_USERNAME, USE_S3 register = template.Library() @@ -133,15 +133,22 @@ def get_file_size(file): """display the size of a file in human readable terms""" try: - raw_size = os.stat(file.path).st_size - if raw_size < 1024: - return f"{raw_size} bytes" - if raw_size < 1024**2: - return f"{raw_size/1024:.2f} KB" - if raw_size < 1024**3: - return f"{raw_size/1024**2:.2f} MB" - return f"{raw_size/1024**3:.2f} GB" - except Exception: # pylint: disable=broad-except + # TODO: this obviously isn't a proper solution + # boto storages do not implement 'path' + if not USE_S3: + raw_size = os.stat(file.path).st_size + if raw_size < 1024: + return f"{raw_size} bytes" + if raw_size < 1024**2: + return f"{raw_size/1024:.2f} KB" + if raw_size < 1024**3: + return f"{raw_size/1024**2:.2f} MB" + return f"{raw_size/1024**3:.2f} GB" + + return "" + + except Exception as e: # pylint: disable=broad-except + print(e) return "" diff --git a/exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 b/exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 new file mode 100644 index 0000000000000000000000000000000000000000..d7166b70306179d10b652499641665bc4e5a992a GIT binary patch literal 3820 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 literal 0 HcmV?d00001 diff --git a/exports/ba15a57f-e29e-4a29-aaf4-306b66960273 b/exports/ba15a57f-e29e-4a29-aaf4-306b66960273 new file mode 100644 index 0000000000000000000000000000000000000000..318069303d9f47f3296429b66dc293422a67d8fe GIT binary patch literal 41614 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 Date: Sun, 14 Jan 2024 12:19:59 +1100 Subject: [PATCH 268/458] oops - remove test export files - check in emblackened files --- .../migrations/0192_auto_20240114_0055.py | 77 ++++++++++++----- bookwyrm/models/bookwyrm_export_job.py | 79 ++++++++++-------- bookwyrm/settings.py | 4 +- bookwyrm/storage_backends.py | 4 +- exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 | Bin 3820 -> 0 bytes exports/ba15a57f-e29e-4a29-aaf4-306b66960273 | Bin 41614 -> 0 bytes 6 files changed, 108 insertions(+), 56 deletions(-) delete mode 100644 exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 delete mode 100644 exports/ba15a57f-e29e-4a29-aaf4-306b66960273 diff --git a/bookwyrm/migrations/0192_auto_20240114_0055.py b/bookwyrm/migrations/0192_auto_20240114_0055.py index f4d324f7f..824439728 100644 --- a/bookwyrm/migrations/0192_auto_20240114_0055.py +++ b/bookwyrm/migrations/0192_auto_20240114_0055.py @@ -9,45 +9,84 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0191_merge_20240102_0326'), + ("bookwyrm", "0191_merge_20240102_0326"), ] operations = [ migrations.AddField( - model_name='bookwyrmexportjob', - name='export_json', - field=models.JSONField(encoder=django.core.serializers.json.DjangoJSONEncoder, null=True), + model_name="bookwyrmexportjob", + name="export_json", + field=models.JSONField( + encoder=django.core.serializers.json.DjangoJSONEncoder, null=True + ), ), migrations.AddField( - model_name='bookwyrmexportjob', - name='json_completed', + model_name="bookwyrmexportjob", + name="json_completed", field=models.BooleanField(default=False), ), migrations.AlterField( - model_name='bookwyrmexportjob', - name='export_data', - field=models.FileField(null=True, storage=bookwyrm.storage_backends.ExportsFileStorage, upload_to=''), + model_name="bookwyrmexportjob", + name="export_data", + field=models.FileField( + null=True, + storage=bookwyrm.storage_backends.ExportsFileStorage, + upload_to="", + ), ), migrations.CreateModel( - name='AddFileToTar', + name="AddFileToTar", fields=[ - ('childjob_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='bookwyrm.childjob')), - ('parent_export_job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='child_edition_export_jobs', to='bookwyrm.bookwyrmexportjob')), + ( + "childjob_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="bookwyrm.childjob", + ), + ), + ( + "parent_export_job", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="child_edition_export_jobs", + to="bookwyrm.bookwyrmexportjob", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('bookwyrm.childjob',), + bases=("bookwyrm.childjob",), ), migrations.CreateModel( - name='AddBookToUserExportJob', + name="AddBookToUserExportJob", fields=[ - ('childjob_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='bookwyrm.childjob')), - ('edition', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bookwyrm.edition')), + ( + "childjob_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="bookwyrm.childjob", + ), + ), + ( + "edition", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="bookwyrm.edition", + ), + ), ], options={ - 'abstract': False, + "abstract": False, }, - bases=('bookwyrm.childjob',), + bases=("bookwyrm.childjob",), ), ] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 12a9792e2..2d1c0d94f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -24,6 +24,7 @@ from bookwyrm.utils.tar import BookwyrmTarFile logger = logging.getLogger(__name__) + class BookwyrmExportJob(ParentJob): """entry for a specific request to export a bookwyrm user""" @@ -32,11 +33,12 @@ class BookwyrmExportJob(ParentJob): else: storage = storage_backends.ExportsFileStorage - export_data = FileField(null=True, storage=storage) # use custom storage backend here + export_data = FileField( + null=True, storage=storage + ) # use custom storage backend here export_json = JSONField(null=True, encoder=DjangoJSONEncoder) json_completed = BooleanField(default=False) - def start_job(self): """Start the job""" @@ -44,7 +46,6 @@ class BookwyrmExportJob(ParentJob): self.task_id = task.id self.save(update_fields=["task_id"]) - def notify_child_job_complete(self): """let the job know when the items get work done""" @@ -63,9 +64,8 @@ class BookwyrmExportJob(ParentJob): # add json file to tarfile tar_job = AddFileToTar.objects.create( - parent_job=self, - parent_export_job=self - ) + parent_job=self, parent_export_job=self + ) tar_job.start_job() except Exception as err: # pylint: disable=broad-except @@ -116,7 +116,9 @@ class AddBookToUserExportJob(ChildJob): # 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=self.edition, user=self.parent_job.user).distinct() + list_items = ListItem.objects.filter( + book=self.edition, user=self.parent_job.user + ).distinct() for item in list_items: list_info = item.book_list.to_activity() @@ -133,16 +135,18 @@ class AddBookToUserExportJob(ChildJob): for status in ["comments", "quotations", "reviews"]: book[status] = [] - - comments = Comment.objects.filter(user=self.parent_job.user, book=self.edition).all() + comments = Comment.objects.filter( + user=self.parent_job.user, book=self.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=self.parent_job.user, book=self.edition).all() + quotes = Quotation.objects.filter( + user=self.parent_job.user, book=self.edition + ).all() for status in quotes: obj = status.to_activity() obj["position"] = status.position @@ -150,15 +154,18 @@ class AddBookToUserExportJob(ChildJob): obj["position_mode"] = status.position_mode book["quotations"].append(obj) - - reviews = Review.objects.filter(user=self.parent_job.user, book=self.edition).all() + reviews = Review.objects.filter( + user=self.parent_job.user, book=self.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=self.parent_job.user, book=self.edition).distinct().values() + ReadThrough.objects.filter(user=self.parent_job.user, book=self.edition) + .distinct() + .values() ) book["readthroughs"] = list(book_readthroughs) @@ -167,7 +174,9 @@ class AddBookToUserExportJob(ChildJob): self.complete_job() except Exception as err: # pylint: disable=broad-except - logger.exception("AddBookToUserExportJob %s Failed with error: %s", self.id, err) + logger.exception( + "AddBookToUserExportJob %s Failed with error: %s", self.id, err + ) self.set_status("failed") @@ -176,8 +185,7 @@ class AddFileToTar(ChildJob): parent_export_job = ForeignKey( BookwyrmExportJob, on_delete=CASCADE, related_name="child_edition_export_jobs" - ) # TODO: do we actually need this? Does self.parent_job.export_data work? - + ) # TODO: do we actually need this? Does self.parent_job.export_data work? def start_job(self): """Start the job""" @@ -188,7 +196,7 @@ class AddFileToTar(ChildJob): # but Hugh couldn't make that work try: - task_id=self.parent_export_job.task_id + task_id = self.parent_export_job.task_id export_data = self.parent_export_job.export_data export_json = self.parent_export_job.export_json json_data = DjangoJSONEncoder().encode(export_json) @@ -198,27 +206,19 @@ class AddFileToTar(ChildJob): if settings.USE_S3: s3_job = S3Tar( settings.AWS_STORAGE_BUCKET_NAME, - f"exports/{str(self.parent_export_job.task_id)}.tar.gz" + f"exports/{str(self.parent_export_job.task_id)}.tar.gz", ) # TODO: either encrypt the file or we will need to get it to the user # from this secure part of the bucket export_data.save("archive.json", ContentFile(json_data.encode("utf-8"))) - s3_job.add_file( - f"exports/{export_data.name}" - ) - s3_job.add_file( - f"images/{user.avatar.name}", - folder="avatar" - ) + s3_job.add_file(f"exports/{export_data.name}") + s3_job.add_file(f"images/{user.avatar.name}", folder="avatar") for book in editions: if getattr(book, "cover", False): cover_name = f"images/{book.cover.name}" - s3_job.add_file( - cover_name, - folder="covers" - ) + s3_job.add_file(cover_name, folder="covers") s3_job.tar() # delete export json as soon as it's tarred @@ -228,7 +228,7 @@ class AddFileToTar(ChildJob): else: # TODO: is the export_data file open to the world? - logger.info( "export file URL: %s",export_data.url) + logger.info("export file URL: %s", export_data.url) export_data.open("wb") with BookwyrmTarFile.open(mode="w:gz", fileobj=export_data) as tar: @@ -237,7 +237,9 @@ class AddFileToTar(ChildJob): # Add avatar image if present if getattr(user, "avatar", False): - tar.add_image(user.avatar, filename="avatar", directory=f"avatar/") # TODO: does this work? + tar.add_image( + user.avatar, filename="avatar", directory=f"avatar/" + ) # TODO: does this work? for book in editions: if getattr(book, "cover", False): @@ -245,7 +247,6 @@ class AddFileToTar(ChildJob): export_data.close() - self.complete_job() except Exception as err: # pylint: disable=broad-except @@ -277,6 +278,7 @@ def start_export_task(**kwargs): logger.exception("User Export Job %s Failed with error: %s", job.id, err) job.set_status("failed") + @app.task(queue=IMPORTS, base=ParentTask) def export_saved_lists_task(**kwargs): """add user saved lists to export JSON""" @@ -381,16 +383,23 @@ def trigger_books_jobs(**kwargs): for edition in editions: try: - edition_job = AddBookToUserExportJob.objects.create(edition=edition, parent_job=job) + edition_job = AddBookToUserExportJob.objects.create( + edition=edition, parent_job=job + ) edition_job.start_job() except Exception as err: # pylint: disable=broad-except - logger.exception("AddBookToUserExportJob %s Failed with error: %s", edition_job.id, err) + logger.exception( + "AddBookToUserExportJob %s Failed with error: %s", + edition_job.id, + err, + ) edition_job.set_status("failed") except Exception as err: # pylint: disable=broad-except logger.exception("trigger_books_jobs %s Failed with error: %s", job.id, err) job.set_status("failed") + def get_books_for_user(user): """Get all the books and editions related to a user""" diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 7896850e3..7c8947521 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -442,4 +442,6 @@ if HTTP_X_FORWARDED_PROTO: # 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" -DATA_UPLOAD_MAX_MEMORY_SIZE = (1024**2 * 20) # 20MB TEMPORARY FIX WHILST WORKING ON THIS \ No newline at end of file +DATA_UPLOAD_MAX_MEMORY_SIZE = ( + 1024**2 * 20 +) # 20MB TEMPORARY FIX WHILST WORKING ON THIS diff --git a/bookwyrm/storage_backends.py b/bookwyrm/storage_backends.py index c97b4e848..87c29ae70 100644 --- a/bookwyrm/storage_backends.py +++ b/bookwyrm/storage_backends.py @@ -63,15 +63,17 @@ class AzureImagesStorage(AzureStorage): # pylint: disable=abstract-method location = "images" overwrite_files = False + class ExportsFileStorage(FileSystemStorage): # pylint: disable=abstract-method """Storage class for exports contents with local files""" location = "exports" overwrite_files = False + class ExportsS3Storage(S3Boto3Storage): # pylint: disable=abstract-method """Storage class for exports contents with S3""" location = "exports" default_acl = None - overwrite_files = False \ No newline at end of file + overwrite_files = False diff --git a/exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 b/exports/6ee95f7f-58cd-4bff-9d41-1ac2b3db6187 deleted file mode 100644 index d7166b70306179d10b652499641665bc4e5a992a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3820 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 diff --git a/exports/ba15a57f-e29e-4a29-aaf4-306b66960273 b/exports/ba15a57f-e29e-4a29-aaf4-306b66960273 deleted file mode 100644 index 318069303d9f47f3296429b66dc293422a67d8fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41614 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 Date: Sun, 14 Jan 2024 14:14:20 +1100 Subject: [PATCH 269/458] ignore exports dir --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ec2a08f80..6193f10c3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ # BookWyrm .env /images/ +/exports/ bookwyrm/static/css/bookwyrm.css bookwyrm/static/css/themes/ !bookwyrm/static/css/themes/bookwyrm-*.scss From 5ef104b802dce740835f4a34bb4403459e2791bc Mon Sep 17 00:00:00 2001 From: Rohan Sureshkumar Date: Mon, 15 Jan 2024 17:22:33 +0530 Subject: [PATCH 270/458] Issue-3187: addressing review comments --- bookwyrm/templates/feed/feed.html | 4 ++-- bookwyrm/views/feed.py | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index 820314b7a..56c380202 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -33,7 +33,7 @@ - {% if request.user.show_goal and not goal and tab.key == 'home' and has_read_throughs %} + {% if request.user.show_goal and not goal and tab.key == 'home' %} {% now 'Y' as year %}
    {% include 'feed/goal_card.html' with year=year %} @@ -41,7 +41,7 @@
    {% endif %} - {% if annual_summary_year and tab.key == 'home' %} + {% if annual_summary_year and tab.key == 'home' and has_read_throughs %}
  • -
    +
    {% if superlatives.top_rated %} {% with book=superlatives.top_rated.default_edition rating=superlatives.top_rated.rating %} -
    +
    @@ -53,7 +53,7 @@ {% if superlatives.wanted %} {% with book=superlatives.wanted.default_edition %} -
    +
    @@ -72,7 +72,7 @@ {% if superlatives.controversial %} {% with book=superlatives.controversial.default_edition %} -
    +
    From ddbda3ab9ca1f1e4658e711d3a5e5fbd971369c4 Mon Sep 17 00:00:00 2001 From: Carlos Camara Date: Tue, 16 Jan 2024 08:12:24 +0000 Subject: [PATCH 272/458] Fix test_export --- bookwyrm/tests/views/preferences/test_export.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index 7a1bcd6db..3f758b2f7 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -56,11 +56,12 @@ class ExportViews(TestCase): def test_export_file(self, *_): """simple export""" - models.ShelfBook.objects.create( + shelfbook = models.ShelfBook.objects.create( shelf=self.local_user.shelf_set.first(), user=self.local_user, book=self.book, ) + book_date = str.encode(f"{shelfbook.shelved_date.date()}") request = self.factory.post("") request.user = self.local_user export = views.Export.as_view()(request) @@ -69,7 +70,7 @@ class ExportViews(TestCase): # pylint: disable=line-too-long self.assertEqual( export.content, - b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content,review_published,shelf,shelf_name,shelf_date\r\nTest Book,," - + self.book.remote_id.encode("utf-8") - + b",,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,,,,,\r\n", + b"title,author_text,remote_id,openlibrary_key,inventaire_id,librarything_key,goodreads_key,bnf_id,viaf,wikidata,asin,aasin,isfdb,isbn_10,isbn_13,oclc_number,start_date,finish_date,stopped_date,rating,review_name,review_cw,review_content,review_published,shelf,shelf_name,shelf_date\r\n" + + b"Test Book,,%b,,,,,beep,,,,,,123456789X,9781234567890,,,,,,,,,,to-read,To Read,%b\r\n" + % (self.book.remote_id.encode("utf-8"), book_date), ) From d640e4ac96005cdc2b21b6a08f97a8805c26d00b Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Tue, 16 Jan 2024 21:32:13 +1100 Subject: [PATCH 273/458] disable user exports by default - new setting to enable user exports defaults to False - add setting to enable and disable user exports - do not allow user exports when using s3 storage - do not serve non-image files from /images/ (requires update to nginx settings) - increase default file upload limit to 100MB to enable user exports to be imported (can be changed in .env) --- .env.example | 3 ++ .../0192_sitesettings_user_exports_enabled.py | 18 +++++++ bookwyrm/models/site.py | 1 + bookwyrm/settings.py | 2 + .../templates/preferences/export-user.html | 6 ++- .../templates/settings/imports/imports.html | 51 ++++++++++++++++++- bookwyrm/urls.py | 10 ++++ bookwyrm/views/__init__.py | 2 + bookwyrm/views/admin/imports.py | 25 ++++++++- nginx/development | 7 ++- nginx/production | 7 ++- 11 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 bookwyrm/migrations/0192_sitesettings_user_exports_enabled.py diff --git a/.env.example b/.env.example index fb0f7308d..20ce8240b 100644 --- a/.env.example +++ b/.env.example @@ -137,3 +137,6 @@ 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= +# The last number here means "megabytes" +# Increase if users are having trouble uploading BookWyrm export files. +DATA_UPLOAD_MAX_MEMORY_SIZE = (1024**2 * 100) \ No newline at end of file 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 000000000..ec5b411e2 --- /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/models/site.py b/bookwyrm/models/site.py index bd53f1f07..8075b6434 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -96,6 +96,7 @@ 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"]) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index fcc91857a..cc941da84 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -442,3 +442,5 @@ if HTTP_X_FORWARDED_PROTO: # 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" + +DATA_UPLOAD_MAX_MEMORY_SIZE = env.int("DATA_UPLOAD_MAX_MEMORY_SIZE", (1024**2 * 100)) diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index a468c3f74..cd3119e3e 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -46,7 +46,11 @@ {% 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 next_available %} + {% if not site.user_exports_enabled %} +

    + {% trans "New user exports are currently disabled." %} +

    + {% elif next_available %}

    {% blocktrans trimmed %} You will be able to create a new export file at {{ next_available }} diff --git a/bookwyrm/templates/settings/imports/imports.html b/bookwyrm/templates/settings/imports/imports.html index 8898aab71..11b3c7e03 100644 --- a/bookwyrm/templates/settings/imports/imports.html +++ b/bookwyrm/templates/settings/imports/imports.html @@ -90,6 +90,33 @@

    + + {% if site.user_exports_enabled %} +
    + + + {% trans "Disable starting new user exports" %} + + + +
    +
    + {% trans "This is only intended to be used when things have gone very wrong with exports and you need to pause the feature while addressing issues." %} + {% trans "While exports are disabled, users will not be allowed to start new user exports, but existing exports will not be affected." %} +
    + {% csrf_token %} +
    + +
    +
    +
    @@ -108,7 +135,7 @@ {% trans "Set the value to 0 to not enforce any limit." %}
    - + {% csrf_token %} @@ -120,6 +147,28 @@
    + {% else %} +
    +
    +

    {% trans "Users are currently unable to start new user exports. This is the default setting." %}

    + {% if use_s3 %} +

    {% trans "It is not currently possible to provide user exports when using s3 storage. The BookWyrm development team are working on a fix for this." %}

    + {% endif %} +
    + {% csrf_token %} +
    + +
    +
    + {% endif %}

    {% trans "Book Imports" %}

    diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 76e60245b..1a577c84b 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -338,6 +338,16 @@ urlpatterns = [ views.disable_imports, name="settings-imports-disable", ), + re_path( + r"^settings/user-exports/enable/?$", + views.enable_user_exports, + name="settings-user-exports-enable", + ), + re_path( + r"^settings/user-exports/disable/?$", + views.disable_user_exports, + name="settings-user-exports-disable", + ), re_path( r"^settings/imports/enable/?$", views.enable_imports, diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 3be813208..f11c11dd6 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -18,6 +18,8 @@ from .admin.imports import ( set_import_size_limit, set_user_import_completed, set_user_import_limit, + enable_user_exports, + disable_user_exports, ) from .admin.ip_blocklist import IPBlocklist from .admin.invite import ManageInvites, Invite, InviteRequest diff --git a/bookwyrm/views/admin/imports.py b/bookwyrm/views/admin/imports.py index a85d6c79e..0924536bf 100644 --- a/bookwyrm/views/admin/imports.py +++ b/bookwyrm/views/admin/imports.py @@ -9,7 +9,7 @@ from django.views.decorators.http import require_POST from bookwyrm import models from bookwyrm.views.helpers import redirect_to_referer -from bookwyrm.settings import PAGE_LENGTH +from bookwyrm.settings import PAGE_LENGTH, USE_S3 # pylint: disable=no-self-use @@ -59,6 +59,7 @@ class ImportList(View): "import_size_limit": site_settings.import_size_limit, "import_limit_reset": site_settings.import_limit_reset, "user_import_time_limit": site_settings.user_import_time_limit, + "use_s3": USE_S3, } return TemplateResponse(request, "settings/imports/imports.html", data) @@ -126,3 +127,25 @@ def set_user_import_limit(request): site.user_import_time_limit = int(request.POST.get("limit")) site.save(update_fields=["user_import_time_limit"]) return redirect("settings-imports") + + +@require_POST +@permission_required("bookwyrm.edit_instance_settings", raise_exception=True) +# pylint: disable=unused-argument +def enable_user_exports(request): + """Allow users to export account data""" + site = models.SiteSettings.objects.get() + site.user_exports_enabled = True + site.save(update_fields=["user_exports_enabled"]) + return redirect("settings-imports") + + +@require_POST +@permission_required("bookwyrm.edit_instance_settings", raise_exception=True) +# pylint: disable=unused-argument +def disable_user_exports(request): + """Don't allow users to export account data""" + site = models.SiteSettings.objects.get() + site.user_exports_enabled = False + site.save(update_fields=["user_exports_enabled"]) + return redirect("settings-imports") diff --git a/nginx/development b/nginx/development index 841db0124..ac663053c 100644 --- a/nginx/development +++ b/nginx/development @@ -64,13 +64,18 @@ server { # directly serve images and static files from the # bookwyrm filesystem using sendfile. # make the logs quieter by not reporting these requests - location ~ ^/(images|static)/ { + location ~ \.(bmp|ico|jpg|jpeg|png|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 or static + location ~ ^/(images|static)/ { + 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 9018ab9de..4e40f32a0 100644 --- a/nginx/production +++ b/nginx/production @@ -96,12 +96,17 @@ server { # # directly serve images and static files from the # # bookwyrm filesystem using sendfile. # # make the logs quieter by not reporting these requests -# location ~ ^/(images|static)/ { +# location ~ \.(bmp|ico|jpg|jpeg|png|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 or static +# location ~ ^/(images|static)/ { +# return 403; +# } # # # monitor the celery queues with flower, no caching enabled # location /flower/ { From ea7f3c297e6f92ca82c06b6fb3ace0d37ebdd53f Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 17 Jan 2024 20:12:06 +1100 Subject: [PATCH 274/458] allow js and css --- nginx/development | 4 ++-- nginx/production | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nginx/development b/nginx/development index ac663053c..64cd1b911 100644 --- a/nginx/development +++ b/nginx/development @@ -64,7 +64,7 @@ server { # directly serve images and static files from the # bookwyrm filesystem using sendfile. # make the logs quieter by not reporting these requests - location ~ \.(bmp|ico|jpg|jpeg|png|tif|tiff|webp)$ { + location ~ \.(bmp|ico|jpg|jpeg|png|tif|tiff|webp|css|js)$ { root /app; try_files $uri =404; add_header X-Cache-Status STATIC; @@ -72,7 +72,7 @@ server { } # block access to any non-image files from images or static - location ~ ^/(images|static)/ { + location ~ ^/images/ { return 403; } diff --git a/nginx/production b/nginx/production index 4e40f32a0..76ed19449 100644 --- a/nginx/production +++ b/nginx/production @@ -96,7 +96,7 @@ server { # # directly serve images and static files from the # # bookwyrm filesystem using sendfile. # # make the logs quieter by not reporting these requests -# location ~ \.(bmp|ico|jpg|jpeg|png|tif|tiff|webp)$ { +# location ~ \.(bmp|ico|jpg|jpeg|png|tif|tiff|webp|css|js)$ { # root /app; # try_files $uri =404; # add_header X-Cache-Status STATIC; @@ -104,7 +104,7 @@ server { # } # # block access to any non-image files from images or static -# location ~ ^/(images|static)/ { +# location ~ ^/images/ { # return 403; # } # From b990d9ccd8f2bff4990b79f7dc7cd494190d0536 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 17 Jan 2024 21:06:04 +1100 Subject: [PATCH 275/458] Pass correct user id in Move notification We were passing the *requesting* user's moved_to value to the Move notification template, instead of the id of the user that they are being notified about. Additionally, the id_to_username template tag had no fallback for if the user_id is None. This resolves both problems and removes an unnecessary space in a template for when the logged in user made the move. Fixes #3196 --- bookwyrm/templates/moved.html | 2 +- bookwyrm/templates/notifications/items/move_user.html | 2 +- bookwyrm/templatetags/utilities.py | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/moved.html b/bookwyrm/templates/moved.html index 545fc3d87..382b752be 100644 --- a/bookwyrm/templates/moved.html +++ b/bookwyrm/templates/moved.html @@ -23,7 +23,7 @@

    - {% 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/items/move_user.html b/bookwyrm/templates/notifications/items/move_user.html index b94d96dc4..3121d3f45 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/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index fca66688a..230db366e 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -125,7 +125,8 @@ def id_to_username(user_id): name = parts[-1] value = f"{name}@{domain}" - return value + return value + return "a new user account" @register.filter(name="get_file_size") From 469172947b7d38f3d43c165bd22f84ee0c7cf94f Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Thu, 18 Jan 2024 18:43:45 +1100 Subject: [PATCH 276/458] cleanup and linting --- bookwyrm/models/bookwyrm_export_job.py | 33 ++++++++++--------- bookwyrm/templatetags/utilities.py | 4 +-- .../tests/models/test_bookwyrm_export_job.py | 6 ++++ bookwyrm/views/preferences/export.py | 1 + 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 2d1c0d94f..bef5e1ea6 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -2,14 +2,14 @@ import dataclasses import logging -import boto3 -from s3_tar import S3Tar from uuid import uuid4 +from s3_tar import S3Tar + from django.db.models import CASCADE, BooleanField, FileField, ForeignKey, JSONField from django.db.models import Q from django.core.serializers.json import DjangoJSONEncoder -from django.core.files.base import ContentFile, File +from django.core.files.base import ContentFile from django.utils import timezone from bookwyrm import settings, storage_backends @@ -18,7 +18,7 @@ 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, ChildJob, ParentTask, SubTask +from bookwyrm.models.job import ParentJob, ChildJob, ParentTask from bookwyrm.tasks import app, IMPORTS from bookwyrm.utils.tar import BookwyrmTarFile @@ -82,6 +82,7 @@ class AddBookToUserExportJob(ChildJob): edition = ForeignKey(Edition, on_delete=CASCADE) + # pylint: disable=too-many-locals def start_job(self): """Start the job""" try: @@ -185,7 +186,7 @@ class AddFileToTar(ChildJob): parent_export_job = ForeignKey( BookwyrmExportJob, on_delete=CASCADE, related_name="child_edition_export_jobs" - ) # TODO: do we actually need this? Does self.parent_job.export_data work? + ) def start_job(self): """Start the job""" @@ -196,7 +197,6 @@ class AddFileToTar(ChildJob): # but Hugh couldn't make that work try: - task_id = self.parent_export_job.task_id export_data = self.parent_export_job.export_data export_json = self.parent_export_job.export_json json_data = DjangoJSONEncoder().encode(export_json) @@ -209,9 +209,12 @@ class AddFileToTar(ChildJob): f"exports/{str(self.parent_export_job.task_id)}.tar.gz", ) - # TODO: either encrypt the file or we will need to get it to the user + # TODO: will need to get it to the user # from this secure part of the bucket - export_data.save("archive.json", ContentFile(json_data.encode("utf-8"))) + export_data.save( + "archive.json", + ContentFile(json_data.encode("utf-8")) + ) s3_job.add_file(f"exports/{export_data.name}") s3_job.add_file(f"images/{user.avatar.name}", folder="avatar") @@ -222,14 +225,12 @@ class AddFileToTar(ChildJob): s3_job.tar() # delete export json as soon as it's tarred - # there is probably a better way to do this - # Currently this merely makes the file empty + # TODO: there is probably a better way to do this + # Currently this merely makes the file empty even though + # we're using save=False export_data.delete(save=False) else: - # TODO: is the export_data file open to the world? - logger.info("export file URL: %s", export_data.url) - export_data.open("wb") with BookwyrmTarFile.open(mode="w:gz", fileobj=export_data) as tar: @@ -238,8 +239,8 @@ class AddFileToTar(ChildJob): # Add avatar image if present if getattr(user, "avatar", False): tar.add_image( - user.avatar, filename="avatar", directory=f"avatar/" - ) # TODO: does this work? + user.avatar, filename="avatar", directory="avatar/" + ) for book in editions: if getattr(book, "cover", False): @@ -319,7 +320,7 @@ def export_reading_goals_task(**kwargs): reading_goals = AnnualGoal.objects.filter(user=job.user).distinct() job.export_json["goals"] = [] for goal in reading_goals: - exported_user["goals"].append( + job.export_json["goals"].append( {"goal": goal.goal, "year": goal.year, "privacy": goal.privacy} ) job.save(update_fields=["export_json"]) diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index a1b3d6cdf..225510085 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -148,8 +148,8 @@ def get_file_size(file): return "" - except Exception as e: # pylint: disable=broad-except - print(e) + except Exception as error: # pylint: disable=broad-except + print(error) return "" diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index b5f2520a9..1cf1f63d0 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -141,6 +141,8 @@ class BookwyrmExport(TestCase): book=self.edition, ) + + # pylint: disable=E1121 def test_json_export_user_settings(self): """Test the json export function for basic user info""" data = export_job.json_export(self.local_user) @@ -158,6 +160,8 @@ class BookwyrmExport(TestCase): ) self.assertEqual(user_data["settings"]["default_post_privacy"], "followers") + + # pylint: disable=E1121 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) @@ -180,6 +184,8 @@ class BookwyrmExport(TestCase): self.assertEqual(len(json_data["blocks"]), 1) self.assertEqual(json_data["blocks"][0], "https://your.domain.here/user/badger") + + # pylint: disable=E1121 def test_json_export_books(self): """Test the json export function for extended user info""" diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index d16f3aaa3..33c90291d 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -187,6 +187,7 @@ class ExportUser(View): class ExportArchive(View): """Serve the archive file""" + # TODO: how do we serve s3 files? def get(self, request, archive_id): """download user export file""" export = BookwyrmExportJob.objects.get(task_id=archive_id, user=request.user) From 8e2649ba3b26bc03ff90d8a5790f7b19301ebd34 Mon Sep 17 00:00:00 2001 From: Rohan Sureshkumar Date: Thu, 18 Jan 2024 21:23:25 +0530 Subject: [PATCH 277/458] Issue-3187: change variable name and code formatting --- bookwyrm/templates/feed/feed.html | 2 +- bookwyrm/views/feed.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index 56c380202..1b6cf29ff 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -41,7 +41,7 @@ {% endif %} - {% if annual_summary_year and tab.key == 'home' and has_read_throughs %} + {% if annual_summary_year and tab.key == 'home' and has_summary_read_throughs %}

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index 17218b93e..2d91990d0 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -197,6 +197,8 @@ class Status(View): "status": status, "children": children, "ancestors": ancestors, + "title": status.page_title, + "description": status.page_description, "preview": preview, }, } From ad56024ffe8adac7a8cab916b160b2f18edd2f1d Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 20 Jan 2024 17:18:50 +0100 Subject: [PATCH 285/458] Add Status.page_image property --- bookwyrm/models/status.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 04fb8daa3..236826a2b 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -190,6 +190,15 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): """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 + else: + 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( @@ -313,6 +322,10 @@ class BookStatus(Status): abstract = True + @property + def page_image(self): + return self.book.preview_image or super().page_image + class Comment(BookStatus): """like a review but without a rating and transient""" From 290ee997b3c935297811f033d8da0a564ba48f52 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 20 Jan 2024 17:24:20 +0100 Subject: [PATCH 286/458] Refactor OpenGraph tags logic --- bookwyrm/templates/snippets/opengraph.html | 29 +++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/bookwyrm/templates/snippets/opengraph.html b/bookwyrm/templates/snippets/opengraph.html index 1e87a464f..78a6b1b3f 100644 --- a/bookwyrm/templates/snippets/opengraph.html +++ b/bookwyrm/templates/snippets/opengraph.html @@ -1,24 +1,25 @@ {% load static %} -{% if preview_images_enabled is True %} +{% firstof image site.preview_image as page_image %} +{% if page_image %} - {% if image %} - - - {% else %} - - - {% endif %} + + +{% elif site.logo %} + + + + {% else %} - - + + + {% endif %} - - - - +{% firstof description site.instance_tagline as description %} + + From ea9d3f8ba1ac3db3a050b0355bd3de3d20cd061e Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 20 Jan 2024 17:25:20 +0100 Subject: [PATCH 287/458] Use Status.page_image for OpenGraph tags --- bookwyrm/templates/feed/status.html | 4 ++-- bookwyrm/views/feed.py | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/bookwyrm/templates/feed/status.html b/bookwyrm/templates/feed/status.html index b381c3714..64e992a01 100644 --- a/bookwyrm/templates/feed/status.html +++ b/bookwyrm/templates/feed/status.html @@ -6,7 +6,7 @@ {% block opengraph %} - {% include 'snippets/opengraph.html' with image=preview %} + {% include 'snippets/opengraph.html' with image=page_image %} {% endblock %} @@ -39,4 +39,4 @@
    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index 2d91990d0..d1feb278e 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -185,12 +185,6 @@ class Status(View): params=[status.id, visible_thread, visible_thread], ) - preview = None - if hasattr(status, "book"): - preview = status.book.preview_image - elif status.mention_books.exists(): - preview = status.mention_books.first().preview_image - data = { **feed_page_data(request.user), **{ @@ -199,7 +193,7 @@ class Status(View): "ancestors": ancestors, "title": status.page_title, "description": status.page_description, - "preview": preview, + "page_image": status.page_image, }, } return TemplateResponse(request, "feed/status.html", data) From 646b27b7a7e1099e81d5c3fa4c2b0008f54c889e Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 20 Jan 2024 17:28:51 +0100 Subject: [PATCH 288/458] OpenGraph: fall back on book cover when preview images are disabled --- bookwyrm/models/status.py | 4 ++-- bookwyrm/templates/book/book.html | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 236826a2b..94893d6ae 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -195,7 +195,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): """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 + return book.preview_image or book.cover else: return self.user.preview_image @@ -324,7 +324,7 @@ class BookStatus(Status): @property def page_image(self): - return self.book.preview_image or super().page_image + return self.book.preview_image or self.book.cover or super().page_image class Comment(BookStatus): diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 8e76fb014..4c345832e 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -9,7 +9,8 @@ {% block title %}{{ book|book_title }}{% endblock %} {% block opengraph %} - {% include 'snippets/opengraph.html' with title=book.title description=book|book_description image=book.preview_image %} + {% firstof book.preview_image book.cover as book_image %} + {% include 'snippets/opengraph.html' with title=book.title description=book|book_description image=book_image %} {% endblock %} {% block content %} From eb6bea013fd1634f178da689e4843adcd05a6296 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 21 Jan 2024 11:04:08 +0100 Subject: [PATCH 289/458] Fix pylint warning --- bookwyrm/models/status.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 94893d6ae..0c9b18cc9 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -196,8 +196,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): if self.mention_books.exists(): book = self.mention_books.first() return book.preview_image or book.cover - else: - return self.user.preview_image + return self.user.preview_image def to_replies(self, **kwargs): """helper function for loading AP serialized replies to a status""" From 30ba8d37dc130ac547c59a5b7c2b7fae3d529214 Mon Sep 17 00:00:00 2001 From: Wesley Aptekar-Cassels Date: Tue, 23 Jan 2024 18:19:31 -0500 Subject: [PATCH 290/458] Add redis automatic rewrite configuration. This should hopefully prevent the AOF file from growing too large. --- redis.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/redis.conf b/redis.conf index 2a417579f..79d6804f5 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 "" From c4596544a341a5030fe02fe7b1df704f343a35ee Mon Sep 17 00:00:00 2001 From: Rohan Sureshkumar Date: Wed, 24 Jan 2024 19:18:46 +0530 Subject: [PATCH 291/458] Issue-3187: fix failing tests --- bookwyrm/views/feed.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index 79e2f24d2..6e8f820e4 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -52,9 +52,18 @@ class Feed(View): paginated = Paginator(filtered_activities, PAGE_LENGTH) suggestions = suggested_users.get_suggestions(request.user) - cutoff = date(get_annual_summary_year(), 12, 31) - readthroughs = models.ReadThrough.objects.filter( - user=request.user, finish_date__lte=cutoff + + cutoff = ( + date(get_annual_summary_year(), 12, 31) + if get_annual_summary_year() + else None + ) + readthroughs = ( + models.ReadThrough.objects.filter( + user=request.user, finish_date__lte=cutoff + ) + if get_annual_summary_year() + else [] ) data = { From 2d4b11aaeedd9530ad4ddcfcea6f8aeb2b55dda9 Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Thu, 25 Jan 2024 01:50:10 +0300 Subject: [PATCH 292/458] Adding FictionBook format ("FB2", "FB3") to autocomplete options in "Get a copy" block. --- bookwyrm/static/js/autocomplete.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bookwyrm/static/js/autocomplete.js b/bookwyrm/static/js/autocomplete.js index a98cd9634..6836d356d 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", From 82f9aa9da4ae68c2e042bbb981c89d8089cd39dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Wed, 24 Jan 2024 19:30:45 +0100 Subject: [PATCH 293/458] Set SESSION_COOKIE_AGE from environment, default to one month While we do wish for a longer maximum age (up to one year, see #3082), we only want to do that after termination of active sessions is implemented (see #2278). In the meantime, by reading and setting the variable from settings, we allow site admins to alter the default. --- bookwyrm/settings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 16241f9df..4af7afb14 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -30,6 +30,9 @@ RELEASE_API = env( 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" From 80ad36e75b20213939852470506f12593353216c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Wed, 24 Jan 2024 19:54:55 +0100 Subject: [PATCH 294/458] Include SESSION_COOKIE_AGE in .env.example Suggested-by: Alexey Skobkin --- .env.example | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 20ce8240b..d0971660e 100644 --- a/.env.example +++ b/.env.example @@ -137,6 +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= + # The last number here means "megabytes" # Increase if users are having trouble uploading BookWyrm export files. -DATA_UPLOAD_MAX_MEMORY_SIZE = (1024**2 * 100) \ No newline at end of file +DATA_UPLOAD_MAX_MEMORY_SIZE = (1024**2 * 100) + +# Time before being logged out (in seconds) +# SESSION_COOKIE_AGE=2592000 # current default: 30 days From 31babdfa510d88f89d08cbfb56de94cd8c0ac028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 26 Jan 2024 06:01:34 -0300 Subject: [PATCH 295/458] Always prefer shared inboxes when computing receipent lists This avoids duplicate submissions to remote instances when mentioning followers (i.e., `POST /user/foo/inbox` followed by `POST /inbox`, which results in two separate `add_status` tasks, and might generate duplicates in the target instance). --- bookwyrm/models/activitypub_mixin.py | 2 +- bookwyrm/tests/models/test_activitypub_mixin.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index d0a941f43..41772a162 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -153,7 +153,7 @@ class ActivitypubMixin: 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] + 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": diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index cad970412..2f6fad76d 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -227,14 +227,18 @@ class ActivitypubMixins(TestCase): 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""" From 8ac873419fe66de65cdddf6a25560ed24c4e4a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 26 Jan 2024 06:29:59 -0300 Subject: [PATCH 296/458] refactor: eagerly use a set in recipients, get_recipients --- bookwyrm/models/activitypub_mixin.py | 25 +++++++++++++------------ bookwyrm/models/status.py | 6 +++--- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index 41772a162..db737b8bc 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -152,8 +152,9 @@ class ActivitypubMixin: # 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.shared_inbox or u.inbox for u in mentions 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 @@ class ActivitypubMixin: 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""" diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index cc44fe2bf..0d1d0d839 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -107,14 +107,14 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): @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( From accb3273f1f1a2f2465aee39ba9b3ddeecb5e4b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Fri, 26 Jan 2024 06:42:25 -0300 Subject: [PATCH 297/458] When determining privacy, check for unlisted early If `followers_url` is found in `to`, the post may still be _unlisted_ if `"https://www.w3.org/ns/activitystreams#Public"` appears in `cc`. Hence this should be checked earlier. --- bookwyrm/models/fields.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 4bd580705..107f4055a 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -260,12 +260,12 @@ class PrivacyField(ActivitypubFieldMixin, models.CharField): if to == [self.public]: setattr(instance, self.name, "public") + elif self.public in cc: + setattr(instance, self.name, "unlisted") elif to == [user.followers_url]: setattr(instance, self.name, "followers") elif cc == []: setattr(instance, self.name, "direct") - elif self.public in cc: - setattr(instance, self.name, "unlisted") else: setattr(instance, self.name, "followers") return original == getattr(instance, self.name) From 940274b1c22e08fc870e92cc95e5ae6a95f5297e Mon Sep 17 00:00:00 2001 From: Braden Solt Date: Fri, 26 Jan 2024 15:47:55 -0700 Subject: [PATCH 298/458] classes that fix widths --- bookwyrm/templates/confirm_email/confirm_email.html | 4 ++-- bookwyrm/templates/landing/invite.html | 4 ++-- bookwyrm/templates/landing/login.html | 12 +++++++----- bookwyrm/templates/landing/password_reset.html | 4 ++-- bookwyrm/templates/landing/reactivate.html | 12 +++++++----- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/bookwyrm/templates/confirm_email/confirm_email.html b/bookwyrm/templates/confirm_email/confirm_email.html index abdd3a734..49a1ebd2d 100644 --- a/bookwyrm/templates/confirm_email/confirm_email.html +++ b/bookwyrm/templates/confirm_email/confirm_email.html @@ -6,8 +6,8 @@ {% block content %}

    {% trans "Confirm your email address" %}

    -
    -
    +
    +

    {% trans "A confirmation code has been sent to the email address you used to register your account." %}

    diff --git a/bookwyrm/templates/landing/invite.html b/bookwyrm/templates/landing/invite.html index d56cad38c..3e3ddab85 100644 --- a/bookwyrm/templates/landing/invite.html +++ b/bookwyrm/templates/landing/invite.html @@ -6,8 +6,8 @@ {% block content %}

    {% trans "Create an Account" %}

    -
    -
    +
    +
    {% if valid %}
    diff --git a/bookwyrm/templates/landing/login.html b/bookwyrm/templates/landing/login.html index 369a72bd2..8ea828b74 100644 --- a/bookwyrm/templates/landing/login.html +++ b/bookwyrm/templates/landing/login.html @@ -6,7 +6,7 @@ {% block content %}

    {% trans "Log in" %}

    -
    +
    {% if login_form.non_field_errors %}

    {{ login_form.non_field_errors }}

    {% endif %} @@ -20,13 +20,15 @@
    - +
    - +
    {% include 'snippets/form_errors.html' with errors_list=login_form.password.errors id="desc_password" %} @@ -58,10 +60,10 @@ {% include 'snippets/about.html' %}

    - {% trans "More about this site" %} + {% trans "More about this site" %}

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/bookwyrm/templates/landing/password_reset.html b/bookwyrm/templates/landing/password_reset.html index 786eaa0ab..2f41c5505 100644 --- a/bookwyrm/templates/landing/password_reset.html +++ b/bookwyrm/templates/landing/password_reset.html @@ -4,8 +4,8 @@ {% block title %}{% trans "Reset Password" %}{% endblock %} {% block content %} -
    -
    +
    +

    {% trans "Reset Password" %}

    diff --git a/bookwyrm/templates/landing/reactivate.html b/bookwyrm/templates/landing/reactivate.html index da9e0b050..adb41238f 100644 --- a/bookwyrm/templates/landing/reactivate.html +++ b/bookwyrm/templates/landing/reactivate.html @@ -6,7 +6,7 @@ {% block content %}

    {% trans "Reactivate Account" %}

    -
    +
    {% if login_form.non_field_errors %}

    {{ login_form.non_field_errors }}

    {% endif %} @@ -16,13 +16,15 @@
    - +
    - +
    {% include 'snippets/form_errors.html' with errors_list=login_form.password.errors id="desc_password" %} @@ -51,10 +53,10 @@ {% include 'snippets/about.html' %}

    - {% trans "More about this site" %} + {% trans "More about this site" %}

    -{% endblock %} +{% endblock %} \ No newline at end of file From 629acbaa193fa2b4a22593fd31a2e31f3bb8c3ff Mon Sep 17 00:00:00 2001 From: Braden Solt Date: Sat, 27 Jan 2024 10:58:57 -0700 Subject: [PATCH 299/458] add series number on posts in the feed --- bookwyrm/templates/snippets/book_titleby.html | 9 ++++++++- bookwyrm/templates/snippets/status/headers/comment.html | 4 ++++ .../templates/snippets/status/headers/quotation.html | 4 ++++ bookwyrm/templates/snippets/status/headers/read.html | 4 ++++ bookwyrm/templates/snippets/status/headers/reading.html | 4 ++++ bookwyrm/templates/snippets/status/headers/review.html | 4 ++++ .../snippets/status/headers/stopped_reading.html | 4 ++++ bookwyrm/templates/snippets/status/headers/to_read.html | 5 +++++ 8 files changed, 37 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/snippets/book_titleby.html b/bookwyrm/templates/snippets/book_titleby.html index dc42bf273..35e0c4c45 100644 --- a/bookwyrm/templates/snippets/book_titleby.html +++ b/bookwyrm/templates/snippets/book_titleby.html @@ -9,12 +9,19 @@ {% if book.authors.exists %} {% blocktrans trimmed with path=book.local_path title=book|book_title %} -{{ title }} by +{{ title }} + +by {% endblocktrans %} {% include 'snippets/authors.html' with book=book limit=3 %} {% else %} {{ book|book_title }} {% endif %} +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + + {% endcache %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/comment.html b/bookwyrm/templates/snippets/status/headers/comment.html index e3e2ec40b..b78175bb0 100644 --- a/bookwyrm/templates/snippets/status/headers/comment.html +++ b/bookwyrm/templates/snippets/status/headers/comment.html @@ -16,5 +16,9 @@ commented on {{ book }} by {{ book }} {% endblocktrans %} +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + {% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/quotation.html b/bookwyrm/templates/snippets/status/headers/quotation.html index 2cdd5a991..8a6776303 100644 --- a/bookwyrm/templates/snippets/status/headers/quotation.html +++ b/bookwyrm/templates/snippets/status/headers/quotation.html @@ -16,5 +16,9 @@ quoted {{ book }} by { quoted {{ book }} {% endblocktrans %} +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + {% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/read.html b/bookwyrm/templates/snippets/status/headers/read.html index a59a3544e..aaebbd267 100644 --- a/bookwyrm/templates/snippets/status/headers/read.html +++ b/bookwyrm/templates/snippets/status/headers/read.html @@ -18,5 +18,9 @@ finished reading {{ book }} by {{ book }} {% endblocktrans %} +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + {% endif %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/reading.html b/bookwyrm/templates/snippets/status/headers/reading.html index 886158f29..f773775e0 100644 --- a/bookwyrm/templates/snippets/status/headers/reading.html +++ b/bookwyrm/templates/snippets/status/headers/reading.html @@ -12,6 +12,10 @@ started reading {{ book }} by {{ book }} by {{ book }} {% endblocktrans %} +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + {% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/stopped_reading.html b/bookwyrm/templates/snippets/status/headers/stopped_reading.html index 3b6a314e1..d3891cb78 100644 --- a/bookwyrm/templates/snippets/status/headers/stopped_reading.html +++ b/bookwyrm/templates/snippets/status/headers/stopped_reading.html @@ -18,6 +18,10 @@ stopped reading {{ book }} by {{ book }} {% endblocktrans %} +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + {% endif %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/to_read.html b/bookwyrm/templates/snippets/status/headers/to_read.html index 2abdde17b..4d1b2ab1b 100644 --- a/bookwyrm/templates/snippets/status/headers/to_read.html +++ b/bookwyrm/templates/snippets/status/headers/to_read.html @@ -19,4 +19,9 @@ wants to read {{ book }} {% endblocktrans %} {% endif %} + +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} + {% endspaceless %} From 6add81cf158405bdab718bba8378d3485cacb77d Mon Sep 17 00:00:00 2001 From: Braden Solt Date: Sat, 27 Jan 2024 11:02:42 -0700 Subject: [PATCH 300/458] move outside of authors "if" --- bookwyrm/templates/snippets/status/headers/comment.html | 3 ++- .../templates/snippets/status/headers/quotation.html | 3 ++- bookwyrm/templates/snippets/status/headers/read.html | 3 ++- bookwyrm/templates/snippets/status/headers/reading.html | 9 +++++---- bookwyrm/templates/snippets/status/headers/review.html | 3 ++- .../snippets/status/headers/stopped_reading.html | 3 ++- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/bookwyrm/templates/snippets/status/headers/comment.html b/bookwyrm/templates/snippets/status/headers/comment.html index b78175bb0..b7750d3df 100644 --- a/bookwyrm/templates/snippets/status/headers/comment.html +++ b/bookwyrm/templates/snippets/status/headers/comment.html @@ -16,9 +16,10 @@ commented on {{ book }} by {{ book }} {% endblocktrans %} +{% endif %} + {% if book.series %} ({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) {% endif %} -{% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/quotation.html b/bookwyrm/templates/snippets/status/headers/quotation.html index 8a6776303..3ddd20291 100644 --- a/bookwyrm/templates/snippets/status/headers/quotation.html +++ b/bookwyrm/templates/snippets/status/headers/quotation.html @@ -16,9 +16,10 @@ quoted {{ book }} by { quoted {{ book }} {% endblocktrans %} +{% endif %} + {% if book.series %} ({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) {% endif %} -{% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/read.html b/bookwyrm/templates/snippets/status/headers/read.html index aaebbd267..8c323dac6 100644 --- a/bookwyrm/templates/snippets/status/headers/read.html +++ b/bookwyrm/templates/snippets/status/headers/read.html @@ -18,9 +18,10 @@ finished reading {{ book }} by {{ book }} {% endblocktrans %} +{% endif %} + {% if book.series %} ({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) {% endif %} -{% endif %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/reading.html b/bookwyrm/templates/snippets/status/headers/reading.html index f773775e0..73e96ebbc 100644 --- a/bookwyrm/templates/snippets/status/headers/reading.html +++ b/bookwyrm/templates/snippets/status/headers/reading.html @@ -12,10 +12,6 @@ started reading {{ book }} by {{ book }} {% endblocktrans %} {% endif %} + +{% if book.series %} +({{book.series}} {%if book.series_number %}#{{book.series_number}}) {% endif %} +{% endif %} + {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/review.html b/bookwyrm/templates/snippets/status/headers/review.html index 371d8b2cb..0bdcd29b1 100644 --- a/bookwyrm/templates/snippets/status/headers/review.html +++ b/bookwyrm/templates/snippets/status/headers/review.html @@ -16,9 +16,10 @@ reviewed {{ book }} by {{ book }} {% endblocktrans %} +{% endif %} + {% if book.series %} ({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) {% endif %} -{% endif %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/stopped_reading.html b/bookwyrm/templates/snippets/status/headers/stopped_reading.html index d3891cb78..a00be181c 100644 --- a/bookwyrm/templates/snippets/status/headers/stopped_reading.html +++ b/bookwyrm/templates/snippets/status/headers/stopped_reading.html @@ -18,10 +18,11 @@ stopped reading {{ book }} by {{ book }} {% endblocktrans %} +{% endif %} + {% if book.series %} ({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) {% endif %} -{% endif %} {% endspaceless %} From 2bb9a855917c3c2ecca9cc32efedf30edc87ea12 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 28 Jan 2024 15:07:55 +1100 Subject: [PATCH 301/458] various fixes - use signed url for s3 downloads - re-arrange tar.gz file to match original - delete all working files after tarring - import from s3 export TODO - check local export and import - fix error when avatar missing - deal with multiple s3 storage options (e.g. Azure) --- .env.example | 1 + ...114_0055.py => 0193_auto_20240128_0249.py} | 4 +- bookwyrm/models/bookwyrm_export_job.py | 46 +++++++++++------ bookwyrm/models/bookwyrm_import_job.py | 13 +++-- .../templates/preferences/export-user.html | 50 ++++++++++++------- bookwyrm/templatetags/utilities.py | 22 +++----- bookwyrm/views/preferences/export.py | 34 ++++++++++++- 7 files changed, 114 insertions(+), 56 deletions(-) rename bookwyrm/migrations/{0192_auto_20240114_0055.py => 0193_auto_20240128_0249.py} (96%) diff --git a/.env.example b/.env.example index 20ce8240b..497d05779 100644 --- a/.env.example +++ b/.env.example @@ -81,6 +81,7 @@ AWS_SECRET_ACCESS_KEY= # AWS_S3_CUSTOM_DOMAIN=None # "example-bucket-name.s3.fr-par.scw.cloud" # AWS_S3_REGION_NAME=None # "fr-par" # AWS_S3_ENDPOINT_URL=None # "https://s3.fr-par.scw.cloud" +# S3_ENDPOINT_URL=None # same as AWS_S3_ENDPOINT_URL - needed for non-AWS for user exports # Commented are example values if you use Azure Blob Storage # USE_AZURE=true diff --git a/bookwyrm/migrations/0192_auto_20240114_0055.py b/bookwyrm/migrations/0193_auto_20240128_0249.py similarity index 96% rename from bookwyrm/migrations/0192_auto_20240114_0055.py rename to bookwyrm/migrations/0193_auto_20240128_0249.py index 824439728..c1c0527b9 100644 --- a/bookwyrm/migrations/0192_auto_20240114_0055.py +++ b/bookwyrm/migrations/0193_auto_20240128_0249.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.23 on 2024-01-14 00:55 +# Generated by Django 3.2.23 on 2024-01-28 02:49 import bookwyrm.storage_backends import django.core.serializers.json @@ -9,7 +9,7 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ("bookwyrm", "0191_merge_20240102_0326"), + ("bookwyrm", "0192_sitesettings_user_exports_enabled"), ] operations = [ diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 4b31b0ddf..384e71701 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -5,6 +5,7 @@ import logging from uuid import uuid4 from s3_tar import S3Tar +from storages.backends.s3boto3 import S3Boto3Storage from django.db.models import CASCADE, BooleanField, FileField, ForeignKey, JSONField from django.db.models import Q @@ -57,7 +58,6 @@ class BookwyrmExportJob(ParentJob): if not self.complete and self.has_completed: if not self.json_completed: - try: self.json_completed = True self.save(update_fields=["json_completed"]) @@ -193,8 +193,7 @@ class AddFileToTar(ChildJob): # NOTE we are doing this all in one big job, which has the potential to block a thread # This is because we need to refer to the same s3_job or BookwyrmTarFile whilst writing - # Alternatives using a series of jobs in a loop would be beter - # but Hugh couldn't make that work + # Using a series of jobs in a loop would be better if possible try: export_data = self.parent_export_job.export_data @@ -203,29 +202,41 @@ class AddFileToTar(ChildJob): user = self.parent_export_job.user editions = get_books_for_user(user) + # filenames for later + export_data_original = str(export_data) + filename = str(self.parent_export_job.task_id) + if settings.USE_S3: s3_job = S3Tar( settings.AWS_STORAGE_BUCKET_NAME, - f"exports/{str(self.parent_export_job.task_id)}.tar.gz", + f"exports/{filename}.tar.gz", ) - # TODO: will need to get it to the user - # from this secure part of the bucket - export_data.save("archive.json", ContentFile(json_data.encode("utf-8"))) - + # save json file + export_data.save( + f"archive_{filename}.json", ContentFile(json_data.encode("utf-8")) + ) s3_job.add_file(f"exports/{export_data.name}") - s3_job.add_file(f"images/{user.avatar.name}", folder="avatar") + + # save image file + file_type = user.avatar.name.rsplit(".", maxsplit=1)[-1] + export_data.save(f"avatar_{filename}.{file_type}", user.avatar) + s3_job.add_file(f"exports/{export_data.name}") + for book in editions: if getattr(book, "cover", False): cover_name = f"images/{book.cover.name}" s3_job.add_file(cover_name, folder="covers") s3_job.tar() - # delete export json as soon as it's tarred - # TODO: there is probably a better way to do this - # Currently this merely makes the file empty even though - # we're using save=False - export_data.delete(save=False) + + # delete child files - we don't need them any more + s3_storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) + S3Boto3Storage.delete(s3_storage, f"exports/{export_data_original}") + S3Boto3Storage.delete(s3_storage, f"exports/archive_{filename}.json") + S3Boto3Storage.delete( + s3_storage, f"exports/avatar_{filename}.{file_type}" + ) else: export_data.open("wb") @@ -266,7 +277,14 @@ def start_export_task(**kwargs): # prepare the initial file and base json job.export_data = ContentFile(b"", str(uuid4())) + # BUG: this throws a MISSING class error if there is no avatar + # #3096 may fix it + if not job.user.avatar: + job.user.avatar = "" + job.user.save() + job.export_json = job.user.to_activity() + logger.info(job.export_json) job.save(update_fields=["export_data", "export_json"]) # let's go diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 9a11fd932..02af25d12 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -42,20 +42,23 @@ def start_import_task(**kwargs): 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")) + json_filename = next( + filter(lambda n: n.startswith("archive"), tar.getnames()) + ) + job.import_data = json.loads(tar.read(json_filename).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")) + 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")) + 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")) + 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")) + upsert_user_blocks(job.user, job.import_data.get("blocks", [])) process_books(job, tar) diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index cd3119e3e..764d51db9 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -92,25 +92,25 @@ {% endif %} - {% for job in jobs %} + {% for export in jobs %} - {{ job.updated_date }} + {{ export.job.updated_date }} - {% if job.status %} - {{ job.status }} - {{ job.status_display }} - {% elif job.complete %} + {% if export.job.status %} + {{ export.job.status }} + {{ export.job.status_display }} + {% elif export.job.complete %} {% trans "Complete" %} {% else %} {% trans "Active" %} @@ -118,18 +118,30 @@ - {{ job.export_data|get_file_size }} + {{ export.size|get_file_size }} - {% if job.complete and not job.status == "stopped" and not job.status == "failed" %} -

    - - - - {% trans "Download your export" %} - - -

    + {% if export.job.complete and not export.job.status == "stopped" and not export.job.status == "failed" %} + {% if export.url%} +

    + + + + {% trans "Download your export" %} + + +

    + {% else %} +

    + + + + {% trans "Download your export" %} + + +

    + {% endif %} + {% endif %} diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index 225510085..e04c9f33a 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -130,23 +130,17 @@ def id_to_username(user_id): @register.filter(name="get_file_size") -def get_file_size(file): +def get_file_size(raw_size): """display the size of a file in human readable terms""" try: - # TODO: this obviously isn't a proper solution - # boto storages do not implement 'path' - if not USE_S3: - raw_size = os.stat(file.path).st_size - if raw_size < 1024: - return f"{raw_size} bytes" - if raw_size < 1024**2: - return f"{raw_size/1024:.2f} KB" - if raw_size < 1024**3: - return f"{raw_size/1024**2:.2f} MB" - return f"{raw_size/1024**3:.2f} GB" - - return "" + if raw_size < 1024: + return f"{raw_size} bytes" + if raw_size < 1024**2: + return f"{raw_size/1024:.2f} KB" + if raw_size < 1024**3: + return f"{raw_size/1024**2:.2f} MB" + return f"{raw_size/1024**3:.2f} GB" except Exception as error: # pylint: disable=broad-except print(error) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 33c90291d..bd32d45ad 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -13,9 +13,11 @@ from django.views import View from django.utils.decorators import method_decorator from django.shortcuts import redirect +from storages.backends.s3boto3 import S3Boto3Storage + from bookwyrm import models from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob -from bookwyrm.settings import PAGE_LENGTH +from bookwyrm import settings # pylint: disable=no-self-use,too-many-locals @@ -152,6 +154,34 @@ class ExportUser(View): jobs = BookwyrmExportJob.objects.filter(user=request.user).order_by( "-created_date" ) + + exports = [] + for job in jobs: + export = {"job": job} + + if settings.USE_S3: + # make custom_domain None so we can sign the url (https://github.com/jschneier/django-storages/issues/944) + storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) + + # for s3 we download directly from s3, so we need a signed url + export["url"] = S3Boto3Storage.url( + storage, f"/exports/{job.task_id}.tar.gz", expire=900 + ) # temporarily downloadable file, expires after 5 minutes + + # for s3 we create a new tar file in s3, so we need to check the size of _that_ file + try: + export["size"] = S3Boto3Storage.size( + storage, f"exports/{job.task_id}.tar.gz" + ) + except Exception: + export["size"] = 0 + + else: + # for local storage export_data is the tar file + export["size"] = job.export_data.size if job.export_data else 0 + + exports.append(export) + site = models.SiteSettings.objects.get() hours = site.user_import_time_limit allowed = ( @@ -162,7 +192,7 @@ class ExportUser(View): next_available = ( jobs.first().created_date + timedelta(hours=hours) if not allowed else False ) - paginated = Paginator(jobs, PAGE_LENGTH) + paginated = Paginator(exports, settings.PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { "jobs": page, From a3e05254b56cd51574bf1d25c9ecba6c1f3f8862 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 28 Jan 2024 15:56:44 +1100 Subject: [PATCH 302/458] fix avatar import path --- bookwyrm/models/bookwyrm_export_job.py | 74 +++++++++++++------------- bookwyrm/models/bookwyrm_import_job.py | 2 +- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 384e71701..a611ba4b1 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -246,9 +246,7 @@ class AddFileToTar(ChildJob): # Add avatar image if present if getattr(user, "avatar", False): - tar.add_image( - user.avatar, filename="avatar", directory="avatar/" - ) + tar.add_image(user.avatar, filename="avatar") for book in editions: if getattr(book, "cover", False): @@ -284,7 +282,6 @@ def start_export_task(**kwargs): job.user.save() job.export_json = job.user.to_activity() - logger.info(job.export_json) job.save(update_fields=["export_data", "export_json"]) # let's go @@ -345,45 +342,48 @@ def export_reading_goals_task(**kwargs): def json_export(**kwargs): """Generate an export for a user""" - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) - job.set_status("active") - job_id = kwargs["job_id"] + try: + job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + job.set_status("active") + job_id = kwargs["job_id"] - # I don't love this but it prevents a JSON encoding error - # when there is no user image - if isinstance( - job.export_json["icon"], - dataclasses._MISSING_TYPE, # pylint: disable=protected-access - ): - job.export_json["icon"] = {} - else: - # change the URL to be relative to the JSON file - file_type = job.export_json["icon"]["url"].rsplit(".", maxsplit=1)[-1] - filename = f"avatar.{file_type}" - job.export_json["icon"]["url"] = filename + if not job.export_json.get("icon"): + job.export_json["icon"] = {} + else: + # change the URL to be relative to the JSON file + file_type = job.export_json["icon"]["url"].rsplit(".", maxsplit=1)[-1] + filename = f"avatar.{file_type}" + job.export_json["icon"]["url"] = filename - # Additional settings - can't be serialized as AP - vals = [ - "show_goal", - "preferred_timezone", - "default_post_privacy", - "show_suggested_users", - ] - job.export_json["settings"] = {} - for k in vals: - job.export_json["settings"][k] = getattr(job.user, k) + # Additional settings - can't be serialized as AP + vals = [ + "show_goal", + "preferred_timezone", + "default_post_privacy", + "show_suggested_users", + ] + job.export_json["settings"] = {} + for k in vals: + job.export_json["settings"][k] = getattr(job.user, k) - job.export_json["books"] = [] + job.export_json["books"] = [] - # save settings we just updated - job.save(update_fields=["export_json"]) + # save settings we just updated + job.save(update_fields=["export_json"]) - # trigger subtasks - export_saved_lists_task.delay(job_id=job_id, no_children=False) - export_follows_task.delay(job_id=job_id, no_children=False) - export_blocks_task.delay(job_id=job_id, no_children=False) - trigger_books_jobs.delay(job_id=job_id, no_children=False) + # trigger subtasks + export_saved_lists_task.delay(job_id=job_id, no_children=False) + export_follows_task.delay(job_id=job_id, no_children=False) + export_blocks_task.delay(job_id=job_id, no_children=False) + trigger_books_jobs.delay(job_id=job_id, no_children=False) + except Exception as err: # pylint: disable=broad-except + logger.exception( + "json_export task in job %s Failed with error: %s", + job.id, + err, + ) + job.set_status("failed") @app.task(queue=IMPORTS, base=ParentTask) def trigger_books_jobs(**kwargs): diff --git a/bookwyrm/models/bookwyrm_import_job.py b/bookwyrm/models/bookwyrm_import_job.py index 02af25d12..5229430eb 100644 --- a/bookwyrm/models/bookwyrm_import_job.py +++ b/bookwyrm/models/bookwyrm_import_job.py @@ -215,7 +215,7 @@ def upsert_statuses(user, cls, data, book_remote_id): instance.save() # save and broadcast else: - logger.info("User does not have permission to import statuses") + logger.warning("User does not have permission to import statuses") def upsert_lists(user, lists, book_id): From 2c231acebe3aeccbd11e255865b281579d1767e7 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 28 Jan 2024 20:35:47 +1100 Subject: [PATCH 303/458] linting and tests --- bookwyrm/models/bookwyrm_export_job.py | 16 +-- bookwyrm/templatetags/utilities.py | 2 +- .../tests/models/test_bookwyrm_export_job.py | 105 +++--------------- .../views/preferences/test_export_user.py | 3 +- bookwyrm/views/preferences/export.py | 8 +- 5 files changed, 28 insertions(+), 106 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index a611ba4b1..2d87b203f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -1,6 +1,5 @@ """Export user account to tar.gz file for import into another Bookwyrm instance""" -import dataclasses import logging from uuid import uuid4 @@ -191,9 +190,11 @@ class AddFileToTar(ChildJob): def start_job(self): """Start the job""" - # NOTE we are doing this all in one big job, which has the potential to block a thread - # This is because we need to refer to the same s3_job or BookwyrmTarFile whilst writing - # Using a series of jobs in a loop would be better if possible + # NOTE we are doing this all in one big job, + # which has the potential to block a thread + # This is because we need to refer to the same s3_job + # or BookwyrmTarFile whilst writing + # Using a series of jobs in a loop would be better try: export_data = self.parent_export_job.export_data @@ -275,12 +276,6 @@ def start_export_task(**kwargs): # prepare the initial file and base json job.export_data = ContentFile(b"", str(uuid4())) - # BUG: this throws a MISSING class error if there is no avatar - # #3096 may fix it - if not job.user.avatar: - job.user.avatar = "" - job.user.save() - job.export_json = job.user.to_activity() job.save(update_fields=["export_data", "export_json"]) @@ -385,6 +380,7 @@ def json_export(**kwargs): ) job.set_status("failed") + @app.task(queue=IMPORTS, base=ParentTask) def trigger_books_jobs(**kwargs): """trigger tasks to get data for each book""" diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index e04c9f33a..e4ddbb47c 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _ from django.templatetags.static import static from bookwyrm.models import User -from bookwyrm.settings import INSTANCE_ACTOR_USERNAME, USE_S3 +from bookwyrm.settings import INSTANCE_ACTOR_USERNAME register = template.Library() diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index f0b9e445b..cf3ba0688 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -5,13 +5,15 @@ from unittest.mock import patch from django.core.serializers.json import DjangoJSONEncoder from django.test import TestCase +from django.test.utils import override_settings + from django.utils import timezone from bookwyrm import models import bookwyrm.models.bookwyrm_export_job as export_job -class BookwyrmExport(TestCase): +class BookwyrmExportJob(TestCase): """testing user export functions""" def setUp(self): @@ -141,94 +143,17 @@ class BookwyrmExport(TestCase): book=self.edition, ) - # pylint: disable=E1121 - 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") + self.job = models.BookwyrmExportJob.objects.create(user=self.local_user) - # pylint: disable=E1121 - 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) + def test_export_saved_lists_task(self): + """test saved list task""" - # 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") - - # pylint: disable=E1121 - 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

    ", - ) + with patch("bookwyrm.models.bookwyrm_export_job.json_export.delay"): + models.bookwyrm_export_job.start_export_task( + job_id=self.job.id, no_children=False + ) + print(self.job.user) + print(self.job.export_data) + print(self.job.export_json) + # IDK how to test this... + pass diff --git a/bookwyrm/tests/views/preferences/test_export_user.py b/bookwyrm/tests/views/preferences/test_export_user.py index 654ed2a05..e40081eb1 100644 --- a/bookwyrm/tests/views/preferences/test_export_user.py +++ b/bookwyrm/tests/views/preferences/test_export_user.py @@ -41,8 +41,7 @@ class ExportUserViews(TestCase): request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.models.bookwyrm_export_job.start_export_task.delay"): - export = views.ExportUser.as_view()(request) + export = views.ExportUser.as_view()(request) self.assertIsInstance(export, HttpResponse) self.assertEqual(export.status_code, 302) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index bd32d45ad..54d6df261 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -160,7 +160,8 @@ class ExportUser(View): export = {"job": job} if settings.USE_S3: - # make custom_domain None so we can sign the url (https://github.com/jschneier/django-storages/issues/944) + # make custom_domain None so we can sign the url + # see https://github.com/jschneier/django-storages/issues/944 storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) # for s3 we download directly from s3, so we need a signed url @@ -168,12 +169,13 @@ class ExportUser(View): storage, f"/exports/{job.task_id}.tar.gz", expire=900 ) # temporarily downloadable file, expires after 5 minutes - # for s3 we create a new tar file in s3, so we need to check the size of _that_ file + # for s3 we create a new tar file in s3, + # so we need to check the size of _that_ file try: export["size"] = S3Boto3Storage.size( storage, f"exports/{job.task_id}.tar.gz" ) - except Exception: + except Exception: # pylint: disable=broad-except export["size"] = 0 else: From c106b2a988296c4bc4ad65d82a2676b8fd796d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 28 Jan 2024 22:00:40 -0300 Subject: [PATCH 304/458] Subclass boto3.Session to use AWS_S3_ENDPOINT_URL As of 0.1.13, the s3-tar library uses an environment variable (`S3_ENDPOINT_URL`) to determine the AWS endpoint. See: https://github.com/xtream1101/s3-tar/blob/0.1.13/s3_tar/utils.py#L25-L29. To save BookWyrm admins from having to set it (e.g., through `.env`) when they are already setting `AWS_S3_ENDPOINT_URL`, we create a Session class that unconditionally uses that URL, and feed it to S3Tar. --- bookwyrm/models/bookwyrm_export_job.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 2d87b203f..610ec13d8 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -3,6 +3,7 @@ import logging from uuid import uuid4 +from boto3.session import Session as BotoSession from s3_tar import S3Tar from storages.backends.s3boto3 import S3Boto3Storage @@ -25,6 +26,14 @@ from bookwyrm.utils.tar import BookwyrmTarFile logger = logging.getLogger(__name__) +class BookwyrmAwsSession(BotoSession): + """a boto session that always uses settings.AWS_S3_ENDPOINT_URL""" + + def client(service_name, **kwargs): + kwargs["endpoint_url"] = settings.AWS_S3_ENDPOINT_URL + return super().client(service_name, **kwargs) + + class BookwyrmExportJob(ParentJob): """entry for a specific request to export a bookwyrm user""" @@ -211,6 +220,7 @@ class AddFileToTar(ChildJob): s3_job = S3Tar( settings.AWS_STORAGE_BUCKET_NAME, f"exports/{filename}.tar.gz", + session=BookwyrmAwsSession(), ) # save json file From 765fc1e43d19e9c8cdf91a6f72a47eb2ab18721a Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 29 Jan 2024 12:28:37 +1100 Subject: [PATCH 305/458] fix tests --- .../tests/models/test_bookwyrm_export_job.py | 142 ++++++++++++++++-- .../views/preferences/test_export_user.py | 3 +- 2 files changed, 130 insertions(+), 15 deletions(-) diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index cf3ba0688..267d30217 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -1,16 +1,11 @@ """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.test.utils import override_settings - from django.utils import timezone +from django.test import TestCase from bookwyrm import models -import bookwyrm.models.bookwyrm_export_job as export_job class BookwyrmExportJob(TestCase): @@ -143,17 +138,136 @@ class BookwyrmExportJob(TestCase): book=self.edition, ) - self.job = models.BookwyrmExportJob.objects.create(user=self.local_user) + self.job = models.BookwyrmExportJob.objects.create( + user=self.local_user, export_json={} + ) - def test_export_saved_lists_task(self): - """test saved list task""" + def test_add_book_to_user_export_job(self): + """does AddBookToUserExportJob ...add the book to the export?""" + + self.job.export_json["books"] = [] + self.job.save() + + with patch("bookwyrm.models.bookwyrm_export_job.AddFileToTar.start_job"): + model = models.bookwyrm_export_job + edition_job = model.AddBookToUserExportJob.objects.create( + edition=self.edition, parent_job=self.job + ) + + edition_job.start_job() + + self.job.refresh_from_db() + self.assertIsNotNone(self.job.export_json["books"]) + self.assertEqual(len(self.job.export_json["books"]), 1) + book = self.job.export_json["books"][0] + self.assertEqual(book["work"]["id"], self.work.remote_id) + self.assertEqual(len(book["authors"]), 1) + self.assertEqual(len(book["shelves"]), 1) + self.assertEqual(len(book["lists"]), 1) + self.assertEqual(len(book["comments"]), 1) + self.assertEqual(len(book["reviews"]), 1) + self.assertEqual(len(book["quotations"]), 1) + self.assertEqual(len(book["readthroughs"]), 1) + + def test_start_export_task(self): + """test saved list task saves initial json and data""" with patch("bookwyrm.models.bookwyrm_export_job.json_export.delay"): models.bookwyrm_export_job.start_export_task( job_id=self.job.id, no_children=False ) - print(self.job.user) - print(self.job.export_data) - print(self.job.export_json) - # IDK how to test this... - pass + + self.job.refresh_from_db() + + self.assertIsNotNone(self.job.export_data) + self.assertIsNotNone(self.job.export_json) + self.assertEqual(self.job.export_json["name"], self.local_user.name) + + def test_export_saved_lists_task(self): + """test export_saved_lists_task adds the saved lists""" + + models.bookwyrm_export_job.export_saved_lists_task( + job_id=self.job.id, no_children=False + ) + + self.job.refresh_from_db() + + self.assertIsNotNone(self.job.export_json["saved_lists"]) + self.assertEqual( + self.job.export_json["saved_lists"][0], self.saved_list.remote_id + ) + + def test_export_follows_task(self): + """test export_follows_task adds the follows""" + + models.bookwyrm_export_job.export_follows_task( + job_id=self.job.id, no_children=False + ) + + self.job.refresh_from_db() + + self.assertIsNotNone(self.job.export_json["follows"]) + self.assertEqual(self.job.export_json["follows"][0], self.rat_user.remote_id) + + def test_export_blocks_task(self): + + """test export_blocks_task adds the blocks""" + + models.bookwyrm_export_job.export_blocks_task( + job_id=self.job.id, no_children=False + ) + + self.job.refresh_from_db() + + self.assertIsNotNone(self.job.export_json["blocks"]) + self.assertEqual(self.job.export_json["blocks"][0], self.badger_user.remote_id) + + def test_export_reading_goals_task(self): + """test export_reading_goals_task adds the goals""" + + models.bookwyrm_export_job.export_reading_goals_task( + job_id=self.job.id, no_children=False + ) + + self.job.refresh_from_db() + + self.assertIsNotNone(self.job.export_json["goals"]) + self.assertEqual(self.job.export_json["goals"][0]["goal"], 128937123) + + def test_json_export(self): + """test json_export job adds settings""" + + with patch( + "bookwyrm.models.bookwyrm_export_job.export_saved_lists_task.delay" + ), patch( + "bookwyrm.models.bookwyrm_export_job.export_follows_task.delay" + ), patch( + "bookwyrm.models.bookwyrm_export_job.export_blocks_task.delay" + ), patch( + "bookwyrm.models.bookwyrm_export_job.trigger_books_jobs.delay" + ): + + models.bookwyrm_export_job.json_export( + job_id=self.job.id, no_children=False + ) + + self.job.refresh_from_db() + + self.assertIsNotNone(self.job.export_json["settings"]) + self.assertFalse(self.job.export_json["settings"]["show_goal"]) + self.assertEqual( + self.job.export_json["settings"]["preferred_timezone"], + "America/Los Angeles", + ) + self.assertEqual( + self.job.export_json["settings"]["default_post_privacy"], "followers" + ) + self.assertFalse(self.job.export_json["settings"]["show_suggested_users"]) + + def test_get_books_for_user(self): + """does get_books_for_user get all the books""" + + data = models.bookwyrm_export_job.get_books_for_user(self.local_user) + + self.assertEqual(len(data), 1) + self.assertEqual(data[0].title, "Example Edition") diff --git a/bookwyrm/tests/views/preferences/test_export_user.py b/bookwyrm/tests/views/preferences/test_export_user.py index e40081eb1..98892f6b8 100644 --- a/bookwyrm/tests/views/preferences/test_export_user.py +++ b/bookwyrm/tests/views/preferences/test_export_user.py @@ -41,7 +41,8 @@ class ExportUserViews(TestCase): request = self.factory.post("") request.user = self.local_user - export = views.ExportUser.as_view()(request) + with patch("bookwyrm.models.bookwyrm_export_job.BookwyrmExportJob.start_job"): + export = views.ExportUser.as_view()(request) self.assertIsInstance(export, HttpResponse) self.assertEqual(export.status_code, 302) From adff3c425153262811bd8930d0c2a2d842edaed9 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 29 Jan 2024 13:45:35 +1100 Subject: [PATCH 306/458] allow user exports with s3 also undoes a line space change in settings.py to make the PR cleaner --- bookwyrm/settings.py | 1 + bookwyrm/templates/settings/imports/imports.html | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 3f9665baf..cc941da84 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -442,4 +442,5 @@ if HTTP_X_FORWARDED_PROTO: # 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" + DATA_UPLOAD_MAX_MEMORY_SIZE = env.int("DATA_UPLOAD_MAX_MEMORY_SIZE", (1024**2 * 100)) diff --git a/bookwyrm/templates/settings/imports/imports.html b/bookwyrm/templates/settings/imports/imports.html index 11b3c7e03..ca53dd410 100644 --- a/bookwyrm/templates/settings/imports/imports.html +++ b/bookwyrm/templates/settings/imports/imports.html @@ -157,13 +157,10 @@ >

    {% trans "Users are currently unable to start new user exports. This is the default setting." %}

    - {% if use_s3 %} -

    {% trans "It is not currently possible to provide user exports when using s3 storage. The BookWyrm development team are working on a fix for this." %}

    - {% endif %}
    {% csrf_token %}
    -
    From 5f7be848fc3f3ccea46c434fd6e9aae68bb04035 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 29 Jan 2024 14:10:36 +1100 Subject: [PATCH 307/458] subclass boto3 session instead of adding new env value Thanks Dato! --- .env.example | 1 - bookwyrm/models/bookwyrm_export_job.py | 9 +++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.env.example b/.env.example index 497d05779..20ce8240b 100644 --- a/.env.example +++ b/.env.example @@ -81,7 +81,6 @@ AWS_SECRET_ACCESS_KEY= # AWS_S3_CUSTOM_DOMAIN=None # "example-bucket-name.s3.fr-par.scw.cloud" # AWS_S3_REGION_NAME=None # "fr-par" # AWS_S3_ENDPOINT_URL=None # "https://s3.fr-par.scw.cloud" -# S3_ENDPOINT_URL=None # same as AWS_S3_ENDPOINT_URL - needed for non-AWS for user exports # Commented are example values if you use Azure Blob Storage # USE_AZURE=true diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 610ec13d8..0cb726aa1 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -29,9 +29,9 @@ logger = logging.getLogger(__name__) class BookwyrmAwsSession(BotoSession): """a boto session that always uses settings.AWS_S3_ENDPOINT_URL""" - def client(service_name, **kwargs): + def client(self, *args, **kwargs): # pylint: disable=arguments-differ kwargs["endpoint_url"] = settings.AWS_S3_ENDPOINT_URL - return super().client(service_name, **kwargs) + return super().client("s3", *args, **kwargs) class BookwyrmExportJob(ParentJob): @@ -42,9 +42,7 @@ class BookwyrmExportJob(ParentJob): else: storage = storage_backends.ExportsFileStorage - export_data = FileField( - null=True, storage=storage - ) # use custom storage backend here + export_data = FileField(null=True, storage=storage) export_json = JSONField(null=True, encoder=DjangoJSONEncoder) json_completed = BooleanField(default=False) @@ -70,7 +68,6 @@ class BookwyrmExportJob(ParentJob): self.json_completed = True self.save(update_fields=["json_completed"]) - # add json file to tarfile tar_job = AddFileToTar.objects.create( parent_job=self, parent_export_job=self ) From 3675a4cf3f0076cb1885715ad7d6f034308936ec Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 29 Jan 2024 14:28:30 +1100 Subject: [PATCH 308/458] disable user exports if using azure --- bookwyrm/templates/settings/imports/imports.html | 5 ++++- bookwyrm/views/admin/imports.py | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/settings/imports/imports.html b/bookwyrm/templates/settings/imports/imports.html index ca53dd410..8693f7b68 100644 --- a/bookwyrm/templates/settings/imports/imports.html +++ b/bookwyrm/templates/settings/imports/imports.html @@ -157,10 +157,13 @@ >

    {% trans "Users are currently unable to start new user exports. This is the default setting." %}

    + {% if use_azure %} +

    {% trans "It is not currently possible to provide user exports when using Azure storage." %}

    + {% endif %}
    {% csrf_token %}
    -
    diff --git a/bookwyrm/views/admin/imports.py b/bookwyrm/views/admin/imports.py index 0924536bf..1009f4149 100644 --- a/bookwyrm/views/admin/imports.py +++ b/bookwyrm/views/admin/imports.py @@ -9,7 +9,7 @@ from django.views.decorators.http import require_POST from bookwyrm import models from bookwyrm.views.helpers import redirect_to_referer -from bookwyrm.settings import PAGE_LENGTH, USE_S3 +from bookwyrm.settings import PAGE_LENGTH, USE_AZURE # pylint: disable=no-self-use @@ -59,7 +59,7 @@ class ImportList(View): "import_size_limit": site_settings.import_size_limit, "import_limit_reset": site_settings.import_limit_reset, "user_import_time_limit": site_settings.user_import_time_limit, - "use_s3": USE_S3, + "use_azure": USE_AZURE, } return TemplateResponse(request, "settings/imports/imports.html", data) From b05621005e14818fd4d529c06b38b4c433a7832d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:10:13 +0000 Subject: [PATCH 309/458] Bump aiohttp from 3.9.0 to 3.9.2 Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.0 to 3.9.2. - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.0...v3.9.2) --- updated-dependencies: - dependency-name: aiohttp dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6509effc7..41b6bd16d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.9.0 +aiohttp==3.9.2 bleach==5.0.1 celery==5.2.7 colorthief==0.2.1 From 2ba7dff845e7211a22c390e32e590f84b16311fd Mon Sep 17 00:00:00 2001 From: Jacob Kerr Date: Wed, 3 Jan 2024 21:54:25 -0500 Subject: [PATCH 310/458] Fixed shelving date changing when changing editions --- bookwyrm/views/books/editions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/views/books/editions.py b/bookwyrm/views/books/editions.py index 54d1bd84c..5202531f5 100644 --- a/bookwyrm/views/books/editions.py +++ b/bookwyrm/views/books/editions.py @@ -93,6 +93,7 @@ def switch_edition(request): user=shelfbook.user, shelf=shelfbook.shelf, book=new_edition, + shelved_date=shelfbook.shelved_date, ) shelfbook.delete() From 9c5f6c527bd9ae1954a22d695f43f1c8f2c82907 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 3 Feb 2024 06:51:23 -0800 Subject: [PATCH 311/458] Fixes translation tags --- .../templates/preferences/export-user.html | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 58b27f3c1..955cff656 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -14,31 +14,29 @@

    {% trans "You can create an export file here. This will allow you to migrate your data to another BookWyrm account." %}

    - {% blocktrans trimmed %}
    -

    Your file will include:

    +

    {% trans "Your file will include:" %}

      -
    • User profile
    • -
    • Most user settings
    • -
    • Reading goals
    • -
    • Shelves
    • -
    • Reading history
    • -
    • Book reviews
    • -
    • Statuses
    • -
    • Your own lists and saved lists
    • -
    • Which users you follow and block
    • +
    • {% trans "User profile" %}
    • +
    • {% trans "Most user settings" %}
    • +
    • {% trans "Reading goals" %}
    • +
    • {% trans "Shelves" %}
    • +
    • {% trans "Reading history" %}
    • +
    • {% trans "Book reviews" %}
    • +
    • {% trans "Statuses" %}
    • +
    • {% trans "Your own lists and saved lists" %}
    • +
    • {% trans "Which users you follow and block" %}
    -

    Your file will not include:

    +

    {% trans "Your file will not include:" %}

      -
    • Direct messages
    • -
    • Replies to your statuses
    • -
    • Groups
    • -
    • Favorites
    • +
    • {% trans "Direct messages" %}
    • +
    • {% trans "Replies to your statuses" %}
    • +
    • {% trans "Groups" %}
    • +
    • {% trans "Favorites" %}
    - {% endblocktrans %}

    {% trans "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." %}

    @@ -50,11 +48,11 @@

    {% trans "New user exports are currently disabled." %} {% if perms.bookwyrm.edit_instance_settings %} - {% spaceless %} - {% blocktrans%} -
    User exports settings can be changed from the Imports page in the Admin dashboard. +
    + {% url 'settings-imports' as url %} + {% blocktrans trimmed %} + User exports settings can be changed from the Imports page in the Admin dashboard. {% endblocktrans %} - {% endspaceless %} {% endif%}

    {% elif next_available %} From 6d5752fb4ee72287ed15b84726872a4608842159 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 3 Feb 2024 07:40:23 -0800 Subject: [PATCH 312/458] Adds merge migration for page numbering fix --- bookwyrm/migrations/0193_merge_20240203_1539.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bookwyrm/migrations/0193_merge_20240203_1539.py diff --git a/bookwyrm/migrations/0193_merge_20240203_1539.py b/bookwyrm/migrations/0193_merge_20240203_1539.py new file mode 100644 index 000000000..a88568ba1 --- /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 = [] From a1ac9494b28ecd1a1674926d7aad8e82d2502dcf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 3 Feb 2024 08:00:07 -0800 Subject: [PATCH 313/458] Allow admins to un-schedule tasks --- bookwyrm/templates/settings/schedules.html | 11 +++++++++++ bookwyrm/urls.py | 2 +- bookwyrm/views/admin/schedule.py | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/settings/schedules.html b/bookwyrm/templates/settings/schedules.html index fe096092d..20ced4b30 100644 --- a/bookwyrm/templates/settings/schedules.html +++ b/bookwyrm/templates/settings/schedules.html @@ -61,7 +61,18 @@ {{ task.interval.id }} + + {% if task.enabled %} + + {% endif %} {{ task.enabled|yesno }} + + {% if task.name != "celery.backend_cleanup" %} +
    + {% csrf_token %} + +
    + {% endif %} {% empty %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 64742347a..a40dcebea 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -360,7 +360,7 @@ urlpatterns = [ r"^settings/celery/ping/?$", views.celery_ping, name="settings-celery-ping" ), re_path( - r"^settings/schedules/?$", + r"^settings/schedules/(?P\d+)?$", views.ScheduledTasks.as_view(), name="settings-schedules", ), diff --git a/bookwyrm/views/admin/schedule.py b/bookwyrm/views/admin/schedule.py index ce5944ee5..c654dca9a 100644 --- a/bookwyrm/views/admin/schedule.py +++ b/bookwyrm/views/admin/schedule.py @@ -1,5 +1,6 @@ """ Scheduled celery tasks """ from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View @@ -21,3 +22,10 @@ class ScheduledTasks(View): data["tasks"] = PeriodicTask.objects.all() data["schedules"] = IntervalSchedule.objects.all() return TemplateResponse(request, "settings/schedules.html", data) + + # pylint: disable=unused-argument + def post(self, request, task_id): + """un-schedule a task""" + task = PeriodicTask.objects.get(id=task_id) + task.delete() + return redirect("settings-schedules") From 4e2b8af1479bd35bf2b5c5973ff0ae2b4bb1a4fc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 3 Feb 2024 08:02:51 -0800 Subject: [PATCH 314/458] Adds merge migration --- bookwyrm/migrations/0193_merge_20240203_1602.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bookwyrm/migrations/0193_merge_20240203_1602.py diff --git a/bookwyrm/migrations/0193_merge_20240203_1602.py b/bookwyrm/migrations/0193_merge_20240203_1602.py new file mode 100644 index 000000000..e5f760539 --- /dev/null +++ b/bookwyrm/migrations/0193_merge_20240203_1602.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.23 on 2024-02-03 16:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0192_rename_version_sitesettings_available_version"), + ("bookwyrm", "0192_sitesettings_user_exports_enabled"), + ] + + operations = [] From 748c9349865f063689adcaa61e46a26fa3e3bcae Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 3 Feb 2024 08:20:12 -0800 Subject: [PATCH 315/458] Merge migrations upon merge migrations --- ...193_merge_20240203_1602.py => 0194_merge_20240203_1619.py} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename bookwyrm/migrations/{0193_merge_20240203_1602.py => 0194_merge_20240203_1619.py} (63%) diff --git a/bookwyrm/migrations/0193_merge_20240203_1602.py b/bookwyrm/migrations/0194_merge_20240203_1619.py similarity index 63% rename from bookwyrm/migrations/0193_merge_20240203_1602.py rename to bookwyrm/migrations/0194_merge_20240203_1619.py index e5f760539..a5c18e300 100644 --- a/bookwyrm/migrations/0193_merge_20240203_1602.py +++ b/bookwyrm/migrations/0194_merge_20240203_1619.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.23 on 2024-02-03 16:02 +# Generated by Django 3.2.23 on 2024-02-03 16:19 from django.db import migrations @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ ("bookwyrm", "0192_rename_version_sitesettings_available_version"), - ("bookwyrm", "0192_sitesettings_user_exports_enabled"), + ("bookwyrm", "0193_merge_20240203_1539"), ] operations = [] From 6c9ca0bf190552597890c2aaefca614c0058f914 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 3 Feb 2024 21:55:46 +0100 Subject: [PATCH 316/458] Add search for author --- bookwyrm/templates/layout.html | 2 +- bookwyrm/templates/search/author.html | 17 +++++++++++++++++ bookwyrm/templates/search/layout.html | 4 ++++ bookwyrm/views/search.py | 27 +++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 bookwyrm/templates/search/author.html diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index 6283e61c4..ced4e8006 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -36,7 +36,7 @@
    {% if request.user.is_authenticated %} - {% trans "Search for a book, user, or list" as search_placeholder %} + {% trans "Search for a book, author, user, or list" as search_placeholder %} {% else %} {% trans "Search for a book" as search_placeholder %} {% endif %} diff --git a/bookwyrm/templates/search/author.html b/bookwyrm/templates/search/author.html new file mode 100644 index 000000000..d42c3b54f --- /dev/null +++ b/bookwyrm/templates/search/author.html @@ -0,0 +1,17 @@ +{% extends 'search/layout.html' %} + +{% block panel %} + +{% if results %} + +{% endif %} + +{% endblock %} diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index 8cf47b371..725a4f43f 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -20,6 +20,7 @@
    + +
    {% endblock %} From dd1999eb8e75c17b525d301f46242b279ffb93df Mon Sep 17 00:00:00 2001 From: Ross Chapman Date: Tue, 20 Feb 2024 16:25:01 -0800 Subject: [PATCH 325/458] Adds view tests for shelf filters (#3162) * Adds test file * Adds success assertion * Updates tests * Updates shelf books creation * Updates assertion to use isbn for Edition model * Updates query * trigger workflow test * Updates validate_html * Updates comment and test * Fixes none test * Adds management command to clear all deleted user data * Adds success message --------- Co-authored-by: Mouse Reeve Co-authored-by: Mouse Reeve --- bookwyrm/tests/validate_html.py | 28 ++++++++++----- bookwyrm/tests/views/shelf/test_shelf.py | 45 ++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/bookwyrm/tests/validate_html.py b/bookwyrm/tests/validate_html.py index 85e5c6277..748b94d5f 100644 --- a/bookwyrm/tests/validate_html.py +++ b/bookwyrm/tests/validate_html.py @@ -13,16 +13,26 @@ def validate_html(html): "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/shelf/test_shelf.py b/bookwyrm/tests/views/shelf/test_shelf.py index 492f214e3..b96d0a9ed 100644 --- a/bookwyrm/tests/views/shelf/test_shelf.py +++ b/bookwyrm/tests/views/shelf/test_shelf.py @@ -219,3 +219,48 @@ class ShelfViews(TestCase): view(request, request.user.username, shelf.identifier) self.assertEqual(shelf.name, "To Read") + + def test_filter_shelf_found(self, *_): + """display books that match a filter keyword""" + models.ShelfBook.objects.create( + book=self.book, + shelf=self.shelf, + user=self.local_user, + ) + shelf_book = models.ShelfBook.objects.create( + book=self.book, + shelf=self.local_user.shelf_set.first(), + user=self.local_user, + ) + view = views.Shelf.as_view() + request = self.factory.get("", {"filter": shelf_book.book.title}) + request.user = self.local_user + with patch("bookwyrm.views.shelf.shelf.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.local_user.username) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["books"].object_list), 1) + self.assertEqual( + result.context_data["books"].object_list[0].title, + shelf_book.book.title, + ) + + def test_filter_shelf_none(self, *_): + """display a message when no books match a filter keyword""" + models.ShelfBook.objects.create( + book=self.book, + shelf=self.shelf, + user=self.local_user, + ) + view = views.Shelf.as_view() + request = self.factory.get("", {"filter": "NOPE"}) + request.user = self.local_user + with patch("bookwyrm.views.shelf.shelf.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.local_user.username) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["books"].object_list), 0) From 8f537ef56a11fee392dd6e55688187ad95e6e91f Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 20 Feb 2024 16:45:16 -0800 Subject: [PATCH 326/458] Adds missing migration for Korean locale --- .../0195_alter_user_preferred_language.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 bookwyrm/migrations/0195_alter_user_preferred_language.py 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 000000000..1fbfa7304 --- /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, + ), + ), + ] From db97d76a240919f31e48b8d97c1c51ca06aadbb4 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Fri, 1 Mar 2024 19:58:11 -0800 Subject: [PATCH 327/458] Add timeout to isbn.py An instance of requests.get in isbn.py lacks a timeout, and this commit adds one with a default of 15 as used other places in the code, where requests.get does already have a timeout. --- bookwyrm/isbn/isbn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/isbn/isbn.py b/bookwyrm/isbn/isbn.py index 56062ff7b..d14dc2619 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 From 1ae9870862626134f90b4f1fb86d06fdd870e6c4 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Fri, 1 Mar 2024 20:02:40 -0800 Subject: [PATCH 328/458] Add timeout to base_activity.py An instance of requests.get was missing a timeout; this commit adds a timeout of 15 as used in other places in this codebase which already have timeouts. --- bookwyrm/activitypub/base_activity.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index fbbc18f73..9f1cfdbfb 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -423,6 +423,7 @@ def get_activitypub_data(url): "Date": now, "Signature": make_signature("get", sender, url, now), }, + timeout=15 ) except requests.RequestException: raise ConnectorException() From 50b811d9aa0e117f20851507b385b2020cfcd618 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Fri, 1 Mar 2024 20:11:14 -0800 Subject: [PATCH 329/458] Typo fix Add a comma --- bookwyrm/activitypub/base_activity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 9f1cfdbfb..890d4d24a 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -423,7 +423,7 @@ def get_activitypub_data(url): "Date": now, "Signature": make_signature("get", sender, url, now), }, - timeout=15 + timeout=15, ) except requests.RequestException: raise ConnectorException() From f8fd76cff05450249d59d76f02bc05e2138062dd Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 13:57:09 -0800 Subject: [PATCH 330/458] Remove duplicate types-requests==2.31.0.2 The types-requests==2.31.0.2 dependency was double-listed right next to each other; this commit removes one. --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6dc737aab..931bc155b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -54,4 +54,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 From 3652ac81008fd2d0f8d640160de3178913237454 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 15:41:06 -0800 Subject: [PATCH 331/458] Alphabetize requirements.txt Alphabetize requirements.txt for developer convenience; this helps to find duplicates and unnecessarily-pinned subdependencies, as well as making the file easier to read and use. --- requirements.txt | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/requirements.txt b/requirements.txt index 931bc155b..f41210aea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,52 +1,52 @@ aiohttp==3.9.2 bleach==5.0.1 +boto3==1.26.57 +bw-file-resubmit==0.6.0rc2 celery==5.2.7 colorthief==0.2.1 Django==3.2.24 django-celery-beat==2.4.0 -bw-file-resubmit==0.6.0rc2 django-compressor==4.3.1 +django-csp==3.7 django-imagekit==4.1.0 django-model-utils==4.3.1 +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 libsass==0.22.0 Markdown==3.4.1 -Pillow==10.0.1 -psycopg2==2.9.5 -pycryptodome==3.19.1 -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 # Dev -pytest-django==4.1.0 +celery-types==0.18.0 +django-stubs[compatible-mypy]==4.2.4 +mypy==1.5.1 +pylint==2.14.0 pytest==6.1.2 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 From 570017d3b08a700a7cd12c656a5eeeff059b466b Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 15:57:06 -0800 Subject: [PATCH 332/458] Upgrade Python Version from 3.9 to 3.11 --- .github/workflows/django-tests.yml | 2 +- .github/workflows/mypy.yml | 4 ++-- .github/workflows/pylint.yml | 4 ++-- Dockerfile | 2 +- dev-tools/Dockerfile | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index 78b6e142e..de71d9bcf 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -27,7 +27,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.11 - name: Install Dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index 1a641edd2..6df987aa4 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -13,10 +13,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.9 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.11 - name: Install Dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 3811c97d3..ab8633b48 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -13,10 +13,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.9 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.11 - name: Install Dependencies run: | python -m pip install --upgrade pip diff --git a/Dockerfile b/Dockerfile index b3cd26e88..82b0c92c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.11 ENV PYTHONUNBUFFERED 1 diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index 6c132944f..563467f09 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-bookworm +FROM python:3.11-bookworm WORKDIR /app/dev-tools ENV PATH="/app/dev-tools/node_modules/.bin:$PATH" From 39da471f795fd99e40f68e0f48c831f56864208a Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 15:59:17 -0800 Subject: [PATCH 333/458] Disable Pylint Failure for imghdr deprecation for now --- bookwyrm/connectors/abstract_connector.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 8b6dcb885..b61bc2b04 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -3,7 +3,9 @@ from __future__ import annotations 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 From 4312e9bba02df710ca0f11f40fffe00ef7af95b8 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:03:19 -0800 Subject: [PATCH 334/458] Upgrade Celery to 5.3.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f41210aea..0cfa9db9c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ aiohttp==3.9.2 bleach==5.0.1 boto3==1.26.57 bw-file-resubmit==0.6.0rc2 -celery==5.2.7 +celery==5.3.1 colorthief==0.2.1 Django==3.2.24 django-celery-beat==2.4.0 From c944824ac7abb6233b43a0f4cc573343635d287e Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:04:06 -0800 Subject: [PATCH 335/458] Upgrade django-celery-beat to 2.5.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0cfa9db9c..19f13307f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ bw-file-resubmit==0.6.0rc2 celery==5.3.1 colorthief==0.2.1 Django==3.2.24 -django-celery-beat==2.4.0 +django-celery-beat==2.5.0 django-compressor==4.3.1 django-csp==3.7 django-imagekit==4.1.0 From fee3fdd5a804a7cb3b234763649034b01b4f5d87 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:04:37 -0800 Subject: [PATCH 336/458] Upgrade django-compressor to 4.4 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 19f13307f..5882607ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ celery==5.3.1 colorthief==0.2.1 Django==3.2.24 django-celery-beat==2.5.0 -django-compressor==4.3.1 +django-compressor==4.4 django-csp==3.7 django-imagekit==4.1.0 django-model-utils==4.3.1 From c1520da56d0959a5b56f272c2803120aae696425 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:05:11 -0800 Subject: [PATCH 337/458] Upgrade flower to 2.0.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5882607ee..574c7811c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ django-sass-processor==1.2.2 django-storages==1.13.2 django-storages[azure] environs==9.5.0 -flower==1.2.0 +flower==2.0.0 libsass==0.22.0 Markdown==3.4.1 opentelemetry-api==1.16.0 From da2636fa294eec47502666e21dc41e4f71c66b4c Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:07:50 -0800 Subject: [PATCH 338/458] Add grpcio pin @ 1.57.0 --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 574c7811c..076456b0d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,6 +16,7 @@ django-storages==1.13.2 django-storages[azure] environs==9.5.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 opentelemetry-api==1.16.0 From 0f5a3e9163a3f52843b222668dd7a273014db500 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:08:41 -0800 Subject: [PATCH 339/458] Pin Tornado at 6.3.3 --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 076456b0d..05c606a83 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,6 +36,7 @@ qrcode==7.3.1 redis==4.5.4 requests==2.31.0 responses==0.22.0 +tornado==6.3.3 # Not a direct dependency, pinned to get a security fix # Dev celery-types==0.18.0 From 498dc35d995793a73b3ae358a3d1f2d969240684 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:09:06 -0800 Subject: [PATCH 340/458] Upgrade Pylint to 2.15.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 05c606a83..a2f95c6bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,7 +42,7 @@ tornado==6.3.3 # Not a direct dependency, pinned to get a security fix celery-types==0.18.0 django-stubs[compatible-mypy]==4.2.4 mypy==1.5.1 -pylint==2.14.0 +pylint==2.15.0 pytest==6.1.2 pytest-cov==2.10.1 pytest-django==4.1.0 From 22c4155c7c4b850c538ce26a5590d02acc4d706b Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 16:09:34 -0800 Subject: [PATCH 341/458] Upgrade pytest to 6.2.5 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a2f95c6bc..ae73b1d61 100644 --- a/requirements.txt +++ b/requirements.txt @@ -43,7 +43,7 @@ celery-types==0.18.0 django-stubs[compatible-mypy]==4.2.4 mypy==1.5.1 pylint==2.15.0 -pytest==6.1.2 +pytest==6.2.5 pytest-cov==2.10.1 pytest-django==4.1.0 pytest-env==0.6.2 From be140d5e5a5818b73c40c7259a54a510681789db Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 17:20:48 -0800 Subject: [PATCH 342/458] Pin setuptools at 65.5.1 --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index ae73b1d61..bdf84f7e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,6 +36,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 From eadb0e640f84f9a69c39638ce425e78fadffb594 Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 17:29:42 -0800 Subject: [PATCH 343/458] Fix typo in operator --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index bdf84f7e7..c769916a2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ django-storages==1.13.2 django-storages[azure] environs==9.5.0 flower==2.0.0 -grpcio=1.57.0 # Not a direct dependency, pinned to get a security fix +grpcio==1.57.0 # Not a direct dependency, pinned to get a security fix libsass==0.22.0 Markdown==3.4.1 opentelemetry-api==1.16.0 From 9fa09d5ebeb96a379f1ba6765aaf22324b8f631d Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 17:30:37 -0800 Subject: [PATCH 344/458] Add extra space required by linter --- bookwyrm/connectors/abstract_connector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index b61bc2b04..fbf0fb31b 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -5,7 +5,7 @@ from typing import Optional, TypedDict, Any, Callable, Union, Iterator from urllib.parse import quote_plus # pylint: disable-next=deprecated-module -import imghdr # Deprecated in 3.11 for removal in 3.13; no good alternative yet +import imghdr # Deprecated in 3.11 for removal in 3.13; no good alternative yet import logging import re import asyncio From 91fe4ad535fbe4717042c3189d38d7b4c1336f4a Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 17:31:16 -0800 Subject: [PATCH 345/458] Fix spacing for linter --- bookwyrm/connectors/abstract_connector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index fbf0fb31b..aa8edbeae 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -5,7 +5,7 @@ from typing import Optional, TypedDict, Any, Callable, Union, Iterator from urllib.parse import quote_plus # pylint: disable-next=deprecated-module -import imghdr # Deprecated in 3.11 for removal in 3.13; no good alternative yet +import imghdr # Deprecated in 3.11 for removal in 3.13; no good alternative yet import logging import re import asyncio From d138395c75a6790f6ad81a727ad8a3f2c8b1169d Mon Sep 17 00:00:00 2001 From: Margaret Fero Date: Sat, 2 Mar 2024 17:43:49 -0800 Subject: [PATCH 346/458] Add linter exclusion for TBookWyrmModel --- bookwyrm/activitypub/base_activity.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 890d4d24a..efc9d8da2 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -20,6 +20,7 @@ from bookwyrm.tasks import app, MISC logger = logging.getLogger(__name__) +# pylint: disable=invalid-name TBookWyrmModel = TypeVar("TBookWyrmModel", bound=base_model.BookWyrmModel) From 09c3d9c0dcdb821de612ac9f47819599bf349dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 3 Mar 2024 18:42:27 -0300 Subject: [PATCH 347/458] json_export: also detect absent "icon" key --- bookwyrm/models/bookwyrm_export_job.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 1f6085e0c..2f32cbd29 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -80,10 +80,7 @@ def json_export( exported_user = user.to_activity() # I don't love this but it prevents a JSON encoding error # when there is no user image - if isinstance( - exported_user["icon"], - dataclasses._MISSING_TYPE, # pylint: disable=protected-access - ): + if exported_user.get("icon") in (None, dataclasses.MISSING): exported_user["icon"] = {} else: # change the URL to be relative to the JSON file From 8d018b872fe33ccdd729a7fb953f65885a45cd47 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 9 Mar 2024 15:39:52 +0100 Subject: [PATCH 348/458] FileLinkForm: fix duplicate check --- bookwyrm/forms/links.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bookwyrm/forms/links.py b/bookwyrm/forms/links.py index d2fd5f116..345c5c1d4 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 @@ class FileLinkForm(CustomForm): ), ) 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( From 3ba528ecddc08bf5f18c8596da2b4fd9f0758291 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 11 Mar 2024 12:46:55 +0100 Subject: [PATCH 349/458] pytest.ini: define ALLOWED_HOSTS This fixes running `./bw-dev pytest` locally when having a different value defined for `ALLOWED_HOSTS` in `.env`. --- pytest.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/pytest.ini b/pytest.ini index b50efd602..18c955032 100644 --- a/pytest.ini +++ b/pytest.ini @@ -11,6 +11,7 @@ env = DEBUG = false USE_HTTPS = true DOMAIN = your.domain.here + ALLOWED_HOSTS = your.domain.here BOOKWYRM_DATABASE_BACKEND = postgres MEDIA_ROOT = images/ CELERY_BROKER = "" From 12b469a0d6a2c554715f53bcf2a333d16dbed8f2 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 13 Mar 2024 12:30:52 +0100 Subject: [PATCH 350/458] CI: use actions/checkout@v4 --- .github/workflows/black.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/curlylint.yaml | 2 +- .github/workflows/django-tests.yml | 2 +- .github/workflows/lint-frontend.yaml | 2 +- .github/workflows/mypy.yml | 2 +- .github/workflows/prettier.yaml | 2 +- .github/workflows/pylint.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index 4e7be4af3..7ac208c94 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -10,7 +10,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 - uses: psf/black@22.12.0 with: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 68bb05d7e..51316ef62 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 8d5c6b4f7..10ad04ce1 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 index de71d9bcf..9a2c615a4 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -23,7 +23,7 @@ jobs: ports: - 5432:5432 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: diff --git a/.github/workflows/lint-frontend.yaml b/.github/workflows/lint-frontend.yaml index 0d0559e40..21f11ebf3 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 index 6df987aa4..a198efc21 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python 3.11 uses: actions/setup-python@v4 with: diff --git a/.github/workflows/prettier.yaml b/.github/workflows/prettier.yaml index 501516ae1..9c05c7476 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 index ab8633b48..85f275020 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python 3.11 uses: actions/setup-python@v4 with: From 6af0a0883827b65e5776c2d1e2f7264600ae7d9f Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 13 Mar 2024 12:35:23 +0100 Subject: [PATCH 351/458] CI: use actions/setup-python@v5 and cache pip --- .github/workflows/black.yml | 2 +- .github/workflows/django-tests.yml | 3 ++- .github/workflows/mypy.yml | 3 ++- .github/workflows/pylint.yml | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index 7ac208c94..0633dedb7 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 - uses: psf/black@22.12.0 with: version: 22.12.0 diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index 9a2c615a4..7d9cb3cba 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -25,9 +25,10 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.11 + cache: pip - name: Install Dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index a198efc21..d1e3f9fc9 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -14,9 +14,10 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python 3.11 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.11 + cache: pip - name: Install Dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 85f275020..915e3154c 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -14,9 +14,10 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python 3.11 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.11 + cache: pip - name: Install Dependencies run: | python -m pip install --upgrade pip From 74fdd9a85a8741ea5ac71432ebaffd6b800f8d23 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 13 Mar 2024 10:31:09 +0100 Subject: [PATCH 352/458] CI: simplify pytest setup --- .github/workflows/django-tests.yml | 52 +++++++++--------------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index 7d9cb3cba..da237592f 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -7,12 +7,20 @@ on: jobs: build: - - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest + env: # overrides for .env.example + 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: "" services: postgres: image: postgres:13 - env: + env: # does not inherit from jobs.build.env POSTGRES_USER: postgres POSTGRES_PASSWORD: hunter2 options: >- @@ -33,39 +41,9 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt + - name: Set up .env + run: cp .env.example .env - 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: "" + run: python ./manage.py makemigrations --check - 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 + run: pytest -n 3 From 383e6533e11da5c88ceebb9cfad89d6980f7d430 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 13 Mar 2024 11:56:16 +0100 Subject: [PATCH 353/458] CI: use pytest-github-actions-annotate-failures --- .github/workflows/django-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml index da237592f..ce9b2b7b1 100644 --- a/.github/workflows/django-tests.yml +++ b/.github/workflows/django-tests.yml @@ -41,6 +41,7 @@ jobs: 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 From 4e20e430379a820c1e4f88590bf6afe08cba8249 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 13 Mar 2024 12:48:02 +0100 Subject: [PATCH 354/458] CI: merge all Python actions into one file --- .github/workflows/black.yml | 17 ----- .github/workflows/django-tests.yml | 50 --------------- .github/workflows/mypy.yml | 51 --------------- .github/workflows/pylint.yml | 28 --------- .github/workflows/python.yml | 99 ++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+), 146 deletions(-) delete mode 100644 .github/workflows/black.yml delete mode 100644 .github/workflows/django-tests.yml delete mode 100644 .github/workflows/mypy.yml delete mode 100644 .github/workflows/pylint.yml create mode 100644 .github/workflows/python.yml diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml deleted file mode 100644 index 0633dedb7..000000000 --- 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@v4 - - uses: actions/setup-python@v5 - - uses: psf/black@22.12.0 - with: - version: 22.12.0 diff --git a/.github/workflows/django-tests.yml b/.github/workflows/django-tests.yml deleted file mode 100644 index ce9b2b7b1..000000000 --- a/.github/workflows/django-tests.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Run Python Tests -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - runs-on: ubuntu-latest - env: # overrides for .env.example - 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: "" - 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 - 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 diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml deleted file mode 100644 index d1e3f9fc9..000000000 --- a/.github/workflows/mypy.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Mypy - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - 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: 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/pylint.yml b/.github/workflows/pylint.yml deleted file mode 100644 index 915e3154c..000000000 --- a/.github/workflows/pylint.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Pylint - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - 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: 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 000000000..dcbe05aee --- /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 From 1b9e0546e64dd0306c3389034fa0df8127d22e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 17 Mar 2024 19:46:30 -0300 Subject: [PATCH 355/458] Bracket-wrap calls to `patch()` for better readability --- .../tests/activitypub/test_base_activity.py | 8 +- bookwyrm/tests/activitypub/test_note.py | 8 +- .../activitystreams/test_abstractstream.py | 16 ++- .../tests/activitystreams/test_booksstream.py | 8 +- .../tests/activitystreams/test_homestream.py | 8 +- .../tests/activitystreams/test_localstream.py | 8 +- .../tests/activitystreams/test_signals.py | 8 +- bookwyrm/tests/activitystreams/test_tasks.py | 8 +- .../connectors/test_inventaire_connector.py | 13 ++- .../tests/importers/test_calibre_import.py | 8 +- .../tests/importers/test_goodreads_import.py | 8 +- bookwyrm/tests/importers/test_importer.py | 8 +- .../importers/test_librarything_import.py | 8 +- .../importers/test_openlibrary_import.py | 8 +- .../tests/importers/test_storygraph_import.py | 8 +- bookwyrm/tests/lists_stream/test_signals.py | 8 +- bookwyrm/tests/lists_stream/test_stream.py | 8 +- bookwyrm/tests/lists_stream/test_tasks.py | 15 ++- .../management/test_populate_lists_streams.py | 8 +- .../tests/management/test_populate_streams.py | 17 +-- .../tests/models/test_activitypub_mixin.py | 8 +- bookwyrm/tests/models/test_automod.py | 8 +- bookwyrm/tests/models/test_base_model.py | 8 +- .../tests/models/test_bookwyrm_export_job.py | 18 ++- .../tests/models/test_bookwyrm_import_job.py | 110 +++++++++++------- bookwyrm/tests/models/test_group.py | 22 ++-- bookwyrm/tests/models/test_import_model.py | 8 +- bookwyrm/tests/models/test_list.py | 8 +- bookwyrm/tests/models/test_notification.py | 24 ++-- .../tests/models/test_readthrough_model.py | 8 +- .../tests/models/test_relationship_models.py | 8 +- bookwyrm/tests/models/test_shelf_model.py | 8 +- bookwyrm/tests/models/test_site.py | 8 +- bookwyrm/tests/models/test_status_model.py | 8 +- bookwyrm/tests/models/test_user_model.py | 37 +++--- .../templatetags/test_book_display_tags.py | 8 +- .../tests/templatetags/test_feed_page_tags.py | 8 +- .../tests/templatetags/test_interaction.py | 8 +- .../test_notification_page_tags.py | 8 +- .../tests/templatetags/test_rating_tags.py | 8 +- .../tests/templatetags/test_shelf_tags.py | 8 +- .../tests/templatetags/test_status_display.py | 8 +- bookwyrm/tests/templatetags/test_utilities.py | 8 +- bookwyrm/tests/test_context_processors.py | 8 +- bookwyrm/tests/test_emailing.py | 8 +- bookwyrm/tests/test_preview_images.py | 24 ++-- bookwyrm/tests/test_signing.py | 8 +- bookwyrm/tests/test_suggested_users.py | 8 +- .../tests/views/admin/test_announcements.py | 8 +- bookwyrm/tests/views/admin/test_automod.py | 8 +- bookwyrm/tests/views/admin/test_celery.py | 8 +- bookwyrm/tests/views/admin/test_dashboard.py | 8 +- .../tests/views/admin/test_email_blocks.py | 8 +- .../tests/views/admin/test_email_config.py | 8 +- bookwyrm/tests/views/admin/test_federation.py | 8 +- bookwyrm/tests/views/admin/test_imports.py | 8 +- .../tests/views/admin/test_ip_blocklist.py | 8 +- .../tests/views/admin/test_link_domains.py | 8 +- bookwyrm/tests/views/admin/test_reports.py | 8 +- bookwyrm/tests/views/admin/test_site.py | 8 +- bookwyrm/tests/views/admin/test_themes.py | 8 +- bookwyrm/tests/views/admin/test_user_admin.py | 8 +- bookwyrm/tests/views/books/test_book.py | 8 +- bookwyrm/tests/views/books/test_edit_book.py | 8 +- bookwyrm/tests/views/books/test_editions.py | 8 +- bookwyrm/tests/views/books/test_links.py | 5 +- bookwyrm/tests/views/imports/test_import.py | 8 +- .../tests/views/imports/test_import_review.py | 8 +- .../views/imports/test_import_troubleshoot.py | 8 +- .../tests/views/imports/test_user_import.py | 8 +- bookwyrm/tests/views/inbox/test_inbox.py | 8 +- bookwyrm/tests/views/inbox/test_inbox_add.py | 8 +- .../tests/views/inbox/test_inbox_announce.py | 8 +- .../tests/views/inbox/test_inbox_block.py | 17 ++- .../tests/views/inbox/test_inbox_create.py | 16 ++- .../tests/views/inbox/test_inbox_delete.py | 8 +- .../tests/views/inbox/test_inbox_follow.py | 8 +- bookwyrm/tests/views/inbox/test_inbox_like.py | 8 +- .../tests/views/inbox/test_inbox_remove.py | 15 ++- .../tests/views/inbox/test_inbox_update.py | 15 ++- bookwyrm/tests/views/landing/test_invite.py | 8 +- bookwyrm/tests/views/landing/test_landing.py | 8 +- bookwyrm/tests/views/landing/test_login.py | 8 +- bookwyrm/tests/views/landing/test_password.py | 8 +- bookwyrm/tests/views/landing/test_register.py | 8 +- bookwyrm/tests/views/lists/test_curate.py | 15 ++- bookwyrm/tests/views/lists/test_embed.py | 15 ++- bookwyrm/tests/views/lists/test_list.py | 33 ++++-- bookwyrm/tests/views/lists/test_list_item.py | 15 ++- bookwyrm/tests/views/lists/test_lists.py | 46 +++++--- .../tests/views/preferences/test_block.py | 18 +-- .../views/preferences/test_change_password.py | 8 +- .../views/preferences/test_delete_user.py | 15 ++- .../tests/views/preferences/test_edit_user.py | 15 ++- .../tests/views/preferences/test_export.py | 5 +- .../views/preferences/test_export_user.py | 5 +- .../views/preferences/test_two_factor_auth.py | 13 ++- bookwyrm/tests/views/shelf/test_shelf.py | 8 +- .../tests/views/shelf/test_shelf_actions.py | 8 +- bookwyrm/tests/views/test_annual_summary.py | 8 +- bookwyrm/tests/views/test_author.py | 8 +- bookwyrm/tests/views/test_directory.py | 8 +- bookwyrm/tests/views/test_discover.py | 8 +- bookwyrm/tests/views/test_feed.py | 8 +- bookwyrm/tests/views/test_follow.py | 24 ++-- bookwyrm/tests/views/test_get_started.py | 8 +- bookwyrm/tests/views/test_goal.py | 8 +- bookwyrm/tests/views/test_group.py | 8 +- bookwyrm/tests/views/test_hashtag.py | 36 +++--- bookwyrm/tests/views/test_helpers.py | 8 +- bookwyrm/tests/views/test_interaction.py | 8 +- bookwyrm/tests/views/test_isbn.py | 8 +- bookwyrm/tests/views/test_notifications.py | 15 ++- bookwyrm/tests/views/test_outbox.py | 8 +- bookwyrm/tests/views/test_reading.py | 8 +- bookwyrm/tests/views/test_readthrough.py | 8 +- bookwyrm/tests/views/test_report.py | 15 ++- bookwyrm/tests/views/test_rss_feed.py | 8 +- bookwyrm/tests/views/test_search.py | 15 ++- bookwyrm/tests/views/test_status.py | 16 ++- bookwyrm/tests/views/test_updates.py | 34 +++--- bookwyrm/tests/views/test_user.py | 16 +-- bookwyrm/tests/views/test_wellknown.py | 8 +- 123 files changed, 883 insertions(+), 559 deletions(-) diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index a0d10019f..8f2cd7fb2 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -31,9 +31,11 @@ class BaseActivity(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we're probably going to re-use this so why copy/paste""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/activitypub/test_note.py b/bookwyrm/tests/activitypub/test_note.py index fd5467f01..65502c70a 100644 --- a/bookwyrm/tests/activitypub/test_note.py +++ b/bookwyrm/tests/activitypub/test_note.py @@ -13,9 +13,11 @@ class Note(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """create a shared user""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/activitystreams/test_abstractstream.py b/bookwyrm/tests/activitystreams/test_abstractstream.py index 83985efdc..acdd5529c 100644 --- a/bookwyrm/tests/activitystreams/test_abstractstream.py +++ b/bookwyrm/tests/activitystreams/test_abstractstream.py @@ -18,9 +18,11 @@ class Activitystreams(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) @@ -105,9 +107,11 @@ class Activitystreams(TestCase): privacy="direct", book=self.book, ) - with patch("bookwyrm.activitystreams.r.set"), patch( - "bookwyrm.activitystreams.r.delete" - ), patch("bookwyrm.activitystreams.ActivityStream.get_store") as redis_mock: + with ( + patch("bookwyrm.activitystreams.r.set"), + patch("bookwyrm.activitystreams.r.delete"), + patch("bookwyrm.activitystreams.ActivityStream.get_store") as redis_mock, + ): redis_mock.return_value = [status.id, status2.id] result = self.test_stream.get_activity_stream(self.local_user) self.assertEqual(result.count(), 2) diff --git a/bookwyrm/tests/activitystreams/test_booksstream.py b/bookwyrm/tests/activitystreams/test_booksstream.py index 71d7ce531..eb61cc203 100644 --- a/bookwyrm/tests/activitystreams/test_booksstream.py +++ b/bookwyrm/tests/activitystreams/test_booksstream.py @@ -17,9 +17,11 @@ class Activitystreams(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/activitystreams/test_homestream.py b/bookwyrm/tests/activitystreams/test_homestream.py index 3312f20ee..0baf1d1b8 100644 --- a/bookwyrm/tests/activitystreams/test_homestream.py +++ b/bookwyrm/tests/activitystreams/test_homestream.py @@ -15,9 +15,11 @@ class Activitystreams(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/activitystreams/test_localstream.py b/bookwyrm/tests/activitystreams/test_localstream.py index f4ca13395..92ec2b069 100644 --- a/bookwyrm/tests/activitystreams/test_localstream.py +++ b/bookwyrm/tests/activitystreams/test_localstream.py @@ -15,9 +15,11 @@ class Activitystreams(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/activitystreams/test_signals.py b/bookwyrm/tests/activitystreams/test_signals.py index db16a0081..b9fb75ade 100644 --- a/bookwyrm/tests/activitystreams/test_signals.py +++ b/bookwyrm/tests/activitystreams/test_signals.py @@ -17,9 +17,11 @@ class ActivitystreamsSignals(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/activitystreams/test_tasks.py b/bookwyrm/tests/activitystreams/test_tasks.py index 39a240e92..cf2ee40e6 100644 --- a/bookwyrm/tests/activitystreams/test_tasks.py +++ b/bookwyrm/tests/activitystreams/test_tasks.py @@ -10,9 +10,11 @@ class Activitystreams(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/connectors/test_inventaire_connector.py b/bookwyrm/tests/connectors/test_inventaire_connector.py index c4ea1a595..874d64862 100644 --- a/bookwyrm/tests/connectors/test_inventaire_connector.py +++ b/bookwyrm/tests/connectors/test_inventaire_connector.py @@ -212,11 +212,14 @@ class Inventaire(TestCase): json={"entities": {}}, ) data = {"uri": "blah"} - with patch( - "bookwyrm.connectors.inventaire.Connector.load_edition_data" - ) as loader_mock, patch( - "bookwyrm.connectors.inventaire.Connector.get_book_data" - ) as getter_mock: + with ( + patch( + "bookwyrm.connectors.inventaire.Connector.load_edition_data" + ) as loader_mock, + patch( + "bookwyrm.connectors.inventaire.Connector.get_book_data" + ) as getter_mock, + ): loader_mock.return_value = {"uris": ["hello"]} self.connector.get_edition_from_work_data(data) self.assertTrue(getter_mock.called) diff --git a/bookwyrm/tests/importers/test_calibre_import.py b/bookwyrm/tests/importers/test_calibre_import.py index d549a75ed..6bfa754af 100644 --- a/bookwyrm/tests/importers/test_calibre_import.py +++ b/bookwyrm/tests/importers/test_calibre_import.py @@ -25,9 +25,11 @@ class CalibreImport(TestCase): @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"): + 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", "password", local=True ) diff --git a/bookwyrm/tests/importers/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py index 0b5fd5e2d..deb41a1df 100644 --- a/bookwyrm/tests/importers/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -32,9 +32,11 @@ class GoodreadsImport(TestCase): @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"): + 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", "password", local=True ) diff --git a/bookwyrm/tests/importers/test_importer.py b/bookwyrm/tests/importers/test_importer.py index eb3041dc6..494d28ad0 100644 --- a/bookwyrm/tests/importers/test_importer.py +++ b/bookwyrm/tests/importers/test_importer.py @@ -35,9 +35,11 @@ class GenericImporter(TestCase): @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"): + 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", "password", local=True ) diff --git a/bookwyrm/tests/importers/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py index c2fe7a9a8..ba86721de 100644 --- a/bookwyrm/tests/importers/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -34,9 +34,11 @@ class LibrarythingImport(TestCase): @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"): + 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( "mmai", "mmai@mmai.mmai", "password", local=True ) diff --git a/bookwyrm/tests/importers/test_openlibrary_import.py b/bookwyrm/tests/importers/test_openlibrary_import.py index 2712930d9..e0e6135c9 100644 --- a/bookwyrm/tests/importers/test_openlibrary_import.py +++ b/bookwyrm/tests/importers/test_openlibrary_import.py @@ -32,9 +32,11 @@ class OpenLibraryImport(TestCase): @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"): + 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", "password", local=True ) diff --git a/bookwyrm/tests/importers/test_storygraph_import.py b/bookwyrm/tests/importers/test_storygraph_import.py index edc484629..180cd8ad4 100644 --- a/bookwyrm/tests/importers/test_storygraph_import.py +++ b/bookwyrm/tests/importers/test_storygraph_import.py @@ -32,9 +32,11 @@ class StorygraphImport(TestCase): @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"): + 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", "password", local=True ) diff --git a/bookwyrm/tests/lists_stream/test_signals.py b/bookwyrm/tests/lists_stream/test_signals.py index 51f0709b0..923d19a2f 100644 --- a/bookwyrm/tests/lists_stream/test_signals.py +++ b/bookwyrm/tests/lists_stream/test_signals.py @@ -11,9 +11,11 @@ class ListsStreamSignals(TestCase): @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"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/lists_stream/test_stream.py b/bookwyrm/tests/lists_stream/test_stream.py index 6dd6a1c8e..fcac04d19 100644 --- a/bookwyrm/tests/lists_stream/test_stream.py +++ b/bookwyrm/tests/lists_stream/test_stream.py @@ -18,9 +18,11 @@ class ListsStream(TestCase): @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"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/lists_stream/test_tasks.py b/bookwyrm/tests/lists_stream/test_tasks.py index 18ddecf18..fe3cb319d 100644 --- a/bookwyrm/tests/lists_stream/test_tasks.py +++ b/bookwyrm/tests/lists_stream/test_tasks.py @@ -13,9 +13,11 @@ class Activitystreams(TestCase): @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"): + 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", "password", local=True, localname="mouse" ) @@ -36,9 +38,10 @@ class Activitystreams(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): self.list = models.List.objects.create( user=self.local_user, name="hi", privacy="public" ) diff --git a/bookwyrm/tests/management/test_populate_lists_streams.py b/bookwyrm/tests/management/test_populate_lists_streams.py index 5990da4e3..f098c2b11 100644 --- a/bookwyrm/tests/management/test_populate_lists_streams.py +++ b/bookwyrm/tests/management/test_populate_lists_streams.py @@ -15,9 +15,11 @@ class Activitystreams(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/management/test_populate_streams.py b/bookwyrm/tests/management/test_populate_streams.py index 4d6bf688f..034222b29 100644 --- a/bookwyrm/tests/management/test_populate_streams.py +++ b/bookwyrm/tests/management/test_populate_streams.py @@ -13,9 +13,11 @@ class Activitystreams(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) @@ -53,11 +55,10 @@ class Activitystreams(TestCase): user=self.local_user, content="hi", book=self.book ) - with patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ) as redis_mock, patch( - "bookwyrm.lists_stream.populate_lists_task.delay" - ) as list_mock: + with ( + patch("bookwyrm.activitystreams.populate_stream_task.delay") as redis_mock, + patch("bookwyrm.lists_stream.populate_lists_task.delay") as list_mock, + ): populate_streams() self.assertEqual(redis_mock.call_count, 6) # 2 users x 3 streams self.assertEqual(list_mock.call_count, 2) # 2 users diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index 2f6fad76d..b59088f91 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -29,9 +29,11 @@ class ActivitypubMixins(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.com", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_automod.py b/bookwyrm/tests/models/test_automod.py index 1ad139886..ed3133cdc 100644 --- a/bookwyrm/tests/models/test_automod.py +++ b/bookwyrm/tests/models/test_automod.py @@ -17,9 +17,11 @@ class AutomodModel(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/models/test_base_model.py b/bookwyrm/tests/models/test_base_model.py index f1f465b73..d0e441cef 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -15,9 +15,11 @@ class BaseModel(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.com", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index b5f2520a9..be6bda3cc 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -16,16 +16,14 @@ class BookwyrmExport(TestCase): 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" + 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( diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index adc04706c..50c136f21 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -18,10 +18,11 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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( @@ -78,9 +79,11 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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 ( + 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: @@ -103,9 +106,11 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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"): + 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 @@ -145,8 +150,9 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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", @@ -172,8 +178,9 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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", @@ -199,9 +206,11 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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"): + 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") ) @@ -222,10 +231,11 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods ).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" + 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") @@ -312,9 +322,10 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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): + 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 @@ -349,9 +360,10 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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): + 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 @@ -378,9 +390,10 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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): + 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 @@ -411,9 +424,10 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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): + 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 @@ -432,8 +446,9 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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 @@ -452,8 +467,9 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 1, ) - with patch("bookwyrm.lists_stream.remove_list_task.delay"), patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + 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, @@ -479,8 +495,9 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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, @@ -503,16 +520,18 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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" + 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) @@ -530,8 +549,9 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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" + 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) diff --git a/bookwyrm/tests/models/test_group.py b/bookwyrm/tests/models/test_group.py index 6f5388b19..3ea424333 100644 --- a/bookwyrm/tests/models/test_group.py +++ b/bookwyrm/tests/models/test_group.py @@ -13,9 +13,11 @@ class Group(TestCase): def setUpTestData(self): # pylint: disable=bad-classmethod-argument """Set up for tests""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.owner_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) @@ -81,9 +83,10 @@ class Group(TestCase): """follower-only group booklists should not be excluded from group booklist listing for group members who do not follower list owner""" - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): followers_list = models.List.objects.create( name="Followers List", curation="group", @@ -104,9 +107,10 @@ class Group(TestCase): """private group booklists should not be excluded from group booklist listing for group members""" - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): private_list = models.List.objects.create( name="Private List", privacy="direct", diff --git a/bookwyrm/tests/models/test_import_model.py b/bookwyrm/tests/models/test_import_model.py index 7ca36d223..e5be01464 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -19,9 +19,11 @@ class ImportJob(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True ) diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index 83d7ed6a5..b1b756cab 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -14,9 +14,11 @@ class List(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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" ) diff --git a/bookwyrm/tests/models/test_notification.py b/bookwyrm/tests/models/test_notification.py index 93422640b..a9ed8b661 100644 --- a/bookwyrm/tests/models/test_notification.py +++ b/bookwyrm/tests/models/test_notification.py @@ -10,9 +10,11 @@ class Notification(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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" ) @@ -201,9 +203,11 @@ class NotifyInviteRequest(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -264,9 +268,11 @@ class NotifyInviteRequest(TestCase): def test_notify_multiple_admins(self): """all admins are notified""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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( "admin@local.com", "admin@example.com", diff --git a/bookwyrm/tests/models/test_readthrough_model.py b/bookwyrm/tests/models/test_readthrough_model.py index d34a06aaf..0da87f67b 100644 --- a/bookwyrm/tests/models/test_readthrough_model.py +++ b/bookwyrm/tests/models/test_readthrough_model.py @@ -14,9 +14,11 @@ class ReadThrough(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_relationship_models.py b/bookwyrm/tests/models/test_relationship_models.py index 8f849bc3b..dbb0ac8bb 100644 --- a/bookwyrm/tests/models/test_relationship_models.py +++ b/bookwyrm/tests/models/test_relationship_models.py @@ -27,9 +27,11 @@ class Relationship(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.com", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_shelf_model.py b/bookwyrm/tests/models/test_shelf_model.py index 88b1fad06..2d45dadbc 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -18,9 +18,11 @@ class Shelf(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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" ) diff --git a/bookwyrm/tests/models/test_site.py b/bookwyrm/tests/models/test_site.py index f4accc04b..8cf15ad6f 100644 --- a/bookwyrm/tests/models/test_site.py +++ b/bookwyrm/tests/models/test_site.py @@ -15,9 +15,11 @@ class SiteModels(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 9899f6bf3..32ccc2c57 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -27,9 +27,11 @@ class Status(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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" ) diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 47a662e49..a47896269 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -20,9 +20,11 @@ class User(TestCase): @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"): + 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.user = models.User.objects.create_user( f"mouse@{DOMAIN}", "mouse@mouse.mouse", @@ -122,9 +124,11 @@ class User(TestCase): site.default_user_auth_group = Group.objects.get(name="editor") site.save() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): user = models.User.objects.create_user( f"test2{DOMAIN}", "test2@bookwyrm.test", @@ -135,9 +139,11 @@ class User(TestCase): site.default_user_auth_group = None site.save() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): user = models.User.objects.create_user( f"test1{DOMAIN}", "test1@bookwyrm.test", @@ -228,11 +234,14 @@ class User(TestCase): self.assertEqual(self.user.name, "hi") self.assertEqual(self.user.summary, "a summary") self.assertEqual(self.user.email, "mouse@mouse.mouse") - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as broadcast_mock, patch( - "bookwyrm.models.user.User.erase_user_statuses" - ) as erase_statuses_mock: + with ( + patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as broadcast_mock, + patch( + "bookwyrm.models.user.User.erase_user_statuses" + ) as erase_statuses_mock, + ): self.user.delete() self.assertEqual(erase_statuses_mock.call_count, 1) diff --git a/bookwyrm/tests/templatetags/test_book_display_tags.py b/bookwyrm/tests/templatetags/test_book_display_tags.py index dcff01a80..77d6fee54 100644 --- a/bookwyrm/tests/templatetags/test_book_display_tags.py +++ b/bookwyrm/tests/templatetags/test_book_display_tags.py @@ -16,9 +16,11 @@ class BookDisplayTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_feed_page_tags.py b/bookwyrm/tests/templatetags/test_feed_page_tags.py index d0a895f36..891bfc32c 100644 --- a/bookwyrm/tests/templatetags/test_feed_page_tags.py +++ b/bookwyrm/tests/templatetags/test_feed_page_tags.py @@ -15,9 +15,11 @@ class FeedPageTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_interaction.py b/bookwyrm/tests/templatetags/test_interaction.py index a9d1267c0..bd66575ff 100644 --- a/bookwyrm/tests/templatetags/test_interaction.py +++ b/bookwyrm/tests/templatetags/test_interaction.py @@ -15,9 +15,11 @@ class InteractionTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_notification_page_tags.py b/bookwyrm/tests/templatetags/test_notification_page_tags.py index 94f839ec5..df2805828 100644 --- a/bookwyrm/tests/templatetags/test_notification_page_tags.py +++ b/bookwyrm/tests/templatetags/test_notification_page_tags.py @@ -15,9 +15,11 @@ class NotificationPageTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_rating_tags.py b/bookwyrm/tests/templatetags/test_rating_tags.py index 5225d57a6..f50236262 100644 --- a/bookwyrm/tests/templatetags/test_rating_tags.py +++ b/bookwyrm/tests/templatetags/test_rating_tags.py @@ -15,9 +15,11 @@ class RatingTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_shelf_tags.py b/bookwyrm/tests/templatetags/test_shelf_tags.py index 7c456c815..47e86d9ef 100644 --- a/bookwyrm/tests/templatetags/test_shelf_tags.py +++ b/bookwyrm/tests/templatetags/test_shelf_tags.py @@ -18,9 +18,11 @@ class ShelfTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_status_display.py b/bookwyrm/tests/templatetags/test_status_display.py index a9bab0b68..af125fd06 100644 --- a/bookwyrm/tests/templatetags/test_status_display.py +++ b/bookwyrm/tests/templatetags/test_status_display.py @@ -17,9 +17,11 @@ class StatusDisplayTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/templatetags/test_utilities.py b/bookwyrm/tests/templatetags/test_utilities.py index 1bf98fda8..6fade22a7 100644 --- a/bookwyrm/tests/templatetags/test_utilities.py +++ b/bookwyrm/tests/templatetags/test_utilities.py @@ -17,9 +17,11 @@ class UtilitiesTags(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/test_context_processors.py b/bookwyrm/tests/test_context_processors.py index 614db681c..e5290f312 100644 --- a/bookwyrm/tests/test_context_processors.py +++ b/bookwyrm/tests/test_context_processors.py @@ -14,9 +14,11 @@ class ContextProcessor(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/test_emailing.py b/bookwyrm/tests/test_emailing.py index 119941e85..8a5b543d5 100644 --- a/bookwyrm/tests/test_emailing.py +++ b/bookwyrm/tests/test_emailing.py @@ -14,9 +14,11 @@ class Emailing(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/test_preview_images.py b/bookwyrm/tests/test_preview_images.py index d1998bf3c..4f711b38b 100644 --- a/bookwyrm/tests/test_preview_images.py +++ b/bookwyrm/tests/test_preview_images.py @@ -31,9 +31,11 @@ class PreviewImages(TestCase): avatar_file = pathlib.Path(__file__).parent.joinpath( "../static/images/no_cover.jpg" ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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( "possum@local.com", "possum@possum.possum", @@ -47,9 +49,11 @@ class PreviewImages(TestCase): ), ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", @@ -60,9 +64,11 @@ class PreviewImages(TestCase): outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.remote_user_with_preview = models.User.objects.create_user( "badger@your.domain.here", "badger@badger.com", diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index b539f089b..80a35b94d 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -38,9 +38,11 @@ class Signature(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.mouse = models.User.objects.create_user( f"mouse@{DOMAIN}", "mouse@example.com", diff --git a/bookwyrm/tests/test_suggested_users.py b/bookwyrm/tests/test_suggested_users.py index 77b82e7ee..0a6dd8abe 100644 --- a/bookwyrm/tests/test_suggested_users.py +++ b/bookwyrm/tests/test_suggested_users.py @@ -22,9 +22,11 @@ class SuggestedUsers(TestCase): def setUp(self): """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/views/admin/test_announcements.py b/bookwyrm/tests/views/admin/test_announcements.py index 30bc94a1f..958d78fc4 100644 --- a/bookwyrm/tests/views/admin/test_announcements.py +++ b/bookwyrm/tests/views/admin/test_announcements.py @@ -14,9 +14,11 @@ class AnnouncementViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_automod.py b/bookwyrm/tests/views/admin/test_automod.py index 1835a24ee..332410eba 100644 --- a/bookwyrm/tests/views/admin/test_automod.py +++ b/bookwyrm/tests/views/admin/test_automod.py @@ -18,9 +18,11 @@ class AutomodViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_celery.py b/bookwyrm/tests/views/admin/test_celery.py index d215a9657..577d312b1 100644 --- a/bookwyrm/tests/views/admin/test_celery.py +++ b/bookwyrm/tests/views/admin/test_celery.py @@ -17,9 +17,11 @@ class CeleryStatusViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_dashboard.py b/bookwyrm/tests/views/admin/test_dashboard.py index 8eeb754a8..a68b046e3 100644 --- a/bookwyrm/tests/views/admin/test_dashboard.py +++ b/bookwyrm/tests/views/admin/test_dashboard.py @@ -17,9 +17,11 @@ class DashboardViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_email_blocks.py b/bookwyrm/tests/views/admin/test_email_blocks.py index 75c0be929..b37166d3c 100644 --- a/bookwyrm/tests/views/admin/test_email_blocks.py +++ b/bookwyrm/tests/views/admin/test_email_blocks.py @@ -17,9 +17,11 @@ class EmailBlocklistViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_email_config.py b/bookwyrm/tests/views/admin/test_email_config.py index 63d85cbef..374c2402e 100644 --- a/bookwyrm/tests/views/admin/test_email_config.py +++ b/bookwyrm/tests/views/admin/test_email_config.py @@ -17,9 +17,11 @@ class EmailConfigViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_federation.py b/bookwyrm/tests/views/admin/test_federation.py index 1a5067299..8244e8335 100644 --- a/bookwyrm/tests/views/admin/test_federation.py +++ b/bookwyrm/tests/views/admin/test_federation.py @@ -20,9 +20,11 @@ class FederationViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_imports.py b/bookwyrm/tests/views/admin/test_imports.py index 5a5599519..acb769546 100644 --- a/bookwyrm/tests/views/admin/test_imports.py +++ b/bookwyrm/tests/views/admin/test_imports.py @@ -17,9 +17,11 @@ class ImportsAdminViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_ip_blocklist.py b/bookwyrm/tests/views/admin/test_ip_blocklist.py index 06c110a06..b34828622 100644 --- a/bookwyrm/tests/views/admin/test_ip_blocklist.py +++ b/bookwyrm/tests/views/admin/test_ip_blocklist.py @@ -17,9 +17,11 @@ class IPBlocklistViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_link_domains.py b/bookwyrm/tests/views/admin/test_link_domains.py index 14eed419b..fabb7511a 100644 --- a/bookwyrm/tests/views/admin/test_link_domains.py +++ b/bookwyrm/tests/views/admin/test_link_domains.py @@ -17,9 +17,11 @@ class LinkDomainViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_reports.py b/bookwyrm/tests/views/admin/test_reports.py index 4334eeed9..7ce665451 100644 --- a/bookwyrm/tests/views/admin/test_reports.py +++ b/bookwyrm/tests/views/admin/test_reports.py @@ -18,9 +18,11 @@ class ReportViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_site.py b/bookwyrm/tests/views/admin/test_site.py index b7c687e09..ec5b07e3a 100644 --- a/bookwyrm/tests/views/admin/test_site.py +++ b/bookwyrm/tests/views/admin/test_site.py @@ -17,9 +17,11 @@ class SiteSettingsViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_themes.py b/bookwyrm/tests/views/admin/test_themes.py index 66384f5fc..b931ea561 100644 --- a/bookwyrm/tests/views/admin/test_themes.py +++ b/bookwyrm/tests/views/admin/test_themes.py @@ -18,9 +18,11 @@ class AdminThemesViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/admin/test_user_admin.py b/bookwyrm/tests/views/admin/test_user_admin.py index 99c630526..5247ff70f 100644 --- a/bookwyrm/tests/views/admin/test_user_admin.py +++ b/bookwyrm/tests/views/admin/test_user_admin.py @@ -18,9 +18,11 @@ class UserAdminViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/books/test_book.py b/bookwyrm/tests/views/books/test_book.py index 4d41eaa5d..68a114fb9 100644 --- a/bookwyrm/tests/views/books/test_book.py +++ b/bookwyrm/tests/views/books/test_book.py @@ -26,9 +26,11 @@ class BookViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index 169112bab..0bd962de5 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -22,9 +22,11 @@ class EditBookViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/books/test_editions.py b/bookwyrm/tests/views/books/test_editions.py index e89fd521b..b829d471b 100644 --- a/bookwyrm/tests/views/books/test_editions.py +++ b/bookwyrm/tests/views/books/test_editions.py @@ -16,9 +16,11 @@ class BookViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/books/test_links.py b/bookwyrm/tests/views/books/test_links.py index 817463656..d1040a591 100644 --- a/bookwyrm/tests/views/books/test_links.py +++ b/bookwyrm/tests/views/books/test_links.py @@ -18,8 +18,9 @@ class LinkViews(TestCase): @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" + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), ): self.local_user = models.User.objects.create_user( "mouse@local.com", diff --git a/bookwyrm/tests/views/imports/test_import.py b/bookwyrm/tests/views/imports/test_import.py index d0612ee68..c3b2795b1 100644 --- a/bookwyrm/tests/views/imports/test_import.py +++ b/bookwyrm/tests/views/imports/test_import.py @@ -19,9 +19,11 @@ class ImportViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/imports/test_import_review.py b/bookwyrm/tests/views/imports/test_import_review.py index 27bb3f9d1..5da02a56a 100644 --- a/bookwyrm/tests/views/imports/test_import_review.py +++ b/bookwyrm/tests/views/imports/test_import_review.py @@ -14,9 +14,11 @@ class ImportManualReviewViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/imports/test_import_troubleshoot.py b/bookwyrm/tests/views/imports/test_import_troubleshoot.py index 0e12c406a..9ddc99785 100644 --- a/bookwyrm/tests/views/imports/test_import_troubleshoot.py +++ b/bookwyrm/tests/views/imports/test_import_troubleshoot.py @@ -15,9 +15,11 @@ class ImportTroubleshootViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/imports/test_user_import.py b/bookwyrm/tests/views/imports/test_user_import.py index db5837101..4a676a57f 100644 --- a/bookwyrm/tests/views/imports/test_user_import.py +++ b/bookwyrm/tests/views/imports/test_user_import.py @@ -18,9 +18,11 @@ class ImportUserViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/inbox/test_inbox.py b/bookwyrm/tests/views/inbox/test_inbox.py index 1c05806a5..af85e84d4 100644 --- a/bookwyrm/tests/views/inbox/test_inbox.py +++ b/bookwyrm/tests/views/inbox/test_inbox.py @@ -31,9 +31,11 @@ class Inbox(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_add.py b/bookwyrm/tests/views/inbox/test_inbox_add.py index 5fbeaa33a..2bd5faf6a 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_add.py +++ b/bookwyrm/tests/views/inbox/test_inbox_add.py @@ -14,9 +14,11 @@ class InboxAdd(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py index e6fdf9375..53555f213 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_announce.py +++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py @@ -14,9 +14,11 @@ class InboxActivities(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_block.py b/bookwyrm/tests/views/inbox/test_inbox_block.py index 9fef621ea..9cdf7eba3 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_block.py +++ b/bookwyrm/tests/views/inbox/test_inbox_block.py @@ -13,9 +13,11 @@ class InboxBlock(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", @@ -56,9 +58,12 @@ class InboxBlock(TestCase): "object": "https://example.com/user/mouse", } - with patch( - "bookwyrm.activitystreams.remove_user_statuses_task.delay" - ) as redis_mock, patch("bookwyrm.lists_stream.remove_user_lists_task.delay"): + with ( + patch( + "bookwyrm.activitystreams.remove_user_statuses_task.delay" + ) as redis_mock, + patch("bookwyrm.lists_stream.remove_user_lists_task.delay"), + ): views.inbox.activity_task(activity) self.assertTrue(redis_mock.called) views.inbox.activity_task(activity) diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index c2045b092..7f5be5b65 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -15,9 +15,11 @@ class TransactionInboxCreate(TransactionTestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", @@ -74,9 +76,11 @@ class InboxCreate(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_delete.py b/bookwyrm/tests/views/inbox/test_inbox_delete.py index 8023308be..9c2b589e2 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_delete.py +++ b/bookwyrm/tests/views/inbox/test_inbox_delete.py @@ -14,9 +14,11 @@ class InboxActivities(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_follow.py b/bookwyrm/tests/views/inbox/test_inbox_follow.py index 180a57176..8ccffe1db 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_follow.py +++ b/bookwyrm/tests/views/inbox/test_inbox_follow.py @@ -14,9 +14,11 @@ class InboxRelationships(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_like.py b/bookwyrm/tests/views/inbox/test_inbox_like.py index 34c8c830b..4a397dcf8 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_like.py +++ b/bookwyrm/tests/views/inbox/test_inbox_like.py @@ -13,9 +13,11 @@ class InboxActivities(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_remove.py b/bookwyrm/tests/views/inbox/test_inbox_remove.py index d80a4fdd7..f0be2b17a 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_remove.py +++ b/bookwyrm/tests/views/inbox/test_inbox_remove.py @@ -13,9 +13,11 @@ class InboxRemove(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", @@ -76,9 +78,10 @@ class InboxRemove(TestCase): def test_handle_remove_book_from_list(self): """listing a book""" - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): booklist = models.List.objects.create( name="test list", user=self.local_user, diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index b9f924bad..fb2c85a88 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -15,9 +15,11 @@ class InboxUpdate(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@example.com", "mouse@mouse.com", @@ -53,9 +55,10 @@ class InboxUpdate(TestCase): def test_update_list(self): """a new list""" - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): book_list = models.List.objects.create( name="hi", remote_id="https://example.com/list/22", user=self.local_user ) diff --git a/bookwyrm/tests/views/landing/test_invite.py b/bookwyrm/tests/views/landing/test_invite.py index f7ec73cf4..5a76f578b 100644 --- a/bookwyrm/tests/views/landing/test_invite.py +++ b/bookwyrm/tests/views/landing/test_invite.py @@ -17,9 +17,11 @@ class InviteViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/landing/test_landing.py b/bookwyrm/tests/views/landing/test_landing.py index b67857da8..c0581d893 100644 --- a/bookwyrm/tests/views/landing/test_landing.py +++ b/bookwyrm/tests/views/landing/test_landing.py @@ -17,9 +17,11 @@ class LandingViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/landing/test_login.py b/bookwyrm/tests/views/landing/test_login.py index 19ad1d2a0..283890e3e 100644 --- a/bookwyrm/tests/views/landing/test_login.py +++ b/bookwyrm/tests/views/landing/test_login.py @@ -20,9 +20,11 @@ class LoginViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@your.domain.here", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/landing/test_password.py b/bookwyrm/tests/views/landing/test_password.py index ceceeb3e4..8f322b3cb 100644 --- a/bookwyrm/tests/views/landing/test_password.py +++ b/bookwyrm/tests/views/landing/test_password.py @@ -19,9 +19,11 @@ class PasswordViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/landing/test_register.py b/bookwyrm/tests/views/landing/test_register.py index 381a35a32..4b3d46673 100644 --- a/bookwyrm/tests/views/landing/test_register.py +++ b/bookwyrm/tests/views/landing/test_register.py @@ -23,9 +23,11 @@ class RegisterViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@your.domain.here", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/lists/test_curate.py b/bookwyrm/tests/views/lists/test_curate.py index 7fa48f915..59d73cefd 100644 --- a/bookwyrm/tests/views/lists/test_curate.py +++ b/bookwyrm/tests/views/lists/test_curate.py @@ -18,9 +18,11 @@ class ListViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -36,9 +38,10 @@ class ListViews(TestCase): parent_work=work, ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): self.list = models.List.objects.create( name="Test List", user=self.local_user ) diff --git a/bookwyrm/tests/views/lists/test_embed.py b/bookwyrm/tests/views/lists/test_embed.py index 40c51f5df..9c1d3846d 100644 --- a/bookwyrm/tests/views/lists/test_embed.py +++ b/bookwyrm/tests/views/lists/test_embed.py @@ -18,9 +18,11 @@ class ListViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -36,9 +38,10 @@ class ListViews(TestCase): parent_work=work, ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): self.list = models.List.objects.create( name="Test List", user=self.local_user ) diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index b1e7e2acc..dc144c134 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -21,9 +21,11 @@ class ListViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -65,9 +67,10 @@ class ListViews(TestCase): parent_work=work_four, ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): self.list = models.List.objects.create( name="Test List", user=self.local_user ) @@ -248,9 +251,12 @@ class ListViews(TestCase): ) request.user = self.local_user - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as mock, patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as mock, + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): result = view(request, self.list.id) self.assertEqual(mock.call_count, 1) @@ -286,9 +292,12 @@ class ListViews(TestCase): ) request = self.factory.post("") request.user = self.local_user - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as mock, patch("bookwyrm.lists_stream.remove_list_task.delay") as redis_mock: + with ( + patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as mock, + patch("bookwyrm.lists_stream.remove_list_task.delay") as redis_mock, + ): views.delete_list(request, self.list.id) self.assertTrue(redis_mock.called) activity = json.loads(mock.call_args[1]["args"][1]) diff --git a/bookwyrm/tests/views/lists/test_list_item.py b/bookwyrm/tests/views/lists/test_list_item.py index ebdbdbc2e..e265d7ef5 100644 --- a/bookwyrm/tests/views/lists/test_list_item.py +++ b/bookwyrm/tests/views/lists/test_list_item.py @@ -15,9 +15,11 @@ class ListItemViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -32,9 +34,10 @@ class ListItemViews(TestCase): remote_id="https://example.com/book/1", parent_work=work, ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): self.list = models.List.objects.create( name="Test List", user=self.local_user ) diff --git a/bookwyrm/tests/views/lists/test_lists.py b/bookwyrm/tests/views/lists/test_lists.py index 0d2213ee7..88ea71360 100644 --- a/bookwyrm/tests/views/lists/test_lists.py +++ b/bookwyrm/tests/views/lists/test_lists.py @@ -18,9 +18,11 @@ class ListViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -45,10 +47,10 @@ class ListViews(TestCase): def test_lists_page(self, _): """there are so many views, this just makes sure it LOADS""" view = views.Lists.as_view() - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.add_list_task.delay"), patch( - "bookwyrm.lists_stream.remove_list_task.delay" + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.add_list_task.delay"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), ): models.List.objects.create(name="Public list", user=self.local_user) models.List.objects.create( @@ -72,9 +74,10 @@ class ListViews(TestCase): def test_saved_lists_page(self): """there are so many views, this just makes sure it LOADS""" view = views.SavedLists.as_view() - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): booklist = models.List.objects.create( name="Public list", user=self.local_user ) @@ -94,9 +97,10 @@ class ListViews(TestCase): def test_saved_lists_page_empty(self): """there are so many views, this just makes sure it LOADS""" view = views.SavedLists.as_view() - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): models.List.objects.create(name="Public list", user=self.local_user) models.List.objects.create( name="Private list", privacy="direct", user=self.local_user @@ -122,9 +126,10 @@ class ListViews(TestCase): def test_user_lists_page(self): """there are so many views, this just makes sure it LOADS""" view = views.UserLists.as_view() - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): models.List.objects.create(name="Public list", user=self.local_user) models.List.objects.create( name="Private list", privacy="direct", user=self.local_user @@ -160,9 +165,12 @@ class ListViews(TestCase): }, ) request.user = self.local_user - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as mock, patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as mock, + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): result = view(request) self.assertEqual(mock.call_count, 1) diff --git a/bookwyrm/tests/views/preferences/test_block.py b/bookwyrm/tests/views/preferences/test_block.py index 86ef95e7e..bc39d2f62 100644 --- a/bookwyrm/tests/views/preferences/test_block.py +++ b/bookwyrm/tests/views/preferences/test_block.py @@ -16,9 +16,11 @@ class BlockViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -65,8 +67,9 @@ class BlockViews(TestCase): request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.remove_user_statuses_task.delay"), patch( - "bookwyrm.lists_stream.remove_user_lists_task.delay" + with ( + patch("bookwyrm.activitystreams.remove_user_statuses_task.delay"), + patch("bookwyrm.lists_stream.remove_user_lists_task.delay"), ): view(request, self.remote_user.id) block = models.UserBlocks.objects.get() @@ -82,8 +85,9 @@ class BlockViews(TestCase): request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.add_user_statuses_task.delay"), patch( - "bookwyrm.lists_stream.add_user_lists_task.delay" + with ( + patch("bookwyrm.activitystreams.add_user_statuses_task.delay"), + patch("bookwyrm.lists_stream.add_user_lists_task.delay"), ): views.unblock(request, self.remote_user.id) diff --git a/bookwyrm/tests/views/preferences/test_change_password.py b/bookwyrm/tests/views/preferences/test_change_password.py index 49eac998c..1717204bd 100644 --- a/bookwyrm/tests/views/preferences/test_change_password.py +++ b/bookwyrm/tests/views/preferences/test_change_password.py @@ -15,9 +15,11 @@ class ChangePasswordViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/preferences/test_delete_user.py b/bookwyrm/tests/views/preferences/test_delete_user.py index d97ef0d38..94d8c4a69 100644 --- a/bookwyrm/tests/views/preferences/test_delete_user.py +++ b/bookwyrm/tests/views/preferences/test_delete_user.py @@ -19,9 +19,11 @@ class DeleteUserViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@your.domain.here", "mouse@mouse.mouse", @@ -40,9 +42,10 @@ class DeleteUserViews(TestCase): self.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_book_statuses_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), + ): models.ShelfBook.objects.create( book=self.book, user=self.local_user, diff --git a/bookwyrm/tests/views/preferences/test_edit_user.py b/bookwyrm/tests/views/preferences/test_edit_user.py index 1ed4e3240..4b83f3b80 100644 --- a/bookwyrm/tests/views/preferences/test_edit_user.py +++ b/bookwyrm/tests/views/preferences/test_edit_user.py @@ -21,9 +21,11 @@ class EditUserViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -38,9 +40,10 @@ class EditUserViews(TestCase): self.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_book_statuses_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), + ): models.ShelfBook.objects.create( book=self.book, user=self.local_user, diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index 3f758b2f7..128b8fc8b 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -22,8 +22,9 @@ class ExportViews(TestCase): self, ): # pylint: disable=bad-classmethod-argument, disable=invalid-name """we need basic test data and mocks""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), ): self.local_user = models.User.objects.create_user( "mouse@local.com", diff --git a/bookwyrm/tests/views/preferences/test_export_user.py b/bookwyrm/tests/views/preferences/test_export_user.py index 654ed2a05..57a7c2ca5 100644 --- a/bookwyrm/tests/views/preferences/test_export_user.py +++ b/bookwyrm/tests/views/preferences/test_export_user.py @@ -15,8 +15,9 @@ class ExportUserViews(TestCase): def setUp(self): self.factory = RequestFactory() models.SiteSettings.objects.create() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), ): self.local_user = models.User.objects.create_user( "hugh@example.com", diff --git a/bookwyrm/tests/views/preferences/test_two_factor_auth.py b/bookwyrm/tests/views/preferences/test_two_factor_auth.py index dbd9c1f5b..8eb5e92c7 100644 --- a/bookwyrm/tests/views/preferences/test_two_factor_auth.py +++ b/bookwyrm/tests/views/preferences/test_two_factor_auth.py @@ -20,9 +20,11 @@ class TwoFactorViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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@your.domain.here", "mouse@mouse.com", @@ -130,8 +132,9 @@ class TwoFactorViews(TestCase): request.session["2fa_user"] = self.local_user.username request.session.save() - with patch("bookwyrm.views.preferences.two_factor_auth.LoginWith2FA"), patch( - "bookwyrm.views.preferences.two_factor_auth.login" + with ( + patch("bookwyrm.views.preferences.two_factor_auth.LoginWith2FA"), + patch("bookwyrm.views.preferences.two_factor_auth.login"), ): result = view(request) self.assertEqual(result.url, "/") diff --git a/bookwyrm/tests/views/shelf/test_shelf.py b/bookwyrm/tests/views/shelf/test_shelf.py index b96d0a9ed..57631974f 100644 --- a/bookwyrm/tests/views/shelf/test_shelf.py +++ b/bookwyrm/tests/views/shelf/test_shelf.py @@ -23,9 +23,11 @@ class ShelfViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/shelf/test_shelf_actions.py b/bookwyrm/tests/views/shelf/test_shelf_actions.py index eea17b62d..ee5854d18 100644 --- a/bookwyrm/tests/views/shelf/test_shelf_actions.py +++ b/bookwyrm/tests/views/shelf/test_shelf_actions.py @@ -21,9 +21,11 @@ class ShelfActionViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_annual_summary.py b/bookwyrm/tests/views/test_annual_summary.py index d51060a72..2fd7dc4eb 100644 --- a/bookwyrm/tests/views/test_annual_summary.py +++ b/bookwyrm/tests/views/test_annual_summary.py @@ -24,9 +24,11 @@ class AnnualSummary(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_author.py b/bookwyrm/tests/views/test_author.py index 669149af2..bee057d0c 100644 --- a/bookwyrm/tests/views/test_author.py +++ b/bookwyrm/tests/views/test_author.py @@ -19,9 +19,11 @@ class AuthorViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_directory.py b/bookwyrm/tests/views/test_directory.py index 7e9e97522..e2bef539e 100644 --- a/bookwyrm/tests/views/test_directory.py +++ b/bookwyrm/tests/views/test_directory.py @@ -16,9 +16,11 @@ class DirectoryViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_discover.py b/bookwyrm/tests/views/test_discover.py index 9aa139074..937039592 100644 --- a/bookwyrm/tests/views/test_discover.py +++ b/bookwyrm/tests/views/test_discover.py @@ -14,9 +14,11 @@ class DiscoverViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index 33dbd4ea5..fb2609575 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -27,9 +27,11 @@ class FeedViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index e70ace769..61a0a82ce 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -21,9 +21,11 @@ class FollowViews(TestCase): def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" models.SiteSettings.objects.create() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -78,9 +80,11 @@ class FollowViews(TestCase): def test_handle_follow_local_manually_approves(self, *_): """send a follow request""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): rat = models.User.objects.create_user( "rat@local.com", "rat@rat.com", @@ -104,9 +108,11 @@ class FollowViews(TestCase): def test_handle_follow_local(self, *_): """send a follow request""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): rat = models.User.objects.create_user( "rat@local.com", "rat@rat.com", diff --git a/bookwyrm/tests/views/test_get_started.py b/bookwyrm/tests/views/test_get_started.py index 84a49cafc..5d6aa8782 100644 --- a/bookwyrm/tests/views/test_get_started.py +++ b/bookwyrm/tests/views/test_get_started.py @@ -15,9 +15,11 @@ class GetStartedViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_goal.py b/bookwyrm/tests/views/test_goal.py index 3d87d8538..49227457b 100644 --- a/bookwyrm/tests/views/test_goal.py +++ b/bookwyrm/tests/views/test_goal.py @@ -18,9 +18,11 @@ class GoalViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_group.py b/bookwyrm/tests/views/test_group.py index 4d678c31a..ca9284686 100644 --- a/bookwyrm/tests/views/test_group.py +++ b/bookwyrm/tests/views/test_group.py @@ -19,9 +19,11 @@ class GroupViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_hashtag.py b/bookwyrm/tests/views/test_hashtag.py index 1c8b31dce..5979238d8 100644 --- a/bookwyrm/tests/views/test_hashtag.py +++ b/bookwyrm/tests/views/test_hashtag.py @@ -16,9 +16,11 @@ class HashtagView(TestCase): @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"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -53,9 +55,10 @@ class HashtagView(TestCase): ) self.hashtag_bookclub = models.Hashtag.objects.create(name="#BookClub") - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_status_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): self.statuses_bookclub = [ models.Comment.objects.create( book=self.book, user=self.local_user, content="#BookClub" @@ -91,9 +94,10 @@ class HashtagView(TestCase): request = self.factory.get("") hashtag = models.Hashtag.objects.create(name="#test") - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_status_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): status = models.Comment.objects.create( user=self.local_user, book=self.book, content="#test", privacy="direct" ) @@ -115,9 +119,10 @@ class HashtagView(TestCase): request = self.factory.get("") hashtag = models.Hashtag.objects.create(name="#test") - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_status_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): status = models.Comment.objects.create( user=self.local_user, book=self.book, @@ -143,9 +148,10 @@ class HashtagView(TestCase): request = self.factory.get("") hashtag = models.Hashtag.objects.create(name="#test") - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_status_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): status = models.Comment.objects.create( user=self.local_user, book=self.book, diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index 9472cf762..2f2481931 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -21,9 +21,11 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): with patch("bookwyrm.suggested_users.rerank_user_task.delay"): self.local_user = models.User.objects.create_user( "mouse@local.com", diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py index 1565b96a8..95d7b5791 100644 --- a/bookwyrm/tests/views/test_interaction.py +++ b/bookwyrm/tests/views/test_interaction.py @@ -15,9 +15,11 @@ class InteractionViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_isbn.py b/bookwyrm/tests/views/test_isbn.py index ca451bef8..bb66c8f3e 100644 --- a/bookwyrm/tests/views/test_isbn.py +++ b/bookwyrm/tests/views/test_isbn.py @@ -17,9 +17,11 @@ class IsbnViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_notifications.py b/bookwyrm/tests/views/test_notifications.py index 8d239d77a..c44940742 100644 --- a/bookwyrm/tests/views/test_notifications.py +++ b/bookwyrm/tests/views/test_notifications.py @@ -15,9 +15,11 @@ class NotificationViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -148,9 +150,10 @@ class NotificationViews(TestCase): def test_notifications_page_list(self): """Adding books to lists""" book = models.Edition.objects.create(title="shape") - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): book_list = models.List.objects.create(user=self.local_user, name="hi") item = models.ListItem.objects.create( book=book, user=self.another_user, book_list=book_list, order=1 diff --git a/bookwyrm/tests/views/test_outbox.py b/bookwyrm/tests/views/test_outbox.py index 78c4d0edc..ca289db3f 100644 --- a/bookwyrm/tests/views/test_outbox.py +++ b/bookwyrm/tests/views/test_outbox.py @@ -18,9 +18,11 @@ class OutboxView(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we'll need some data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_reading.py b/bookwyrm/tests/views/test_reading.py index fab1c1fc9..39c611d6c 100644 --- a/bookwyrm/tests/views/test_reading.py +++ b/bookwyrm/tests/views/test_reading.py @@ -18,9 +18,11 @@ class ReadingViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_readthrough.py b/bookwyrm/tests/views/test_readthrough.py index 4f5b1e478..113b3161d 100644 --- a/bookwyrm/tests/views/test_readthrough.py +++ b/bookwyrm/tests/views/test_readthrough.py @@ -24,9 +24,11 @@ class ReadThrough(TestCase): title="Example Edition", parent_work=self.work ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + 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.user = models.User.objects.create_user( "cinco", "cinco@example.com", "seissiete", local=True, localname="cinco" ) diff --git a/bookwyrm/tests/views/test_report.py b/bookwyrm/tests/views/test_report.py index 3e4c64f68..65670dcbf 100644 --- a/bookwyrm/tests/views/test_report.py +++ b/bookwyrm/tests/views/test_report.py @@ -14,9 +14,11 @@ class ReportViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -31,9 +33,10 @@ class ReportViews(TestCase): local=True, localname="rat", ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.activitystreams.add_status_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): self.status = models.Status.objects.create( user=self.local_user, content="Test status", diff --git a/bookwyrm/tests/views/test_rss_feed.py b/bookwyrm/tests/views/test_rss_feed.py index a63bdea94..af5ad5301 100644 --- a/bookwyrm/tests/views/test_rss_feed.py +++ b/bookwyrm/tests/views/test_rss_feed.py @@ -14,9 +14,11 @@ class RssFeedView(TestCase): @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"): + 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( "rss_user", "rss@test.rss", "password", local=True ) diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 425b96cd3..5e06e6f81 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -20,9 +20,11 @@ class Views(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -164,9 +166,10 @@ class Views(TestCase): def test_search_lists(self): """searches remote connectors""" - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.remove_list_task.delay"): + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.lists_stream.remove_list_task.delay"), + ): booklist = models.List.objects.create( user=self.local_user, name="test list" ) diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 7b0c39338..f5fe515f1 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -19,9 +19,11 @@ class StatusTransactions(TransactionTestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.populate_stream_task.delay" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -77,9 +79,11 @@ class StatusViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index 37cb2e6c6..129aa8d71 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -15,9 +15,11 @@ class UpdateViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -54,11 +56,14 @@ class UpdateViews(TestCase): request = self.factory.get("") request.user = self.local_user - with patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count" - ) as mock_count, patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" - ) as mock_count_by_status: + with ( + patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count" + ) as mock_count, + patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" + ) as mock_count_by_status, + ): mock_count.return_value = 3 mock_count_by_status.return_value = {"review": 5} result = views.get_unread_status_string(request, "home") @@ -73,11 +78,14 @@ class UpdateViews(TestCase): request = self.factory.get("") request.user = self.local_user - with patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count" - ) as mock_count, patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" - ) as mock_count_by_status: + with ( + patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count" + ) as mock_count, + patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" + ) as mock_count_by_status, + ): mock_count.return_value = 3 mock_count_by_status.return_value = { "generated_note": 1, diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py index d4e11ff2e..4b49f120e 100644 --- a/bookwyrm/tests/views/test_user.py +++ b/bookwyrm/tests/views/test_user.py @@ -18,9 +18,11 @@ class UserViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -34,10 +36,10 @@ class UserViews(TestCase): self.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( - "bookwyrm.activitystreams.add_book_statuses_task.delay" + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), ): models.ShelfBook.objects.create( book=self.book, diff --git a/bookwyrm/tests/views/test_wellknown.py b/bookwyrm/tests/views/test_wellknown.py index 4617942fa..d8bf0d062 100644 --- a/bookwyrm/tests/views/test_wellknown.py +++ b/bookwyrm/tests/views/test_wellknown.py @@ -16,9 +16,11 @@ class WellknownViews(TestCase): @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" - ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", From 4b9fe0af0c811c90415d099fa2e6973fe25e9152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 17 Mar 2024 20:36:48 -0300 Subject: [PATCH 356/458] Remove nesting in several with..patch calls --- .../tests/activitypub/test_base_activity.py | 10 ++-- bookwyrm/tests/importers/test_importer.py | 8 ++-- .../tests/models/test_bookwyrm_import_job.py | 46 +++++++++---------- bookwyrm/tests/models/test_import_model.py | 18 ++++---- bookwyrm/tests/test_signing.py | 8 ++-- .../tests/views/inbox/test_inbox_announce.py | 16 ++++--- bookwyrm/tests/views/inbox/test_inbox_like.py | 16 ++++--- bookwyrm/tests/views/test_helpers.py | 46 ++++++++++--------- bookwyrm/tests/views/test_updates.py | 26 ++++------- 9 files changed, 100 insertions(+), 94 deletions(-) diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index 8f2cd7fb2..735353452 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -234,10 +234,12 @@ class BaseActivity(TestCase): ) # sets the celery task call to the function call - with patch("bookwyrm.activitypub.base_activity.set_related_field.delay"): - with patch("bookwyrm.models.status.Status.ignore_activity") as discarder: - discarder.return_value = False - update_data.to_model(model=models.Status, instance=status) + with ( + patch("bookwyrm.activitypub.base_activity.set_related_field.delay"), + patch("bookwyrm.models.status.Status.ignore_activity") as discarder, + ): + discarder.return_value = False + update_data.to_model(model=models.Status, instance=status) self.assertIsNone(status.attachments.first()) @responses.activate diff --git a/bookwyrm/tests/importers/test_importer.py b/bookwyrm/tests/importers/test_importer.py index 494d28ad0..a18aedd51 100644 --- a/bookwyrm/tests/importers/test_importer.py +++ b/bookwyrm/tests/importers/test_importer.py @@ -268,9 +268,11 @@ class GenericImporter(TestCase): import_item.book = self.book import_item.save() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - with patch("bookwyrm.models.Status.broadcast") as broadcast_mock: - handle_imported_book(import_item) + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.models.Status.broadcast") as broadcast_mock, + ): + handle_imported_book(import_item) kwargs = broadcast_mock.call_args.kwargs self.assertEqual(kwargs["software"], "bookwyrm") review = models.Review.objects.get(book=self.book, user=self.local_user) diff --git a/bookwyrm/tests/models/test_bookwyrm_import_job.py b/bookwyrm/tests/models/test_bookwyrm_import_job.py index 50c136f21..259d8f5a4 100644 --- a/bookwyrm/tests/models/test_bookwyrm_import_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_import_job.py @@ -24,7 +24,6 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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", @@ -84,13 +83,13 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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 - ) + with ( + open(self.archive_file, "rb") as fileobj, + 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() @@ -111,7 +110,6 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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 ) @@ -256,14 +254,15 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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: + with ( + open(self.archive_file, "rb") as fileobj, + BookwyrmTarFile.open(mode="r:gz", fileobj=fileobj) as tarfile, + ): + bookwyrm_import_job.get_or_create_edition( + self.json_data["books"][1], tarfile + ) # Sand Talk - bookwyrm_import_job.get_or_create_edition( - self.json_data["books"][1], tarfile - ) # Sand Talk - - self.assertEqual(models.Edition.objects.count(), 1) + 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, @@ -272,12 +271,13 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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 + with ( + open(self.archive_file, "rb") as fileobj, + 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) @@ -326,7 +326,6 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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 ) @@ -364,7 +363,6 @@ class BookwyrmImport(TestCase): # pylint: disable=too-many-public-methods 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 ) diff --git a/bookwyrm/tests/models/test_import_model.py b/bookwyrm/tests/models/test_import_model.py index e5be01464..aa7b5b132 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -194,14 +194,16 @@ class ImportJob(TestCase): status=200, ) - with patch("bookwyrm.connectors.abstract_connector.load_more_data.delay"): - with patch( + with ( + patch("bookwyrm.connectors.abstract_connector.load_more_data.delay"), + patch( "bookwyrm.connectors.connector_manager.first_search_result" - ) as search: - search.return_value = result - with patch( - "bookwyrm.connectors.openlibrary.Connector.get_authors_from_data" - ): - book = item.get_book_from_identifier() + ) as search, + ): + search.return_value = result + with patch( + "bookwyrm.connectors.openlibrary.Connector.get_authors_from_data" + ): + book = item.get_book_from_identifier() self.assertEqual(book.title, "Sabriel") diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index 80a35b94d..70f8e47cf 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -91,9 +91,11 @@ class Signature(TestCase): signature = make_signature( "post", signer or sender, self.rat.inbox, now, digest=digest ) - with patch("bookwyrm.views.inbox.activity_task.apply_async"): - with patch("bookwyrm.models.user.set_remote_server.delay"): - return self.send(signature, now, send_data or data, digest) + with ( + patch("bookwyrm.views.inbox.activity_task.apply_async"), + patch("bookwyrm.models.user.set_remote_server.delay"), + ): + return self.send(signature, now, send_data or data, digest) def test_correct_signature(self): """this one should just work""" diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py index 53555f213..d982a91c8 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_announce.py +++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py @@ -39,13 +39,15 @@ class InboxActivities(TestCase): outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - with patch("bookwyrm.activitystreams.add_status_task.delay"): - self.status = models.Status.objects.create( - user=self.local_user, - content="Test status", - remote_id="https://example.com/status/1", - ) + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): + self.status = models.Status.objects.create( + user=self.local_user, + content="Test status", + remote_id="https://example.com/status/1", + ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/inbox/test_inbox_like.py b/bookwyrm/tests/views/inbox/test_inbox_like.py index 4a397dcf8..4efe4cb98 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_like.py +++ b/bookwyrm/tests/views/inbox/test_inbox_like.py @@ -38,13 +38,15 @@ class InboxActivities(TestCase): outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - with patch("bookwyrm.activitystreams.add_status_task.delay"): - self.status = models.Status.objects.create( - user=self.local_user, - content="Test status", - remote_id="https://example.com/status/1", - ) + with ( + patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), + patch("bookwyrm.activitystreams.add_status_task.delay"), + ): + self.status = models.Status.objects.create( + user=self.local_user, + content="Test status", + remote_id="https://example.com/status/1", + ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index 2f2481931..e00e1d234 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -25,29 +25,31 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods 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"), ): - with patch("bookwyrm.suggested_users.rerank_user_task.delay"): - self.local_user = models.User.objects.create_user( - "mouse@local.com", - "mouse@mouse.com", - "mouseword", - local=True, - discoverable=True, - localname="mouse", - remote_id="https://example.com/users/mouse", - ) - with patch("bookwyrm.models.user.set_remote_server.delay"): - with patch("bookwyrm.suggested_users.rerank_user_task.delay"): - self.remote_user = models.User.objects.create_user( - "rat", - "rat@rat.com", - "ratword", - local=False, - remote_id="https://example.com/users/rat", - discoverable=True, - inbox="https://example.com/users/rat/inbox", - outbox="https://example.com/users/rat/outbox", - ) + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.com", + "mouseword", + local=True, + discoverable=True, + localname="mouse", + remote_id="https://example.com/users/mouse", + ) + with ( + patch("bookwyrm.models.user.set_remote_server.delay"), + patch("bookwyrm.suggested_users.rerank_user_task.delay"), + ): + self.remote_user = models.User.objects.create_user( + "rat", + "rat@rat.com", + "ratword", + local=False, + remote_id="https://example.com/users/rat", + discoverable=True, + inbox="https://example.com/users/rat/inbox", + outbox="https://example.com/users/rat/outbox", + ) self.work = models.Work.objects.create(title="Test Work") self.book = models.Edition.objects.create( title="Test Book", diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index 129aa8d71..6f826b46f 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -56,14 +56,11 @@ class UpdateViews(TestCase): request = self.factory.get("") request.user = self.local_user - with ( - patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count" - ) as mock_count, - patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" - ) as mock_count_by_status, - ): + with patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count" + ) as mock_count, patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" + ) as mock_count_by_status: mock_count.return_value = 3 mock_count_by_status.return_value = {"review": 5} result = views.get_unread_status_string(request, "home") @@ -78,14 +75,11 @@ class UpdateViews(TestCase): request = self.factory.get("") request.user = self.local_user - with ( - patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count" - ) as mock_count, - patch( - "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" - ) as mock_count_by_status, - ): + with patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count" + ) as mock_count, patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" + ) as mock_count_by_status: mock_count.return_value = 3 mock_count_by_status.return_value = { "generated_note": 1, From e2c9ea3cd27769814603790e580d44246f3b9fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 17 Mar 2024 20:52:20 -0300 Subject: [PATCH 357/458] Fix instances of `bad-classmethod-argument` in recently edited files --- .../tests/activitypub/test_base_activity.py | 8 +++--- bookwyrm/tests/activitypub/test_note.py | 10 +++---- .../activitystreams/test_abstractstream.py | 10 +++---- .../tests/activitystreams/test_booksstream.py | 8 +++--- .../tests/activitystreams/test_homestream.py | 8 +++--- .../tests/activitystreams/test_localstream.py | 10 +++---- .../tests/activitystreams/test_signals.py | 6 ++-- bookwyrm/tests/activitystreams/test_tasks.py | 14 ++++------ .../connectors/test_inventaire_connector.py | 2 +- .../tests/importers/test_calibre_import.py | 6 ++-- .../tests/importers/test_goodreads_import.py | 6 ++-- bookwyrm/tests/importers/test_importer.py | 6 ++-- .../importers/test_librarything_import.py | 6 ++-- .../importers/test_openlibrary_import.py | 6 ++-- .../tests/importers/test_storygraph_import.py | 6 ++-- bookwyrm/tests/lists_stream/test_signals.py | 8 +++--- bookwyrm/tests/lists_stream/test_stream.py | 10 +++---- bookwyrm/tests/lists_stream/test_tasks.py | 12 ++++---- .../management/test_populate_lists_streams.py | 10 +++---- .../tests/management/test_populate_streams.py | 10 +++---- .../tests/models/test_activitypub_mixin.py | 10 +++---- bookwyrm/tests/models/test_automod.py | 4 +-- bookwyrm/tests/models/test_base_model.py | 6 ++-- bookwyrm/tests/models/test_group.py | 28 +++++++++---------- bookwyrm/tests/models/test_import_model.py | 4 +-- bookwyrm/tests/models/test_list.py | 6 ++-- bookwyrm/tests/models/test_notification.py | 20 ++++++------- .../tests/models/test_readthrough_model.py | 10 +++---- .../tests/models/test_relationship_models.py | 10 +++---- bookwyrm/tests/models/test_shelf_model.py | 6 ++-- bookwyrm/tests/models/test_site.py | 4 +-- bookwyrm/tests/models/test_status_model.py | 8 +++--- bookwyrm/tests/models/test_user_model.py | 6 ++-- .../templatetags/test_book_display_tags.py | 6 ++-- .../tests/templatetags/test_feed_page_tags.py | 6 ++-- .../tests/templatetags/test_interaction.py | 8 +++--- .../test_notification_page_tags.py | 4 +-- .../tests/templatetags/test_rating_tags.py | 8 +++--- .../tests/templatetags/test_shelf_tags.py | 8 +++--- .../tests/templatetags/test_status_display.py | 8 +++--- bookwyrm/tests/templatetags/test_utilities.py | 10 +++---- bookwyrm/tests/test_context_processors.py | 10 +++---- bookwyrm/tests/test_emailing.py | 4 +-- bookwyrm/tests/test_signing.py | 8 +++--- .../tests/views/admin/test_announcements.py | 4 +-- bookwyrm/tests/views/admin/test_automod.py | 6 ++-- bookwyrm/tests/views/admin/test_celery.py | 6 ++-- bookwyrm/tests/views/admin/test_dashboard.py | 6 ++-- .../tests/views/admin/test_email_blocks.py | 6 ++-- .../tests/views/admin/test_email_config.py | 6 ++-- bookwyrm/tests/views/admin/test_federation.py | 8 +++--- bookwyrm/tests/views/admin/test_imports.py | 6 ++-- .../tests/views/admin/test_ip_blocklist.py | 6 ++-- .../tests/views/admin/test_link_domains.py | 12 ++++---- bookwyrm/tests/views/admin/test_reports.py | 8 +++--- bookwyrm/tests/views/admin/test_site.py | 8 +++--- bookwyrm/tests/views/admin/test_themes.py | 10 +++---- bookwyrm/tests/views/admin/test_user_admin.py | 6 ++-- bookwyrm/tests/views/books/test_book.py | 14 +++++----- bookwyrm/tests/views/books/test_edit_book.py | 14 +++++----- bookwyrm/tests/views/books/test_editions.py | 10 +++---- bookwyrm/tests/views/books/test_links.py | 12 ++++---- bookwyrm/tests/views/imports/test_import.py | 4 +-- .../tests/views/imports/test_import_review.py | 8 +++--- .../views/imports/test_import_troubleshoot.py | 4 +-- bookwyrm/tests/views/inbox/test_inbox.py | 4 +-- bookwyrm/tests/views/inbox/test_inbox_add.py | 6 ++-- .../tests/views/inbox/test_inbox_announce.py | 14 +++++----- .../tests/views/inbox/test_inbox_block.py | 10 +++---- .../tests/views/inbox/test_inbox_create.py | 10 +++---- .../tests/views/inbox/test_inbox_delete.py | 14 +++++----- .../tests/views/inbox/test_inbox_follow.py | 10 +++---- bookwyrm/tests/views/inbox/test_inbox_like.py | 14 +++++----- .../tests/views/inbox/test_inbox_remove.py | 16 +++++------ .../tests/views/inbox/test_inbox_update.py | 10 +++---- bookwyrm/tests/views/landing/test_invite.py | 4 +-- bookwyrm/tests/views/landing/test_landing.py | 4 +-- bookwyrm/tests/views/landing/test_login.py | 8 +++--- bookwyrm/tests/views/landing/test_password.py | 4 +-- bookwyrm/tests/views/landing/test_register.py | 6 ++-- bookwyrm/tests/views/lists/test_curate.py | 10 +++---- bookwyrm/tests/views/lists/test_embed.py | 10 +++---- bookwyrm/tests/views/lists/test_list.py | 18 ++++++------ bookwyrm/tests/views/lists/test_list_item.py | 10 +++---- bookwyrm/tests/views/lists/test_lists.py | 6 ++-- .../tests/views/preferences/test_block.py | 6 ++-- .../views/preferences/test_change_password.py | 4 +-- .../views/preferences/test_delete_user.py | 14 +++++----- .../tests/views/preferences/test_edit_user.py | 14 +++++----- .../tests/views/preferences/test_export.py | 12 ++++---- .../views/preferences/test_two_factor_auth.py | 4 +-- bookwyrm/tests/views/shelf/test_shelf.py | 14 +++++----- .../tests/views/shelf/test_shelf_actions.py | 16 +++++------ bookwyrm/tests/views/test_annual_summary.py | 10 +++---- bookwyrm/tests/views/test_author.py | 14 +++++----- bookwyrm/tests/views/test_directory.py | 4 +-- bookwyrm/tests/views/test_discover.py | 4 +-- bookwyrm/tests/views/test_feed.py | 8 +++--- bookwyrm/tests/views/test_follow.py | 16 +++++------ bookwyrm/tests/views/test_get_started.py | 8 +++--- bookwyrm/tests/views/test_goal.py | 8 +++--- bookwyrm/tests/views/test_group.py | 14 +++++----- bookwyrm/tests/views/test_hashtag.py | 26 ++++++++--------- bookwyrm/tests/views/test_helpers.py | 16 +++++------ bookwyrm/tests/views/test_interaction.py | 8 +++--- bookwyrm/tests/views/test_isbn.py | 10 +++---- bookwyrm/tests/views/test_notifications.py | 10 +++---- bookwyrm/tests/views/test_outbox.py | 6 ++-- bookwyrm/tests/views/test_reading.py | 12 ++++---- bookwyrm/tests/views/test_readthrough.py | 10 +++---- bookwyrm/tests/views/test_report.py | 10 +++---- bookwyrm/tests/views/test_rss_feed.py | 6 ++-- bookwyrm/tests/views/test_search.py | 10 +++---- bookwyrm/tests/views/test_status.py | 12 ++++---- bookwyrm/tests/views/test_updates.py | 4 +-- bookwyrm/tests/views/test_user.py | 14 +++++----- bookwyrm/tests/views/test_wellknown.py | 4 +-- 117 files changed, 515 insertions(+), 529 deletions(-) diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index 735353452..b529f6ae5 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -29,18 +29,18 @@ class BaseActivity(TestCase): """the super class for model-linked activitypub dataclasses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we're probably going to re-use this so why copy/paste""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) - self.user.remote_id = "http://example.com/a/b" - self.user.save(broadcast=False, update_fields=["remote_id"]) + cls.user.remote_id = "http://example.com/a/b" + cls.user.save(broadcast=False, update_fields=["remote_id"]) def setUp(self): datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") diff --git a/bookwyrm/tests/activitypub/test_note.py b/bookwyrm/tests/activitypub/test_note.py index 65502c70a..33fc04d91 100644 --- a/bookwyrm/tests/activitypub/test_note.py +++ b/bookwyrm/tests/activitypub/test_note.py @@ -11,20 +11,20 @@ class Note(TestCase): """the model-linked ActivityPub dataclass for Note-based types""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create a shared user""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) - self.user.remote_id = "https://test-instance.org/user/critic" - self.user.save(broadcast=False, update_fields=["remote_id"]) + cls.user.remote_id = "https://test-instance.org/user/critic" + cls.user.save(broadcast=False, update_fields=["remote_id"]) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Test Edition", remote_id="http://book.com/book" ) diff --git a/bookwyrm/tests/activitystreams/test_abstractstream.py b/bookwyrm/tests/activitystreams/test_abstractstream.py index acdd5529c..3a95e2efa 100644 --- a/bookwyrm/tests/activitystreams/test_abstractstream.py +++ b/bookwyrm/tests/activitystreams/test_abstractstream.py @@ -16,17 +16,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """use a test csv""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -34,7 +34,7 @@ class Activitystreams(TestCase): localname="nutria", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -44,7 +44,7 @@ class Activitystreams(TestCase): outbox="https://example.com/users/rat/outbox", ) work = models.Work.objects.create(title="test work") - self.book = models.Edition.objects.create(title="test book", parent_work=work) + cls.book = models.Edition.objects.create(title="test book", parent_work=work) def setUp(self): """per-test setUp""" diff --git a/bookwyrm/tests/activitystreams/test_booksstream.py b/bookwyrm/tests/activitystreams/test_booksstream.py index eb61cc203..07a4c52f4 100644 --- a/bookwyrm/tests/activitystreams/test_booksstream.py +++ b/bookwyrm/tests/activitystreams/test_booksstream.py @@ -15,18 +15,18 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """use a test csv""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -36,7 +36,7 @@ class Activitystreams(TestCase): outbox="https://example.com/users/rat/outbox", ) work = models.Work.objects.create(title="test work") - self.book = models.Edition.objects.create(title="test book", parent_work=work) + cls.book = models.Edition.objects.create(title="test book", parent_work=work) def test_get_statuses_for_user_books(self, *_): """create a stream for a user""" diff --git a/bookwyrm/tests/activitystreams/test_homestream.py b/bookwyrm/tests/activitystreams/test_homestream.py index 0baf1d1b8..feadaab1b 100644 --- a/bookwyrm/tests/activitystreams/test_homestream.py +++ b/bookwyrm/tests/activitystreams/test_homestream.py @@ -13,17 +13,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """use a test csv""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -31,7 +31,7 @@ class Activitystreams(TestCase): localname="nutria", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/activitystreams/test_localstream.py b/bookwyrm/tests/activitystreams/test_localstream.py index 92ec2b069..508a289b2 100644 --- a/bookwyrm/tests/activitystreams/test_localstream.py +++ b/bookwyrm/tests/activitystreams/test_localstream.py @@ -13,17 +13,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """use a test csv""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -31,7 +31,7 @@ class Activitystreams(TestCase): localname="nutria", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -41,7 +41,7 @@ class Activitystreams(TestCase): outbox="https://example.com/users/rat/outbox", ) work = models.Work.objects.create(title="test work") - self.book = models.Edition.objects.create(title="test book", parent_work=work) + cls.book = models.Edition.objects.create(title="test book", parent_work=work) def test_localstream_get_audience_remote_status(self, *_): """get a list of users that should see a status""" diff --git a/bookwyrm/tests/activitystreams/test_signals.py b/bookwyrm/tests/activitystreams/test_signals.py index b9fb75ade..77ac68e71 100644 --- a/bookwyrm/tests/activitystreams/test_signals.py +++ b/bookwyrm/tests/activitystreams/test_signals.py @@ -15,18 +15,18 @@ class ActivitystreamsSignals(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """use a test csv""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/activitystreams/test_tasks.py b/bookwyrm/tests/activitystreams/test_tasks.py index cf2ee40e6..28bd68bf2 100644 --- a/bookwyrm/tests/activitystreams/test_tasks.py +++ b/bookwyrm/tests/activitystreams/test_tasks.py @@ -8,17 +8,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """use a test csv""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -26,7 +26,7 @@ class Activitystreams(TestCase): localname="nutria", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -36,11 +36,9 @@ class Activitystreams(TestCase): outbox="https://example.com/users/rat/outbox", ) work = models.Work.objects.create(title="test work") - self.book = models.Edition.objects.create(title="test book", parent_work=work) + cls.book = models.Edition.objects.create(title="test book", parent_work=work) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - self.status = models.Status.objects.create( - content="hi", user=self.local_user - ) + cls.status = models.Status.objects.create(content="hi", user=cls.local_user) def test_add_book_statuses_task(self): """statuses related to a book""" diff --git a/bookwyrm/tests/connectors/test_inventaire_connector.py b/bookwyrm/tests/connectors/test_inventaire_connector.py index 874d64862..7844f3919 100644 --- a/bookwyrm/tests/connectors/test_inventaire_connector.py +++ b/bookwyrm/tests/connectors/test_inventaire_connector.py @@ -15,7 +15,7 @@ class Inventaire(TestCase): """test loading data from inventaire.io""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """creates the connector in the database""" models.Connector.objects.create( identifier="inventaire.io", diff --git a/bookwyrm/tests/importers/test_calibre_import.py b/bookwyrm/tests/importers/test_calibre_import.py index 6bfa754af..dcbe68c64 100644 --- a/bookwyrm/tests/importers/test_calibre_import.py +++ b/bookwyrm/tests/importers/test_calibre_import.py @@ -23,19 +23,19 @@ class CalibreImport(TestCase): self.csv = open(datafile, "r", encoding=self.importer.encoding) @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) models.SiteSettings.objects.create() work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/importers/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py index deb41a1df..f0b67cffd 100644 --- a/bookwyrm/tests/importers/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -30,19 +30,19 @@ class GoodreadsImport(TestCase): self.csv = open(datafile, "r", encoding=self.importer.encoding) @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) models.SiteSettings.objects.create() work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/importers/test_importer.py b/bookwyrm/tests/importers/test_importer.py index a18aedd51..ea10d0f53 100644 --- a/bookwyrm/tests/importers/test_importer.py +++ b/bookwyrm/tests/importers/test_importer.py @@ -33,19 +33,19 @@ class GenericImporter(TestCase): self.csv = open(datafile, "r", encoding=self.importer.encoding) @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) models.SiteSettings.objects.create() work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/importers/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py index ba86721de..280131115 100644 --- a/bookwyrm/tests/importers/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -32,19 +32,19 @@ class LibrarythingImport(TestCase): self.csv = open(datafile, "r", encoding=self.importer.encoding) @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mmai", "mmai@mmai.mmai", "password", local=True ) models.SiteSettings.objects.create() work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/importers/test_openlibrary_import.py b/bookwyrm/tests/importers/test_openlibrary_import.py index e0e6135c9..05bab0cc2 100644 --- a/bookwyrm/tests/importers/test_openlibrary_import.py +++ b/bookwyrm/tests/importers/test_openlibrary_import.py @@ -30,19 +30,19 @@ class OpenLibraryImport(TestCase): self.csv = open(datafile, "r", encoding=self.importer.encoding) @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) models.SiteSettings.objects.create() work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/importers/test_storygraph_import.py b/bookwyrm/tests/importers/test_storygraph_import.py index 180cd8ad4..eee27010c 100644 --- a/bookwyrm/tests/importers/test_storygraph_import.py +++ b/bookwyrm/tests/importers/test_storygraph_import.py @@ -30,19 +30,19 @@ class StorygraphImport(TestCase): self.csv = open(datafile, "r", encoding=self.importer.encoding) @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) models.SiteSettings.objects.create() work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/lists_stream/test_signals.py b/bookwyrm/tests/lists_stream/test_signals.py index 923d19a2f..f9e7e4d12 100644 --- a/bookwyrm/tests/lists_stream/test_signals.py +++ b/bookwyrm/tests/lists_stream/test_signals.py @@ -9,21 +9,21 @@ class ListsStreamSignals(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "fish", "fish@fish.fish", "password", local=True, localname="fish" ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/lists_stream/test_stream.py b/bookwyrm/tests/lists_stream/test_stream.py index fcac04d19..5d752dd57 100644 --- a/bookwyrm/tests/lists_stream/test_stream.py +++ b/bookwyrm/tests/lists_stream/test_stream.py @@ -16,17 +16,17 @@ class ListsStream(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -34,7 +34,7 @@ class ListsStream(TestCase): localname="nutria", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -43,7 +43,7 @@ class ListsStream(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.stream = lists_stream.ListsStream() + cls.stream = lists_stream.ListsStream() def test_lists_stream_ids(self, *_): """the abstract base class for stream objects""" diff --git a/bookwyrm/tests/lists_stream/test_tasks.py b/bookwyrm/tests/lists_stream/test_tasks.py index fe3cb319d..a127d363c 100644 --- a/bookwyrm/tests/lists_stream/test_tasks.py +++ b/bookwyrm/tests/lists_stream/test_tasks.py @@ -11,17 +11,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -29,7 +29,7 @@ class Activitystreams(TestCase): localname="nutria", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -42,8 +42,8 @@ class Activitystreams(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.lists_stream.remove_list_task.delay"), ): - self.list = models.List.objects.create( - user=self.local_user, name="hi", privacy="public" + cls.list = models.List.objects.create( + user=cls.local_user, name="hi", privacy="public" ) def test_populate_lists_task(self, *_): diff --git a/bookwyrm/tests/management/test_populate_lists_streams.py b/bookwyrm/tests/management/test_populate_lists_streams.py index f098c2b11..011011903 100644 --- a/bookwyrm/tests/management/test_populate_lists_streams.py +++ b/bookwyrm/tests/management/test_populate_lists_streams.py @@ -13,17 +13,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need some stuff""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -39,7 +39,7 @@ class Activitystreams(TestCase): is_active=False, ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -48,7 +48,7 @@ class Activitystreams(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.book = models.Edition.objects.create(title="test book") + cls.book = models.Edition.objects.create(title="test book") def test_populate_streams(self, *_): """make sure the function on the redis manager gets called""" diff --git a/bookwyrm/tests/management/test_populate_streams.py b/bookwyrm/tests/management/test_populate_streams.py index 034222b29..c5b745c08 100644 --- a/bookwyrm/tests/management/test_populate_streams.py +++ b/bookwyrm/tests/management/test_populate_streams.py @@ -11,17 +11,17 @@ class Activitystreams(TestCase): """using redis to build activity streams""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need some stuff""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria", "nutria@nutria.nutria", "password", @@ -37,7 +37,7 @@ class Activitystreams(TestCase): is_active=False, ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -46,7 +46,7 @@ class Activitystreams(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.book = models.Edition.objects.create(title="test book") + cls.book = models.Edition.objects.create(title="test book") def test_populate_streams(self, _): """make sure the function on the redis manager gets called""" diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index b59088f91..c7949cd28 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -27,20 +27,20 @@ class ActivitypubMixins(TestCase): """functionality shared across models""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """shared data""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) - self.local_user.remote_id = "http://example.com/a/b" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "http://example.com/a/b" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/models/test_automod.py b/bookwyrm/tests/models/test_automod.py index ed3133cdc..5e10eb4d0 100644 --- a/bookwyrm/tests/models/test_automod.py +++ b/bookwyrm/tests/models/test_automod.py @@ -15,14 +15,14 @@ class AutomodModel(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/models/test_base_model.py b/bookwyrm/tests/models/test_base_model.py index d0e441cef..d666b0e46 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -13,18 +13,18 @@ class BaseModel(TestCase): """functionality shared across models""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """shared data""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/models/test_group.py b/bookwyrm/tests/models/test_group.py index 3ea424333..2c2960ac4 100644 --- a/bookwyrm/tests/models/test_group.py +++ b/bookwyrm/tests/models/test_group.py @@ -10,7 +10,7 @@ class Group(TestCase): """some activitypub oddness ahead""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """Set up for tests""" with ( @@ -18,15 +18,15 @@ class Group(TestCase): patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): - self.owner_user = models.User.objects.create_user( + cls.owner_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", local=True, localname="rat" ) - self.badger = models.User.objects.create_user( + cls.badger = models.User.objects.create_user( "badger", "badger@badger.badger", "badgerword", @@ -34,7 +34,7 @@ class Group(TestCase): localname="badger", ) - self.capybara = models.User.objects.create_user( + cls.capybara = models.User.objects.create_user( "capybara", "capybara@capybara.capybara", "capybaraword", @@ -42,32 +42,32 @@ class Group(TestCase): localname="capybara", ) - self.public_group = models.Group.objects.create( + cls.public_group = models.Group.objects.create( name="Public Group", description="Initial description", - user=self.owner_user, + user=cls.owner_user, privacy="public", ) - self.private_group = models.Group.objects.create( + cls.private_group = models.Group.objects.create( name="Private Group", description="Top secret", - user=self.owner_user, + user=cls.owner_user, privacy="direct", ) - self.followers_only_group = models.Group.objects.create( + cls.followers_only_group = models.Group.objects.create( name="Followers Group", description="No strangers", - user=self.owner_user, + user=cls.owner_user, privacy="followers", ) - models.GroupMember.objects.create(group=self.private_group, user=self.badger) + models.GroupMember.objects.create(group=cls.private_group, user=cls.badger) models.GroupMember.objects.create( - group=self.followers_only_group, user=self.badger + group=cls.followers_only_group, user=cls.badger ) - models.GroupMember.objects.create(group=self.public_group, user=self.capybara) + models.GroupMember.objects.create(group=cls.public_group, user=cls.capybara) def test_group_members_can_see_private_groups(self, _): """direct privacy group should not be excluded from group listings for group diff --git a/bookwyrm/tests/models/test_import_model.py b/bookwyrm/tests/models/test_import_model.py index aa7b5b132..e591c33e8 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -17,14 +17,14 @@ class ImportJob(TestCase): """this is a fancy one!!!""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index b1b756cab..b9148853b 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -12,18 +12,18 @@ class List(TestCase): """some activitypub oddness ahead""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """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( + cls.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) + cls.book = models.Edition.objects.create(title="hi", parent_work=work) def test_remote_id(self, *_): """shelves use custom remote ids""" diff --git a/bookwyrm/tests/models/test_notification.py b/bookwyrm/tests/models/test_notification.py index a9ed8b661..976ac39c9 100644 --- a/bookwyrm/tests/models/test_notification.py +++ b/bookwyrm/tests/models/test_notification.py @@ -8,21 +8,21 @@ class Notification(TestCase): """let people know things""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """useful things for creating a notification""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", local=True, localname="rat" ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -31,14 +31,14 @@ class Notification(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Test Book", isbn_13="1234567890123", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) - self.another_book = models.Edition.objects.create( + cls.another_book = models.Edition.objects.create( title="Second Test Book", parent_work=models.Work.objects.create(title="Test Work"), ) @@ -201,14 +201,14 @@ class NotifyInviteRequest(TestCase): """let admins know of invite requests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """ensure there is one admin""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/models/test_readthrough_model.py b/bookwyrm/tests/models/test_readthrough_model.py index 0da87f67b..239537df4 100644 --- a/bookwyrm/tests/models/test_readthrough_model.py +++ b/bookwyrm/tests/models/test_readthrough_model.py @@ -12,20 +12,20 @@ class ReadThrough(TestCase): """some activitypub oddness ahead""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """look, a shelf""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) - self.work = models.Work.objects.create(title="Example Work") - self.edition = models.Edition.objects.create( - title="Example Edition", parent_work=self.work + cls.work = models.Work.objects.create(title="Example Work") + cls.edition = models.Edition.objects.create( + title="Example Edition", parent_work=cls.work ) def test_valid_date(self): diff --git a/bookwyrm/tests/models/test_relationship_models.py b/bookwyrm/tests/models/test_relationship_models.py index dbb0ac8bb..ec9f751a4 100644 --- a/bookwyrm/tests/models/test_relationship_models.py +++ b/bookwyrm/tests/models/test_relationship_models.py @@ -15,10 +15,10 @@ class Relationship(TestCase): """following, blocking, stuff like that""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need some users for this""" with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -32,11 +32,11 @@ class Relationship(TestCase): patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) - self.local_user.remote_id = "http://local.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "http://local.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) def test_user_follows(self, *_): """basic functionality of user follows""" diff --git a/bookwyrm/tests/models/test_shelf_model.py b/bookwyrm/tests/models/test_shelf_model.py index 2d45dadbc..022cb5c61 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -16,18 +16,18 @@ class Shelf(TestCase): """some activitypub oddness ahead""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """look, a shelf""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create(title="test book", parent_work=work) + cls.book = models.Edition.objects.create(title="test book", parent_work=work) def test_remote_id(self, *_): """shelves use custom remote ids""" diff --git a/bookwyrm/tests/models/test_site.py b/bookwyrm/tests/models/test_site.py index 8cf15ad6f..0933dac0c 100644 --- a/bookwyrm/tests/models/test_site.py +++ b/bookwyrm/tests/models/test_site.py @@ -13,14 +13,14 @@ class SiteModels(TestCase): """tests for site models""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 32ccc2c57..bd2853595 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -25,18 +25,18 @@ class Status(TestCase): """lotta types of statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """useful things for creating a status""" 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( + cls.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -45,7 +45,7 @@ class Status(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.book = models.Edition.objects.create(title="Test Edition") + cls.book = models.Edition.objects.create(title="Test Edition") def setUp(self): """individual test setup""" diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index a47896269..22c7a171b 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -19,13 +19,13 @@ class User(TestCase): protocol = "https://" if USE_HTTPS else "http://" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( f"mouse@{DOMAIN}", "mouse@mouse.mouse", "mouseword", @@ -35,7 +35,7 @@ class User(TestCase): summary="a summary", bookwyrm_user=False, ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( f"nutria@{DOMAIN}", "nutria@nutria.nutria", "nutriaword", diff --git a/bookwyrm/tests/templatetags/test_book_display_tags.py b/bookwyrm/tests/templatetags/test_book_display_tags.py index 77d6fee54..40fa0f7d6 100644 --- a/bookwyrm/tests/templatetags/test_book_display_tags.py +++ b/bookwyrm/tests/templatetags/test_book_display_tags.py @@ -14,21 +14,21 @@ class BookDisplayTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse", ) - self.book = models.Edition.objects.create(title="Test Book") + cls.book = models.Edition.objects.create(title="Test Book") def test_get_book_description(self, *_): """grab it from the edition or the parent""" diff --git a/bookwyrm/tests/templatetags/test_feed_page_tags.py b/bookwyrm/tests/templatetags/test_feed_page_tags.py index 891bfc32c..7e3ba6a9f 100644 --- a/bookwyrm/tests/templatetags/test_feed_page_tags.py +++ b/bookwyrm/tests/templatetags/test_feed_page_tags.py @@ -13,21 +13,21 @@ class FeedPageTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse", ) - self.book = models.Edition.objects.create(title="Test Book") + cls.book = models.Edition.objects.create(title="Test Book") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") def test_load_subclass(self, *_): diff --git a/bookwyrm/tests/templatetags/test_interaction.py b/bookwyrm/tests/templatetags/test_interaction.py index bd66575ff..6d707ffac 100644 --- a/bookwyrm/tests/templatetags/test_interaction.py +++ b/bookwyrm/tests/templatetags/test_interaction.py @@ -13,14 +13,14 @@ class InteractionTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", @@ -28,14 +28,14 @@ class InteractionTags(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", remote_id="http://example.com/rat", local=False, ) - self.book = models.Edition.objects.create(title="Test Book") + cls.book = models.Edition.objects.create(title="Test Book") def test_get_user_liked(self, *_): """did a user like a status""" diff --git a/bookwyrm/tests/templatetags/test_notification_page_tags.py b/bookwyrm/tests/templatetags/test_notification_page_tags.py index df2805828..2d18a5ca7 100644 --- a/bookwyrm/tests/templatetags/test_notification_page_tags.py +++ b/bookwyrm/tests/templatetags/test_notification_page_tags.py @@ -13,14 +13,14 @@ class NotificationPageTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", diff --git a/bookwyrm/tests/templatetags/test_rating_tags.py b/bookwyrm/tests/templatetags/test_rating_tags.py index f50236262..cb28fd788 100644 --- a/bookwyrm/tests/templatetags/test_rating_tags.py +++ b/bookwyrm/tests/templatetags/test_rating_tags.py @@ -13,14 +13,14 @@ class RatingTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", @@ -28,7 +28,7 @@ class RatingTags(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", @@ -36,7 +36,7 @@ class RatingTags(TestCase): local=False, ) work = models.Work.objects.create(title="Work title") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Test Book", parent_work=work, ) diff --git a/bookwyrm/tests/templatetags/test_shelf_tags.py b/bookwyrm/tests/templatetags/test_shelf_tags.py index 47e86d9ef..8b3ec82d1 100644 --- a/bookwyrm/tests/templatetags/test_shelf_tags.py +++ b/bookwyrm/tests/templatetags/test_shelf_tags.py @@ -16,14 +16,14 @@ class ShelfTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", @@ -31,14 +31,14 @@ class ShelfTags(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", remote_id="http://example.com/rat", local=False, ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Test Book", parent_work=models.Work.objects.create(title="Test work"), ) diff --git a/bookwyrm/tests/templatetags/test_status_display.py b/bookwyrm/tests/templatetags/test_status_display.py index af125fd06..762f14ea8 100644 --- a/bookwyrm/tests/templatetags/test_status_display.py +++ b/bookwyrm/tests/templatetags/test_status_display.py @@ -15,14 +15,14 @@ class StatusDisplayTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", @@ -30,14 +30,14 @@ class StatusDisplayTags(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", remote_id="http://example.com/rat", local=False, ) - self.book = models.Edition.objects.create(title="Test Book") + cls.book = models.Edition.objects.create(title="Test Book") def test_get_mentions(self, *_): """list of people mentioned""" diff --git a/bookwyrm/tests/templatetags/test_utilities.py b/bookwyrm/tests/templatetags/test_utilities.py index 6fade22a7..bfd4f41ae 100644 --- a/bookwyrm/tests/templatetags/test_utilities.py +++ b/bookwyrm/tests/templatetags/test_utilities.py @@ -15,14 +15,14 @@ class UtilitiesTags(TestCase): """lotta different things here""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create some filler objects""" 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.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", "mouseword", @@ -30,15 +30,15 @@ class UtilitiesTags(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", remote_id="http://example.com/rat", local=False, ) - self.author = models.Author.objects.create(name="Jessica", isni="4") - self.book = models.Edition.objects.create(title="Test Book") + cls.author = models.Author.objects.create(name="Jessica", isni="4") + cls.book = models.Edition.objects.create(title="Test Book") def test_get_uuid(self, *_): """uuid functionality""" diff --git a/bookwyrm/tests/test_context_processors.py b/bookwyrm/tests/test_context_processors.py index e5290f312..7a58b05d8 100644 --- a/bookwyrm/tests/test_context_processors.py +++ b/bookwyrm/tests/test_context_processors.py @@ -12,23 +12,23 @@ class ContextProcessor(TestCase): """pages you land on without really trying""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.anonymous_user = AnonymousUser - self.anonymous_user.is_authenticated = False - self.site = models.SiteSettings.objects.create() + cls.anonymous_user = AnonymousUser + cls.anonymous_user.is_authenticated = False + cls.site = models.SiteSettings.objects.create() def setUp(self): """other test data""" diff --git a/bookwyrm/tests/test_emailing.py b/bookwyrm/tests/test_emailing.py index 8a5b543d5..c507a059f 100644 --- a/bookwyrm/tests/test_emailing.py +++ b/bookwyrm/tests/test_emailing.py @@ -12,14 +12,14 @@ class Emailing(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index 70f8e47cf..e41548bcf 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -36,24 +36,24 @@ class Signature(TestCase): """signature test""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create users and test data""" 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.mouse = models.User.objects.create_user( + cls.mouse = models.User.objects.create_user( f"mouse@{DOMAIN}", "mouse@example.com", "", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( f"rat@{DOMAIN}", "rat@example.com", "", local=True, localname="rat" ) - self.cat = models.User.objects.create_user( + cls.cat = models.User.objects.create_user( f"cat@{DOMAIN}", "cat@example.com", "", local=True, localname="cat" ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/admin/test_announcements.py b/bookwyrm/tests/views/admin/test_announcements.py index 958d78fc4..62fb86d16 100644 --- a/bookwyrm/tests/views/admin/test_announcements.py +++ b/bookwyrm/tests/views/admin/test_announcements.py @@ -12,14 +12,14 @@ class AnnouncementViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/admin/test_automod.py b/bookwyrm/tests/views/admin/test_automod.py index 332410eba..27f98163e 100644 --- a/bookwyrm/tests/views/admin/test_automod.py +++ b/bookwyrm/tests/views/admin/test_automod.py @@ -16,14 +16,14 @@ class AutomodViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -33,7 +33,7 @@ class AutomodViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/admin/test_celery.py b/bookwyrm/tests/views/admin/test_celery.py index 577d312b1..513d69944 100644 --- a/bookwyrm/tests/views/admin/test_celery.py +++ b/bookwyrm/tests/views/admin/test_celery.py @@ -15,14 +15,14 @@ class CeleryStatusViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,7 +32,7 @@ class CeleryStatusViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="admin") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/admin/test_dashboard.py b/bookwyrm/tests/views/admin/test_dashboard.py index a68b046e3..35fcb25a4 100644 --- a/bookwyrm/tests/views/admin/test_dashboard.py +++ b/bookwyrm/tests/views/admin/test_dashboard.py @@ -15,14 +15,14 @@ class DashboardViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,7 +32,7 @@ class DashboardViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/admin/test_email_blocks.py b/bookwyrm/tests/views/admin/test_email_blocks.py index b37166d3c..08a131c3a 100644 --- a/bookwyrm/tests/views/admin/test_email_blocks.py +++ b/bookwyrm/tests/views/admin/test_email_blocks.py @@ -15,14 +15,14 @@ class EmailBlocklistViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,7 +32,7 @@ class EmailBlocklistViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/admin/test_email_config.py b/bookwyrm/tests/views/admin/test_email_config.py index 374c2402e..22f4b7a05 100644 --- a/bookwyrm/tests/views/admin/test_email_config.py +++ b/bookwyrm/tests/views/admin/test_email_config.py @@ -15,14 +15,14 @@ class EmailConfigViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,7 +32,7 @@ class EmailConfigViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="admin") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/admin/test_federation.py b/bookwyrm/tests/views/admin/test_federation.py index 8244e8335..1d0012dde 100644 --- a/bookwyrm/tests/views/admin/test_federation.py +++ b/bookwyrm/tests/views/admin/test_federation.py @@ -18,14 +18,14 @@ class FederationViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -33,7 +33,7 @@ class FederationViews(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -45,7 +45,7 @@ class FederationViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/admin/test_imports.py b/bookwyrm/tests/views/admin/test_imports.py index acb769546..211407ff6 100644 --- a/bookwyrm/tests/views/admin/test_imports.py +++ b/bookwyrm/tests/views/admin/test_imports.py @@ -15,14 +15,14 @@ class ImportsAdminViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,7 +32,7 @@ class ImportsAdminViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="admin") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/admin/test_ip_blocklist.py b/bookwyrm/tests/views/admin/test_ip_blocklist.py index b34828622..491915eda 100644 --- a/bookwyrm/tests/views/admin/test_ip_blocklist.py +++ b/bookwyrm/tests/views/admin/test_ip_blocklist.py @@ -15,14 +15,14 @@ class IPBlocklistViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,7 +32,7 @@ class IPBlocklistViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/admin/test_link_domains.py b/bookwyrm/tests/views/admin/test_link_domains.py index fabb7511a..20d28896f 100644 --- a/bookwyrm/tests/views/admin/test_link_domains.py +++ b/bookwyrm/tests/views/admin/test_link_domains.py @@ -15,14 +15,14 @@ class LinkDomainViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,13 +32,13 @@ class LinkDomainViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) - self.book = models.Edition.objects.create(title="hello") + cls.book = models.Edition.objects.create(title="hello") models.FileLink.objects.create( - book=self.book, + book=cls.book, url="https://beep.com/book/1", - added_by=self.local_user, + added_by=cls.local_user, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/admin/test_reports.py b/bookwyrm/tests/views/admin/test_reports.py index 7ce665451..146e40a9b 100644 --- a/bookwyrm/tests/views/admin/test_reports.py +++ b/bookwyrm/tests/views/admin/test_reports.py @@ -16,21 +16,21 @@ class ReportViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@mouse.mouse", "password", @@ -40,7 +40,7 @@ class ReportViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/admin/test_site.py b/bookwyrm/tests/views/admin/test_site.py index ec5b07e3a..277bfbc85 100644 --- a/bookwyrm/tests/views/admin/test_site.py +++ b/bookwyrm/tests/views/admin/test_site.py @@ -15,14 +15,14 @@ class SiteSettingsViews(TestCase): """Edit site settings""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -32,9 +32,9 @@ class SiteSettingsViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="admin") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) - self.site = models.SiteSettings.objects.create() + cls.site = models.SiteSettings.objects.create() def setUp(self): """individual test setup""" diff --git a/bookwyrm/tests/views/admin/test_themes.py b/bookwyrm/tests/views/admin/test_themes.py index b931ea561..af46bf060 100644 --- a/bookwyrm/tests/views/admin/test_themes.py +++ b/bookwyrm/tests/views/admin/test_themes.py @@ -16,21 +16,21 @@ class AdminThemesViews(TestCase): """Edit site settings""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "rat@local.com", "rat@rat.rat", "password", @@ -40,9 +40,9 @@ class AdminThemesViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="admin") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) - self.site = models.SiteSettings.objects.create() + cls.site = models.SiteSettings.objects.create() def setUp(self): """individual test setup""" diff --git a/bookwyrm/tests/views/admin/test_user_admin.py b/bookwyrm/tests/views/admin/test_user_admin.py index 5247ff70f..48fd7202e 100644 --- a/bookwyrm/tests/views/admin/test_user_admin.py +++ b/bookwyrm/tests/views/admin/test_user_admin.py @@ -16,14 +16,14 @@ class UserAdminViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -33,7 +33,7 @@ class UserAdminViews(TestCase): initdb.init_groups() initdb.init_permissions() group = Group.objects.get(name="moderator") - self.local_user.groups.set([group]) + cls.local_user.groups.set([group]) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/books/test_book.py b/bookwyrm/tests/views/books/test_book.py index 68a114fb9..cb66811a1 100644 --- a/bookwyrm/tests/views/books/test_book.py +++ b/bookwyrm/tests/views/books/test_book.py @@ -24,14 +24,14 @@ class BookViews(TestCase): """books books books""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -39,19 +39,19 @@ class BookViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.group = Group.objects.create(name="editor") - self.group.permissions.add( + cls.group = Group.objects.create(name="editor") + cls.group.permissions.add( Permission.objects.create( name="edit_book", codename="edit_book", content_type=ContentType.objects.get_for_model(models.User), ).id ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/books/test_edit_book.py b/bookwyrm/tests/views/books/test_edit_book.py index 0bd962de5..05a4d68ac 100644 --- a/bookwyrm/tests/views/books/test_edit_book.py +++ b/bookwyrm/tests/views/books/test_edit_book.py @@ -20,14 +20,14 @@ class EditBookViews(TestCase): """books books books""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -35,19 +35,19 @@ class EditBookViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.group = Group.objects.create(name="editor") - self.group.permissions.add( + cls.group = Group.objects.create(name="editor") + cls.group.permissions.add( Permission.objects.create( name="edit_book", codename="edit_book", content_type=ContentType.objects.get_for_model(models.User), ).id ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/books/test_editions.py b/bookwyrm/tests/views/books/test_editions.py index b829d471b..ef7404e51 100644 --- a/bookwyrm/tests/views/books/test_editions.py +++ b/bookwyrm/tests/views/books/test_editions.py @@ -14,14 +14,14 @@ class BookViews(TestCase): """books books books""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -29,11 +29,11 @@ class BookViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, physical_format="paperback", ) diff --git a/bookwyrm/tests/views/books/test_links.py b/bookwyrm/tests/views/books/test_links.py index d1040a591..299dea484 100644 --- a/bookwyrm/tests/views/books/test_links.py +++ b/bookwyrm/tests/views/books/test_links.py @@ -16,13 +16,13 @@ class LinkViews(TestCase): """books books books""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" with ( patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch("bookwyrm.activitystreams.populate_stream_task.delay"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -38,13 +38,13 @@ class LinkViews(TestCase): content_type=ContentType.objects.get_for_model(models.User), ).id ) - self.local_user.groups.add(group) + cls.local_user.groups.add(group) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/imports/test_import.py b/bookwyrm/tests/views/imports/test_import.py index c3b2795b1..658d95a33 100644 --- a/bookwyrm/tests/views/imports/test_import.py +++ b/bookwyrm/tests/views/imports/test_import.py @@ -17,14 +17,14 @@ class ImportViews(TestCase): """goodreads import views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/imports/test_import_review.py b/bookwyrm/tests/views/imports/test_import_review.py index 5da02a56a..026efac11 100644 --- a/bookwyrm/tests/views/imports/test_import_review.py +++ b/bookwyrm/tests/views/imports/test_import_review.py @@ -12,14 +12,14 @@ class ImportManualReviewViews(TestCase): """goodreads import views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -27,10 +27,10 @@ class ImportManualReviewViews(TestCase): localname="mouse", ) models.SiteSettings.objects.create() - self.job = models.ImportJob.objects.create(user=self.local_user, mappings={}) + cls.job = models.ImportJob.objects.create(user=cls.local_user, mappings={}) work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/views/imports/test_import_troubleshoot.py b/bookwyrm/tests/views/imports/test_import_troubleshoot.py index 9ddc99785..2e76da373 100644 --- a/bookwyrm/tests/views/imports/test_import_troubleshoot.py +++ b/bookwyrm/tests/views/imports/test_import_troubleshoot.py @@ -13,14 +13,14 @@ class ImportTroubleshootViews(TestCase): """goodreads import views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/inbox/test_inbox.py b/bookwyrm/tests/views/inbox/test_inbox.py index af85e84d4..92ee8a43d 100644 --- a/bookwyrm/tests/views/inbox/test_inbox.py +++ b/bookwyrm/tests/views/inbox/test_inbox.py @@ -29,7 +29,7 @@ class Inbox(TestCase): } @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" with ( patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), @@ -46,7 +46,7 @@ class Inbox(TestCase): local_user.remote_id = "https://example.com/user/mouse" local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/views/inbox/test_inbox_add.py b/bookwyrm/tests/views/inbox/test_inbox_add.py index 2bd5faf6a..0a11053e4 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_add.py +++ b/bookwyrm/tests/views/inbox/test_inbox_add.py @@ -12,7 +12,7 @@ class InboxAdd(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" with ( patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), @@ -29,7 +29,7 @@ class InboxAdd(TestCase): local_user.remote_id = "https://example.com/user/mouse" local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -40,7 +40,7 @@ class InboxAdd(TestCase): ) work = models.Work.objects.create(title="work title") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Test", remote_id="https://example.com/book/37292", parent_work=work, diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py index d982a91c8..d499629a7 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_announce.py +++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py @@ -12,24 +12,24 @@ class InboxActivities(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -43,8 +43,8 @@ class InboxActivities(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.activitystreams.add_status_task.delay"), ): - self.status = models.Status.objects.create( - user=self.local_user, + cls.status = models.Status.objects.create( + user=cls.local_user, content="Test status", remote_id="https://example.com/status/1", ) diff --git a/bookwyrm/tests/views/inbox/test_inbox_block.py b/bookwyrm/tests/views/inbox/test_inbox_block.py index 9cdf7eba3..19b0eb97f 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_block.py +++ b/bookwyrm/tests/views/inbox/test_inbox_block.py @@ -11,24 +11,24 @@ class InboxBlock(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index 7f5be5b65..e8a3a8b12 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -74,24 +74,24 @@ class InboxCreate(TestCase): """readthrough tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/views/inbox/test_inbox_delete.py b/bookwyrm/tests/views/inbox/test_inbox_delete.py index 9c2b589e2..a72898857 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_delete.py +++ b/bookwyrm/tests/views/inbox/test_inbox_delete.py @@ -12,24 +12,24 @@ class InboxActivities(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -39,8 +39,8 @@ class InboxActivities(TestCase): outbox="https://example.com/users/rat/outbox", ) with patch("bookwyrm.activitystreams.add_status_task.delay"): - self.status = models.Status.objects.create( - user=self.remote_user, + cls.status = models.Status.objects.create( + user=cls.remote_user, content="Test status", remote_id="https://example.com/status/1", ) diff --git a/bookwyrm/tests/views/inbox/test_inbox_follow.py b/bookwyrm/tests/views/inbox/test_inbox_follow.py index 8ccffe1db..aad52937b 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_follow.py +++ b/bookwyrm/tests/views/inbox/test_inbox_follow.py @@ -12,24 +12,24 @@ class InboxRelationships(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/views/inbox/test_inbox_like.py b/bookwyrm/tests/views/inbox/test_inbox_like.py index 4efe4cb98..2ab8c4701 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_like.py +++ b/bookwyrm/tests/views/inbox/test_inbox_like.py @@ -11,24 +11,24 @@ class InboxActivities(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -42,8 +42,8 @@ class InboxActivities(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.activitystreams.add_status_task.delay"), ): - self.status = models.Status.objects.create( - user=self.local_user, + cls.status = models.Status.objects.create( + user=cls.local_user, content="Test status", remote_id="https://example.com/status/1", ) diff --git a/bookwyrm/tests/views/inbox/test_inbox_remove.py b/bookwyrm/tests/views/inbox/test_inbox_remove.py index f0be2b17a..ab92eb995 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_remove.py +++ b/bookwyrm/tests/views/inbox/test_inbox_remove.py @@ -11,24 +11,24 @@ class InboxRemove(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -38,11 +38,11 @@ class InboxRemove(TestCase): outbox="https://example.com/users/rat/outbox", ) - self.work = models.Work.objects.create(title="work title") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="work title") + cls.book = models.Edition.objects.create( title="Test", remote_id="https://bookwyrm.social/book/37292", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index fb2c85a88..99f4c2077 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -13,24 +13,24 @@ class InboxUpdate(TestCase): """inbox tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", local=True, localname="mouse", ) - self.local_user.remote_id = "https://example.com/user/mouse" - self.local_user.save(broadcast=False, update_fields=["remote_id"]) + cls.local_user.remote_id = "https://example.com/user/mouse" + cls.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/views/landing/test_invite.py b/bookwyrm/tests/views/landing/test_invite.py index 5a76f578b..8adc64f4f 100644 --- a/bookwyrm/tests/views/landing/test_invite.py +++ b/bookwyrm/tests/views/landing/test_invite.py @@ -15,14 +15,14 @@ class InviteViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/landing/test_landing.py b/bookwyrm/tests/views/landing/test_landing.py index c0581d893..c68c9cd53 100644 --- a/bookwyrm/tests/views/landing/test_landing.py +++ b/bookwyrm/tests/views/landing/test_landing.py @@ -15,14 +15,14 @@ class LandingViews(TestCase): """pages you land on without really trying""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/landing/test_login.py b/bookwyrm/tests/views/landing/test_login.py index 283890e3e..7d4a06612 100644 --- a/bookwyrm/tests/views/landing/test_login.py +++ b/bookwyrm/tests/views/landing/test_login.py @@ -18,14 +18,14 @@ class LoginViews(TestCase): """login and password management""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@your.domain.here", "mouse@mouse.com", "password", @@ -33,14 +33,14 @@ class LoginViews(TestCase): localname="mouse", two_factor_auth=False, ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@your.domain.here", "rat@rat.com", "password", local=True, localname="rat", ) - self.badger = models.User.objects.create_user( + cls.badger = models.User.objects.create_user( "badger@your.domain.here", "badger@badger.com", "password", diff --git a/bookwyrm/tests/views/landing/test_password.py b/bookwyrm/tests/views/landing/test_password.py index 8f322b3cb..ad3110b02 100644 --- a/bookwyrm/tests/views/landing/test_password.py +++ b/bookwyrm/tests/views/landing/test_password.py @@ -17,14 +17,14 @@ class PasswordViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "password", diff --git a/bookwyrm/tests/views/landing/test_register.py b/bookwyrm/tests/views/landing/test_register.py index 4b3d46673..7db6775db 100644 --- a/bookwyrm/tests/views/landing/test_register.py +++ b/bookwyrm/tests/views/landing/test_register.py @@ -21,21 +21,21 @@ class RegisterViews(TestCase): """login and password management""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@your.domain.here", "mouse@mouse.com", "password", local=True, localname="mouse", ) - self.settings = models.SiteSettings.objects.create( + cls.settings = models.SiteSettings.objects.create( id=1, require_confirm_email=False, allow_registration=True ) diff --git a/bookwyrm/tests/views/lists/test_curate.py b/bookwyrm/tests/views/lists/test_curate.py index 59d73cefd..af6116efa 100644 --- a/bookwyrm/tests/views/lists/test_curate.py +++ b/bookwyrm/tests/views/lists/test_curate.py @@ -16,14 +16,14 @@ class ListViews(TestCase): """list view""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -32,7 +32,7 @@ class ListViews(TestCase): remote_id="https://example.com/users/mouse", ) work = models.Work.objects.create(title="Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, @@ -42,9 +42,7 @@ class ListViews(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.lists_stream.remove_list_task.delay"), ): - self.list = models.List.objects.create( - name="Test List", user=self.local_user - ) + cls.list = models.List.objects.create(name="Test List", user=cls.local_user) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/lists/test_embed.py b/bookwyrm/tests/views/lists/test_embed.py index 9c1d3846d..2d2d5ec8c 100644 --- a/bookwyrm/tests/views/lists/test_embed.py +++ b/bookwyrm/tests/views/lists/test_embed.py @@ -16,14 +16,14 @@ class ListViews(TestCase): """list view""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -32,7 +32,7 @@ class ListViews(TestCase): remote_id="https://example.com/users/mouse", ) work = models.Work.objects.create(title="Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, @@ -42,9 +42,7 @@ class ListViews(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.lists_stream.remove_list_task.delay"), ): - self.list = models.List.objects.create( - name="Test List", user=self.local_user - ) + cls.list = models.List.objects.create(name="Test List", user=cls.local_user) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index dc144c134..6af9d1db1 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -19,14 +19,14 @@ class ListViews(TestCase): """list view""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -34,7 +34,7 @@ class ListViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@rat.com", "ratword", @@ -43,25 +43,25 @@ class ListViews(TestCase): remote_id="https://example.com/users/rat", ) work = models.Work.objects.create(title="Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, ) work_two = models.Work.objects.create(title="Labori") - self.book_two = models.Edition.objects.create( + cls.book_two = models.Edition.objects.create( title="Example Edition 2", remote_id="https://example.com/book/2", parent_work=work_two, ) work_three = models.Work.objects.create(title="Trabajar") - self.book_three = models.Edition.objects.create( + cls.book_three = models.Edition.objects.create( title="Example Edition 3", remote_id="https://example.com/book/3", parent_work=work_three, ) work_four = models.Work.objects.create(title="Travailler") - self.book_four = models.Edition.objects.create( + cls.book_four = models.Edition.objects.create( title="Example Edition 4", remote_id="https://example.com/book/4", parent_work=work_four, @@ -71,9 +71,7 @@ class ListViews(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.lists_stream.remove_list_task.delay"), ): - self.list = models.List.objects.create( - name="Test List", user=self.local_user - ) + cls.list = models.List.objects.create(name="Test List", user=cls.local_user) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/lists/test_list_item.py b/bookwyrm/tests/views/lists/test_list_item.py index e265d7ef5..e70eabf1b 100644 --- a/bookwyrm/tests/views/lists/test_list_item.py +++ b/bookwyrm/tests/views/lists/test_list_item.py @@ -13,14 +13,14 @@ class ListItemViews(TestCase): """list view""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -29,7 +29,7 @@ class ListItemViews(TestCase): remote_id="https://example.com/users/mouse", ) work = models.Work.objects.create(title="Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, @@ -38,9 +38,7 @@ class ListItemViews(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.lists_stream.remove_list_task.delay"), ): - self.list = models.List.objects.create( - name="Test List", user=self.local_user - ) + cls.list = models.List.objects.create(name="Test List", user=cls.local_user) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/lists/test_lists.py b/bookwyrm/tests/views/lists/test_lists.py index 88ea71360..069fd7008 100644 --- a/bookwyrm/tests/views/lists/test_lists.py +++ b/bookwyrm/tests/views/lists/test_lists.py @@ -16,14 +16,14 @@ class ListViews(TestCase): """lists of lists""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -31,7 +31,7 @@ class ListViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "rat@local.com", "rat@rat.com", "ratword", local=True, localname="rat" ) diff --git a/bookwyrm/tests/views/preferences/test_block.py b/bookwyrm/tests/views/preferences/test_block.py index bc39d2f62..e20888659 100644 --- a/bookwyrm/tests/views/preferences/test_block.py +++ b/bookwyrm/tests/views/preferences/test_block.py @@ -14,14 +14,14 @@ class BlockViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", @@ -29,7 +29,7 @@ class BlockViews(TestCase): localname="mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", diff --git a/bookwyrm/tests/views/preferences/test_change_password.py b/bookwyrm/tests/views/preferences/test_change_password.py index 1717204bd..75a17e462 100644 --- a/bookwyrm/tests/views/preferences/test_change_password.py +++ b/bookwyrm/tests/views/preferences/test_change_password.py @@ -13,14 +13,14 @@ class ChangePasswordViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "password", diff --git a/bookwyrm/tests/views/preferences/test_delete_user.py b/bookwyrm/tests/views/preferences/test_delete_user.py index 94d8c4a69..34ab52be4 100644 --- a/bookwyrm/tests/views/preferences/test_delete_user.py +++ b/bookwyrm/tests/views/preferences/test_delete_user.py @@ -17,21 +17,21 @@ class DeleteUserViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@your.domain.here", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@your.domain.here", "rat@rat.rat", "password", @@ -39,7 +39,7 @@ class DeleteUserViews(TestCase): localname="rat", ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) with ( @@ -47,9 +47,9 @@ class DeleteUserViews(TestCase): patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), ): models.ShelfBook.objects.create( - book=self.book, - user=self.local_user, - shelf=self.local_user.shelf_set.first(), + book=cls.book, + user=cls.local_user, + shelf=cls.local_user.shelf_set.first(), ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/preferences/test_edit_user.py b/bookwyrm/tests/views/preferences/test_edit_user.py index 4b83f3b80..7872e8f6e 100644 --- a/bookwyrm/tests/views/preferences/test_edit_user.py +++ b/bookwyrm/tests/views/preferences/test_edit_user.py @@ -19,25 +19,25 @@ class EditUserViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@rat.rat", "password", local=True, localname="rat" ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) with ( @@ -45,9 +45,9 @@ class EditUserViews(TestCase): patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), ): models.ShelfBook.objects.create( - book=self.book, - user=self.local_user, - shelf=self.local_user.shelf_set.first(), + book=cls.book, + user=cls.local_user, + shelf=cls.local_user.shelf_set.first(), ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/preferences/test_export.py b/bookwyrm/tests/views/preferences/test_export.py index 128b8fc8b..f125e9009 100644 --- a/bookwyrm/tests/views/preferences/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -18,15 +18,13 @@ class ExportViews(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData( - self, - ): # pylint: disable=bad-classmethod-argument, disable=invalid-name + def setUpTestData(cls): # pylint: disable=invalid-name """we need basic test data and mocks""" with ( patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch("bookwyrm.activitystreams.populate_stream_task.delay"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -34,11 +32,11 @@ class ExportViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, isbn_13="9781234567890", bnf_id="beep", ) diff --git a/bookwyrm/tests/views/preferences/test_two_factor_auth.py b/bookwyrm/tests/views/preferences/test_two_factor_auth.py index 8eb5e92c7..3b16236ed 100644 --- a/bookwyrm/tests/views/preferences/test_two_factor_auth.py +++ b/bookwyrm/tests/views/preferences/test_two_factor_auth.py @@ -18,14 +18,14 @@ class TwoFactorViews(TestCase): """Two Factor Authentication management""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@your.domain.here", "mouse@mouse.com", "password", diff --git a/bookwyrm/tests/views/shelf/test_shelf.py b/bookwyrm/tests/views/shelf/test_shelf.py index 57631974f..9c2b0a645 100644 --- a/bookwyrm/tests/views/shelf/test_shelf.py +++ b/bookwyrm/tests/views/shelf/test_shelf.py @@ -21,14 +21,14 @@ class ShelfViews(TestCase): """tag views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -36,15 +36,15 @@ class ShelfViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - self.shelf = models.Shelf.objects.create( - name="Test Shelf", identifier="test-shelf", user=self.local_user + cls.shelf = models.Shelf.objects.create( + name="Test Shelf", identifier="test-shelf", user=cls.local_user ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/shelf/test_shelf_actions.py b/bookwyrm/tests/views/shelf/test_shelf_actions.py index ee5854d18..d4727d9c5 100644 --- a/bookwyrm/tests/views/shelf/test_shelf_actions.py +++ b/bookwyrm/tests/views/shelf/test_shelf_actions.py @@ -19,14 +19,14 @@ class ShelfActionViews(TestCase): """tag views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -34,7 +34,7 @@ class ShelfActionViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "rat@local.com", "rat@rat.com", "ratword", @@ -42,15 +42,15 @@ class ShelfActionViews(TestCase): localname="rat", remote_id="https://example.com/users/rat", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - self.shelf = models.Shelf.objects.create( - name="Test Shelf", identifier="test-shelf", user=self.local_user + cls.shelf = models.Shelf.objects.create( + name="Test Shelf", identifier="test-shelf", user=cls.local_user ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_annual_summary.py b/bookwyrm/tests/views/test_annual_summary.py index 2fd7dc4eb..db8389fc6 100644 --- a/bookwyrm/tests/views/test_annual_summary.py +++ b/bookwyrm/tests/views/test_annual_summary.py @@ -22,14 +22,14 @@ class AnnualSummary(TestCase): """views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -38,11 +38,11 @@ class AnnualSummary(TestCase): remote_id="https://example.com/users/mouse", summary_keys={"2020": "0123456789"}, ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, pages=300, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_author.py b/bookwyrm/tests/views/test_author.py index bee057d0c..ed65fc30b 100644 --- a/bookwyrm/tests/views/test_author.py +++ b/bookwyrm/tests/views/test_author.py @@ -17,14 +17,14 @@ class AuthorViews(TestCase): """author views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -32,19 +32,19 @@ class AuthorViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.group = Group.objects.create(name="editor") - self.group.permissions.add( + cls.group = Group.objects.create(name="editor") + cls.group.permissions.add( Permission.objects.create( name="edit_book", codename="edit_book", content_type=ContentType.objects.get_for_model(models.User), ).id ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_directory.py b/bookwyrm/tests/views/test_directory.py index e2bef539e..a169551ac 100644 --- a/bookwyrm/tests/views/test_directory.py +++ b/bookwyrm/tests/views/test_directory.py @@ -14,14 +14,14 @@ class DirectoryViews(TestCase): """tag views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", diff --git a/bookwyrm/tests/views/test_discover.py b/bookwyrm/tests/views/test_discover.py index 937039592..15732b924 100644 --- a/bookwyrm/tests/views/test_discover.py +++ b/bookwyrm/tests/views/test_discover.py @@ -12,14 +12,14 @@ class DiscoverViews(TestCase): """pages you land on without really trying""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index fb2609575..a57be1023 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -25,28 +25,28 @@ class FeedViews(TestCase): """activity feed, statuses, dms""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "nutria@local.com", "nutria@nutria.nutria", "password", local=True, localname="nutria", ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( parent_work=models.Work.objects.create(title="hi"), title="Example Edition", remote_id="https://example.com/book/1", diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index 61a0a82ce..c26a9372a 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -18,7 +18,7 @@ class FollowViews(TestCase): """follows""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" models.SiteSettings.objects.create() with ( @@ -26,7 +26,7 @@ class FollowViews(TestCase): patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -35,7 +35,7 @@ class FollowViews(TestCase): remote_id="https://example.com/users/mouse", ) with patch("bookwyrm.models.user.set_remote_server"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@email.com", "ratword", @@ -44,19 +44,19 @@ class FollowViews(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.group = Group.objects.create(name="editor") - self.group.permissions.add( + cls.group = Group.objects.create(name="editor") + cls.group.permissions.add( Permission.objects.create( name="edit_book", codename="edit_book", content_type=ContentType.objects.get_for_model(models.User), ).id ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) def setUp(self): diff --git a/bookwyrm/tests/views/test_get_started.py b/bookwyrm/tests/views/test_get_started.py index 5d6aa8782..b33948c19 100644 --- a/bookwyrm/tests/views/test_get_started.py +++ b/bookwyrm/tests/views/test_get_started.py @@ -13,28 +13,28 @@ class GetStartedViews(TestCase): """helping new users get oriented""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "rat@local.com", "rat@rat.rat", "password", local=True, localname="rat", ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( parent_work=models.Work.objects.create(title="hi"), title="Example Edition", remote_id="https://example.com/book/1", diff --git a/bookwyrm/tests/views/test_goal.py b/bookwyrm/tests/views/test_goal.py index 49227457b..d682b727d 100644 --- a/bookwyrm/tests/views/test_goal.py +++ b/bookwyrm/tests/views/test_goal.py @@ -16,14 +16,14 @@ class GoalViews(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -31,7 +31,7 @@ class GoalViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@rat.com", "ratword", @@ -39,7 +39,7 @@ class GoalViews(TestCase): localname="rat", remote_id="https://example.com/users/rat", ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", ) diff --git a/bookwyrm/tests/views/test_group.py b/bookwyrm/tests/views/test_group.py index ca9284686..90223f74a 100644 --- a/bookwyrm/tests/views/test_group.py +++ b/bookwyrm/tests/views/test_group.py @@ -17,21 +17,21 @@ class GroupViews(TestCase): """view group and edit details""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@rat.rat", "password", @@ -39,14 +39,14 @@ class GroupViews(TestCase): localname="rat", ) - self.testgroup = models.Group.objects.create( + cls.testgroup = models.Group.objects.create( name="Test Group", description="Initial description", - user=self.local_user, + user=cls.local_user, privacy="public", ) - self.membership = models.GroupMember.objects.create( - group=self.testgroup, user=self.local_user + cls.membership = models.GroupMember.objects.create( + group=cls.testgroup, user=cls.local_user ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_hashtag.py b/bookwyrm/tests/views/test_hashtag.py index 5979238d8..d9679fe5a 100644 --- a/bookwyrm/tests/views/test_hashtag.py +++ b/bookwyrm/tests/views/test_hashtag.py @@ -15,13 +15,13 @@ class HashtagView(TestCase): """hashtag view""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -29,7 +29,7 @@ class HashtagView(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.follower_user = models.User.objects.create_user( + cls.follower_user = models.User.objects.create_user( "follower@local.com", "follower@email.com", "followerword", @@ -37,8 +37,8 @@ class HashtagView(TestCase): localname="follower", remote_id="https://example.com/users/follower", ) - self.local_user.followers.add(self.follower_user) - self.other_user = models.User.objects.create_user( + cls.local_user.followers.add(cls.follower_user) + cls.other_user = models.User.objects.create_user( "other@local.com", "other@email.com", "otherword", @@ -47,25 +47,25 @@ class HashtagView(TestCase): remote_id="https://example.com/users/other", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) - self.hashtag_bookclub = models.Hashtag.objects.create(name="#BookClub") + cls.hashtag_bookclub = models.Hashtag.objects.create(name="#BookClub") with ( patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.activitystreams.add_status_task.delay"), ): - self.statuses_bookclub = [ + cls.statuses_bookclub = [ models.Comment.objects.create( - book=self.book, user=self.local_user, content="#BookClub" + book=cls.book, user=cls.local_user, content="#BookClub" ), ] - for status in self.statuses_bookclub: - status.mention_hashtags.add(self.hashtag_bookclub) + for status in cls.statuses_bookclub: + status.mention_hashtags.add(cls.hashtag_bookclub) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index e00e1d234..818647db1 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -19,7 +19,7 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" with ( patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), @@ -27,7 +27,7 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods patch("bookwyrm.lists_stream.populate_lists_task.delay"), patch("bookwyrm.suggested_users.rerank_user_task.delay"), ): - self.local_user = models.User.objects.create_user( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -40,7 +40,7 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods patch("bookwyrm.models.user.set_remote_server.delay"), patch("bookwyrm.suggested_users.rerank_user_task.delay"), ): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -50,15 +50,15 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - self.shelf = models.Shelf.objects.create( - name="Test Shelf", identifier="test-shelf", user=self.local_user + cls.shelf = models.Shelf.objects.create( + name="Test Shelf", identifier="test-shelf", user=cls.local_user ) def setUp(self): diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py index 95d7b5791..d1533c451 100644 --- a/bookwyrm/tests/views/test_interaction.py +++ b/bookwyrm/tests/views/test_interaction.py @@ -13,14 +13,14 @@ class InteractionViews(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -29,7 +29,7 @@ class InteractionViews(TestCase): remote_id="https://example.com/users/mouse", ) with patch("bookwyrm.models.user.set_remote_server"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@email.com", "ratword", @@ -39,7 +39,7 @@ class InteractionViews(TestCase): outbox="https://example.com/users/rat/outbox", ) work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/views/test_isbn.py b/bookwyrm/tests/views/test_isbn.py index bb66c8f3e..632a831b0 100644 --- a/bookwyrm/tests/views/test_isbn.py +++ b/bookwyrm/tests/views/test_isbn.py @@ -15,14 +15,14 @@ class IsbnViews(TestCase): """tag views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -30,12 +30,12 @@ class IsbnViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Test Book", isbn_13="1234567890123", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_notifications.py b/bookwyrm/tests/views/test_notifications.py index c44940742..878a64c2c 100644 --- a/bookwyrm/tests/views/test_notifications.py +++ b/bookwyrm/tests/views/test_notifications.py @@ -13,27 +13,25 @@ class NotificationViews(TestCase): """notifications""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", local=True, localname="rat" ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - self.status = models.Status.objects.create( - content="hi", user=self.local_user - ) + cls.status = models.Status.objects.create(content="hi", user=cls.local_user) models.SiteSettings.objects.create() def setUp(self): diff --git a/bookwyrm/tests/views/test_outbox.py b/bookwyrm/tests/views/test_outbox.py index ca289db3f..b21d56c83 100644 --- a/bookwyrm/tests/views/test_outbox.py +++ b/bookwyrm/tests/views/test_outbox.py @@ -16,14 +16,14 @@ class OutboxView(TestCase): """sends out activities""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we'll need some data""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -32,7 +32,7 @@ class OutboxView(TestCase): remote_id="https://example.com/users/mouse", ) work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/views/test_reading.py b/bookwyrm/tests/views/test_reading.py index 39c611d6c..139d91820 100644 --- a/bookwyrm/tests/views/test_reading.py +++ b/bookwyrm/tests/views/test_reading.py @@ -16,14 +16,14 @@ class ReadingViews(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -32,7 +32,7 @@ class ReadingViews(TestCase): remote_id="https://example.com/users/mouse", ) with patch("bookwyrm.models.user.set_remote_server.delay"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -41,11 +41,11 @@ class ReadingViews(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) def setUp(self): diff --git a/bookwyrm/tests/views/test_readthrough.py b/bookwyrm/tests/views/test_readthrough.py index 113b3161d..c71ee6c58 100644 --- a/bookwyrm/tests/views/test_readthrough.py +++ b/bookwyrm/tests/views/test_readthrough.py @@ -16,12 +16,12 @@ class ReadThrough(TestCase): """readthrough tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """basic user and book data""" - self.work = models.Work.objects.create(title="Example Work") + cls.work = models.Work.objects.create(title="Example Work") - self.edition = models.Edition.objects.create( - title="Example Edition", parent_work=self.work + cls.edition = models.Edition.objects.create( + title="Example Edition", parent_work=cls.work ) with ( @@ -29,7 +29,7 @@ class ReadThrough(TestCase): patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): - self.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "cinco", "cinco@example.com", "seissiete", local=True, localname="cinco" ) diff --git a/bookwyrm/tests/views/test_report.py b/bookwyrm/tests/views/test_report.py index 65670dcbf..f07887bfe 100644 --- a/bookwyrm/tests/views/test_report.py +++ b/bookwyrm/tests/views/test_report.py @@ -12,21 +12,21 @@ class ReportViews(TestCase): """every response to a get request, html or json""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@mouse.mouse", "password", @@ -37,8 +37,8 @@ class ReportViews(TestCase): patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.activitystreams.add_status_task.delay"), ): - self.status = models.Status.objects.create( - user=self.local_user, + cls.status = models.Status.objects.create( + user=cls.local_user, content="Test status", ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_rss_feed.py b/bookwyrm/tests/views/test_rss_feed.py index af5ad5301..790efe51b 100644 --- a/bookwyrm/tests/views/test_rss_feed.py +++ b/bookwyrm/tests/views/test_rss_feed.py @@ -13,17 +13,17 @@ class RssFeedView(TestCase): """rss feed behaves as expected""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): 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( + cls.local_user = models.User.objects.create_user( "rss_user", "rss@test.rss", "password", local=True ) work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 5e06e6f81..64ff68ba8 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -18,14 +18,14 @@ class Views(TestCase): """tag views""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -33,11 +33,11 @@ class Views(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.work = models.Work.objects.create(title="Test Work") + cls.book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1", - parent_work=self.work, + parent_work=cls.work, ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index f5fe515f1..52582a235 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -77,14 +77,14 @@ class StatusViews(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", "mouseword", @@ -92,16 +92,16 @@ class StatusViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.another_user = models.User.objects.create_user( + cls.another_user = models.User.objects.create_user( f"nutria@{DOMAIN}", "nutria@nutria.com", "password", local=True, localname="nutria", ) - self.existing_hashtag = models.Hashtag.objects.create(name="#existing") + cls.existing_hashtag = models.Hashtag.objects.create(name="#existing") with patch("bookwyrm.models.user.set_remote_server"): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "rat", "rat@email.com", "ratword", @@ -111,7 +111,7 @@ class StatusViews(TestCase): outbox="https://example.com/users/rat/outbox", ) work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", parent_work=work, diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index 6f826b46f..7230f3324 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -13,14 +13,14 @@ class UpdateViews(TestCase): """lets the ui check for unread notification""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py index 4b49f120e..362d04feb 100644 --- a/bookwyrm/tests/views/test_user.py +++ b/bookwyrm/tests/views/test_user.py @@ -16,24 +16,24 @@ class UserViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", local=True, localname="mouse", ) - self.rat = models.User.objects.create_user( + cls.rat = models.User.objects.create_user( "rat@local.com", "rat@rat.rat", "password", local=True, localname="rat" ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) with ( @@ -42,9 +42,9 @@ class UserViews(TestCase): patch("bookwyrm.activitystreams.add_book_statuses_task.delay"), ): models.ShelfBook.objects.create( - book=self.book, - user=self.local_user, - shelf=self.local_user.shelf_set.first(), + book=cls.book, + user=cls.local_user, + shelf=cls.local_user.shelf_set.first(), ) models.SiteSettings.objects.create() diff --git a/bookwyrm/tests/views/test_wellknown.py b/bookwyrm/tests/views/test_wellknown.py index d8bf0d062..444d88d17 100644 --- a/bookwyrm/tests/views/test_wellknown.py +++ b/bookwyrm/tests/views/test_wellknown.py @@ -14,14 +14,14 @@ class WellknownViews(TestCase): """view user and edit profile""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" 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( + cls.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", "password", From 90bd8935689274aa9b3c54a1eb1f509309ae004a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 17 Mar 2024 21:00:48 -0300 Subject: [PATCH 358/458] Fix remaining instances of `bad-classmethod-argument` --- bookwyrm/tests/activitypub/test_author.py | 6 +++--- bookwyrm/tests/activitypub/test_quotation.py | 6 +++--- .../tests/connectors/test_abstract_connector.py | 4 ++-- .../test_abstract_minimal_connector.py | 4 ++-- .../tests/connectors/test_bookwyrm_connector.py | 2 +- .../tests/connectors/test_connector_manager.py | 12 ++++++------ .../connectors/test_openlibrary_connector.py | 2 +- bookwyrm/tests/models/test_book_model.py | 12 ++++++------ bookwyrm/tests/test_book_search.py | 16 ++++++++-------- bookwyrm/tests/views/test_setup.py | 4 ++-- 10 files changed, 34 insertions(+), 34 deletions(-) diff --git a/bookwyrm/tests/activitypub/test_author.py b/bookwyrm/tests/activitypub/test_author.py index 7579909a8..7f21e570c 100644 --- a/bookwyrm/tests/activitypub/test_author.py +++ b/bookwyrm/tests/activitypub/test_author.py @@ -7,13 +7,13 @@ class Author(TestCase): """serialize author tests""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """initial data""" - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", ) - self.author = models.Author.objects.create( + cls.author = models.Author.objects.create( name="Author fullname", aliases=["One", "Two"], bio="bio bio bio", diff --git a/bookwyrm/tests/activitypub/test_quotation.py b/bookwyrm/tests/activitypub/test_quotation.py index 9a0867c52..50aeb5834 100644 --- a/bookwyrm/tests/activitypub/test_quotation.py +++ b/bookwyrm/tests/activitypub/test_quotation.py @@ -11,10 +11,10 @@ class Quotation(TestCase): """we have hecka ways to create statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """model objects we'll need""" with patch("bookwyrm.models.user.set_remote_server.delay"): - self.user = models.User.objects.create_user( + cls.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", @@ -23,7 +23,7 @@ class Quotation(TestCase): outbox="https://example.com/user/mouse/outbox", remote_id="https://example.com/user/mouse", ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Example Edition", remote_id="https://example.com/book/1", ) diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index b43966d6a..994286994 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -13,7 +13,7 @@ class AbstractConnector(TestCase): """generic code for connecting to outside data sources""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need an example connector in the database""" models.Connector.objects.create( identifier="example.com", @@ -23,7 +23,7 @@ class AbstractConnector(TestCase): covers_url="https://example.com/covers", search_url="https://example.com/search?q=", ) - self.book = models.Edition.objects.create( + cls.book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1234", openlibrary_key="OL1234M", diff --git a/bookwyrm/tests/connectors/test_abstract_minimal_connector.py b/bookwyrm/tests/connectors/test_abstract_minimal_connector.py index 73399649e..cbbecf652 100644 --- a/bookwyrm/tests/connectors/test_abstract_minimal_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_minimal_connector.py @@ -10,9 +10,9 @@ class AbstractConnector(TestCase): """generic code for connecting to outside data sources""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need an example connector in the database""" - self.connector_info = models.Connector.objects.create( + cls.connector_info = models.Connector.objects.create( identifier="example.com", connector_file="openlibrary", base_url="https://example.com", diff --git a/bookwyrm/tests/connectors/test_bookwyrm_connector.py b/bookwyrm/tests/connectors/test_bookwyrm_connector.py index 553901655..9a909aa8a 100644 --- a/bookwyrm/tests/connectors/test_bookwyrm_connector.py +++ b/bookwyrm/tests/connectors/test_bookwyrm_connector.py @@ -12,7 +12,7 @@ class BookWyrmConnector(TestCase): """this connector doesn't do much, just search""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """create bookwrym_connector in the database""" models.Connector.objects.create( identifier="example.com", diff --git a/bookwyrm/tests/connectors/test_connector_manager.py b/bookwyrm/tests/connectors/test_connector_manager.py index cc01f1116..7c9512ced 100644 --- a/bookwyrm/tests/connectors/test_connector_manager.py +++ b/bookwyrm/tests/connectors/test_connector_manager.py @@ -11,18 +11,18 @@ class ConnectorManager(TestCase): """interface between the app and various connectors""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we'll need some books and a connector info entry""" - self.work = models.Work.objects.create(title="Example Work") + cls.work = models.Work.objects.create(title="Example Work") models.Edition.objects.create( - title="Example Edition", parent_work=self.work, isbn_10="0000000000" + title="Example Edition", parent_work=cls.work, isbn_10="0000000000" ) - self.edition = models.Edition.objects.create( - title="Another Edition", parent_work=self.work, isbn_10="1111111111" + cls.edition = models.Edition.objects.create( + title="Another Edition", parent_work=cls.work, isbn_10="1111111111" ) - self.remote_connector = models.Connector.objects.create( + cls.remote_connector = models.Connector.objects.create( identifier="test_connector_remote", priority=1, connector_file="bookwyrm_connector", diff --git a/bookwyrm/tests/connectors/test_openlibrary_connector.py b/bookwyrm/tests/connectors/test_openlibrary_connector.py index 487356400..72bac4244 100644 --- a/bookwyrm/tests/connectors/test_openlibrary_connector.py +++ b/bookwyrm/tests/connectors/test_openlibrary_connector.py @@ -19,7 +19,7 @@ class Openlibrary(TestCase): """test loading data from openlibrary.org""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """creates the connector in the database""" models.Connector.objects.create( identifier="openlibrary.org", diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index c6b854180..c40c94294 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -19,17 +19,17 @@ class Book(TestCase): """not too much going on in the books model but here we are""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we'll need some books""" - self.work = models.Work.objects.create( + cls.work = models.Work.objects.create( title="Example Work", remote_id="https://example.com/book/1" ) - self.first_edition = models.Edition.objects.create( - title="Example Edition", parent_work=self.work + cls.first_edition = models.Edition.objects.create( + title="Example Edition", parent_work=cls.work ) - self.second_edition = models.Edition.objects.create( + cls.second_edition = models.Edition.objects.create( title="Another Example Edition", - parent_work=self.work, + parent_work=cls.work, ) def test_remote_id(self): diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index d2056bfeb..4663d1cdc 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -11,27 +11,27 @@ class BookSearch(TestCase): """look for some books""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" - self.work = models.Work.objects.create(title="Example Work") + cls.work = models.Work.objects.create(title="Example Work") - self.first_edition = models.Edition.objects.create( + cls.first_edition = models.Edition.objects.create( title="Example Edition", - parent_work=self.work, + parent_work=cls.work, isbn_10="0000000000", physical_format="Paperback", published_date=datetime.datetime(2019, 4, 9, 0, 0, tzinfo=timezone.utc), ) - self.second_edition = models.Edition.objects.create( + cls.second_edition = models.Edition.objects.create( title="Another Edition", - parent_work=self.work, + parent_work=cls.work, isbn_10="1111111111", openlibrary_key="hello", pages=150, ) - self.third_edition = models.Edition.objects.create( + cls.third_edition = models.Edition.objects.create( title="Another Edition with annoying ISBN", - parent_work=self.work, + parent_work=cls.work, isbn_10="022222222X", ) diff --git a/bookwyrm/tests/views/test_setup.py b/bookwyrm/tests/views/test_setup.py index d2bdba340..7547b5646 100644 --- a/bookwyrm/tests/views/test_setup.py +++ b/bookwyrm/tests/views/test_setup.py @@ -14,9 +14,9 @@ class SetupViews(TestCase): """activity feed, statuses, dms""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" - self.site = models.SiteSettings.objects.create(install_mode=True) + cls.site = models.SiteSettings.objects.create(install_mode=True) def setUp(self): """individual test setup""" From beb49af51492e310c433eb4ed23bb947fc52787e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 17 Mar 2024 21:46:34 -0300 Subject: [PATCH 359/458] Upgade django-pgtrigger to 4.11 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 05fd9d2b4..90ff18edb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ django-celery-beat==2.4.0 django-compressor==4.3.1 django-imagekit==4.1.0 django-model-utils==4.3.1 -django-pgtrigger==4.10.0 +django-pgtrigger==4.11.0 django-sass-processor==1.2.2 django-csp==3.7 environs==9.5.0 From 2cf7ed477df2dddefa899a0feaca9e917f2b4738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Sun, 17 Mar 2024 22:37:28 -0300 Subject: [PATCH 360/458] Consolidate test_posgres.py into test_book_search.py These are tests I missed when first writing trigger tests in test_book_search.py. --- bookwyrm/tests/test_book_search.py | 60 ++++++++++++++++++++++- bookwyrm/tests/test_postgres.py | 77 ------------------------------ 2 files changed, 58 insertions(+), 79 deletions(-) delete mode 100644 bookwyrm/tests/test_postgres.py diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index 439d2edbf..0721cb142 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -184,11 +184,67 @@ class SearchVectorTest(TestCase): book = self._create_book("Hear We Come", "John") self.assertEqual(book.search_vector, "'come':3A 'hear':1A 'john':4C") + book = self._create_book("there there", "the") + self.assertEqual(book.search_vector, "'the':3C 'there':1A,2A") + def test_search_vector_no_author(self): """book with no authors gets processed normally""" book = self._create_book("Book", None, series="Bunch") self.assertEqual(book.search_vector, "'book':1A 'bunch':2") + book = self._create_book("there there", None) + self.assertEqual(book.search_vector, "'there':1A,2A") + + # n.b.: the following originally from test_posgres.py + + def test_search_vector_on_update(self): + """make sure that search_vector is being set correctly on edit""" + book = self._create_book("The Long Goodbye", None) + self.assertEqual(book.search_vector, "'goodby':3A 'long':2A") + + book.title = "The Even Longer Goodbye" + book.save(broadcast=False) + book.refresh_from_db() + self.assertEqual(book.search_vector, "'even':2A 'goodby':4A 'longer':3A") + + def test_search_vector_on_author_update(self): + """update search when an author name changes""" + book = self._create_book("The Long Goodbye", "The Rays") + self.assertEqual(book.search_vector, "'goodby':3A 'long':2A 'rays':5C 'the':4C") + + author = models.Author.objects.get(name="The Rays") + author.name = "Jeremy" + author.save(broadcast=False) + book.refresh_from_db() + self.assertEqual(book.search_vector, "'goodby':3A 'jeremy':4C 'long':2A") + + def test_search_vector_on_author_delete(self): + """update search when an author is deleted""" + book = self._create_book("The Long Goodbye", "The Rays") + self.assertEqual(book.search_vector, "'goodby':3A 'long':2A 'rays':5C 'the':4C") + + author = models.Author.objects.get(name="The Rays") + book.authors.remove(author) + book.refresh_from_db() + self.assertEqual(book.search_vector, "'goodby':3A 'long':2A") + + def test_search_vector_fields(self): + """language field irrelevant for search_vector""" + author = models.Author.objects.create(name="The Rays") + book = models.Edition.objects.create( + title="The Long Goodbye", + subtitle="wow cool", + series="series name", + languages=["irrelevant"], + ) + book.authors.add(author) + book.refresh_from_db() + self.assertEqual( + book.search_vector, + # pylint: disable-next=line-too-long + "'cool':5B 'goodby':3A 'long':2A 'name':9 'rays':7C 'seri':8 'the':6C 'wow':4B", + ) + @staticmethod def _create_book( title, author_name, /, *, subtitle="", series="", author_alias=None @@ -212,8 +268,8 @@ class SearchVectorTest(TestCase): return edition -class SearchVectorTriggers(TestCase): - """look for books as they change""" +class SearchVectorUpdates(TestCase): + """look for books as they change""" # functional tests of the above def setUp(self): """we need basic test data and mocks""" diff --git a/bookwyrm/tests/test_postgres.py b/bookwyrm/tests/test_postgres.py deleted file mode 100644 index 8fc3c9d59..000000000 --- a/bookwyrm/tests/test_postgres.py +++ /dev/null @@ -1,77 +0,0 @@ -""" django configuration of postgres """ -from unittest.mock import patch -from django.test import TestCase - -from bookwyrm import models - - -@patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") -class PostgresTriggers(TestCase): - """special migrations, fancy stuff ya know""" - - def test_search_vector_on_create(self, _): - """make sure that search_vector is being set correctly on create""" - book = models.Edition.objects.create(title="The Long Goodbye") - book.refresh_from_db() - self.assertEqual(book.search_vector, "'goodby':3A 'long':2A") - - def test_search_vector_on_update(self, _): - """make sure that search_vector is being set correctly on edit""" - book = models.Edition.objects.create(title="The Long Goodbye") - book.title = "The Even Longer Goodbye" - book.save(broadcast=False) - book.refresh_from_db() - self.assertEqual(book.search_vector, "'even':2A 'goodby':4A 'longer':3A") - - def test_search_vector_fields(self, _): - """use multiple fields to create search vector""" - author = models.Author.objects.create(name="The Rays") - book = models.Edition.objects.create( - title="The Long Goodbye", - subtitle="wow cool", - series="series name", - languages=["irrelevant"], - ) - book.authors.add(author) - book.refresh_from_db() - # pylint: disable=line-too-long - self.assertEqual( - book.search_vector, - "'cool':5B 'goodby':3A 'long':2A 'name':9 'rays':7C 'seri':8 'the':6C 'wow':4B", - ) - - def test_search_vector_on_author_update(self, _): - """update search when an author name changes""" - author = models.Author.objects.create(name="The Rays") - book = models.Edition.objects.create( - title="The Long Goodbye", - ) - book.authors.add(author) - author.name = "Jeremy" - author.save(broadcast=False) - book.refresh_from_db() - - self.assertEqual(book.search_vector, "'goodby':3A 'jeremy':4C 'long':2A") - - def test_search_vector_on_author_delete(self, _): - """update search when an author name changes""" - author = models.Author.objects.create(name="Jeremy") - book = models.Edition.objects.create( - title="The Long Goodbye", - ) - - book.authors.add(author) - book.refresh_from_db() - self.assertEqual(book.search_vector, "'goodby':3A 'jeremy':4C 'long':2A") - - book.authors.remove(author) - book.refresh_from_db() - self.assertEqual(book.search_vector, "'goodby':3A 'long':2A") - - def test_search_vector_stop_word_fallback(self, _): - """use a fallback when removing stop words leads to an empty vector""" - book = models.Edition.objects.create( - title="there there", - ) - book.refresh_from_db() - self.assertEqual(book.search_vector, "'there':1A,2A") From a6dc5bd13fff79f7ba55a170f784c047e15c09d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 18 Mar 2024 14:56:29 -0300 Subject: [PATCH 361/458] Make `get_file_size` robust against typing errors --- bookwyrm/templatetags/utilities.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index df5b5ab30..fb2113de4 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -130,10 +130,14 @@ def id_to_username(user_id): @register.filter(name="get_file_size") -def get_file_size(raw_size): +def get_file_size(nbytes): """display the size of a file in human readable terms""" try: + raw_size = float(nbytes) + except (ValueError, TypeError): + return repr(nbytes) + else: if raw_size < 1024: return f"{raw_size} bytes" if raw_size < 1024**2: @@ -142,10 +146,6 @@ def get_file_size(raw_size): return f"{raw_size/1024**2:.2f} MB" return f"{raw_size/1024**3:.2f} GB" - except Exception as error: # pylint: disable=broad-except - print(error) - return "" - @register.filter(name="get_user_permission") def get_user_permission(user): From 3be227fc86c104ccc115bc373b92bf7ef4a8d371 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 22:00:54 +0000 Subject: [PATCH 362/458] Bump pillow from 10.0.1 to 10.2.0 Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.0.1 to 10.2.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/10.0.1...10.2.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c769916a2..d59a62c98 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ opentelemetry-instrumentation-celery==0.37b0 opentelemetry-instrumentation-django==0.37b0 opentelemetry-instrumentation-psycopg2==0.37b0 opentelemetry-sdk==1.16.0 -Pillow==10.0.1 +Pillow==10.2.0 protobuf==3.20.* psycopg2==2.9.5 pycryptodome==3.19.1 From ccf2b16d735679cb3349e449612b61d1b9141676 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 19:52:40 +0100 Subject: [PATCH 363/458] requirements.txt: make typing-Pillow match Pillow --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d59a62c98..5e8611076 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,7 +53,7 @@ pytidylib==0.3.2 types-bleach==6.0.0.4 types-dataclasses==0.6.6 types-Markdown==3.4.2.10 -types-Pillow==10.0.0.3 +types-Pillow==10.2.0.20240311 types-psycopg2==2.9.21.11 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From 748418590fa4bbfd20615a2114c00e322ce8b581 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 20:22:14 +0100 Subject: [PATCH 364/458] docker-compose.yml: mount static_volume for flower Because flower also uses BookwyrmConfig, it wants to download fonts, and will download them to an incorrect location if the static_volume is not mounted. --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 4d4037681..2cb9007da 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -91,6 +91,7 @@ services: env_file: .env volumes: - .:/app + - static_volume:/app/static networks: - main depends_on: From 3367b20965d44b5f2724250491e0b54c84fc3769 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 20:23:26 +0100 Subject: [PATCH 365/458] Font download: destination dir is allowed to exist Without this argument, an existing directory (but not the file) causes an error. --- bookwyrm/apps.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index b0c3e3fa4..5a9f45db5 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -1,4 +1,5 @@ """Do further startup configuration and initialization""" + import os import urllib import logging @@ -14,7 +15,7 @@ def download_file(url, destination): """Downloads a file to the given path""" try: # Ensure our destination directory exists - os.makedirs(os.path.dirname(destination)) + os.makedirs(os.path.dirname(destination), exist_ok=True) with urllib.request.urlopen(url) as stream: with open(destination, "b+w") as outfile: outfile.write(stream.read()) From 7690247ab43db55e309a357494802c3ec724c0a6 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 20:24:02 +0100 Subject: [PATCH 366/458] Font download: log the exact error --- bookwyrm/apps.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bookwyrm/apps.py b/bookwyrm/apps.py index 5a9f45db5..41b1a17a2 100644 --- a/bookwyrm/apps.py +++ b/bookwyrm/apps.py @@ -19,12 +19,12 @@ def download_file(url, destination): with urllib.request.urlopen(url) as stream: with open(destination, "b+w") as outfile: outfile.write(stream.read()) - except (urllib.error.HTTPError, urllib.error.URLError): - logger.info("Failed to download file %s", url) - except OSError: - logger.info("Couldn't open font file %s for writing", destination) - except: # pylint: disable=bare-except - logger.info("Unknown error in file download") + except (urllib.error.HTTPError, urllib.error.URLError) as err: + logger.error("Failed to download file %s: %s", url, err) + except OSError as err: + logger.error("Couldn't open font file %s for writing: %s", destination, err) + except Exception as err: # pylint:disable=broad-except + logger.error("Unknown error in file download: %s", err) class BookwyrmConfig(AppConfig): From 864304f128fc897348342ba83506441469e8fe53 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 21:01:20 +0100 Subject: [PATCH 367/458] docker-compose.yml: make all bind mounts read only Except dev-tools, since it needs to be able to change the source. --- docker-compose.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4d4037681..6b68d6826 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: networks: - main volumes: - - ./nginx:/etc/nginx/conf.d + - ./nginx:/etc/nginx/conf.d:ro - static_volume:/app/static - media_volume:/app/images db: @@ -26,7 +26,7 @@ services: env_file: .env command: python manage.py runserver 0.0.0.0:8000 volumes: - - .:/app + - .:/app:ro - static_volume:/app/static - media_volume:/app/images depends_on: @@ -41,7 +41,7 @@ services: image: redis:7.2.1 command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT} volumes: - - ./redis.conf:/etc/redis/redis.conf + - ./redis.conf:/etc/redis/redis.conf:ro - redis_activity_data:/data env_file: .env networks: @@ -51,7 +51,7 @@ services: image: redis:7.2.1 command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT} volumes: - - ./redis.conf:/etc/redis/redis.conf + - ./redis.conf:/etc/redis/redis.conf:ro - redis_broker_data:/data env_file: .env networks: @@ -63,9 +63,8 @@ services: networks: - main command: celery -A celerywyrm worker -l info -Q high_priority,medium_priority,low_priority,streams,images,suggested_users,email,connectors,lists,inbox,imports,import_triggered,broadcast,misc - volumes: - - .:/app + - .:/app:ro - static_volume:/app/static - media_volume:/app/images depends_on: @@ -79,7 +78,7 @@ services: - main command: celery -A celerywyrm beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler volumes: - - .:/app + - .:/app:ro - static_volume:/app/static - media_volume:/app/images depends_on: @@ -90,7 +89,7 @@ services: command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD} --url_prefix=flower env_file: .env volumes: - - .:/app + - .:/app:ro networks: - main depends_on: @@ -102,7 +101,7 @@ services: env_file: .env volumes: - /app/dev-tools/ - - .:/app + - .:/app:rw volumes: pgdata: static_volume: From 68cb94daf2e81ed755a4b04f73034e4a3f77d1be Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 21:02:06 +0100 Subject: [PATCH 368/458] docker-compose.yml: don't automatically start dev-tools by assigning profile --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 6b68d6826..9e2cd67ba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -102,6 +102,8 @@ services: volumes: - /app/dev-tools/ - .:/app:rw + profiles: + - tools volumes: pgdata: static_volume: From 4d23edddca5692d7ef66f8b66b88e6f3bc061008 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 21:04:34 +0100 Subject: [PATCH 369/458] Make sure /images/ and /static/ exist now that the bind mount is read only Otherwise the static_volume and media_volume can't be mounted there. --- .gitignore | 1 + images/.gitkeep | 0 static/.gitkeep | 0 3 files changed, 1 insertion(+) create mode 100644 images/.gitkeep create mode 100644 static/.gitkeep diff --git a/.gitignore b/.gitignore index ec2a08f80..755375b34 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ # BookWyrm .env /images/ +/static/ bookwyrm/static/css/bookwyrm.css bookwyrm/static/css/themes/ !bookwyrm/static/css/themes/bookwyrm-*.scss diff --git a/images/.gitkeep b/images/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/static/.gitkeep b/static/.gitkeep new file mode 100644 index 000000000..e69de29bb From 47afe34d9767ad7895b7eb72bc4cd88f99eeb148 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 21:48:21 +0000 Subject: [PATCH 370/458] Bump django from 3.2.24 to 3.2.25 Bumps [django](https://github.com/django/django) from 3.2.24 to 3.2.25. - [Commits](https://github.com/django/django/compare/3.2.24...3.2.25) --- updated-dependencies: - dependency-name: django dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c769916a2..3c0406acd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ boto3==1.26.57 bw-file-resubmit==0.6.0rc2 celery==5.3.1 colorthief==0.2.1 -Django==3.2.24 +Django==3.2.25 django-celery-beat==2.5.0 django-compressor==4.4 django-csp==3.7 From f423834bd0d8bd54afa29f56fd60459ac7209b67 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 18 Mar 2024 20:06:12 +0100 Subject: [PATCH 371/458] Catch the correct exception type from Pillow --- bookwyrm/preview_images.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bookwyrm/preview_images.py b/bookwyrm/preview_images.py index aba372abc..995f25bfd 100644 --- a/bookwyrm/preview_images.py +++ b/bookwyrm/preview_images.py @@ -1,4 +1,5 @@ """ Generate social media preview images for twitter/mastodon/etc """ + import math import os import textwrap @@ -42,8 +43,8 @@ def get_imagefont(name, size): return ImageFont.truetype(path, size) except KeyError: logger.error("Font %s not found in config", name) - except OSError: - logger.error("Could not load font %s from file", name) + except OSError as err: + logger.error("Could not load font %s from file: %s", name, err) return ImageFont.load_default() @@ -59,7 +60,7 @@ def get_font(weight, size=28): font.set_variation_by_name("Bold") if weight == "regular": font.set_variation_by_name("Regular") - except AttributeError: + except OSError: pass return font From 6a87713f9f4f1c6dd9ad169f967b1335692e203a Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 20 Mar 2024 11:45:12 +0100 Subject: [PATCH 372/458] Recalculate all book search vectors after fixing the author trigger --- .../0191_migrate_search_vec_triggers_to_pgtriggers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py index 5e798b654..03442298f 100644 --- a/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py +++ b/bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py @@ -67,4 +67,10 @@ class Migration(migrations.Migration): """, reverse_sql=author_search_vector_trigger.sql, ), + migrations.RunSQL( + # Recalculate book search vector for any missed author name changes + # due to bug in JOIN in the old trigger. + sql="UPDATE bookwyrm_book SET search_vector = NULL;", + reverse_sql=migrations.RunSQL.noop, + ), ] From e13e4237f49e1079eb0190898c4b45b53399bcf9 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 20 Mar 2024 12:24:54 +0100 Subject: [PATCH 373/458] black: specify required-version This ensures consistent formatting among different contributors / development setups. https://black.readthedocs.io/en/stable/usage_and_configuration/the_basics.html#required-version --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..292ca8c41 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.black] +required-version = "22" From ab430e020824f08ca15fe3e0da824d9c5865d5c4 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 20 Mar 2024 12:43:14 +0100 Subject: [PATCH 374/458] requirements.txt: add black This way, IDEs can be set up to use the black version from the environment instead of a globally available/bundled black version. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 82b7bc8c8..6b3d838bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -41,6 +41,7 @@ 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 +black==22.* celery-types==0.18.0 django-stubs[compatible-mypy]==4.2.4 mypy==1.5.1 From b5b9eddaf0a8336cf9766c901811022713fb78a6 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 20 Mar 2024 12:46:37 +0100 Subject: [PATCH 375/458] CI: relax black version constraints --- .github/workflows/python.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index dcbe05aee..01241b467 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -94,6 +94,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 - - uses: psf/black@22.12.0 + - uses: psf/black@stable with: - version: 22.12.0 + version: "22.*" From 682bb3b62fb6ed53daf374376c9bd91f30295809 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 21 Mar 2024 16:25:29 +0100 Subject: [PATCH 376/458] dev-tools: relax black version constraint --- dev-tools/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-tools/requirements.txt b/dev-tools/requirements.txt index a69d319ab..3bb771f5a 100644 --- a/dev-tools/requirements.txt +++ b/dev-tools/requirements.txt @@ -1 +1 @@ -black==22.12.0 +black==22.* From c3d25c59c51431cf7d5a2700b842a07410dd8936 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 21 Mar 2024 16:48:28 +0100 Subject: [PATCH 377/458] Escape search query in generated URLs Otherwise, a query containing '&' or other special characters results in a broken URL. --- bookwyrm/templates/search/book.html | 2 +- bookwyrm/templates/search/layout.html | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bookwyrm/templates/search/book.html b/bookwyrm/templates/search/book.html index 262dcf2f9..b93c96754 100644 --- a/bookwyrm/templates/search/book.html +++ b/bookwyrm/templates/search/book.html @@ -109,7 +109,7 @@

    {% if request.user.is_authenticated %} {% if not remote %} - + {% trans "Load results from other catalogues" %} {% else %} diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index 725a4f43f..59ea0304e 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -41,18 +41,18 @@

    From a914a44fba28defec6fefcbf90deee828176ddf5 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 23 Mar 2024 07:54:54 -0700 Subject: [PATCH 378/458] Removes unnecessary redeclaration of wikidata model field in Author --- bookwyrm/models/author.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index b32d49d54..981e3c0cc 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -18,9 +18,6 @@ class Author(BookDataModel): wikipedia_link = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) - wikidata = fields.CharField( - max_length=255, blank=True, null=True, deduplication_field=True - ) isni = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) From 2de35f3fc7ef1a1418ed4638cce89d2b7dfae999 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 20 Mar 2024 16:14:26 +0100 Subject: [PATCH 379/458] Calculate Author search vector with name and aliases --- .../migrations/0197_author_search_vector.py | 41 +++++++++++++++++++ bookwyrm/models/author.py | 21 +++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 bookwyrm/migrations/0197_author_search_vector.py diff --git a/bookwyrm/migrations/0197_author_search_vector.py b/bookwyrm/migrations/0197_author_search_vector.py new file mode 100644 index 000000000..baa540cc0 --- /dev/null +++ b/bookwyrm/migrations/0197_author_search_vector.py @@ -0,0 +1,41 @@ +# Generated by Django 3.2.25 on 2024-03-20 15:15 + +import django.contrib.postgres.indexes +from django.db import migrations +import pgtrigger.compiler +import pgtrigger.migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0196_merge_pr3134_into_main"), + ] + + operations = [ + migrations.AddIndex( + model_name="author", + index=django.contrib.postgres.indexes.GinIndex( + fields=["search_vector"], name="bookwyrm_au_search__b050a8_gin" + ), + ), + pgtrigger.migrations.AddTrigger( + model_name="author", + trigger=pgtrigger.compiler.Trigger( + name="update_search_vector_on_author_edit", + sql=pgtrigger.compiler.UpsertTriggerSql( + func="new.search_vector := setweight(to_tsvector('simple', new.name), 'A') || setweight(to_tsvector('simple', coalesce(array_to_string(new.aliases, ' '), '')), 'B');RETURN NEW;", + hash="b97919016236d74d0ade51a0769a173ea269da64", + operation='INSERT OR UPDATE OF "name", "aliases", "search_vector"', + pgid="pgtrigger_update_search_vector_on_author_edit_c61cb", + table="bookwyrm_author", + when="BEFORE", + ), + ), + ), + migrations.RunSQL( + # Calculate search vector for all Authors. + sql="UPDATE bookwyrm_author SET search_vector = NULL;", + reverse_sql="UPDATE bookwyrm_author SET search_vector = NULL;", + ), + ] diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 154b00ccb..9c3621c3d 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -3,6 +3,7 @@ import re from typing import Tuple, Any from django.db import models +from django.contrib.postgres.indexes import GinIndex import pgtrigger from bookwyrm import activitypub @@ -71,7 +72,25 @@ class Author(BookDataModel): class Meta: """sets up indexes and triggers""" + # pylint: disable=line-too-long + + indexes = (GinIndex(fields=["search_vector"]),) triggers = [ + pgtrigger.Trigger( + name="update_search_vector_on_author_edit", + when=pgtrigger.Before, + operation=pgtrigger.Insert + | pgtrigger.UpdateOf("name", "aliases", "search_vector"), + func=format_trigger( + """new.search_vector := + -- author name, with priority A + setweight(to_tsvector('simple', new.name), 'A') || + -- author aliases, with priority B + setweight(to_tsvector('simple', coalesce(array_to_string(new.aliases, ' '), '')), 'B'); + RETURN new; + """ + ), + ), pgtrigger.Trigger( name="reset_search_vector_on_author_edit", when=pgtrigger.After, @@ -89,7 +108,7 @@ class Author(BookDataModel): RETURN new; """ ), - ) + ), ] activity_serializer = activitypub.Author From 0795b4d171c135e2832bb81f574150703adc1f3b Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 20 Mar 2024 16:18:55 +0100 Subject: [PATCH 380/458] Include Author aliases in Book search vector --- .../0198_book_search_vector_author_aliases.py | 57 +++++++++++++++++++ bookwyrm/models/author.py | 4 +- bookwyrm/models/book.py | 46 +++++++++------ 3 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 bookwyrm/migrations/0198_book_search_vector_author_aliases.py diff --git a/bookwyrm/migrations/0198_book_search_vector_author_aliases.py b/bookwyrm/migrations/0198_book_search_vector_author_aliases.py new file mode 100644 index 000000000..491cb64bb --- /dev/null +++ b/bookwyrm/migrations/0198_book_search_vector_author_aliases.py @@ -0,0 +1,57 @@ +# Generated by Django 3.2.25 on 2024-03-20 15:52 + +from django.db import migrations +import pgtrigger.compiler +import pgtrigger.migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0197_author_search_vector"), + ] + + operations = [ + pgtrigger.migrations.RemoveTrigger( + model_name="author", + name="reset_search_vector_on_author_edit", + ), + pgtrigger.migrations.RemoveTrigger( + model_name="book", + name="update_search_vector_on_book_edit", + ), + pgtrigger.migrations.AddTrigger( + model_name="author", + trigger=pgtrigger.compiler.Trigger( + name="reset_book_search_vector_on_author_edit", + sql=pgtrigger.compiler.UpsertTriggerSql( + func="WITH updated_books AS (SELECT book_id FROM bookwyrm_book_authors WHERE author_id = new.id ) UPDATE bookwyrm_book SET search_vector = '' FROM updated_books WHERE id = updated_books.book_id;RETURN NEW;", + hash="68422c0f29879c5802b82159dde45297eff53e73", + operation='UPDATE OF "name", "aliases"', + pgid="pgtrigger_reset_book_search_vector_on_author_edit_a50c7", + table="bookwyrm_author", + when="AFTER", + ), + ), + ), + pgtrigger.migrations.AddTrigger( + model_name="book", + trigger=pgtrigger.compiler.Trigger( + name="update_search_vector_on_book_edit", + sql=pgtrigger.compiler.UpsertTriggerSql( + func="WITH author_names AS (SELECT array_to_string(bookwyrm_author.name || bookwyrm_author.aliases, ' ') AS name_and_aliases FROM bookwyrm_author LEFT JOIN bookwyrm_book_authors ON bookwyrm_author.id = bookwyrm_book_authors.author_id WHERE bookwyrm_book_authors.book_id = new.id ) SELECT setweight(coalesce(nullif(to_tsvector('english', new.title), ''), to_tsvector('simple', new.title)), 'A') || setweight(to_tsvector('english', coalesce(new.subtitle, '')), 'B') || (SELECT setweight(to_tsvector('simple', coalesce(array_to_string(array_agg(name_and_aliases), ' '), '')), 'C') FROM author_names) || setweight(to_tsvector('english', coalesce(new.series, '')), 'D') INTO new.search_vector;RETURN NEW;", + hash="9324f5ca76a6f5e63931881d62d11da11f595b2c", + operation='INSERT OR UPDATE OF "title", "subtitle", "series", "search_vector"', + pgid="pgtrigger_update_search_vector_on_book_edit_bec58", + table="bookwyrm_book", + when="BEFORE", + ), + ), + ), + migrations.RunSQL( + # Recalculate search vector for all Books because it now includes + # Author aliases. + sql="UPDATE bookwyrm_book SET search_vector = NULL;", + reverse_sql="UPDATE bookwyrm_book SET search_vector = NULL;", + ), + ] diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 9c3621c3d..9dc3962ad 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -92,9 +92,9 @@ class Author(BookDataModel): ), ), pgtrigger.Trigger( - name="reset_search_vector_on_author_edit", + name="reset_book_search_vector_on_author_edit", when=pgtrigger.After, - operation=pgtrigger.UpdateOf("name"), + operation=pgtrigger.UpdateOf("name", "aliases"), func=format_trigger( """WITH updated_books AS ( SELECT book_id diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index e167e2138..5dba6532f 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -246,24 +246,34 @@ class Book(BookDataModel): operation=pgtrigger.Insert | pgtrigger.UpdateOf("title", "subtitle", "series", "search_vector"), func=format_trigger( - """new.search_vector := - -- title, with priority A (parse in English, default to simple if empty) - setweight(COALESCE(nullif( - to_tsvector('english', new.title), ''), - to_tsvector('simple', new.title)), 'A') || - -- subtitle, with priority B (always in English?) - setweight(to_tsvector('english', COALESCE(new.subtitle, '')), 'B') || - -- list of authors, with priority C (TODO: add aliases?, bookwyrm-social#3063) - (SELECT setweight(to_tsvector('simple', COALESCE(array_to_string(ARRAY_AGG(bookwyrm_author.name), ' '), '')), 'C') - FROM bookwyrm_author - LEFT JOIN bookwyrm_book_authors - ON bookwyrm_author.id = bookwyrm_book_authors.author_id - WHERE bookwyrm_book_authors.book_id = new.id - ) || - --- last: series name, with lowest priority - setweight(to_tsvector('english', COALESCE(new.series, '')), 'D'); - RETURN new; - """ + """ + WITH author_names AS ( + SELECT array_to_string(bookwyrm_author.name || bookwyrm_author.aliases, ' ') AS name_and_aliases + FROM bookwyrm_author + LEFT JOIN bookwyrm_book_authors + ON bookwyrm_author.id = bookwyrm_book_authors.author_id + WHERE bookwyrm_book_authors.book_id = new.id + ) + SELECT + -- title, with priority A (parse in English, default to simple if empty) + setweight(COALESCE(nullif( + to_tsvector('english', new.title), ''), + to_tsvector('simple', new.title)), 'A') || + + -- subtitle, with priority B (always in English?) + setweight(to_tsvector('english', COALESCE(new.subtitle, '')), 'B') || + + -- list of authors names and aliases (with priority C) + (SELECT setweight(to_tsvector('simple', COALESCE(array_to_string(ARRAY_AGG(name_and_aliases), ' '), '')), 'C') + FROM author_names + ) || + + --- last: series name, with lowest priority + setweight(to_tsvector('english', COALESCE(new.series, '')), 'D') + + INTO new.search_vector; + RETURN new; + """ ), ) ] From 36222afa7995e19e6daf6cb4523039d140adf4af Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 19 Mar 2024 13:12:45 +0100 Subject: [PATCH 381/458] Switch author search from TrigramSimilarity to SearchQuery --- bookwyrm/views/search.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index e1598056f..13695a7d4 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -2,8 +2,9 @@ import re -from django.contrib.postgres.search import TrigramSimilarity +from django.contrib.postgres.search import TrigramSimilarity, SearchRank, SearchQuery from django.core.paginator import Paginator +from django.db.models import F from django.db.models.functions import Greatest from django.http import JsonResponse from django.template.response import TemplateResponse @@ -94,26 +95,28 @@ def book_search(request): def author_search(request): """search for an author""" - query = request.GET.get("q") - query = query.strip() - data = {"type": "author", "query": query} + query = request.GET.get("q").strip() + search_query = SearchQuery(query, config="simple") + min_confidence = 0 results = ( - models.Author.objects.annotate( - similarity=TrigramSimilarity("name", query), - ) - .filter( - similarity__gt=0.1, - ) - .order_by("-similarity") + models.Author.objects.filter(search_vector=search_query) + .annotate(rank=SearchRank(F("search_vector"), search_query)) + .filter(rank__gt=min_confidence) + .order_by("-rank") ) paginated = Paginator(results, PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) - data["results"] = page - data["page_range"] = paginated.get_elided_page_range( - page.number, on_each_side=2, on_ends=1 - ) + + data = { + "type": "author", + "query": query, + "results": page, + "page_range": paginated.get_elided_page_range( + page.number, on_each_side=2, on_ends=1 + ), + } return TemplateResponse(request, "search/author.html", data) From 769d9726e5cfb69ab8dcaa173dc1bcb062a29db0 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Fri, 22 Mar 2024 21:43:28 +0100 Subject: [PATCH 382/458] Add book search test cases for author aliases --- bookwyrm/tests/test_book_search.py | 57 ++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/bookwyrm/tests/test_book_search.py b/bookwyrm/tests/test_book_search.py index 0721cb142..b8c1ee1d3 100644 --- a/bookwyrm/tests/test_book_search.py +++ b/bookwyrm/tests/test_book_search.py @@ -14,6 +14,13 @@ class BookSearch(TestCase): @classmethod def setUpTestData(self): # pylint: disable=bad-classmethod-argument """we need basic test data and mocks""" + self.first_author = models.Author.objects.create( + name="Author One", aliases=["The First"] + ) + self.second_author = models.Author.objects.create( + name="Author Two", aliases=["The Second"] + ) + self.work = models.Work.objects.create(title="Example Work") self.first_edition = models.Edition.objects.create( @@ -23,6 +30,8 @@ class BookSearch(TestCase): physical_format="Paperback", published_date=datetime.datetime(2019, 4, 9, 0, 0, tzinfo=timezone.utc), ) + self.first_edition.authors.add(self.first_author) + self.second_edition = models.Edition.objects.create( title="Another Edition", parent_work=self.work, @@ -30,19 +39,34 @@ class BookSearch(TestCase): openlibrary_key="hello", pages=150, ) + self.second_edition.authors.add(self.first_author) + self.second_edition.authors.add(self.second_author) + self.third_edition = models.Edition.objects.create( title="Another Edition with annoying ISBN", parent_work=self.work, isbn_10="022222222X", ) + self.third_edition.authors.add(self.first_author) + self.third_edition.authors.add(self.second_author) def test_search(self): """search for a book in the db""" - # title/author + # title results = book_search.search("Example") self.assertEqual(len(results), 1) self.assertEqual(results[0], self.first_edition) + # author + results = book_search.search("One") + self.assertEqual(len(results), 1) + self.assertEqual(results[0], self.first_edition) + + # author alias + results = book_search.search("First") + self.assertEqual(len(results), 1) + self.assertEqual(results[0], self.first_edition) + # isbn results = book_search.search("0000000000") self.assertEqual(len(results), 1) @@ -155,8 +179,17 @@ class SearchVectorTest(TestCase): """search vector with subtitle and series""" # for a book like this we call `to_tsvector("Book Long Mary Bunch")`, hence the # indexes in the search vector. (priority "D" is the default, and never shown.) - book = self._create_book("Book", "Mary", subtitle="Long", series="Bunch") - self.assertEqual(book.search_vector, "'book':1A 'bunch':4 'long':2B 'mary':3C") + book = self._create_book( + "Book", + "Mary", + subtitle="Long", + series="Bunch", + author_alias=["Maria", "Mary Ann"], + ) + self.assertEqual( + book.search_vector, + "'ann':6C 'book':1A 'bunch':7 'long':2B 'maria':4C 'mary':3C,5C", + ) def test_search_vector_parse_book(self): """book parts are parsed in english""" @@ -170,8 +203,8 @@ class SearchVectorTest(TestCase): def test_search_vector_parse_author(self): """author name is not stem'd or affected by stop words""" - book = self._create_book("Writing", "Writes") - self.assertEqual(book.search_vector, "'write':1A 'writes':2C") + book = self._create_book("Writing", "Writes", author_alias=["Reads"]) + self.assertEqual(book.search_vector, "'reads':3C 'write':1A 'writes':2C") book = self._create_book("She Is Writing", "She Writes") self.assertEqual(book.search_vector, "'she':4C 'write':3A 'writes':5C") @@ -218,6 +251,13 @@ class SearchVectorTest(TestCase): book.refresh_from_db() self.assertEqual(book.search_vector, "'goodby':3A 'jeremy':4C 'long':2A") + author.aliases = ["Example"] + author.save(broadcast=False) + book.refresh_from_db() + self.assertEqual( + book.search_vector, "'example':5C 'goodby':3A 'jeremy':4C 'long':2A" + ) + def test_search_vector_on_author_delete(self): """update search when an author is deleted""" book = self._create_book("The Long Goodbye", "The Rays") @@ -274,7 +314,7 @@ class SearchVectorUpdates(TestCase): def setUp(self): """we need basic test data and mocks""" self.work = models.Work.objects.create(title="This Work") - self.author = models.Author.objects.create(name="Name") + self.author = models.Author.objects.create(name="Name", aliases=["Alias"]) self.edition = models.Edition.objects.create( title="First Edition of Work", subtitle="Some Extra Words Are Good", @@ -363,13 +403,18 @@ class SearchVectorUpdates(TestCase): def test_search_after_updated_author_name(self): """book found under new author name""" self.assertEqual(self.edition, self._search_first("Name")) + self.assertEqual(self.edition, self._search_first("Alias")) self.assertFalse(self._search("Identifier")) + self.assertFalse(self._search("Another")) self.author.name = "Identifier" + self.author.aliases = ["Another"] self.author.save(broadcast=False) self.assertFalse(self._search("Name")) + self.assertFalse(self._search("Aliases")) self.assertEqual(self.edition, self._search_first("Identifier")) + self.assertEqual(self.edition, self._search_first("Another")) self.assertEqual(self.edition, self._search_first("Work")) def _search_first(self, query): From b8995bd4b1bbb0f26eb0a6751fec1a8622389223 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Fri, 22 Mar 2024 22:06:19 +0100 Subject: [PATCH 383/458] Add tests for author search --- bookwyrm/tests/test_author_search.py | 87 ++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 bookwyrm/tests/test_author_search.py diff --git a/bookwyrm/tests/test_author_search.py b/bookwyrm/tests/test_author_search.py new file mode 100644 index 000000000..e6b20a2c6 --- /dev/null +++ b/bookwyrm/tests/test_author_search.py @@ -0,0 +1,87 @@ +""" test searching for authors """ +from django.test import TestCase + +from django.contrib.postgres.search import SearchRank, SearchQuery +from django.db.models import F + +from bookwyrm import models + + +class AuthorSearch(TestCase): + """look for some authors""" + + @classmethod + def setUpTestData(cls): + """we need basic test data and mocks""" + cls.bob = models.Author.objects.create( + name="Bob", aliases=["Robertus", "Alice"] + ) + cls.alice = models.Author.objects.create(name="Alice") + + def test_search(self): + """search for an author in the db""" + results = self._search("Bob") + self.assertEqual(len(results), 1) + self.assertEqual(results[0], self.bob) + + def test_alias_priority(self): + """aliases should be included, with lower priority than name""" + results = self._search("Alice") + self.assertEqual(len(results), 2) + self.assertEqual(results[0], self.alice) + + def _search_first(self, query): + """wrapper around search_title_author""" + return self._search(query, return_first=True) + + @staticmethod + def _search(query, *, return_first=False): + """author search""" + search_query = SearchQuery(query, config="simple") + min_confidence = 0 + + results = ( + models.Author.objects.filter(search_vector=search_query) + .annotate(rank=SearchRank(F("search_vector"), search_query)) + .filter(rank__gt=min_confidence) + .order_by("-rank") + ) + if return_first: + return results.first() + return results + + +class SearchVectorTest(TestCase): + """check search_vector is computed correctly""" + + def test_search_vector_simple(self): + """simplest search vector""" + author = self._create_author("Mary") + self.assertEqual(author.search_vector, "'mary':1A") + + def test_search_vector_aliases(self): + """author aliases should be included with lower priority""" + author = self._create_author("Mary", aliases=["Maria", "Example"]) + self.assertEqual(author.search_vector, "'example':3B 'maria':2B 'mary':1A") + + def test_search_vector_parse_author(self): + """author name and alias is not stem'd or affected by stop words""" + author = self._create_author("Writes", aliases=["Reads"]) + self.assertEqual(author.search_vector, "'reads':2B 'writes':1A") + + def test_search_vector_on_update(self): + """make sure that search_vector is being set correctly on edit""" + author = self._create_author("Mary") + self.assertEqual(author.search_vector, "'mary':1A") + + author.name = "Example" + author.save(broadcast=False) + author.refresh_from_db() + self.assertEqual(author.search_vector, "'example':1A") + + @staticmethod + def _create_author(name, /, *, aliases=None): + """quickly create an author""" + author = models.Author.objects.create(name=name, aliases=aliases or []) + author.refresh_from_db() + return author From b3753ab6dac5e872f612cd10c3aa9d396ee8ed63 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 28 Feb 2024 22:31:41 +0100 Subject: [PATCH 384/458] Add MergedBookDataModel --- .../0197_mergedauthor_mergedbook.py | 48 +++++++++++++++++++ bookwyrm/models/book.py | 39 +++++++++++++-- 2 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 bookwyrm/migrations/0197_mergedauthor_mergedbook.py diff --git a/bookwyrm/migrations/0197_mergedauthor_mergedbook.py b/bookwyrm/migrations/0197_mergedauthor_mergedbook.py new file mode 100644 index 000000000..23ca38ab2 --- /dev/null +++ b/bookwyrm/migrations/0197_mergedauthor_mergedbook.py @@ -0,0 +1,48 @@ +# Generated by Django 3.2.24 on 2024-02-28 21:30 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0196_merge_pr3134_into_main"), + ] + + operations = [ + migrations.CreateModel( + name="MergedBook", + fields=[ + ("deleted_id", models.IntegerField(primary_key=True, serialize=False)), + ( + "merged_into", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="absorbed", + to="bookwyrm.book", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.CreateModel( + name="MergedAuthor", + fields=[ + ("deleted_id", models.IntegerField(primary_key=True, serialize=False)), + ( + "merged_into", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="absorbed", + to="bookwyrm.author", + ), + ), + ], + options={ + "abstract": False, + }, + ), + ] diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index e167e2138..7a4a8addb 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -1,4 +1,5 @@ """ database schema for books and shelves """ + from itertools import chain import re from typing import Any @@ -192,9 +193,13 @@ class Book(BookDataModel): """properties of this edition, as a string""" items = [ self.physical_format if hasattr(self, "physical_format") else None, - f"{self.languages[0]} language" - if self.languages and self.languages[0] and self.languages[0] != "English" - else None, + ( + f"{self.languages[0]} language" + if self.languages + and self.languages[0] + and self.languages[0] != "English" + else None + ), str(self.published_date.year) if self.published_date else None, ", ".join(self.publishers) if hasattr(self, "publishers") else None, ] @@ -451,6 +456,34 @@ class Edition(Book): return queryset +class MergedBookDataModel(models.Model): + """a BookDataModel instance that has been merged into another instance. kept + to be able to redirect old URLs""" + + deleted_id = models.IntegerField(primary_key=True) + + class Meta: + """abstract just like BookDataModel""" + + abstract = True + + +class MergedAuthor(MergedBookDataModel): + """an Author that has been merged into another one""" + + merged_into = models.ForeignKey( + "Author", on_delete=models.PROTECT, related_name="absorbed" + ) + + +class MergedBook(MergedBookDataModel): + """an Book that has been merged into another one""" + + merged_into = models.ForeignKey( + "Book", on_delete=models.PROTECT, related_name="absorbed" + ) + + def isbn_10_to_13(isbn_10): """convert an isbn 10 into an isbn 13""" isbn_10 = re.sub(r"[^0-9X]", "", isbn_10) From 5e123972e88b751217c82564c7f447dbdc69b48d Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 22 Feb 2024 10:27:38 +0100 Subject: [PATCH 385/458] BookDataModel: implement merge_into method --- .../commands/deduplicate_book_data.py | 17 +-- bookwyrm/management/merge.py | 50 -------- bookwyrm/management/merge_command.py | 3 +- bookwyrm/models/author.py | 5 +- bookwyrm/models/book.py | 110 +++++++++++++----- 5 files changed, 95 insertions(+), 90 deletions(-) delete mode 100644 bookwyrm/management/merge.py diff --git a/bookwyrm/management/commands/deduplicate_book_data.py b/bookwyrm/management/commands/deduplicate_book_data.py index dde7d133c..d2f4ef936 100644 --- a/bookwyrm/management/commands/deduplicate_book_data.py +++ b/bookwyrm/management/commands/deduplicate_book_data.py @@ -1,13 +1,14 @@ """ PROCEED WITH CAUTION: uses deduplication fields to permanently merge book data objects """ + from django.core.management.base import BaseCommand from django.db.models import Count from bookwyrm import models -from bookwyrm.management.merge import merge_objects def dedupe_model(model): """combine duplicate editions and update related models""" + print(f"deduplicating {model.__name__}:") fields = model._meta.get_fields() dedupe_fields = [ f for f in fields if hasattr(f, "deduplication_field") and f.deduplication_field @@ -16,27 +17,27 @@ def dedupe_model(model): dupes = ( model.objects.values(field.name) .annotate(Count(field.name)) - .filter(**{"%s__count__gt" % field.name: 1}) + .filter(**{f"{field.name}__count__gt": 1}) + .exclude(**{field.name: ""}) + .exclude(**{f"{field.name}__isnull": True}) ) for dupe in dupes: value = dupe[field.name] - if not value or value == "": - continue print("----------") - print(dupe) objs = model.objects.filter(**{field.name: value}).order_by("id") canonical = objs.first() - print("keeping", canonical.remote_id) + print(f"merging into {canonical.remote_id} based on {field.name} {value}:") for obj in objs[1:]: - print(obj.remote_id) - merge_objects(canonical, obj) + print(f"- {obj.remote_id}") + obj.merge_into(canonical) class Command(BaseCommand): """deduplicate allllll the book data models""" help = "merges duplicate book data" + # pylint: disable=no-self-use,unused-argument def handle(self, *args, **options): """run deduplications""" diff --git a/bookwyrm/management/merge.py b/bookwyrm/management/merge.py deleted file mode 100644 index f55229f18..000000000 --- a/bookwyrm/management/merge.py +++ /dev/null @@ -1,50 +0,0 @@ -from django.db.models import ManyToManyField - - -def update_related(canonical, obj): - """update all the models with fk to the object being removed""" - # move related models to canonical - related_models = [ - (r.remote_field.name, r.related_model) for r in canonical._meta.related_objects - ] - for (related_field, related_model) in related_models: - # Skip the ManyToMany fields that arenā€™t auto-created. These - # should have a corresponding OneToMany field in the model for - # the linking table anyway. If we update it through that model - # instead then we wonā€™t lose the extra fields in the linking - # table. - related_field_obj = related_model._meta.get_field(related_field) - if isinstance(related_field_obj, ManyToManyField): - through = related_field_obj.remote_field.through - if not through._meta.auto_created: - continue - related_objs = related_model.objects.filter(**{related_field: obj}) - for related_obj in related_objs: - print("replacing in", related_model.__name__, related_field, related_obj.id) - try: - setattr(related_obj, related_field, canonical) - related_obj.save() - except TypeError: - getattr(related_obj, related_field).add(canonical) - getattr(related_obj, related_field).remove(obj) - - -def copy_data(canonical, obj): - """try to get the most data possible""" - for data_field in obj._meta.get_fields(): - if not hasattr(data_field, "activitypub_field"): - continue - data_value = getattr(obj, data_field.name) - if not data_value: - continue - if not getattr(canonical, data_field.name): - print("setting data field", data_field.name, data_value) - setattr(canonical, data_field.name, data_value) - canonical.save() - - -def merge_objects(canonical, obj): - copy_data(canonical, obj) - update_related(canonical, obj) - # remove the outdated entry - obj.delete() diff --git a/bookwyrm/management/merge_command.py b/bookwyrm/management/merge_command.py index 805dc73fa..2f3f90c86 100644 --- a/bookwyrm/management/merge_command.py +++ b/bookwyrm/management/merge_command.py @@ -1,4 +1,3 @@ -from bookwyrm.management.merge import merge_objects from django.core.management.base import BaseCommand @@ -26,4 +25,4 @@ class MergeCommand(BaseCommand): print("other book doesnā€™t exist!") return - merge_objects(canonical, other) + other.merge_into(canonical) diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 154b00ccb..7f40f562c 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -1,4 +1,5 @@ """ database schema for info about authors """ + import re from typing import Tuple, Any @@ -9,13 +10,15 @@ from bookwyrm import activitypub from bookwyrm.settings import DOMAIN from bookwyrm.utils.db import format_trigger -from .book import BookDataModel +from .book import BookDataModel, MergedAuthor from . import fields class Author(BookDataModel): """basic biographic info""" + merged_model = MergedAuthor + wikipedia_link = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 7a4a8addb..c7235a3f5 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -3,12 +3,13 @@ from itertools import chain import re from typing import Any +from typing_extensions import Self from django.contrib.postgres.search import SearchVectorField from django.contrib.postgres.indexes import GinIndex from django.core.cache import cache from django.db import models, transaction -from django.db.models import Prefetch +from django.db.models import Prefetch, ManyToManyField from django.dispatch import receiver from django.utils.translation import gettext_lazy as _ from model_utils import FieldTracker @@ -109,10 +110,89 @@ class BookDataModel(ObjectMixin, BookWyrmModel): """only send book data updates to other bookwyrm instances""" super().broadcast(activity, sender, software=software, **kwargs) + def merge_into(self, canonical: Self) -> None: + """merge this entity into another entity""" + if canonical.id == self.id: + raise ValueError(f"Cannot merge {self} into itself") + + canonical.absorb_data_from(self) + canonical.save() + + self.merged_model.objects.create(deleted_id=self.id, merged_into=canonical) + + # move related models to canonical + related_models = [ + (r.remote_field.name, r.related_model) for r in self._meta.related_objects + ] + # pylint: disable=protected-access + for related_field, related_model in related_models: + # Skip the ManyToMany fields that arenā€™t auto-created. These + # should have a corresponding OneToMany field in the model for + # the linking table anyway. If we update it through that model + # instead then we wonā€™t lose the extra fields in the linking + # table. + # pylint: disable=protected-access + related_field_obj = related_model._meta.get_field(related_field) + if isinstance(related_field_obj, ManyToManyField): + through = related_field_obj.remote_field.through + if not through._meta.auto_created: + continue + related_objs = related_model.objects.filter(**{related_field: self}) + for related_obj in related_objs: + try: + setattr(related_obj, related_field, canonical) + related_obj.save() + except TypeError: + getattr(related_obj, related_field).add(canonical) + getattr(related_obj, related_field).remove(self) + + self.delete() + + def absorb_data_from(self, other: Self) -> None: + """fill empty fields with values from another entity""" + for data_field in self._meta.get_fields(): + if not hasattr(data_field, "activitypub_field"): + continue + data_value = getattr(other, data_field.name) + if not data_value: + continue + if not getattr(self, data_field.name): + setattr(self, data_field.name, data_value) + + +class MergedBookDataModel(models.Model): + """a BookDataModel instance that has been merged into another instance. kept + to be able to redirect old URLs""" + + deleted_id = models.IntegerField(primary_key=True) + + class Meta: + """abstract just like BookDataModel""" + + abstract = True + + +class MergedBook(MergedBookDataModel): + """an Book that has been merged into another one""" + + merged_into = models.ForeignKey( + "Book", on_delete=models.PROTECT, related_name="absorbed" + ) + + +class MergedAuthor(MergedBookDataModel): + """an Author that has been merged into another one""" + + merged_into = models.ForeignKey( + "Author", on_delete=models.PROTECT, related_name="absorbed" + ) + class Book(BookDataModel): """a generic book, which can mean either an edition or a work""" + merged_model = MergedBook + connector = models.ForeignKey("Connector", on_delete=models.PROTECT, null=True) # book/work metadata @@ -456,34 +536,6 @@ class Edition(Book): return queryset -class MergedBookDataModel(models.Model): - """a BookDataModel instance that has been merged into another instance. kept - to be able to redirect old URLs""" - - deleted_id = models.IntegerField(primary_key=True) - - class Meta: - """abstract just like BookDataModel""" - - abstract = True - - -class MergedAuthor(MergedBookDataModel): - """an Author that has been merged into another one""" - - merged_into = models.ForeignKey( - "Author", on_delete=models.PROTECT, related_name="absorbed" - ) - - -class MergedBook(MergedBookDataModel): - """an Book that has been merged into another one""" - - merged_into = models.ForeignKey( - "Book", on_delete=models.PROTECT, related_name="absorbed" - ) - - def isbn_10_to_13(isbn_10): """convert an isbn 10 into an isbn 13""" isbn_10 = re.sub(r"[^0-9X]", "", isbn_10) From e04cd79ff85a4c0637d721cf831ed1320125bdb4 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Fri, 1 Mar 2024 14:37:52 +0100 Subject: [PATCH 386/458] Redirect to new URL when a merged object is requested --- bookwyrm/views/author.py | 15 ++++++++---- bookwyrm/views/books/books.py | 33 +++++++++++++++++++-------- bookwyrm/views/books/edit_book.py | 10 ++++---- bookwyrm/views/books/editions.py | 9 ++++---- bookwyrm/views/books/links.py | 12 ++++++---- bookwyrm/views/books/series.py | 14 +++++++----- bookwyrm/views/get_started.py | 6 +++-- bookwyrm/views/helpers.py | 19 ++++++++++++++- bookwyrm/views/reading.py | 6 +++-- bookwyrm/views/shelf/shelf_actions.py | 7 +++--- bookwyrm/views/status.py | 12 ++++++---- 11 files changed, 97 insertions(+), 46 deletions(-) diff --git a/bookwyrm/views/author.py b/bookwyrm/views/author.py index 4dcf4c447..56977622f 100644 --- a/bookwyrm/views/author.py +++ b/bookwyrm/views/author.py @@ -1,4 +1,5 @@ """ the good people stuff! the authors! """ + from django.contrib.auth.decorators import login_required, permission_required from django.core.paginator import Paginator from django.shortcuts import get_object_or_404, redirect @@ -11,7 +12,11 @@ from bookwyrm import forms, models from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.connectors import connector_manager from bookwyrm.settings import PAGE_LENGTH -from bookwyrm.views.helpers import is_api_request, maybe_redirect_local_path +from bookwyrm.views.helpers import ( + is_api_request, + get_mergeable_object_or_404, + maybe_redirect_local_path, +) # pylint: disable= no-self-use @@ -21,7 +26,7 @@ class Author(View): # pylint: disable=unused-argument def get(self, request, author_id, slug=None): """landing page for an author""" - author = get_object_or_404(models.Author, id=author_id) + author = get_mergeable_object_or_404(models.Author, id=author_id) if is_api_request(request): return ActivitypubResponse(author.to_activity()) @@ -56,13 +61,13 @@ class EditAuthor(View): def get(self, request, author_id): """info about a book""" - author = get_object_or_404(models.Author, id=author_id) + author = get_mergeable_object_or_404(models.Author, id=author_id) data = {"author": author, "form": forms.AuthorForm(instance=author)} return TemplateResponse(request, "author/edit_author.html", data) def post(self, request, author_id): """edit a author cool""" - author = get_object_or_404(models.Author, id=author_id) + author = get_mergeable_object_or_404(models.Author, id=author_id) form = forms.AuthorForm(request.POST, request.FILES, instance=author) if not form.is_valid(): @@ -82,7 +87,7 @@ def update_author_from_remote(request, author_id, connector_identifier): connector = connector_manager.load_connector( get_object_or_404(models.Connector, identifier=connector_identifier) ) - author = get_object_or_404(models.Author, id=author_id) + author = get_mergeable_object_or_404(models.Author, id=author_id) connector.update_author_from_remote(author) diff --git a/bookwyrm/views/books/books.py b/bookwyrm/views/books/books.py index 565220b6e..bbf041850 100644 --- a/bookwyrm/views/books/books.py +++ b/bookwyrm/views/books/books.py @@ -1,4 +1,5 @@ """ the good stuff! the books! """ + from uuid import uuid4 from django.contrib.auth.decorators import login_required, permission_required @@ -15,7 +16,11 @@ from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.connectors import connector_manager, ConnectorException from bookwyrm.connectors.abstract_connector import get_image from bookwyrm.settings import PAGE_LENGTH -from bookwyrm.views.helpers import is_api_request, maybe_redirect_local_path +from bookwyrm.views.helpers import ( + is_api_request, + maybe_redirect_local_path, + get_mergeable_object_or_404, +) # pylint: disable=no-self-use @@ -40,7 +45,11 @@ class Book(View): # table, so they never have clashing IDs book = ( models.Edition.viewer_aware_objects(request.user) - .filter(Q(id=book_id) | Q(parent_work__id=book_id)) + .filter( + Q(id=book_id) + | Q(parent_work__id=book_id) + | Q(absorbed__deleted_id=book_id) + ) .order_by("-edition_rank") .select_related("parent_work") .prefetch_related("authors", "file_links") @@ -82,11 +91,13 @@ class Book(View): "book": book, "statuses": paginated.get_page(request.GET.get("page")), "review_count": reviews.count(), - "ratings": reviews.filter( - Q(content__isnull=True) | Q(content="") - ).select_related("user") - if not user_statuses - else None, + "ratings": ( + reviews.filter(Q(content__isnull=True) | Q(content="")).select_related( + "user" + ) + if not user_statuses + else None + ), "rating": reviews.aggregate(Avg("rating"))["rating__avg"], "lists": lists, "update_error": kwargs.get("update_error", False), @@ -130,7 +141,7 @@ class Book(View): @require_POST def upload_cover(request, book_id): """upload a new cover""" - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) book.last_edited_by = request.user url = request.POST.get("cover-url") @@ -168,7 +179,7 @@ def set_cover_from_url(url): @permission_required("bookwyrm.edit_book", raise_exception=True) def add_description(request, book_id): """upload a new cover""" - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) description = request.POST.get("description") @@ -199,7 +210,9 @@ def update_book_from_remote(request, book_id, connector_identifier): connector = connector_manager.load_connector( get_object_or_404(models.Connector, identifier=connector_identifier) ) - book = get_object_or_404(models.Book.objects.select_subclasses(), id=book_id) + book = get_mergeable_object_or_404( + models.Book.objects.select_subclasses(), id=book_id + ) try: connector.update_book_from_remote(book) diff --git a/bookwyrm/views/books/edit_book.py b/bookwyrm/views/books/edit_book.py index ae492374f..b8ceece13 100644 --- a/bookwyrm/views/books/edit_book.py +++ b/bookwyrm/views/books/edit_book.py @@ -1,4 +1,5 @@ """ the good stuff! the books! """ + from re import sub, findall from django.contrib.auth.decorators import login_required, permission_required from django.contrib.postgres.search import SearchRank, SearchVector @@ -18,9 +19,10 @@ from bookwyrm.utils.isni import ( build_author_from_isni, augment_author_metadata, ) -from bookwyrm.views.helpers import get_edition +from bookwyrm.views.helpers import get_edition, get_mergeable_object_or_404 from .books import set_cover_from_url + # pylint: disable=no-self-use @method_decorator(login_required, name="dispatch") @method_decorator( @@ -42,7 +44,7 @@ class EditBook(View): def post(self, request, book_id): """edit a book cool""" - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) form = forms.EditionForm(request.POST, request.FILES, instance=book) @@ -130,7 +132,7 @@ class CreateBook(View): with transaction.atomic(): book = form.save(request) - parent_work = get_object_or_404(models.Work, id=parent_work_id) + parent_work = get_mergeable_object_or_404(models.Work, id=parent_work_id) book.parent_work = parent_work if authors: @@ -295,7 +297,7 @@ class ConfirmEditBook(View): if not book.parent_work: work_match = request.POST.get("parent_work") if work_match and work_match != "0": - work = get_object_or_404(models.Work, id=work_match) + work = get_mergeable_object_or_404(models.Work, id=work_match) else: work = models.Work.objects.create(title=form.cleaned_data["title"]) work.authors.set(book.authors.all()) diff --git a/bookwyrm/views/books/editions.py b/bookwyrm/views/books/editions.py index a3167fac4..538ff6377 100644 --- a/bookwyrm/views/books/editions.py +++ b/bookwyrm/views/books/editions.py @@ -1,4 +1,5 @@ """ the good stuff! the books! """ + from functools import reduce import operator @@ -7,7 +8,7 @@ from django.core.cache import cache as django_cache from django.core.paginator import Paginator from django.db import transaction from django.db.models import Q -from django.shortcuts import get_object_or_404, redirect +from django.shortcuts import redirect from django.template.response import TemplateResponse from django.views import View from django.views.decorators.http import require_POST @@ -15,7 +16,7 @@ from django.views.decorators.http import require_POST from bookwyrm import forms, models from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.settings import PAGE_LENGTH -from bookwyrm.views.helpers import is_api_request +from bookwyrm.views.helpers import is_api_request, get_mergeable_object_or_404 # pylint: disable=no-self-use @@ -24,7 +25,7 @@ class Editions(View): def get(self, request, book_id): """list of editions of a book""" - work = get_object_or_404(models.Work, id=book_id) + work = get_mergeable_object_or_404(models.Work, id=book_id) if is_api_request(request): return ActivitypubResponse(work.to_edition_list(**request.GET)) @@ -83,7 +84,7 @@ class Editions(View): def switch_edition(request): """switch your copy of a book to a different edition""" edition_id = request.POST.get("edition") - new_edition = get_object_or_404(models.Edition, id=edition_id) + new_edition = get_mergeable_object_or_404(models.Edition, id=edition_id) shelfbooks = models.ShelfBook.objects.filter( book__parent_work=new_edition.parent_work, shelf__user=request.user ) diff --git a/bookwyrm/views/books/links.py b/bookwyrm/views/books/links.py index 70b91f2d9..4793c6019 100644 --- a/bookwyrm/views/books/links.py +++ b/bookwyrm/views/books/links.py @@ -1,4 +1,5 @@ """ the good stuff! the books! """ + from django.contrib.auth.decorators import login_required, permission_required from django.db import transaction from django.shortcuts import get_object_or_404, redirect @@ -8,6 +9,7 @@ from django.utils.decorators import method_decorator from django.views.decorators.http import require_POST from bookwyrm import forms, models +from bookwyrm.views.helpers import get_mergeable_object_or_404 # pylint: disable=no-self-use @@ -20,7 +22,7 @@ class BookFileLinks(View): def get(self, request, book_id): """view links""" - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) annotated_links = get_annotated_links(book) data = {"book": book, "links": annotated_links} @@ -36,7 +38,7 @@ class BookFileLinks(View): # this form shouldn't ever really get here, since it's just a dropdown # get the data again rather than redirecting - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) annotated_links = get_annotated_links(book, form=form) data = {"book": book, "links": annotated_links} @@ -75,7 +77,7 @@ class AddFileLink(View): def get(self, request, book_id): """Create link form""" - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) data = { "file_link_form": forms.FileLinkForm(), "book": book, @@ -85,7 +87,9 @@ class AddFileLink(View): @transaction.atomic def post(self, request, book_id, link_id=None): """Add a link to a copy of the book you can read""" - book = get_object_or_404(models.Book.objects.select_subclasses(), id=book_id) + book = get_mergeable_object_or_404( + models.Book.objects.select_subclasses(), id=book_id + ) link = get_object_or_404(models.FileLink, id=link_id) if link_id else None form = forms.FileLinkForm(request.POST, instance=link) if not form.is_valid(): diff --git a/bookwyrm/views/books/series.py b/bookwyrm/views/books/series.py index bdc8dccab..eb3a2a04f 100644 --- a/bookwyrm/views/books/series.py +++ b/bookwyrm/views/books/series.py @@ -1,10 +1,10 @@ """ books belonging to the same series """ + from sys import float_info from django.views import View -from django.shortcuts import get_object_or_404 from django.template.response import TemplateResponse -from bookwyrm.views.helpers import is_api_request +from bookwyrm.views.helpers import is_api_request, get_mergeable_object_or_404 from bookwyrm import models @@ -27,7 +27,7 @@ class BookSeriesBy(View): if is_api_request(request): pass - author = get_object_or_404(models.Author, id=author_id) + author = get_mergeable_object_or_404(models.Author, id=author_id) results = models.Edition.objects.filter(authors=author, series=series_name) @@ -56,9 +56,11 @@ class BookSeriesBy(View): sorted(numbered_books, key=sort_by_series) + sorted( dated_books, - key=lambda book: book.first_published_date - if book.first_published_date - else book.published_date, + key=lambda book: ( + book.first_published_date + if book.first_published_date + else book.published_date + ), ) + sorted( unsortable_books, diff --git a/bookwyrm/views/get_started.py b/bookwyrm/views/get_started.py index 511a886ca..9a28dfbca 100644 --- a/bookwyrm/views/get_started.py +++ b/bookwyrm/views/get_started.py @@ -1,4 +1,5 @@ """ Helping new users figure out the lay of the land """ + import re from django.contrib.auth.decorators import login_required @@ -13,6 +14,7 @@ from django.views import View from bookwyrm import book_search, forms, models from bookwyrm.settings import INSTANCE_ACTOR_USERNAME from bookwyrm.suggested_users import suggested_users +from bookwyrm.views.helpers import get_mergeable_object_or_404 from .preferences.edit_user import save_user_form @@ -80,8 +82,8 @@ class GetStartedBooks(View): for k, v in request.POST.items() if re.match(r"\d+", k) and re.match(r"\d+", v) ] - for (book_id, shelf_id) in shelve_actions: - book = get_object_or_404(models.Edition, id=book_id) + for book_id, shelf_id in shelve_actions: + book = get_mergeable_object_or_404(models.Edition, id=book_id) shelf = get_object_or_404(models.Shelf, id=shelf_id) models.ShelfBook.objects.create(book=book, shelf=shelf, user=request.user) diff --git a/bookwyrm/views/helpers.py b/bookwyrm/views/helpers.py index 60d950354..5bbb05033 100644 --- a/bookwyrm/views/helpers.py +++ b/bookwyrm/views/helpers.py @@ -1,4 +1,5 @@ """ helper functions used in various views """ + import re from datetime import datetime, timedelta import dateutil.parser @@ -8,7 +9,7 @@ from dateutil.parser import ParserError from requests import HTTPError from django.db.models import Q from django.conf import settings as django_settings -from django.shortcuts import redirect +from django.shortcuts import redirect, _get_queryset from django.http import Http404 from django.utils import translation @@ -232,3 +233,19 @@ def redirect_to_referer(request, *args, **kwargs): # if not, use the args passed you'd normally pass to redirect() return redirect(*args or "/", **kwargs) + + +# pylint: disable=redefined-builtin,invalid-name +def get_mergeable_object_or_404(klass, id): + """variant of get_object_or_404 that also redirects if id has been merged + into another object""" + queryset = _get_queryset(klass) + try: + return queryset.get(pk=id) + except queryset.model.DoesNotExist: + try: + return queryset.get(absorbed__deleted_id=id) + except queryset.model.DoesNotExist: + pass + + raise Http404(f"No {queryset.model} with ID {id} exists") diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index 2ce59b096..478d27990 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -1,4 +1,5 @@ """ the good stuff! the books! """ + import logging from django.contrib.auth.decorators import login_required from django.core.cache import cache @@ -11,6 +12,7 @@ from django.views import View from django.views.decorators.http import require_POST from bookwyrm import forms, models +from bookwyrm.views.helpers import get_mergeable_object_or_404 from bookwyrm.views.shelf.shelf_actions import unshelve from .status import CreateStatus from .helpers import get_edition, handle_reading_status, is_api_request @@ -130,7 +132,7 @@ class ReadThrough(View): def get(self, request, book_id, readthrough_id=None): """standalone form in case of errors""" - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) form = forms.ReadThroughForm() data = {"form": form, "book": book} if readthrough_id: @@ -152,7 +154,7 @@ class ReadThrough(View): ) form = forms.ReadThroughForm(request.POST) if not form.is_valid(): - book = get_object_or_404(models.Edition, id=book_id) + book = get_mergeable_object_or_404(models.Edition, id=book_id) data = {"form": form, "book": book} if request.POST.get("id"): data["readthrough"] = get_object_or_404( diff --git a/bookwyrm/views/shelf/shelf_actions.py b/bookwyrm/views/shelf/shelf_actions.py index f0f5fa159..d68ea4219 100644 --- a/bookwyrm/views/shelf/shelf_actions.py +++ b/bookwyrm/views/shelf/shelf_actions.py @@ -1,11 +1,12 @@ """ shelf views """ + from django.db import IntegrityError, transaction from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, redirect from django.views.decorators.http import require_POST from bookwyrm import forms, models -from bookwyrm.views.helpers import redirect_to_referer +from bookwyrm.views.helpers import redirect_to_referer, get_mergeable_object_or_404 @login_required @@ -36,7 +37,7 @@ def delete_shelf(request, shelf_id): @transaction.atomic def shelve(request): """put a book on a user's shelf""" - book = get_object_or_404(models.Edition, id=request.POST.get("book")) + book = get_mergeable_object_or_404(models.Edition, id=request.POST.get("book")) desired_shelf = get_object_or_404( request.user.shelf_set, identifier=request.POST.get("shelf") ) @@ -97,7 +98,7 @@ def shelve(request): def unshelve(request, book_id=False): """remove a book from a user's shelf""" identity = book_id if book_id else request.POST.get("book") - book = get_object_or_404(models.Edition, id=identity) + book = get_mergeable_object_or_404(models.Edition, id=identity) shelf_book = get_object_or_404( models.ShelfBook, book=book, shelf__id=request.POST["shelf"] ) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 34b62d0b4..f2f03405f 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -1,4 +1,5 @@ """ what are we here for if not for posting """ + import re import logging @@ -19,6 +20,7 @@ from markdown import markdown from bookwyrm import forms, models from bookwyrm.models.report import DELETE_ITEM from bookwyrm.utils import regex, sanitizer +from bookwyrm.views.helpers import get_mergeable_object_or_404 from .helpers import handle_remote_webfinger, is_api_request from .helpers import load_date_in_user_tz_as_utc, redirect_to_referer @@ -52,7 +54,7 @@ class CreateStatus(View): def get(self, request, status_type): # pylint: disable=unused-argument """compose view (...not used?)""" - book = get_object_or_404(models.Edition, id=request.GET.get("book")) + book = get_mergeable_object_or_404(models.Edition, id=request.GET.get("book")) data = {"book": book} return TemplateResponse(request, "compose.html", data) @@ -98,7 +100,7 @@ class CreateStatus(View): # inspect the text for user tags content = status.content mentions = find_mentions(request.user, content) - for (_, mention_user) in mentions.items(): + for _, mention_user in mentions.items(): # add them to status mentions fk status.mention_users.add(mention_user) content = format_mentions(content, mentions) @@ -109,7 +111,7 @@ class CreateStatus(View): # inspect the text for hashtags hashtags = find_or_create_hashtags(content) - for (_, mention_hashtag) in hashtags.items(): + for _, mention_hashtag in hashtags.items(): # add them to status mentions fk status.mention_hashtags.add(mention_hashtag) content = format_hashtags(content, hashtags) @@ -140,7 +142,7 @@ class CreateStatus(View): def format_mentions(content, mentions): """Detect @mentions and make them links""" - for (mention_text, mention_user) in mentions.items(): + for mention_text, mention_user in mentions.items(): # turn the mention into a link content = re.sub( rf"(? Date: Sat, 2 Mar 2024 11:34:20 +0100 Subject: [PATCH 387/458] BookDataModel.merge_into: return and log absorbed fields --- .../management/commands/deduplicate_book_data.py | 3 ++- bookwyrm/management/merge_command.py | 4 +++- bookwyrm/models/book.py | 12 ++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/bookwyrm/management/commands/deduplicate_book_data.py b/bookwyrm/management/commands/deduplicate_book_data.py index d2f4ef936..74475a00b 100644 --- a/bookwyrm/management/commands/deduplicate_book_data.py +++ b/bookwyrm/management/commands/deduplicate_book_data.py @@ -30,7 +30,8 @@ def dedupe_model(model): print(f"merging into {canonical.remote_id} based on {field.name} {value}:") for obj in objs[1:]: print(f"- {obj.remote_id}") - obj.merge_into(canonical) + absorbed_fields = obj.merge_into(canonical) + print(f" absorbed fields: {absorbed_fields}") class Command(BaseCommand): diff --git a/bookwyrm/management/merge_command.py b/bookwyrm/management/merge_command.py index 2f3f90c86..0c464600a 100644 --- a/bookwyrm/management/merge_command.py +++ b/bookwyrm/management/merge_command.py @@ -25,4 +25,6 @@ class MergeCommand(BaseCommand): print("other book doesnā€™t exist!") return - other.merge_into(canonical) + absorbed_fields = other.merge_into(canonical) + print(f"{other.remote_id} has been merged into {canonical.remote_id}") + print(f"absorbed fields: {absorbed_fields}") diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index c7235a3f5..d7193cbbe 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -2,7 +2,7 @@ from itertools import chain import re -from typing import Any +from typing import Any, Dict from typing_extensions import Self from django.contrib.postgres.search import SearchVectorField @@ -110,12 +110,12 @@ class BookDataModel(ObjectMixin, BookWyrmModel): """only send book data updates to other bookwyrm instances""" super().broadcast(activity, sender, software=software, **kwargs) - def merge_into(self, canonical: Self) -> None: + def merge_into(self, canonical: Self) -> Dict[str, Any]: """merge this entity into another entity""" if canonical.id == self.id: raise ValueError(f"Cannot merge {self} into itself") - canonical.absorb_data_from(self) + absorbed_fields = canonical.absorb_data_from(self) canonical.save() self.merged_model.objects.create(deleted_id=self.id, merged_into=canonical) @@ -147,9 +147,11 @@ class BookDataModel(ObjectMixin, BookWyrmModel): getattr(related_obj, related_field).remove(self) self.delete() + return absorbed_fields - def absorb_data_from(self, other: Self) -> None: + def absorb_data_from(self, other: Self) -> Dict[str, Any]: """fill empty fields with values from another entity""" + absorbed_fields = {} for data_field in self._meta.get_fields(): if not hasattr(data_field, "activitypub_field"): continue @@ -158,6 +160,8 @@ class BookDataModel(ObjectMixin, BookWyrmModel): continue if not getattr(self, data_field.name): setattr(self, data_field.name, data_value) + absorbed_fields[data_field.name] = data_value + return absorbed_fields class MergedBookDataModel(models.Model): From 7fb079cb43ed7260efd796ba65216790814617f4 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 5 Mar 2024 15:25:35 +0100 Subject: [PATCH 388/458] PartialDate: fix __eq__ method --- bookwyrm/utils/partial_date.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bookwyrm/utils/partial_date.py b/bookwyrm/utils/partial_date.py index 40b89c838..4c9391476 100644 --- a/bookwyrm/utils/partial_date.py +++ b/bookwyrm/utils/partial_date.py @@ -67,6 +67,14 @@ class PartialDate(datetime): # current_timezone and default_timezone. return cls.from_datetime(datetime(year, month, day, tzinfo=_westmost_tz)) + def __eq__(self, other: object) -> bool: + if not isinstance(other, PartialDate): + return NotImplemented + return self.partial_isoformat() == other.partial_isoformat() + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} object: {self.partial_isoformat()}>" + class MonthParts(PartialDate): """a date bound into month precision""" From 6f191acb27a23e330cdadf829efebc61c3809477 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 5 Mar 2024 15:26:12 +0100 Subject: [PATCH 389/458] BookDataModel: fix absorbing data from array and partial date fields --- bookwyrm/models/book.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index d7193cbbe..607426189 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -155,12 +155,27 @@ class BookDataModel(ObjectMixin, BookWyrmModel): for data_field in self._meta.get_fields(): if not hasattr(data_field, "activitypub_field"): continue - data_value = getattr(other, data_field.name) - if not data_value: + canonical_value = getattr(self, data_field.name) + other_value = getattr(other, data_field.name) + if not other_value: continue - if not getattr(self, data_field.name): - setattr(self, data_field.name, data_value) - absorbed_fields[data_field.name] = data_value + if isinstance(data_field, fields.ArrayField): + if new_values := list(set(other_value) - set(canonical_value)): + # append at the end (in no particular order) + setattr(self, data_field.name, canonical_value + new_values) + absorbed_fields[data_field.name] = new_values + elif isinstance(data_field, fields.PartialDateField): + if ( + (not canonical_value) + or (other_value.has_day and not canonical_value.has_day) + or (other_value.has_month and not canonical_value.has_month) + ): + setattr(self, data_field.name, other_value) + absorbed_fields[data_field.name] = other_value + else: + if not canonical_value: + setattr(self, data_field.name, other_value) + absorbed_fields[data_field.name] = other_value return absorbed_fields From fb82c7a579752e68c098e31307aad22e5e07ce4c Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 5 Mar 2024 15:26:23 +0100 Subject: [PATCH 390/458] Add test for merging authors --- bookwyrm/tests/test_merge.py | 97 ++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 bookwyrm/tests/test_merge.py diff --git a/bookwyrm/tests/test_merge.py b/bookwyrm/tests/test_merge.py new file mode 100644 index 000000000..933751832 --- /dev/null +++ b/bookwyrm/tests/test_merge.py @@ -0,0 +1,97 @@ +"""test merging Authors, Works and Editions""" + +from django.test import TestCase +from django.test.client import Client + +from bookwyrm import models + + +class MergeBookDataModel(TestCase): + """test merging of subclasses of BookDataModel""" + + @classmethod + def setUpTestData(cls): # pylint: disable=invalid-name + """shared data""" + models.SiteSettings.objects.create() + + cls.jrr_tolkien = models.Author.objects.create( + name="J.R.R. Tolkien", + aliases=["JRR Tolkien", "Tolkien"], + bio="This guy wrote about hobbits and stuff.", + openlibrary_key="OL26320A", + isni="0000000121441970", + ) + cls.jrr_tolkien_2 = models.Author.objects.create( + name="J.R.R. Tolkien", + aliases=["JRR Tolkien", "John Ronald Reuel Tolkien"], + openlibrary_key="OL26320A", + isni="wrong", + wikidata="Q892", + ) + cls.jrr_tolkien_2_id = cls.jrr_tolkien_2.id + + # perform merges + cls.jrr_tolkien_absorbed_fields = cls.jrr_tolkien_2.merge_into(cls.jrr_tolkien) + + def test_merged_author(self): + """verify merged author after merge""" + self.assertEqual(self.jrr_tolkien_2.id, None, msg="duplicate should be deleted") + + def test_canonical_author(self): + """verify canonical author data after merge""" + + self.assertFalse( + self.jrr_tolkien.id is None, msg="canonical should not be deleted" + ) + + # identical in canonical and duplicate; should be unchanged + self.assertEqual(self.jrr_tolkien.name, "J.R.R. Tolkien") + self.assertEqual(self.jrr_tolkien.openlibrary_key, "OL26320A") + + # present in canonical and absent in duplicate; should be unchanged + self.assertEqual( + self.jrr_tolkien.bio, "This guy wrote about hobbits and stuff." + ) + + # absent in canonical and present in duplicate; should be absorbed + self.assertEqual(self.jrr_tolkien.wikidata, "Q892") + + # scalar value that is different in canonical and duplicate; should be unchanged + self.assertEqual(self.jrr_tolkien.isni, "0000000121441970") + + # set value with both matching and non-matching elements; should be the + # union of canonical and duplicate + self.assertEqual( + self.jrr_tolkien.aliases, + [ + "JRR Tolkien", + "Tolkien", + "John Ronald Reuel Tolkien", + ], + ) + + def test_merged_author_redirect(self): + """a web request for a merged author should redirect to the canonical author""" + client = Client() + response = client.get( + f"/author/{self.jrr_tolkien_2_id}/s/jrr-tolkien", follow=True + ) + self.assertEqual(response.redirect_chain, [(self.jrr_tolkien.local_path, 301)]) + + def test_merged_author_activitypub(self): + """an activitypub request for a merged author should return the data for + the canonical author (including the canonical id)""" + client = Client(HTTP_ACCEPT="application/json") + response = client.get(f"/author/{self.jrr_tolkien_2_id}") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), self.jrr_tolkien.to_activity()) + + def test_absorbed_fields(self): + """reported absorbed_fields should be accurate for --dry_run""" + self.assertEqual( + self.jrr_tolkien_absorbed_fields, + { + "aliases": ["John Ronald Reuel Tolkien"], + "wikidata": "Q892", + }, + ) From 4a690e675ae4652b81932eb089949e6d2f13f3ae Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 5 Mar 2024 17:12:51 +0100 Subject: [PATCH 391/458] BookDataModel: add dry_run argument to merge_into --- .../commands/deduplicate_book_data.py | 23 ++++++++++++++----- bookwyrm/management/merge_command.py | 11 +++++++-- bookwyrm/models/book.py | 19 ++++++++++----- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/bookwyrm/management/commands/deduplicate_book_data.py b/bookwyrm/management/commands/deduplicate_book_data.py index 74475a00b..c2d897ce3 100644 --- a/bookwyrm/management/commands/deduplicate_book_data.py +++ b/bookwyrm/management/commands/deduplicate_book_data.py @@ -6,7 +6,7 @@ from django.db.models import Count from bookwyrm import models -def dedupe_model(model): +def dedupe_model(model, dry_run=False): """combine duplicate editions and update related models""" print(f"deduplicating {model.__name__}:") fields = model._meta.get_fields() @@ -27,10 +27,13 @@ def dedupe_model(model): print("----------") objs = model.objects.filter(**{field.name: value}).order_by("id") canonical = objs.first() - print(f"merging into {canonical.remote_id} based on {field.name} {value}:") + action = "would merge" if dry_run else "merging" + print( + f"{action} into {model.__name__} {canonical.remote_id} based on {field.name} {value}:" + ) for obj in objs[1:]: print(f"- {obj.remote_id}") - absorbed_fields = obj.merge_into(canonical) + absorbed_fields = obj.merge_into(canonical, dry_run=dry_run) print(f" absorbed fields: {absorbed_fields}") @@ -39,9 +42,17 @@ class Command(BaseCommand): help = "merges duplicate book data" + def add_arguments(self, parser): + """add the arguments for this command""" + parser.add_argument( + "--dry_run", + action="store_true", + help="don't actually merge, only print what would happen", + ) + # pylint: disable=no-self-use,unused-argument def handle(self, *args, **options): """run deduplications""" - dedupe_model(models.Edition) - dedupe_model(models.Work) - dedupe_model(models.Author) + dedupe_model(models.Edition, dry_run=options["dry_run"]) + dedupe_model(models.Work, dry_run=options["dry_run"]) + dedupe_model(models.Author, dry_run=options["dry_run"]) diff --git a/bookwyrm/management/merge_command.py b/bookwyrm/management/merge_command.py index 0c464600a..66e60814a 100644 --- a/bookwyrm/management/merge_command.py +++ b/bookwyrm/management/merge_command.py @@ -8,6 +8,11 @@ class MergeCommand(BaseCommand): """add the arguments for this command""" parser.add_argument("--canonical", type=int, required=True) parser.add_argument("--other", type=int, required=True) + parser.add_argument( + "--dry_run", + action="store_true", + help="don't actually merge, only print what would happen", + ) # pylint: disable=no-self-use,unused-argument def handle(self, *args, **options): @@ -25,6 +30,8 @@ class MergeCommand(BaseCommand): print("other book doesnā€™t exist!") return - absorbed_fields = other.merge_into(canonical) - print(f"{other.remote_id} has been merged into {canonical.remote_id}") + absorbed_fields = other.merge_into(canonical, dry_run=options["dry_run"]) + + action = "would be" if options["dry_run"] else "has been" + print(f"{other.remote_id} {action} merged into {canonical.remote_id}") print(f"absorbed fields: {absorbed_fields}") diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 607426189..5e46a3245 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -110,12 +110,16 @@ class BookDataModel(ObjectMixin, BookWyrmModel): """only send book data updates to other bookwyrm instances""" super().broadcast(activity, sender, software=software, **kwargs) - def merge_into(self, canonical: Self) -> Dict[str, Any]: + def merge_into(self, canonical: Self, dry_run=False) -> Dict[str, Any]: """merge this entity into another entity""" if canonical.id == self.id: raise ValueError(f"Cannot merge {self} into itself") - absorbed_fields = canonical.absorb_data_from(self) + absorbed_fields = canonical.absorb_data_from(self, dry_run=dry_run) + + if dry_run: + return absorbed_fields + canonical.save() self.merged_model.objects.create(deleted_id=self.id, merged_into=canonical) @@ -149,7 +153,7 @@ class BookDataModel(ObjectMixin, BookWyrmModel): self.delete() return absorbed_fields - def absorb_data_from(self, other: Self) -> Dict[str, Any]: + def absorb_data_from(self, other: Self, dry_run=False) -> Dict[str, Any]: """fill empty fields with values from another entity""" absorbed_fields = {} for data_field in self._meta.get_fields(): @@ -162,7 +166,8 @@ class BookDataModel(ObjectMixin, BookWyrmModel): if isinstance(data_field, fields.ArrayField): if new_values := list(set(other_value) - set(canonical_value)): # append at the end (in no particular order) - setattr(self, data_field.name, canonical_value + new_values) + if not dry_run: + setattr(self, data_field.name, canonical_value + new_values) absorbed_fields[data_field.name] = new_values elif isinstance(data_field, fields.PartialDateField): if ( @@ -170,11 +175,13 @@ class BookDataModel(ObjectMixin, BookWyrmModel): or (other_value.has_day and not canonical_value.has_day) or (other_value.has_month and not canonical_value.has_month) ): - setattr(self, data_field.name, other_value) + if not dry_run: + setattr(self, data_field.name, other_value) absorbed_fields[data_field.name] = other_value else: if not canonical_value: - setattr(self, data_field.name, other_value) + if not dry_run: + setattr(self, data_field.name, other_value) absorbed_fields[data_field.name] = other_value return absorbed_fields From 2d2ccd51df4801d2219ad46c2d7bff99d9afc6c3 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 23 Mar 2024 19:35:24 +0100 Subject: [PATCH 392/458] Factor out book series info into separate template --- bookwyrm/templates/snippets/book_series.html | 3 +++ bookwyrm/templates/snippets/book_titleby.html | 8 ++------ bookwyrm/templates/snippets/status/headers/comment.html | 4 +--- bookwyrm/templates/snippets/status/headers/quotation.html | 4 +--- bookwyrm/templates/snippets/status/headers/read.html | 4 +--- bookwyrm/templates/snippets/status/headers/reading.html | 4 +--- bookwyrm/templates/snippets/status/headers/review.html | 4 +--- .../snippets/status/headers/stopped_reading.html | 4 +--- bookwyrm/templates/snippets/status/headers/to_read.html | 4 +--- 9 files changed, 12 insertions(+), 27 deletions(-) create mode 100644 bookwyrm/templates/snippets/book_series.html diff --git a/bookwyrm/templates/snippets/book_series.html b/bookwyrm/templates/snippets/book_series.html new file mode 100644 index 000000000..fd1343604 --- /dev/null +++ b/bookwyrm/templates/snippets/book_series.html @@ -0,0 +1,3 @@ +{% if book.series %} +({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) +{% endif %} diff --git a/bookwyrm/templates/snippets/book_titleby.html b/bookwyrm/templates/snippets/book_titleby.html index 35e0c4c45..518d96389 100644 --- a/bookwyrm/templates/snippets/book_titleby.html +++ b/bookwyrm/templates/snippets/book_titleby.html @@ -9,8 +9,7 @@ {% if book.authors.exists %} {% blocktrans trimmed with path=book.local_path title=book|book_title %} -{{ title }} - +{{ title }} by {% endblocktrans %} {% include 'snippets/authors.html' with book=book limit=3 %} @@ -18,10 +17,7 @@ by {{ book|book_title }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} - +{% include 'snippets/book_series.html' with book=book %} {% endcache %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/comment.html b/bookwyrm/templates/snippets/status/headers/comment.html index b7750d3df..72bf5b255 100644 --- a/bookwyrm/templates/snippets/status/headers/comment.html +++ b/bookwyrm/templates/snippets/status/headers/comment.html @@ -18,8 +18,6 @@ commented on {{ book }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/quotation.html b/bookwyrm/templates/snippets/status/headers/quotation.html index 3ddd20291..ce0ea5923 100644 --- a/bookwyrm/templates/snippets/status/headers/quotation.html +++ b/bookwyrm/templates/snippets/status/headers/quotation.html @@ -18,8 +18,6 @@ quoted {{ book }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/read.html b/bookwyrm/templates/snippets/status/headers/read.html index 8c323dac6..5a237a836 100644 --- a/bookwyrm/templates/snippets/status/headers/read.html +++ b/bookwyrm/templates/snippets/status/headers/read.html @@ -20,8 +20,6 @@ finished reading {{ book }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/reading.html b/bookwyrm/templates/snippets/status/headers/reading.html index 73e96ebbc..44c604620 100644 --- a/bookwyrm/templates/snippets/status/headers/reading.html +++ b/bookwyrm/templates/snippets/status/headers/reading.html @@ -20,8 +20,6 @@ started reading {{ book }} {% endif %} -{% if book.series %} -({{book.series}} {%if book.series_number %}#{{book.series_number}}) {% endif %} -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/review.html b/bookwyrm/templates/snippets/status/headers/review.html index 0bdcd29b1..95a6fc403 100644 --- a/bookwyrm/templates/snippets/status/headers/review.html +++ b/bookwyrm/templates/snippets/status/headers/review.html @@ -18,8 +18,6 @@ reviewed {{ book }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endwith %} diff --git a/bookwyrm/templates/snippets/status/headers/stopped_reading.html b/bookwyrm/templates/snippets/status/headers/stopped_reading.html index a00be181c..09f2e4264 100644 --- a/bookwyrm/templates/snippets/status/headers/stopped_reading.html +++ b/bookwyrm/templates/snippets/status/headers/stopped_reading.html @@ -20,9 +20,7 @@ stopped reading {{ book }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endspaceless %} diff --git a/bookwyrm/templates/snippets/status/headers/to_read.html b/bookwyrm/templates/snippets/status/headers/to_read.html index 4d1b2ab1b..c775c33a7 100644 --- a/bookwyrm/templates/snippets/status/headers/to_read.html +++ b/bookwyrm/templates/snippets/status/headers/to_read.html @@ -20,8 +20,6 @@ wants to read {{ book }} {% endif %} -{% if book.series %} -({{book.series}}{%if book.series_number %}, #{{book.series_number}}{% endif %}) -{% endif %} +{% include 'snippets/book_series.html' with book=book %} {% endspaceless %} From 592914dc91aad1a2a96c90321eef1006a9d4a060 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 23 Mar 2024 19:51:20 +0100 Subject: [PATCH 393/458] Render series number with comma and outside of link on book page --- bookwyrm/templates/book/book.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 4c345832e..83500a54b 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -45,18 +45,22 @@ {% endif %} {% if book.series %} - + {% spaceless %} {% if book.authors.exists %} {% endif %} + {% if book.series_number %} + , # + {{ book.series_number }} + {% endif %} + {% endspaceless %} {% endif %}

    {% endif %} From dd27684d4bc876a8de9360cdb5ac10054ccf427b Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 24 Mar 2024 20:53:49 +1100 Subject: [PATCH 394/458] set signed s3 url expiry with env value Adds S3_SIGNED_URL_EXPIRY val to .env and settings (defaults to 15 mins) Note that this is reset every time the user loads the exports page and is independent of the _creation_ of export files. --- .env.example | 3 +++ bookwyrm/settings.py | 1 + bookwyrm/views/preferences/export.py | 15 +++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 1bf6d5406..ee2ccd45a 100644 --- a/.env.example +++ b/.env.example @@ -71,6 +71,9 @@ ENABLE_THUMBNAIL_GENERATION=true USE_S3=false AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= +# seconds for signed S3 urls to expire +# this is currently only used for user export files +S3_SIGNED_URL_EXPIRY=900 # Commented are example values if you use a non-AWS, S3-compatible service # AWS S3 should work with only AWS_STORAGE_BUCKET_NAME and AWS_S3_REGION_NAME diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 77bec0d8e..d2ba490b7 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -375,6 +375,7 @@ if USE_HTTPS: USE_S3 = env.bool("USE_S3", False) USE_AZURE = env.bool("USE_AZURE", False) +S3_SIGNED_URL_EXPIRY = env.int("S3_SIGNED_URL_EXPIRY", 900) if USE_S3: # AWS settings diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 54d6df261..09b43155b 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -146,7 +146,12 @@ class Export(View): # pylint: disable=no-self-use @method_decorator(login_required, name="dispatch") class ExportUser(View): - """Let users export user data to import into another Bookwyrm instance""" + """ + Let users export user data to import into another Bookwyrm instance + This view creates signed URLs to pre-processed export files in + s3 storage on load (if they exist) and allows the user to create + a new file. + """ def get(self, request): """Request tar file""" @@ -166,8 +171,10 @@ class ExportUser(View): # for s3 we download directly from s3, so we need a signed url export["url"] = S3Boto3Storage.url( - storage, f"/exports/{job.task_id}.tar.gz", expire=900 - ) # temporarily downloadable file, expires after 5 minutes + storage, + f"/exports/{job.task_id}.tar.gz", + expire=settings.S3_SIGNED_URL_EXPIRY, + ) # for s3 we create a new tar file in s3, # so we need to check the size of _that_ file @@ -207,7 +214,7 @@ class ExportUser(View): return TemplateResponse(request, "preferences/export-user.html", data) def post(self, request): - """Download the json file of a user's data""" + """Trigger processing of a new user export file""" job = BookwyrmExportJob.objects.create(user=request.user) job.start_job() From 03587dfdc7ec1113151d8d7049e460e5c8ae6722 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 24 Mar 2024 20:56:20 +1100 Subject: [PATCH 395/458] migrations --- .../migrations/0197_merge_20240324_0235.py | 13 +++++++++++ ...198_alter_bookwyrmexportjob_export_data.py | 23 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 bookwyrm/migrations/0197_merge_20240324_0235.py create mode 100644 bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py diff --git a/bookwyrm/migrations/0197_merge_20240324_0235.py b/bookwyrm/migrations/0197_merge_20240324_0235.py new file mode 100644 index 000000000..a7c01a955 --- /dev/null +++ b/bookwyrm/migrations/0197_merge_20240324_0235.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.25 on 2024-03-24 02:35 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0196_merge_20240318_1737"), + ("bookwyrm", "0196_merge_pr3134_into_main"), + ] + + operations = [] diff --git a/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py b/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py new file mode 100644 index 000000000..95eddb278 --- /dev/null +++ b/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.25 on 2024-03-24 08:53 + +import bookwyrm.storage_backends +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0197_merge_20240324_0235"), + ] + + operations = [ + migrations.AlterField( + model_name="bookwyrmexportjob", + name="export_data", + field=models.FileField( + null=True, + storage=bookwyrm.storage_backends.ExportsS3Storage, + upload_to="", + ), + ), + ] From 7c2fa746ae3c1b0560c2a4411237a688ee513ce5 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 11:23:23 +0100 Subject: [PATCH 396/458] Revert "docker-compose.yml: make all bind mounts read only" This reverts commit 864304f128fc897348342ba83506441469e8fe53. --- docker-compose.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 034cc2677..71a844ba2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: networks: - main volumes: - - ./nginx:/etc/nginx/conf.d:ro + - ./nginx:/etc/nginx/conf.d - static_volume:/app/static - media_volume:/app/images db: @@ -26,7 +26,7 @@ services: env_file: .env command: python manage.py runserver 0.0.0.0:8000 volumes: - - .:/app:ro + - .:/app - static_volume:/app/static - media_volume:/app/images depends_on: @@ -41,7 +41,7 @@ services: image: redis:7.2.1 command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT} volumes: - - ./redis.conf:/etc/redis/redis.conf:ro + - ./redis.conf:/etc/redis/redis.conf - redis_activity_data:/data env_file: .env networks: @@ -51,7 +51,7 @@ services: image: redis:7.2.1 command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT} volumes: - - ./redis.conf:/etc/redis/redis.conf:ro + - ./redis.conf:/etc/redis/redis.conf - redis_broker_data:/data env_file: .env networks: @@ -64,7 +64,7 @@ services: - main command: celery -A celerywyrm worker -l info -Q high_priority,medium_priority,low_priority,streams,images,suggested_users,email,connectors,lists,inbox,imports,import_triggered,broadcast,misc volumes: - - .:/app:ro + - .:/app - static_volume:/app/static - media_volume:/app/images depends_on: @@ -78,7 +78,7 @@ services: - main command: celery -A celerywyrm beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler volumes: - - .:/app:ro + - .:/app - static_volume:/app/static - media_volume:/app/images depends_on: @@ -89,7 +89,7 @@ services: command: celery -A celerywyrm flower --basic_auth=${FLOWER_USER}:${FLOWER_PASSWORD} --url_prefix=flower env_file: .env volumes: - - .:/app:ro + - .:/app - static_volume:/app/static networks: - main @@ -102,7 +102,7 @@ services: env_file: .env volumes: - /app/dev-tools/ - - .:/app:rw + - .:/app profiles: - tools volumes: From 69f464418d9eecb83823a1f2bb88a6254515abf2 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 12:06:42 +0100 Subject: [PATCH 397/458] Remove problematic migration This migration is dependent on the runtime configuration (.env); a structural fix will follow. --- ...198_alter_bookwyrmexportjob_export_data.py | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py diff --git a/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py b/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py deleted file mode 100644 index 95eddb278..000000000 --- a/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.25 on 2024-03-24 08:53 - -import bookwyrm.storage_backends -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("bookwyrm", "0197_merge_20240324_0235"), - ] - - operations = [ - migrations.AlterField( - model_name="bookwyrmexportjob", - name="export_data", - field=models.FileField( - null=True, - storage=bookwyrm.storage_backends.ExportsS3Storage, - upload_to="", - ), - ), - ] From 073f62d5bb449cf5a4cbb2c85de320fc8e9dc382 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 11:51:37 +0100 Subject: [PATCH 398/458] Add exports_volume to docker-compose.yml Exports should be written to a Docker volume instead of to the bind mount (= source directory). This way they are shared between different containers even when they run on different machines. --- docker-compose.yml | 4 ++++ exports/.gitkeep | 0 2 files changed, 4 insertions(+) create mode 100644 exports/.gitkeep diff --git a/docker-compose.yml b/docker-compose.yml index 71a844ba2..634c021b6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,6 +29,7 @@ services: - .:/app - static_volume:/app/static - media_volume:/app/images + - exports_volume:/app/exports depends_on: - db - celery_worker @@ -67,6 +68,7 @@ services: - .:/app - static_volume:/app/static - media_volume:/app/images + - exports_volume:/app/exports depends_on: - db - redis_broker @@ -81,6 +83,7 @@ services: - .:/app - static_volume:/app/static - media_volume:/app/images + - exports_volume:/app/exports depends_on: - celery_worker restart: on-failure @@ -109,6 +112,7 @@ volumes: pgdata: static_volume: media_volume: + exports_volume: redis_broker_data: redis_activity_data: networks: diff --git a/exports/.gitkeep b/exports/.gitkeep new file mode 100644 index 000000000..e69de29bb From 471233c1dc6aa6aa3539a53a3f03641c103e5ed0 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 12:22:17 +0100 Subject: [PATCH 399/458] Use different export job fields for the different storage backends This way, the database definition is not depdendent on the runtime configuration. --- .../0198_export_job_separate_file_fields.py | 28 +++++++++++++++++++ bookwyrm/models/bookwyrm_export_job.py | 27 ++++++++++++++---- 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 bookwyrm/migrations/0198_export_job_separate_file_fields.py diff --git a/bookwyrm/migrations/0198_export_job_separate_file_fields.py b/bookwyrm/migrations/0198_export_job_separate_file_fields.py new file mode 100644 index 000000000..d9dd87eee --- /dev/null +++ b/bookwyrm/migrations/0198_export_job_separate_file_fields.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.25 on 2024-03-24 11:20 + +import bookwyrm.storage_backends +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0197_merge_20240324_0235"), + ] + + operations = [ + migrations.RenameField( + model_name="bookwyrmexportjob", + old_name="export_data", + new_name="export_data_file", + ), + migrations.AddField( + model_name="bookwyrmexportjob", + name="export_data_s3", + field=models.FileField( + null=True, + storage=bookwyrm.storage_backends.ExportsS3Storage, + upload_to="", + ), + ), + ] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 0cb726aa1..1e64b389f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -37,15 +37,30 @@ class BookwyrmAwsSession(BotoSession): class BookwyrmExportJob(ParentJob): """entry for a specific request to export a bookwyrm user""" - if settings.USE_S3: - storage = storage_backends.ExportsS3Storage - else: - storage = storage_backends.ExportsFileStorage + # Only one of these fields is used, dependent on the configuration. + export_data_file = FileField(null=True, storage=storage_backends.ExportsFileStorage) + export_data_s3 = FileField(null=True, storage=storage_backends.ExportsS3Storage) - export_data = FileField(null=True, storage=storage) export_json = JSONField(null=True, encoder=DjangoJSONEncoder) json_completed = BooleanField(default=False) + @property + def export_data(self): + """returns the file field of the configured storage backend""" + # TODO: We could check whether a field for a different backend is + # filled, to support migrating to a different backend. + if settings.USE_S3: + return self.export_data_s3 + return self.export_data_file + + @export_data.setter + def export_data(self, value): + """sets the file field of the configured storage backend""" + if settings.USE_S3: + self.export_data_s3 = value + else: + self.export_data_file = value + def start_job(self): """Start the job""" @@ -284,7 +299,7 @@ def start_export_task(**kwargs): # prepare the initial file and base json job.export_data = ContentFile(b"", str(uuid4())) job.export_json = job.user.to_activity() - job.save(update_fields=["export_data", "export_json"]) + job.save(update_fields=["export_data_file", "export_data_s3", "export_json"]) # let's go json_export.delay(job_id=job.id, job_user=job.user.id, no_children=False) From ab7b0893e0106a7a01cb727e35d31cd8faaf8fe6 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 12:47:26 +0100 Subject: [PATCH 400/458] User exports: handle files that no longer exist on file storage --- bookwyrm/views/preferences/export.py | 30 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 09b43155b..5ff0d8616 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -6,16 +6,17 @@ import io from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator from django.db.models import Q -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseServerError, Http404 from django.template.response import TemplateResponse from django.utils import timezone from django.views import View from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy as _ from django.shortcuts import redirect from storages.backends.s3boto3 import S3Boto3Storage -from bookwyrm import models +from bookwyrm import models, storage_backends from bookwyrm.models.bookwyrm_export_job import BookwyrmExportJob from bookwyrm import settings @@ -187,7 +188,11 @@ class ExportUser(View): else: # for local storage export_data is the tar file - export["size"] = job.export_data.size if job.export_data else 0 + try: + export["size"] = job.export_data.size if job.export_data else 0 + except FileNotFoundError: + # file no longer exists + export["size"] = 0 exports.append(export) @@ -230,10 +235,15 @@ class ExportArchive(View): def get(self, request, archive_id): """download user export file""" export = BookwyrmExportJob.objects.get(task_id=archive_id, user=request.user) - return HttpResponse( - export.export_data, - content_type="application/gzip", - headers={ - "Content-Disposition": 'attachment; filename="bookwyrm-account-export.tar.gz"' # pylint: disable=line-too-long - }, - ) + if isinstance(export.export_data.storage, storage_backends.ExportsFileStorage): + try: + return HttpResponse( + export.export_data, + content_type="application/gzip", + headers={ + "Content-Disposition": 'attachment; filename="bookwyrm-account-export.tar.gz"' # pylint: disable=line-too-long + }, + ) + except FileNotFoundError: + raise Http404() + return HttpResponseServerError() From 5bd66cb3f7a08669c9608a0e15afc18ed5cb7d43 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 13:03:47 +0100 Subject: [PATCH 401/458] Only generate signed S3 link to user export when user clicks download --- .../templates/preferences/export-user.html | 30 ++++++------------- bookwyrm/views/preferences/export.py | 29 ++++++++++++------ 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 26cd292e8..13fe16a77 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -126,27 +126,15 @@ {{ export.size|get_file_size }} - {% if export.job.complete and not export.job.status == "stopped" and not export.job.status == "failed" %} - {% if export.url%} -

    - - - - {% trans "Download your export" %} - - -

    - {% else %} -

    - - - - {% trans "Download your export" %} - - -

    - {% endif %} - + {% if export.url %} + + + + {% trans "Download your export" %} + + + {% elif export.job.complete and not export.job.status == "stopped" and not export.job.status == "failed" %} + {% trans "Archive is no longer available" %} {% endif %} diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 5ff0d8616..50641e86e 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -10,6 +10,7 @@ from django.http import HttpResponse, HttpResponseServerError, Http404 from django.template.response import TemplateResponse from django.utils import timezone from django.views import View +from django.urls import reverse from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.shortcuts import redirect @@ -166,17 +167,8 @@ class ExportUser(View): export = {"job": job} if settings.USE_S3: - # make custom_domain None so we can sign the url - # see https://github.com/jschneier/django-storages/issues/944 storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) - # for s3 we download directly from s3, so we need a signed url - export["url"] = S3Boto3Storage.url( - storage, - f"/exports/{job.task_id}.tar.gz", - expire=settings.S3_SIGNED_URL_EXPIRY, - ) - # for s3 we create a new tar file in s3, # so we need to check the size of _that_ file try: @@ -194,6 +186,9 @@ class ExportUser(View): # file no longer exists export["size"] = 0 + if export["size"] > 0: + export["url"] = reverse("prefs-export-file", args=[job.task_id]) + exports.append(export) site = models.SiteSettings.objects.get() @@ -235,6 +230,21 @@ class ExportArchive(View): def get(self, request, archive_id): """download user export file""" export = BookwyrmExportJob.objects.get(task_id=archive_id, user=request.user) + + if isinstance(export.export_data.storage, storage_backends.ExportsS3Storage): + # make custom_domain None so we can sign the url + # see https://github.com/jschneier/django-storages/issues/944 + storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) + try: + url = S3Boto3Storage.url( + storage, + f"/exports/{export.task_id}.tar.gz", + expire=settings.S3_SIGNED_URL_EXPIRY, + ) + except Exception: + raise Http404() + return redirect(url) + if isinstance(export.export_data.storage, storage_backends.ExportsFileStorage): try: return HttpResponse( @@ -246,4 +256,5 @@ class ExportArchive(View): ) except FileNotFoundError: raise Http404() + return HttpResponseServerError() From aee8dc16af13e0ba421e746f355da740bf778f6d Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 24 Mar 2024 13:27:01 +0100 Subject: [PATCH 402/458] Fix pylint warning --- bookwyrm/views/preferences/export.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 50641e86e..1d77e1200 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -12,7 +12,6 @@ from django.utils import timezone from django.views import View from django.urls import reverse from django.utils.decorators import method_decorator -from django.utils.translation import gettext_lazy as _ from django.shortcuts import redirect from storages.backends.s3boto3 import S3Boto3Storage From e0decbfd1d2a325354d5d93ad643d015f7003f59 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 25 Mar 2024 17:59:39 +0100 Subject: [PATCH 403/458] Fix urlescaped relative path to cover image in export Fixes #3292 --- bookwyrm/models/bookwyrm_export_job.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 1e64b389f..de96fb421 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -2,6 +2,7 @@ import logging from uuid import uuid4 +from urllib.parse import urlparse, unquote from boto3.session import Session as BotoSession from s3_tar import S3Tar @@ -97,6 +98,12 @@ class BookwyrmExportJob(ParentJob): self.complete_job() +def url2relativepath(url: str) -> str: + """turn an absolute URL into a relative filesystem path""" + parsed = urlparse(url) + return unquote(parsed.path[1:]) + + class AddBookToUserExportJob(ChildJob): """append book metadata for each book in an export""" @@ -112,9 +119,9 @@ class AddBookToUserExportJob(ChildJob): book["edition"] = self.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}" + book["edition"]["cover"]["url"] = url2relativepath( + book["edition"]["cover"]["url"] + ) # authors book["authors"] = [] From a51402241babf51ac213a6582a819e1022143983 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 25 Mar 2024 18:14:00 +0100 Subject: [PATCH 404/458] Refactor creation of user export archive --- bookwyrm/models/bookwyrm_export_job.py | 99 +++++++++++++------------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index de96fb421..8e3927b73 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -1,7 +1,6 @@ """Export user account to tar.gz file for import into another Bookwyrm instance""" import logging -from uuid import uuid4 from urllib.parse import urlparse, unquote from boto3.session import Session as BotoSession @@ -225,64 +224,68 @@ class AddFileToTar(ChildJob): # Using a series of jobs in a loop would be better try: - export_data = self.parent_export_job.export_data - export_json = self.parent_export_job.export_json - json_data = DjangoJSONEncoder().encode(export_json) - user = self.parent_export_job.user + export_job = self.parent_export_job + export_task_id = str(export_job.task_id) + + export_json_bytes = ( + DjangoJSONEncoder().encode(export_job.export_json).encode("utf-8") + ) + + user = export_job.user editions = get_books_for_user(user) - # filenames for later - export_data_original = str(export_data) - filename = str(self.parent_export_job.task_id) - if settings.USE_S3: - s3_job = S3Tar( + # Connection for writing temporary files + s3 = S3Boto3Storage() + + # Handle for creating the final archive + s3_archive_path = f"exports/{export_task_id}.tar.gz" + s3_tar = S3Tar( settings.AWS_STORAGE_BUCKET_NAME, - f"exports/{filename}.tar.gz", + s3_archive_path, session=BookwyrmAwsSession(), ) - # save json file - export_data.save( - f"archive_{filename}.json", ContentFile(json_data.encode("utf-8")) + # Save JSON file to a temporary location + export_json_tmp_file = f"exports/{export_task_id}/archive.json" + S3Boto3Storage.save( + s3, + export_json_tmp_file, + ContentFile(export_json_bytes), ) - s3_job.add_file(f"exports/{export_data.name}") + s3_tar.add_file(export_json_tmp_file) - # save image file - file_type = user.avatar.name.rsplit(".", maxsplit=1)[-1] - export_data.save(f"avatar_{filename}.{file_type}", user.avatar) - s3_job.add_file(f"exports/{export_data.name}") + # Add avatar image if present + if user.avatar: + s3_tar.add_file(f"images/{user.avatar.name}") - for book in editions: - if getattr(book, "cover", False): - cover_name = f"images/{book.cover.name}" - s3_job.add_file(cover_name, folder="covers") + for edition in editions: + if edition.cover: + s3_tar.add_file(f"images/{edition.cover.name}") - s3_job.tar() + # Create archive and store file name + s3_tar.tar() + export_job.export_data_s3 = s3_archive_path + export_job.save() - # delete child files - we don't need them any more - s3_storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) - S3Boto3Storage.delete(s3_storage, f"exports/{export_data_original}") - S3Boto3Storage.delete(s3_storage, f"exports/archive_{filename}.json") - S3Boto3Storage.delete( - s3_storage, f"exports/avatar_{filename}.{file_type}" - ) + # Delete temporary files + S3Boto3Storage.delete(s3, export_json_tmp_file) else: - export_data.open("wb") - with BookwyrmTarFile.open(mode="w:gz", fileobj=export_data) as tar: + export_job.export_data_file = f"{export_task_id}.tar.gz" + with export_job.export_data_file.open("wb") as f: + with BookwyrmTarFile.open(mode="w:gz", fileobj=f) as tar: + # save json file + tar.write_bytes(export_json_bytes) - tar.write_bytes(json_data.encode("utf-8")) + # Add avatar image if present + if user.avatar: + tar.add_image(user.avatar, directory="images/") - # Add avatar image if present - if getattr(user, "avatar", False): - tar.add_image(user.avatar, filename="avatar") - - for book in editions: - if getattr(book, "cover", False): - tar.add_image(book.cover) - - export_data.close() + for edition in editions: + if edition.cover: + tar.add_image(edition.cover, directory="images/") + export_job.save() self.complete_job() @@ -304,9 +307,8 @@ def start_export_task(**kwargs): try: # prepare the initial file and base json - job.export_data = ContentFile(b"", str(uuid4())) job.export_json = job.user.to_activity() - job.save(update_fields=["export_data_file", "export_data_s3", "export_json"]) + job.save(update_fields=["export_json"]) # let's go json_export.delay(job_id=job.id, job_user=job.user.id, no_children=False) @@ -374,10 +376,9 @@ def json_export(**kwargs): if not job.export_json.get("icon"): job.export_json["icon"] = {} else: - # change the URL to be relative to the JSON file - file_type = job.export_json["icon"]["url"].rsplit(".", maxsplit=1)[-1] - filename = f"avatar.{file_type}" - job.export_json["icon"]["url"] = filename + job.export_json["icon"]["url"] = url2relativepath( + job.export_json["icon"]["url"] + ) # Additional settings - can't be serialized as AP vals = [ From f721289b1da1499db0c8f2c13fab9faba41c5fc8 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 25 Mar 2024 18:13:09 +0100 Subject: [PATCH 405/458] Simplify logic for rendering user exports --- .../templates/preferences/export-user.html | 4 ++- bookwyrm/views/preferences/export.py | 28 ++++++------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/bookwyrm/templates/preferences/export-user.html b/bookwyrm/templates/preferences/export-user.html index 13fe16a77..bd675afaa 100644 --- a/bookwyrm/templates/preferences/export-user.html +++ b/bookwyrm/templates/preferences/export-user.html @@ -123,7 +123,9 @@ + {% if export.size %} {{ export.size|get_file_size }} + {% endif %} {% if export.url %} @@ -133,7 +135,7 @@ {% trans "Download your export" %} - {% elif export.job.complete and not export.job.status == "stopped" and not export.job.status == "failed" %} + {% elif export.unavailable %} {% trans "Archive is no longer available" %} {% endif %} diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index 1d77e1200..f501f331b 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -165,28 +165,16 @@ class ExportUser(View): for job in jobs: export = {"job": job} - if settings.USE_S3: - storage = S3Boto3Storage(querystring_auth=True, custom_domain=None) - - # for s3 we create a new tar file in s3, - # so we need to check the size of _that_ file + if job.export_data: try: - export["size"] = S3Boto3Storage.size( - storage, f"exports/{job.task_id}.tar.gz" - ) - except Exception: # pylint: disable=broad-except - export["size"] = 0 - - else: - # for local storage export_data is the tar file - try: - export["size"] = job.export_data.size if job.export_data else 0 + export["size"] = job.export_data.size + export["url"] = reverse("prefs-export-file", args=[job.task_id]) except FileNotFoundError: - # file no longer exists - export["size"] = 0 - - if export["size"] > 0: - export["url"] = reverse("prefs-export-file", args=[job.task_id]) + # file no longer exists locally + export["unavailable"] = True + except Exception: # pylint: disable=broad-except + # file no longer exists on storage backend + export["unavailable"] = True exports.append(export) From bd95bcd50b4822fc0fe196253a993a9fca52315c Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 25 Mar 2024 18:14:14 +0100 Subject: [PATCH 406/458] Add test for special character in cover filename --- .../tests/models/test_bookwyrm_export_job.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index 267d30217..1e0f6a39f 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -1,7 +1,13 @@ """test bookwyrm user export functions""" import datetime +from io import BytesIO +import pathlib + from unittest.mock import patch +from PIL import Image + +from django.core.files.base import ContentFile from django.utils import timezone from django.test import TestCase @@ -86,6 +92,15 @@ class BookwyrmExportJob(TestCase): title="Example Edition", parent_work=self.work ) + # edition cover + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + self.edition.cover.save("tĆØst.jpg", ContentFile(output.getvalue())) + self.edition.authors.add(self.author) # readthrough @@ -160,6 +175,7 @@ class BookwyrmExportJob(TestCase): self.assertIsNotNone(self.job.export_json["books"]) self.assertEqual(len(self.job.export_json["books"]), 1) book = self.job.export_json["books"][0] + self.assertEqual(book["work"]["id"], self.work.remote_id) self.assertEqual(len(book["authors"]), 1) self.assertEqual(len(book["shelves"]), 1) @@ -169,6 +185,11 @@ class BookwyrmExportJob(TestCase): self.assertEqual(len(book["quotations"]), 1) self.assertEqual(len(book["readthroughs"]), 1) + self.assertEqual(book["edition"]["id"], self.edition.remote_id) + self.assertEqual( + book["edition"]["cover"]["url"], f"images/{self.edition.cover.name}" + ) + def test_start_export_task(self): """test saved list task saves initial json and data""" From d9bf848cfab311788fbe12392243776bbb07cff0 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Mon, 25 Mar 2024 18:25:43 +0100 Subject: [PATCH 407/458] Fix pylint warnings --- bookwyrm/models/bookwyrm_export_job.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 8e3927b73..c94c6bec0 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -236,7 +236,7 @@ class AddFileToTar(ChildJob): if settings.USE_S3: # Connection for writing temporary files - s3 = S3Boto3Storage() + storage = S3Boto3Storage() # Handle for creating the final archive s3_archive_path = f"exports/{export_task_id}.tar.gz" @@ -249,7 +249,7 @@ class AddFileToTar(ChildJob): # Save JSON file to a temporary location export_json_tmp_file = f"exports/{export_task_id}/archive.json" S3Boto3Storage.save( - s3, + storage, export_json_tmp_file, ContentFile(export_json_bytes), ) @@ -269,12 +269,12 @@ class AddFileToTar(ChildJob): export_job.save() # Delete temporary files - S3Boto3Storage.delete(s3, export_json_tmp_file) + S3Boto3Storage.delete(storage, export_json_tmp_file) else: export_job.export_data_file = f"{export_task_id}.tar.gz" - with export_job.export_data_file.open("wb") as f: - with BookwyrmTarFile.open(mode="w:gz", fileobj=f) as tar: + with export_job.export_data_file.open("wb") as tar_file: + with BookwyrmTarFile.open(mode="w:gz", fileobj=tar_file) as tar: # save json file tar.write_bytes(export_json_bytes) From 011e4a27a66be4b6e1203c5674f3036cf071c10a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 25 Mar 2024 16:13:00 -0700 Subject: [PATCH 408/458] Updates locales and adds missing trimmed on blocktrans --- bookwyrm/templates/413.html | 2 +- locale/ca_ES/LC_MESSAGES/django.mo | Bin 149032 -> 160564 bytes locale/ca_ES/LC_MESSAGES/django.po | 465 ++++++++++++++++----- locale/de_DE/LC_MESSAGES/django.mo | Bin 149930 -> 30883 bytes locale/de_DE/LC_MESSAGES/django.po | 458 ++++++++++++++++----- locale/en_US/LC_MESSAGES/django.po | 584 +++++++++++++++++--------- locale/eo_UY/LC_MESSAGES/django.mo | Bin 144089 -> 147953 bytes locale/eo_UY/LC_MESSAGES/django.po | 457 ++++++++++++++++----- locale/es_ES/LC_MESSAGES/django.mo | Bin 148786 -> 160115 bytes locale/es_ES/LC_MESSAGES/django.po | 485 ++++++++++++++++------ locale/eu_ES/LC_MESSAGES/django.mo | Bin 150037 -> 161391 bytes locale/eu_ES/LC_MESSAGES/django.po | 467 ++++++++++++++++----- locale/fi_FI/LC_MESSAGES/django.mo | Bin 143133 -> 144157 bytes locale/fi_FI/LC_MESSAGES/django.po | 432 ++++++++++++++++---- locale/fr_FR/LC_MESSAGES/django.mo | Bin 153012 -> 44850 bytes locale/fr_FR/LC_MESSAGES/django.po | 433 ++++++++++++++++---- locale/gl_ES/LC_MESSAGES/django.mo | Bin 145356 -> 156562 bytes locale/gl_ES/LC_MESSAGES/django.po | 460 ++++++++++++++++----- locale/it_IT/LC_MESSAGES/django.mo | Bin 145641 -> 159181 bytes locale/it_IT/LC_MESSAGES/django.po | 507 +++++++++++++++++------ locale/ko_KR/LC_MESSAGES/django.mo | Bin 55099 -> 59936 bytes locale/ko_KR/LC_MESSAGES/django.po | 6 +- locale/lt_LT/LC_MESSAGES/django.mo | Bin 145033 -> 144699 bytes locale/lt_LT/LC_MESSAGES/django.po | 415 +++++++++++++++---- locale/nl_NL/LC_MESSAGES/django.mo | Bin 147633 -> 151859 bytes locale/nl_NL/LC_MESSAGES/django.po | 449 +++++++++++++++----- locale/no_NO/LC_MESSAGES/django.mo | Bin 96055 -> 95977 bytes locale/no_NO/LC_MESSAGES/django.po | 427 +++++++++++++++---- locale/pl_PL/LC_MESSAGES/django.mo | Bin 130388 -> 138824 bytes locale/pl_PL/LC_MESSAGES/django.po | 533 +++++++++++++++++------- locale/pt_BR/LC_MESSAGES/django.mo | Bin 92307 -> 91988 bytes locale/pt_BR/LC_MESSAGES/django.po | 423 +++++++++++++++---- locale/pt_PT/LC_MESSAGES/django.mo | Bin 138784 -> 138441 bytes locale/pt_PT/LC_MESSAGES/django.po | 415 +++++++++++++++---- locale/ro_RO/LC_MESSAGES/django.mo | Bin 123365 -> 123024 bytes locale/ro_RO/LC_MESSAGES/django.po | 423 +++++++++++++++---- locale/sv_SE/LC_MESSAGES/django.mo | Bin 137804 -> 137881 bytes locale/sv_SE/LC_MESSAGES/django.po | 421 +++++++++++++++---- locale/uk_UA/LC_MESSAGES/django.mo | Bin 168423 -> 172148 bytes locale/uk_UA/LC_MESSAGES/django.po | 448 +++++++++++++++----- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 94511 -> 44096 bytes locale/zh_Hans/LC_MESSAGES/django.po | 586 +++++++++++++++++++-------- locale/zh_Hant/LC_MESSAGES/django.mo | Bin 38001 -> 38839 bytes locale/zh_Hant/LC_MESSAGES/django.po | 531 +++++++++++++++++------- 44 files changed, 7567 insertions(+), 2260 deletions(-) diff --git a/bookwyrm/templates/413.html b/bookwyrm/templates/413.html index 337436aae..a849a764f 100644 --- a/bookwyrm/templates/413.html +++ b/bookwyrm/templates/413.html @@ -8,7 +8,7 @@

    {% trans "File too large" %}

    {% trans "The file you are uploading is too large." %}

    - {% blocktrans %} + {% blocktrans trimmed %} You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE setting. {% endblocktrans %}

    diff --git a/locale/ca_ES/LC_MESSAGES/django.mo b/locale/ca_ES/LC_MESSAGES/django.mo index ff27fe43358cc89955063433521227cd82b93e5d..4efccdb669f8302479aa98f93682808b7bb4b34f 100644 GIT binary patch delta 43026 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 delta 32312 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®uhiZ-0 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 M94Y*In5WVI09CtzD*ylh diff --git a/locale/ca_ES/LC_MESSAGES/django.po b/locale/ca_ES/LC_MESSAGES/django.po index f73aa49bf..b40a248bf 100644 --- a/locale/ca_ES/LC_MESSAGES/django.po +++ b/locale/ca_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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:11\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-14 20:35\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Catalan\n" "Language: ca\n" @@ -54,19 +54,19 @@ msgstr "La contrasenya no coincideix" msgid "Incorrect Password" msgstr "La contrasenya no Ć©s correcta" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "La data de finalitzaciĆ³ de lectura no pot ser anterior a la d'inici." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "La data d'aturada de lectura no pot ser anterior a la d'inici." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "La data d'aturada de la lectura no pot ser en el futur." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "La data de finalitzaciĆ³ de la lectura no pot ser en el futur." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Informe generat automĆ ticament" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendent" @@ -258,17 +259,24 @@ msgstr "Seguidors" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Actiu" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Complet" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Aturat" @@ -284,6 +292,10 @@ msgstr "Error en carregar el llibre" msgid "Could not find a match for book" msgstr "No s'ha trobat el llibre" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Ha fallat" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Lliure" @@ -359,7 +371,7 @@ msgstr "Ressenya" msgid "Comments" msgstr "Comentaris" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citacions" @@ -461,7 +473,7 @@ msgstr "Svenska (suec)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (UcraĆÆnĆØs)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (xinĆØs tradicional)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Vaja!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "PermĆ­s denegat" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "No tens permĆ­s per veure aquesta pĆ gina ni per dur a terme aquesta acciĆ³. El vostre nivell de permĆ­s d'usuari Ć©s %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Si creieu que haurĆ­eu de tenir accĆ©s, parleu amb l'administrador del vostre servidor BookWyrm." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ 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 "" +msgstr "El fitxer Ć©s massa gran" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "El fitxer que estĆ s carregant Ć©s massa gran." #: 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 "" +msgstr "\n" +"Podeu provar d'utilitzar un fitxer mĆ©s petit o demanar al vostre administrador del servidor BookWyrm que augmenti la configuraciĆ³ de DATA_UPLOAD_MAX_MEMORY_SIZE.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +978,7 @@ msgstr "Desa" #: 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" @@ -981,6 +996,7 @@ msgstr "La cĆ rrega de les dades es connectarĆ  a %(source_name)sLists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!" -msgstr "" +msgstr "Utilitzeu els enllaƧos Llistes, Descobriu i Els vostres llibres per descobrir suggeriments de lectura i els darrers esdeveniments en aquest servidor, o per veure els vostres llibres catalogats!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2599,7 @@ msgstr "Notificacions" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Es pot accedir al vostre perfil, directori d'usuaris, missatges directes i configuraciĆ³ fent clic al vostre nom al menĆŗ aquĆ­." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2826,111 +2846,121 @@ msgid "No activities for this hashtag yet!" msgstr "Cap activitat per a aquesta etiqueta!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "Importa Llibres" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importa la llista de llibres" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "Fitxer CSV no vĆ lid" -#: 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] "Actualment se us permet la importaciĆ³ de %(display_size)s llibres cada %(import_limit_reset)s dia." msgstr[1] "Actualment se us permet la importaciĆ³ de %(display_size)s llibres cada %(import_limit_reset)s dies." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "Et queden %(display_left)s llibres per importar." -#: 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 "Les importacions recents han durat %(hours)s de mitjana." -#: 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 "Les importacions recents han durat %(minutes)s de mitjana." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Font de la informaciĆ³:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Podeu descarregar-vos les vostres dades de Goodreads des de la pĆ gina d'Importa/Exporta del vostre compte de Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Arxiu de dades:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Inclou ressenyes" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "ConfiguraciĆ³ de privacitat per les ressenyes importades:" -#: 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 "Importa" -#: 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 "Has arribat al lĆ­mit d'importacions." -#: 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 "Les importacions es troben temporalment deshabilitades; grĆ cies per la vostra paciĆØncia." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Importacions recents" -#: 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 "Data de creaciĆ³" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Darrera actualitzaciĆ³" -#: 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 "Items" -#: 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 "No hi ha cap importaciĆ³ recent" @@ -2966,7 +2996,8 @@ msgid "Refresh" msgstr "Refresca" #: 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 "Atura la importaciĆ³" @@ -3064,6 +3095,133 @@ msgstr "Aquesta importaciĆ³ estĆ  en un format antic que ja no es mantĆ©. Si vol msgid "Update import" msgstr "Actualitza la importaciĆ³" +#: 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 "Importa el compte de BookWyrm" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "No Ć©s un fitxer d'importaciĆ³ vĆ lid" + +#: 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 "Si voleu migrar qualsevol estat (comentaris, ressenyes o cites), heu de definir aquest compte com a Ć lies del que esteu migrant o bĆ© moure aquest compte. a aquest, abans d'importar les dades d'usuari." + +#: 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 "Actualment podeu importar un usuari cada %(user_import_hours)s hores." + +#: 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 "A continuaciĆ³, podreu importar un fitxer d'usuari a %(next_available)s" + +#: bookwyrm/templates/import/import_user.html:41 +msgid "Step 1:" +msgstr "Pas 1:" + +#: 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 "Seleccioneu un fitxer d'exportaciĆ³ generat des d'un altre compte de BookWyrm. El format del fitxer hauria de ser .tar.gz." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "Pas 2:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "Desmarqueu les caselles de selecciĆ³ de les dades que no vulgueu incloure a la vostra importaciĆ³." + +#: 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 "Perfil d'usuari" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Sobreescriu el nom de visualitzaciĆ³, el resum i l'avatar" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "ConfiguraciĆ³ de l'usuari" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Sobreescriu:" + +#: bookwyrm/templates/import/import_user.html:86 +msgid "Whether manual approval is required for other users to follow your account" +msgstr "Si cal l'aprovaciĆ³ manual perquĆØ altres usuaris segueixin el vostre compte" + +#: bookwyrm/templates/import/import_user.html:89 +msgid "Whether following/followers are shown on your profile" +msgstr "Si es mostren els seguidors/seguidors al teu perfil" + +#: bookwyrm/templates/import/import_user.html:92 +msgid "Whether your reading goal is shown on your profile" +msgstr "Si el vostre objectiu de lectura es mostra al vostre perfil" + +#: bookwyrm/templates/import/import_user.html:95 +msgid "Whether you see user follow suggestions" +msgstr "Tant si veieu que l'usuari segueix els suggeriments" + +#: bookwyrm/templates/import/import_user.html:98 +msgid "Whether your account is suggested to others" +msgstr "Si el teu compte Ć©s suggerit a altres persones" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "La teva zona horĆ ria" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "La vostra configuraciĆ³ de privadesa de publicaciĆ³ predeterminada" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Seguidors i seguidors" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Usuaris bloquejats" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Objectius de lectura" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Sobreescriu els objectius de lectura per a tots els anys que figuren al fitxer d'importaciĆ³" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Prestatges" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Historial de lectura" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "Ressenyes de llibres" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Comentaris sobre llibres" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Llistes de llibres" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Llistes desades" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3242,7 @@ msgid "Reject" msgstr "Rebutja" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Elements fallits" @@ -3747,8 +3905,8 @@ msgstr "%(related_user)s us ha convidat a #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Nova solĀ·licitud d'invitaciĆ³ esperant resposta" +msgstr[1] "%(display_count)s noves solĀ·licituds d'invitaciĆ³ en espera de resposta" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4022,16 @@ msgstr "ha canviat el nom de %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "ha canviat la descripciĆ³ de %(group_name)s" +#: bookwyrm/templates/notifications/items/user_export.html:14 +#, python-format +msgid "Your user export is ready." +msgstr "La vostra exportaciĆ³ d'usuari estĆ  a punt." + +#: bookwyrm/templates/notifications/items/user_import.html:14 +#, python-format +msgid "Your user import is complete." +msgstr "La vostra importaciĆ³ d'usuari s'ha completat." + #: bookwyrm/templates/notifications/notifications_page.html:19 msgid "Delete notifications" msgstr "Elimina les notificacions" @@ -4107,7 +4275,7 @@ msgstr "Esborra l'Ć lies" #: 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 "Usuaris bloquejats" @@ -4242,14 +4410,66 @@ msgstr "Privacitat de publicaciĆ³ per defecte:" 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 "Cerques prestatges privats? Pots modificar els nivells de visibilitat dels teus prestatges. Ves a Els teus llibres, tria un prestatge de la barra de pestanyes i prem \"edita prestatge.\"" +#: 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 "Exporta el compte de 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 "Podeu crear un fitxer d'exportaciĆ³ aquĆ­. AixĆ² us permetrĆ  migrar les vostres dades a un altre compte de BookWyrm." + +#: bookwyrm/templates/preferences/export-user.html:17 +msgid "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "

    El vostre fitxer inclourĆ :

    • Perfil d'usuari
    • La majoria de la configuraciĆ³ de l'usuari
    • Objectius de lectura
    • Prestatges
    • Historial de lectura
    • Ressenyes de llibres
    • Estats
    • Les vostres prĆ²pies llistes i llistes desades
    • Quins usuaris seguiu i bloquegeu

    El vostre fitxer no inclourĆ :

    • Missatges directes
    • Respostes als vostres estats
    • Grups
    • Preferits< /li>
    " + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "Al teu nou compte BookWyrm pots triar quĆØ importar: no haurĆ s d'importar tot el que s'exporti." + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "Si voleu migrar qualsevol estat (comentaris, ressenyes o cites), heu de definir el compte al qual us moveu com a Ć lies d'aquest, o bĆ© moure aquest compte. al compte nou, abans d'importar les dades d'usuari." + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "Podreu crear un fitxer d'exportaciĆ³ nou a %(next_available)s" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Creeu un fitxer d'exportaciĆ³ d'usuari" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Exportacions recents" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "Els fitxers d'exportaciĆ³ de l'usuari es mostraran \"complets\" un cop estiguin preparats. AixĆ² pot trigar una mica. Feu clic a l'enllaƧ per descarregar el vostre fitxer." + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Data" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Mida" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Descarrega la teva exportaciĆ³" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "ExportaciĆ³ CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Exporta la llista de llibres" #: 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 "La vostra exportaciĆ³ inclourĆ  tots els llibres dels vostres prestatges, llibres que heu ressenyat i llibres amb activitat de lectura." +msgid "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." +msgstr "El vostre fitxer d'exportaciĆ³ CSV inclourĆ  tots els llibres dels vostres prestatges, els llibres que hĆ giu revisat i els llibres amb activitat de lectura.
    Feu servir aixĆ² per importar a un servei com Goodreads." #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4487,7 @@ msgstr "Moure al compte" msgid "Data" msgstr "Dades" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "ExportaciĆ³ CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relacions" @@ -4763,7 +4979,8 @@ msgid "Active Tasks" msgstr "Tasques actives" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5157,9 +5374,14 @@ msgid "No instances found" msgstr "No s'ha trobat cap instĆ ncia" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Atura la importaciĆ³?" +#: 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 "Aquesta acciĆ³ aturarĆ  la importaciĆ³ de l'usuari abans que es completi i no es pot desfer" + #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" msgstr "Deshabilita iniciar noves importacions" @@ -5172,70 +5394,107 @@ msgstr "Aquesta acciĆ³ nomĆ©s estĆ  indicada pe a quan les coses han anat molt m msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Mentre les importacions es troben deshabilitades, els usuaris no podran iniciar noves importacions, perĆ² les que es troben en curs no es veuran afectades." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." +msgstr "Aquesta configuraciĆ³ impedeix tant les importacions de llibres com les d'usuaris." + +#: bookwyrm/templates/settings/imports/imports.html:37 msgid "Disable imports" msgstr "Deshabilitar les importacions" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Els usuaris no poden iniciar noves importacions actualment" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Habilitar les importacions" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limita la quantitat d'importacions" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Alguns usuaris poden intentar importar una gran quantitat de llibres, cosa que podries voler limitar." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Estableix el valor a 0 per tal de no especificar cap limitaciĆ³." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Estableix el lĆ­mit d'importacions en" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "llibres cada" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dies." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Estableix el lĆ­mit" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "Limiteu la freqĆ¼ĆØncia amb quĆØ els usuaris poden importar i exportar" + +#: 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 "Alguns usuaris poden intentar executar importacions o exportacions d'usuaris amb molta freqĆ¼ĆØncia, cosa que voleu limitar." + +#: bookwyrm/templates/settings/imports/imports.html:111 +msgid "Restrict user imports and exports to once every " +msgstr "Restringeix les importacions i exportacions dels usuaris a una vegada cada " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "hores" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Canvia el lĆ­mit" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "ImportaciĆ³ de llibres" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Completat" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Usuari" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Data actualitzaciĆ³" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Elements pendents" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "ƍtems amb ĆØxit" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "No s'han trobat importacions coincidents." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "ImportaciĆ³ d'usuaris" + #: 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 @@ -5722,7 +5981,7 @@ msgstr "Estableix el tema per defecte de la instĆ ncia" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Sembla que un dels vostres temes estĆ  trencat. Si seleccioneu aquest tema, l'aplicaciĆ³ no es podrĆ  utilitzar." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5776,15 +6035,15 @@ msgstr "Elimina el tema" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Prova aquest tema" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Tema trencat" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "S'ha carregat amb ĆØxit" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5833,7 +6092,7 @@ msgstr "No s'ha configurat" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Aquest compte Ć©s l'actor de la instĆ ncia per signar solĀ·licituds HTTP." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5905,15 +6164,15 @@ msgstr "Accions d'usuari" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Aquest Ć©s l'actor administrador de la instĆ ncia" #: 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 "" +msgstr "No heu de suprimir ni desactivar aquest compte, ja que Ć©s fonamental per al funcionament del vostre servidor. Aquest actor signa solĀ·licituds GET sortints per facilitar la interacciĆ³ amb els servidors d'ActivityPub segurs." #: 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 "" +msgstr "Els usuaris normals no poden descobrir aquest compte i no tĆ© una pĆ gina de perfil." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6048,17 +6307,15 @@ msgstr "Crea un prestatge" msgid "Edit Shelf" msgstr "Edita el prestatge" -#: 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: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:66 +msgid "Import Books" +msgstr "Importa Llibres" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6412,7 +6669,7 @@ 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 "" +msgstr "%(user)s s'ha mogut a %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo index 57ec9f361d52e047f1f0a2fa25d36fb1bb0ed8e2..4ce83f72b3f3850c58528f13afcd23442a75a515 100644 GIT binary patch literal 30883 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�CGK<(i`HJk;u>h}7zsZ}K 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

    *2S!IfeBEXiaA*$JHK^yF8PGe?_L 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 WpQ~N}<=T`|=sUhLbH2BCb@Ct3jj$2` diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index c88645d94..a2f088210 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-16 02:19\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -54,19 +54,19 @@ msgstr "Passwort stimmt nicht Ć¼berein" msgid "Incorrect Password" msgstr "Falsches Passwort" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Enddatum darf nicht vor dem Startdatum liegen." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Das Datum fĆ¼r \"Lesen gestoppt\" kann nicht vor dem Lesestart sein." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Das Datum fĆ¼r \"Lesen gestoppt\" kann nicht in der Zukunft sein." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Das Datum \"Lesen beendet\" kann nicht in der Zukunft liegen." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automatisch generierter Bericht" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Ausstehend" @@ -258,17 +259,24 @@ msgstr "Follower*innen" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiv" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Abgeschlossen" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Gestoppt" @@ -284,6 +292,10 @@ msgstr "Fehler beim Laden des Buches" msgid "Could not find a match for book" msgstr "Keine Ɯbereinstimmung fĆ¼r das Buch gefunden" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Fehlgeschlagen" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Kostenlos" @@ -359,7 +371,7 @@ msgstr "Rezensionen" msgid "Comments" msgstr "Kommentare" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Zitate" @@ -461,7 +473,7 @@ msgstr "Svenska (Schwedisch)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainisch)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Chinesisch, traditionell)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Oh nein!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Zugiff verweigert" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Du hast keine Berechtigung, diese Seite zu sehen oder diese Aktion durchzufĆ¼hren. Deine Berechtigungsstufe ist %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Wenn du glaubst, dass du Zugang haben solltest, wende dich bitte an deine(n) BookWyrm-Server-Administrator*in." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,18 @@ 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 "" +msgstr "Datei zu groƟ" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "Die Datei, die du hochladen willst, ist zu groƟ." #: 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 "" +msgstr " Du kannst es mit einer kleineren Datei probieren oder deine(n) BookWyrm-Server-Administrator*in bitten, den Wert der Einstellung DATA_UPLOAD_MAX_MEMORY_SIZE zu erhƶhen.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +977,7 @@ msgstr "Speichern" #: 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" @@ -981,6 +995,7 @@ msgstr "Das Laden von Daten wird eine Verbindung zu %(source_name)sLists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!" -msgstr "" +msgstr "Verwende die Links Listen, Entdecke, und Deine BĆ¼cher um LesevorschlƤge, die neuesten Ereignisse auf diesem Server oder katalogisierte BĆ¼cher einzusehen!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2598,7 @@ msgstr "Benachrichtigungen" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Dein Profil, dein Verzeichnis, deine Direktnachrichten und deine Einstellungen kƶnnen durch das Klicken auf deinen Namen hier im MenĆ¼ aufgerufen werden." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2826,111 +2845,121 @@ msgid "No activities for this hashtag yet!" msgstr "Keine AktivitƤten fĆ¼r diesen Hashtag bisher!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "BĆ¼cher importieren" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "BĆ¼cherliste importieren" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "Keine gĆ¼ltige CSV-Datei" -#: 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] "Aktuell dĆ¼rfen Sie %(display_size)s BĆ¼cher, alle %(import_limit_reset)s Tage importieren." msgstr[1] "Zurzeit dĆ¼rfen Sie alle %(import_limit_reset)s Tage bis zu %(display_size)s BĆ¼cher importieren." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "Du hast noch %(display_left)s Ć¼brig." -#: 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 "Im Durchschnitt haben die letzten Importe %(hours)s Stunden in Anspruch genommen." -#: 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 "Im Durchschnitt haben die letzten Importe %(minutes)s Minuten in Anspruch genommen." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Datenquelle:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Du kannst deine Goodreads-Daten von der Import / Export-Seite deines Goodreads-Kontos downloaden." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Datei:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Besprechungen einschlieƟen" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Datenschutzeinstellung fĆ¼r importierte Besprechungen:" -#: 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 "Importieren" -#: 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 "Sie haben das Importlimit erreicht." -#: 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 "Importe sind vorĆ¼bergehend deaktiviert; vielen Dank fĆ¼r deine Geduld." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Zuletzt importiert" -#: 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 "Erstellungsdatum" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: 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 "EintrƤge" -#: 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 "Keine aktuellen Importe" @@ -2966,7 +2995,8 @@ msgid "Refresh" msgstr "Aktualisieren" #: 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 "Import stoppen" @@ -3064,6 +3094,133 @@ msgstr "Dieser Import ist in einem alten Format, das nicht mehr unterstĆ¼tzt wir msgid "Update import" msgstr "Import aktualisieren" +#: 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-Konto importieren" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "Keine gĆ¼ltige Importdatei" + +#: 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 "Wenn du etwaige Status (Kommentare, Rezensionen oder Zitate) migrieren mƶchtest, musst du entweder diesen Account als einen Alias desjenigen setzen, von dem du migrierst oder ihn zu diesem umziehen, bevor du deine Benutzerdaten importierst." + +#: 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 "Derzeit darfst Du alle %(user_import_hours)s Stunden einen Account importieren." + +#: 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 "Zum Zeitpunkt %(next_available)s kannst Du erneut einen Account aus einer Exportdatei importieren" + +#: bookwyrm/templates/import/import_user.html:41 +msgid "Step 1:" +msgstr "Schritt 1:" + +#: 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 "WƤhle einen Dateiexport eines anderen BookWyrm-Accounts aus. Das Dateiformat sollte .tar.gz sein." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "Schritt 2:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "WƤhle die Checkboxen ab fĆ¼r Daten, die Du nicht importieren mƶchtest." + +#: 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 "Profil" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Ɯberschreibe Anzeigename, Zusammenfassung und Profilbild" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "Benutzereinstellungen" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Ɯberschreibt:" + +#: bookwyrm/templates/import/import_user.html:86 +msgid "Whether manual approval is required for other users to follow your account" +msgstr "Ob eine manuelle Freigabe fĆ¼r Benutzer*innen erforderlich ist, die dir folgen wollen" + +#: bookwyrm/templates/import/import_user.html:89 +msgid "Whether following/followers are shown on your profile" +msgstr "Ob deine Folgenden und Gefolgte auf deinem Profil angezeigt werden" + +#: bookwyrm/templates/import/import_user.html:92 +msgid "Whether your reading goal is shown on your profile" +msgstr "Ob dein Leseziel in deinem Profil angezeigt wird" + +#: bookwyrm/templates/import/import_user.html:95 +msgid "Whether you see user follow suggestions" +msgstr "Ob dir Benutzer*innen zum Folgen vorgeschlagen werden" + +#: bookwyrm/templates/import/import_user.html:98 +msgid "Whether your account is suggested to others" +msgstr "Ob dein Account anderen vorgeschlagen wird" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "Deine Zeitzone" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "Deine Standardeinstellung fĆ¼r Beitragssichtbarkeit" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Folgende und Gefolgte" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Blockierte Accounts" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Leseziel" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Ɯberschreibe die Leseziele aller in der Import-Datei vorhanden Jahre" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Regale" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Leseverlauf" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "Rezensionen" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Kommentare zu BĆ¼chern" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Buchlisten" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Gespeicherte Listen" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3241,7 @@ msgid "Reject" msgstr "Ablehnen" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Fehlgeschlagene Elemente" @@ -3747,8 +3904,8 @@ msgstr "%(related_user)s hat dich eingelad #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Neue Einladungsanfrage wartet auf Antwort" +msgstr[1] "%(display_count)s neue Einladungsanfragen warten auf Antwort" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4021,16 @@ msgstr "hat den Namen von %(group_name)s geƤnder msgid "has changed the description of %(group_name)s" msgstr "hat die Beschreibung von %(group_name)s geƤndert" +#: bookwyrm/templates/notifications/items/user_export.html:14 +#, python-format +msgid "Your user export is ready." +msgstr "Dein Export des Accounts ist bereit." + +#: bookwyrm/templates/notifications/items/user_import.html:14 +#, python-format +msgid "Your user import is complete." +msgstr "Der Import deines Accounts ist abgeschlossen." + #: bookwyrm/templates/notifications/notifications_page.html:19 msgid "Delete notifications" msgstr "Benachrichtigungen lƶschen" @@ -4107,7 +4274,7 @@ msgstr "Alias entfernen" #: 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 "Gesperrte Benutzer*innen" @@ -4242,14 +4409,66 @@ msgstr "Voreinstellung fĆ¼r Beitragssichtbarkeit:" 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 "Auf der Suche nach der PrivatsphƤre des Regals? Du kannst fĆ¼r jedes deiner Regale ein separates Sichtbarkeitsniveau festlegen. Gehe zu Deine BĆ¼cher, wƤhle ein Regal aus der Registerleiste und klicke auf \"Regal bearbeiten\"" +#: 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-Konto exportieren" + +#: 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 "Hier kannst du eine Export-Datei erstellen. So kannst du deine Daten zu einem anderen BookWyrm-Account migrieren." + +#: bookwyrm/templates/preferences/export-user.html:17 +msgid "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "

    Deine Datei wird enthalten:

    • Profil
    • Die meisten Benutzereinstellungen
    • Leseziele
    • Regale
    • Leseverlauf
    • Rezensionen
    • Die Status
    • Eigene und gespeicherte Listen
    • Gefolgte und geblockte Benutzer*innen

    Deine Datei wird nicht enthalten:

    • Direktnachrichten
    • Antworten auf deine Status
    • Gruppen
    • Favoriten
    " + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "In deinem neuen BookWyrm-Account kannst du entscheiden, was du importieren mƶchtest: Du musst nicht alles importieren, was exportiert wurde." + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "Wenn du etwaige Status (Kommentare, Rezensionen oder Zitate) migrieren mƶchtest, musst du entweder den Account, zu dem du migrierst, als einen Alias dieses Accounts setzen, oder diesen Account zu dem Account umziehen, bevor du deine Benutzerdaten importierst." + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "Zum Zeitpunkt %(next_available)s kannst du erneut eine Export-Datei erstellen" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Account-Exportdatei erstellen" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Zuletzt exportiert" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "Die Datei mit dem exportierten Account wird als 'complete' angezeigt, sobald sie fertig ist. Das kenn einige Zeit dauern. Klicke auf den Link, um sie herunterzuladen." + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Zeitpunkt" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "GrĆ¶ĆŸe" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Export herunterladen" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV-Export" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "BĆ¼cherliste exportieren" #: 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 "Dein Export enthƤlt alle BĆ¼cher in deinen Regalen, BĆ¼cher, die du bewertet hast und BĆ¼cher mit LeseaktivitƤt." +msgid "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." +msgstr "Die exportierte CSV-Datei wird alle BĆ¼cher aus deinen Regalen, die du rezensiert hast und die du gerade liest, enthalten.
    Nutze sie, um deine Daten in andere Services wie Goodreads zu importieren." #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4486,7 @@ msgstr "Account umziehen" msgid "Data" msgstr "Daten" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV-Export" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Beziehungen" @@ -4763,7 +4978,8 @@ msgid "Active Tasks" msgstr "Aktive Aufgaben" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5157,9 +5373,14 @@ msgid "No instances found" msgstr "Keine Instanzen gefunden" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Import stoppen?" +#: 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 "Diese Aktion wird den Import des Accounts abbrechen, bevor er abgeschlossen ist und kann nicht rĆ¼ckgƤngig gemacht werden" + #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" msgstr "Neue Importe starten deaktivieren" @@ -5172,70 +5393,107 @@ msgstr "Dies ist nur fĆ¼r den Einsatz gedacht, wenn bei Importen etwas sehr schi msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "WƤhrend Importe deaktiviert sind, dĆ¼rfen Benutzer keine neuen Importe starten, aber bestehende Importe werden nicht beeintrƤchtigt." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." +msgstr "Diese Einstellung verhindert sowohl Importe von BĆ¼chern als auch von Importe von Accounts." + +#: bookwyrm/templates/settings/imports/imports.html:37 msgid "Disable imports" msgstr "Importe deaktivieren" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Benutzer*innen kƶnnen derzeit keine neuen Importe starten" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Importe aktivieren" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Anzahl der Importe begrenzen" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Einige Nutzer kƶnnten versuchen eine groƟe Anzahl von BĆ¼chern zu importieren, was sie eventuell verhindern mƶchten." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Setzen Sie den Wert auf 0, falls sie keine Limitierung wĆ¼nschen." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Setze Importlimit auf" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "BĆ¼cher alle" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "Tage." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Limit festlegen" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "BeschrƤnke, wie oft Benutzer*innen importieren und exportieren kƶnnen" + +#: 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 "Einige Benutzer*innen versuchen vielleicht, ihre Importe oder Exporte sehr hƤufig durchzufĆ¼hren. Das kannst Du beschrƤnken." + +#: bookwyrm/templates/settings/imports/imports.html:111 +msgid "Restrict user imports and exports to once every " +msgstr "BeschrƤnke Importe und Exporte von Benutzer*innen auf einmal pro " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "Stunden" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Limit Ƥndern" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "Buch-Importe" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Abgeschlossen" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Benutzer*in" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Aktualisierungsdatum" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Ausstehende EintrƤge" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Erfolgreiche Objekte" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Keine passenden Importe gefunden." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "Benutzerimporte" + #: 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 @@ -5722,7 +5980,7 @@ msgstr "Instanz-Standard-Design festlegen" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Eines deiner Designs scheint defekt zu sein. Wenn du dieses Design auswƤhlst, wird die Anwendung unbenutzbar." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5776,15 +6034,15 @@ msgstr "Design lƶschen" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Teste das Design" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Defektes Design" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Erfolgreich geladen" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5833,7 +6091,7 @@ msgstr "Nicht festgelegt" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Dieser Akteur signiert HTTP-Requests fĆ¼r diese Instanz." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5905,15 +6163,15 @@ msgstr "Benutzeraktionen" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Administrativer Akteur der Instanz" #: 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 "" +msgstr "Du darfst diesen Account nicht lƶschen oder deaktivieren, da er fĆ¼r den Betrieb des Servers notwendig ist. Dieser Akteur signiert ausgehende GET-Requests zur reibungslosen Interaktion mit sicheren ActivityPub-Servern." #: 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 "" +msgstr "Dieser Account kann von regulƤren Benutzer*innen nicht gefunden werden und hat keine Profilseite." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6048,17 +6306,15 @@ msgstr "Regal erstellen" msgid "Edit Shelf" msgstr "Regal bearbeiten" -#: 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: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:66 +msgid "Import Books" +msgstr "BĆ¼cher importieren" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6069,7 +6325,7 @@ msgstr[1] "%(formatted_count)s BĆ¼cher" #: bookwyrm/templates/shelf/shelf.html:106 #, python-format msgid "(showing %(start)s-%(end)s)" -msgstr "(Anzeige: %(start)s&endash;%(end)s)" +msgstr "(Anzeige: %(start)s-%(end)s)" #: bookwyrm/templates/shelf/shelf.html:118 msgid "Edit shelf" @@ -6412,7 +6668,7 @@ 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 "" +msgstr "%(user)s ist umgezogen zu %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 9c51fbbd5..61add13ef 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: 2024-01-02 03:27+0000\n" +"POT-Creation-Date: 2024-03-25 23:12+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -87,7 +87,7 @@ msgstr "" msgid "Incorrect code" msgstr "" -#: bookwyrm/forms/links.py:36 +#: bookwyrm/forms/links.py:37 msgid "This domain is blocked. Please contact your administrator if you think this is an error." msgstr "" @@ -103,8 +103,8 @@ msgstr "" msgid "Book Title" msgstr "" -#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:158 -#: bookwyrm/templates/shelf/shelf.html:190 +#: bookwyrm/forms/lists.py:28 bookwyrm/templates/shelf/shelf.html:159 +#: bookwyrm/templates/shelf/shelf.html:191 #: bookwyrm/templates/snippets/create_status/review.html:32 msgid "Rating" msgstr "" @@ -173,23 +173,23 @@ msgstr "" msgid "Domain block" msgstr "" -#: bookwyrm/models/book.py:282 +#: bookwyrm/models/book.py:324 msgid "Audiobook" msgstr "" -#: bookwyrm/models/book.py:283 +#: bookwyrm/models/book.py:325 msgid "eBook" msgstr "" -#: bookwyrm/models/book.py:284 +#: bookwyrm/models/book.py:326 msgid "Graphic novel" msgstr "" -#: bookwyrm/models/book.py:285 +#: bookwyrm/models/book.py:327 msgid "Hardcover" msgstr "" -#: bookwyrm/models/book.py:286 +#: bookwyrm/models/book.py:328 msgid "Paperback" msgstr "" @@ -263,9 +263,9 @@ msgstr "" #: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 #: bookwyrm/templates/import/import.html:173 #: bookwyrm/templates/import/import_user.html:211 -#: bookwyrm/templates/preferences/export-user.html:112 -#: bookwyrm/templates/settings/imports/imports.html:131 -#: bookwyrm/templates/settings/imports/imports.html:221 +#: bookwyrm/templates/preferences/export-user.html:121 +#: bookwyrm/templates/settings/imports/imports.html:180 +#: bookwyrm/templates/settings/imports/imports.html:270 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "" @@ -273,7 +273,7 @@ msgstr "" #: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 #: bookwyrm/templates/import/import.html:171 #: bookwyrm/templates/import/import_user.html:209 -#: bookwyrm/templates/preferences/export-user.html:110 +#: bookwyrm/templates/preferences/export-user.html:119 msgid "Complete" msgstr "" @@ -364,7 +364,34 @@ msgstr "" msgid "Deleted item" msgstr "" -#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 +#: bookwyrm/models/status.py:186 +#, python-format +msgid "%(display_name)s's status" +msgstr "" + +#: bookwyrm/models/status.py:361 +#, python-format +msgid "%(display_name)s's comment on %(book_title)s" +msgstr "" + +#: bookwyrm/models/status.py:412 +#, python-format +msgid "%(display_name)s's quote from %(book_title)s" +msgstr "" + +#: bookwyrm/models/status.py:448 +#, python-format +msgid "%(display_name)s's review of %(book_title)s" +msgstr "" + +#: bookwyrm/models/status.py:479 +#, python-format +msgid "%(display_name)s rated %(book_title)s: %(display_rating).1f star" +msgid_plural "%(display_name)s rated %(book_title)s: %(display_rating).1f stars" +msgstr[0] "" +msgstr[1] "" + +#: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:312 msgid "Reviews" msgstr "" @@ -380,107 +407,111 @@ msgstr "" msgid "Everything else" msgstr "" -#: bookwyrm/settings.py:232 +#: bookwyrm/settings.py:236 msgid "Home Timeline" msgstr "" -#: bookwyrm/settings.py:232 +#: bookwyrm/settings.py:236 msgid "Home" msgstr "" -#: bookwyrm/settings.py:233 +#: bookwyrm/settings.py:237 msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:233 +#: bookwyrm/settings.py:237 #: bookwyrm/templates/guided_tour/user_profile.html:101 #: bookwyrm/templates/search/layout.html:22 -#: bookwyrm/templates/search/layout.html:43 +#: bookwyrm/templates/search/layout.html:44 #: bookwyrm/templates/user/layout.html:107 msgid "Books" msgstr "" -#: bookwyrm/settings.py:313 +#: bookwyrm/settings.py:317 msgid "English" msgstr "" -#: bookwyrm/settings.py:314 +#: bookwyrm/settings.py:318 msgid "CatalĆ  (Catalan)" msgstr "" -#: bookwyrm/settings.py:315 +#: bookwyrm/settings.py:319 msgid "Deutsch (German)" msgstr "" -#: bookwyrm/settings.py:316 +#: bookwyrm/settings.py:320 msgid "Esperanto (Esperanto)" msgstr "" -#: bookwyrm/settings.py:317 +#: bookwyrm/settings.py:321 msgid "EspaƱol (Spanish)" msgstr "" -#: bookwyrm/settings.py:318 +#: bookwyrm/settings.py:322 msgid "Euskara (Basque)" msgstr "" -#: bookwyrm/settings.py:319 +#: bookwyrm/settings.py:323 msgid "Galego (Galician)" msgstr "" -#: bookwyrm/settings.py:320 +#: bookwyrm/settings.py:324 msgid "Italiano (Italian)" msgstr "" -#: bookwyrm/settings.py:321 -msgid "Suomi (Finnish)" -msgstr "" - -#: bookwyrm/settings.py:322 -msgid "FranƧais (French)" -msgstr "" - -#: bookwyrm/settings.py:323 -msgid "Lietuvių (Lithuanian)" -msgstr "" - -#: bookwyrm/settings.py:324 -msgid "Nederlands (Dutch)" -msgstr "" - #: bookwyrm/settings.py:325 -msgid "Norsk (Norwegian)" +msgid "ķ•œźµ­ģ–“ (Korean)" msgstr "" #: bookwyrm/settings.py:326 -msgid "Polski (Polish)" +msgid "Suomi (Finnish)" msgstr "" #: bookwyrm/settings.py:327 -msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" +msgid "FranƧais (French)" msgstr "" #: bookwyrm/settings.py:328 -msgid "PortuguĆŖs Europeu (European Portuguese)" +msgid "Lietuvių (Lithuanian)" msgstr "" #: bookwyrm/settings.py:329 -msgid "RomĆ¢nă (Romanian)" +msgid "Nederlands (Dutch)" msgstr "" #: bookwyrm/settings.py:330 -msgid "Svenska (Swedish)" +msgid "Norsk (Norwegian)" msgstr "" #: bookwyrm/settings.py:331 -msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgid "Polski (Polish)" msgstr "" #: bookwyrm/settings.py:332 -msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" +msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" msgstr "" #: bookwyrm/settings.py:333 +msgid "PortuguĆŖs Europeu (European Portuguese)" +msgstr "" + +#: bookwyrm/settings.py:334 +msgid "RomĆ¢nă (Romanian)" +msgstr "" + +#: bookwyrm/settings.py:335 +msgid "Svenska (Swedish)" +msgstr "" + +#: bookwyrm/settings.py:336 +msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" +msgstr "" + +#: bookwyrm/settings.py:337 +msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" +msgstr "" + +#: bookwyrm/settings.py:338 msgid "ē¹é«”äø­ę–‡ (Traditional Chinese)" msgstr "" @@ -518,10 +549,7 @@ 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" -" " +msgid "You you can try using a smaller file, or ask your BookWyrm server administrator to increase the DATA_UPLOAD_MAX_MEMORY_SIZE setting." msgstr "" #: bookwyrm/templates/500.html:4 @@ -728,7 +756,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:65 +#: bookwyrm/templates/book/book.html:70 #: bookwyrm/templates/discover/large-book.html:22 #: bookwyrm/templates/landing/large-book.html:26 #: bookwyrm/templates/landing/small-book.html:18 @@ -816,24 +844,24 @@ msgid "View ISNI record" msgstr "" #: bookwyrm/templates/author/author.html:95 -#: bookwyrm/templates/book/book.html:175 +#: bookwyrm/templates/book/book.html:180 msgid "View on ISFDB" msgstr "" #: bookwyrm/templates/author/author.html:100 #: bookwyrm/templates/author/sync_modal.html:5 -#: bookwyrm/templates/book/book.html:142 +#: bookwyrm/templates/book/book.html:147 #: bookwyrm/templates/book/sync_modal.html:5 msgid "Load data" msgstr "" #: bookwyrm/templates/author/author.html:104 -#: bookwyrm/templates/book/book.html:146 +#: bookwyrm/templates/book/book.html:151 msgid "View on OpenLibrary" msgstr "" #: bookwyrm/templates/author/author.html:119 -#: bookwyrm/templates/book/book.html:160 +#: bookwyrm/templates/book/book.html:165 msgid "View on Inventaire" msgstr "" @@ -895,50 +923,54 @@ msgstr "" msgid "Wikipedia link:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:60 +#: bookwyrm/templates/author/edit_author.html:58 +msgid "Wikidata:" +msgstr "" + +#: bookwyrm/templates/author/edit_author.html:62 msgid "Website:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:65 +#: bookwyrm/templates/author/edit_author.html:67 msgid "Birth date:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:72 +#: bookwyrm/templates/author/edit_author.html:74 msgid "Death date:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:79 +#: bookwyrm/templates/author/edit_author.html:81 msgid "Author Identifiers" msgstr "" -#: bookwyrm/templates/author/edit_author.html:81 +#: bookwyrm/templates/author/edit_author.html:83 msgid "Openlibrary key:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:88 +#: bookwyrm/templates/author/edit_author.html:90 #: bookwyrm/templates/book/edit/edit_book_form.html:334 msgid "Inventaire ID:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:95 +#: bookwyrm/templates/author/edit_author.html:97 msgid "Librarything key:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:102 +#: bookwyrm/templates/author/edit_author.html:104 #: bookwyrm/templates/book/edit/edit_book_form.html:343 msgid "Goodreads key:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:109 +#: bookwyrm/templates/author/edit_author.html:111 msgid "ISFDB:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:116 +#: bookwyrm/templates/author/edit_author.html:118 msgid "ISNI:" msgstr "" -#: bookwyrm/templates/author/edit_author.html:126 -#: bookwyrm/templates/book/book.html:220 +#: bookwyrm/templates/author/edit_author.html:128 +#: bookwyrm/templates/book/book.html:225 #: bookwyrm/templates/book/edit/edit_book.html:150 #: bookwyrm/templates/book/file_links/add_link_modal.html:60 #: bookwyrm/templates/book/file_links/edit_links.html:86 @@ -960,9 +992,9 @@ msgstr "" msgid "Save" msgstr "" -#: bookwyrm/templates/author/edit_author.html:127 +#: bookwyrm/templates/author/edit_author.html:129 #: bookwyrm/templates/author/sync_modal.html:23 -#: bookwyrm/templates/book/book.html:221 +#: bookwyrm/templates/book/book.html:226 #: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/edit/edit_book.html:152 #: bookwyrm/templates/book/edit/edit_book.html:155 @@ -1001,93 +1033,93 @@ msgstr "" msgid "Confirm" msgstr "" -#: bookwyrm/templates/book/book.html:20 +#: bookwyrm/templates/book/book.html:21 msgid "Unable to connect to remote source." msgstr "" -#: bookwyrm/templates/book/book.html:73 bookwyrm/templates/book/book.html:74 +#: bookwyrm/templates/book/book.html:78 bookwyrm/templates/book/book.html:79 msgid "Edit Book" msgstr "" -#: bookwyrm/templates/book/book.html:99 bookwyrm/templates/book/book.html:102 +#: bookwyrm/templates/book/book.html:104 bookwyrm/templates/book/book.html:107 msgid "Click to add cover" msgstr "" -#: bookwyrm/templates/book/book.html:108 +#: bookwyrm/templates/book/book.html:113 msgid "Failed to load cover" msgstr "" -#: bookwyrm/templates/book/book.html:119 +#: bookwyrm/templates/book/book.html:124 msgid "Click to enlarge" msgstr "" -#: bookwyrm/templates/book/book.html:196 +#: bookwyrm/templates/book/book.html:201 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/book/book.html:209 +#: bookwyrm/templates/book/book.html:214 msgid "Add Description" msgstr "" -#: bookwyrm/templates/book/book.html:216 +#: bookwyrm/templates/book/book.html:221 #: bookwyrm/templates/book/edit/edit_book_form.html:53 #: bookwyrm/templates/lists/form.html:13 bookwyrm/templates/shelf/form.html:17 msgid "Description:" msgstr "" -#: bookwyrm/templates/book/book.html:232 +#: bookwyrm/templates/book/book.html:237 #, python-format msgid "%(count)s edition" msgid_plural "%(count)s editions" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/book/book.html:246 +#: bookwyrm/templates/book/book.html:251 msgid "You have shelved this edition in:" msgstr "" -#: bookwyrm/templates/book/book.html:261 +#: bookwyrm/templates/book/book.html:266 #, python-format msgid "A different edition of this book is on your %(shelf_name)s shelf." msgstr "" -#: bookwyrm/templates/book/book.html:272 +#: bookwyrm/templates/book/book.html:277 msgid "Your reading activity" msgstr "" -#: bookwyrm/templates/book/book.html:278 +#: bookwyrm/templates/book/book.html:283 #: bookwyrm/templates/guided_tour/book.html:56 msgid "Add read dates" msgstr "" -#: bookwyrm/templates/book/book.html:286 +#: bookwyrm/templates/book/book.html:291 msgid "You don't have any reading activity for this book." msgstr "" -#: bookwyrm/templates/book/book.html:312 +#: bookwyrm/templates/book/book.html:317 msgid "Your reviews" msgstr "" -#: bookwyrm/templates/book/book.html:318 +#: bookwyrm/templates/book/book.html:323 msgid "Your comments" msgstr "" -#: bookwyrm/templates/book/book.html:324 +#: bookwyrm/templates/book/book.html:329 msgid "Your quotes" msgstr "" -#: bookwyrm/templates/book/book.html:360 +#: bookwyrm/templates/book/book.html:365 msgid "Subjects" msgstr "" -#: bookwyrm/templates/book/book.html:372 +#: bookwyrm/templates/book/book.html:377 msgid "Places" msgstr "" -#: bookwyrm/templates/book/book.html:383 +#: bookwyrm/templates/book/book.html:388 #: bookwyrm/templates/groups/group.html:19 #: bookwyrm/templates/guided_tour/lists.html:14 #: bookwyrm/templates/guided_tour/user_books.html:102 @@ -1095,18 +1127,18 @@ msgstr "" #: 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/search/layout.html:27 +#: bookwyrm/templates/search/layout.html:55 #: bookwyrm/templates/settings/celery.html:77 #: bookwyrm/templates/user/layout.html:101 bookwyrm/templates/user/lists.html:6 msgid "Lists" msgstr "" -#: bookwyrm/templates/book/book.html:395 +#: bookwyrm/templates/book/book.html:400 msgid "Add to list" msgstr "" -#: bookwyrm/templates/book/book.html:405 +#: bookwyrm/templates/book/book.html:410 #: bookwyrm/templates/book/cover_add_modal.html:32 #: bookwyrm/templates/lists/add_item_modal.html:39 #: bookwyrm/templates/lists/list.html:255 @@ -1236,7 +1268,7 @@ msgid "This is a new work" msgstr "" #: bookwyrm/templates/book/edit/edit_book.html:139 -#: bookwyrm/templates/feed/status.html:19 +#: bookwyrm/templates/feed/status.html:17 #: bookwyrm/templates/guided_tour/book.html:44 #: bookwyrm/templates/guided_tour/book.html:68 #: bookwyrm/templates/guided_tour/book.html:91 @@ -1342,6 +1374,8 @@ msgid "Published date:" msgstr "" #: bookwyrm/templates/book/edit/edit_book_form.html:186 +#: bookwyrm/templates/search/layout.html:23 +#: bookwyrm/templates/search/layout.html:47 msgid "Authors" msgstr "" @@ -1374,7 +1408,7 @@ msgid "Add Another Author" msgstr "" #: bookwyrm/templates/book/edit/edit_book_form.html:231 -#: bookwyrm/templates/shelf/shelf.html:149 +#: bookwyrm/templates/shelf/shelf.html:150 msgid "Cover" msgstr "" @@ -1499,9 +1533,9 @@ msgstr "" #: 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/preferences/export-user.html:87 #: bookwyrm/templates/settings/announcements/announcements.html:37 -#: bookwyrm/templates/settings/imports/imports.html:255 +#: bookwyrm/templates/settings/imports/imports.html:304 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:48 #: bookwyrm/templates/settings/invites/status_filter.html:5 #: bookwyrm/templates/settings/themes.html:111 @@ -1513,8 +1547,8 @@ 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:174 -#: bookwyrm/templates/settings/imports/imports.html:253 +#: bookwyrm/templates/settings/imports/imports.html:223 +#: bookwyrm/templates/settings/imports/imports.html:302 #: bookwyrm/templates/settings/reports/report_links_table.html:6 #: bookwyrm/templates/settings/themes.html:108 msgid "Actions" @@ -1644,7 +1678,7 @@ msgstr "" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:81 -#: bookwyrm/templates/settings/dashboard/dashboard.html:102 +#: bookwyrm/templates/settings/dashboard/dashboard.html:106 #: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "" @@ -2102,7 +2136,7 @@ msgstr "" #: 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 +#: bookwyrm/templates/search/layout.html:33 msgid "Search" msgstr "" @@ -2754,6 +2788,7 @@ msgstr "" #: bookwyrm/templates/guided_tour/user_groups.html:11 #: bookwyrm/templates/guided_tour/user_profile.html:55 +#: bookwyrm/templates/preferences/export-user.html:36 #: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" msgstr "" @@ -2943,8 +2978,8 @@ msgstr "" #: 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 +#: bookwyrm/templates/settings/imports/imports.html:202 +#: bookwyrm/templates/settings/imports/imports.html:292 msgid "Date Created" msgstr "" @@ -2954,13 +2989,13 @@ msgid "Last Updated" msgstr "" #: bookwyrm/templates/import/import.html:135 -#: bookwyrm/templates/settings/imports/imports.html:162 +#: bookwyrm/templates/settings/imports/imports.html:211 msgid "Items" msgstr "" #: bookwyrm/templates/import/import.html:144 #: bookwyrm/templates/import/import_user.html:183 -#: bookwyrm/templates/preferences/export-user.html:87 +#: bookwyrm/templates/preferences/export-user.html:96 msgid "No recent imports" msgstr "" @@ -2996,8 +3031,8 @@ msgid "Refresh" msgstr "" #: bookwyrm/templates/import/import_status.html:72 -#: bookwyrm/templates/settings/imports/imports.html:194 -#: bookwyrm/templates/settings/imports/imports.html:271 +#: bookwyrm/templates/settings/imports/imports.html:243 +#: bookwyrm/templates/settings/imports/imports.html:320 msgid "Stop import" msgstr "" @@ -3029,8 +3064,8 @@ msgid "Row" msgstr "" #: bookwyrm/templates/import/import_status.html:110 -#: bookwyrm/templates/shelf/shelf.html:150 -#: bookwyrm/templates/shelf/shelf.html:172 +#: bookwyrm/templates/shelf/shelf.html:151 +#: bookwyrm/templates/shelf/shelf.html:173 msgid "Title" msgstr "" @@ -3043,8 +3078,8 @@ msgid "Openlibrary key" msgstr "" #: bookwyrm/templates/import/import_status.html:121 -#: bookwyrm/templates/shelf/shelf.html:151 -#: bookwyrm/templates/shelf/shelf.html:175 +#: bookwyrm/templates/shelf/shelf.html:152 +#: bookwyrm/templates/shelf/shelf.html:176 msgid "Author" msgstr "" @@ -3136,6 +3171,7 @@ msgid "Deselect any checkboxes for data you do not wish to include in your impor msgstr "" #: bookwyrm/templates/import/import_user.html:71 +#: bookwyrm/templates/preferences/export-user.html:20 #: bookwyrm/templates/shelf/shelf.html:26 #: bookwyrm/templates/user/relationships/followers.html:18 #: bookwyrm/templates/user/relationships/following.html:18 @@ -3191,6 +3227,7 @@ msgid "User blocks" msgstr "" #: bookwyrm/templates/import/import_user.html:123 +#: bookwyrm/templates/preferences/export-user.html:22 msgid "Reading goals" msgstr "" @@ -3199,14 +3236,17 @@ msgid "Overwrites reading goals for all years listed in the import file" msgstr "" #: bookwyrm/templates/import/import_user.html:130 +#: bookwyrm/templates/preferences/export-user.html:23 msgid "Shelves" msgstr "" #: bookwyrm/templates/import/import_user.html:133 +#: bookwyrm/templates/preferences/export-user.html:24 msgid "Reading history" msgstr "" #: bookwyrm/templates/import/import_user.html:136 +#: bookwyrm/templates/preferences/export-user.html:25 msgid "Book reviews" msgstr "" @@ -3242,7 +3282,7 @@ msgid "Reject" msgstr "" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:171 +#: bookwyrm/templates/settings/imports/imports.html:220 msgid "Failed items" msgstr "" @@ -3272,8 +3312,8 @@ 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 +#: bookwyrm/templates/landing/login.html:50 +#: bookwyrm/templates/landing/reactivate.html:43 msgid "Create an Account" msgstr "" @@ -3324,7 +3364,7 @@ msgid "Login" msgstr "" #: bookwyrm/templates/landing/login.html:7 -#: bookwyrm/templates/landing/login.html:36 bookwyrm/templates/layout.html:142 +#: bookwyrm/templates/landing/login.html:38 bookwyrm/templates/layout.html:142 #: bookwyrm/templates/ostatus/error.html:37 msgid "Log in" msgstr "" @@ -3340,22 +3380,22 @@ msgstr "" msgid "Username:" msgstr "" -#: bookwyrm/templates/landing/login.html:27 +#: bookwyrm/templates/landing/login.html:28 #: bookwyrm/templates/landing/password_reset.html:26 -#: bookwyrm/templates/landing/reactivate.html:23 +#: bookwyrm/templates/landing/reactivate.html:24 #: 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/landing/login.html:41 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 +#: bookwyrm/templates/landing/login.html:63 +#: bookwyrm/templates/landing/reactivate.html:56 msgid "More about this site" msgstr "" @@ -3383,7 +3423,7 @@ msgstr "" msgid "Reactivate Account" msgstr "" -#: bookwyrm/templates/landing/reactivate.html:32 +#: bookwyrm/templates/landing/reactivate.html:34 msgid "Reactivate account" msgstr "" @@ -3393,7 +3433,7 @@ msgid "%(site_name)s search" msgstr "" #: bookwyrm/templates/layout.html:39 -msgid "Search for a book, user, or list" +msgid "Search for a book, author, user, or list" msgstr "" #: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55 @@ -4420,44 +4460,86 @@ msgstr "" 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +#: bookwyrm/templates/preferences/export-user.html:18 +msgid "Your file will include:" msgstr "" -#: bookwyrm/templates/preferences/export-user.html:43 +#: bookwyrm/templates/preferences/export-user.html:21 +msgid "Most user settings" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:26 +#: bookwyrm/templates/settings/dashboard/dashboard.html:27 +msgid "Statuses" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:27 +msgid "Your own lists and saved lists" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:28 +msgid "Which users you follow and block" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:32 +msgid "Your file will not include:" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:34 +msgid "Direct messages" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:35 +msgid "Replies to your statuses" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:37 +msgid "Favorites" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:41 msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." msgstr "" -#: bookwyrm/templates/preferences/export-user.html:46 +#: bookwyrm/templates/preferences/export-user.html:44 msgid "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." msgstr "" -#: bookwyrm/templates/preferences/export-user.html:51 +#: bookwyrm/templates/preferences/export-user.html:49 +msgid "New user exports are currently disabled." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:53 +#, python-format +msgid "User exports settings can be changed from the Imports page in the Admin dashboard." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 #, python-format msgid "You will be able to create a new export file at %(next_available)s" msgstr "" -#: bookwyrm/templates/preferences/export-user.html:60 +#: bookwyrm/templates/preferences/export-user.html:69 msgid "Create user export file" msgstr "" -#: bookwyrm/templates/preferences/export-user.html:67 +#: bookwyrm/templates/preferences/export-user.html:76 msgid "Recent Exports" msgstr "" -#: bookwyrm/templates/preferences/export-user.html:69 +#: bookwyrm/templates/preferences/export-user.html:78 msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." msgstr "" -#: bookwyrm/templates/preferences/export-user.html:75 +#: bookwyrm/templates/preferences/export-user.html:84 msgid "Date" msgstr "" -#: bookwyrm/templates/preferences/export-user.html:81 +#: bookwyrm/templates/preferences/export-user.html:90 msgid "Size" msgstr "" -#: bookwyrm/templates/preferences/export-user.html:125 +#: bookwyrm/templates/preferences/export-user.html:134 msgid "Download your export" msgstr "" @@ -4689,8 +4771,8 @@ msgstr "" msgid "Search type" msgstr "" -#: bookwyrm/templates/search/layout.html:24 -#: bookwyrm/templates/search/layout.html:47 +#: bookwyrm/templates/search/layout.html:25 +#: bookwyrm/templates/search/layout.html:51 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:27 #: bookwyrm/templates/settings/federation/instance_list.html:52 #: bookwyrm/templates/settings/layout.html:36 @@ -4700,12 +4782,12 @@ msgstr "" msgid "Users" msgstr "" -#: bookwyrm/templates/search/layout.html:59 +#: bookwyrm/templates/search/layout.html:63 #, python-format msgid "No results found for \"%(query)s\"" msgstr "" -#: bookwyrm/templates/search/layout.html:61 +#: bookwyrm/templates/search/layout.html:65 #, python-format msgid "%(result_count)s result found" msgid_plural "%(result_count)s results found" @@ -4727,7 +4809,7 @@ msgstr "" #: 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 +#: bookwyrm/templates/settings/layout.html:103 msgid "Announcements" msgstr "" @@ -4745,13 +4827,13 @@ msgstr "" #: bookwyrm/templates/settings/announcements/announcement.html:57 #: bookwyrm/templates/settings/announcements/edit_announcement.html:79 -#: bookwyrm/templates/settings/dashboard/dashboard.html:80 +#: bookwyrm/templates/settings/dashboard/dashboard.html:84 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 +#: bookwyrm/templates/settings/dashboard/dashboard.html:90 msgid "End date:" msgstr "" @@ -4977,8 +5059,9 @@ msgid "Active Tasks" msgstr "" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:146 -#: bookwyrm/templates/settings/imports/imports.html:236 +#: bookwyrm/templates/settings/imports/imports.html:195 +#: bookwyrm/templates/settings/imports/imports.html:285 +#: bookwyrm/templates/settings/schedules.html:95 msgid "ID" msgstr "" @@ -5030,7 +5113,7 @@ msgid "Dashboard" msgstr "" #: bookwyrm/templates/settings/dashboard/dashboard.html:15 -#: bookwyrm/templates/settings/dashboard/dashboard.html:109 +#: bookwyrm/templates/settings/dashboard/dashboard.html:113 msgid "Total users" msgstr "" @@ -5039,40 +5122,36 @@ msgstr "" 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 +#: bookwyrm/templates/settings/dashboard/dashboard.html:78 msgid "Instance Activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:92 +#: bookwyrm/templates/settings/dashboard/dashboard.html:96 msgid "Interval:" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:96 +#: bookwyrm/templates/settings/dashboard/dashboard.html:100 msgid "Days" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:97 +#: bookwyrm/templates/settings/dashboard/dashboard.html:101 msgid "Weeks" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:115 +#: bookwyrm/templates/settings/dashboard/dashboard.html:119 msgid "User signup activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:121 +#: bookwyrm/templates/settings/dashboard/dashboard.html:125 msgid "Status activity" msgstr "" -#: bookwyrm/templates/settings/dashboard/dashboard.html:127 +#: bookwyrm/templates/settings/dashboard/dashboard.html:131 msgid "Works created" msgstr "" @@ -5088,6 +5167,14 @@ msgstr "" msgid "Total" msgstr "" +#: bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html:12 +msgid "Would you like to automatically check for new BookWyrm releases? (recommended)" +msgstr "" + +#: bookwyrm/templates/settings/dashboard/warnings/check_for_updates.html:20 +msgid "Schedule checks" +msgstr "" + #: bookwyrm/templates/settings/dashboard/warnings/domain_review.html:9 #, python-format msgid "%(display_count)s domain needs review" @@ -5168,7 +5255,7 @@ msgstr "" #: bookwyrm/templates/settings/email_config.html:6 #: bookwyrm/templates/settings/email_config.html:8 -#: bookwyrm/templates/settings/layout.html:90 +#: bookwyrm/templates/settings/layout.html:94 msgid "Email Configuration" msgstr "" @@ -5417,7 +5504,7 @@ msgid "Some users might try to import a large number of books, which you want to msgstr "" #: bookwyrm/templates/settings/imports/imports.html:76 -#: bookwyrm/templates/settings/imports/imports.html:108 +#: bookwyrm/templates/settings/imports/imports.html:135 msgid "Set the value to 0 to not enforce any limit." msgstr "" @@ -5437,59 +5524,87 @@ msgstr "" msgid "Set limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:96 +#: bookwyrm/templates/settings/imports/imports.html:98 +msgid "Disable starting new user exports" +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:109 +msgid "This is only intended to be used when things have gone very wrong with exports and you need to pause the feature while addressing issues." +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:110 +msgid "While exports are disabled, users will not be allowed to start new user exports, but existing exports will not be affected." +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:115 +msgid "Disable user exports" +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:123 msgid "Limit how often users can import and export" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:107 +#: bookwyrm/templates/settings/imports/imports.html:134 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 " +#: bookwyrm/templates/settings/imports/imports.html:138 +msgid "Limit how often users can import and export user data" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:140 msgid "hours" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:117 +#: bookwyrm/templates/settings/imports/imports.html:144 msgid "Change limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:159 +msgid "Users are currently unable to start new user exports. This is the default setting." +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:161 +msgid "It is not currently possible to provide user exports when using s3 storage. The BookWyrm development team are working on a fix for this." +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:167 +msgid "Enable user exports" +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:174 msgid "Book Imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:135 -#: bookwyrm/templates/settings/imports/imports.html:225 +#: bookwyrm/templates/settings/imports/imports.html:184 +#: bookwyrm/templates/settings/imports/imports.html:274 msgid "Completed" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:149 -#: bookwyrm/templates/settings/imports/imports.html:239 +#: bookwyrm/templates/settings/imports/imports.html:198 +#: bookwyrm/templates/settings/imports/imports.html:288 msgid "User" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:158 -#: bookwyrm/templates/settings/imports/imports.html:248 +#: bookwyrm/templates/settings/imports/imports.html:207 +#: bookwyrm/templates/settings/imports/imports.html:297 msgid "Date Updated" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:165 +#: bookwyrm/templates/settings/imports/imports.html:214 msgid "Pending items" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:168 +#: bookwyrm/templates/settings/imports/imports.html:217 msgid "Successful items" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:203 -#: bookwyrm/templates/settings/imports/imports.html:295 +#: bookwyrm/templates/settings/imports/imports.html:252 +#: bookwyrm/templates/settings/imports/imports.html:344 msgid "No matching imports found." msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:215 +#: bookwyrm/templates/settings/imports/imports.html:264 msgid "User Imports" msgstr "" @@ -5670,18 +5785,24 @@ msgstr "" msgid "Celery status" msgstr "" -#: bookwyrm/templates/settings/layout.html:95 +#: bookwyrm/templates/settings/layout.html:90 +#: bookwyrm/templates/settings/schedules.html:7 +#: bookwyrm/templates/settings/schedules.html:11 +msgid "Scheduled tasks" +msgstr "" + +#: bookwyrm/templates/settings/layout.html:99 msgid "Instance Settings" msgstr "" -#: bookwyrm/templates/settings/layout.html:103 +#: bookwyrm/templates/settings/layout.html:107 #: 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/layout.html:113 +#: bookwyrm/templates/settings/layout.html:116 #: bookwyrm/templates/settings/registration.html:4 #: bookwyrm/templates/settings/registration.html:6 #: bookwyrm/templates/settings/registration_limited.html:4 @@ -5689,7 +5810,7 @@ msgstr "" msgid "Registration" msgstr "" -#: bookwyrm/templates/settings/layout.html:118 +#: bookwyrm/templates/settings/layout.html:122 #: bookwyrm/templates/settings/site.html:107 #: bookwyrm/templates/settings/themes.html:4 #: bookwyrm/templates/settings/themes.html:6 @@ -5895,6 +6016,56 @@ msgstr "" msgid "No reports found." msgstr "" +#: bookwyrm/templates/settings/schedules.html:17 +#: bookwyrm/templates/settings/schedules.html:101 +msgid "Tasks" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:22 +msgid "Name" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:25 +msgid "Celery task" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:28 +msgid "Date changed" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:31 +msgid "Last run at" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:34 +#: bookwyrm/templates/settings/schedules.html:98 +msgid "Schedule" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:37 +msgid "Schedule ID" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:40 +msgid "Enabled" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:73 +msgid "Un-schedule" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:81 +msgid "No scheduled tasks" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:90 +msgid "Schedules" +msgstr "" + +#: bookwyrm/templates/settings/schedules.html:119 +msgid "No schedules found" +msgstr "" + #: bookwyrm/templates/settings/site.html:10 #: bookwyrm/templates/settings/site.html:43 msgid "Instance Info" @@ -6306,7 +6477,7 @@ msgid "Edit Shelf" msgstr "" #: bookwyrm/templates/shelf/shelf.html:41 -#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 +#: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:59 msgid "All books" msgstr "" @@ -6321,43 +6492,56 @@ msgid_plural "%(formatted_count)s books" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/shelf/shelf.html:106 +#: bookwyrm/templates/shelf/shelf.html:105 #, python-format msgid "(showing %(start)s-%(end)s)" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:118 +#: bookwyrm/templates/shelf/shelf.html:119 msgid "Edit shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:126 +#: bookwyrm/templates/shelf/shelf.html:127 msgid "Delete shelf" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:154 -#: bookwyrm/templates/shelf/shelf.html:180 +#: bookwyrm/templates/shelf/shelf.html:155 +#: bookwyrm/templates/shelf/shelf.html:181 msgid "Shelved" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:155 -#: bookwyrm/templates/shelf/shelf.html:183 +#: bookwyrm/templates/shelf/shelf.html:156 +#: bookwyrm/templates/shelf/shelf.html:184 msgid "Started" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:186 +#: bookwyrm/templates/shelf/shelf.html:157 +#: bookwyrm/templates/shelf/shelf.html:187 msgid "Finished" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:156 -#: bookwyrm/templates/shelf/shelf.html:186 +#: bookwyrm/templates/shelf/shelf.html:157 +#: bookwyrm/templates/shelf/shelf.html:187 msgid "Until" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:212 +#: bookwyrm/templates/shelf/shelf.html:216 +#, python-format +msgid "We couldn't find any books that matched %(shelves_filter_query)s" +msgstr "" + +#: bookwyrm/templates/shelf/shelf.html:220 msgid "This shelf is empty." msgstr "" +#: bookwyrm/templates/shelf/shelves_filter_field.html:6 +msgid "Filter by keyword" +msgstr "" + +#: bookwyrm/templates/shelf/shelves_filter_field.html:7 +msgid "Enter text here" +msgstr "" + #: bookwyrm/templates/snippets/add_to_group_button.html:16 msgid "Invite" msgstr "" @@ -6488,7 +6672,7 @@ msgstr "" msgid "At percent:" msgstr "" -#: bookwyrm/templates/snippets/create_status/quotation.html:69 +#: bookwyrm/templates/snippets/create_status/quotation.html:68 msgid "to" msgstr "" @@ -7185,6 +7369,10 @@ msgstr[1] "" msgid "%(title)s: %(subtitle)s" msgstr "" +#: bookwyrm/templatetags/utilities.py:129 +msgid "a new user account" +msgstr "" + #: bookwyrm/views/rss_feed.py:35 #, python-brace-format msgid "Status updates from {obj.display_name}" diff --git a/locale/eo_UY/LC_MESSAGES/django.mo b/locale/eo_UY/LC_MESSAGES/django.mo index 5f0b83ecbc7c750295ef2399ac1b273f37ecb9f1..f97f6783c3b6d916b138bb241d76175a60ba9068 100644 GIT binary patch delta 35498 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 diff --git a/locale/eo_UY/LC_MESSAGES/django.po b/locale/eo_UY/LC_MESSAGES/django.po index 2b04f98b6..7223a1327 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-13 14:18\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Esperanto\n" "Language: eo\n" @@ -54,19 +54,19 @@ msgstr "Pasvorto ne kongruas" msgid "Incorrect Password" msgstr "Malĝusta pasvorto" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Dato de fino de legado ne povas esti antaÅ­ la dato de komenco." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "La dato de halto de legado ne povas esti antaÅ­ la komenca dato." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "La dato de halto de legado ne povas esti en la estonteco." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "La dato de fino de legado ne povas esti en la estonteco." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "AÅ­tomate generita raporto" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Atendata" @@ -258,17 +259,24 @@ msgstr "Sekvantoj" msgid "Private" msgstr "Privata" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiva" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Finita" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Haltigita" @@ -284,6 +292,10 @@ msgstr "Eraro dum la importo de la libro" msgid "Could not find a match for book" msgstr "Kongrua libro ne troviĝis" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Malsukcesis" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Senpaga" @@ -359,7 +371,7 @@ msgstr "Recenzoj" msgid "Comments" msgstr "Komentoj" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citaĵoj" @@ -461,7 +473,7 @@ msgstr "Svenska (Sveda)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (la ukraina)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Tradicia ĉina)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Ho, ve!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Mankas permeso" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Vi ne rajtas rigardi tiun ĉi paĝon aÅ­ plenumi tiun ĉi agon. Via permesa nivelo estas %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Se vi kredas, ke vi havu aliron, bonvolu paroli al via BookWyrm-servilo-administranto." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ 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 "" +msgstr "Dosiero tro granda" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "La dosiero, kiun vi estas alŝutanta, estas tro granda." #: 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 "" +msgstr "\n" +" Vi povas uzi malpli grandan dosieron aÅ­ peti vian BookWyrm-servilo-administranto pligrandigi la agordon DATA_UPLOAD_MAX_MEMORY_SIZE.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +978,7 @@ msgstr "Konservi" #: 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" @@ -981,6 +996,7 @@ msgstr "La ŝarĝado konektos al %(source_name)s kaj kontrolos #: 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 "Konfirmi" @@ -1480,9 +1496,12 @@ msgid "Domain" msgstr "Domajno" #: 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 @@ -1494,7 +1513,8 @@ msgstr "Stato" #: 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:108 msgid "Actions" @@ -2547,7 +2567,7 @@ msgstr "Strikodolegilo" #: bookwyrm/templates/guided_tour/home.html:102 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 "" +msgstr "Uzu la ligilojn Listoj, Malkovri kaj Viaj libroj por malkovri leg-proponojn kaj la lastatempajn okazaĵojn en tiu servilo, aÅ­ por vidi viajn katalogitajn librojn!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2599,7 @@ msgstr "Atentigoj" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Viaj profilo, uzanto-adresaro, rektaj mesaĝoj kaj agordoj estas alireblaj per alklako de via nomo en ĉi tiu menuo." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2826,111 +2846,121 @@ msgid "No activities for this hashtag yet!" 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:66 -msgid "Import Books" -msgstr "Importi librojn" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importi libro-liston" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "La CSV-a dosiero ne validas" -#: 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] "Aktuale vi rajtas importi %(display_size)s librojn ĉiun %(import_limit_reset)s tagon." msgstr[1] "Aktuale vi rajtas importi %(display_size)s librojn ĉiujn %(import_limit_reset)s tagojn." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "Restas al vi %(display_left)s." -#: 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 "Averaĝe, lastatempaj importoj bezonis %(hours)s horojn." -#: 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 "Averaĝe, lastatempaj importoj bezonis %(minutes)s minutojn." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Fonto de la datumoj:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Vi povas elŝuti vian datumaron de Goodreads per la paĝo Import/Export de via konto ĉe Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Datumdosiero:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Inkluzivi recenzojn" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Agordo de privateco por importitaj recenzoj:" -#: 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 "Importi" -#: 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 "Vi atingis la limon de importado." -#: 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 "Oni provizore malŝaltis importadon; dankon pro via pacienco." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Lastatempaj importoj" -#: 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 "Dato de kreado" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Lasta ĝisdatigo" -#: 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 "Aĵoj" -#: 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 "Neniu lastatempa importo" @@ -2966,7 +2996,8 @@ msgid "Refresh" msgstr "Aktualigi" #: 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 "Ĉesigi la importon" @@ -3064,6 +3095,133 @@ msgstr "Ĉi tiu importo estas en malnova formata kiu ne plu estas subtenata. Se msgid "Update import" msgstr "Ĝisdatigi la importon" +#: 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 "Importi BookWyrm-konton" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "La import-dosiero ne validas" + +#: 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 "Paŝo 1:" + +#: 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 "Paŝo 2:" + +#: 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 "Profilo" + +#: 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 "Ĉu via konto estu proponata al aliaj uzantoj" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "Via horzono" + +#: 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 "Bretoj" + +#: 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" @@ -3084,7 +3242,7 @@ msgid "Reject" msgstr "Malaprobi" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Malsukcesaj aĵoj" @@ -3747,8 +3905,8 @@ msgstr "%(related_user)s invitis vin aliĝ #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Nova invito-peto atendanta respondon" +msgstr[1] "%(display_count)s novaj invito-petoj atendantaj respondon" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4022,16 @@ msgstr "ŝanĝis la nomon de la grupo %(group_name)s< msgid "has changed the description of %(group_name)s" msgstr "ŝanĝis la priskribon de la grupo %(group_name)s" +#: 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 "Forigi la atentigojn" @@ -4107,7 +4275,7 @@ msgstr "Forigi alinomon" #: 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 "Blokitaj uzantoj" @@ -4242,14 +4410,66 @@ msgstr "DefaÅ­lta privateco de afiŝoj:" 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 "Ĉu vi volas privatajn bretojn? Vi povas agordi apartan nivelon de videbleco por ĉiu breto. Iru al Viaj libroj, elektu breton per la langetoj, kaj alklaku Ā«Modifi bretonĀ»." +#: 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Lastatempaj eksportoj" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Dato" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Grandeco" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV-a eksporto" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "Via eksporto inkluzivos ĉiujn librojn sur viaj bretoj, librojn recenzitajn de vi kaj librojn kun legadaj agoj." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4487,7 @@ msgstr "Transloki konton" msgid "Data" msgstr "Datumoj" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV-a eksporto" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Rilatoj" @@ -4762,7 +4978,8 @@ msgid "Active Tasks" msgstr "Aktivaj taskoj" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5156,9 +5373,14 @@ msgid "No instances found" msgstr "Neniu instanco troviĝis" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Ĉu ĉesigi la importon?" +#: 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 "Malŝalti la eblon komenci novajn importojn" @@ -5171,70 +5393,107 @@ msgstr "Ĉi tio celas esti uzata nur kiam io fuŝiĝas pri importoj ĝenerale ka msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Dum importado estas malŝaltita, uzantoj ne povos komenci novajn importojn sed ekzistantaj importoj ne estos tuŝitaj." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "Malŝalti importadon" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Uzantoj aktuale ne povas komenci novajn importojn" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Ŝalti importadon" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limigi la nombron de importoj" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Kelkaj uzantoj eble provos importi grandan kvanton de libroj, kion vi volas limigi." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Agordi la valoron al 0 por ne havi limon." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Agordi la limon de importoj al po" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "libroj ĉiujn" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "tagojn." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Agordi la limon" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "horoj" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "Libro-Importoj" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Finita" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Uzanto" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Dato de ĝisdatigo" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Traktotaj aĵoj" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Sukcesaj aĵoj" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Neniu kongrua importo troviĝis." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "Uzanto-importoj" + #: 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 @@ -5721,7 +5980,7 @@ msgstr "Agordi la defaÅ­ltan etoson de la instanco" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Unu el viaj etosoj ŝajnas esti rompita. Elekti tiun etoson igos la aplikaĵon neuzebla." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5775,15 +6034,15 @@ msgstr "Forigi etoson" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Provi etoson" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Rompita etoso" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Ŝarĝita sukcese" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5832,7 +6091,7 @@ msgstr "Ne agordita" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Tiu ĉi konto estas la aganto por subskribi HTTP-petojn." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5904,15 +6163,15 @@ msgstr "Agoj por la uzanto" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Tio estas la instanc-administrant-aganto" #: 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 "" +msgstr "Vi ne devas forigi tiun ĉi konton, ĉar ĝi estas nepra por la funkciado de via servilo. Tiu ĉi aganto subskribas elirajn GET-petojn por glatigi interagon kun sekuraj ActivityPub-serviloj." #: 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 "" +msgstr "Tiu ĉi konto ne estas detektebla al ordinaraj uzantoj kaj ne havas profilpaĝon." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6047,17 +6306,15 @@ msgstr "Krei breton" msgid "Edit Shelf" msgstr "Modifi breton" -#: 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" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Ĉiuj libroj" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importi librojn" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6411,7 +6668,7 @@ msgstr "Sekvi per la nova konto" #: bookwyrm/templates/snippets/moved_user_notice.html:7 #, python-format msgid "%(user)s has moved to %(moved_to_name)s" -msgstr "" +msgstr "%(user)s translokiĝis al %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index d03e543f414fb09dc3e1f6a8f6a5c6e9ec3aa190..42c4a98a19ccb0d07a24797a91b16581ab4f9a03 100644 GIT binary patch delta 43034 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 B@}vL& delta 32514 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 diff --git a/locale/es_ES/LC_MESSAGES/django.po b/locale/es_ES/LC_MESSAGES/django.po index ce1cc4aae..e43195f31 100644 --- a/locale/es_ES/LC_MESSAGES/django.po +++ b/locale/es_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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:11\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-15 16:34\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Spanish\n" "Language: es\n" @@ -52,23 +52,23 @@ msgstr "La contraseƱa no coincide" #: bookwyrm/forms/edit_user.py:134 msgid "Incorrect Password" -msgstr "ContraseƱa Incorrecta" +msgstr "ContraseƱa incorrecta" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." -msgstr "La fecha final de lectura no puede ser anterior a la fecha de inicio." +msgstr "La fecha de interrupciĆ³n de lectura no puede ser anterior a la fecha de inicio." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." -msgstr "La fecha de paro de lectura no puede ser en el futuro." +msgstr "La fecha de interrupciĆ³n de lectura no puede ser en el futuro." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." -msgstr "La fecha de tĆ©rmino de la lectura no puede ser en el futuro." +msgstr "La fecha final de lectura no puede ser en el futuro." #: bookwyrm/forms/landing.py:38 msgid "Username or password are incorrect" @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Informe generado automĆ”ticamente" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendiente" @@ -258,17 +259,24 @@ msgstr "Seguidores" msgid "Private" msgstr "Privado" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Activo" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Completado" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Detenido" @@ -284,6 +292,10 @@ msgstr "Error en cargar libro" msgid "Could not find a match for book" msgstr "No se pudo encontrar el libro" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "FallĆ³" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratis" @@ -359,7 +371,7 @@ msgstr "ReseƱas" msgid "Comments" msgstr "Comentarios" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citas" @@ -461,7 +473,7 @@ msgstr "Svenska (Sueco)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (ucraniano)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Chino tradicional)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Ā”Oh no!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Permiso denegado" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "No tienes permiso para ver esta pĆ”gina o realizar esta acciĆ³n. Tu nivel de permisos de usuario es %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Si crees que deberĆ­as tener acceso, por favor habla con tu administrador del servidor de BookWyrm." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ msgstr "Ā”Parece que la pĆ”gina solicitada no existe!" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "Archivo demasiado grande" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "El archivo que estĆ”s subiendo es demasiado grande." #: 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 "" +msgstr "\n" +" Puedes intentar con un archivo mĆ”s pequeƱo, o pregĆŗntale a tu administrador del servidor de BookWyrm para que suba el parĆ”metro DATA_UPLOAD_MAX_MEMORY_SIZE.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -568,11 +582,11 @@ msgstr "Los moderadores y administradores de %(site_name)s mantienen el sitio en #: bookwyrm/templates/about/about.html:122 msgid "Moderator" -msgstr "Moderador" +msgstr "Moderadore" #: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62 msgid "Admin" -msgstr "Admin" +msgstr "Admin." #: bookwyrm/templates/about/about.html:140 #: bookwyrm/templates/settings/users/user_moderation_actions.html:28 @@ -597,7 +611,7 @@ msgstr "Aviso legal" #: bookwyrm/templates/about/layout.html:11 msgid "Active users:" -msgstr "Usuarios activos:" +msgstr "Usuaries activos:" #: bookwyrm/templates/about/layout.html:15 msgid "Statuses posted:" @@ -964,6 +978,7 @@ msgstr "Guardar" #: 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" @@ -972,7 +987,7 @@ msgstr "Cancelar" #: bookwyrm/templates/author/sync_modal.html:15 #, python-format msgid "Loading data will connect to %(source_name)s and check for any metadata about this author which aren't present here. Existing metadata will not be overwritten." -msgstr "La carga de datos se conectarĆ” a %(source_name)s y comprobarĆ” si hay metadatos sobre este autor que no estĆ”n presentes aquĆ­. Los metadatos existentes no serĆ”n sobrescritos." +msgstr "La carga de datos se conectarĆ” a %(source_name)s y comprobarĆ” si hay metadatos sobre este autore que no estĆ”n presentes aquĆ­. Los metadatos existentes no serĆ”n sobrescritos." #: bookwyrm/templates/author/sync_modal.html:24 #: bookwyrm/templates/book/edit/edit_book.html:137 @@ -981,6 +996,7 @@ msgstr "La carga de datos se conectarĆ” a %(source_name)s y com #: 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 "Confirmar" @@ -1186,17 +1202,17 @@ msgstr "Confirmar informaciĆ³n de libro" #: bookwyrm/templates/book/edit/edit_book.html:78 #, python-format msgid "Is \"%(name)s\" one of these authors?" -msgstr "ĀæEs \"%(name)s\" uno de estos autores?" +msgstr "ĀæEs \"%(name)s\" une de estes autores?" #: bookwyrm/templates/book/edit/edit_book.html:89 #, python-format msgid "Author of %(book_title)s" -msgstr "Autor de %(book_title)s" +msgstr "Autore de %(book_title)s" #: bookwyrm/templates/book/edit/edit_book.html:93 #, python-format msgid "Author of %(alt_title)s" -msgstr "Autor de %(alt_title)s" +msgstr "Autore de %(alt_title)s" #: bookwyrm/templates/book/edit/edit_book.html:95 msgid "Find more information at isni.org" @@ -1355,7 +1371,7 @@ msgstr "MarĆ­a LĆ³pez GarcĆ­a" #: bookwyrm/templates/book/edit/edit_book_form.html:221 msgid "Add Another Author" -msgstr "AƱadir Otro Autor" +msgstr "AƱadir otre autore" #: bookwyrm/templates/book/edit/edit_book_form.html:231 #: bookwyrm/templates/shelf/shelf.html:149 @@ -1480,9 +1496,12 @@ msgid "Domain" msgstr "Dominio" #: 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 @@ -1494,7 +1513,8 @@ msgstr "Estado" #: bookwyrm/templates/book/file_links/edit_links.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/federation/instance.html:112 -#: bookwyrm/templates/settings/imports/imports.html: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:108 msgid "Actions" @@ -2547,7 +2567,7 @@ msgstr "EscĆ”ner de cĆ³digo de barras" #: bookwyrm/templates/guided_tour/home.html:102 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 "" +msgstr "Usa los enlaces de Listas, Descubre, y Sus libros para descubrir sugerencias de lectura y los Ćŗltimos acontecimientos en este servidor Ā”o para ver tus libros catalogados!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2599,7 @@ msgstr "Notificaciones" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Puedes acceder a tu perfil, tus libros, tus mensajes directos y tu configuraciĆ³n haciendo clic en tu nombre en este menĆŗ." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2810,7 +2830,7 @@ msgstr "Ahora que entiendes lo bĆ”sico de tu pĆ”gina de perfil, vamos a aƱadir #: bookwyrm/templates/guided_tour/user_profile.html:123 msgid "Search for a title or author to continue the tour." -msgstr "Busca un tĆ­tulo o autor para continuar el tour." +msgstr "Busca un tĆ­tulo o autore para continuar el tour." #: bookwyrm/templates/guided_tour/user_profile.html:124 msgid "Find a book" @@ -2826,111 +2846,121 @@ msgid "No activities for this hashtag yet!" 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:66 -msgid "Import Books" -msgstr "Importar libros" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importar lista de libros" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "No es un archivo CSV vĆ”lido" -#: 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] "Actualmente, puedes importar %(display_size)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 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "Te quedan %(display_left)s." -#: 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 "En promedio, las importaciones recientes han tomado %(hours)s horas." -#: 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 "En promedio, las importaciones recientes han tomado %(minutes)s minutos." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Fuente de datos:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Puede descargar tus datos de Goodreads desde la pĆ”gina de ImportaciĆ³n/ExportaciĆ³n de tu cuenta de Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Archivo de datos:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Incluir reseƱas" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" 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: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 "Importar" -#: 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 "Has alcanzado el lĆ­mite de importaciones." -#: 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 "Las importaciones se han deshabilitado temporalmente, gracias por tu paciencia." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Importaciones recientes" -#: 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 "Fecha de CreaciĆ³n" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "ƚltima ActualizaciĆ³n" -#: 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 "Elementos" -#: 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 "No hay ninguna importaciĆ³n reciente" @@ -2966,7 +2996,8 @@ msgid "Refresh" msgstr "Refrescar" #: 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 "Parar la importaciĆ³n" @@ -3064,6 +3095,133 @@ msgstr "Esta importaciĆ³n estĆ” en un formato antiguo que ya no es compatible. S msgid "Update import" msgstr "Actualizar importaciĆ³n" +#: 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 "Importar cuenta de BookWyrm" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "No es un archivo de importaciĆ³n vĆ”lido" + +#: 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 "Si deseas migrar otros elementos (comentarios, reseƱas o citas), debes configurar esta cuenta con un alias desde la que estĆ” migrando o mover esa cuenta a esta antes de importar sus datos de usuario." + +#: 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 "Actualmente puedes importar un usuario cada %(user_import_hours)s horas." + +#: 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 "La prĆ³xima vez podrĆ”s importar un archivo de usuario en %(next_available)s" + +#: bookwyrm/templates/import/import_user.html:41 +msgid "Step 1:" +msgstr "Paso 1:" + +#: 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 "Seleccione un archivo de exportaciĆ³n generado a partir de otra cuenta de BookWyrm. El formato del archivo debe ser .tar.gz." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "Paso 2:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "Deseleccione cualquier casilla de verificaciĆ³n para los datos que no desea incluir en su importaciĆ³n." + +#: 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 "Perfil de usuario" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Sobrescribir nombre, resumen y avatar" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "Ajustes de usuario" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Sobrescribir:" + +#: bookwyrm/templates/import/import_user.html:86 +msgid "Whether manual approval is required for other users to follow your account" +msgstr "Si se requiere la aprobaciĆ³n manual para que otros usuarios sigan su cuenta" + +#: bookwyrm/templates/import/import_user.html:89 +msgid "Whether following/followers are shown on your profile" +msgstr "Si los seguidores se muestran en su perfil" + +#: bookwyrm/templates/import/import_user.html:92 +msgid "Whether your reading goal is shown on your profile" +msgstr "Si su objetivo de lectura se muestra en su perfil" + +#: bookwyrm/templates/import/import_user.html:95 +msgid "Whether you see user follow suggestions" +msgstr "Si ves o no a un usuario seguir sugerencias" + +#: bookwyrm/templates/import/import_user.html:98 +msgid "Whether your account is suggested to others" +msgstr "Si tu cuenta es sugerida a otros" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "Su zona horaria" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "Su configuraciĆ³n de privacidad por defecto del post" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Quienes te siguen y a quienes sigues" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Bloqueos de usuario" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Objetivos de lectura" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Sobrescribe los objetivos de lectura de todos los aƱos listados en el archivo de importaciĆ³n" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Estantes" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Historial de lectura" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "ReseƱas de libros" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Comentarios sobre libros" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Listas de libros" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Listas guardadas" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3242,7 @@ msgid "Reject" msgstr "Rechazar" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Elementos fallidos" @@ -3747,8 +3905,8 @@ msgstr "%(related_user)s te ha invitado a #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Nueva invitaciĆ³n esperando respuesta" +msgstr[1] "%(display_count)s nuevas invitaciones esperando respuesta" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4022,16 @@ msgstr "ha cambiado el nombre del grupo Ā«%(group_nam msgid "has changed the description of %(group_name)s" msgstr "ha cambiado la descripciĆ³n del grupo Ā«%(group_name)sĀ»" +#: bookwyrm/templates/notifications/items/user_export.html:14 +#, python-format +msgid "Your user export is ready." +msgstr "Su exportaciĆ³n de usuario estĆ” lista." + +#: bookwyrm/templates/notifications/items/user_import.html:14 +#, python-format +msgid "Your user import is complete." +msgstr "Tu importaciĆ³n de usuario se ha completado." + #: bookwyrm/templates/notifications/notifications_page.html:19 msgid "Delete notifications" msgstr "Borrar notificaciones" @@ -4107,7 +4275,7 @@ msgstr "Borrar alias" #: 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 "Usuarios bloqueados" @@ -4242,14 +4410,66 @@ msgstr "Privacidad de publicaciĆ³n por defecto:" 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 "ĀæQuieres privacidad en tus estanterĆ­as? Puedes configurar un nivel de visibilidad distinto para cada una de tus estanterĆ­as. Ve a Tus libros, elige una estanterĆ­a en la barra de pestaƱas y haz clic en \"Editar estanterĆ­a\"." +#: 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 "Exportar cuenta de 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 "Puedes crear un archivo de exportaciĆ³n aquĆ­. Esto te permitirĆ” migrar tus datos a otra cuenta de BookWyrm." + +#: bookwyrm/templates/preferences/export-user.html:17 +msgid "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "

    Su archivo incluirĆ”:

    • Perfil de usuario
    • Configuraciones de usuario
    • Metas de lectura
    • EstanterĆ­as
    • Historial de lectura
    • ReseƱas de libros
    • Estados
    • Sus listas propias y guardadas
    • Usuarios a quien sigue y bloqueados

    Su archivo no incluirĆ”:

    • Mensajes directos
    • Respuestas a sus estados
    • Grupos
    • Favoritos
    " + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "En su nueva cuenta de BookWyrm puede elegir quĆ© importar: no tendrĆ” que importar todo lo que se exporta." + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "Si deseas migrar otros elementos (comentarios, reseƱas o citas), debes configurar esta cuenta con un alias desde la que estĆ” migrando o mover esa cuenta a esta antes de importar sus datos de usuario." + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "PodrĆ” crear un nuevo archivo de exportaciĆ³n en %(next_available)s" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Crear archivo de exportaciĆ³n de usuario" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Exportaciones recientes" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "Los archivos de exportaciĆ³n de usuarios mostrarĆ”n 'completado' una vez listo. Esto puede tardar un poco. Haga clic en el enlace para descargar su archivo." + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Fecha" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "TamaƱo" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Descargar su exportaciĆ³n" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Exportar CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Exportar lista de libros" #: 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 "Se exportarĆ”n todos los libros que tengas en las estanterĆ­as, las reseƱas y los libros que estĆ©s leyendo." +msgid "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." +msgstr "Su archivo de exportaciĆ³n CSV incluirĆ”: todos los libros de sus estanterĆ­as, libros que ha reseƱado y libros con actividad de lectura.
    Use esto para importar desde servicios como Goodreads." #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4487,7 @@ msgstr "Mover cuenta" msgid "Data" msgstr "Datos" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "ExportaciĆ³n en CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relaciones" @@ -4763,7 +4979,8 @@ msgid "Active Tasks" msgstr "Tareas activas" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5157,9 +5374,14 @@ msgid "No instances found" msgstr "No se encontrĆ³ ningun anuncio" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "ĀæParar la importaciĆ³n?" +#: 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 "Esta acciĆ³n detendrĆ” la importaciĆ³n del usuario antes de que estĆ© completa y no se puede deshacer" + #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" msgstr "Deshabilitar el inicio de nuevas importaciones" @@ -5172,70 +5394,107 @@ msgstr "Ɖsto es sĆ³lo para usarse en caso de que las cosas vayan realmente mal msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Mientras las importaciones estĆ©n deshabilitadas, los usuarios no tendrĆ”n permitido iniciar nuevas importaciones, pero las importaciones existentes no se verĆ”n afectadas." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." +msgstr "Esta opciĆ³n evita tanto las importaciones de libros como las importaciones de usuarios." + +#: bookwyrm/templates/settings/imports/imports.html:37 msgid "Disable imports" msgstr "Deshabilitar importaciones" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Los usuarios actualmente no pueden iniciar nuevas importaciones" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Habilitar importaciones" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limita la cantidad de importaciones" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Algunes usuaries podrĆ­an importar gran cantidad de libros, puedes limitarlo." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Establece el valor 0 para no imponer ningĆŗn lĆ­mite." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Establecer lĆ­mite en" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "libros cada" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dĆ­as." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Establecer lĆ­mite" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "Limitar la frecuencia con la que los usuarios pueden importar y exportar" + +#: 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 "Algunos usuarios podrĆ­an intentar ejecutar las importaciones o exportaciones de usuarios muy frecuentemente, lo que desea limitar." + +#: bookwyrm/templates/settings/imports/imports.html:111 +msgid "Restrict user imports and exports to once every " +msgstr "Restringir las importaciones y exportaciones de usuarios a una vez cada " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "horas" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Cambiar lĆ­mite" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "Importaciones de libros" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Completado" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Usuario" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Fecha Actualizada" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Elementos pendientes" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Importaciones exitosas" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "No se han encontrado importaciones coincidentes." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "Importaciones de usuarios" + #: 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 @@ -5722,7 +5981,7 @@ msgstr "Usar tema por defecto de la instancia" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Parece que uno de tus temas estĆ” roto. Al seleccionar este tema la aplicaciĆ³n serĆ” inutilizable." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5776,15 +6035,15 @@ msgstr "Quitar tema" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Tema de prueba" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Tema roto" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Cargado exitosamente" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5833,7 +6092,7 @@ msgstr "No establecido" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Esta cuenta es el actor de instancia para firmar peticiones HTTP." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5905,15 +6164,15 @@ msgstr "Acciones de usuario" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Este es el administrador de la instancia" #: 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 "" +msgstr "No debe eliminar o desactivar esta cuenta ya que es crĆ­tica para el funcionamiento de su servidor. Este actor firma peticiones GET salientes para una interacciĆ³n fluida con servidores seguros de ActivityPub." #: 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 "" +msgstr "Esta cuenta no es detectable por usuarios ordinarios y no tiene una pĆ”gina de perfil." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6048,17 +6307,15 @@ msgstr "Crear estanterĆ­a" msgid "Edit Shelf" msgstr "Editar EstanterĆ­a" -#: 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 de usuario" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos los libros" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importar libros" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6412,7 +6669,7 @@ msgstr "Seguir en nueva cuenta" #: bookwyrm/templates/snippets/moved_user_notice.html:7 #, python-format msgid "%(user)s has moved to %(moved_to_name)s" -msgstr "" +msgstr "%(user)s se ha movido a %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format @@ -6485,7 +6742,7 @@ msgstr "Quiero leer \"%(book_title)s\"" #: bookwyrm/templates/snippets/register_form.html:18 msgid "Choose wisely! Your username cannot be changed." -msgstr "Ā”Elige bien! No podrĆ”s cambiar tu nombre du usuarie mĆ”s adelante." +msgstr "Ā”Elige bien! No podrĆ”s cambiar tu nombre de usuarie mĆ”s adelante." #: bookwyrm/templates/snippets/register_form.html:66 msgid "Sign Up" diff --git a/locale/eu_ES/LC_MESSAGES/django.mo b/locale/eu_ES/LC_MESSAGES/django.mo index de9ebaba49d73e7e47f6be86090cc49a3165d858..1767d7202c931c06cb8b0136a4688ea1e17a2160 100644 GIT binary patch delta 42892 zcmb@v2b@&J*0;O6VaPdWnw*CmBuUOW3X+A53)`cA(cAQc$9#)03VN>`L>;TWe0kHfdj?)On!^({BJV!wu?tq2iHCP(veAID# zumT(e+rgUfNvIiQ!andCRQrx|9jCR&aYn!r$V(n`oVVaQsQU5qOk~pG5ai{sCgVGo zZAFR4O~)osGw2Shz=^ODd;%)Oufei#mz6(+P{TV%fDDv# zWAHM(|0&0L8TMR64ta4DYRL;MCH|WzM3I88!IH}icfnVY6EYkJn@*YKjuV8hz?HDr z3c?CETaJ2~I^kYI2Fd>^)Z)^WDOTb6G>=QwX8r#|mE{LhJ8N&Kf$IE2+VV7FCf z&3?ChV>RoHKIR3-!G=?rY0if4T6Q1|vyk_~7})(q@&Imtli^i31IE7OI5Xk*mT`nb z`paPo0Sbw@uaF(L9K-Y!%1bZ-P9hxr;Fs_=j3iu|N#uIRX-`NmiO97!I8IAA0d|JZ z!*TFy7!5mbWZB>=a0CqJApWB$jE0eLJB)(gLqF`hnQ$|}2G{_3_nT%L{Q`?3ciieY zX>c&C4?luR!atyLr`|TRiJ5!xB_aM?tu~T2g_fe4y-?5E|~9K$H^m$MJW_SQ4Z#Y zwXNI;s$qMp?`rjZt^R&kfco)JkqFuPnNW5X!aOho=76hU4Y(E-gCE13rQPPpt_Ky`4p1}g2j%!s zC32j&=5!8McJ#crVmU`$5fQI9v*2;0y2{_$OSo*Kyd1&higT z1p4kXOEetHZWL5xCc#|r0jP=2f*L2hl!A}KS}4yxfMwuCsE|ARO@#8mB*aRv5?ly1 zz#CAx^DdO(Lohcy4|BpxQ1&iEO(fTcX5dng`mj@jf|9B(R1UO&3T;~`Lp`Ae8VHqK zW1&2sWH|$BpoLJ$wFJtc*P!gY3$-ggg375cpd7vA%B=ql3JOuKk4%Rmur+c;s4Tw^ zYQW8qNjSTp9DVF#qhAQ+*z>Rz+z3_wJ(L4itb7yZMfM&r`U0>Z<2z+3)P=R6_VXZ^ z3&uhj4naj=rsYDYP(BAW!0WIg+zu1qDag_4bUSDqdI&B<&V)@pz|25hqM2Yd{&O2aCg2P&4iW z^TUy_5S#$zP#SCiABF0-6{=l$w^ba58u)W4gTGnk{>g<(T)R z=~oqMjaxv?xE+*ZU7;KqY#D(4wg0D3;DP7thw3=zlnK$}Q2Tl*)Dk=m<@t+NzuD?D zt$w%V5vT#r+WH@$X8Jo+L_DXB-6F6U<2xnY0?&O|f(C7%It+j^Gzyl46QP!5hLxX% zGPoJa@m*H_5X#Y$PqX%ICo`H&3htEyB-mo|FeNg?^LM7{Z=sy3qQqca~2j$^G*b1J7+IA(+ z8dipyQ5~qHY!20aIII9;;7B+JYM?Kn2D%8<{ud}mi+y4G`Mx0jYS;*cDq2A$RX5lg z4!8P6Py?-k<>5xCkRODK#HUbp&ckx>5|q6h=gblng^H99DyN!5Eop0gnpKDgpwP_5 zLm5njn)w5k4?~4?p_QM8YPZ(vH(9=Gx!>{=sCHjKP2dNs{~Kz&i13%jw+9^5k~Fgnx3h(AP&4jt zxoP)WN0D%7iCS-1_#v7@&BBvj~sfJ`9FQ^ACy zDAbHA!WFOqlmq)Mk3h}%B-C!X1T{0~f*GJNRH#cqIZzF@fvuqIq(Vh@I#dK^!Mqy( zaS96YQp#Ic5as*M?1o}c9jZg+L^G(6w}*0YnAHcMW*V~k2cQO+2i1QSl--R` zx$zdv2@gO`@aT8MU)%3A3OVv4l!4n&Gc0-0JZ^nZk=O_ofn88DJOVY)H7Lh&UNZfP z!^y~%U^BQBs^7;j0-l0$=-egZuNhoLA^u|<=KbEhpO=OjxEIU??}t<1c&N~xf$Db! z=7l$)c1y$$=6ix_Q2Li)Ew~A){b?wNz711QNPe@5zhFM(Tt6C5i$Zx?8hT+}sDT^6 z{IC;L|9&tJ9BerXYNi1w2jZY6kY@GM;Sl8TEDGrqPC_N)pr1JP;3u#L?04CGvylM@ zA>W1_)$V5=C~yh<8(xNg!An=n*K%L|!lx+Ynpe%hnNT^j)5@P2hMg}cD8%1b{tneJ z*RN*#RDudsJy;6f1B=1|Fh3j*^-M^#oClQ?FG1zRHYoca*!s_47vx`|`}x1+ZzfAS z!1h%1fC|~8P)qR?+y|e98Zhdb`6LvA3i)}cP=61L!7ES>cz-v^TntKI8_J(NCKg|z8z)zv<&HBeoWG>XeOQ3QgyoQ2i{3?{^yP$I6JXFU^P!agq%74Rm zk)2z{;T=$peGKK$mrx<tGqEnKifU1hp&rTX{5;y@^l}O@*3Jx@5+8PEpXBoP!$h zGL%D34&zXMI1jNhl;KyQBJ&oM!4pu)`Z=r(&qFzsH>a6tDX0jvf{I)(sO%pJ!y51* z3JTRzP>#F;E5S_I0DcCw?{h|Y+^1VXCv6vwFB_&X3B??!f&YM-=`E;+dGeWtMWG*gI@I<#2Q@&!{ATTo!!pQa zpk~+@YOOn44u)EiD5!B#VN)2MPN4&ZjZgz#h01}yVSSjlfT?c*73wKaGo20P=sc*% zEwS=?r~$S?MQo?#L8zrY1J(X_$Zq5Be+7-lRiL(CQ>X#D!?Lg+)J$TbW;hjU=1;-e zFay?u??XBC6Vz__18O2Spd86p$ShSE%NnqW_J0!!+TQ^v&(onIG0V!2TY0gSpM^5K z7Rs?Lum;>?>%X_W3N?Z2Q1*%!HWRG?Qj$+0@F(^l?Lba=F*%B)BU7&Jg3{(z03N^u{R(`e^`+qQsS8c^DD9<8_ zn}#K!)^{KqsIa`vxik*Pxd2Ce${IC~55apx$_TLFLFeDEkv(O&AVS z(6)LBYM}R^1~_1O2I{Q-9%`WcrEE4sH!@I;)rX4AXsDS_v~m(u1Rk{V9Jm1aDOg|o z-&fig?rS*|%EQsHGE9atya?)iSP65$EpQ;rgmNrz8RJ+{*cQ1QR8kIy>Ng6?;Up*r zXTbd0|Btu@27nsqc{mNe29-25%9_wMg_=n_sCHf818^YJc02?%z$vIB_!9KNzoFK? zd^w}<2U{VJg9WtzS5Q#MUxJ$XR;Z=;7;4QvgX(Y|Hic!&8wdJA^&1HjVGwHIQ&5io z05$W!pzIZ>U>qz1_4uw0!wOMX3N>Iar~#9p45ved_A#g#KLr)~=V1bT0Vi8p+1J|HtlB1HTFA8O_3e>)C z4wZakpw@IDl*3CcpMz1zFG3wyc`F-7D_AzD%>I{0?NNw5pbrj$ax4WZbPqu-%{*8g zu7rx%UMRyqKn?s4l*17|lYGUYCQ=4!Vzr=_s1ek7ox&7`QRoA8Vy%G#;0~yl#6nd( z?$2i8VJ+khupT@K75W@i&A>IG3`RmZ+zJ+fU7!XW3gt))RHP?EElKzh3OagMLv6RW zpk{sw%FqR<8C`+y4517}RI?`}lw1Moxn3XYVCe$YJ`QT;DNyaELpk<@sSi8PnS%2o z)QR^xlz{_K4*Uw0e77v~S2u>sKpFH|Hi9zT!PXCi>Nf()feBC%3PEk-X|Bxvn?XUI z&Vy>W2#Ib5=a31w3#xgS*jcqqFIU|qNjDw4aP9616D zYyY2C0e%nV@pULia@92Y!f-lrWhevBLapViQ0?Eg@;<1wJ^{6)7olc)3(8(ZEz`dc zlmiuDSZiIAg4h_!)3#8_6$5p0&4Y4q2kZk6!5OezZI5#gdJ0h2&`A% z<9>@i18OOD!h!HCybne;Fb+HlHzTiX5H|aIP^8(%F>nwS=}>EY2=;^*;A5~sLyzll zCY*(Q3U-C}H}bf@6Iu-wkr9nO?w{os!;#26nwW^Lfs>H;L7kMX!cC2*Lt!TrDNqKs zK^-{1z!zXdGqYx|Kt*UX)QPtPDpGr(lI>%w{{$*|PeJXX@8Jp$uia2fxv+&fpu#ID z3`MaPDujPSB~|~H=0F++n;}nzI{ROPdS+~ZN~$+4cUbO&dC?z%a_F?>SI|vzs3g4( ztLgclzm-{&hEOx^4t2(lf-;l@HBdTKR?oKb(@>7CfoiwW>bFDfl08rnItCS?lU9EY z%Fa))u%7=p?lD(N|OFi2EDC~z6ksPxeQeMbCwsOmgX0z_BY@Gn756` z{qy??ct3J{TNA+#q5J$lL_rQLogW2hcfay7GZSEx1Z z2epmIL7g8VD=&iDO{<|C%!K+Na`0aEzdZjDg+g~7%23V@W=5r8G34q{9a}=>Mjt4H zVJpUIldytb>Zgey9ll47J2JI)u%@IXW6eA*ha}pdwS*>T5tfo*O`| zVR!flTm$7u-A*3&cL5#XGUTJMIgIIS4zA~*B6$hcgGIWSleKM_f(j=_1zZF+f}y>K5K1|RS3akj#*;XiPBAM=b@*4G@(7vOI6 z#rm0(?*tr!+`Yd?-wB7Emnif=@gtlBn+@=|e~@?yDoLsgG@W9H9$dlm=xE$_;We1ynr(imAxglB#_Wx1}jZo}@I)Z)3wpZR{S z5FCNN2~37hKqcR8sNHh^2$KsFpk|y32g7Ah^*=yG=y#~3>oL+SaVi{$yb^}BU$0V7 z5<2%AN2Wk!^=zn+uYmIWZK&ki2X#IihkfAZ(EUI$${b8xp>oL&wTqsBn&2X+WPToc z;Y*{~|BWfELoptH4z=Igk2W0#S`LR=g3(ahGXW}#C&LMFJ**Ckk1;PGtzbW7KkNlJ z!p`sp>>in|^PGDd+`Z2UHf98E>{nH>eQ52*<(oPy-Z1Z3Y?!n;?&cQE-vfhyS49Lvb5w#=d|_rlzne@=*AThp*k>V&q_qdE5O5 zzJpvQ)@1#0s3g1uOTm0W6M-r)7P&8M2e-kV@EYu@{oj6~sh9&pRP2UHut}W9{qgu3 zSQ-bOiZ@HMF2S4&TcL8`IMmwaOEfQ){h(elr^2T2N!S+dg+rkyWFj{l4%YtPL7@f} zMUza2mQaz1gPO@hP`h9$l!2{KhVxG{Gr1S`Mt%$`0w*A6jPoZ{|K2I)gdGp%Soc)( zCD&LuM*IIMtM~=hMy{G>Lfji_2_`@#(_>KEY%A12pTL^%8kEE3C!5D_Bvh!|!G-Vv zsHDz6#XPo4!&=C-VOWpL0TeXD@lXb5L2b8nP>o$NjZ@-3L7ScM+WZ@NYO|x_K+^{~$|8cIJGD{jdGodWOf@0$0P2;Lw>K=LoDk z%i|n|SKza7=WLT3_s{V-uOlCXYM1`7VXsF#&LQM-k9wSE;3X(~bLM)S&tSjDJkD`g zW1h$P6#hLgY&<&rxW}1^V)hf}oiAd(Y4{dY!}$w5&L_~n(9}13(&PRd_ab~8{ew?= z+<);P?;`VX$$;I_7h7!Pk?;}Z6HpNxwZuG4uZAfoMAMg=FP-u(^Ek_qXIoat@VI|Q z-wGc@-)*^h2JD6TNHX6FkNcz4dQX#_g!DJ4v%TkY=BfG&)F+>BU>a=qyvO|k!xlIZ zIb3h0IS`h?cocub7BFU&$NfR#^H6JFd^Jx!2AB@pARk)eaer)*cdhwU?1vAbPlwIm zb=V$8zG&m}FGu+#Nrvp+Ln4;mbYQ((nc%o)BE4o3b4Dk)p7^Eer> z2V4NpTZUfsIAf7-!A@|@Yvz;GYN(_7bEv1{S5VvVCzwn7Kj(ULMCONj8kT^$U^Q3- z)`dD^+rT`qGt|EBWA#x`?c$&ePq+0;pxVD?`6iUz9Z*O8URX-||5pknVBXiwL#7hc zwyY23PfQSl%X)xQJVo}=n&L_at11izO(v)8;s*)p!y}jf^aTWPAr3Zxjg`N-kjLL z{#Ph}N1;#^*k}xtgz8w!vN@DPouS$df--bJYytyNYrGt4DV~RFzX2*TJE0su13SQr zP|t+go7n#yDFil|2)qmxf!$EM;3V7x3vD(>?)y+P`5MN-(pyXIQLR`0&2|;m6`s&{sprOXQ@mxXe)s`T3bbt$-O z1REjufED31s16xWAzlUL*cQtVpd3F5wH+_PTJRd21S`B}PSgdkr`o~ou*&Vm9)`;DOHfOB3u-&&_`qz#yimzp z1}gb#LrtvV2kd_pTA@&~bhPXZwT44s6_^ASfkjX=eGw{zo1k*zZ7c7EvUd==2MpA} zze6Qm#6BaJg_7&+WB)7b+o6breyA*c5-JiK;9U4V)WALWTgTu&*1uREVp7 zY;vbIl${n(Ino_!fDupw$68K>I@snyorvN0D5&8G-nc z8&EUc3bkAIK_%O9D8r|rCh#3pyI-w7$6-@n1gc*}sEE{q?(@G51$orTawybN#6rz% zCX~S^p_XJd)Kct(_29Qq2TIW+X2vz4`bAo{gX-T0>ZBbF)jk!vzyE)Xf;wbC?faLY zl5j87fES>0z&UE_eNellJ(QsyQ0+%Ug?>6rgc(o~$#u-kyclec?1R#eh3>!q6GuU7 zJr&CEJgAT^fl8LuR(}erX% z&xBr3$vNRT`(FbkqEHSz3gyt#PzKjoz74g8AKCgdR{q}B{|)6}z7wW@8OvHwc3N0= zgBoubRQphvf(CpLYOSAudV5_5wQYWa%8B2gUNDM&W*n&lrEhKJ`=DkTgqm3xR)>#5 zMQS}%h}%Nd z_kjxW2q;IA;V3vCD&#*vMd&Z+{{Gkb++=57sE#F|wp9bG?*tWzzOX4A3zejcp$2{# zY6&x;vV0#@k{yGZ&}CcioHg$Ug`pzQ2NB2@~mLT(1Noln3>coxdx{NZnm zN9CcivH?`cnnQ)UAC$p(s2NRzIp6~5gNtna7O1D;`%p9c!16HEd%{VmNPhw4$VICU z|4cz=^))yb-uJD?c?y1Inev_aCL`ja`Q*|U#!-I|4u`ESnXl8Hgb}<{{sC{HzxloS z*nZ;&kNZR9{y!SWZoxX#=l;o^FyH@DkZ1QmJxn@7g*spvhRXI8P)oEPD!Fz*W%p^Q z-EtH9V4=%qn>K`sSQJzePld{@g;4!ohGX^q|1kxvb={v$s9V7P$epdc80z3y1%HHZ zK!x<_E9O;g71RVu{9<-VC8%A{0BVgpLT&4TR-Obk-b~5b|MMxx)90XOz8PwU2d#X` z)_bp-8I*>qZ)n*Ys$Yz)p9$r_3aEizhsv$Dp&Z%;y zBCL^+J3{JW)gx5-5e+fpMbsKGf)P;gW68cA0|0-!vlzAptAfMcpohEr}^$U z2FkG=P!T;Erl5hoftvYsD8u>xGHX-=YQ_!WK-eAXz*zz1&<3by!cM5?{b{I>-+~)q z-s^_jp&X6-+w@O{av(gHf;v14HPFkjA$$)i7p~a)n^w+!!x$<7zofoAl;by`*0|tJ z<4|?Wdtn>&BVh-)465Bp*jUg1pDAb{-#;c24WP2S6VzIbfj;;E)N}k z4Be!J%aB7*Ct)tH*NsqVs2Ml2Y!90v_kij@9oB^lp(45+Dl#WwxDkb)C@3@)b9mk4 zYX_AJ!(nY0g7?DZPy?NUn(^0AS)MPa*L^HEgUX%zp!&^)va<s1*So5ukFx1p=|v(a5VY~1bh>D0}TJ2S7zA3Kr7-e~3bJ6!W1B?}3`Z7f@?{ z2`W@qp=Nv?YF|ebF_9_`HM2Uf3G4vXF9oXKbg0~#12v&FP?367_1gctDai20P#r(B z@|RE!{Rnk}MHDrLnn11XKqyC|pd6kA)qgtFKo46!0hJ?*t-J!tp;a)f?erc688`xE z;Ea_oKn?IS)C_MzZ{A%9oepU04)&C9^ zAx}y6zdX)U((C?IqBvCYOn`DM2`Y4Rpd6S76@e8{k=XzhfgM&p4z+E+w(=Dy$NqsD zFjpzB`-g{uupV-+uvJWk%}{KCiohkPed{T0*1i+yz^~+fW0xs%+Q;%HDlYIdlrj-c>03IedntEbG9qJ_@y^paI50B~2_;=pTj} z;901(TW|GmLPg*JOoyMq2C#1xb6`CHYa=g(>c10eLWiyX7pU!7wkrF-IfWWkP1fEI zl^heG*7gDDh7f878BmVB3Uz|*f{oyLsL&RzX4bkd)WCzG9F2nG;6$k8J^(e&*=k{v z^;c17pn}y+gUV2jHG(oU!E!RJhWrR@24978;7h38Q>2EONPQ@WTS7&ymz4)WO)LO4 zkx-a|_Uj{XB76$ggg0RvtX9+O=w)*uR5ll@W!~jRK@I$Owix1}ZoDLA49VP|y)M4a>P#xcdI>|nTO2YF{k@y+P;agA!^42jSE)TVfszT{o zKpovZpdv8CaxRo3PeR&Fw=53R8k&-I=OyTP0<*78tmRoAjH?19`0_JlLxba(*Pf<2mg-QWEsK{@;$)VBN!4u&O~nYZXzsCUY* zo3a1jr=XuBDZ6(;CD$?78(x6&v|$Uc`{A=Y%s^fXwZ?5*dinUqhg8@NI<36!@BX_( zIdBu6gw5~qxKLP|4S)gISW{ zunBS!%n8>(CDSWV4!i+1@LN!Z_daL+y%IT@Cv{Ezvlr2_?Z@a3Opj4(#T2|9W1m zJ0~mSJJTp=-#!X;u&lQ7PN+zng7WyPtU`O~B48Ur=%uF7GjgVJBwfh(<)Tg0Be*x+l@wb)p z^fr!FhRxA8gIcU%>) zZVXh&r$U{abD``mg?ZqcP|uVdupT@QT70J1FAzas2R3{I)J)EVBSHdUoWV&z7Gz9i=j@&@8DusXt3A)`OXVaU3aJ>IRt0JPhlJ!9&6To50rz)U_*Ewj)p~oW}rkk200zp zfv2Gy$}y4sKbAr>3fewPpbW2t@~}vp$?6JFhMPle&j8eRO@VsI%z?e(6Hsdf1eKTGL8a-yF6_ZV#0! z4?^vhYp?^%mFRW<1%>XgJMt1J{aM%-Rt$yBHi!$EnQegDb~~VEupjEc`3!0)euCO| zC6bI>3u-3)q56%4+Mdx?PJoffQ=pdcCD;Pyo8)!>FxfFoL81N;4LM z1ym%8rg+_d0kI5Jh+lxp{>^YI{0qu~NvY!_0o*vjiJtmE-(Rx!xXfp zm!S{dfEu8}WOIbpht-gKL$x7UTwVmuvwnG@uDxC!I&ci~JFbSOoo$~%yI$1m zdJ6WDS9<<0qGA=LHSjQvABAUOX^ga>Tog{V1N=j~2hmNV^9%P6VzX%e2%iNnzVhK zzdt&WDBtByKyjE3AJMQhjb28c!Tky4r{K4=nUigB8JUGVR0Xay4M5vx;3aMywJ*V3 z+`6_=_b~T;+`3+aXL7Rs{b?|t0a8(3rL2dCuGcBQfIjQ`4(A@niAgBNP`479XP0v* zTO0l~?9AdGOTDhCa2)aw+9V-QuY($8sWVlW6l8x<~2bL+?jEZtK;y8~V-YrlT7v1y^VKO-5e@ z{R6Is`ESI5pK0_o74J}ff?HP&OO?N+TnD~Ho7!+Iyq7-rQ0_`ym27SIqtms7`#0{M z43>4hLSZd(d-_g>x848#hOPY)qt9~}$kt(mE$6}W0o=O&;GXW5FwVejxb^Ev@1lpjjRw={E84tg9XX0z6?p?~ zf3iCDf8Unhr0#9X-@%dD>MK*`H>=J(ZZEb!Le8)M{#thmHBn|=A5iYaAi4@#)`pqf zso4yUMIL9J9G*?T4xJwxJGm#&W)Jdo%9U|wDdj`(Rom}(et+QbF5q6D!h7lPo~`u2 zeCWobJ8K7+fUXp}KauqYG>W>?+!xRA3@eL{W+L*@uudKpzU`keDwRmwr>EpBTwhvPkX&X zoTjX+ICYtDDGVpl`K0aCnsN?qepTWA!u=R*N5d~MkZd~_RvkCLCvdNCa6s3O^ec;Q zt(B!KO?kGJt4qP-@W`(tF$mZeG)!>KNP(^j($mD68FP& zu7$oN^;uV4bh@UYe}p@O@?qKr;1%v9blI9d@!hmmzXMZ4!Qs;fEoPqf*F?jD?og)M0JEc%b(0@{Vp?WfIq)HgRa z`2YW~9uGjVllw0k>DrE7pM)Nw!~1X{ROv3>hdcP|4jv(BBs z#z(a2P5q19U!#A9HZ8UO&r!*T8~0jk4V0n5OX!-+!@{bw$EwlZ2NKWA>`a}6YYA_XE){I=w75e9!EYxU*7g5 z|Cu?)en8ol%3j=E=#Uf6LcfrPBe>tA{0F-CsMB=}W4emb?{DfKHllM4{X>*rht1HJ zqy2fx+qvh{*1fP3q>gW4oLH@Y4hs5`;0qe*`o+NgXLIVKtzL@hlrPiyDn@jTrSF%t zIRL*w*BD(7>UHTGk1cl4Hq`gAcJ^kGc45B0b56U>Ie4h3#k~+iL%H=8Ng-Re)pnBj z3`Q4P!;%|QR}*9Uy8U(ZQ@G#bK4YC!n~k*T%~(FG`$kH|{~?r5p=`?igi$(8&<(KV zrEnB=r7-X$gUrQnU3B9q^M#ocP2E$-MPZ1#r@70cf0SF-6FelpSgcB^Ecf-reP0^y>6{+ zp+h4Y<%R{Ri=p$6)XlaAH^Gf|&=IyzBJE#87iZgiWkcP7`t|5-b7vjxhI2PjQp{(7 zXSsEqqeE^O?Mh@b97f%Ote(gRX>%SvVEatM&`moKYG*fcGvok$KB4@!ZC8o9KhSlv zZI4kGei;Y;;a-Qb7K#WO%#anXW0WUxccgxbH6r~o?)K=8)BaV;xoq7b$_r_KgF0Q) zDEFb<*$y~@cCn_)IfuSP4&q;l%15|oasPpGJ`Gx7xFGW9)^LLD@)7DfSou%d7QvBfwD}SJZulm;^XNX*{_koVu0!z~_f`z(`jYz{8uy1= z;3?|*P;N~7TQWj<3FQ-%`Ij2pzmhbhO;_ZP8Aw+<^iwIfMc)uUP2Jm+ui5%L`In!D zd8mAr$`~r2H2wLFE;{ss8R!bENZsGCm~~ps{FLM9f1S3vzCkVrJJ~@z@DzQrt|+T7 zO#5)qR;;w0)o2w4rl4<*(fZl+E7ASVT^-$5w7EciMce-$xC(s@^lRV*?5v=yYd!6B zbwloG+fSn$W6vMAavPoAr=k9=R)MmvXgn=Td9x9nbm~1A7-H)`L~cplI~e=Iwt3f5 zC`12Mw0RZYf~)P!RW}hkpX>c^3C4O#W3O+lhr=-%&#kLIx^Zx*9avx67Q)zhSckgh zYQ!~%TSxjy_&seOp#MfyaNSGWUu=KLb?N_xp8vXjrBfsL9L&19QTWWt4dE}e-3BA9 zt}^nzYzF_d9TzZAF53J>-8#xQtv(ic7l$Vv8+P^>+5KlL z8g`~Z2kt03N7;_5ENMIbWO)Ln(`Gqs7EoURHbuUT{x3KX$JWCy(HG~gLYrR5S=Uq4 zch~;c)t0*+_eeXNH|S7Q6@H(t1#Lpy z%ekMVZUj1A4^uuwyVN`Dk1`+1!Ehkdb(_01hVs~fx|onTgOIvJk}^+dm!#yM$Jl5!68>(L*g{IG4K zcDb#yDtDy)cgRQVAg+#o+(-MP^vixNp-m5c|J$01I2sJ2<2BpyC)@aIdQ3ofgu1tB zv(f6~?4b8rc^7qwv}-~8zq#jFI~veW-DmI-30!-Sm)U;V@}IS%Q+W(`vTO7@8RCZSS`8Z z(Yg6wAH!#9tShf|^gM%ljIkXu3TkHRSqX!*)bm-0f7|!gV!!Q~=ZaWOHGfK4%?67i0w0#kIF?R{dFK|b5zeRlxZ|zv0m>h8H^kUu7%hPQ7St6<-x6zoF%F7%yj9V+*#ZspgkBYMYh1|bx(p6;V#Ng54+>r5a1eJ&ocv?&Yo z!TYIulKV&c>C7jP^uMwd%-!$$hf1)ond73XRC72lF^ZQZ~{PFRDWZ#5f ze4xHBl|B&!Z(N-#appn28yOvm`_ zn-YwVmn-pU(Sg=&8^$)FOIketh!3_OitE0letdi=D$cfS=uWyJp=6f- zcL5FmhlnPIQvau@b_pg2qEdYcfs_<~O!g@a3M9n`11ZW4H-l3C+oZcEhtiU=&8?e% zaws`iBK3}yyR%qaWqq@PHEL^}>d+&Q(0=i*8D(oGgb2~t)X>=YU}9XIl&bA()V`xi z^d|(=*57{1fb}zr=jxe|6iQBA{PBDDRB&VJxNDPy)23usX-n?+fAJLPlpKl+us31@ z34z50c0ZGgbw~)NZdtW^L_|LS_)uD^Z#+x8<>&qTau#v3Coom!-JP>#{lNvE#cd9k zuNO)TnA{4mXQuhg1jYtkPsYZQwJCK{d@dswH#+>wmhwl|dV8h>;uTSU;xu1WY#=Ib zd}u0RoWM4V_NV&YRgVt&v?No4DY16%DdAZn6KXR+pJX4p$|#sbTu=O!rkc|qoP7-iPEPAk`w*$gdj04#p&i}|3okT{?xfVp^z`$ zpBxj|^8V>Q-a>8?ntWu>Z1JA$nkP&I>E!yH!aU=neX(S<&mR>acd zcPCNqIPjm2nn9yJkR^7vzI$%rm!|C2`;!Acl1ba26!vRR`r2~fg%V@h`{RRtQp-xd&;-ph#m92H z!(=r}2$P?8o4IYWhQOvy%ESPh*Nj@ZvN9{xX{JnmuD2f5j(rHVWDFn#eJk&YdXa3ek=Xc zQg2~S^OQ6<^CzUm$4^^)-<80Y0#}~PwfMJ<#j6JsCkIL6P>ZP{JWuh!2S1@Th{)5HAf-8Z!(!0ZD+Um@#_~OVmUafY)Sh22hUg* z(cMZszIDv8{z>dZra(N#2Yln*BQVl8*gcL+NQj5q);wnu{Bh=SPsjLRls`2XA_|FV zDgN>CfygbxZ`SvO`*ZM3NoHm#zUW{|QoMhfPX}{-B9V~bPo7raJvIE3$?jw)TVviO z?ml_l!;d!;-!#`h9pA)~(@s0c23t?{YzA681N1oBGWVZ7IZL{aZ|A=}r1{qjJkR7Z zhhFA!uO~8RgVf|82d{ga8>{9)Y}U|?ODHiaV6w!Qc`KKvr8k#(NM|<8>-p3hXU=WA z=rvJ&QPDv}6A#-!U9r^w7( z`8|icnf!m6C3$l29+c6zi08(=HVHWtV@Y}*Ijm)Jn#oNYDUPXR>tTw|eJo9IlP)ne zep+V1qMm-<0)Zr7uZA_-RhXC(uNp2ct zTlK7SIOrY#JW6;>xlfqr%s0w=Uh$T=JD%Qx&8V3@D|x=n(ZsyY;xk7{A}?~|S#I}L z;ZF25#cYG6Wb*$ER3-P~@V+v|>fd?5bg^MtT=b37VfW=wM_jf?j{7Xu>ShI$IhrL% zNsA%zHA9oV+9UBKAPX3)9j>tGQN^qYpLxc*XEw%C0`94v%qf=Yj}OJ9k+$O_G;)>9 z4s|?bJ>j12L7CzVrK4|vd6_nX`}%1sq64YCC0N01A2+vCY|wRR*2)TOEu3NP;^(C!HI-DE63fj%rH_FS%jD)(LM!C&Wq+~9u z>scKU4!GOy&g)4-Q__j83}&uLOT$8t*?uFFC}Csw~%*;mwy_ zO|qFStwnVY3Hwg&nzEVdgtKgE&nV1p3fPv}mh8@$*?Vh1+lCRDvpZnQzuRW5zYaUM z!@s7K+s-MoStCz!#7G{G*_Oq}i9~SS(7U^Wvz8T-s|=R)hUI$XzJj9sAJ4JOWz9Xw zxx#lha8e*SA()b)9Y;TX5;B>m?X07SdYyPiX|`shZ^WJVo^0LY*;DS+%z;>=wyV%P zzWZ4+(xDgWkXS3#msy~#=TA@AJ#lz`v3nVbt>PX#ZsKPhA-wF^ea=&ghgiJ4RDMlJ zOLWf(og!HeO0!#Rq|9NXgNE&tmKqaM%kEu=+&OK0%`ugd5YiD4Oyni{&cTBsB@mTH z;&s$3MKE>RfVA;;FQ#Pv)y`Ad6E<6g|=s@%n_7?dWn}Qb^6L zjU1WLsDr0zMvD%fVrATB#>uQ^?gq~o)xlG_aOc6pvgcpMpiZ6%Eq!grCpXlmbdw6i z&U#AhNH{k;w)l6~fbhchDMY-dlWg03nxm=H+kH9E6m7tgI65$>nJ%yKl7w5F%&MVuF@cz=CgASI4( zB<{XOrw5Y92UFAi$-y`xfA_1NbbaY9`V%9$b86CC}ZFwo|YMndU*3>q|WtB{D1L<&`52q30YC# zvt?{3(H|G05KQ+c5)Q^s`>)>*b#=qTthFOdp7`~3O1QngJ^ELzofI#3u|ei$zI9Qn zp2_~WwB$G*e+~GKXnb07TDHoLN&a|$y!#E!e{Ji2ZxnQgb4TkFR9`|CmmCbI2II0> z=^7JaA@2_9&Xoltz|l;Qq4~NhSx;cr?vDP>sJ;Bjq!H0ibc2x2%b~jP^p4|r;rt{r zuJTSa!YsKRPG88hb-z{mUwx_cpTDI0Z)*}rcL%deVpc<6)+si9$xmN;8eaP22Ho-9 zH4)JK13_hTVk(|y`9`lH{`lxSz9M%I#f0KQcNgf6`+S{LD&y*0PyIpv`cBE0kQT%A zee4{f0ll`oj6uUGu(!BEDxD?NkrHMp}B z8I4zYN)^q%!tMfRc3b5McnkILr=_L@-NlRX2Qxl;!Lu<(-?W&_q&1$2xr*6dL7&ni zodphN9$V*mB%%t@U~k*x)yG9M_T5d8*?)uQNl$ls2-t=?6|AG~eq@JoDkb`T(d5AY z@O2frm6n{*Xp?7XM$Jv0r*n4URWb9uO`aY(+RJz4P>i3mGA%Vdc*l4epZa21GqdE% zFJ2_v{7%zRHI=OynVD;==O=IZE;@{oV`L{?+xYHe{FzrXJ!>KcbT!kXLA<+7?qs=h zx8}|_0&$_l)HJ`-+s}FsFP(VoCZ`8cw(Fdhxn_r_t0%8}EV1pR%b(MXp00?}!4tV1BypX_e5#I(2ohba#h9@69eieP2%&$FSKQETKOw%+bY!BAx#~;&9hR_qCPn=f+~9{!GD)qDgMW zCd*?UNPd0cpY=`N|H16jn6P=AxRK;j`TxfNo|PJmZH2p5l=)|BH_Qyqceugz0e$EsF9=QzfAV6l04!Ay$|M*6z@gYFhGOOzh)C$hQt{wz+< z3gYALmOwgt{m#PqBQtM&?@9Hv?5fubonRdNdN$VQlRZxYy}oSW=IyJVZ8@9rDAUQFJ!`UgVUOIqz5H>leVK3m z;d$1Z+4j2U!5rZpHnH7T*SjyQX4?~Yog}^#o_;2i?^?RMdj3e?ofl*V{7>Jm+3(=e zi0a)_o`Wzl^R1hnMLD*1_I~BbJ;YC*C;Bt1dA;pDVV36Z0~klr(|8xluDkm}pjmQs z-}MbeD20!T?xD*QNb8p3X9q^}rWQz#3$*e1c`mWBh@O&M31-h|_qiIK=1ot_9Gk=Y zvbTKWNWLjcO9}Z~J5BBuhw5pZaioT~bSD38&PF-&4@eGSMbGMB=74?Hj8I{3rOsVB zYIv)0&*XnczCpIgvr7W*`+ph{*YxqsefntoWKJ*a{nlHhr~7T9Mq!(|AAWp{W(U)B zGshM4`g3;bYChT65%0W;=t2HJuX{45!JU1X`Cch+M&68jU-6X7I6KdiuS7?77hc_c z9^uvhQ`p(NMiE6(eCI_Y5(5?rnj%ar5+limV2H*w#En@{Bw&%kLeY^d%QA5TnuR#c zg0+R%ydt3Z2WUH>Hny?0vPqlP!rI@x@6GPpHPLQicHX>?bI(2J%#zrVk5Qa>-4fGo z3xm?RqVlpIeFUKwL#*rw3G`>>IU+q(HSfM=6CVDyg28v^6UyC2@B&mg-n5 zgohkY=SAAiSeHm|S(aE&< zLW(tI^>Lj%Ry}+MA&<z^T2|tJZiKHY)7>PIdDOolhR2!t_|YZ4I}!6b38g_ z6#gsK;4qO*)YN7j^2%Q?nxFK5j6xJ25GZA^raUW*4MmZftA(I7plh5`9Tyk1oi_8j>_Pp(Yt+>SYMk zDMBN!UpJMgb3{F}3SQo5J!->^MQk!>?;QsNNxU&HX-cc2Q1L|K?1Js@)vXQ~_yZku z{NJPI@0QHNXrVu;42KVUfJ#Tl{+y*fykV{_1y0}RoPBrq=*$Vvf~^|c_F~0M43THr z_xsU#lcaWMng2sRV?QmMu}7R6O;LW;Bd8O)?Zr=Jmv`256PzUMhMH`x071&rC2?(4 zUIjTj_~r{0^Ch|>!g!0siN}z83f7d7XFbWqTX1x%juuVq;Z5^6KUg-4QHS==s}hO+ zfo>J>nN!2BYfIkH|8#kSRgRSvW+rD5Q;Mk?xfdCnGir?NWAZ=!~lS z+Ev`ih6nD4MQmjzi z?)%?!_&)BPr_{IefBu^jOnqxHpcg7P?#pS3O?8HoX6EmPQ#w>A0Oii??jn~5j#6z$MhGQ76!Z?_2 ztjW)T*@zdj@m83Mcqn?cw4({c#)X&&S7SHai45AwKF)EnC>@vLAJ)F(9cKygR6jBa z+=cw(RGHv7Pw*73z}-Kw9UcZc(ZA=;@X4$y>6a$6{%Z*QIK}Z>^k+IDeg{c%CQfyn zu9$9`<1E0jxC*mJ7*FF$;)AC<&Lqq-!*TZECftExGmZHo9cMf7zi>V-{)KJE3bR=M z^#pdzGJDo_wlVV@$MKPV4d-G6|I$hnoM+sEBZ-%wwa&N`D_|Bz*&jo2I9^ANh0}VW z@fHpz9=wP$c-KonOICfc@hoa7Td}S^@B!AvMy&f6T#TB@;$@EW9ZTA3ITD}4G8D(F zSP7G`Ozp5Kc0?bx#B?lg3mky0(0hhJeggT~hYr{pgK5b+&oq>9eFQONp;2`Y5 zN$G^Qk_6=uhC7#-hRohb8yih(gmPlK^A6UN8f7!ynQN8BP2d ztb|Pu#dze0p;p3c^QWR3T7c?c1xCY-sK;#!Cc&$i6rW%mbhnuH;$bY!G&OCmd zUQB>xQ~+yXa%_wlu^Xzv38;GWtt(L-Y(~v=H)`O=F%e$2{*9{l9=+-)V5{Tgz@(@S zOJiKDj5;j!Q59C(^ew2B*oP{A77O7u)Jn$RX0|dJs^dJUl`4bUs>-N=)!fETYsAe+ z&_LSTf_+d855n9y61BAJPy^Xy-HBSU-%t%+zyf#|HJ~Is!-cUjCdUD&Et!NxaiNd( z=ZSMJk`Rc4el?$3vr&)78C1jhx0_dVY1GozN6oYiYTzNL0fu8J4#Z4&A2om&J50Tj zsFkROs#niTKr?NFnn`Dzfdfzji@%dkG~9@6m$P!0S%KEO%@%b=4X7__Wk#R|_7iHR z(@-5P!$91E8rTI)h2A#=G@?X%%o3%--o*1`23&yZU=M09PoNsUfvWc$1Mn@X!B41( zq}XdZ&W_42iaJxJP-mbjva(*MHUTx%0@YD4>TvZ!jeLalXH-KAFa<6}4QMCoX*hv8 zOSe%2{0FrnpRp9i+Gh@PB~-if@Cf}oYYAvX;rmU-VAKG9#1c3Mm46;}7OvX(LsSP( zP#wRqdJdS0#77<8w5Y>Z6}2_3Q0;fX`1J4eQvgSymToGh$3@r!_hNC(chC$d1ZNVT zk3lX=d&r#nuD_W9&O)`f+{U-yX5#y?5{4h#- zw$kSRYV(iT{8Jc{{EMi=eAD_61BpLJ4Jh$Zvtk)h<#HWm{gqMJW|YU6#A~9Ks39u9 zBWh2>YncQeBV7>jr? zY5?7^5e`A^{b^MB8yFiO*z{+p75a$b81K0G?l%I{5}$>ca4TlSOQ;oo<0YVmKcP-> zoD*io889yKyr|P!0yUs&m=9ZEJRFBAH{He;qS{$!-H$r`7f>sd=%jf;l|yZ{cMSoJ zXcwyDb=00eN6qvN#>X$H0mT2qm=SpwIfYQ=pQ2Xe73wklf^jh5lo@D3R6L!H=P-Jm zA_UYy1zVsVYDO(F0d_()*blXLgRPS=8S#av@>@~u>_JVnzhNT$19fO_p$7H<^@4hZTKfEFjU`YMsfapsby4Me zV>%p;EpZ-t)zMo5>c}}~D#S*OFb}F?NmRKSHoXCAKy6WntG7*GgDSrrwF1XbOZ@;f zvB#)(-k}~__q=`n)15balN+_yB~g3$9VW)cs2O!aH57)LvDf+|Y6T-~d_Jn&N}Imb zy3cytdhtB#uYz|-(8!WGPf;@nxNKG;Icmn4a26Iq4dA%-9BLxhP%HWf z)zKR)jq$FS^3_o*SRa|F*J(;XGi!@l%C6R-sIxE?wYM`dBQCP>{iu~Xff~pKRQ(&M zt@{@>kWZ+mAkJ0OPF~c6i(^WC{(naxkc6hF84N%*JQlSAQ&20i5Ve=vPy;%IYUmWI zwjs_-{zW!|9%7VWx;Cqd0H z9V$I1s^Q|OdUa6kwMOlE2x=tpk)15kTD1~s6cP!pJcll50%wJo>}3ll$t>i7+6iDTVj zTQDK&P>n;?n~PeZm6#qk<0w3B(;MG5KiITEl^=`R!fB`#S$NxP5|)vm8APE*x(7AV zL+HUvsE)6q8hVCm-~(z&ojb9QCNvH;!PyuK z7h-_+eiZ?AxZb)8)zR;$f>%&0aTm4sFEBP1e`J=l0&44OqxQHtY9&HY^#))j9EYm6 z3RNx&y>$ufBajgj{$uvO0BQiWPz|?4txzXSjRR0yG8Hw`6{r~=M|FG?wFS>H0AoHj z?ZiW!tyHM=B9B>rjie+A8?Y*7z}Hv{lRq&(vjt-u;yY0*br?0k^EQ4D)y}`DCH{;$ z69G@nhfgZh7Bxn#Kv&d2`#xp;GZPp?!bV()>#@Z%(@?DEX5so^pgyW68B~!paS39jE<<8^+RgjnR&J?HUvJ%qI+SNI5O1RY_y1oAs6yIz z<`88=4WI(5;dZF}FieI+P^Wz=YDs6Io{9yiC0~v$a0@oU1nphN-bGYQ$YoGZ~0lx~Z5GBQX!|Lk;LLYUZy|1O9*-NSrTb z3sPCLVPVp}g$Za+Lr^0hj9S`}HvW^1N7(pWRKrVA1B=3Jc+lqmZT%NDfp@6(k~*$` z3(}zmn&0T#Rm4IFxb5IQ&LlwM;n(+hFfL_`BPu4imT>lcMM4g2~ zsJ(89nn)KL?}d$s54GuMQ0-nuuL}NU6P}^Y!WYy)k_DJ}Ce)G@Lk+AVD!&10iQAys z>4-X1p{O_9d@PFlF&Dl;%{)_d({73AuGjyHtV4o22t_U308~dSQ6u%CR^SNgFr7j@ zPM1*)zr^I2K8869L8yt8#q8J+_4Euv^)n6C{`?qT6Ie%rUa`AS9om?oYCHS>%%o*gF>55l~70M*_z>l^g1FlHn@nKzbcs0ix$uYl382{ynMs0P-c z1{8&5a2M*(y+hUej2dW?*k*v4Q8Uen8h8;LgcVR{WGCvW@g5_f8Jt5Eyox{IL)2r| zA&zOdC+ZbC3G!b&@z7XHOf#Yy3PR1e9Hzs1s1@msdLi{ebrgweZxL!GH=_Fa6{G3-|BXNo z5{{uxZSnZ#xo?STI25(?<55dJ6?OQQp*q-ydGUADioHP%%#*;>OM)6eTGT{xqw-6j z|L6be1agwl3U&I&pbptK)QERs2Rwv&@#IWs23Xo!8#R#D*3KA6ybo$X(@-lm549Dm zP;b^f=+#o)BcO(3Co&zTLya^mYUG7cD^LNoB{fkUw!)^^3H7eujrH*oR>Yi%UH?x& zp_qqw1Zsu%q9%4XG0(pmdPIUo_#Y-hCyD7OF=_x=P)k-Awe%HHFOt@%$0!^%)9I*o z7N91u2G!AaRQ>&^!+yrbFDK#o*XQwHBP38-T9WcIM2RwONIq}gmdFRH;}sDXWldSO*VHP{t3 zk-?}p-89r2aSdv~`%x=*%f{cM>U&cqHw~A<+$2;)EnN@PKz=~YV2pJJYQW1-1KDiT zcj6G@$5HjGr!ZUB6jeUN#=}r&Xaur_UMGTpX1W^H;3iZ9J5U2SirU+=r~%$U9imt% z%?l_GYJhF9Hul8fxD!ianN+TG2K%Gp)l-|#jFFg6&;MEiTDq$?;{^s1PnX8bpe$+t zwNV3YW^IEtiHBG>;y~gbFh7Q;HA}w)n-kxU>L*P)*Z;?Hg)tfZI}Zrx@q3RAF@Acp zckQqS@&5QD?!%E-GlT0?!IS92q#4c3j^h^M(F0xo@Ar40Rw{WW*Z(cL1nPyh8g(X) zptmA{2L$wD$eG#o|DkhP)Y9KZ&HNGSh4c!w0v}L^(UZlb$3Y#!M5w1B6V7t^X$ZA7 zN3xn%^Ci^J1J|)J7S6`=ufs7en|Xmu$0Eenqdo=iq2B2aQD@_^^_BHAYM?Q*n*k-Z zrbcy~33b>Cp?-3zgxZ46s0n+s^Ze_bKAi+Lv=aTN8ufzNY2#;61HFbS_m@q7fjX=o zP%9KWhgqS7sPq)5cCw-dR2p@NYoYq-?2 zi7Fq2GqD1GkC#y^S0uL?cu7>bsy5!(>J28Kuh%_o!UWXPM51Q87PI3v)BtXv4%MGF zKXx87^Q2gS^wiiNYoN}`KFonfQ0+ZKwet=+GhWA&*CZrG?NvI|J3l|Fqp~*M4)sRs zg&N=()c5(>sF`g?t;i8nJ7;bBebm$S0#z@1KC|U%(Et0t`~-ArD_iTM8fb+YX;0MS zG61y_Gf-z?7i#N{p*lWeHHw+<0}pX4@$ZVe z&L{j2^=f`m!n_&Fm2~}o)w5?wp8q~%6e{KV|3<}%!jedn*8FZPq}6|90#GwzsJE?<~yGMJOq5-nXg{=P+O6#oLS=B zn2mTT)Y7%XK-`2i@hs~7k-oh74p<0vHrk-hL?~(t`rG(O)Qe~mw!lqZ0$~K=RxnFG z3{~+eYA+vPBYcTkiE0&1{&v)i51}TIvXa@NO4xvSPt;Si4>f>OsEJ)et=zw;fqD~H zHqU7W)E;F+eMp3%-V0MOH?Bb)vWut&ucHp%U+BT-SO{NYd(2kFJa*$z_2yU?p$_i~ zQ z24W@DigvW|FpRFx{|ExAI14qS#r_OFCQ(bf5nJJP8!uVIb*2#yLDhSUEzzxM4qq#5 zLwo}24fr>8`Lr%axKvR=l_!lDC0ky@lhGX3)MDD8;R;@HWtPu*a0uv^ip-q zOe>*IdsEb#b09ueFO7FJbJAMAy>8oK_!Gd2sK5RcP{k6Ai?i#jWbnwZBo9crsfqqeM16Q2KE1h$f(&*fVf zgm176=4ooaFmyq!$R5&qwX`S=2-xpicQmY=Y^Un{r`TgZOf+h0mLN z&61UALBou=4XT07EzO(n7;0eazc;7*Fluk#+IX{8=8*n~`g*+?we%-ZEBPGtG^J~8 z`YDO}4EY{4;E`SedQNAcmUJoVGvF?2>B8EWuU5k_2k|MG7=5T29z!+wH|nuU)Yg2; z1){dFC{D-usDTBwbDiDT6!)MvS+GeshjU4o+TL|0V*U=U^B#BN7Tng6z4P!!3o(!B zqRy`VrmYjJi|ZW2U3dz|c6FUUuxU5bUbawkHV)uA(u2C2a(9egXHyT?IZ4Kdo~|-91X{(~2ZZ|&_m=W${mSARdn2@W#@D%#g|Mi765o3VSiDVMRIDfb_qCH-iBlRsyG z>;IdTbqBi6Po&?+NqYW!4>BJHpRpPlg9e-UejH1@%nxP>58?#k&4-v3x`%^^_a5px zzu+V5s9~=Ek7m<(U1uoi>rkJjd4}`q=8TQQBgChT;Bb0b(v~C5JA313^Qq?}+G!A zj=-M;!ZF(f^XW7jzhk6(P#-3relm|^y@_Uk6Hx=YfO<98nPeWzxu`?<93#=0YJ_>R^#(kMdRk7{^lPXeJno|2 zpf6G7KA;}sfT<=uEvj4=RJ%n``L(CAH>%Kq1lb+cVL!}=Lu|p-n2h*-jE@&lkKujP zfL^0!9(|g5wI)YB-?>m9vt>}9rZrHHVF+p<rg9n2sNOSsCu`oPf#oI0aY%}4AV|hEKEE->U%(a)K)Y_%6py81hh2$Q6ry*<#7S( zGvGE>!1OcC3baM7z+fzfQ*aX=#!NUc(oAGFh7v!8T8YxXm>E|?#oMC)_y3^;l9LdQ zIz$stkI6LD$P>?UopM+iHS^J^Gcpskb@Na&UWeNAZMX`L;Y#c~+jRnYn$pd2{r~Yv z*|}zAu47!@KhB>7w3IKb{K8KT6g*wce7V!M5!U+;I^1p0B&q7lmC8}a!Y>d^g70$K!@9+WfWQ)vz z-lI-+w8bnrrp3xw1~uRjs4bgdF1#?{JV(JFJ8d!V*#6zZ`Xk9s^OqyNyNw%ogpfR<*9bvNov9JZcDJyusy zGyaHrd=jpAX4qrJ`hiy@3s+WzAGI4(YM?j}~1?I=&s6+T3wUnvX zxc>hlDmSX*DAeKEi-++lY9@=;n!R6%8o)kOhsUrv-arkc*g7-ds+d5Z{|yMJqjsoM z+XwsN1k`u8�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 diff --git a/locale/eu_ES/LC_MESSAGES/django.po b/locale/eu_ES/LC_MESSAGES/django.po index 647483af8..1164c443a 100644 --- a/locale/eu_ES/LC_MESSAGES/django.po +++ b/locale/eu_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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-02-11 15:47\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Basque\n" "Language: eu\n" @@ -54,19 +54,19 @@ msgstr "Pasahitzak ez datoz bat" msgid "Incorrect Password" msgstr "Pasahitz okerra" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Irakurketaren amaiera-data ezin da izan hasiera-data baino lehenagokoa." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Irakurketaren geldiera-data ezin da izan hasiera-data baino lehenagokoa." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Irakurketaren geldiera-data ezin da etorkizunekoa izan." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Irakurketaren amaiera-data ezin da etorkizunekoa izan." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automatikoki sortutako txostena" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Zain" @@ -258,17 +259,24 @@ msgstr "Jarraitzaileak" msgid "Private" msgstr "Pribatua" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiboa" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Osatuta" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Geldituta" @@ -284,6 +292,10 @@ msgstr "Errorea liburua kargatzean" msgid "Could not find a match for book" msgstr "Ezin izan da libururako parekorik aurkitu" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Huts egin du" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Dohainik" @@ -359,7 +371,7 @@ msgstr "Kritikak" msgid "Comments" msgstr "Iruzkinak" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Aipuak" @@ -461,7 +473,7 @@ msgstr "Svenska (suediera)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (ukrainera)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Txinera tradizionala)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Ai ene!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Baimena ukatu da" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Ez duzu baimenik orri hau ikusteko edo ekintza hau burutzeko. Erabiltzailearen baimen maila %(level)s da." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Sarbidea eduki beharko zenukeela uste baduzu, hitz egin BookWyrm zerbitzariko administratzailearekin." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ msgstr "Badirudi eskatu duzun orrialdea ez dela existitzen!" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "Fitxategi handiegia" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "Igotzen ari zaren fitxategia handiegia da." #: 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 "" +msgstr "\n" +" Fitxategi txikiago bat erabil dezakezu, bestela, eskatu BookWyrm zerbitzariko administratzaileari DATA_UPLOAD_MAX_MEMORY_SIZE ezarpenaren balioa handitzeko.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +978,7 @@ msgstr "Gorde" #: 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" @@ -981,6 +996,7 @@ msgstr "Datuak kargatzean %(source_name)s(e)ra konektatu eta he #: 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 "Berretsi" @@ -1480,9 +1496,12 @@ msgid "Domain" msgstr "Domeinua" #: 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 @@ -1494,7 +1513,8 @@ msgstr "Egoera" #: 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:108 msgid "Actions" @@ -1763,7 +1783,7 @@ msgstr "%(username)s erabiltzaileak %(username)s started reading %(book_title)s" -msgstr ", %(username)s orain %(book_title)s irakurtzen hasi da" +msgstr "%(username)s erabiltzailea %(book_title)s irakurtzen hasi da" #: bookwyrm/templates/discover/card-header.html:23 #, python-format @@ -2547,7 +2567,7 @@ msgstr "Bara-kode irakurgailua" #: bookwyrm/templates/guided_tour/home.html:102 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 "" +msgstr "Erabili Zerrendak, Arakatu eta Zure liburuak estekak irakurketa-gomendioak, zerbitzariko azken gertaerak eta katalogatutako liburuak ikusteko." #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2599,7 @@ msgstr "Jakinarazpenak" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Profila, erabiltzaile-direktorioa, mezu zuzenak eta ezarpenak hemengo menuko izenean sakatuz atzi daitezke." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2826,111 +2846,121 @@ msgid "No activities for this hashtag yet!" msgstr "Ez dago aktibitaterik oraindik traola honentzat!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "Inportatu liburuak" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Inportatu liburu zerrenda" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "CSV fitxategia ez da baliozkoa" -#: 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] "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 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "%(display_left)s geratzen zaizkizu." -#: 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 "Batezbeste, azken aldiko inportazioek %(hours)s ordu hartu dituzte." -#: 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 "Batezbeste, azken aldiko inportazioek %(minutes)s minutu hartu dituzte." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Datu iturria:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Zure Goodreadseko datuak deskargatu ditzakezu zure Goodreads kontuko Inportatu/esportatu orrialdean." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Datu fitxategia:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Gehitu kritikak" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Inportatutako berrikuspenen pribatutasun ezarpena:" -#: 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 "Inportatu" -#: 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 "Inportatu ditzakezun liburuen mugara heldu zara." -#: 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 "Inportazioak aldi baterako ezgaituta daude; eskerrik asko zure pazientziagatik." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Azken inportazioak" -#: 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 "Sortze-data" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Azken eguneratzea" -#: 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 "Elementuak" -#: 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 "Ez dago azken inportaziorik" @@ -2966,7 +2996,8 @@ msgid "Refresh" msgstr "Freskatu" #: 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 "Gelditu inportazioa" @@ -3064,6 +3095,133 @@ msgstr "Inportazio honek formatu zaharra du, eta jada ez da bateragarria. Inport msgid "Update import" msgstr "Inportazioa eguneratu" +#: 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 "Inportatu BookWyrm kontua" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "Ez da baliozko inportazio fitxategia" + +#: 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 "Edozein egoera migratu nahi baduzu (iruzkinak, kritikak edo aipuak) kontu hau migrazioaren jatorri denaren alias gisa ezarri behar duzu, ala kontu hura honako honetara mugitu, zure erabiltzaile datuak inportatu aurretik." + +#: 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 "Une honetan erabiltzaile bat inportatzeko baimena duzu %(user_import_hours)s orduro." + +#: 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 "Berriz ere erabiltzaile fitxategi bat inportatu ahalko duzu %(next_available)s(e)tan" + +#: bookwyrm/templates/import/import_user.html:41 +msgid "Step 1:" +msgstr "1. pausoa:" + +#: 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 "Hautatu beste BookWyrm kontu batetik sortutako esportazio fitxategia. Fitxategiak .tar.gz formatua eduki behar du." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "2. pausoa:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "Hautatu gabe utzi inportatu nahi ez dituzun datuen kutxatxoak." + +#: 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 "Erabiltzailearen profila" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Erakusteko izena, laburpena eta irudia gainidazten ditu" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "Erabiltzailearen ezarpenak" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Gainidazten du:" + +#: bookwyrm/templates/import/import_user.html:86 +msgid "Whether manual approval is required for other users to follow your account" +msgstr "Zure kontua jarraitzeko beste erabiltzaileak eskuz baimentzea behar den ala ez" + +#: bookwyrm/templates/import/import_user.html:89 +msgid "Whether following/followers are shown on your profile" +msgstr "Jarraitzaileak/jarraitzen dituzunak zure profilean ikusgarri egongo diren ala ez" + +#: bookwyrm/templates/import/import_user.html:92 +msgid "Whether your reading goal is shown on your profile" +msgstr "Zure irakurketa helburua zure profilean ikusgarri egongo den ala ez" + +#: bookwyrm/templates/import/import_user.html:95 +msgid "Whether you see user follow suggestions" +msgstr "Jarraitzeko erabiltzaile gomendioak ikusten dituzun ala ez" + +#: bookwyrm/templates/import/import_user.html:98 +msgid "Whether your account is suggested to others" +msgstr "Zure kontua besteei gomendatuko zaien ala ez" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "Zure ordu-eremua" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "Zure bidalketen pribatutasun-ezarpen lehenetsia" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Jarraitzaileak eta jarraituak" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Erabiltzaile blokeoak" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Irakurketa-helburuak" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Irakurketa-helburuak gainidazten ditu inportazio-fitxategian zerrendatutako urte guztietarako" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Apalak" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Irakurketa-historia" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "Liburuen kritikak" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Liburuei buruzko iruzkinak" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Liburu-zerrendak" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Gordetako zerrendak" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3242,7 @@ msgid "Reject" msgstr "Ezetsi" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Huts egindako elementuak" @@ -3747,8 +3905,8 @@ msgstr "%(related_user)s(e)k \"invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Gonbidapen-eskaera berria erantzunaren zain" +msgstr[1] "%(display_count)s gonbidapen-eskaera berri erantzunaren zain" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4022,16 @@ msgstr "%(group_name)s(r)en izena aldatu du" msgid "has changed the description of %(group_name)s" msgstr "%(group_name)s(r)en deskribapena aldatu du" +#: bookwyrm/templates/notifications/items/user_export.html:14 +#, python-format +msgid "Your user export is ready." +msgstr "Zure erabiltzaile-esportazioa prest dago." + +#: bookwyrm/templates/notifications/items/user_import.html:14 +#, python-format +msgid "Your user import is complete." +msgstr "Zure erabiltzaile-inportazioa osatu da." + #: bookwyrm/templates/notifications/notifications_page.html:19 msgid "Delete notifications" msgstr "Ezabatu jakinarazpenak" @@ -4107,7 +4275,7 @@ msgstr "Kendu ezizena" #: 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 "Blokeatutako erabiltzaileak" @@ -4242,14 +4410,66 @@ msgstr "Lehenetsitako pribatutasuna bidalketentzat:" 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 "Apalen pribatutasunaren bila zabiltza? Zure apal bakoitzarentzat berariazko ikusgarritasun maila ezarri dezakezu. Zoaz Zure liburuak atalera, hautatu apal bat fitxa-barran eta klikatu \"Editatu apala\"." +#: 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 "Esportatu BookWyrm kontua" + +#: 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 "Esportazio-fitxategi bat sor dezakezu hemen. Honek zure datuak beste BookWyrm kontu batera migratzeko aukera emango dizu." + +#: bookwyrm/templates/preferences/export-user.html:17 +msgid "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "

    Zure fitxategiak honakoak izango ditu:

    • Erabiltzaile profila
    • Erabiltzaile ezarpen gehienak
    • Irakurketa-helburuak
    • Apalal
    • Irakurketa-historia
    • Liburuen kritikak
    • Egoerak
    • Zure zerrendak eta gordetako zerrendak
    • Jarraitzen dituzun eta blokeatu dituzun erabiltzaileak

    Zure fitxategiak ez ditu izango:

    • Mezu zuzenak
    • Zure egoerei erantzunak
    • Taldeak
    • Gogokoenak
    " + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "Zure BookWyrm kontu berrian hautatu ahal izango duzu zer inportatu: ez duzu esportatutako guztia inportatu beharko." + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "Edozein egoera migratu nahi baduzu (iruzkinak, kritikak edo aipuak) mugitzen ari zaren helburuko kontua honako honen alias gisa ezarri behar duzu, ala kontu hau kontu berrira mugitu, zure erabiltzaile datuak inportatu aurretik." + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "Esportazio fitxategi berdi bat sortu ahalko duzu %(next_available)s(e)tan" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Sortu erabiltzaile esportazio fitxategia" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Azken esportazioak" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "Erabiltzaile-esportazio fitxategiek 'osatuta' adieraziko dute prest daudenean. Baliteke honek tartetxo bat hartzea. Klik egin estekan fitxategia deskargatzeko." + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Data" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Tamaina" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Deskargatu zure esportazioa" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Esportatu CSVra" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Esportatu liburu zerrenda" #: 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 "Esportazioak eduki guzti hauek hartuko ditu: zure apaletako liburu guztiak, kritikatu dituzun liburuak eta irakurketa-aktibitateren bat duten liburuak." +msgid "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." +msgstr "Zure CSV esportazio-fitxategiak zure apaletako liburu guztiak, kritikatu dituzun liburuak, eta irakurketa-aktibitatea duten liburuak izango ditu.
    Erabili hau Goodreads bezalako zerbitzuetara inportatzeko." #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4487,7 @@ msgstr "Mugitu kontua" msgid "Data" msgstr "Datuak" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Esportatu CSVra" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Harremanak" @@ -4762,7 +4978,8 @@ msgid "Active Tasks" msgstr "Zeregin aktiboak" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "IDa" @@ -5156,9 +5373,14 @@ msgid "No instances found" msgstr "Ez da instantziarik aurkitu" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Gelditu inportazioa?" +#: 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 "Ekintza honek erabiltzaile-inportazioa etengo du osatu aurretik eta ezin da desegin" + #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" msgstr "Desgaitu inportazio berriak abiaraztea" @@ -5171,70 +5393,107 @@ msgstr "Erabiltzen da hori inportazioekin gauzak benetan gaizki doazenean eta ar msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Inportazioak desgaituta dauden bitartean, erabiltzaileek ezingo dituzte inportazio berriak hasi, baina dauden inportazioei ez die eragingo." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." +msgstr "Ezarpen honek liburu zein erabiltzaile inportazioak eragozten ditu." + +#: bookwyrm/templates/settings/imports/imports.html:37 msgid "Disable imports" msgstr "Desgaitu inportazioak" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Erabiltzaileek ezin dituzte inportazio berriak abiatu une honetan" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Gaitu inportatzea" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Mugatu inportazio kopurua" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Erabiltzaile batzuk liburu kopuru handi bat inportatzen saia daitezke, eta baliteke hau mugatu nahi izatea." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Ezarri 0 balioa inolako mugarik jarri nahi ez baduzu." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Ezarri inportatzeko mugua kopurua" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "liburutara, " -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "egunero." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Ezarri muga" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "Mugatu erabiltzaileek zein maiztasunekin inportatu eta esportatu dezaketen" + +#: 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 "Erabiltzaile batzuk erabiltzaile inportazioak edo esportazioak oso sarri egiten saia daitezke; agian mugaren bat ezarri nahi duzu." + +#: bookwyrm/templates/settings/imports/imports.html:111 +msgid "Restrict user imports and exports to once every " +msgstr "Mugatu erabiltzaile inportazioak eta esportazioak: " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "ordutik behin" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Muga aldatu" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "Liburu inportazioak" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Osatuta" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Erabiltzailea" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Eguneraketa-data" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Zain dauden elementuak" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Elementu arrakastatsuak" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Ez da aurkitu bat datorren inportaziorik." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "Erabiltzaile inportazioak" + #: 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 @@ -5721,7 +5980,7 @@ 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 "" +msgstr "Zure gaietako bat hautsita dagoela dirudi. Gai hau hautatzean, aplikazioa erabilezina izango da." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5775,15 +6034,15 @@ msgstr "Ezabatu azala" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Probatu gaia" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Hautsitako gaia" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Kargatu da" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5832,7 +6091,7 @@ msgstr "Ezarri gabe" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Kontu hau HTTP eskaerak sinatzeko instantzia-aktorea da." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5904,15 +6163,15 @@ msgstr "Erabiltzailearen ekintzak" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Instantziako admin aktorea da hau" #: 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 "" +msgstr "Ez zenuke kontu hau ezabatu edo desgaitu behar zerbitzaria behar bezala ibiltzeko kritikoa delako. Aktore honek kanpora alderako GET eskaerak sinatzen ditu ActivityPub zerbitzari seguruekin interakzioa errazteko." #: 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 "" +msgstr "Kontu hau ezin dute erabiltzaile arruntek aurkitu eta ez dauka profil-orririk." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6047,17 +6306,15 @@ msgstr "Sortu apala" msgid "Edit Shelf" msgstr "Editatu apala" -#: 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:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Liburu guztiak" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Inportatu liburuak" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6411,7 +6668,7 @@ 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 "" +msgstr "%(user)s mugitu egin da %(moved_to_name)s(e)ra" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format @@ -6624,22 +6881,22 @@ 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 "%(author_name)s egilearen %(book)s irakurtzen amaitu dut" +msgstr "(e)k %(author_name)s egilearen %(book)s irakurtzen amaitu du" #: bookwyrm/templates/snippets/status/headers/read.html:17 #, python-format msgid "finished reading %(book)s" -msgstr "%(book)s irakurtzen amaitu dut" +msgstr "(e)k %(book)s irakurtzen amaitu du" #: bookwyrm/templates/snippets/status/headers/reading.html:10 #, python-format msgid "started reading %(book)s by %(author_name)s" -msgstr ", %(author_name)s(r)en %(book)s irakurtzen hasi da" +msgstr "erabiltzailea %(author_name)s(r)en %(book)s irakurtzen hasi da" #: bookwyrm/templates/snippets/status/headers/reading.html:17 #, python-format msgid "started reading %(book)s" -msgstr ", %(book)s irakurtzen hasi da" +msgstr "erabiltzailea %(book)s irakurtzen hasi da" #: bookwyrm/templates/snippets/status/headers/review.html:8 #, python-format diff --git a/locale/fi_FI/LC_MESSAGES/django.mo b/locale/fi_FI/LC_MESSAGES/django.mo index f0c7a156cd19ae35c065017b278a1e0b0311454e..117e30e7aef0c70c51a4069696797b7423e8e095 100644 GIT binary patch delta 32103 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 diff --git a/locale/fi_FI/LC_MESSAGES/django.po b/locale/fi_FI/LC_MESSAGES/django.po index df42e2b4c..140f6f92e 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-02-14 22:33\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Finnish\n" "Language: fi\n" @@ -54,19 +54,19 @@ msgstr "Salasanat eivƤt tƤsmƤƤ" msgid "Incorrect Password" msgstr "Virheellinen salasana" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "LopetuspƤivƤ ei voi olla ennen aloituspƤivƤƤ." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "KeskeytyspƤivƤ ei voi olla ennen aloituspƤivƤƤ." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "KeskeytyspƤivƤ ei voi olla tulevaisuudessa." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Lukemisen lopetuspƤivƤ ei voi olla tulevaisuudessa." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automaattisesti luotu raportti" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Odottaa" @@ -258,17 +259,24 @@ msgstr "Seuraajat" msgid "Private" msgstr "Yksityinen" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiivinen" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Valmis" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Keskeytetty" @@ -284,6 +292,10 @@ msgstr "Virhe kirjan lataamisessa" msgid "Could not find a match for book" msgstr "Kirjaa ei lƶytynyt tietokannoista" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Ei onnistunut" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Ilmainen" @@ -359,7 +371,7 @@ msgstr "Arviot" msgid "Comments" msgstr "Kommentit" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Lainaukset" @@ -461,7 +473,7 @@ msgstr "Svenska (ruotsi)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (ukraina)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (perinteinen kiina)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Voi ei!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "PƤƤsy kielletty" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Sinulla ei ole oikeutta nƤhdƤ tƤtƤ sivua tai suorittaa toimintoa. KƤyttƶoikeustasosi on %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Jos sinulla mielestƤsi pitƤisi olla oikeus tƤhƤn, ota yhteyttƤ palvelimen yllƤpitƤjƤƤn." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,18 @@ msgstr "PyytƤmƤƤsi sivua ei ole olemassa." #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "Liian suuri tiedosto" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "LƤhettƤmƤsi tiedosto on liian suuri." #: 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 "" +msgstr "\n" +"Voit yrittƤƤ pienemmƤllƤ tiedostolla tai pyytƤƤ palvelimen yllƤpitƤjƤƤ kasvattamaan DATA_UPLOAD_MAX_MEMORY_SIZE-aetusta. " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +977,7 @@ msgstr "Tallenna" #: 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" @@ -981,6 +995,7 @@ msgstr "Tietoja ladattaessa muodostetaan yhteys lƤhteeseen %(source_nam #: 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 "Vahvista" @@ -1403,7 +1418,7 @@ msgstr "Kirjan %(book_title)s laitokset" #: bookwyrm/templates/book/editions/editions.html:8 #, python-format msgid "Editions of %(work_title)s" -msgstr "" +msgstr "Teoksen %(work_title)s laitokset" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" @@ -1480,9 +1495,12 @@ msgid "Domain" msgstr "Verkkotunnus" #: 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 @@ -1494,7 +1512,8 @@ msgstr "Tila" #: bookwyrm/templates/book/file_links/edit_links.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/federation/instance.html:112 -#: bookwyrm/templates/settings/imports/imports.html: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:108 msgid "Actions" @@ -2826,111 +2845,121 @@ msgid "No activities for this hashtag yet!" 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:66 -msgid "Import Books" -msgstr "Tuo kirjoja" +#: 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 "EpƤkelpo CSV-tiedosto" -#: 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 "Voit kƤyttƤƤ toimintoa vielƤ %(display_left)s kertaa." -#: 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 "Viime aikoina tuonteihin on kulunut keskimƤƤrin %(hours)s tuntia." -#: 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 "Viime aikoina tuonteihin on kulunut keskimƤƤrin %(minutes)s minuuttia." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "TietolƤhde:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Goodreads-tiedot voi ladata Goodreads-kƤyttƤjƤtilin Import/Export-sivun kautta." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Datatiedosto:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Myƶs arviot" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Tuotavien arvioiden yksityisyysvalinta:" -#: 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 "Tuo" -#: 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 "Olet kƤyttƤnyt tuontitoimintoa sallitun mƤƤrƤn." -#: 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 "Tuonti on vƤliaikaisesti pois kƤytƶstƤ; palaa asiaan myƶhemmin." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Viimeksi tuotu" -#: 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 "LuontipƤivƤ" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "PƤivitetty viimeksi" -#: 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 "NimikkeitƤ" -#: 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 "Ei viimeaikaisia tuonteja" @@ -2966,7 +2995,8 @@ msgid "Refresh" msgstr "PƤivitƤ" #: 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 "KeskeytƤ tuonti" @@ -3064,6 +3094,133 @@ msgstr "Tuonti on vanhassa muodossa, jota ei enƤƤ tueta. Jos haluat selvittƤ msgid "Update import" msgstr "PƤivitƤ tuonti" +#: 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 "KƤyttƤjƤprofiili" + +#: 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" @@ -3084,7 +3241,7 @@ msgid "Reject" msgstr "HylkƤƤ" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "EpƤonnistuneita nimikkeitƤ" @@ -3864,6 +4021,16 @@ msgstr "on muuttanut ryhmƤn %(group_name)s nime msgid "has changed the description of %(group_name)s" msgstr "on muuttanut ryhmƤn %(group_name)s kuvausta" +#: 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 "Poista ilmoitukset" @@ -4107,7 +4274,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 "Estetyt kƤyttƤjƤt" @@ -4242,14 +4409,66 @@ msgstr "Julkaisujen julkisuuden oletusvalinta:" 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 "Haluatko pitƤƤ hyllysi yksityisenƤ? Voit asettaa kunkin hyllyn nƤkyvyyden erikseen. Siirry Omiin kirjoihin, valitse vƤlilehdeltƤ haluamasi hylly ja napsauta ā€Muokkaa hyllyƤā€." +#: 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV-vienti" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "Vienti sisƤltƤƤ kaikki hyllyissƤsi olevat ja arvioimasi kirjat sekƤ kirjat, joita olet lukenut." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4486,7 @@ msgstr "" msgid "Data" msgstr "Tiedot" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV-vienti" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Suhteet" @@ -4761,7 +4976,8 @@ msgid "Active Tasks" msgstr "Aktiiviset tehtƤvƤt" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "Tunniste" @@ -5155,9 +5371,14 @@ msgid "No instances found" msgstr "Palvelimia ei lƶytynyt" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "KeskeytetƤƤnkƶ tuonti?" +#: 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 "Poista tuontien aloittaminen kƤytƶstƤ" @@ -5170,70 +5391,107 @@ msgstr "KƤytƤ tƤtƤ vain, kun tuonnit eivƤt kertakaikkiaan onnistu ja haluat msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Kun tuonnit on poistettu kƤytƶstƤ, kƤyttƤjƤt eivƤt voi aloittaa uusia tuonteja, mutta tƤllƤ ei ole vaikutusta kƤynnissƤ oleviin tuonteihin." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "Poista tuonti kƤytƶstƤ" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "KƤyttƤjƤt eivƤt voi aloittaa uusia tuonteja" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Ota tuonti kƤyttƶƶn" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Rajoita tuontien mƤƤrƤƤ" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Joskus kƤyttƤjƤt voivat yrittƤƤ tuoda suuria mƤƤriƤ kirjoja, ja voit halutessasi rajoittaa tƤtƤ." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Poista kaikki rajoitukset asettamalla arvoksi 0." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Aseta tuontirajaksi" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "kirjaa joka" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "pƤivƤ." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Ota rajoitus kƤyttƶƶn" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "Valmis" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "KƤyttƤjƤ" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "PƤivitetty" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Odottavia nimikkeitƤ" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Onnistuneita nimikkeitƤ" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Ei ehtoihin sopivia tuonteja." +#: 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 @@ -6046,17 +6304,15 @@ msgstr "Luo hylly" msgid "Edit Shelf" msgstr "Muokkaa hyllyƤ" -#: 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:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Kaikki kirjat" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Tuo kirjoja" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 1b3148f925749c58c5c0af8d9a502d676311710c..4cdcbf8ea2a3ffdeed740317a055f435e5954b7c 100644 GIT binary patch literal 44850 zcmchg2b^4Gx&Mzy388n8c9NKoKze9~KuCo^5@I$51PQYXv9AP@_BMO5^9#V&Fcd%G&u|M&Mi?>Td3vzr9}e(rua`M&ME{e9l&Eob=N z{yX0k@z=jo6deIyen1qR`rIh`#RR!V(GO-t(XsG{@F2M7@liAyj)jNADez#p1fC8r zf-B&=;B@#qxDOn6LKGbWXTcbr4VS`7aQ_5668l%-D)?)tEG#_H-Pgkdv0o3z!du}O z_z*k@J_!$l&p?ul4miovI}?t_ei57ruYooAiNHxGM^P2~&9DoOdO;Lzf)~K^;5Xsv zaK>yeXC0EY=z2H_emd}JsQeyqN)+t^XG5woIz4a|+!cEt90hA|FL){34PF!cUmNT< z1^e5B{Whrg?uIl^^ijAc{6uj79NZoIV^H<|tzdsT@b^&R{|@(tqvu4?9`Gt@^K4Py0=25dnZ)*d!gd}EL6S!396lrJvEBw>C>i=g7KLdAPIRQp~9_5ORH!u=Oief=0J-CscE`;SoZ{vGPQeNT&`L*Y!Q@Mi~h z!JV<650#&bpz^T+D*Vf!%JDX+^zMcVe;-tReHyA>{u3(RuR?|U7F7O!0u}y`Q1$p% zsPVGrT<=eZK!v*m-T<$Jif_NudEg;X_DN9rnilMHpz=E(s=Vhy<#QcW`ZcKVmqWe( zN~mx*K!tlVRDSM&%J;oc?f4*6J$?ZyUynoi{|G8SKZA<@Z-Jxdx%;8;dAJ`7Rqu-e z&xLw_Jybp#Q27{y8V^@O#rH<2`g}K3zTXd(-Y0|mqrv@KQ1AT@WQaw7fm7iL^P}i! zSb|FL7; zeBk`xz5?!y`$bUwB7rLZOQ6d08mRPdhKm38zz+o87yLg1mEW%h`*)zyeLA>51J%wu zFY^2z4ONbFq3Z8KsD9NC)t|0_O7B{za@-hrGgSC@LDlC6g8OITF4!N1djD~#_rC+J z-2?vucgB71#oq1*K$UM6RC}EcV|WHsI(<;_ZG_6-l~DC`Bit3<0aecTL)F^@!TuGf z^nU;q&(DJWnP7kJ86MC6Q01ElmCkgi{JsFHK9@nY+qqEj^uQxw3o8CMK;{4KQ02M{ zD*QcA@!cQzIk*e<$KaXp8*o>66c+Wr@lf_t0~bP-_iU*6FMx`-3{}pJQ2pcjV802f z9`1mL!H>gH@T-AOK>0rjRe!&Sif{KNUamu+;++8He==11%b~)pgS*3isCw8472h>* zH~1zv2Hpyffe%9UkDo%-%ip2m+376L*S=8i9|q5dli=>~6>v0s9aQ;lfeLp!Tn;}5 zB`mWK{y3| zA1WVvQP~QAFjTw~gMDV;La1`Cfidic%HPZ2vG6TW<=O%j|M#Kd`3F?EQRjHQ9SN1+ z@lf@89NY`egeu?ZQ1!bE>iyMF`CA7shJA1ksComO~xM?uN+z2H7@0^Ap#2=)FM zQ0c9Jigztkx&^3m*P!~tRZ!t>f*MzEgNpZKQ1$v4R6f5R_(M1o`>&wNIp&3){}Z9o zJq_*+&w$F;8aN*IK$Y{=fp3Hg|2DWEd@oc!KMs|jhoIW=5%_%gZK(Q=R(iZgK=t>@ zQ1x;W)O)8w#k&wH|I32=N~rYDgUVka_zyspuLV^(8O$|1(s3?Yzd{+Xu>h98`SMp!&)2Q2Bll zR6fg4@mvC*3$K9v@M@_1|0eJmsPH?j^>Hv7>b=9E`qjk1nNaD>fePOZ)s7cKrF$t< zyw^g#cLO{I-U5$<4@1e#UqQXU-?<*{Ft{)FaZvSeJXF6~3?wq(`*(N{Jo-H62~hE$4V7LO)O!V} z^wvYw(@UV@zYg+WbR+*L{Li84He>YTneh@1C&jpz?n&R6RTl5%tm6;0bWtI^PdD58@Qv z4rjt$F7keUGTemyT&VH#IGhgu36;+Dg2%fUY8PyY-UgM8p!&&g;0$=q zdT;-$;PbHG2q(b1q3YprsP`vUynoDtE3x;&BjJ5;Ec|bHF#Ib#4({LY`8o|MAN}z8 z@Or3ve1Gu&37m%g;3{)5TnsOTn_v_EKCrKb&V>ED@H%+H0DT%h0GGl;F7bXarEov^W_S|Z3{QkVgyZ3%Esy^+sB)eMRbK_D z_bv|h%itvJuYil;J@6p-N2q$(bA#vOV5odefQtVFsQ1o?s+U(lmGezd^>`OlzCQ|M z_$jzQ{4P8S{syWX`)qXgW1#Xm8!G+z!G3PwMNsMV1^+>)dV5{4-vpJv_d$(|`=G)f zMkjm=JQgZHTcGm!MX37t9#p=50{4P{ff@&+20cH=!9%dmf_m?4sQOz672hRL`Mwk? zy({5?@J6V1z8$I^KNRc_L#6j+sQUdOoB)3g4}<$}a!!UCmy4nNOYl(mDyZ>y8&tYq zfU57WLgnW>Q2BfksviFYm9M>C;`urX%04S_VQ^m!_1?vB4!iq z{z*{vatb^cc0twu#ZcuN4E9$Cz7;C|yMp}zsQ4a*>QCQ)x-LgnvlsP;b}s{VVR`bi6_USA94{}H$|{4~`2pMk26uRz87 z1XTWh1C`(1u5$h2c~J444OI^%cr5IPYR|U>_q(C$<)cvL`XW?1KY?n`-$T{U9#?z( zM?(2ehl+m=RQ^{(g)as7%b@aq6I6Y?6OMtmL&f(9JQ6+umG3{p{5Q4ta&A6GP=|B2+(^3ssNjL)FKn!Tkn!H1@lp>g`KV=|2TE-#r7B z-mcg9dt;!=`2x5QE`l@QE1}}~6jVR>4pja957hh5K$Y*nYgx;|nb6t+D!z9@rF%Ej zICv1g5Ply%AI`YW>wgVY|LTPbe>qgVH^NilJ#c6EOQ`z#9aQ;uzTWF6hPz^)1XT~y z;Y4^QoD464yTDta`p<1p_3&YMB76{Pocsyy4tIN{=W9PW3j0{7{2T{g1eZY7!)?L+ zbRk_0|o?!^@%M$$Oy6{Sl~mAA!5UZ$q`;lTi8iTd?o) zYJdMIsP`7a$?#lwGJFM8Jv{*B{}s3g{4rF${RS!@d%ni&;~1#=IuWWJ*1_4Z1vQR7 z0H?sOLB*p@3iZQ1q3q+J>TMd_3%(%m45;$0hAK}_U=`}U4UnuvS3~u?eO~9~Tm=>W z#qcJDEaXpQ0YA!_$8=x{tL$NCs5@Wb%W>gD5&;70ZxFYK*iS$mChAV^>GbU zdEW(3fLox(>oZW{4!F_#&EZh(G7)P0&4a3+3!(bqs{`KvRnA-BKJfOyj|KnF!F_Rm z6pn-6gUZKFulI5u3HQW46RQ2^2K$-8z8b1r7ebAX5>&mEp~}&KJHeZv+T|^9KX^M- ze(r^8$48*@@qMWL{sx`|{{|J`@o(_=PJ^n46;R>Ng$KYgRJhBb@_8*(yWId)PoIL* z;Wwbt-}Q}Nu0x^X84t(86X6Va9@IE~6;%1(1J8mVfEq`Cg{r3sH+i^uf#<p2-W%*s!S`bS71X@{#y5F7Uxs?`+feoJ6jVR?EmS;vz1j1BFx(&eL@4)D zg8RbYz6Pq_l;OefWzhNoRK45|mH)57(eRh>Aoypf^!I)XV-Fq*RX?wVdjB18Z}>ha zIddO85IzCbF29D#&!3>uiEj3Go(vDbIwx=iRJamU{q{rE&n9>RyaTE~e-|o0d)(sb z9t01={(Pu@e;QQz&WB2`4wb)Kq3Y*9pz`-1R6O5+D(Cm1#>xLe)$iY+>fzA0y8Ae& z@*E3Q{+UqkFM!kFGN|%g4i*26!Ti<86D(~;$1@NCx{qBOd`F!+J zsCaLKhr@fJ;{Q5S{+@=ar$0c+t1)k9u7o{sCA=G||NRp#gR^e+`RgjEbUqC=E`J2i zhdaN+$Hzs1gHYr7^-$$~3sgP48)|&t1(lC`pz8NNsB!!#RKC9(_*ed>(uyR6D*GD&CJkwbvt1={^SK|0AgPehW3O{|S}f{odv2 z9R^ij|GzTXhs?}19^A*l4f4%Kgd3KjkzQ0X7=Zck?{oQr)b zR613tbgqC$!|R~lyAvwj`-A^ipz{9&TmpXzyWq_C(6`_7f(Xv{|`{@w$o;}9|?EGejJ<$X9jx$6@LY;g&U#D`&i((yF5P|;d60+ zKUBZ@5G=q40^|32|GyfJ!u|7bclZ@J6+RK%cfZ@)Z-1!wC%_Bfb%9U8)3MM04-fY; zsPeoS9s}PCH69*?d&0+|()&TMKMi-o{>Q+7z&)_<`hH*E?+*{fehJijuY{A}8{oO{ zeyDsOe2@3X7(NHP(%OF~^b;(f=2?mTi*PD@E4+heHs;^)=#S=!77$*4-{Sc>{-^OY zc+$THhF|kYzPQXJvSI z3+%yv0sIkO`@tLFXjlsGeGIeyx`X{9sDAz+&kX!N8T`+|{cpiM9rG!{OfdWVL!jD} zt{*k=r%LUwO!%H){x955$F9HWm=T}R7kMV*wn~otEe&x$fq5*C`u$P3UBg4O+IsC; z%so5@@ZK!=7asi`hW!JQ?QT5{2TZ`@EM-pg)m>n{7;?_^L&Hnis1ejdiyp0xiM{7=C=R(AY;jN1pH{tn@pVkTq&{#W5QiRU}vz2KGMAxxhQ zezP$DjpqoS$8qcDsqttGb;Co5?_|uQF!y5K8}l)kr((Vfu7Piazry{OJo7Q1!J{#G zw!-s#8}qKXrGMWK2FWM=9ZwkjjfV4h%7k6Q^CO=5xF3Yu3e4j$UjXOuq<^~v^Bf!& z@w^zj7~=UeoWL_J*nb%KJi`0~^T%N?JeK(M_i~<# zv5&&OFVC6~UVc0C9E{s%;6CtTcs>5F=lL||@4-(({jKAfK^Xl#pXUHG`9I4+oo8I| zzgXlsE0@-P`(D% zPFc*Oznghph}$oC-o~T9E}lbqj^lZGaJvfgS|0s9m$(+XG5hy0Ob-(FW}eStejxLq zf8q8i?3#OCgZXOs#^8T0oI-rh!~J`~tqS+Yek6Pk)ZcyZzk~VJQ0GDVEAgDg^N1|` zEyDc+Zj7#hV|e}-w-ezDNoOkN*JIv?=Pj7^_maR3nE$~e-E082vBCX>z}MogzjtH5 z1@3P)|K}p`++hDJ{$CH~MWlH@_S1RZ%ai^+g84$8ALDQz&v?S=k15#hnajKy|Lfoq z{JxI)j1cDcxZQ&N9q=xm*_hM6&*jY52gjp$uNlm%;UR>%HH4du-*U|BgS~+Nb8s8O zb98XKB)oe}ps+8`Nx^?D{1eZA2LFwi7xOG54*l(kc?ISRc*bGw!>x!pF<)dF<`3eo zzmEqFVE#|cFT(FO%vT0?h1nhR5x9Q`^E95dnDzHQo`>;^vF{ziPsZ&S>{nxdJJ08N zeu~@OJTJri1E{|cg_$4Y---Br&TO0;U>^FnJ1@L5I7&DFNeJ^p%)LD41;3BM2k?6> z&kJ~7iT%Lf_Xg~5!h9*bj^|vSg~a=J+`4%V$NVMSCc=r>4}=%;9FDogvkT^%;IV`` zl4n2cKZC#KIiKfc_`LwP_3(dret_GzdHxIYeB7VUvyLbI+c}s|fDaK)e-m>4w*@!3 z|C#42*k8%>U7o{(-xqLyALePiHv{wEF~19@e=&wv@I1xyYMwXqq<=5P&`0zSxvazJ-X<8%$snl1bY|ueXtMmY{czgxCCCwa|7l}q5ftPPJfs4+>QIw zJP%`@4D)}dV)-U+ALc3WPCxcNFki&88T0R<{>}`P`H5gY5bnx5hrt@|zs-gD7UrMf z_62x+aQ_MReK9`@cjCP-WBv@!SF!(wXC~$gq5j^5`APV8p3?|>K0Jdb|92Ud3VuWX z&cp46!SN_~G|!iU{oS(T|7PO9H@JNR^P70~!v0a7ZwB`ikK(tP=RBTEcs|7w^PEnA zJ42x3u#XDn)8Mf@m*aL0dk_NDD)-`Vm0DdDO7t~!7Vl8+}~=p3Ka!RlaB{$tza3}zcFlp zb)|A+pi&szUPQx$8xmo)(4P=XU!hSwrWrSqW?YEtNufk(Z!jrPX;aDK z(2@=$^4jp)&$YKTvcjRXR{W!21*6`1nw&ndPsj#EhVM6+(VGw za-*q^LAz6^+CWmB6m8W2(~?qIL98XxMo8UM>-kqmmc&Zy(zdH71C?@8QZVJkdRIpZ zbvkbr+OyYG2b+`h)9|YLb)h@WnTFH9H@!<*v|QX%ul4`mr00#N9{hh&JcfR=)vzj? zmmgSGt7!|B$~`@aS|JW?YHdXpn|<^N1+~5rBtx$4BqVyWrjtOC-AB8{VGdKHdB~+| zPg!zX9j#a^C6ae>cal_*cqB~6X!a#>(qAZ7;zFsUu5WUeabsQBdumem{!=JgFI3Ex za&^64=M6-s^{#d3Rg{%QX}rCFg}2kn=EP1j%98mB~1(Y5=;GZLP{Wz!Db%?FEq`nii-;siMqi! zxs;KKyzdN2dxZQC4c4_}`Rr((6@Z2)BaXZsf}1sExk`Vi7L#aRv6u`r1Co*%sPIa% zA*m3H*Dh3Z1vHEs^lr1fAyFt;ZVpECN<>g9#q(OtzFNJ350?4#n#{nvI4w*X#d>+b zF~*!) zuJ+XA&|ju}`q!&9IAt<1npY_o8i~qOspv^FjcI+gwy_!}6Z!PhWu?) z=CdwYN(!n!NlMz7*SGsdJ(<$^N^K*>pal{t>XKGMZ&5_J=B0WxuUbXpDkcbhsxD_C zbhTNYvY=L{N0Se%v}JX$R!!n!p{h~nrS-u{&-2=EhiJ5VDR0w5O^%uNFHVX!mTjOF z1_tUiCdg>sz(8d%?kQK$`$*NCNv?s`A}uHKjuQ|sDUs81Puap+m)eH3Oka{t6cnYj z+k0<}=26E5zLTC`D6Y4ERGhS%d6DELS1Vs?VJ0*cEUVkp!zDl?i_01=nqQ_r%`ev( z&+4(5D>Wske;Htb@oLjOQX74^Mc=ZqqJKKdZVs!YRat#vdQ6k^_xOzS4;jg)chX=jw1XSTYPy{T4msv19Li@|vO#L&99APMYW zskh8=SnAc;(Sm}s=$>-5WYD$$nq+A7uR#nmwrvai$b4e7M2yr&XDq6e*X_UDv z(j1uCOxkC*bb3*W{{ApiTJUPmwHCUG@QBs?3~Wg~LNz547MSc^fUHFXIO4pRNZpp0 zs7Y;0C5S`lF3tL>g$|KUAHmy3RWO@AkOsA^BO(wCY04!O^io`GNgfRq@#zel*YB+l zd)&`1xUB_jjxU&;(6S|Ttp%QX1f>(v>4T;oEku&2w=lZR=tIOTNo=!{+^JxjT^aRm z)8ymEAWLMWx>HH9Fwyd@&PrmF`Dpz{03n{hfSOXO7kZkh3+oPqW6@f-kve+4hIhhv z2sYFzdS7lT9l?EW8kfyiG>a`i!qNf1Oj_rraf+Ta>8<1g4If*%t_fgSIuj1DySkIp zA4hCbe^JVZn`-qzOpRipPSuqg{fL)zzLi}I@mS4A7HY+ohM?6CHiXb}R%(kb9UyPf zBGxhXPt4-7o1vGkEXKNPN5@y-pwt9k?<#K5z;%-?;4H9>3Nx{MvuOm=la^fSm8(W{-SwIBL&3}*mP})9h`3C#e^c#xcI4IpmfBMO(Fzwa z_DT{1sev$7Zw=?*>}WBq?FzZpmP4#e1=8a@jKWqBp^FO}%EcOzd2wQjGF?0~A^2P& zZRFgT82VjwE=IwQ7Ly>#aM6|R!lmW@RzGrVQ!+cAF@4#5{K<7sz07n?Eahss(H9Vp z9bt(zHVvQ#kOJbbSz>yh0=9kXC^!SHZlsvpRXr5NcCG>t4?+8KXBS)yyZ$twyJ)5l zA<%*{)0A4ZG8n9uml_MwdYp>q#kG1b{nuq>n78H zGgwmvrAA#e9;l;l7HPyYYBd&E1r{&s6Rc+zHY7^Gg+%ALm>Zp0*2=7&Ovc14NUt_6 z?#x<$66v3KRk=T5os&dMy5=vZO=btfEI06PkHuapmozm88K|rcvt*lWL8Vrdd#km2 z;@Y!Kf>Wa<<`hs0#cWsql73UamoVSfn~@_nRm-NJ)IqvL>f7b2L-6XBvgTS~>Y_m& z%=Am!T0_nS7y53Uc`9eudXu$8Dm}@vWrm)$q-x4LwNx!uT2!QO1dx+pZw%Dv>2=nB ziEOZh5+6r#slCP`TWwdD(wT!~W#+Ab8zeH3knxg*W|f|h z^=t1>q|%Vs^l5S|GqtZ#Z7Ma%I9DNT`jDTCF-fs}NXe$T(OI>=YK(B69G_KSxzW{+ zPKYCFiT-KN#b#Sx+i1=VBa~S>IeWinwfYCtg|unVU28U3XW4#5V$CO?1{0_jBLrZh z*u+-0gGTB48}Y`zaPLoo9mDY+haE&`_@P=As)Wj3vi_Ws{gW4&k-5++8o!2dQ`VH*G*K zEw4{-UY{wQOBtTj0+KShR9m!j*z>DZd)ZyfHr9fRE7`6SQO&%#o_{F%Id!DB8%;f9 z8X_n1LA$jH%WQgug{agitth;&L`$^~X_JF5iCcAc8O#w8(5f`UO1UOM!@J8wdjHA4*i9SCECk6ZCQbrt4vJ2rY4|D zR9iSwVR@Z2W{cl4t@V!5^89JyZ!ejq@?KSoPhZ(#;dns{rLcOIcX07_Z+rV&`M6Z& zYDCKzewx@ZGz)a`LbS}cl_*zOQ{bl#mg^Bx=G{@d8F?RHgb}~qsM(H7cwH)nw)K}W zQ`@>da*?8GqrJFTo?P0DmJ_A*cWPR@42{f%=0>d=OqyflBn?HUDXnU0h}9P4NDQXO zItL|Vhk7%G6|L85kXj(gmwaefC`bgYmn4y^8<>PFozVO7L+7OW!tk|Rh9$aZYO0bA zvrh00eNI^(E|17k7L=st@pyXb&bj?Mo03vpD%KXC)qo|Ypbf2J!urAH747qo5%;sO z!zA5|7l(RmA1)Ld8*I_R+jcx8T4V6-)ic$~waUsxD4E@QRV zXQs7Dvfd08Ni?<-2G}9xh{;uei(UNYwh6|>D_AA7gg}YY%GHNRXYpB?7c1rBdPyL) zrEPn5bNsMTxnML%yU?VrQK1!{4opG^WX6yfPq&xOsSPy7MCY*kV*k*p8eAH#^w5n+ zFeU@}R$S`Ye3iGG05oBRD2rA|BbW_*Ll{%o)zKhsV5@5>!N`jjCRLU&(Tcvo28*jo zi~`TOnmT&4qEaXtMyQ5pMQxx}VIzTPI=5a|Xp=(!q`H?|C~%KdTlu(dm`xilHnTY* zFGWp}Ut!uhr*@`xZDOx(b{yfT10p9|Di}=Di&xZW6>6cwN+kq48|IoptRMR1N4!BV z389cM)PyZ%pr1&khIq9dE2(~i7ba=SMTaTO*^F&I9Zo*iq`I{oZngv2X3q$Iu7syy z>FF=jA&&n$J6hS*<<+}VOBw#rB)Kw~LVH$4w&JzVERlwlMU4JYHP|{Xwe+Gf6PJq? z?=8XNDqSP^Nz}Vmurha+hG*_zt*E^uPBDL&Ft*4%bD?! zDqE@D_LFmtY^&mB>aHUmr_(|?a2V-_u@X388V+Gj&-beE{#M;^#HG1MLikilh8R>9 zB}{in4dg#9Sb7+ddCjp284YAeh&j{TgGg*uCFRldPph=lmBAx_DXcC~8B(cy>JUu? zv-S?27Kw?c)I*}m%+2<;px$A~rn`i0HO-)7cz1-TF|8^dQJHJj2V;6zzpBLsr$bsQ zbDZYPZ0jNBh!<5un;7eSR-5E!_LHPW`FKnNhuEG~G>vB$&xnbtVO5ky)WwR?{)s0P z`Ug%?)icUkxcTO(!{kcAwTuoIHCYJi(|&4c4h|>|Q{2&_Ffvq2zNr+BSKKWOU;LXm z3>2ugB<@F(EVD$@p}aPq?Ql)I2?dVPx)PSkoZ5%E(XF%P%$7yGs9vurONvc1uSUOR zzmMaTeq9=HEr(8U3`;z=m)Q6^ozhPqyie%{&&8sV?aoY0bWRt<~G714d1e z3a(r=EiD-&r>I&}&`OY$se`ZqCl4Ib)wfwHx*lLAEj`@it1myl)2tbeXc(?GPAD+z zY6Lf=#@eZ_FSDG|BrJs>>ZxVIMSFKJzPj%8llM=~g zOuR~Qc`MO7{0O1SW(03h-F9mt3%gdjMXO@F1Jo>nQU{`X%YroH`GbnK8Ea`_CW=$Y z_9NwmgI2yixkp{Tly1a@K3Zr@)TMR$Hg<#DU$aUG>JyARhemcEhPJtqUd~;o4>*JN zsdmZsZ!I|P)Sn-Y5wO+GYFDtemwebRZlLs}hIo-q05aV&h%V`mAw*A0D~zC3W)Zk+ zI*$|94(C$FK8FQYmBalh$q*muO90n9Y^^rlHE4YVu9mpDsvU1(2flmr)fC#BesnFB38oL zZO!*M#wfH_Up#bU7Y621FZcE}aob3rXDImTQL0qA@KY>Qh$c++)OJ)#MzX~e2wzkU ziLS>s8Wml^2JkRZp_waJ4Q<7tp9h`Zv}z@)!i9uYWJYDWF@q6>)r3?|{cO+sS}G2A znZt)RgDZD@;xQAWJ8F~1ohsTPz`eZ~O8N&l6|+d{rZ6C<5p%g)8XbL&lgMzxf~y54 zl6^u9g|SR30gDz#HX|FVDyrFzPVHa%MJ<+Q7pvB6^oJ4nRE_Z#I@(e?>! zv~rzrH7gI259jOFsR-i^7%F83HHpe3r9N`qINJ#fcJ>N`(hTi(maTAcr5P;_GuC~l zNymqH)Z^MM9(Q)5s`2Zg{ChB8}V;cDz822rC?E0&p# zN?HF&)qtrMVY-xdIkd5lTU6ONr}HbBjzYBGVl!xpR1g&j$~thstJ z)fS;Dld^!THr|SUs%~+pU`pN;s4N9rw`?yB$>J>fQcc3KPbU+KC5<*nN-mR-uGOTf zz>8;r5zgs7oH&!E?jL$5l}a1e+qcC!YAVy|r^XAkqd_A1?F_xDQoEQN2rC3@!b-L! zX$9pBn4KIHB2`wyr+A;C*#jXD?Ww_vA*nHD>#%M0Erid?oxN}jolAORv4D2TJ+c9d zCUqsVncdYfEB-LsJW5<|Z9CM6wNj*s&?vRXlPmc#w4d6py)XW+-RUK7b-HxN6yC>nKACLT&rvj!8G44@1yNhmX@=iAw$!(kWETIw7`F>)OUAR4mea1ihB6NwTwW7C z%{HR2yP=peeL=IXc9C8Fq*_FWtNd&t4BSe@480~C@<$pYoZ6af*wNT_@LKPVM(35G zRrkLmbLeBN3A{XmQ7Ab5gzFAHg$=d3G>Prj*AA9&$0OXaGVXYMxl;Oi8Lh~tOD|n& zu`9hnwaVN&zL6-WXQ#Gh9Xg~gd7!L#TpFT<`~V%fcWtu;pIxLo*aXim(j9AtXBTI# zDd@sOzaX(ikUOH_b=cJ7IV7xcBFCPzePCk&6wJ5Oqww`f#4#Yk#j2zfX+I|X%Pv@i zqOVT?BnWdtR7%{4JKgC0xu9NvEO4$oUR@;SD=&Z!I4GqnbSWgUYwJF5n_^-L0JBp5 zYa~Pg*W9&(@3RasX`bI^cx`dyUI^!AGi4=PY*NCfETjr&$1|tToH1qk@l&Rs5YL!7`}pIJn?7Uu z^wBzup0cW5s5aP3*5%K|g>Eju#PbVmo|YR3lUvZy==*{MeY30m^yv*0>3&qWfj|Xvu#^@ z8k?8pDjR`(QAE9+x_Z^(DJQqXDW_aAnzE?Mt`6$q?D%A^+mBvR;i_F_iY~LTJgE+t zwQ=gqQ(`xsI6Fn?zNy%6s#dpbo|sG;!CBw$*i>)dnOShV|15VjsQ$wC zJ|DBHN`7?ZJ=zRq7bE?WjQ86gkhQa+UCej`^@*m(=E9~Cf;C1Cm-|d?N1`1z_;Att z&VO9}(UmtB;zFy~s>Y=)n|sP!^)EJCsCxr>&1!pJmvQrltD{>sQ!yPMm~GkI)a4b5 zo$X%-C)N0n&&(?24W!#Z1=~<-#DpvKZn+bEe1wpy(_w;!tt9Q8bMHLZ)F0B($2!VO zjiic8Du2G$O?ZI#O7+r}~vPn#KS+y6wIaeBsC) zAv@7S66wuhd&@8%pz(c2v&>)^?&Gx7PoJl8l!m0}O*X}q0tMoP*ZLtAcA1-Wk1g+v zFQ#Xzqh(*Mad5n4Ggtq}jRbG@F$p~cfy9LmcJetB-_h^awrma;Elm;2O*TVy2X5MI z**u`D-U_L#ZKx@axmP%WVBX2*r=Zf=g(~%%Z7GepSpE$Omr*T4oBiJ<8X8?4<^L>E zQvvKdEcVs0d^xe>O}dGVBK<;GQycxnL@TRORg90L{!#dAA>S9^b`j9*?$Msm(OBR8?2Uo=>M& z5doAtkY~?;FXa-xPBVjP9o!;fmZzp{S}7K{+}W@s7MOe`q=sMs-#cOLv41z1M&U-) zRWuJ7XK_2p8JmB&wAkvF3ftnt8qS6+@(>o$@4YsC*t6#g^hAdxKV)t5oj|P6ZeN znoUCeWp?jr99uAZGdME$bZ@ckl7=KJojpf`QPUD#xnWCI$oWK?;&$I-?6hB-*Fw!N z6Qkv}MCa!!C(Xd2I+7b-tP@?BrGW*>e!>6NUWkpX0*pPvt4geq$j?QSjO z<>qjVh{9S%i($i9JCTx~^?WDV;gEbBSZi_Bsy%ty$AR4;-!!wd1}~k?xTOx-cY^Ae z5!bm8FvWU}yIO4VtDLm+v@krP^n*dXyk|KN`q(kbr6~qq*YcxtJ zwa#bO)vegcF;f`V59uuF@c(ywr(l} z*R5*`HUp#CuTgQ^wxhi)_Xu&WX0^yrR4V?~MAoVwakq)Uf zT%IMQeqV%ca2GvnF)KPE5zsv77jzx|qsB@sV77L!Zb4(DGFd$-HD`XUD#MRnwo=-c z?t9QauCEc?^djXuHCYaIgE{;>fHenSo|;TfgSqxV&Lr<`?%%$TRu`R>VmVxsv^a3~ zZlMdUBd8cj#p+@tYe*Rm-cL%2mIv#E6f5}k6Vld0zD zLXgVtWvjZJIM2EIw3>6smd$)jsc2QjMOQyE2UVeFUi&#hE+O zUKaJ>+#02=|F+k$Hhn9VXB$4WD%D8#P5tEBONVe*jkgC7m*PEFd~#vi7o7X6+~`Yu z!^K^4DncFDwui!0--R!|X{fWyNj0E!FaJD~Ft#@KS!vi1>V0VO01Z? z!GzR-kIR$d4)rzvC{%T}l9f5CYYmakY8sdlF$7`L}HgS0PlkE^D3&L>DUNgt7G?5X!LtttAmdAFm zR2Jr4sQ;dFF8NgT&W8!Zy6x1_b=uAha=S{Ai!O8=4VzTaZ-?)QX3O>I_o{^LtfHvH zFDFDgK3ENPoBwFl>ei%+>G}LZM@}+Z`PW} z-?q_wwpJ*9Ln+HzufC+p?WEN7 z9fJvr^kZAk!eIYEAv$BrW;VgK7Sbf{^A?Seo4V)GDE0hOK&keieX;8D237JlhArL& z^uYH0D07;J=E?%iP8Haowo$UJHsYnZtOA%1$qH4W?bFG8Vb<7sVO1=)5`JQWZ-R88 zcxX=xpYd8I+&n8Yo1v?W+JJV=xVjmUy@^JW&ZgxHrSLgz$hHr4y!Cd~WRE5&>3)ff z?X7fkhmU9Nd*3=^hmSRE=(6uCH-?=);njg;`h_i_{8L+R6w`dvw5)K7glqe1ESPH9 z@H@NK=#srY?p;FcU|crx(DU^Hxe^-^jn&pdmP4$cNAO+RnXs*9SWT+&a=MLYhoRUenJ`G(o003~rYB4lx_bm%fvm z^oM1t4ALqwN_qTC#a<=A}h$z~#C~w5ZY4&W3$b=sJ3b zN|{dPzH>{g4}UV<0jB@5?TFLdb|k8&_AW9OR8=O0x(+RDFP#Zf_X zGG8}qVZh+Sh4W8+6QWyJ%w%rrtuk`5rJ*EZQVl=cL<4e+D=B5W9jw;$CRgHZhj#;e zAG}y9*k(GbBK!S<}$ zhoSyKbWp4pa?0%z-u9_%mTJ58n-1kaQz9vDt+$AEAQxQ9+}*4oKAr$xebV+_iZqha6F#g~EZh3FT9X-Hf!nw8+_YGVuuipU##T;)V{$P$WJ4#oTNe3Z zknMEz-lbaEDGI^T&F`mbQ-ISoTVUigm{Ky(Vh>J}*6Ni=9(KjEfOHPTsy>V@XhVeV zNIs=qZS^^JI-N?eqV9CrZb6lPmaw>`Y?|ZHo;OXgNy3gSyfcv>ZEA-aZOdW4Yd}k2 zrJ#Ol(J)z78Cxo6t(VK1j6ZfGEW>gz!!nlFs-N6v+^n{$#qt23?&P*Yb45Y@U|wL{ zg#Go@Zkz0iE8A3JGutx6IH$Av)a5$zRL%aH`c3k>W|8$0M1xH&`edk;paYoxL8auj zWnJ%)2RGYu!K_foVRo-@_n$dY-qTD{8(K2ir6&v$uIW10)W{$uH4~fA+p?Lx+W}kn zG8WSwHT;0_J&R$-5?Qw3}?f4dnF5k%o{eV9CjsiIl$K7E@?Z@CvA=h2brN-Lq@{JQ@WX~*2;H& z-8l)7hxbO#;1YIEm|XRP3)zOwg03~TF7s;(Xb<5EOSQ~I%2!G>L8EO7eJsCs!uRlW z|5~h%}?QQa@zvF%0Mx6+}9Vl*|98N8?y8RQ~oB_`7&+Xm+7$_0t4P3m?kK@p~P^4EDL z!*Yww3~xYFf}?X<1B#80>TM~Th>~ii0NU5}_DaW6rYEV|DmTCPZ(m_(cbyNztQu_= z&3$`sj;r|0lIgvmO>We4bIY%+%wef-j#K1t(xFPtOQ|3-!-z)+eI5y+=j9?aLOC3ibnA8 z2HR>4s`)+K-e74JHa3;RMVTH4Zl*1j{>X|p6khgK8OKIx*=y07U~CehI*brnGB z3_r(essXz~)W82E?kavB02vduDLK%pYw2!!2Gd&_EL?W7pA_)XwKDxdfou`QhN?E3 zR7{r-DXDp1^<)kdv+d@$oLHcA`JB(jb$jw3^3wt;Hm|l10n)J2^iLngBeZF57jVR* zgf88WM?FesC|2t2d~{l@_Vd0WU#<`ovmZg;D#&(!e<18j`F28XrRnbB9!M5QtAbQh zGxd^PjMSc~mngX5z^S4&T*v&{?uRtFc5!H#5I$Q9q#ZKrvhAR$7y3M3SZ{Ukm7Nk2 zYhLlvILNkY7zA5y(hMUed50Ow7P2y-4=NgMwP)ifr_ZPyh#8imev^X@xFB&dgUUM6 z4*RqEafCGHe<{Moq|kT#N_qB+3p*0&w%@c)nnuHKDYn=7dGnCpQqajRH#2xLgAVyz znNGdr;<^utOr4oSi(Oy<)m58XNR`Yvri*R}CS z+cWvHRfTe9l-QOgv7ub=MQxcHrOKD-7%0$W0}a7yglJMDzrUanQQYzo=62nj(I$ue zZnUO&Hi;#FIcC*nHd(IvGKoT3b=XF$rgW-;?-^^|x^<7BwY6t@!FIBaHMy0G29>Sn z(pif|y-(#tsFkm7my`E31^(v_j0zne+HuQ@_NhZSUr=Z*XtkNja+!}3?PiflZ5E7a z0*L-}YfkG%CRDAhX)}EnVa0Pp7K$W;&K&eP$^f%i@<9f|50pNd%DuAILu6{2FcjU6!Qi}t7MT6rT-Qk&SF@IwZdUqnhEqQo*(5Wx9W-2II~W zjYw7LBt@a^n;u*4Ak0|en)-i9 z=mgIDe13z2OH*DeF7Himw9JGl#^kL_S*w@ObrD)&6Jp!DF|nV@WhYr|tdY^mB`ta+ zf_zAnYii1l2cSQ>z_M#x$gu3zL?*rwqq;S$`?_gu+X0FeXC6o~*w-b)Un|)93b*Q4 zgM}+!wh3yJ4eRFgUW#@wZC4I)X*!oqU$s-pslB((@Na9e!PrW(Yb$fhYksqYS+m6E zG;*M=?rwFbTkSOb-X4vPMxGxyR=svH+jb(;)Z4WpnQe)NjYneWVMipWu5_QshJ^oX zLzHXO6{gx~4INO^vfUt5Z}97A8WRJ4yDeIdQS$+X;rEH`f@HQ?k?yZE{Oy?9R?}fH zWl#OzluYt5pp%tiP6V%xpFU^OU*Cs<#Rmp4nCqeSMWcFD^!i93%BGfpSKA!FjwkP9k z8^NXqIvv{%s3(M_qx%9C)u%&hwBxjigel9EVCs#bU;|qJFPB~_&~7+rehKG0Cb?N( zYHNdfw!x59suNnD??(m5Jco+^X+m+H*Wn(&pI;JX`7e z?3G`sTSuHz){kkiBc1&}w#uiORw3z=#Uf=+zth1yY8wHzouHME_L?m}R(Yz{bb1?d z9;5yjI!ri{Qw@8jTyTX>;uWO@5E&q{Y&n+OfVKf+RTMhBeMqpK@IkrArdUo(I8^lG zWQ#Db!*uQ=+w#L|a!AUiL)q%Iy`7_SZDTjzo7VFEFTB0&Mkvzq3?XW5>ni@g8hYjg6m=X;c2pzwhV)drM;5Sjy8(nH{z2-T^(ukMZ9=;h(o6$_s4&rKyPsDyC zfsh?$^ic=t{Y_8Rdnli=`7JyD85O@-L{t4Mhq;}3A2wsTT&U}tIQ=*0AZ-h)Fqgx2 zt3}nuk|Atdra&TH6%wm;%L?^J)rAVNYP1O$(dMFZ zTeY}jrImP+R+_5Ie8V4v?eCFK_i<)n0lI#OAcuWR1V6I@5BY? zt$(>7`^lH~S!^~YJXU=wZkHk0t8)oszk88hC(_sZo&O)wXVY;li^HUl`#5Nr1a_=V zN6h}VBj2&+95HhCy|&RE+f5lsU_6^&i1F|pKM`Xa68=jv`accWkvV%0{Lg?SS#=f` z*}=iqpf?ctIU<1X%`~A(#ZWh!l*L%Hx-_QG=4~Or0rabe^%roVjJtyy0D7M(c zv9`F!Qw`2+;_=*A(&O1PN}(RlxXB*R)zAk|g$H0oSbmDfQwP?Cm0>?v9gc%%!i(S; z@Ojt`CSBn1bc8)%D!dpDhwI>2Sn@)T=W&<~zkm&=dORn>$`^S&r@@-A1?&WSzVtmRzg1h5|8I0SRE>U8&tb|1&6}YGp#-!RQRP(`EG-%u z--V|`&n(-%HQ*_Tt(|-pEQ{=itzZ;};T^CPtTx-m*N1hH&v5d2uqyI+sCJzRPk_r| zId~^LA8vq{?5Q`$w zr*>#|qvd^Y269`JWy1|H4c5lUiO>(H!<`V9@Qhw=`5v5(?7NvX@I$Ef>a)V~HK=wx zk4DXdpTL1|2#tOiu7Ik?ij^KuXWH|;+aU7wG(sErHtY^7&`9IpaF_`ngri_J8h0ct zgy+FmVJb|e6Efgv=!07zQ-G)T8pa4b8y3I}*ciSAd{T0iLky~wx0I!PYSGjIg* z9vWA6^|;&Gbs?OBycx=l4(sgrTnsgSx4~&}FPseXaFPjdH#`fDyvO5d0PleH;OnqB zJml!P*Un2NUA49? z|LyQNxDINZ-3Kecw_!!N7nXua_gQ_Vq4J#qPk^=HNw6_23p={_Ght=qp|A!#A4=b4 zQ2CZQu7c8k4^%xjLD~HREC+Wueh!uI5L7wE?)P}=!-`P$bbu$q9#H)=2rB)ZF8n^I zcGwJ+{x#Sfz5~^cWgf8oSP81!Mo{h45vrehK-tv~%H9!BcBDh4n*gPEGHeKEK(*^y zC_C0WZh&g9r=aw`37f(Xq3o%^;B5hWz{;=?sz0uTt>JRWQ1fhqUO1V-e+Ik`nsEW8 zH}zpVFL!`y*FjMA90O&yAIiQc91kbKn($+&@=H8o^R)m@h`)Y#BYQ0<98i* zLof1vD0|93Yul>^RJsOG;VoQvS6C9cA5{AccJY}|_Jy51%f&B(rxLyrrozooez6ZK zeTnDnI(rIK|6C6hejA(zABHNg@AI~PXT#%>eNg3}4~M`Dq5Az5sPwzw3Gfpaz7MK> zeuhz4`UShsyBMB^ycE`i_rn@+J5>7~gwp#9l>e4`(YD9w@I>UsP=4AL%AVe^2^Rgqe->1IM!~W$3rb%BRKHDe zyb@MIUJjN1ekeU#pvKwDQ0@MSlapSt`l>+LThGZ&U}@xzPW8+D zX^#D%>N~{AqoLX{3u=7`!bb24sCoP$I09DPZu>JIRzO||E5ViU6!-{~U2nMfcVK1Y zub}KNw!^kVWvKergiB#_sPbQMd>yJD??AQZ7f|IKgdJe%w`}@8Q0+Ges-DB4>NOUs z9RrS2q5NP0RKH#WH9y_#e~iZft{fj z4u`V85K8ZCsQS-?YLDem{rCWsJx@aEc^RtQZEytq0@i`u-m&%1hHAG9q4Znnw07~CzsQ>wc{kHdQF8Y zXEs#%*FxoA168lb;XL>fRQ*Tqvh@x^)$2m2a&Cqye?3&b&2S=o0k(qO-nID(q569k zls%V2*}u&3PH5T{wjlgTsB#ZNweRuo(I@aED1Vv*mH!5)_E`n1!+YQ*@D&$6^nH8( zG6pLBY^ZV;LbbNtg_`LzVkBl%9Q1`G10HPtOOICqU(|0A*KI zDEn)<@CI-wa#J`3&V_gVNfd>yL1>vr3Gx547bcSE)N{ZQpT3+0zPT=-W|b|igf z)0Knr-`Y_1XaiNRzEJfX2bDhP;-@-!9+ci?Q1!Xb@hPZ$+o0_J*zqeUJwLz_u;k~~ zzOqn$aXKssTf*9~1FR3nLe*yuRQ;}l$HV1N{&NRZd3QN(gevEGsB~{ZwZn%{{r(L+ z0k-+Vwr3htJNAd_-*cea!4H+M5Y~iqpz_@TmF`|R5N?Jw;7MQFes2m@{+UpEM?tku z7CZ$OLbclhsCwQGRlgUY%6%8A{r5xFujC%9r!PdGhyYu z_P)#qOCfK7YNw~6?0dt>A3^E)8mfJNh4P1DU)lAhDpdarg{pr5%FYO^1!uu^a231@ zj@)PU9KYY%T^5!l{8XrZZva)lW>EI_hU)h$sPcpGL>P7Qbhr_DHk6&+zqa-ag0jO8 z%fUj}0$vK+zztC8zlEvL^NlU1DJ+lJ2A&H0LbYoqtOlpU(eOqn|M>~Z4~l(j%c%rg zBiDtBKi7q4Le;APO8*ruei@Yi+z!=m&q4LaR#*|f1=X&5VFh>)s=Z5nXP?W~fRg7z z*|!X;UK<>rg=LW6bn-_~`u0P$=OL*2c)qvt7^wcpgeorrWzTFVdlo?HTM1R(y-<2y zfwF%aOo8t}*-`9(tzUVldbfmXubxo;Jq)Ux$?#-&1yuRBK=uDUunBw>syz=wtwYBj zwB^@x><;B`<6sqd2~@vd52b$%l)lHD{4P|xe+^|v#UHF)ZJ_$SHK;JBY`d9Oj)@itVtkD=1-g&G&< z{A~5kf$HBYVO6*gsvfJM`g4=xOHl2;3#vX}!Itm<>=2vT1O(?k~l>XlE6gUvd-W;fUOoD2+1yFvw z1U7=3q3qcMRqq2(_WlHAN2$ZM{i{0Gg)Ing0o9*=D7&XXwd)KgU+&~ZPQC$3@2yaF z-3#l&CtUpJj$cFB|09&Xik>9X{?(xDOm%DvRo`w{q4d21rRQxI{{d7x?Q!AXz|)a`gvwVnDaqJX2dcfAK;>@%)eh~T{2~pizJp;0 z=!3HFM#ptf`JaHAKc0on;F~ZNmPk%A?cW+oPj`4S91NSo0MvYOJyibZpwexFs_!RI z_I&T+e{n2zT#{+uDo}pV9IBs3LDeJ2$ssrdd8!M46-w_8Cx7PTeNcXI7|M=H#jIQt zs=dyDva1_Z{Mk_LI|iz}OelXE4>hkXgRS8f*Z>}cs&~!eR&QHa9eDth{_#-lRtQzj zDkwW2gsT5DP=53>)HvD!rT1G{8CEZ0{h%dOJvza9a4^)knG99VLMZ*q9M?k4s~e%p zc^9gjPoc`+2UXw0Q1vZc(#jQ}>RrRh_25;=En#E$IF!D9jt8M>Us!|iO2=D0t)Rwz z8axgTgJ;8$Q2AFw*>f-K2sc9c+mBHBeuc8L!U@*CT2S>&fwH?5oD9>T{9^;uczF)W z{@0<>y$vsbyP?KcMk%W|2sLkB1if%RR6nnG;UB}c$OoYGG(FL_Z%3&5o(W~oIH+=S zq0&!;E#ciz`96Z`m;F%X9fq>Ed}&+H8c=##Le;kmtOn15YL8r~d1wMuIZL4Q-3--^ z>!8Yc2&$c*f_d;cD1U8J#*X(H@ok~>^?@nyJSe}P1?684K-s$yX22(*=9`q0tbH9E`$O3=+A$k?ktaae zvkDEq#H<)Ej6EvGzG`L&_is|8fMcY~TgMnjFC zC{#VKhSGBrl>Mur%6S+n{}w1ef7Qu5pw{2dpymfpMVr1pRDGL5(@#)#^?{nFMna`8 zgeq?tlt10+_#jldPeSE?(Qzk~o;@!97pQ#2D>*-bYLC;P?5ykL#!&jsfU>JI)I8N2 zN?!n~9#f#^w}nvi;A$v)w?MVqdrm$CmA`6btG7LDh};dT-SVL9xB$xjS&oaL>|F_E z$2~551H2IV1*rUePPY9v94fuv$zdq}xfrVd7D3hXPAGlrq4GZhRsOS3{rVb|eY>Fi z=lCji-f0A7-x$~*2H|wL0k(r3t0s9~g%hFVKBw4qVg_u2yauY>-ge>NKreE&Q?31- zpvvzLW#?~Q&+Ed=~ z6sU4*Lit&9SQ~bSYX5Ag`c8wIcdv%hvkDr2hVsh|PJRu_f8T*h_n8a-2Fg!=f@+@= z>f81?2`c<#C_Qzc?CAjIzh^>~GZCsCr@?#R9H@NlQ*3x2_!ROWsPrc{u&e>qFDX#z zTf%E#8ax;7fNHl^4Xxenpwjhn@=!+~)IK`s;v>%zZ<^6#IZ`loVgl4mxY0A)PAUXHE5n>?xS17LCCpK{jmv7ho3-|lhwlR z%XdN9SFvT1=VKUx^4FoQ?ES(t_yqFn@G`ihbrSblJhM2%uK&B?{m7l$Bzb;;-$BjC z-?X*!VV8DE=Do}yoIrT<_DSY_f?Hq@0@4Mw5n z%LiZ+ctR%|-v(-38v&=o$x!JJ!6~p~XS)x15H>^p2&x|{b+PT+5Y|O*57lntpck%( z{ord*^G5ZqcE8sg$}h%1`NMdq_MhnF8Bp`jm2f0n55w@pG~3=6LFIcJsvkdrL*Tbi z?a;fMjei)bzE8qNuu6B^Ki%Qk$U&&_vl*)Vm!azQ4ph5+4P|Hf9(H`54%I((q1J^k z)O;`xHiWC8{A(MOzMW8h_Zduv`(bnVElh`Xd)o1KDOA4e9dCy6+uNbW$Ahpn+zhke z0ayo)?q&DCGvGkv)llty2zG}(dnb7Yz`0QJb|`(P^|AKVfg114pci(BYR^n3hoS6R z1eI?oRDD*s@H?T}bsanp?sRgyzDb^i$bP7NKfqBish{<`^WYfd%b@1H&*3<@A4>n( zXWDgbB=jR+1r`3C3;)@LH}7xTbqQ2C*TEL>7MKCIx$yP_Y(2X}`T20D`EnB6mqfe6 zJCH9w%eHIlLDpYKLCs@9sC95LtPR&f_1~+oGi-IXZT|>76Zvu27nU8IWZvIA2QEO~ z3ZI4JhTuPx+hC~ehhD?1KMjVhh!4R&@K&htwijxDdiroX&f35>$fKe9eKAyfehlSb z-ACAT1+YEx^-%t_4QfC8DOA0Z&awN76j&d5D(nqcy70YF^GUanNuF%%^+C16bEA^< z=-l%GlwEI}Ys=dU2P0QJ&#nVmQ0+Vuo(yk?@|QJ2 zxd3XOUJkE=Z$XXA=olM+F>H!FA8MZ247Gl|0ln}mSRS4<)~2rsweM~QXT!Bn{n~0= zl4mVE2g)Bx_$=4KE09N}CzBQJ&b5Z)*^$^35euH%(?)_*z%lRPgGzZE_KZwMuM9)siZ zExi-0p7-G#!Y>IYnfJXKHg_pv-$#$Q80M0_5KE<-c1xY+}cZ|tTQ#q{OSD<*$ulAU+0n}^B#sD%I}|o0fo=B>%&!WEbN4^-ggcau4a(cnJ$aA0&4pRvK5o(;&y2{RL1K|nC zBcR5w&xKzIH4bJ$>0by-z*VpuyxYl}q2|wLpvJ+=usHkxYF^k4HO>w~cd(?&O`Y0rF>1{ZL_%ZI>oc?b#a2z7A0RaxPT6=0Mq72-V(Kz^?EH zsQ%goWyi-Z{s2^amAKl5pAOGJZU!~)XFK^OSQmL4ls!MgF0jhtB=f%Q2v`rf#x*v7 zFBnFi3e}(cq1yKccsx95iDgwNdulqlCDeHD2vz^5U@y22s=dy**7`|*sCo`}@^~mc z1#l^x17CnOm$H9l9PNc4Be%HTwo8>8Z2#1U+K04->W5xX?Kl{!zCNh^)*L6_169u* zQ2l!tY8@zdqg_|(K+U&Zq5SL(sB{OQ(v@6h*Nf9&Ddg5r{n8a`{p$_YA6ZcCbrDqi zErzQ9jZVH7%Fi}9c`H;o+n~zX4VC^UC_gBFll7aLQ2Ogb#dm?~&tXvY&WBoOr$M#L zwQvx;4Ql>72vyGT6RVK$WgeQvhn^eia5!mu}-1=Zg#x$tdJdOwF6?+2mUA!&tW zX{h)rP<~h!YW$xE)eh63`gsnN9ZMbWgsRsDsQK)5DE~VQd%*B5_PNZ1@GInBATI0K zbF1~Q8MoQ~dk(7oK7lIdN4OcDc)Q(ay$JJ>PhOSe3Bfr~^Uy)4_B`zl+aArK>}?BW zXIChHJ==w6LDfG9<#&^y`e`QAc)l8{-Zw+_&y!H;-h*n-FQL+X=j5b2t-exF{#glX zU(&&Gm}3ZP{+bJw?slm4Yb%uhrLMO9KLD;k&VnlUgf(`*R2e>q+#afa-$2cOhoI_H zWvy+$ns5|yYp8n7hwA6$PF@X-|3cZb70!ZtpvGPJE?eHUj+>zT;X^1rr`&Drtpn9x z-J#ll1XO$HIbP&A54IzGxs%^^{1U2PeumOhew}4q*b%uMYzimB^Wkk!<&%CBZyb)^rzX3Hazl73v2+H2l z_uBTW2^HT8s@~n5JQNm3&VVXE;5ZGcy%$5(_g<*{&$#eyQ2zWKYz?d4XUiK1Rlf|V ze0h!+L-pfgsQc4Z(D*AG*#e-O&QPQ2gxbwen-20*3DfbydYpvt)x%B~eq^;!>A z&g1Y3_@8f z{&`UKT>@2~J7FVuKh*sE0hGQ&Q1!0#h+S{0L-|J+sP-NTHO?bYc3tPV21@^#Y%i(xZ(BUC?Zg{ptjCfi=8LbY>esQUDQ>hE)*+BMsS7eeW~49fo(Lg`xv z!|)>*fWsfP`;N^}^Y0f>>B~H3pC>hf(sK?}yN`pae*mhVr$g0e0n|En2fP_R2-S}x zH(S5Xbd10h!e>Cud#m9X_$pNTW?Ss@;to*t>Izlg{!r~T9IE_WD7!9k;g>_T+s#nz z{2Ekyd<>QDJE(s88OrXekK1-_02?BAgQ|BPR6Q?;>X)ls{9RDv`Yji~7s~GrK>5Xq zPgps{u@jX2gQ5I#3{*X*Le+aGRKDaVZTr=L>gP64``kfJ&WCE(xlr|50@d$#KG1l8`_q3qlZRo)@E02Y77KA&9zmF_F3b>Ua2dK7=w_Rr~#O`+`R z3j4#sP=0U|l->8k^>7oEUxc2s?Jyf^zpxm#f-B%+xE-qh^Pacs*+o$L?}4)SNhrPB zq4d26)&2*d>R0Rq>lbBVGI9!3e>H+C?@U+>o&(iCqa6cKepLXa=OUKK7#xV44%P1Kp~le@a4Xya)$X^yZtZ^*D*kEch3`Pc{|q&rE52dnrcnOh%gMu_ z{3#b|9L$2U_eQ93x50()fYP(y#g~55_Gd$={QaQvXF#>n1yKDw&+!JRdHxQl_I?s7 z{fkiZ>BmrhP;#4HA1cD;$b+HUYbMnASOR7L3Ml_r@8UN&ZiTA%2T) zN2qaF#4xlrkEfvW!l zQ1t{zOeO+KTcqZ%#uY&5IH{dMz0h|G|zq0-P zh2uBS*aNR1zQjKJ{9_T6AMb#gmp_1w;O9{NQF*^@kNQydbcgESp-|}qQ2sCh_J(Vq z>h~Q~`d^)V($}`Wr$Dt=eW>`pQ1kI9=!Jf$ew_`~PdC8&a5I#@e&*tnzp?FF6&5GF zDU`pqhO+xSsD2DWjl0XB`fmYL{T_j8|4*Un@f}n@{R~yVir?D)Pl2+xJ8TX8Py$|KL#lE-or~zePE2w!r4XV9ILg~qbvUfa`{RL3zFM^u?E{Dpu z+QmNs)!r|{V(>Mn{M(@yegIXENUI9vfJ*akW20OrZQ2tl| zJHne`bNDXQdQk2sTaTtt{o4mhZ!T22sZi~3x8q|_^?Dg9-A<@^bT3r;azESt>;{!? z6x2A$hW+3rup!(En|*LwI2*Y)RQ|2d3qOMLpJFE@oAFx*s@)qy%_FU$(nq1}oC}ry23Q|% zgev!A=!NA0~oM4S=fO1yK9^Sy1ErYN-Cb6>2?s6sq0cf$Hz?p!Pi{ma+ZW49fm9q4X3&)pItK zolBw0xeKblAA%Y`TcP^%O{j76Db&1~T-N$WGpPBn15~>1P&w|t^&JjnS3Xob7ebXk9V-2$PF@OCpPOM*xEiXT z-hpbbeNgo&UCxH5K($v#sC+&rkB2G9^IiDEuqE;nQ0;cmg_kaG<&&Z6-w0~{>kQTZ z{h|78B)kX)pyuPxpy{Uy){bUS>3TrZj!<@HL)G^ZsP?)7s@_YW>U|SbzpjJwqsO4e z;~v-?R;Xy(zX$Xo4~Lh-hhP`jqf)Z@`*JhknaDFM+j_nNdmtA(+0HY4q4fHo#>E^c zzq=c%zRyD0xedy`_h3)B8xDp|swA8D8>U0GWBIC9PfwVMoCh`kyaqpndtoQ|$|<(J z%JN49rKdSmyUc{6;d1y0{1tA351*E7*0I8B$)5elkHh}(-s;Kb?`nBYPd3jNe}Gy~ zN7P6*e^=lFsPTCis()&Flg;}TJ)r8j9KHb`hN|aPHEsA3SR8pBl>a;cRsYQ{{8^~^ za4R(HFyxlXQ?8b+@4?#E&nwhPHt!i$fg?yi0jmF=gR<)<*cDc zDF4WZ@}CQ!{OKwv|6c|*{_b(|vrgU#HD14g4PniC)-U@*l{*2--xopo*(#{{@j(~9 z-G%RgCldY>lpQ7O+wv+v$th6zTSAS)Zcuv0LbcB{meoe3?Xw1Ie%TDwe$T+B@NKAc zr5f9Lt2R`5?V-kRUno0+P~+o5sQGRMRKMH@yTgr8>!+uQEq@Z!c%2DV{(7i-KLyo3 zZ$kOgH&FV1hU$m1smbPkwKi1vIZ)%_e5iJu4Q1C#7ymqzy*r`m^`(=4g(|m9Q`=89 zq4c+bnxFea#b-d}D}>T>8B{+nh1KCosCncGDEp6VX4|8pV@=1VQ1ewMsPQups(vG& z{J;mt!HeN@@Ixqj)-+Ex?{95^w;_*ek?dIklUiE4ZiUkGAXGnWfok`c9k)Z3`yOlo z_rof%b}QSz9bjMN@vs5BAKn1pgJF1K>typ@?>?w`v-=tBqZq$0!+yvI+9aF5|CiR* z&M#}>D}=9Xmu$aZX`gKVPFSA~$>#6cZi3Cozp7)hXDaF5>SX8H5&Til?~!kS*TaQf z?7ktjYqI(NVioL7_^)s&?3HHsbMM18$R)d3KkWj$BA){X!=*44?tx9T?UL|-H@&qXTo_@B!%D`rb z(_v@09*&0lq5OH^nbuFzq2`l(sCn;l7yba$Jn$q`|GogF|K$F*{Mt}{)CwwHHk987 zq2{@ZU^1KwWycjT9d3g1OYZ=iF9mA;ZVKh+t)a$6Kd5Q6C?R5OWWb@p) z4IGGkDeMKeL)G*2v#dW|2&HceRK1^fd>7V4{swBiR2pR0;aX7k^nR zBS+vEco&pCWzJ4Ee^<97RKLCh6~7y*{=Eh#oA+W0q4a$Q&w*bF{pxX6bsCn-JsPdnM?c|^6(ka1guAhgGK>4(e^Eovh7Lad-%d7AP?m81a4bU?P`F6s4a$S@BbRLRi|`)sG^pb-&SsQxGbfL8&Avh5{q-Nm zX!PApxb_>%xz_OuEJ;`i&Z{`DCa=%wTg^4Y+LOt-hVw+FBTn;GZTPd%Q1qYI=^RD6 zlBBPKd^t=-*6}U6Z3BQ-HZRpgIg6u_CKd$ePO~@xAZ{hkp#c}HRl{|+D z+sSoT&W^|d;u@jzHkXEAj}Li2aYG5a2tA9rE+G6X!k=>KniGBiT^De!`c8q^;s~Jiv7h z`CAhIH5?0dyiPo~X673Nt*^18J@KEBZjH--7S~4~+sXF~>G;XT9MiboPP*NM-_3QF z%TpPC!dVlWwv%?0Y$smFEy!CrS0FEk@47rTmUWX09zC1mQPS{O->gUVNVkRSYlx}K z`3_|+<$TEH*V=S|>vEL!0N0H2`gA|?2Jz1lc0cKV;`(*Yler$~@)dXaOlJPO zf%81Vet}c4u_5Pj^7nBGZguHTCcG@?_vjkKIh9k#I;U6HrN}o5c^q*!kTxBbhgqDX zxW1D3`YvBZ(kmzBH>TNtI>52d75wz!d4v> zxo$!Hd0f9qz9*cnGvIc@8WF#Zw4=CwkaNGw$ED|6(tL@0GHC|5@cM-BK-Tdk@z=QU z@s#l(=k3^##@UhZ%U#?uS7s077Q`(@{*dcE@F{dvaq-ew3>`lquY)|Ii60*zH%EGf zuqIrG$^SXmx+fX~^9a+CPWW_p-NosB6!{Y379qdK`3PrY?9efV>p?EPAE(}lAGA$hV2~yO3KDHpa3Ya26-+bn@$Xma`dQ-Cenl6L+r5{~6a6Oe)$C zJ!f$JFwAgeJ?eA^N#B|CeJ4M_^^;r=Af1=%xvs2R$=```7H}TV`4VwD?sxg-lfFIS zCy>4zac96`#4m&xiFm zyOL%I@uj(*h3>&7HTyKubmkn0T!uIu@4;G}7dRUfwx4soE;tsE{$p4?A-*nUeq>_p ze*?fqr;o=qo@+=u)TKY4{5?67kp09pBW)e7I}!Gx)A0l0cacBrbSU^$&Vz)1!a14i zx=_dWj=H`RJ2E&wK$nh}UH;dcY(r^ZCtu{^OCj%aVe=Bw<`Dlmw&}T$j&qQI=3L5k zZCCD{CWdiKzOtNMDL;06!o?Say++#C$TxxO*)INoYmZpkbGfKVn&~hfHX>bl(p*9w z9-+mL;mErQpHIj((tQdCkhV9R57#-pXObsO*cQ_FCEY!Qmv(x_I!+*cNtgZ+(j9%= zsj>(h=+f^*&k*v&j&|<)J9LaE@Ltk=$ax{@bj*dfAWyKO=YHe^oXMoW6y1YhFXF;Z z&pR$(svq`J0Kmim){Dm4U?xzYpCb$yeFsI~}=#OaBJpElJlH>Nuac zi{aVCKS9{JqQYD`5tE9!0KSjDw@7n6X$m<*oEx2<>&c^|6ZxWq^NNpWFX?YVZb_Q; z$d$RCqB!J%T%SqU2VD1nJYw`rfI3+G3aINDIarHS*L2l~8-i+lVK8@=-F3)Vzb?2N$coN~gxc(I`BmOe% z`Be%z9!%m;>*a$aq z)+Jpd8{}E#;yO^qO{A>>OOvk+Y4VUCCEZTaOd)J3=hK8|!gjDc98H?XiC+n`oX&E@ zwIwbIjzwQ@s3VIsxty`%9Ty&xQ;2)Q38%u5?)qu;zrl4^bhSZm?5Ixq2hcH#@Tk*! zJ!uO$^&Eez3p)Y%N3Lr_9Y0x^|8FL51*h|EuJ7brh0cdbdz;Izgt>%0MBGz^>zQII zaqGE0&FOrBxW4G=L|li2di_NBhlHI+*kR7zF8v2^19B(y{0Q41pU>GI9hVXII;V~r z#BJrgz>1!1u66WBZ;HFF;dJ(e_Y>ESxF@-OgY!D%3Fs<8+H1LP#q|=dQ@Bn%<~pGi z9Om>EkhT~0EJL4;Nt{ERU8P*u18}HIKhK3Nfftc>n3FGXOu?Q-gs()tjqBKPF>(dY z;gr<}{Sy-6o<@Gm$(zV<7iFEu`4Q(A#BCy97{2Awoa$_;PTHT{brr6gljc*-H%b2< z;Warg<{ZPBPJAZeXH)(}u60~UxQYLGsSw4*s2 zk>(OO4>nU~jtKmiu-ROHL--=D6OS(l+rp`1^-*z4(SH>uKUI0IQ=HTJ9bvg#?g=AY+Q(l#XjM5jY>&%0~=CZXdb z5}u&M9A^?&8HSKoP{zF`6n`ZAMpx!U%9)1V*l{CiyAXD{i@%bzrz1a${4I&DMed1w z2qqp6ArE%tZXse6*AKx~r0u}g$+-8Poj z#BiVQ@=N>y{RPD5yRbaM8aN$Y2pdPdj;moAv?N}n{@xu1|Am2XdX`YAAKh|TT3~rj5;pQTQ1$H z=m{!*Ie z-jbZ}62Fi5DDk;2jq;DxfA08>Jj0ycIb2UC-)_<-yZTfk?tQ{XBHsslxU|YX19=`C z?ZPUN_bJYoIirO2gU1s;7k&;Kq4$upV*`25=DL@YpN6k;4j|vBoaMN_4n6{(<6MD` zZRjY#j_1g$<2m9t5#E8YlaR0FdM12@@H1SRAYrQs`w96h^ys*Wvp@1sIG*@^F6~6F zbtF43A^bRWErazr@3zsNe8OVK6_@yg zN_meuI!2=5P%yi5-IRieKinYFv8fC276x*2z3F~$o-aJ!pXv2Qym_ICx(H_4xL_!% z_{=~ggNU#%J=gCIg}nt4b5#(`^+zJ!$)N&oK`=Aqjpm?=bg92F!4nS|lHm(_yZOQy zp-jIC^mv!$dFnfd;3hCdi>5UE?&Q#U0eRG@3GKQj;wgo3{fiNu0bC2v+JH#bxm z2xcp^ARI=~*vWpMq6YhYnM8PdhkUujQkVQ(-{i5e0y0B+zCh3$^!qa--mrgSz+d=> zsUjxXAE&Zb_`|=WAQmOFk2WC?oEV7uQ9Gf)ABp~Hg5OgS%J&CRkRJ;FUjBsG-^(nw z_?=P}{F~&awXrtOo8=4S;w#aRH;|`tQ;${=PfGV3b6VFCdA?wQFW2kK&ku(t`f~r3 zZuJ}<{D@ja$|4D^su*SXFNC%_WI=N*>s3W z>kUNW`Nq1a28r!*ECodV8zn^iQLoRNjURhMS@gE`>$)ilp(^R2(0DJdTsOsfeq&oF zGn#!FIRU?hwoN@YVX#S8G{+Y;iakZ%>8f=Mg+~4hrD_78%}v8*g~EA027hC$RbYh5 z8DgD{i~2L;16bAm!wB_LQ5HMA<2mD_{ZCRzNscc!Ypit$tcgT@8Zo~ORMK2uFuTB+ z9lKU=AQByG8?`arDAAif*;_XyR2bAyIff+Oka{=5@NY{X6SXnb3`D#c zxuJ+ZQ}G3P4Kl5JH?d7-7qTOwBCI2(Ipc9hyH29dXN2`XHt4GM{masq9 zCy%q5y;RJtlgxb`ecqg~KdV!%Ba@9a3n{ZqgGep6@Y-5-Z0hU$`zp1B2K`z@nSzwv zB#RW}MiU%XA{|ZIKZ=zf*yu=(FO1b1A94>fJ6*NPAgjJ#RSBDUj)f@IJ0gb#$2hn45P@KnSvo@w=F8JQBzH1< zmS_%}6H+tjO)kvwhy9wGv@ePGQ%*FRA8FsT>G`2RP)$;Zg{hR;G!SG|2Q&PUrnS5b z?`(gxQ?0S-4B+v#upzfotzgKG8E-J81=Szsg0Aqn8Zs4PUzV8{2--2Cpz(fxzNwrvc?2IFwB%$xs)QsLGSV z!kMt0M*Q8SuYnT&ZcK!zfgv-}EVEgV5}?>pyE_%3!}nk!FlcZ$O)$Bi9NINHPs)_fDL)qf(b&kj^rj zW41k9yE_6RB01(}0sUIZ*=jT~w;&D3)S_3KHzUWNG2UF!(eYY);&Vvd6xB37jMS6y z0bpi3d7@b->@5*1eP&={AQG4u+f*{eW*KLcqTej*ssCRdeoPZ;m_9&!+4ds>9%`K98J3cZ+1AuB3diK-%Lo{-B@#! z!tK4~TDAV7C7GJWG;Ji5b;Oi%bPxFOWRjbe_o#dkX2zi1<|SB~7#bfCF)gu?W$r-| z>uc^&Vx#MbTbBQm+Wx=9PVViG?8?N(FKW%i(4)JA?J?V}qMPs7z9z&161H3S|GzPc z8Y7~|PG%VYFJ0Id?+D$fv24aIi2TKQ!1TGPmbtl%-CM_R_)HXAkbln1b&M7>nMLAL zZNemX^m_kyuHbe={dwyitF3?MLjK>j^>19y|J$bi$IJRLx}?1cw9EhBJ6yRb_S@&p zW`g+NZ7YtkC2|A$wa3`@4=*L|A1k6Y=-_f24#Y8xvh^Lf+XA;CWN{> z!++L7_ZKQ~tZT{Nz3%;urvKfe?Qb;wZytVsqviic0HNZ!{6v9$7;fV+U5WGRIT5&&08}6 z+q)L~_LI3E(Ni7sBvwD0{LgNij%`T(os;*mS@3rblw-5tZyYAaX25?sNcaI!KQP+6 zU%eXO^CqnJ|I3F{|DGj(XV?FGmi&z_@b4M&pSnT>SI{#MT)Bh- z#C_JE_7%UT7yT4&o%h4(OL_G}uR!R1H~skPO!sJ^*X?UKyR)FqLbsF z#_%ds{4<;1DOLAY>A9f{_ruG-PJGncg|QL*uQTZdJzJf0-r)Lo>r>xW+--&GClux0 zqAqGc6A(`@G-N)oiAS>%x_0PpKf~d*+`;x$#@|V!n1o>cv>3}iBpS-k$3u_K?Bx|O zZ>B%Xr#GS9Ys`8#m={&Go6E@I?R)#ut8);&tj~Kx=7l@^1AZWCzi#psMEUq98p!bF zVx_)=GB3-q3o)(FNUfZ(XxSd{@M2~tm=(~+A^JqXyuEA&mY>cy`+3)OernIhLz$U+Mb@|l zW5|4}WZxU*m72spNJX=0HnNk0uWU?gzAqBteRcOK9PSY-!o(g?hEWjZ1!!+N&gDzj zOO&J{ILHgB2~~|v$O*k*w3T~C^M%g2EaUnJwc zxqP>kOFr8GF?uyT6sn=%5HXy{2F93fCBK7rs4v2c?aIL031&#l_yxui)WaXi2nWo2;YRK|C^oQ-IJh8}8j{Y((9O_jwVwj!8q4tXNppn;R;*W2-t znl?bY6mumPk_-MuG&An+wYJR`t1ll}#G6ygl`%_B5g#Jj-h}haJK%-tsXX6!MibLh z{55{}%>Z9n=CTNyN!5H-ljX}`^-^1)InP!F1@T_y+RTCRmSS?{WpFZ>i^K^}Zj~^# z$HtI-YGQMkuGgr}D2T8i#}{?QnvZ`Os{uY{G3m@l4{7=ihG_n`V@**K#``C`%lMaM zo-}o~TG^8L+(5Qlgj4~2-eJE-j*WFc(?uTN-OvQNxjMc5HPFqKt1@BZgM7GW2AYk@ zW3cM0Ka)&7Vv;h(W1sul1B?!6iPt4tfU1efRmg_}TNne@8I@stf$k#wND^+Z4)l}u!RmW>FG5%qC1I!5>uKr?~l~qX}QpG;@ zQ(Gj=A+mb1_QmoWUu;4>YON?r;hr4Y;ljs&c3x9*+=h>_-6!ClG-j#En&$9NDr$nM znx)(E#zdAZ8_pDKw!%(U9efmFp4Dm(X?mAWrEnV>6aBJR^(lIusbL(qMmtfyn=~EB z_ArzYP{$iXW49Y-PH#;6=}!sp4YT^%eq9rZxem7o(n>?&AY`UAccFV`6_$xdptxv% zlsIv^EfN!#Th_XGhiVnpaM!-rho6|g+h9K_P4y1tORjJzgAe5!d-?2Du10PBZWkQi zs8O!lVB7LhhKZ`I9du?ksBiydg!v3CmLXf_tJUJumRX2Yb4}cC!)}|xZ8Tk@#WG-{ zYLMq=2WMKubd0%YqK?`IQC5D~On`|xi}u?3s}wkfEkyT-&Vd8^n-#i=v9ftKk1n@& z)m>rYmyFso>Jvv(??OLyWyfIVGP#ZxK< z40E%crGu2$MAL)%mR5Jv++Q-H>|Q}e#nYHk6xV9>#FR2e+8;^X7DGn!Cp1(=Pg>OL zz5rywE66mhkY+caNFli&;dYZ|;O%Q3X=DY==(0hX{wTY02AdTz%WeXFe3P8G5&TU8 zssG&+s;cRY*jL{!t0^PYr06b$d6SQN75m#zJ8E5<#5z)4tVxN7EbJHL3#Kpay}y~V zsah_7#YJ7r>rw0d_y# z0$~;&O)p&QS(5!fHp7`9ZW|oE!!#V?624+?pj=jJL`VVK?pSg+Pj-`I=s(?@_``gJ z9sj)31}D0SNvBbuuYT?J#wHr7kAdx_*+bLL_AjfL9C88^sa=5iOfp?}@OBlYD*`Nd z3;^Z>`=6++s(flXLx@YGs6SL*e$`+AUkOX_=YPp_cnR zKla%-+cC2s*pCwvKEc+#aFJ#+m&8TJsk=`!&m1r;E9_@`RJ4^Y+RJEN4hMJ!XZ})- z?N1i=2!Gl|Tax&*fS5tq>?R7*%@^qDG`l`WZ(`P!+@>-4FMW^RI}q(tkgi&#ntI?0 zsE>Gua!0KFkrVNPBf75W0ZnW@bC1trD_?9sq)%vrW=b>qx&K2ylblVC5Dwy8;gByg z!$)NIA;Y~rCz&y%OTWAH?eSPS(@r7U8qj%K zR?U4lv3weAW@r0|wda7ezWv7z={c}R&%t8{rVZ#B+mveY`<)~`&LYFWSR!r%jQKWU zsy{d}7Ngs_R9BjI2xckNjKw{!{!oH3&#bcPep-a_Vs~i1Z2p?jU(Kfi=|t`M*b1=h zNBnM`j;~*-X4SJxamHk~VP<2azw2;5_iwCp++`NBf$|mFtz$l3p?;G$GoP7Vkz4My zXQ4uQJcwW!jq1jOrsW&U>>NF`k;9rl&+vz4Nw@Vu?;u^89Rg;_c5a$t+owVL4m_ji z*-{FRRKoEsDwS+d^w@e>P<7QO$gw9;ze(MgnTVeN_^6wo1>~|mo>cRr1ifj#IA?=x z{+bj^0Cx>$0@P+%f5@h&oL=THRxw2<6l9(&8;5XjbMZ$WTsM#tb@2+>ozU-Oji-;d zS%5#UG1=UX*e#NA8nn7SqJ3b_O=WjBhGFm71%75KC&V_}Hp=~t3L~gPS-Lc-$w2dX z4Q~ktLOf|_QDxJWr#}mnk;`s_w5(b@nhr%GHN9u);ko_pQ-srBf<@Cxgd+a8x9&X=1-CZxQpse@0+jel|0sl zTDKA!-#oi9J2bni#b*obrZ&oLNK8kfg6^2hEH6Dp9f4;=LqYxF4_35TQ3HAASd`@V z^g9!ON4?qM6=nVp^>hEm4UT=TWm^Sn{J~uPy%TI;?A!k{J>A{k2I+49Hb`7%ebe6x zX>S7bzm{8|KhD53Zy683lWd6FHeV1*KR-3`fymUN1oD0(>94<-EAuCM6l5;UsESLn z(EJz>qnR$eeYxL=hxF7#<+!97xqm2|B=I2gpf)bWZiHmLQEeyZBc3xK85PT+JzY9~ zl0q|P)Xa8#NX}o9z-s!<o{BJdQoVhcxOmRO9+UA^Q?>?K zTKLm4x{Pu=$zBW(H&12aK@`kR+dS;ijO70QQT=~oKhxB1hw67Wf0vHw!^q~x2saVv z{*7r_Gex(!qdN-&&kf)rvNDwyY%M$qG64Z%!V zNTlgj-9G5qhHjzhErr=Vfy~ev$ZCXNWHil)M4A%I%|>jeVE=GZi0uulsOcQ$Vb-^z z`_v4EpqyXZJ{cVQ0o>hL+lQSA;ThHsIab|M`+8{?!-7-k+aJ3&KNf6K(CV@*He(rI!}7fjUTh^I&V zCxrNzNeDuteqb$1rF$OAkA%37BVGK_Ll3|HOl#PeOG8t>dlSRWCGN+{SZMs$B%XBJ zKZ+<__T3G$cXu21qEIupN!0UChXixYQ&Br;Z4&cjEtZZgZGh+7b^(nAM)+$^nflet zWw0YVCfGYdCs8;zKUxpnFLQqo-X*5XJftw@92q3fKQe@wB3o;Kd&=PysQpwWo|Ceu z#Rc>9s;EP33j0XHq}LEjoRhQ%Kl+g`D~NKK-M+bJcL{v)M^ucS`0EhtT(st7@y8^? ztP%Rr)jdc|`2AJgVjl=PDxe@r1A9|?n`h_^JUv+d2sVGr&pROYlh{$R-T5EObZ0Z- zicTfV99Q<~ z&1U8rJz3N*8s<5oY592DYRZpIUz(6|*M;7PY>`HlPnrY@n5;{q@W)V+MehfDMd09?Xlh_01S~fKC z*D)7j)~Cel_EzYo9f|bWKMHNH%(lW@n*D~k8sye@BMi}dU^bhbflO$TarPBNn;^C^ zFi8?76eHUi$X?p{N7vf)>&gF-l{4yMQ3)ePcf0Z5)jI}wbxpUMa9pFXp9K<0n1 zdD3gvWGl0A&I<6;jqP3=#!8}Digq%uP^I&{nt325@)Xy+;g#Wc@w~^w<7pQyXlrXG zMU|rsDStW8pRT(IPfz`N%>Fh{KLPN}GcP@;9~a0Ki_p_S`q_%^iLp%|PbE_ra6`45 z*M**j$1iN0+3EKTW@AAPQTmxnQ=55mYuw(>ocZ}m{ztJza|kmEcS(t9<3nH1_@&y- z)aI5f_5+@7vlCu6@%mGFfT3Scl)I~cl27-vdg|*nZ?*p0`t^RGCYe9iYhH!2&yzGv zO%vD`kL*^@)6=BTxKq4FmJ5nKxpNOnZ8~+i(wQHw{qhoQmj-%{U(TLbAIkNn49WND zE${~a4|{LdBiEIsXP%3`s$UUgqf8QDCQDV_u+4Hw#ZQTaq{L#9($owFL@+Zl8KuaK z?1)TClwm-IVGMeF)iaHOFJ|CEU$|RkOg9ELP~$1gjne%`3dR_7=btdo`>wV3*(WlR zA}Og$#<);o#@T0|{kit~UTdoe1ByhN%k?LvC(Dn=i}C34&G8Z~5(UpeGu})ZlWs0h z%4CK<0(66XCQacl;YEs&qc}fU9-kdCEr7&zqo1?pId2SvfH6mo*`inW}PVp=YoN$-5Ny@(L^1%cG1Q!~Z zzR(hjmR{L#vCeuy({)E+W--38rEX?}*ZHeOx=S8bq#Pb6&KL`4R)3-JUKb;<&;FANhcYXBM5ANTL_wxFnGrrO<{oo||Tm7|< zE~iGR9C^orM(V8iy~j2j?y52`RwpL+S(3I+H|LA}s1c-r$~w>S=PU&%ZjF}gvx0&f;lB-hNL!Z6Gf|JpQdXc_gCph$SOPUE(d)H)0%%PEtX0@T{ohK#p;+X zvE&x#QUb`*vxp*J&{rLK_H!Zs0`8naMsmQCd6-cmLt{P*O5)98xnY%GJbG9B!VUmb z!c}fDf=JoTg@d;b?-5dWnrhymk`X}Ksnv&``3ufD{mU`xiOY8pH+R59`~^-8dZ-!S z9nU8FASM1z@!`Nk^lqAZNAJTArv9Opi4LOC6Af8XQ$8{~=x(}qJ7~bV)!jeXj$*YjhX;TGOsib~ zZ11}IsOGc~d*kO&W9bQ52!^|1cE^mNV>R9xeKe6CGq*2LA7HWJ`m!E~RvzHaKV>M5 z^kwCdpn55Jx*Lr3 z?umUN%w4^Quo6`2J&i5)7RohbPv7a@leSrJweHnkxbNnTw|0OBDUpq15TX=G;n%1R zIrQ2>yv|TsS9@QeR?pVbmuNN@jqqfJ|K7cQb9C=^{?ecK@A2>6$g8XKRDxTKaBz3Uo69EG zoz}e7>>=w!EQrp8WL-4_zbej|Ms;X>q_lO?dNt;CqpEaXH(>#Fi6}`AjcgmtMC0<* zc5eYheS%&2w{*i%lmT?}mAbAP3OW}8RC0B|3tRqtADbKq?3sA$4|M0v7XAa{1&*q9 z5en4b^Q|QLi@8krJ<+~k}EVfV*7|$^R zv*)hW-kt7B0#5CmR>>O4*q@?G=$98~W!v}V4`Y72He{s1shilDA~<8Cox)(85$pr6 zGpt;;N0Qu|u42g`Rys|?evH+P&nnpH#9ND}O_E)|G5GSTI@1dL(gjlcuQk9W0N*+q zC=MS6PPN>RCXUyNSAQ8)CdFk&aDLr#Gn zH!C8BSVG8wG#GfFWs{z)IPfKS!73nJBM3T*9Rwe;ST81AVxd`SL7oW%xkoPzfmOl( z7O=#t7Ookgl7D)maCgtUoPTzc0U1?J?VhCOWfw4=e;R>4VO@u`R4UFc`RWk}8Sxvh z9dx8Hz~ywvkIc|sOK79~UI$F&U6IcRF*Dh!@s0F=_1Up}0Vc)V9Y?q9TEd)QLD?-Z*m|^uL&8@64|&i)hL>jD>g&h*hfDUpu8C$MsC= zgm^(+M-|#1;mN+DpDw&<7t7b|1M+AsHT^ku0J_E{DWCGM966-C$?0p-QIsA%^?3l_ zDouZ-2gSdtFR~4^e=Mkvj{u+<#B1MVN3u|q$uIDR!XQMbi&QHSq0wX2VtWGAr(o&o z<93+ofrlh#BT8Ti>tnF*4hPU&gXY21hyJ@Su%ff6p-r##RSv@8N)Y`jgdm7~SU5w_ zXwLZ{Km%;`DeOj6VysIEz5!Mj;bxqJ8VV}`(yC5$w$w3_*7*pfqM)ihEz%QGj}=Dl zK?KTQS17`+-u()umf1%r|_M`F(k#Y<9 zH~?Z2zl)8`F9L#7tK<@`hy~L8ln4{Q4o!a=NYV{88l*8uNs-g80OS0l{y4h{@&8?|J->dI?7iqnNGl%$soS;mjgHkj=BaxHaWqJ)i#V zza3rPlB+9ssV2szN&DOrW8i0n}UOp$gmiGnKF3~}5TpQHa64_|7jR4!bUwO^hJGl8J>#iAySG ztyz$ybS$pn&w+*&9M-gTau`8sWkO*G)P0F;=wQKECtx}+n=0dHEn@wkywNi2{J}yF z>01CmNMo|i4W58my@dOTn>*u44vRZ4{7Sor3@g8ZM)us2-KX69si_9W2>Zy(Ucwgn zwT0CXyB|N?Vial+6f}-sE%zQJ$t}hw!OB-5BihuatA*GI*bBKwY3&L#$ALzk+9}uZ zRXM|gr*9GRo=c~50O@dBam)ir8*8J#nM$HTQ3W?F0xLe$9Qf#tLX0(x`gv>11=ts# zAhn_)W8YJO|7{M~=jWRmE^!(Rxk%8aIeOQkZ>0{s^Up6Nfs20PyrtXWj^vg~A09v|jIipApDH3XBAG(0 zy?95)O4r-G$lyQe^%eKWP+{WMr~9_!0Vszj-F=1n3eUx~u#q(-c7~1u<2|eD0%J=F zKwct?K#9aasWJtySn)|P#9w)Vb z2bSrFQBL-y@*#yj>C$`A`lniwWp|(T#HdnrPWLCknitkuTUBt(xL7xT9{Mtgmq~_Q zFo-S#=_W_WzefiIl6CLPCWr%; zRQk71h<>|55ikJSIeN!GW$5z-%E3lZ28Kz2?Yf_m-w?hW?2cXn4DxXIKT^dMJ)^=v zJT(+lc0PXBTHy<>czqO49l4wODC7xTRq@Cx36oSKdHJcuqh(Wa?5q~0Mt^Ilj}6?> zvtvwkC}`+3TZuZgsPR4(gQlxfsi_TH|7g6A7>3_6586@p;f1o z!j|29}EH;-w(>p%Tv^@@G`YMrx?$Xi7h!9TotIHo011z`74^ zZQUBZ?^{W)cOQJ*eK3>E@&Pme!UZd$==^q5!~CX^OOr?J*+Lg4`|su}e}+MZpih06 zzx=6~FvcLwl_pk>lT0jPFi(zp%`vmIr6Y(`?6H{&2CqASgT+;vlf@iOZm}@3+78Az z8Xrz(>XWWm4#iD91D|A=m8AHF(QCR74pW0GQq4BY)Qd6^aim2~-otAxs$*oK9#I(K zh^W8!G1ouyua71Z7M`M+lr&gVj*3{x_mSm$Ku9hWfgCtdj<49#KxOQ;w65|k@MuLq zHDKWtTE!V$ONFC6BB%{wLhbM7%VyPf*#T$kN+X zXrwJ%C9}|aSc}&_qwVk)<-N5ZaiQ(9`vAA0p|crCCueHD-3d(~Cpt4T2`#Ma*>A!x zY3-NksWfZ=$YIgC4_GW3ODDtb0WgX7?7nL@azTQO`z@v#NJ>v!HcVVFdNIE zDU~>9VWxX9pDjP0jxO`po@fu|M}$^!h;+moH5?Te=vejd$^Oadua~1cC+g+|k2U`Q zobn}t`IWXJ@r5@RL|)z}C`IuJDv%;_HxVj}(Wn3U5mQwWV$z^md&{Q&+1 z_#3uY%U9XnR*_<<=|SF0j;AEy-k%|TTpx85%5)Nc(O>ZcXG}D={0-YTKdhz6zay<3 zN}J&$lZk3VVAf5D1O<6yn9+&AOSOn zda1>Ss6bAcATK3%(qoAQC$cUqy26QMPJl8I%MS7k77lDjY(A7EE$Y|#){Hj2R$-s?74*B!l@FMU)>x=JKVfJ>@FgBWJ*u;P zI`b&~M1v&utZl_(;YXU{NF=(_!%GH*{n4pMSH3tiCbJMXB`MIEAMT~XIv!=Sl(kBG zLc$2#7xS-`iahjpm=7Kxa+pToglzq3tBGxJ7B1d`$V|=(OEG9dBXWAUhvL4Z6nHj0 zQekkv7U$)%B&PzQl7X+XwGPrl5ft33GIGI0Vr5=8XYw4a25kb^`KK~Ce)h}{BpX)~ zl4|q((-viA-Av1uHGEE1KT}eeQoAI;%ld!|mbZu8AO1rB#=+2^(I1v4aKETxF$B1aVlo|7)?Eck1vJRG5g_RmGn^Mlc zO-%$P5y``mjh=zsvlLR8zk~`hMIWXr6`~zUJ(2j-&q z{7^m?O-MeP{~hoURac@KbCkg4uSV>GqIuJ^TvW`w^T0`pe~Y`u!=TaeCmE}J;8?;m zikGdCFQd!7yFo~-SG@a+E3&QxDK3@iCwyIAqnYLFwR3K#0uOaAc=2Cz0k<+WKrK9v zHkOZqIL;4F|KjjJ{Ik*JhZx_(n)ncI{UOHO;E!vnKsc=<+ij0`!Rh^yhgsYXUF0Ws>Kb@W=0-MYkp;;UC7g?ofeZaJ z`g;U_{8&&5T_;Z6WdRDRx#f5BDgJi2Ys?@S354;9QiqJCY8Ij_3X+~je6%<{uxCEnkWldA7Pus ztQOzoovSE)pK#nEYwFF&>+4k@$s^HdvR03kg%d|%xI@IEl1fsNZPH?|GNQ3_Ev4Xf zp$tThD>;lR`sA}X)(lBFQ*zaa#CBavih~N_-l(s`bQjph`)Gzm?v*T*7sR@sv0H0P zJm%;GPc@oSFQUR)78B%Ue9ri5Q`R4qRu+Ln$|GY4Wr#(p?Au`(@tbz3Dthh|;eo*6 z`f?3XDk549@tH)Fhz`+*@-JsQBpJWrH#$tA-=$|iln`g&6LJJOVA$06Q?tk z-6hg-yWwvAyN^BMYwGvU0^yoWS}%|J=O`?A)x{hIm=f3c+-Rm_B!O+`I+L)RzYbG< z6psROCslB$6Ax-v!kjo#Z?qIFprdl~fn;S$OokZvHOJcEgD~$AM~w;4V1HC1gqsXV zI_A3XK;u(yrj9I=dklUbfy<>}396*;nZppy6!zz; zbK4ePjV!Z(GCrXaVpA0FrUM*!UxgYPxkdIApMkR@CPX81JETNjK{++5W^r~hKwA4J zfFyr5``Kr|1_T9Tk`0Si$ptbPg>#Y?fEwrq^Vb2GG0F-68eD<217ZgNM(Y>+QKVb+ z&*bppcfHn1$R(TgCKSUUt@OE4U%gVy=9>NRkBV#Hwh}WxKI*oSPe(mid^|l$#E2HL z+n(7<@eUE9ii3_7`95NA1eMfs7! zCW(n2CZSog1nt|GtOV5pW~0IQ{Z2geQx1P_b=lm};!1jM>MdU2M{q=f2xoZQKIRop zru-FThn6`n2B0)jKWiUPp5hItKW4a8;Bc?<7a+)Rwb7je!feF=!4<(W2Ky>+wX8v$ zTZ&PAffO^A|E*70Q=X)*jg(9KTOCTq&pCNyp8=xjl}=)-ia0*#XQ@No^DXUg`7oVL zorPjq$z$MRx^VjHwVs4VZN|^RyJl6OF7~{epvb&^;QHN&p2qKd@{Yx2;OnBTw0T)Y{;8mqYP%HekVhFN9Atg}l}okhNqnNK zvO;9KKrfTnVix|XNtvT-GkON~czCQ4p$QjJ+%y7yK!Hwa$#hv7i8X2rL2(wOky{i9 zl!1{ea#>hWBhC*lux8@P+nI1+lXDX*pv`3+sBc_LPTus^`g3PuZ@~ zGAvOOh6@%!t!TLojM}f?eg3c26bDe|B&lBVvH!^#RfVPgNOa&o7?|J!T@s#+=yc$A zV1h!>)^3U;426JTKx%ImT#QQJlx8e}CMmp9Nvt#%NKDOz)W5!|+^;H)7Ttuw&4axv z*8DjE5OOkSWCuzO!~nsV`zJd1eF*tZ$=53n;%rHvRk=w}o_Aa^A}og^Fzn>d1SdzF zfS9d5$r-CUkfCXU%B8OfE6&N`2B`?N=)4VGxZt?>r8MSyXO1*{+cN=N##S@_X~h2N zWGjU-AFCf!Q_6Oc-C70a^DWj>nvv)*`DlG3SH97lV3AlFS^|^uqUTkUUVvst8E^QB zlO8%kQ)j#hhFh_TSuYl2vn{8ft7Bmb=XMne7pavr5n zVK_|@X9X$7ezdvrI_kwSutff96nn(~Yiq{JK_6&CJq7#UcHMFp-ZZM|x&af79@@z0 zTw^_qf&~i#Qq0>(C%D~EU~dx6lukL#@P8u=<#)q#hg0f!0)Q=Vd|?F@+HDND57bCT zL!`10V=*@tOxqtfzuSq7R*rO0mzQ)8ouBTNh%qGg(&2KpP$c9s5-o}$B_?KR+h@R& z$aGsiSXnLnSZw{#ffiSwp!6-E%@7IBv^rSu4_Z!1ZApNN90(X>x@-@JV3b-r4+_it zn1KeTVB%C0utrYuS*UNFNd4H$58p>e!hxE!@PA-~I5`?rj|Lo-=T+;yb!=y2uv#8+ zs2Zcm^@)R6mblMl+JA=1!a)vvwbHlXqIfzpxPJCN>UQ%{GHH1_;cd_8U7nai`;6Yf zCj6Bzwf=f1w9Y<2akD`KaD#4(L>}vz5fb6sa+Brwq`I8v`U%ppP1Q5v9pWNgG|C2a zRwhz~i{9-{#4!r4qkB_EQi&J#I|nUxQ$PZnpl#8b9M7R@HW_^XvR*&2f~{B)h`@Y% zbWf~CsIY+tKDs2k8jJ=jwLgC+AizzF{|y|6^l-Ex_9~o_4DGJs^J9NFDS3@6%Z+sA zF@q-(MdK8LpbaVDLD(%Gh0PtyFas6@8$Bw=kAcP4GBC9|-#8S#yC*@jh_^YMwJ-D2 zg-wIK9wiy9fwX{H`5;`#Ng!n^985ztp(Db;75Gl4S=e*3jYFF@!q_I5hB+D{Hq(Fv z1tWBzLbFt0J_Yc0^G{r-04#_q&J=_WYVYW8!D|h>*;P-Y$Z`HStFoZ zn2c;)hl%ig82%R?Wo|K@zrhk_=0^>7|W_G~=Ed~NkjVkU(E z>9pFi7Ca(?O~gY5pv#LDUP@>{C+rh03x*%ukPb}sxhx6`4TfAe(fGa^053bHI7F_A$!+&Rw=Rd++lKo2rh3$}}?(dRv7xf7yT=X-lnF?8o=&ph{y38kG|D#olV z2;p~~L+~E6kk1rN`uK3ee4>Bonh^bn#1{G`RH(m8nMn0FB=(Tk`)2@4t4NI!Z^Xn( zNM0;r-qWHUOC2>@vG{5^>xCTg71r8P>KsK*S$-UX_90%f4~i#7++Y_Yg=yi{fPVDork+=N>65L`3&vwF(9pYg zX>;tjb-qW}V_QYHe{{Y3kl}I~`Jqff%5Fthatw(A7=`-7-Uv$L-j^5$sSjvfCJALQI@h%Fe5VQdib$r@jE~uehW5>I7JCj%gP@8 zQHH2K6d!oTIy8KHu63wX6U@_M+_&)&d>#P0Kflm@l&OC6FTD~3vgF?x{N$wkRqcTg zpbuR`Zwm6cPzcFKR^5m;6^Y3zS|gyyS0|1}pCT+A3F)=^yLZ~Q^^Ju<2}dR^Mq$PD z3E8lgP)$g8fFR{H7i$3zp@o(Dn%To{>uDH(8+1lWIP+P79TO34b{|Rp69!Q0T0pj( z!O1mCN;&CBGCysTmfaXf8ZsNXdfim8idUubO0KJlS*hHx5u1K`7h}PM$xchuwQAyz zq>YkQ!sF2hE7KbbR`tYMLh0V1M0|8;x3_&|z9=*;6b@cx=(%*&(yhpM$e&2U1f3KW zjOD1@6i9_a#KM7$0pQwZXZ;-wOM0lPGh!7HaD*BWOS~-uTxG$IbIs(=pv|}=#~N#K z)1}D)mEKc+nph2HQ>aGw(G*7nws+kB0wiU9`bevXxTe4PZ<%5Dk%cqSF>?;S4o13= zG0eT-1ZpmJAGb}QAmDE~-h(Ch1!Zt$<0VSBU$7&Bor2eU4y~|QYaIZ}XSO|Sx+Y!% zzVtCNcu!H0l*AhlpmM9N^)+TRi?Nz9m`9|xk=gqs z3W4?un`-XTO`*u9R&L zmcjjyw4`5`m;=jh5hCHpXC$*H7~hiQ#IgLLX|0PCWo{+WjK^9rj2Ig7(qELG*M96Zx&JI<(tKKbO6&Ha+Y*gB!$@2&-|eYk}6T#NVvCJS1_ye3nO4($0#r^{%ot|XN(UJ*yH*bhyW*-KL?LoRT? zA@zXAo~=SGp6NWusohvkZ0-$AbGUi(3*{pJvXlF88Y-qOInvJ|J-iU{R)zc19rD(p z5Lj2oszdjy@esz#R`jzcAL@qajQBv-()HLX??r{;K3NcS#Y+BafN)sOFA|^2wTOuZ zXv367D236#{bd88*JGVa?7qs{v)=58v*Jr_OpD+J{GLe?1|lH=yJ-c3-DQyNE!xPoVS|7 z4iz4T{X%@T2k7;_5#wHuZRnTEhsMFZt8oYuq83v2CB)Q*$iNV+d$Aj$2VhvTH^Z_I zjLyMBhbw^pDG7GMIs-aZFLPFxWa^wAh&kJayH%ZH{g^JGnN=#?$J&p$`Lb^!hoLAdt2u=@l9P z?XvX;4J&K!Gh`Uof`;@nsJpE0lv%&RZ~Z_H7VyPvfkGKT$Zn>TGT8cDl&}oZEZSh= zuUPBcRVf%1G+i7@fE!)kz!_Bdm%%+aDHaqbUGGX(0EY8ASTsyWT<4b-E ztec!jc&6`P7W%9uLQ_}=bWuHhDZiB5y{IZK$((6_%`ENOx_%`Ieh*1}08WPf3R5Mv}~hTDi} z@e(%^bSAmcIIN=Cj-@NLb%?Zf9!M{$g{Lc&OE9H<2x1ldlhjDs^LS}Gxk_@fMyr!OAgimP6b82Q>oLEThJEy~|3r0HhYP zmIZ2v8eQYH-|&0J;c>8Ei|uoBp>_%?+QjzhU^MIK)*Hx(=VtRXvbHI6a9^{Hf;xPK zub1m}M`R!afLX1CJ9OtHV`E$y_>#*vrn+^nkHBAIe{&?(4&LD1MtgId>e_yR3`8qN(3AWKA4R z+&-yup0`%;Dd-OzEAsS>HMGo@2fYp|H&}{@6Qs9@7ktejzWztAKSYAw3(R$LayEymalRTXz5XY!Kg54L z{U;JnmK~8WVvxk;Iye`1y8raopZ~}I`+xqA|L6by|NJli1Ceb~@eqFnG~7a|j*xt% z`%nM=pZ>r9=FdwF97{tBhmoRId9au(XVk{M-Hqa`Vfd7<&i5YLDRblga(}wJar0z< zx$y|U=kGoEVB;a@NS+-Vw_z2okAC=rAO6wC58m4N!4F42_|f&Z-um7a+UpHEJcM~i zqja4lkxXOsZ~~(=`bS*$z**PtpDw1$$;r{?;pF&jK8jeEjYoKXULSFLBex#b((9;R zzIXrL{X6|Y-`f1a_ijZ%@WvzEPU`eo*SLvidPuSr)MT8*pFDnacjF)Q^)x8dnHzWT z%8~8r`sg1#ogRPh!3;CoY~wDWH{^>tJo4l6CqMi#23fuN$>qb*+oQLx{P=tS&Bm?8 z{1ZOi$i<8Fre3i#?>4yIZS+Tf{~!MFNB^+-u*}qR>c6>*#ryi`+J7emq2@N0b1tf! zZIZe_*L|-P zm_0{Aw*qr_vH@?8EaTT5ZvDtIhr3C?uPnd+{jRrbpMDVlzouwe%8ZfGR^e1CGcuQ_ zpMJ47rL!GJq8x>GBHgo|gqDJD3+XH>ju3U_S&#DU^w-2ZkDi}?vEV?SesO+v1y!MN zBMNcl6Af>ri!XoWQJ#MByMOV|CtvY;&FARzFwY`Y?q0Gs$*X?0nNp3By}X|M=I{h} z2qn8uiq18SHIw)7Nvp8Fsoj1+}g zzIuY6kdi0EQTMZcjXtDs_*$JTaW*>rf(y8mXzNqvL(IhdsVEla5`eiJQ+|eq5%y{} zea`8_1*5P_S7Qu9Tw^qK#}h)avig$-aj3l=>Xi1+PWg>TqYRGUz;J}<%5I=e##8*bZM9ybvU-(f*H&NGd>%Ww-vPxZJDdb4?^#k6Bx#)9h`olUBScTiXzi=Xf{B4TBl$JhA)?A-=;9lM+nu_ZVwYic{J%z ztIz-D0F#wJ$Q)HanCBxYV7Y&5Mw(=8eYn~j>!~CG{W5L!nY7T@3 zL4D$B3MquEz^A5yJ-m*dQSHm~7zFO7)>lDvh&q}?1Pwe9*CybKr4;}^pD#zkX8Wgq zMPKLCL<(P9wbyrey+^wOgq@v}2@xd&$oBrK4f!tIWDxSgOMeG|M$?*%@e&DpFz)6j z#}pxuvepU&L=wU`MaUB8E!Le6l)?cBLVJaxz{{oI#=dZocm>=fV5~nnM<-Hb!{I4b z82T|q=MC4*N?<&~=JkBSrQ8fZ2=YW9Vg*xzD$cemHg=G6!@i2bh~LeH@oJJ6k1=j`4=32e$a}bQT}`*8y--Ge&{Keu)=&KHoJGwNW32`QnVHum zqspHy?pE)x#g-39?SB=W9Pa>@Be|!V2X18io%v2xiCEq3J;h=`Lt!go6y5{09@z~s zm*T~BnLx`@(Yg6KdfO!}0O?~j18wrb_=L-um1ZY==glRHeMyay@{ukxY0s7A6<+j* z&$}F4n88(S_URX(*x_1x+ z2Un}DYX;cR<#VbqRA;;6BnxK69*L_IHOe5q>274o0zl5I3yXE2z7xo45QoprPA615 z5!0YT_#G9-WxXttG6=$_J$0qer{%&4rNEMv28}cGEN06ZT;1__4#~grl6UO&KPZf)N^N0(JALk zlreFn3#%qKa)fQ2^fQPSw9bC@RB1pwfXUvR|0^KfKK@z4~EgBgGPx>>+MhnynwtuiW>s@C)nWNC%jtC{K`kA1AOZsfik(e zCKT`aTx->Q0)GUyt~(+y;#qgSn{3ApdEM$*rIBZwz6+zB!p$VU_>PY>g;c@NcYCBZ zML2N$%{CZb9v9ssSg-`PUOOX}YcY|94dcBInQelv>3R0XqxvN-1Pn^6-@yL>B@E5_ z0`j0=a1JY<;fu<#GD}>~4tS?2t;eM_QcqvVe68KpVqrP7O2AR2M2+F%?_i)JDMXDBXO+*$l~O)5t36Y!BzRMMj(Mo3(GyVN=@d$g9ucTc)bt`uM-)Gx}|h z|Mz!jzi|@$hD-H(q{weL;#b7S-(mFdsx$a*B8OKU{dW^JyyED;E@E&N;W z$6jYF-zLbt&N#kJ;CYR4e0?zZX7Rl4z54w~P^yLi8u8jRRoBKqwOg=_Cv)-n8XR?J-A9qU*m z4Qp&|-;|N;n_7jhG7o*%C-9xHq5c1RkzT{B_F4VcVgqfg zE-sGMC#Xb7g{QZDPdZWL8}g11C$lKTO_ABjy|@o}L$4m`Y5JJA@U0)j45eE)&VV&_ zMtXg&Ufn>4c?W@^>bG42~3dlD~8qNU*cH_~zvD!!Q#bJQpS ztFqQQz9Cw1ga9zBNJlv&$|ql`TB9+=Umoc^MTD8WJY^yg%o9zEqgWkxJ8W$OK)E-c z62w+k;zPw`;+FYYiSBGcu3wSW(2Mh;E$ry{Q@Im6|Gc8zVVvz+&IB1*jg#a!cx`Z> zwO?@KDZkmB+XA2HAS<_hEZ#&Hb7XJ0_O5B`F{^SO$|(V&xX|wH!P~PRk>!&;gu;fu zj1x!43diE~tJ}1ztT1~Gza7s7Gbzy(yVp4Bb0MD+lo0eSQB}!9*|Rsxrk5-HVEl$dWkBT8YnyJ9*h^W$!EX& z{Lc;r8GI`k*VuV}uDFqA&V`tiO`Q?!Y8FFI!3;>TcC4scX|}gJ>o=BdfBKTf#q1HL z;^yt1eSZ5dA8f<4B|B8YELrq8P|0My=0KZYfQ<%z?pV$ykNL-q(Z6&9ps)B`mp}O+WiYSL4`(}5`;Q>v(=){?TN|D`bv{Mox3_O6{Q@`s~Omficr_9+HR=WJ)^ z^sk8Qq`_O}5xVykt3i%8KZ&uw;cVmiXX(EnM4_{&fPIvlO8_Fi? zSwYpM$y#N3^2^EbN^yQ8TC)0`C}Om#VD9odmab{rShKe3I5EfG)FQP_afwYFlo!yv z_h3-GIQ=Vf^wy#_{8?ZWUEYS>;Z>n>e^a_Z(gE{&Dp zUWLRhpAel6aoU+~Fi?<5l5M^eis4O6!-%~p7>k%9&RuqJxdgt z@Vl_(W_OQ7xpK>68j-C)3z8=(=ze!Y@r2zSQ-94_sHzV!?+xwi zj=%#rM6mV?63V)P8{FxAsAL=h@LjOcpGAHRt#dF4!38;V$AdUh3=A}e?9Rt?ZpD)( zbeVr>raBb!g5Q4jQrG7|nu;hS6NtZzdL_rL+G@Xa7*o$QWFWMH1_yEV{b!{ErVuEy z95}H+qRJ4XrLi=BJ%i}(E5FnJ3c35U8!+-pUlWmGnO=i)$42!r9Nn;18)epQPY-od znS}^=U@_qwhw%$q48kNbLi%kdSs{Hc8E%ZxLQgIZg8B9PU--x!MkzjV)(R%pnRt}|rt`Sq~=DAeUa^uip8bC#8)N~y;1{#RSK5_|RFio+_ zL3f&WKq~VW)d}W?e3s^$!NH5*Fe;Nm+ZSRHf=kj-7#k6Dgh(Y5cc>v*z@hMh%#?>y zg>RQCZjSuX#K_K+0p|(;b%Xn}k#(W?V68)kTBjz%#rb;KJ#@6$5`2YPfRm?1BD@$r zP_TU2Nf`N|0Q51)RNM~9VzdPnvU_?--UKZLzX|iB#!3` zCL+Xqc&QD-1_^MuX+|BaU|D#sCSZFS0%%$T1hM@=f90B2#YwU^8b}HwN|y4}IJCPV z9FJ@p=Zn1f2s9w@o2{@> z)=Hf_i8BNJAe^ft;8#l786%O$y4Xv6{*ykR%>x)%UMo{E^6x{-ItB(E@b;VP!bWUVcbVk>jfCOdB;xXve%U^OgR#uy_2MrWJd9YhAf*`J&g zij^piak^dQGS}S?f?>6yM8KY%Vx)D-fTSt(G38^UJRP5k#Hqu#AyL*LmbYa8<|;|+ z9Fz^sw8INKrkl@L5^?(iI05XS8zsXOb!IvNat%2M=q!C`lv29HhIv{{U&qZkuoxUD zSZW()IX?NcwG((Y2kS!W#ZvR7LhrqZ1?>x+Gs`$%WIyrXeM$`{%vCD0(Uvl!kfy<7 zN_?K53fj#B#muxVsHc>PC_YUoNSP$Wp@rW*H$4dR1h?522PCaFto!7__Z~uM&r041 z;S=v@VO#qSx(^mwAnw*6TLcgTsWcm^M4Xxt{0x#FcW&&)b#`0A=d9=MbS|n2>9~e8 zV#(&76{~wwTB+c|yOd>Wtrn=f$y$n9%_zEvN-q8KH;7Hz6e*R#@gxVSad4F6C{}9O zjxwnBpoW6SInD0|LKL(>5>9|elQe?i%~9MEd4B$T>5&AEu`A|p^Z|$uJz4VB$J)#Q zXaQQV5U>bb%oGGu@P+Q^;7EK~qjog+j>+iR`1G%VqdoA&;Z&(GqWKXUjRpW1l|0xg zHoMzNW63rrbuzbHn>lBSmH3ivt^RgLYzWtWbNdC*@O(^mOY^7?Ck%f<_6_~kIp{!p9A83>Qpyp-uT|XV8v+rM{SO|Ms%xN9cyotveAp2-MD0 zNPa}0z?TVMkEYW7anhpZ4RSr4{$;QsGXB{jAu%=pvs5cQVO2;bWj524EM2nG*1(3O zV{S_r#!wRkht=esx2`nE6)mS9PzCqu;daArKlQx?oH;2}^0^N}R6&+km zpNi$+jN}1I+$+9hCgC#ZL)C(ovF>xD+{shlJ@pjkx=G)7tvtU`nwoc~$M2my)r3ju z6nd2V&~(_LA|#N*$_I>pIcM014IC1=1lAQO0z*e}grP!7dJ&a$b*t73;84gU(pd< zQj1#=N-pY|p5kT>9+cF7^Um7OQhu>GOBMKSj3SHf76@eq<-hD7c3y=I6qQMu;^D(9_z2H+bk(Y=(6%DmH^qRVJ4b9wa@^|2IgE+ z2>nJHLACn~`p)_=7T|~Rr0DQm+-*$6j6?7caTSdr*UX^_djdGQkc?lPF9`%oO48@B z4A36SGj`0d)T<2@Uv%=cD2XV6u2qIy?|qiUEs9y&pCyex)2U1uAtGsk*db@i;U`$e znLE89LNq$^uQc7%b1-3HV>sY;l48b$PTRpZw!Xsm`!##po9Hf^#IwO%F2(%(jn?=| zZx2N(HIoKI`PJX)G6+O7vx%}UL+{56n1D!slxe!Setrgn8-q1NBOb;!Tx|k+mSO;J zhH)d(Ks5$eNZ!dzk?|;)sX@yUuM&S`*?%k&?ZS8pa^yQh(R%K!re{^ zkOVlpJe&PI^|D@ZNV}TEt0N>a*T8^(XTVD4l z(>`{0g%_x%TblaPTSaZaD60a2_6CBuW||1PR7bH8$q9nl5N=WXGy)Q(_9|B70xkzBaW2L-ir>@b3aXoVZBjP&5Ii`YeibarUQ=4=#-EqaQ;*DY|B) z$w-YRzz5pnr`#t>Go}J*Qhtij6yQAyowPoY9V=xEM(5IORvF=UxO#X>*vzjDJ*^_ zt6@d9b`2mkoEHXva@It6mn9B+jX>6d=Pq2Ucp7157K5v-L?|>lG`|S3IDd)x@yQ9r zk|4q_Rmo~MSNE@ehiX~qqm47A$Hjo86@}aM#uY61p%b}?yRUdFO=mC!)n}dUjESK@t=c}-%)Csd( z9T2D;rkS+BP~c!*i-<(}c}~U7wVmbi8h0JQDOJ8#>Nb&V5u_03&oweILnKsKa`f>j zCG{F_=;F?p^mL2ypq3i$afl9XiUjP^Aud3WCWz$I#hhE;M-QUA!OCQ;7sq0S6ZnR8#)|BlyMH>pjsFI1(>ANjcxy6u|FmsE%fld^@(C6ijuMDf0w+o_!|ylQ4HfCl^H;3 z^D6irY;9gqOriZ(Y8rcuO-4{OJDiv_B`p|UVIG##&*YXD(iZpsfGtH^zJEFDl52sK zz)$FEqHI}GHDNz+G zd12dnD-D%Lwy1U_hrVg|Gw%`}Fk#mg%7$l; zxK8&d+L3Oa%TTo8RRv;uA~qGBORCF5Rv_f8?t?;g)i`oouPqqyu86?^Ny^EqEr%L; z&@$Um%w+v9tw7GTzExSCwx+DOh%`lXkI4@GO>k+;wpla_(9!y?eZ>Y=$3U+z59y9(v^rT!wHJ!6pD7$|b3 zAnYZtLV<3(1t~xu_8gBo>kp|;^jAm(9`V=tg1H3h^xQ{=#AAX~z?e{q$cT+M-G{K);uni%%`0*}MRDPcL`U6?lHS>lqD4Dy z7<+(*?BMjTm=EBi)u~kx1U?G`zr=__NsN81h;(&GKERMXu9PmvLcp|L2Vib@>$XJss&^^QlewX+DWx%*jXm! zmDC96lB5BPDVUxN)Z4-Z84rsKm*pa;?*dw?wMyQ<+d@6WbQw%jL!%c{BKy3#6aP5h z@uyUcsU-6|EUZRctsg5_n=e2ri2*?|K~`0~VSOt?nKG-jC4l_ibWrkcaL|3FLOS{q zmMxgqzK9*@sX|{|Nl{ZIR*5BRJ1x$gO|7$C2&j_RD72)ne{TP2wmJRN@PPGB4PCFg z!Mg_OeKKD(iOHv!$6Znl-_uBXZU05UAZ(R@s$I?-qbcH*)g!@p2&-^wLSS61ptv+z z=!_@`Z`n<*+{VpGK-Jd+m#?0^P}X31vH>Y1M);2y0QEgG{@x4e72MFcQ(L{+A4gOX z$opUw?y2i;Abn$-mP8oCg}2is%~>GY!U@nZpB|Wy6i;uRj1{~(Xsdo;)R9Kp{5TBg z*5l}eq1U!XpmL75Ew#VBQjgA7zjL?`XYdRs9gBF3Gi3NeyixLNX3WQ#=!96PZ^X z(RXDq%Gc}?6*)LoH@~oyuhdh-MtJHnPZVlt1w@1!q~-li)RgO`?C*gQgSHkk`=E-! zy)pH4t8Xuvy*Hp0&=oe7Rfm!Gg&;b?is-p3M{>O`x#VpJ4S3}5{e2R|w=u}%29qZ?(~0DrO{!RvyaTm3igfPadKd&l#*i~m@6cZ>;Uju8$v z7A-GFhNT2?fxcngu)&qG$v_$3lov5J2{QB34JKt@yIYlF>pX@s034I3EUxWQ@1wVV zz@Pi`PPc6eC<|Z!I>Qn=41dkr8ejYl&oEGoOh^(T9?3D2GssAS_@4ghF>-hqiwz&_ z72=}Kqm2DYB?^Z%wC?~0E;qQKg#U0M*NDvw6Jml8>p)52cg7yH8Nss@#)3#N zqfktpQPHCP4Uf&he%b~pAmriA`Wc*VuO4IPjJhg;OY{uJ5_rk$+&s4Mu`JuVK!tBl%riY!rPE)Ox9q`IxDk?8aarX6J@Cc?M#ew zFyoxc01M}bYlcxfSiteC8U{*Xl#@>d-c1QTW_(20qq(yP-{V035km&l%InS}y=8e> zEU~U)3H=qnj}fG;>K83QX>O)P#&OuYM(sA2pMq8K@a8F{>WgrJ1upIy(|Uw=LFuP| ziRz|%7mi^743WbW4p(5s3=0(;egUqLndcMRBU<6HzxUk8BZ6vy6 zp;$BFV=rtX#U0TJBZX-Acc1?`J?_j-o|+7XYBH_^d>S{J!g4G8>1v2PDgKzx;2$|N z6D!sDyjuvcy$K8&auY4vsOiIHmUQ5gfnHFeK*C745MSsdmFa>i*cE#)-BM&lEp+Aj zbiGk(GMl~ebJV6iKSb6j6f>}(p}<7L&l=FeJEISf32mFl)rE~8u^OHk;;Rk!QZuqz zLX12Pa(?Cz(mMf{S4eH z_25dW94PFPQ*7-(WU8=^JQ3i!9G~nN1|T2M_Z1CjS)(DZl{L9W|`j$whbeZQ|F<10V`Yk-q;b zZhvwZ^uh=Is7^+(W`YpmZ1WI&Rb+QF$_Dk6k?}a)&A zd>9t#gr-0chIsou1Yw{Z8S%Gu!&)L9DW=>Vy4AQ!5mzDv8gqievI-KnayMO#lgZV# zixm+>tOPk^kWdZ|1q3{Um3w34aJyh|yhL?{b`nQ@)sQ4#H9BauEgB>T(m9va>YamJ zih}L~F3ucn;mtZ;yl9q=&&pAi$UxQ#gOmr+9N4cK&EX}DN7^_}630Mj`}B*e5z`gK z)}jfm2ZL;%#<;vx*v`xz`zqa{2(Bzw+F>K8cIe{l?i~t;N<@aa%L8uzKam@aA$;#S z2rMh(Si9Qyq+a+|HtXomH4B1vR1NKdeiBwvv zS>#?kdNw`WANF2EKL!A&w9+-W5B9!i{gxoV>i9iF4obEjq10N8N zfur~~Lmz~jL`eGkfZ%n9eVPs@eQzV)bIgKskCY(30w2{ala0y!Z@`4Kg(sedkhH`S zpn-E$k7Cns@s-tD#<4a?gpcCB6CD7`RqClnD^4D#d}ilEwo>xG+vHe8v z4rjX)XgXE?K`|NK0#H}DrB=S2C3sz@RDxGM(i$)7S?cZuY#|&MHW#g$%0Spl-RVeOE*Cn;q1OL^q>+RVY+@wyAaP{4hH|M8+4gbhX4wJ4dWQ90q2xdCXX5QAUQS8?w`LE)E zpGGu_bqMl2=V2ZS$5UYo8Df#8>AHU$h|qnpwPG`FF-moO(OTUYH=ts@d7I6OMVsQn**D9)76>rWS7-g34zai3YlO+#}<^pk_5Lfa9HWvZEBy_ zo$zL^g}LHtyev+_eRv_Uy$V05>D$Eb57J0Q{M|}}XKDfCYpTE{u?jNA7-McBaWOmZ zi1^0t=gRqS1et#w;BJ(T9c%&6@VE)m4m7W$J>z|C$zG=+orn zdWpPI44VB>jG=`XGtQ&Sj})0_y;hbVi=mE9oKB8Uo=^Yw-;OSCO^;7-h|-z5k^HK{ z-b2ZiId)=#Axv|U`?p*20F1Y26@8U>GBJ>K+AKZ^qMb4tY=IQgT_KBjMCS;QXL5s* z@B!ozQEkEzzZSbpXq2o_McNntZBHMXG+|zDj&9%;j`wT$YKXV7BUX4!V2P)x3}#h_ z7Kdw1>z0@gWKpUQ7dX8* zRlJK>lVrS>;nh%%Qc@cOu0is_9DM^H1d$zRaGO@QtX^cXr8&}f9Q8&`b}PMD$o=B{ zu)ArALFWxedqOB#c)6^;mz#zvV1g@tFauj+wYf}2j~{M%ytSfNI2}%-5K%kR{%9|q z?xty&`h9VjO+vP>8Va40f%&=VLJAk{B21OAEbvhTD{!8b1CIG=lL{iKCxGY+GkfAh zT0bU9^Fgf5-UqEN(w~+5IxUJaTXJ+5j->CAU=4S|rl~@;c@cC#K&?+@TNr2ltiSuo zr7)Ay>^D9iC1L<{j8{?wi@bn| zs{=iC(m27Jf}w(MXh3XaOF4@Ooyb#P*p4y2}(j-Nan$H<2kwyPEtj=)-R@DFHG^hzkK zOpdvI`CDS+tCE=DDMDqC8tqbkh)Q)oL=v*h9PUhyNV@^o=nOHT=(K{8m)0z=c_SMk zIJ`SUpKNPL6}r_s1;rXvGQbFEu&D<#2*Va5%}g8XxI=f#v%KRhVHDX(z-6egJ0;sH zG7_3{tPP=z*V4gW*np-YNQx-InmuW;t#*ZVsJU}0{{TpY_Mp`dREt$elkjZmivtd6 z)CjLw&9HkzZKOdrDX}PY+ZmC0}0K|wB(g%em2?uQI_smEBa9ppFm5w$Nq zBNvMySY_?Yd+Op0fH&3Q`EOT51dxlc5{mi;=B50pQpH(@&QXTq%zTJh=ZM`$7{um< z1Q|?#Dv0q++$~m)q&;2}pAn~vY9$>BCM=_kFKYx6zuG?>hgHYN;DMP9`pEnXT`j06 z4jou*5W@_JJzKyzNwB7p$EKqLeLsW-d{OH6I~*YvVkuaFFMo49`SLf?hr<-dvBa>c z5;zN?7ay@HgeCIxB_103hWONYN;ipOw?d*vzW9i~faCi!+~7u+-v_=I_`dHVk6r0* zPL@dHfgK6*|MFMwbW{KjY7s4~CI6G6Y(WqlQlD0KuJ`D0|K&x?Zkq%T1j|@x&YB`? z?0<7=gp;8-enc16=3N`vl@)dyd!{7*>!l2IXrfu7 zm@yrO!GM!l1EH#kvDEHWJ0nZ>P@ZV!*vkJ>_<*HMg}y0ERRVab?DVto@);ZeOM(+d z4rEwKgfz~!_=>((IC_W8guRNdlPcJd0z|pRVOekrnMIPLvUqVtTt41f=T>H^OM-^t zg+BODlLW>0j)B=!k-P>AS*gg&DwV`fF{IMYq)%owd_m`pud{H0@XVmwL5rN5<_M+i z2h_;cJ^3sLmP8ntS?R8E-^+9 zgiU2R%2fL%YUNzCI&O=Bb|cNaidkU5z?vWw(C5`G4oI;@c+J%1$cTiEKMhy?XIfm$x+qYrLv-SX5w_&7)ep1!Q8^oz;tU3H&T ze>w~-a5@5{2}RnHl3=mCvK&2wsga2H22GGXLcV)6lE3g#Hifd(a^0zUb+1TcSJ9f< zt^(>F8hQ~N4mf|(QCFXY078+Hk~~zr(5^KJPHvsr69D;0PG}MpFEz;^VBsRuuSWp{ ziF}q3#2NI4>3W5wH0DDm4Vqm^KXa!B!uQ7Ifc#{ZV~>G7%dLe!ethT{W~DTC&i}_& zVMy;k@gmjj!jO(;FCBU%NVB69j>ySIbYLHMGYYv4TN6W(i%wrkkoKOT0n7h54gQUo=gacNSe=HET!QxA7(R} zl1|Z?^pDXIqqZp9h@fUviazX&?&U78L8i~bO~UF~qDh!l@hV}H5KaJIMy?$rrcI_z zez2jE>{kcPnvsdJxP?3?1v7gLL%=uZyodvSX6~Gs!qgPvMk{e}=$(Q(fJsWzF6T^k!UZA`t5J`+`KE#$8$21Muez0YA04VWWTb~kk&NUx(-lZ3cLj< zA+=}R1H~;^s0Q^w9Vr@CUfss%Yepd>K|Bh_T>^=IxZQ`t3t_?k<195k#&nn#lI!}Z zvvX@2zHbVR5DKL~D;d0cv3 z0}ff%XXuu-l`Dn8h;&;gQe5mwBkW8liVF)nx6WP!e#RSN>6LVW^u`gAH@;IXKwrwI zphaA;u(0(-U)fqtW|Wx@2E+1}ZnISB*Oh}+7**ap!V0I&m0xEjBS3PlKkY=m{dyC6 z#THj4m9$HkhMg}CdZre(bg2~JzJcOkFT9V?y`nFnK-q5*#ZWNrDLW;X?F3*H(-a~| zf74Jnsg#iYdP9bocf?+>P4ExlJ+?EO!_Rw(x8yEVUfT~SG%{6IPH{Z&T+^cjnMg#mP@Tc}0cfhv zp2=tcG;;?C7H?(ght1TLzaXNFTg?}`Os_G8_H>`SAl6+bQ$7QFYE#We@(=dCO{E^A zkIRCZN+>_$(jHD{0peZ#VRH4|3aQDoieUmX62e>S@Okb84b zDqKNU!a0#Rcqk_tnv!9>-pwTR!!kY@=2B!lA=5VXkj)9S7T2{?g6-ucC=;c6O1H(^ zCjbq0?eWaoBxr?Zb(K9TI~W8dBj;fiBk|~1y5-c_TKh!LXRTwqt)VMF6+s)?|HNU-ruIZ{iJmw7hX!0%ifgHur(caR^J zbwx_RAVq&Hx|AkkY;-ShBgoP;JrO|`kyE-6BZH{oE+@Eggt@*{@jAt=!5T-a2OP#J ze=0Gwpf(49W0BD^TG!RD=?tVK&tye6bpobd!py)zOi=6n3RuG!Rr*H~K zEPb9P_7p~DIv3q%O*l3ey8o8;gd}P#NIUnF9_P1138cu_0Sj%*8^-WkMi}!jh=7Y>2 z1h68L9H0M29Dco@H>xG0!lXEuU~BpKMbtLN5cvM^x6lcBK3(h+x{gDZMM=M?#(}c( zDA71nCOc8hKO-y5Xy^3bX-ANa60b_EDc}$;G34k zD_&yY6vnFIm7HW{DrSiFu1a=p6dSMn~~dphA*#In$r^j+)ISCcYj+dNYE=`FvqdAF8Mt>dK;&T!P~{pA+XQj30fA zNcxJsk+f>~{WbTOYV+bw>9jh*_QbGggS{VQb=mSiU!PHou;dKukRc*&qv3Lwm zur>BhNUDl}~m?yO7V` z3>UwQ@nOBXM{!3Q7=AHTEGMs1M?(5%QNNlTV86IlssX4WEK2k`lbou5WpVnY*{OlX9b^Q)(j|@9VbM9WME=9V zBm<B1&J#o^X4#Vbi`SM@re~q@px@EQzE57QsT4G(GTH|~*MrF|12^Ka; znU%gFg$QO$L6_N8X74U~+rhh=nUFSH@({O%dN2lIsTqXNab?1Xax5*zHDaZmUsQ`B z<{T7;-HD2AH@?EISO!Nwyn6%nc@LXyO;*r!5VBl<36{<}@&Xqr?Hi|sl-YmNi-n~j z2EFz*=UXoHEoIGmft^BG$J*!q&52sLe0Pekq)gvzFt`Msd>};8*uW8A#}Z>Vx%Ur0 zmJbBiZ0=8ve{%83Q?w5sUj&`besb|}zBixE=AS@Pu#ZdlQqqn+A@{{aG_|FX)Z|%l zOk7i}0)&QfKp{hl0xh6O@`wZNnms?iQg~hq3q!X-KJr0`g<&dk%HBQcwu$&7tL5nO zHmL-0M`ZRzbqb0V1qi+%oG!?chW4J@8@p{-f-!D|V834wcuw*NFj<6g@H+BUAovd@!j&X@?SBb z!4mLAQfG0hToA4pUP>ZZ1ykq;(%QwFL&qPG`Gmuj|-C zK<7w4gZ5+pQOGf_*Rrwh(g&nBu2hz|YRO*iJ>k(EBFpCJ=dSBZDPV@iBU@iV3BC6f zCxb0br~wH9Gv-*}o-XMCL(GwKHQTbT<(m6~LEzPUag2i>VLQQEINyW~V=}oGQ|qOW zNWDW0`Cy{ZZ;r^p+(g{K$<74$LCzuUIzhOo2j8A@vRvkobR`0akS|AX{g6NMA>~=# zUtBIo1P8_xp`+MPuuF!P&al=Kwk>AR0|_bGO$+J|96-uyGI?!a8S^`_hpZHwj*i9@ zZi*!XV?Z=ffZBz|;<@)VeX|wu?IDD%I+$GWxU@+^(E>EZAjp%fa3>&PXV!UQR6Pvo(-J4NEdA^ibB4n@}k>s%eCkKT&cYwxZ-``KA z(-jox{DI$aTtW(6Ss}E*0=!lfMM=+c$du3vmeeYe6T|ZIr2M8M5kMhZQR0J|gXpAK zDE*>7B_*r(8mG5xY$0Mu0CkT6?cF{~JzbL@#qh@J0(`K1(F#QKrB3oA$1U|a+c*R) zW6im<(j;qd7ljuro=%vi9%`qmRYjUW7v!;{xfC8C%uSv^u(iZ4I{~GG#2^tQzyh{E z)N#mNj<7m#)uqy)ci6iMn$J|vAa^#V~^XJbrvzdpgI92wcF`cnw=E8Bcf%%B1A^|F~Me0atqIe zY-9W#3P(aIB2R&_tOSdcYI@WYlt4?$3WpnSN$u%q(!g`VCg@MBp|{-01!^U8RKJ9; z;QPXWSCL38Bu8&wC1QJVNxl% zsW6}nQlAi5__D7-8A{x-ve&{gaD<}j_J2V0$WEB`6HNg(aI6KRc{?oHK5$ydR)u{~ zlWBB0qrolUD4ZaDR>ZM5wO^T?&xJrfvM4knbsm5q7X#v>wv4pgb41)gB|u6bY?e51 zaGVKB1Zhee?!TB*lv2T-}$`7g`UYLv6}%6E2|>} zs_aN!B^DP53wBFDSneA=voMUr{0oTS^xx+>2{bR6Si1*u(Ri~~W8bycgB+3vu2@Rd+D@ej6Pv~36zi)Vn`gCSm&628CRS>R@K8CEZnOAZI zH#4v4^oaOPHKKqAqFq};=XcA8G?CWo%!^k0tfy6w02rDIKt0aHKzJgTxZ#oXITX{w z8)hVgD$N$P?8OG>Bs-NeOA3=!zjZc%pcarbER#fRn5JB;%-EWuxmGUa;tDZ6dZ86h zrc5|6aPPFPL&t1r#4=#qYMGVNr3O%}cstxE%SL3ek61Qcu<<}ra5r2GBlslSf>cw8P?Eo%*hEn*?j-Db z`%X=5MAbEWWSIrT@=k4D2QOk2D;r+D?6-0V7HgU0@i0w0;xvKb0la6k%8o5hJD z-Rqz*!qYF-W*lK_hT^a%*C#kD1FYxWgDm69d;l=?(%+j&4hf}YT1oWgMm1%U?ols* zy&BILLpgS0R39xAF%xLH}IC07NNPB(VOM;OQw zbW!Cq(?Hk*(>46noUH5#1Q>}>=fR(%8qpYwL^bOfI`5|@(;Gdt2}1@ZJP1gmEoF@{ z)>G%6O%DRD=+^b%*85N8smeX?c@6HxlHp1j#-#QXTHJ)OzJ{J>1BLs1_I$GYMv5QD zCn+D=2Dk>P$-!lk^7z$*U7}A1MdKQqQog3?!S$rKj8sY9<1gwD1Fz zT^i@`rf%nHzSTkL-}FKq))Ld3gSLb*vZtwM3VXaUhj?7@0SFJq>h!O5Xu%3vz?jkT z^k4$d)aL=t1nm8Z-V_6+|F$lrX0)7rFL@DYsR&sq9NE3S z@#$XzD1Gi)sEgFVtXbQFDmnGJQ7Z0V8u7)50%o0h6lj54eJRyfHM%&v$KlSm^);5nNv7hgxY2JFhq_xz| z;W!YByvEtd2FgurXFTD8$#O(FgAo+5c>Wq}lKyqT!=s3}G7K4H zsgJZ-)?1~L*gTfUs)nQ?#9ka?ym87n$}Gu<0c}Qj&k|Xrv}Gq+Hxs&Yd@Z?!2jBPz z-*P{ZJgHe9`x_JiQ>)H+LUF4NEArP+V`B^$!DQMe7hGQ|Vmw zy;a8AT#hhfAuH;0{YJ+>F4BhSnF*BQA0(( zexrG;7cKN<84&O6t9_}$-1AKoikqvkuF~e$;zmYpCJcPorJ`1gue%RJi1&W}48}n| zT^6Cv_?_HP@(PgdS9+bm-+d~xdn#Fyf#_=MfV4L1M(YO?cec<2i1SxidE|U#?+IPE zIe3z%&bGV}aJBMRkUyLzbmxnInLQpz`^*imhQa%SwJ#KI;X~u95MR>E35+cb2Ll=0 zaAI_p%H9+`0rYoPIuN=~HCJ#hX)CxeI$w`y%?k?*{HNOt4{J#r`~V0b-&!;UtAqoj z;5^CBI@(CvBm{`~0v$;ZW<}^pAr(g~CbgQDSig5Dl+9Pj{ZCG0Cz1;qW=?U}*l7b} zi;s`9=d_8LdrV(eOeO+6r_&Bn<^`vlAg$Y6s6SCcpa^{~XInkRI`6 z;)@H#UrTGG&okp8i%BxSveX z!CXT9>a8S`0s;VLe~zY{VM6;8bh5DYYaI|>|NralTzaf5f-ro3%7laj5;N?HA@M?# z1dS1JOSlX$$qX3IFo4EHS8iMy-MZ8mT0etiA~9Ji`FH_L;P)^iN!UWjPR~*F^fT_3fC; zly3Nm*&#wX)0N(exeUgXgBW*m#9~px&h2N_2xIzA2zH%9SU<+D#+=EYk@n;oy`Hcj zpsva6puv*{gtn&?5zJuQOtK6|*`OiY61WudIkj4$DVsO@e0y9_K?-ld}2>HEMAfsybc{m^GJo z)}Gs2Qc{6N(Ay-1<4Ry`OpnT1Lf<7<=ei+n??=@HAk2Jg-IZi>O-l6h4mnYXC!!O# z6x*$nc<>3CmALlt0O_21Hw-;Au)1L zDBR;9NcD&4K%L1rcdU&1o@n~hr%%`K*PWjZr$=G(h44{M6;D^>^YPAw%f98z;dHhn z*f^0=b0p>!B~H~|4iqS);2ehFkCKMvp!^+d7sne`kmdsu$V3u#!o3$zp)$jl{mw6i zNGg*_EtB?K&SxaSjrtpOWc^NlOdVczh!qPY&_@Z7LqF06D^c(sw5qo%j8+)yS)d7D z`KrUChA#SSntF8Qb(Q#Nl?XyZk#V{#A8KAIqJ8HHqGS0LpiFYiib`l{W!|!4Q-pu* z96844E&AFqTRGq35*G+F6*ZnTY?p|RyR!X=PUyc;RzjLd}T}pJ5O> zmapm0NWC`n5k2epLh%7T@X03i3d=|LcJ_P5L}HZ{DaV|%03=1PYu)txl>fuINL(DS z@zuOxuuwC_EW_z_&r!XRB*2(Dk_<_S#1Ak}nn;VCv}6;x-obrE!-F$8!&!H_@f9+9 zJg3xJ>d*nX9A8ZT-etf6F(UBBmiYTkWlO4Q;1>dzIlv(_uY3nVz+;{Kgz?d$#D|ed zClEXctAHQM28oj2gRcn@P>*JkyL+HgxQOZ##PY8_2F2zT}6FB$92rCUXZ zp^{=Y>`_2bSShx&JfZN50$0iJ@pkT)no~EsO5&g*DBRbPD1az@27lpAB3Dw^-8#$^ zk#QnO?2IxN=FS+QJp2uUAC+*&VJ`{sehikUf;6HZc_DM*1Z}r;Os!>NMR%1fTuCru z1X)w7Q)o%AVJ#$k3BxLOm&Q@q2h~j05uS5dWt(|Hz=Cq2G3DI4Dy37fVw#--UOLu` zy=d)!0(s~FTB+Gnv0+nq;0u@u3a5+cGPrEC?Le)g*J`_6_M5F%hDZr@S{|kxDlsWG zb8@BAhp(J?3ygBy?uHSqL@A2~+kxp>&#vpprPM$Hdmgy&d&b^ME!l zImL+jg$m1Q7B)S?TZD}K?6HnQy?#ZI1IMhL8JNa@Y7O1bo{P`X^Fli5%rGZoUIsmS z2J@b@igfRScq~jfeZ%^KsrJJx!Z%8-X-T*C2=l7($ODWRht!G!yE^&L+211P8k3ND4!s9Y<}pW9*%6VF zK9Fp6L);HF*M}3K8KPO~ z#Fjei%5Gy-^Eaq5X$g)@23f8KSnB6<>n9pzQxw<5q7fr zA@JuF^Wwa|GnWGJc!Q1ZWic`I?utWTFn$(X;-RnF8}dIxb1Jm2H_9qckIT|1suxyu zfEDtSoZdb^Zj86Bf@{TF&0?^(u(_ExYG~2Fh$v+Cg%o2!3~JHg9=;BF>#RMXW4}a` zg~LP8_qDkUhFuxtvxxA8W|P*uC=uo~(m@F6ryU7qitkoZKb+}%^@sy>=SBexRP3YkBO2ZSvaGmR zm3oM+tM&+H(rOA`Gdp%T%G_bFm_&KX^A8wr>|1NX_)Ix~RM++W=ONXVR+0T;me2xm zB~n+(Yp$xj$!%z)Rw%(uz@Iy+WOQ646|yjML(>_f1(L*hE0K$Yt)6zde~<}IWeN8%=82#*fN;5J#31Fq9Ykp!pUq(3nG4I{H9 zmu6NCz!1F2ZCukYTkVn8kG@@#j5>V61U3DlfE`3gcwh98yNXxFXCW z((Pb>*bcv9pj&(%$Tkco%;l_;oY(1xVMoB1p`Z3N13%U1f!OLmB!@WJ#%=lv@ZAjr zh)~tbUokFCyDTK5D}~GcTib&Rt`{GHIAY}k^7t8iJ$*8IKYPvz=IlR*1!xxk-_Ol$ z@E1~-zC0C; zP9SfXQJ>6EfFDsmb<8YJxr$&VNwS4+dAQ}mu`oFtXjirSbqilz)jcW}A7w3@D8{eG3`+RE4AGaKy7d za%*lzKuEGNSzP<~xYY+PXZpeaVgh;x6W-lFNcW!5{=Dh$Pa&nWflG}Z)(QXi;)47r zaIZ)@NaDdeezM0;G0CqtziIJgWpge7P5`tejIa1G7h+JVU7Njl{l~Yje)#Fti=P*- k|N8FV-+%o3&lmsv^!?g7TBfUeh{|!IS;oVSt@Dfj0L)r#`v3p{ diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index 8fa5f634e..c69847369 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:11\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-02-19 03:19\n" "Last-Translator: Mouse Reeve \n" "Language-Team: French\n" "Language: fr\n" @@ -54,19 +54,19 @@ msgstr "Le mot de passe ne correspond pas" msgid "Incorrect Password" msgstr "Mot de passe incorrect" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "La date de fin de lecture ne peut pas ĆŖtre antĆ©rieure Ć  la date de dĆ©but." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "La date dā€™arrĆŖt de lecture ne peut pas ĆŖtre antĆ©rieure Ć  la date de dĆ©but." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "La date dā€™arrĆŖt de lecture ne peut pas ĆŖtre dans le futur." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "La date de fin de lecture ne peut pas ĆŖtre dans le futur." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Rapport gĆ©nĆ©rĆ© automatiquement" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "En attente" @@ -258,17 +259,24 @@ msgstr "AbonnĆ©(e)s" msgid "Private" msgstr "PrivĆ©" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Actif" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "TerminĆ©" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Interrompu" @@ -284,6 +292,10 @@ msgstr "Erreur lors du chargement du livre" msgid "Could not find a match for book" msgstr "Impossible de trouver une correspondance pour le livre" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Ɖchec" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratuit" @@ -359,7 +371,7 @@ msgstr "Critiques" msgid "Comments" msgstr "Commentaires" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citations" @@ -461,7 +473,7 @@ msgstr "Svenska (SuĆ©dois)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainien)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (chinois traditionnel)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Oh nonā€‰!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,7 +494,7 @@ msgstr "Autorisation refusĆ©e" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Vous ne disposez pas des droits d'accĆØs pour accĆ©der Ć  cette page ou pour toute action. Votre niveau d'accĆØs est :%(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." @@ -498,7 +510,7 @@ 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 "" +msgstr "Fichier trop volumineux" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." @@ -964,6 +976,7 @@ msgstr "Enregistrer" #: 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" @@ -981,6 +994,7 @@ msgstr "Le chargement des donnĆ©es se connectera Ć  %(source_name)sImport/Export page of your Goodreads account." msgstr "Vous pouvez tĆ©lĆ©charger vos donnĆ©es Goodreads depuis la page Import/Export de votre compte Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Fichier de donnĆ©esā€Æ:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Importer les critiques" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "ConfidentialitĆ© des critiques importĆ©esā€Æ:" -#: 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 "Importer" -#: 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 "Vous avez atteint la limite dā€™imports." -#: 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 "Les importations sont temporairement dĆ©sactivĆ©es, merci pour votre patience." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Importations rĆ©centes" -#: 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 "Date de CrĆ©ation" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "DerniĆØre Mise Ć  jour" -#: 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 "ƉlĆ©ments" -#: 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 "Aucune importation rĆ©cente" @@ -2966,7 +2994,8 @@ msgid "Refresh" msgstr "Actualiser" #: 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 "ArrĆŖter l'import" @@ -3064,6 +3093,133 @@ msgstr "Cette importation est dans un ancien format qui n'est plus pris en charg msgid "Update import" msgstr "Mettre Ć  jour l'importation" +#: 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 "Ɖtape 1 :" + +#: 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 "Ɖtape 2 :" + +#: 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 "Profil utilisateurĀ·rice" + +#: 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 "ParamĆØtres utilisateur" + +#: 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 "Votre fuseau horaire" + +#: 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 "Bloc utilisateur" + +#: 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 "Commentaire sur les livres" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Listes des livres" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Listes enregistrĆ©es" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3240,7 @@ msgid "Reject" msgstr "Rejeter" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "ƉlĆ©ments dont l'importation a Ć©chouĆ©" @@ -3747,8 +3903,8 @@ msgstr "%(related_user)s vous a invitĆ© Ć  #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Nouveau soumission requĆŖte attente de la rĆ©ponse" +msgstr[1] "%(display_count)s nouveau soumission de plusieurs requĆŖtes attente de la rĆ©ponse" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4020,16 @@ msgstr "a changĆ© le nom du groupe %(group_name)s msgid "has changed the description of %(group_name)s" msgstr "a changĆ© la description du groupe %(group_name)s" +#: 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 "Supprimer les notifications" @@ -4107,7 +4273,7 @@ msgstr "Supprimer l'alias de redirection" #: 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 "Comptes bloquĆ©s" @@ -4242,14 +4408,66 @@ msgstr "Niveau de confidentialitĆ© des messages par dĆ©faut :" 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 "Vous souhaitez protĆ©ger vos Ć©tagĆØresā€Æ? Vous pouvez dĆ©finir un niveau de visibilitĆ© diffĆ©rent pour chacune dā€™elles. Allez dans Vos Livres, choisissez une Ć©tagĆØre parmi les onglets, puis cliquez sur Ā«ā€ÆModifier lā€™Ć©tagĆØreā€ÆĀ»." +#: 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "CrĆ©er un fichier d'exportation" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Fichiers rĆ©cents" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Date" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Taille" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "TĆ©lĆ©charger vos rĆ©sultats" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Export CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Exporter la liste des livres" #: 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 "Votre export comprendra tous les livres sur vos Ć©tagĆØres, les livres que vous avez critiquĆ©s, et les livres ayant une activitĆ© de lecture." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4485,7 @@ msgstr "Migrer le compte" msgid "Data" msgstr "DonnĆ©es" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Export CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relations" @@ -4762,7 +4976,8 @@ msgid "Active Tasks" msgstr "TĆ¢ches actives" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5156,9 +5371,14 @@ msgid "No instances found" msgstr "Aucune instance trouvĆ©e" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "ArrĆŖter l'importā€Æ?" +#: 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 "DĆ©sactiver le lancement de nouvelles importations" @@ -5171,70 +5391,107 @@ msgstr "Ceci n'est destinĆ© Ć  ĆŖtre utilisĆ© que lorsque la situation des impor msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Tant que les importations seront dĆ©sactivĆ©es, les utilisateurā‹…ices ne pourront pas en commencer de nouvelles, mais celles existantes ne seront pas affectĆ©es." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "DĆ©sactiver les importations" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Les utilisateurs ne peuvent pas commencer de nouvelles importations" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Activer les importations" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limiter le nombre d'imports" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Certains utilisateurs peuvent essayer d'importer un grand nombre de livres, ce que vous souhaitez limiter." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Mettez la valeur Ć  0 pour ne pas imposer de limiter." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "DĆ©finir la limite d'import Ć " -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "livres tous les" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "jours." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "DĆ©finir la limite" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "heures" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "Importer le livre" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "TerminĆ©" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Utilisateur" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Date de Mise Ć  jour" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "ƉlĆ©ments en attente" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "ƉlĆ©ments rĆ©ussis" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Aucun import correspondant trouvĆ©." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "Importation des utilisateurs" + #: 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 @@ -5775,11 +6032,11 @@ msgstr "Supprimer le thĆØme" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Essai thĆØme" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "ThĆØme Broken" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" @@ -5912,7 +6169,7 @@ 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 "" +msgstr "Ce compte n'est pas visible par les utilisateurs ordinaires et n'a pas de page de profil." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6047,17 +6304,15 @@ msgstr "CrĆ©er une Ć©tagĆØre" msgid "Edit Shelf" msgstr "Modifier lā€™Ć©tagĆØre" -#: 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: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:66 +msgid "Import Books" +msgstr "Importer des livres" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6411,7 +6666,7 @@ 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 "" +msgstr "%(user)s sont dĆ©placĆ©s vers %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index 132cd95847f5dd8137eccc9e0ed3bd1f5f67dd33..0ac268fcc2150d1ef5664cd1e80f684512da8693 100644 GIT binary patch delta 42651 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 V+(y0eA6IfWkuHuGvi=?S_#Y)eauxsp delta 32155 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\n" "Language-Team: Galician\n" "Language: gl\n" @@ -54,19 +54,19 @@ msgstr "O contrasinal non concorda" msgid "Incorrect Password" msgstr "Contrasinal incorrecto" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "A data final da lectura non pode ser anterior Ć” de inicio." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "A data do abandono da lectura non pode ser anterior Ć” de inicio." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "A data de abandono da lectura non pode estar no futuro." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "A data de fin da lectura non pode ser futura." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Denuncia creada automĆ”ticamente" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendente" @@ -258,17 +259,24 @@ msgstr "Seguidoras" msgid "Private" msgstr "Privado" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Activa" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Completa" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Detida" @@ -284,6 +292,10 @@ msgstr "Erro ao cargar o libro" msgid "Could not find a match for book" msgstr "Non se atopan coincidencias para o libro" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Fallou" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "GratuĆ­to" @@ -359,7 +371,7 @@ msgstr "RecensiĆ³ns" msgid "Comments" msgstr "Comentarios" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citas" @@ -461,7 +473,7 @@ msgstr "Svenska (Sueco)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (UcraĆ­no)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (ChinĆ©s tradicional)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Vaites!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Permiso denegado" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Non tes permiso para ver esta pĆ”xiina ou realizar esta acciĆ³n. O teu nivel de permisos Ć© %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Se cres que deberĆ­as ter acceso, por favor contacta coa administraciĆ³n deste servidor BookWyrm." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,18 @@ msgstr "Parece que non existe a pĆ”xina solicitada!" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "Ficheiro demasiado grande" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "O ficheiro que estĆ”s a subir Ć© demasiado grande." #: 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 "" +msgstr "\n" +"Podes intentalo usando un ficheiro mĆ”is pequeno, ou pedir Ć” administraciĆ³n do teu BookWyrm que aumente o axuste DATA_UPLOAD_MAX_MEMORY_SIZE. " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +977,7 @@ msgstr "Gardar" #: 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" @@ -981,6 +995,7 @@ msgstr "Ao cargar os datos vas conectar con %(source_name)s e c #: 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 "Confirmar" @@ -1480,9 +1495,12 @@ msgid "Domain" msgstr "Dominio" #: 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 @@ -1494,7 +1512,8 @@ msgstr "Estado" #: bookwyrm/templates/book/file_links/edit_links.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/federation/instance.html:112 -#: bookwyrm/templates/settings/imports/imports.html: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:108 msgid "Actions" @@ -1558,7 +1577,7 @@ msgstr "%(pages)s pĆ”xinas" #: bookwyrm/templates/book/publisher_info.html:38 #, python-format msgid "%(languages)s language" -msgstr "idioma %(languages)s" +msgstr "Idioma %(languages)s" #: bookwyrm/templates/book/publisher_info.html:63 #, python-format @@ -2547,7 +2566,7 @@ msgstr "Lector de cĆ³digos de barras" #: bookwyrm/templates/guided_tour/home.html:102 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 "" +msgstr "Usa as ligazĆ³ns Listas, Descubrir e Os teus libros para ter suxestiĆ³ns de lecturas e ver o que acontece neste servidor, ou para ver os libros do teu catĆ”logo!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2598,7 @@ msgstr "NotificaciĆ³ns" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Podes acceder ao teu perfil, directorio de usuaria, mensaxes directas e axustes premendo no teu nome neste menĆŗ." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2826,111 +2845,121 @@ msgid "No activities for this hashtag yet!" msgstr "AĆ­nda non hai actividade para este cancelo!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "Importar libros" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importar Lista de Libros" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "Non Ć© un ficheiro CSV vĆ”lido" -#: 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] "Actualmente podes importar %(display_size)s libros cada %(import_limit_reset)s dĆ­a." msgstr[1] "Actualmente podes importar %(display_size)s libros cada %(import_limit_reset)s dĆ­as." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "AĆ­nda podes importar %(display_left)s libros." -#: 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 "De media, Ć”s importaciĆ³ns recentes levoulles %(hours)s horas." -#: 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 "De media, Ć”s importaciĆ³ns recentes levoulles %(minutes)s minutos." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Fonte de datos:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Podes descargar os teus datos de Goodreads desde a pĆ”xina de ExportaciĆ³n/ImportaciĆ³n da tĆŗa conta Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Ficheiro de datos:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "IncluĆ­r recensiĆ³ns" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Axuste de privacidade para recensiĆ³ns importadas:" -#: 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 "Importar" -#: 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 "Acadaches o lĆ­mite de importaciĆ³ns." -#: 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 "As importaciĆ³ns estĆ”n temporalmente desactivadas; grazas pola paciencia." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "ImportaciĆ³ns recentes" -#: 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 "Data de creaciĆ³n" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "ƚltima actualizaciĆ³n" -#: 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 "Elementos" -#: 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 "Sen importaciĆ³ns recentes" @@ -2966,7 +2995,8 @@ msgid "Refresh" msgstr "Actualizar" #: 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 "Deter a importaciĆ³n" @@ -3064,6 +3094,133 @@ msgstr "Esta importaciĆ³n ten un formato antigo xa non soportado. Se queres inte msgid "Update import" msgstr "Actualizar importaciĆ³n" +#: 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 "Importar Conta BookWyrm" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "Non Ć© un ficheiro vĆ”lido de importaciĆ³n" + +#: 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 "Se queres migrar estados (comentarios, recensiĆ³ns ou citas) debes ou ben configurar esta conta como un alias da conta da que estĆ”s migrando, ou mover esa conta a esta, antes de importar os teus datos como usuaria." + +#: 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 "Actualmente podes importar unha usuaria cada %(user_import_hours)s horas." + +#: 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 "PoderĆ”s volver a importar un ficheiro de usuaria en %(next_available)s" + +#: bookwyrm/templates/import/import_user.html:41 +msgid "Step 1:" +msgstr "Paso 1:" + +#: 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 "Escolle un ficheiro de exportaciĆ³n creado noutra conta BookWyrm. O formato do ficheiro ten que ser .tar.gz." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "Paso 2:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "Desmarca calquera opciĆ³n dos datos que non queiras incluĆ­r ao facer a importaciĆ³n." + +#: 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 "Perfil da usuaria" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Sobrescribir nome pĆŗblico, resumo e avatar" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "Axustes de usuaria" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Sobrescribe:" + +#: bookwyrm/templates/import/import_user.html:86 +msgid "Whether manual approval is required for other users to follow your account" +msgstr "Se Ć© requerida a aprobaciĆ³n manual das solicitudes de seguimento" + +#: bookwyrm/templates/import/import_user.html:89 +msgid "Whether following/followers are shown on your profile" +msgstr "Se se mostran no teu perfil os seguimentos/seguidoras" + +#: bookwyrm/templates/import/import_user.html:92 +msgid "Whether your reading goal is shown on your profile" +msgstr "Se se mostra o teu obxectivo de lectura no perfil" + +#: bookwyrm/templates/import/import_user.html:95 +msgid "Whether you see user follow suggestions" +msgstr "Se se mostrarĆ”n suxestiĆ³ns de seguimento" + +#: bookwyrm/templates/import/import_user.html:98 +msgid "Whether your account is suggested to others" +msgstr "Se a tĆŗa conta serĆ” suxerida a outras persoas" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "A tĆŗa zona horaria" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "Os axustes de privacidade por defecto para as publicaciĆ³ns" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Seguidoras e seguimentos" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Bloqueos de usuarias" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Obxectivos de lectura" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Sobrescribe os obxectivos de lectura para todos os anos incluĆ­dos no ficheiro de importaciĆ³n" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Estantes" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Historial de lectura" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "RecensiĆ³ns de libros" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Comentarios sobre libros" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Listas de libros" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Listas gardadas" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3241,7 @@ msgid "Reject" msgstr "Rexeitar" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Elementos fallidos" @@ -3747,8 +3904,8 @@ msgstr "%(related_user)s convidoute a unir #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Nova solicitude de convite agardando resposta" +msgstr[1] "%(display_count)s novas solicitudes de convite agardando resposta" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4021,16 @@ msgstr "cambiou o nome a %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "cambiou a descriciĆ³n de %(group_name)s" +#: bookwyrm/templates/notifications/items/user_export.html:14 +#, python-format +msgid "Your user export is ready." +msgstr "Xa estĆ” lista a exportaciĆ³n de usuaria." + +#: bookwyrm/templates/notifications/items/user_import.html:14 +#, python-format +msgid "Your user import is complete." +msgstr "Completouse a importaciĆ³n da usuaria." + #: bookwyrm/templates/notifications/notifications_page.html:19 msgid "Delete notifications" msgstr "Eliminar notificaciĆ³ns" @@ -4107,7 +4274,7 @@ msgstr "Eliminar alcume" #: 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 "Usuarias bloqueadas" @@ -4242,14 +4409,66 @@ msgstr "Privacidade por defecto:" 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 "Queres privacidade para os estantes? Podes establecer individualmente o nivel de privacidade dos estantes. Vai a Os teus libros, elixe un estante das secciĆ³ns, e preme en \"Editar estante\"" +#: 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 "Exportar Conta 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 "Podes crear aquĆ­ o ficheiro de exportaciĆ³n. Con este ficheiro podes migrar os teus datos a outra conta BookWyrm." + +#: bookwyrm/templates/preferences/export-user.html:17 +msgid "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "

    O ficheiro incluirĆ”:

    • Perfil de usuaria
    • Moitos dos axustes de usuaria
    • Obxectivos de lectura
    • Estantes
    • Historial de lectura
    • RecensiĆ³ns de libros
    • Estados
    • As tĆŗas listas e listas gardadas
    • As usuarias que segues e bloqueas

    O ficheiro non incluirĆ”:

    • Mensaxes directas
    • Respostas aos teus estados
    • Grupos
    • Favoritos
    " + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "Na tĆŗa nova conta BookWyrm podes elexir o que importar: non tes que importar todos os elementos exportados." + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "Se desexas migrar todos os estados (comentarios, recensiĆ³ns ou citas) tes que ou ben establecer a conta que estas a mover como un alias de esta, ou ben mover esta conta Ć” nova conta, antes de importar os teus datos de usuaria." + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "PoderĆ”s crear un novo ficheiro de exportaciĆ³n en %(next_available)s" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Crear ficheiro de exportaciĆ³n de usuaria" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "ExportaciĆ³ns recentes" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "Os ficheiros de exportaciĆ³n mostrarĆ” 'completo' cando estean preparados. PoderĆ­a levarlle un anaco. Preme na ligazĆ³n para descargar o ficheiro." + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Data" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "TamaƱo" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Descarga a exportaciĆ³n" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "ExportaciĆ³n CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Exportar Lista de Libros" #: 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 "A exportaciĆ³n incluirĆ” todos os libros dos estantes, libros que recensionaches e libros con actividade lectora." +msgid "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." +msgstr "O ficheiro CSV de exportaciĆ³n incluirĆ” todos os libros dos teus estantes, libros que recensionaches e libros con actividade lectora.
    ƚsao para importalo en servizos como Goodreads." #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4486,7 @@ msgstr "Migrar Conta" msgid "Data" msgstr "Datos" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Exportar CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "RelaciĆ³ns" @@ -4705,7 +4920,7 @@ msgstr "Colas" #: bookwyrm/templates/settings/celery.html:26 msgid "Streams" -msgstr "" +msgstr "TransmisiĆ³ns" #: bookwyrm/templates/settings/celery.html:32 msgid "Broadcast" @@ -4763,7 +4978,8 @@ msgid "Active Tasks" msgstr "Tarefas activas" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5157,9 +5373,14 @@ msgid "No instances found" msgstr "Non hai instancias" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Deter a importaciĆ³n?" +#: 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 "Esta acciĆ³n deterĆ” a importaciĆ³n antes de estar completa e non se pode desfacer" + #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" msgstr "Desactivar realizar novas importaciĆ³ns" @@ -5172,70 +5393,107 @@ msgstr "Isto pretende ser Ćŗtil cando algo funciona realmente mal coas importaci msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Cando estĆ”n desactivadas as importaciĆ³ns as usuarias non poderĆ”n realizar novas importaciĆ³ns, pero as existentes non se verĆ”n afectadas." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." +msgstr "Este axuste evita poder importar libros e usuarias." + +#: bookwyrm/templates/settings/imports/imports.html:37 msgid "Disable imports" msgstr "Desactivar importaciĆ³ns" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "As usuarias actualmente non poden realizar importaciĆ³ns" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Activar importaciĆ³ns" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limitar o nĆŗmero de importaciĆ³ns" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Algunhas usuarias poderĆ­an querer importar un nĆŗmero enorme de libros, podes poƱerlle lĆ­mite." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Establece un valor de 0 para non poƱer un lĆ­mite." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Establece un lĆ­mite de" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "libros cada" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dĆ­as." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Establecer" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "Limitar a frecuencia con que se pode importar e exportar" + +#: 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 "Algunhas usuarias poderĆ­an intentar importar ou exportar usuarias con moita frecuencia, poderĆ­as querer limitalas." + +#: bookwyrm/templates/settings/imports/imports.html:111 +msgid "Restrict user imports and exports to once every " +msgstr "Permitir importaciĆ³n e exportaciĆ³n de usuarias a unha vez cada " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "horas" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Cambiar lĆ­mite" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "ImportaciĆ³n de libros" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Completada" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Usuaria" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Data de actualizaciĆ³n" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Elementos pendentes" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Elementos correctos" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Non se atopan importaciĆ³ns que concorden." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "ImportaciĆ³n de usuarias" + #: 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 @@ -5722,7 +5980,7 @@ msgstr "Establecer decorado por defecto para a instancia" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Un dos teus decorados semella estar estragado. Se escolles ese decorado tamĆ©n estragarĆ”s a aplicaciĆ³n." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5776,15 +6034,15 @@ msgstr "Eliminar decorado" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Probar decorado" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Decorado estragado" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Cargado correctamente" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5833,7 +6091,7 @@ msgstr "Non establecido" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Esta conta Ć© o actor da instancia que asina as solicitudes HTTP." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5905,15 +6163,15 @@ msgstr "AcciĆ³ns da usuaria" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Este Ć© o actor administrador da instancia" #: 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 "" +msgstr "Non debes borrar ou desactivar esta conta xa que Ć© crĆ­tica para o funcionamento do servidor. Este actor asina as solicitudes GET saĆ­ntes para unha interacciĆ³n fluĆ­da con servidores ActivityPub seguros." #: 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 "" +msgstr "Esta conta non Ć© descubrible polas usuarias comĆŗns e non ten pĆ”xina de perfil." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6048,17 +6306,15 @@ msgstr "Crear estante" msgid "Edit Shelf" msgstr "Editar estante" -#: 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 da usuaria" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os libros" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importar libros" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6412,7 +6668,7 @@ msgstr "Seguir na nova conta" #: bookwyrm/templates/snippets/moved_user_notice.html:7 #, python-format msgid "%(user)s has moved to %(moved_to_name)s" -msgstr "" +msgstr "%(user)s migrou a %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index 77a2bcec93637a599b10a9924ed8bd5183a0b66e..5a1ee0a733875c23ab0fa25d85a957d7282a0886 100644 GIT binary patch delta 44590 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 SJlE)~$y}p7kzSm&EB^tc{R?*h delta 31890 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\n" "Language-Team: Italian\n" "Language: it\n" @@ -54,19 +54,19 @@ msgstr "La password non corrisponde" msgid "Incorrect Password" msgstr "Password errata" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "La data di fine lettura non puĆ² essere precedente alla data di inizio." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "La data di fine lettura non puĆ² essere precedente alla data di inizio." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "La data d'interruzione della lettura non puĆ² essere nel futuro." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "La data di fine lettura non puĆ² essere precedente alla data d'inizio." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Rapporto generato automaticamente" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "In attesa" @@ -258,17 +259,24 @@ msgstr "Followers" msgid "Private" msgstr "Privata" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Attivo" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Completato" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Interrotto" @@ -284,6 +292,10 @@ msgstr "Errore nel caricamento del libro" msgid "Could not find a match for book" msgstr "Impossibile trovare una corrispondenza per il libro" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Non Riuscita" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Libero" @@ -321,7 +333,7 @@ msgstr "Messaggio inviato al segnalatore" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "Utente segnalato contattato" #: bookwyrm/models/report.py:89 msgid "Suspended user" @@ -333,11 +345,11 @@ msgstr "Utente riattivato" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Livello di autorizzazione dell'utente modificato" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "Account utente eliminato" #: bookwyrm/models/report.py:93 msgid "Blocked domain" @@ -345,11 +357,11 @@ msgstr "Dominio bloccato" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "Dominio autorizzato" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "Elemento rimosso" #: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -359,7 +371,7 @@ msgstr "Recensioni" msgid "Comments" msgstr "Commenti" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citazioni" @@ -433,7 +445,7 @@ msgstr "Lietuvių (Lituano)" #: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Nederlands (Olandese)" #: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" @@ -461,7 +473,7 @@ msgstr "Svenska (Svedese)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (ucraino)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Cinese Tradizionale)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Oh no!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Permesso negato" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Non hai i permessi per visualizzare questa pagina o eseguire questa azione. Il tuo livello di autorizzazione utente ĆØ %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Se pensi di avere accesso, parla con il tuo amministratore del server BookWyrm." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ msgstr "La pagina richiesta non esiste!" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "File troppo grande" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "Il file che stai caricando ĆØ troppo grande." #: 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 "" +msgstr "\n" +" Puoi provare a usare un file piĆ¹ piccolo, o chiedere al tuo amministratore del server BookWyrm di aumentare l'impostazione DATA_UPLOAD_MAX_MEMORY_SIZE.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +978,7 @@ msgstr "Salva" #: 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" @@ -981,6 +996,7 @@ msgstr "Il caricamento dei dati si collegherĆ  a %(source_name)sLists
    , Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!" -msgstr "" +msgstr "Usa le liste , Discover, e I tuoi Libri link per scoprire i suggerimenti di lettura e gli ultimi eventi su questo server, o per vedere i tuoi libri catalogati!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,7 +2599,7 @@ msgstr "Notifiche" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Il tuo profilo, la directory utente, i messaggi diretti e le impostazioni possono essere accessibili facendo clic sul tuo nome nel menu qui." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2826,111 +2846,121 @@ msgid "No activities for this hashtag yet!" msgstr "Non c'ĆØ ancora nessuna attivitĆ  per questo hashtag!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "Importa libri" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importa Elenco Libri" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "Non ĆØ un file di csv valido" -#: 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[0] "Attualmente, puoi importare libri %(display_size)s ogni giorno %(import_limit_reset)s." msgstr[1] "Al momento puoi importare %(import_size_limit)s libri ogni %(import_limit_reset)s giorni." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." -msgstr "" +msgstr "Ti rimane %(display_left)s." -#: 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 "In media, le importazioni recenti hanno richiesto %(hours)s ore." -#: 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 "In media, le importazioni recenti hanno richiesto %(minutes)s ore." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Sorgenti dati:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Puoi scaricare i tuoi dati Goodreads dalla pagina \"Importa/Esporta\" del tuo account Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Dati file:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Includi recensioni" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Impostazione della privacy per le recensioni importate:" -#: 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 "Importa" -#: 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 "Hai raggiunto il limite per le importazioni." -#: 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 "Le importazioni sono temporaneamente disabilitate; grazie per la pazienza." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Importazioni recenti" -#: 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 "Data Creazione" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Ultimo Aggiornamento" -#: 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 "Elementi" -#: 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 "Nessuna importazione recente" @@ -2966,7 +2996,8 @@ msgid "Refresh" msgstr "Aggiorna" #: 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 "Interrompi importazione" @@ -3064,6 +3095,133 @@ msgstr "Questa importazione ĆØ in un vecchio formato che non ĆØ piĆ¹ supportato. msgid "Update import" msgstr "Aggiorna l'importazione" +#: 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 "Importa Account BookWyrm" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "Questo non ĆØ un file valido per l'importazione" + +#: 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 "Se si desidera migrare qualsiasi stato (commenti, recensioni, o preventivi) devi impostare questo account come un alias di quello da cui stai migrando, o sposta quell'account su questo, prima di importare i tuoi dati utente." + +#: 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 "Attualmente ti ĆØ consentito importare un utente ogni %(user_import_hours)s ore." + +#: 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 "Sarai in grado di importare un file utente su %(next_available)s" + +#: bookwyrm/templates/import/import_user.html:41 +msgid "Step 1:" +msgstr "Fase 1:" + +#: 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 "Selezionare un file di esportazione generato da un altro account BookWyrm. Il formato del file dovrebbe essere .tar.gz." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "Fase 2:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "Deseleziona le caselle di controllo per i dati che non desideri includere nella tua importazione." + +#: 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 "Profilo utente" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Sovrascrivi il nome, il riepilogo e l'avatar" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "Impostazioni utente" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Sovrascrivi:" + +#: bookwyrm/templates/import/import_user.html:86 +msgid "Whether manual approval is required for other users to follow your account" +msgstr "Indica se ĆØ richiesta l'approvazione manuale per gli altri utenti per seguire il proprio account" + +#: bookwyrm/templates/import/import_user.html:89 +msgid "Whether following/followers are shown on your profile" +msgstr "Se seguenti/seguaci sono mostrati sul tuo profilo" + +#: bookwyrm/templates/import/import_user.html:92 +msgid "Whether your reading goal is shown on your profile" +msgstr "Se il tuo obiettivo di lettura ĆØ mostrato sul tuo profilo" + +#: bookwyrm/templates/import/import_user.html:95 +msgid "Whether you see user follow suggestions" +msgstr "Se si vede l'utente seguire suggerimenti" + +#: bookwyrm/templates/import/import_user.html:98 +msgid "Whether your account is suggested to others" +msgstr "Indica se il tuo account ĆØ suggerito agli altri" + +#: bookwyrm/templates/import/import_user.html:101 +msgid "Your timezone" +msgstr "Il tuo fuso orario" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "La tua impostazione predefinita privacy post" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Followers e seguiti" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Blocchi utente" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Obiettivi lettura" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Sovrascrivi gli obiettivi di lettura per tutti gli anni elencati nel file di importazione" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Scaffali" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Cronologia lettura" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "Recensioni dei libri" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Commenti sui libri" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Liste di libri" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Liste salvate" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3242,7 @@ msgid "Reject" msgstr "Rifiutato" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Elementi non riusciti" @@ -3747,8 +3905,8 @@ msgstr "%(related_user)s ti ha invitato a #, python-format msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Nuova richiesta di invito in attesa di risposta" +msgstr[1] "%(display_count)s nuove richieste di invito in attesa di risposta" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3864,6 +4022,16 @@ msgstr "ha cambiato il nome di %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "ha modificato la descrizione di %(group_name)s" +#: bookwyrm/templates/notifications/items/user_export.html:14 +#, python-format +msgid "Your user export is ready." +msgstr "L'esportazione dell'utente ĆØ pronta." + +#: bookwyrm/templates/notifications/items/user_import.html:14 +#, python-format +msgid "Your user import is complete." +msgstr "L'importazione dell'utente ĆØ completa." + #: bookwyrm/templates/notifications/notifications_page.html:19 msgid "Delete notifications" msgstr "Cancella notifiche" @@ -4107,7 +4275,7 @@ msgstr "Rimuovi alias" #: 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 "Utenti bloccati" @@ -4242,14 +4410,66 @@ msgstr "Privacy predefinita dei post:" 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 "Stai cercando la privacy degli scaffali? Puoi impostare un livello di visibilitĆ  separato per ciascuno dei tuoi scaffali. Vai a I tuoi libri, scegli uno scaffale dalla barra delle schede e fai clic su \"Modifica scaffale\"." +#: 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 "Esporta Account 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 "Puoi creare un file di esportazione qui. Questo ti permetterĆ  di migrare i tuoi dati in un altro account BookWyrm." + +#: bookwyrm/templates/preferences/export-user.html:17 +msgid "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "

    Il tuo file includerĆ :

    • Profilo utente
    • La maggior parte delle impostazioni utente
    • Obiettivi di lettura
    • Scaffali
    • Cronologia lettura
    • Recensioni libro
    • Stato
    • Le tue liste e salvate
    • Quali utenti segui e blocca

    Il tuo file non includerĆ :

    • Messaggi diretti
    • Risposte al tuo stato
    • Gruppi
    • Preferiti
    " + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "Nel tuo nuovo account BookWyrm puoi scegliere cosa importare: non dovrai importare tutto ciĆ² che viene esportato." + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "Se si desidera migrare qualsiasi stato (commenti, recensioni, o preventivi) devi impostare l'account su cui ti stai spostando come alias di questo, o sposta questo account nel nuovo account, prima di importare i tuoi dati utente." + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "Potrai creare un nuovo file di esportazione su %(next_available)s" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Crea file di esportazione utente" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Esportazioni Recenti" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "I file di esportazione dell'utente mostreranno 'completo' una volta pronti. Questo potrebbe richiedere un po' di tempo. Clicca sul link per scaricare il file." + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Data" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Dimensione" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Scarica la tua esportazione" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Esporta CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Esporta Elenco Libri" #: 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 "La tua esportazione includerĆ  tutti i libri sui tuoi scaffali, quelli che hai recensito e con attivitĆ  di lettura." +msgid "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." +msgstr "Il tuo file di esportazione CSV includerĆ  tutti i libri sugli scaffali, libri che hai recensito e libri con attivitĆ  di lettura.
    Usalo per importare in un servizio come Goodreads." #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4487,7 @@ msgstr "Sposta account" msgid "Data" msgstr "Dati" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Esportazione CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relazioni" @@ -4705,7 +4921,7 @@ msgstr "Code" #: bookwyrm/templates/settings/celery.html:26 msgid "Streams" -msgstr "" +msgstr "Flussi" #: bookwyrm/templates/settings/celery.html:32 msgid "Broadcast" @@ -4713,15 +4929,15 @@ msgstr "Trasmissione" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" -msgstr "" +msgstr "Posta in arrivo" #: bookwyrm/templates/settings/celery.html:51 msgid "Import triggered" -msgstr "" +msgstr "Importazione attivata" #: bookwyrm/templates/settings/celery.html:57 msgid "Connectors" -msgstr "" +msgstr "Connettori" #: bookwyrm/templates/settings/celery.html:64 #: bookwyrm/templates/settings/site.html:91 @@ -4730,7 +4946,7 @@ msgstr "Immagini" #: bookwyrm/templates/settings/celery.html:70 msgid "Suggested Users" -msgstr "" +msgstr "Utenti consigliati" #: bookwyrm/templates/settings/celery.html:83 #: bookwyrm/templates/settings/invites/manage_invite_requests.html:43 @@ -4740,7 +4956,7 @@ msgstr "Email" #: bookwyrm/templates/settings/celery.html:89 msgid "Misc" -msgstr "" +msgstr "Varie" #: bookwyrm/templates/settings/celery.html:96 msgid "Low priority" @@ -4763,7 +4979,8 @@ msgid "Active Tasks" msgstr "Processi attivi" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5157,9 +5374,14 @@ msgid "No instances found" msgstr "Nessun istanza trovata" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Interrompere l'importazione?" +#: 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 "Questa azione interromperĆ  l'importazione dell'utente prima che sia completata e non puĆ² essere annullata" + #: bookwyrm/templates/settings/imports/imports.html:19 msgid "Disable starting new imports" msgstr "Disabilita l'avvio delle nuove importazioni" @@ -5172,70 +5394,107 @@ msgstr "Questo ĆØ destinato a essere utilizzato solo quando le cose sono andate msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Quando le importazioni sono disabilitate, gli utenti non potranno iniziare nuove importazioni, ma le importazioni esistenti non saranno influenzate." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." +msgstr "Questa impostazione impedisce sia le importazioni di libri che quelle degli utenti." + +#: bookwyrm/templates/settings/imports/imports.html:37 msgid "Disable imports" msgstr "Disabilita l'importazione" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Al momento gli utenti non sono in grado di avviare nuove importazioni" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Abilita importazioni" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limita la quantitĆ  delle importazioni" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Alcuni utenti potrebbero provare a importare un gran numero di libri, che si desidera limitare." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Imposta il valore a 0 per non imporre alcun limite." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Imposta limite di importazione a" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "libri ogni" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "giorni." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Imposta limite" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "Limita la frequenza con cui gli utenti possono importare ed esportare" + +#: 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 "Alcuni utenti potrebbero provare ad eseguire le importazioni o le esportazioni degli utenti molto frequentemente, che si desidera limitare." + +#: bookwyrm/templates/settings/imports/imports.html:111 +msgid "Restrict user imports and exports to once every " +msgstr "Limita le importazioni e le esportazioni degli utenti a una volta ogni " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "ore" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Cambia limite" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "Importazioni Del Libro" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Completati" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Utente" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Data Aggiornamento" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Oggetti in sospeso" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Oggetti riusciti" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Nessuna importazione corrispondente." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "Importazioni utente" + #: 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 @@ -5554,22 +5813,22 @@ msgstr "Collegamenti segnalati" #: bookwyrm/templates/settings/reports/report.html:66 msgid "Moderation Activity" -msgstr "" +msgstr "AttivitĆ  Moderazione" #: bookwyrm/templates/settings/reports/report.html:73 #, python-format msgid "%(user)s opened this report" -msgstr "" +msgstr "%(user)s ha aperto questo report" #: bookwyrm/templates/settings/reports/report.html:86 #, python-format msgid "%(user)s commented on this report:" -msgstr "" +msgstr "%(user)s ha commentato questo rapporto:" #: bookwyrm/templates/settings/reports/report.html:90 #, python-format msgid "%(user)s took an action on this report:" -msgstr "" +msgstr "%(user)s ha intrapreso un'azione su questo rapporto:" #: bookwyrm/templates/settings/reports/report_header.html:6 #, python-format @@ -5593,7 +5852,7 @@ msgstr "Report #%(report_id)s: %(username)s" #: bookwyrm/templates/settings/reports/report_links_table.html:19 msgid "Approve domain" -msgstr "" +msgstr "Approva dominio" #: bookwyrm/templates/settings/reports/report_links_table.html:26 msgid "Block domain" @@ -5722,7 +5981,7 @@ msgstr "Imposta il tema predefinito dell'istanza" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Uno dei tuoi temi sembra essere rotto. Selezionando questo tema, l'applicazione sarĆ  inutilizzabile." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5776,15 +6035,15 @@ msgstr "Rimuovi tema" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Prova tema" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Tema rotto" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Caricato correttamente" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5833,7 +6092,7 @@ msgstr "Non impostato" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Questo account ĆØ l'attore di istanza per la firma delle richieste HTTP." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5905,15 +6164,15 @@ msgstr "Azioni dell'utente" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Questo ĆØ l'amministratore dell'istanza" #: 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 "" +msgstr "Non ĆØ necessario eliminare o disabilitare questo account in quanto ĆØ fondamentale per il funzionamento del server. Questo attore firma le richieste GET in uscita per facilitare l'interazione con i server ActivityPub sicuri." #: 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 "" +msgstr "Questo account non ĆØ individuabile dagli utenti ordinari e non ha una pagina del profilo." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6048,17 +6307,15 @@ msgstr "Crea scaffale" msgid "Edit Shelf" msgstr "Modifica Scaffale" -#: 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: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:66 +msgid "Import Books" +msgstr "Importa libri" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6206,7 +6463,7 @@ msgstr "Commenta:" #: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Update" -msgstr "" +msgstr "Aggiorna" #: bookwyrm/templates/snippets/create_status/post_options_block.html:21 msgid "Post" @@ -6412,7 +6669,7 @@ 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 "" +msgstr "%(user)s si ĆØ spostato in %(moved_to_name)s" #: bookwyrm/templates/snippets/page_text.html:8 #, python-format @@ -6886,8 +7143,8 @@ msgstr "Ancora nessuna attivitĆ !" #, python-format msgid "%(display_count)s follower" msgid_plural "%(display_count)s followers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(display_count)s follower" +msgstr[1] "%(display_count)s followers" #: bookwyrm/templates/user/user_preview.html:31 #, python-format @@ -6922,7 +7179,7 @@ msgstr "Lista libri: %(name)s" #, python-format msgid "%(num)d book - by %(user)s" msgid_plural "%(num)d books - by %(user)s" -msgstr[0] "" +msgstr[0] "%(num)d libro - di %(user)s" msgstr[1] "%(num)d libri - di %(user)s" #: bookwyrm/templatetags/utilities.py:49 diff --git a/locale/ko_KR/LC_MESSAGES/django.mo b/locale/ko_KR/LC_MESSAGES/django.mo index 463d8e4c894816c586323407234882042c4daef3..5aab5d85ba1d7b7939310cb6522bd262d242668f 100644 GIT binary patch delta 19690 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 No3?E8%AM0Q{13K7U2gyY delta 14828 zcmYM)dEAdx`oQs9_T{nj$oinjzJ`brqEboHP(o2?A*5-BzG$&lvLuD5M6}r|Yob9^ zsGcxwT1S?qWvHb3eLl~9y-Tk#N9#An(jNhw^9)o~YA!0*Dpa3t*t z?UJNql4O#}JXE1$E*8brSQJ0; zQ97cLIZz*HE};S z$KTNL4LhZYv_;2XgeG(qx^Q278i#eF{$`fdIW0{#8lX1X-wa*29h%TZXuxaGiVQ*% zz70pY=;-a?Ni7ft+7w0}l7_9q%QQ{>_#;gd`%U?1#(240Rka2*!J30>3vNoe~q zG{F35KaU1}8BK5<*2f)ag?_?9SfpEe*GeJdGD%GyEJYLa4qTAFNQR>ej6-)Y72Vka zG=Z1UfNRkC8{+-$c>hVf{}K!H{yQv!KZd6;%kMw`C28hm&;eDVeHJ>gG5U41LU-0J z>>d4surmE)urWT09>o?k@%`vg9EtV`e1vw9ONsCI|2PlsU=fU zfwqOY=n?z}P3(L0GX9Fi@DDV8k?v`K1+*fS!$#eye{ni4q{9WeqnD*GR>2YIWt@&K z^klT3#uBtwhMUp(yU~gq#7g)hx?r)()5NQx8)||ju=VBCzdR3}>Bz!9I2dn1cknJc z@BljT8?-XV(USj(9$kSe(h8IhtD_q`2mOI+iH_@y{$X}A8t=^v51#qkG2s1p@g-)_ zex`D&d{t2zf?^q4aySkh_h_`2qKRxkceD*%;N56{f+qHD^#6p;&(|xha5g%>ZZGOzmWL*ESb>W$ zuT)rub`LCvH=+T?pb1V#cQ6-Cd>NjFucAlzF`Cd(bo?oFT)}J7BPoZjd*(IN-%K0Q zp>5ECov}IgL>GDht;l2OxCQ9WpGPm*YOIU<;{9)!w_xvdW986xB{ZQr=vUAz!^0Uo zw8rw-7G2;;OQUgk``Ytzef zCYoU#tcWeqL@q;1dM#SgThKsb(4Xi@*cqQe6FrQc?T=`Jzo9$M|F=m>fyKcEZd=WinwupHW74^80wXkUijjT_K}N1_{;f{vSu-l6BB{W=V@7L* zk7PM!%y=yiX1Wb+zmM+l5PB)UMKk^#U7+Cg>HBOnp=#*-dgx_rgI4YWG)`A^+~v{k zgBxl0zn=3qqpJPV!1d6bwL|;6qk;Ow`+-=Q_9(1^4`Wqaj+S@_TCu%ooI`jn{uuA; z-jI%KivCibcLVj$`^@ODBm>Y(bt}5#3|iVLXeH){E71hEqZRug+FzjazDIZdD_WU9 z(KuQC)A%{)yp|arOyD9kU{^G=Ug%E7paC94cQ^;D;X-uh8^eQ`P5UIe^O6J71#4h+ z+RdYV6&iOC=525^51#40;S992Poo1iM|&qa?rXIFBwCSVV0uIq&>dGpcUBwSP&4#S zbU=UTx?n5phHd@+Gdy_4>(Rhl(Vf17jWHJuT;RsEQpM0jN})Tc88$@!eS%BHBpDc}zH_(Z1qnB)7-hd=IhTe$+H>C?#LfiE*Z)fOd*ac0fKbr7x zJO}T>2DlJC>Ro7JdoYXjlh1gtRL8>K(9#wflqOUKtw`-?H$(%pL>KIYXXDlJ{+@6G zn%ER{{xfLhUckJg#f%R-d2lE1qu=R4^tOJ3-i2S$g~|_3zml`iaZS+q?a=vM;(d24 zNc-C8?}v^bgeEcq3*bG2slOBNrNh!cfS%z)*bWz>iTpb}j!sN&PAgUry=-N}95m6! zXoWhUmAxE|-#6MfhQn{B{+4Jg9R_*~3*ocTUJ>neXy7f;-W%=x=u!O#UFdYQi{6s% zxH_6hef0f#SP(D9LfAdSg8{Bazw04rsUAcp&O{epjD>L}TEcbcpJrRp`3JBP9!KXF z8j{X08`i|a^f$#K*anT8>Bxf_U4>?NEt=V&Xy1xX{ChYaU2t-|Ux0oM%P~K0#v-^C zJ*wU4`@QHoU!w^gLDtJ8CwaJsj{HN@BN&HXs%dBN9ef2 zXys0zi53`^E_fyurF}NGz$RG2@Bbzq3^W400~67VXP}uri!S&Ix}z<4HvS6@cog#% zL@QO`)-;h4XhqJ%+p!vYxu;@HtI!xf-XrOP=ot{8{iVNP6Rwf4>*8sDy zH5#Z3I{tF>&h(4+pm;wTO>AuRKY&(d&K=a>fX~rU0#~5{--v-b!u{xk|HS)W(ecUf zG;kKWk&0*nInk~g@0(#w`rD$P>GkO6epe=5%t9Ali|%X_8gMt3!rbs1bSEdG{UIsbV)xWLm`2A885Z^Ux=Av)nO zTEZXEg^G+$6Rv>1uYn%LIp_vjp&K|q-giRR>5h);W!vxn#uzXx92En`;&r^Aie~<8 z^dChN_$@4SSNg|vIkdkCy1@BZ9xp{J+aFDIDAvM}nD^)Z93IU0DKz6H=!6&039n*l zd?VU>(Mlb}l6Vvicq-b}#-xAgY=|au8G2Xxpz{Vr|ClkHe_1;2r^8I=q9uO;{VcbH z@1PS8pd~zl2K*`7f1rsLygPkg61@Wz@j+~g74S7Qp?A>@etb9e_Y!?Whk;L^mG~nD z=KnhviFO$@p-b^=?2SXQ-97vPgiCNO4*LglG3TG@UtX(^O_DolUydE|4K$H_h%x*Fb$bXC0(06!Ur0>h1?Ml(E z8#YEi&vUUTUW^_^56rs*==;&={0GqWW@Dxj4^Q%-YtV`Bq60rhcX|X3a3bCpnwpll zJeu%1SRXr~pXnWFoblnq==}MZjW42~`@g30{d)`l9UUjp@4xu8G(Zh>VxzDFy1t=t(Md(lAq!*9?X{){G4a(a5HYM_A! zpgXz?OW;Fj0#9I3TpaBc*p~Jx?1snDby{T}N+)(kcYYNbU~sf=!(GRDho7Je9!GyUPh&5vK8O1IViXT%HW5u=2Ik-s_!@4A z{!x#m#0q!^dYkV@$3KGxUWv}zfF`&n+J~b3KlF#MU}j$Wr&vw2qjNX_O=K(@;6C(n z&5riVIGpwtG@+(X#OH`6(gmG&b@UHH6S@tJJ06{vnZ!dy9%iFES%GKbE*y2w9Ie2~ z=r6V?4O|9Iqy~CK&Cnye5RG>Qy6`n<+?&z&cVd0aETaAnSWbtf-hj6Mg$DQto$x8T z&{6dLA80})7pL=Tp@}xc9PEU(a1griBsBg^^w!Uh_VbG~X~5NV82ByB#$0qq$I%L% zMvtPv(`lgWuqK*V1GKd5!@r^NMn(Jn@F_IjdMt%oGd#G^`)H5r=w}KTcQEGpo#Ux zGjK3k>LJme!2-0WVi9~Kd>jkXUW_iZ6isYp^uLb1SU=eu1IjH)Gp&aH0M$oJ+8Mpg z{n0ZY8_qz-J&PXM=J2C<|9!kaUbYI?`bsASI{Hb9exrXM;H7vEW0di*TM4Kzocz+Tp8Zv3;OR4r=vSu z9Pig*VcPGa3Fl%V{2H6!QS`D_c|PrLj3#<6dKWsOccBO7{rmq>JXp#pXr|AgJ9!OV zXlJ+=4Rj#he~aG!U&5lx(|J|GhG-(~u_pG2_DFQz1IsyoFVkE)isDP?PF_b7cmrK< zFPhkAXk~ti{=zHL@f9$K{;Fua_UMAW;{6yj-Z(Vg!{~bRS5SXT@?3PRMoYR0-T6Cs z96v+@Y<(fE)CcH7$I<=*FQx%2phr~$t6^*Ou3Qt2#w^;i(0Pk9Ja~Cl;U)MkT7m4B z(jSQGSeJHVw7+-Q53^_wLU%F}tzPU1OO>6J8*j!304NlzXeFbo|q z9SyKH9gu8`_QzO*{_mo{=*sjTuWMpy`maD2?2l#e{_rt$Bg@dZJJ5~f=E?bg!h?6< zD=dXSL_1lP{ zt71TZJeL>4u?Q|f6MG50OdHUJ52A^DfgZtO^wQ;DlkTueSTAgij_-oT>5e8e4D*Y%i#(1r?}|abO&|NzqqtU6YYUs#(vShCEkxle_tNLMz|Cm zm%Enp_u+Foygc8bXH@Xjv|SF}aTBz^HRkOEo!1@9V{i0~Z$)qQ)Nl?uZxI^jCG-!u zSJCh{4&YKYZkE3V(6k4g5(W86| zD`4gT4`%p%cseY$E)7@-O`sNLV?FdU>xj;~8NJP;!w1mukD&=JKoeSmUcQa!QT-c< zmq~u(!2o5}r`AFPvIBHDjNyY!|sp~mPh>$zxR*P`(U#{1!z z_y7MH6CL;4!GLM#Sr^}&PN_C4J_eJ}w z%`E361Bg%5`((H#_cGu>%Lbf@*vg)czI_eGCzNVG?V6VP=Y zK@(b(i5E-J%d{4qxCtG&6J78iTH2%N0)L?avbLu0%ZGK)d2P^=UxI#qSEJ*Hq3hfk z?aVzqIB%=t8%mr5=SI^?l(? zWLzd$%!4~yh3<4adbS79#C|{np9+h-l`c>*tcz`V-v+J8!T%?dXb5ybeuhD3-+uSP5sNrGF6(yb~S&CAyIx z;(fk%(mPQVjZ+(~a65E-H}uZ*&hSu^hknS9Ut-&YI=q`s?29F6kBoK(oj4bZ;X-ub z=dlN_N57)t?-4g2=a18AU$BS&jRD`mPw=U|e3rb=jNQjeI;Qh>oCB~uUiv|Lc_yO^ zJr}MFH-xQ@B)z|?yU~xQ^zUTk{m78W<2AxnFv#>E*`tzgz zN-RgaFZvnXfq9idE0PHxMDNH$(VmOLXfH(L7X2tqARB8Xx3M4(2D}&zbSWC(Ds;ki z(LWT=r9C3r&&B%}qrCx5Xe-viJ?PP%#9CNs|LT(6|5Iu8=|R6VuG6bgr;&pPjvhMv zjz*majvm}Lr+L%nEgLm$)~IRooTe?>HgDaaDgT-E!>p=>Tjexs)wb!mtIN$ktNQAW zt8%IpJNm+!V{<1RTd*c)*1$bgs?D8o?Ed*V$L^babn*OSPpru~wsd^Xv59Mr&)#_C N^;cF;-!r@N{{g!gJbeHF diff --git a/locale/ko_KR/LC_MESSAGES/django.po b/locale/ko_KR/LC_MESSAGES/django.po index 9c01bea99..b7acabe2c 100644 --- a/locale/ko_KR/LC_MESSAGES/django.po +++ b/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ 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" +"PO-Revision-Date: 2024-02-08 05:53\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Korean\n" "Language: ko\n" @@ -294,7 +294,7 @@ msgstr "" #: bookwyrm/models/job.py:22 msgid "Failed" -msgstr "" +msgstr "ģ‹¤ķŒØķ•Ø" #: bookwyrm/models/link.py:51 msgid "Free" @@ -1804,7 +1804,7 @@ msgstr "ė‘˜ėŸ¬ė³“źø°" #: bookwyrm/templates/discover/discover.html:12 #, python-format msgid "See what's new in the local %(site_name)s community" -msgstr "ė¬“ģ—‡ģ“ %(site_name)s ģ»¤ė®¤ė‹ˆķ‹°ģ—ģ„œ ģƒˆė”œģš“ ģ§€ ģ‚“ķ”¼źø°" +msgstr "%(site_name)s ģ»¤ė®¤ė‹ˆķ‹°ģ˜ ģƒˆ ķ™œė™ė“¤" #: bookwyrm/templates/discover/large-book.html:52 #: bookwyrm/templates/discover/small-book.html:36 diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 1a92d92fe106735d258001fd68ee43e4740efeff..6332c1b5cdfb7a19a47f5c23fe988ec495271806 100644 GIT binary patch delta 29766 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 ABme*a delta 30063 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 diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po index 2b37a592e..4815bbd71 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-02 04:10\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -54,19 +54,19 @@ msgstr "Slaptažodis nesutampa" msgid "Incorrect Password" msgstr "Neteisingas slaptažodis" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Skaitymo pabaigos data negali bÅ«ti prieÅ” skaitymo pradžios datą." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Skaitymo pabaigos data negali bÅ«ti prieÅ” skaitymo pradžios datą." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Skaitymo pabaigos data negali bÅ«ti ateityje." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Skaitymo pabaigos data negali bÅ«ti ateityje." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "AutomatiÅ”kai sugeneruota ataskaita" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Laukiama" @@ -258,17 +259,24 @@ msgstr "Sekėjai" msgid "Private" msgstr "Privatu" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktyvus" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Užbaigti" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Sustabdyta" @@ -284,6 +292,10 @@ msgstr "Klaida ÄÆkeliant knygą" msgid "Could not find a match for book" msgstr "Nepavyko rasti tokios knygos" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Nemokama" @@ -359,7 +371,7 @@ msgstr "Apžvalgos" msgid "Comments" msgstr "Komentarai" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citatos" @@ -972,6 +984,7 @@ msgstr "IÅ”saugoti" #: 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" @@ -989,6 +1002,7 @@ msgstr "Duomenų ÄÆkėlimas prisijungs prie %(source_name)s ir #: 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 "Patvirtinti" @@ -1492,9 +1506,12 @@ msgid "Domain" msgstr "Domenas" #: 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 @@ -1506,7 +1523,8 @@ msgstr "BÅ«sena" #: 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:108 msgid "Actions" @@ -2846,16 +2864,16 @@ msgid "No activities for this hashtag yet!" 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:66 -msgid "Import Books" -msgstr "Importuoti knygas" +#: 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 "Netinkamas CSV failas" -#: 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." @@ -2864,95 +2882,105 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: 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 "VidutiniÅ”kai importavimas užima %(hours)s val." -#: 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 "VidutiniÅ”kai importavimas užima %(minutes)s min." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Duomenų Å”altinis:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Galite atsisiųsti savo ā€žGoodreadsā€œ duomenis iÅ” Importavimo ir eksportavimo puslapio, esančio jÅ«sų ā€žGoodreadsā€œ paskyroje." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Duomenų failas:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Ä®traukti atsiliepimus" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Privatumo nustatymai svarbiems atsiliepimams:" -#: 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 "Importuoti" -#: 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 "Pasiekėte importavimo limitą." -#: 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 "Importavimo galimybė laikinai iÅ”jungta. Dėkojame už kantrybę." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Pastaruoju metu importuota" -#: 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 "SukÅ«rimo data" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "PaskutinÄÆ kartą atnaujinta" -#: 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 "Elementai" -#: 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 "Pastaruoju metu neimportuota" @@ -2988,7 +3016,8 @@ msgid "Refresh" msgstr "Atnaujinti" #: 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 "Sustabdyti importavimą" @@ -3090,6 +3119,133 @@ msgstr "Tai seno formato importas, kuris nebepalaikomas. Jei norite matyti impor msgid "Update import" msgstr "Atnaujinti importą" +#: 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 "Nario paskyra" + +#: 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" @@ -3110,7 +3266,7 @@ msgid "Reject" msgstr "Atmesti" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Nepavykę elementai" @@ -3900,6 +4056,16 @@ msgstr "pakeitė %(group_name)s pavadinimą" msgid "has changed the description of %(group_name)s" msgstr "pakeitė %(group_name)s apraÅ”ymą" +#: 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 "IÅ”trinti praneÅ”imus" @@ -4143,7 +4309,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 "Blokuoti nariai" @@ -4278,14 +4444,66 @@ msgstr "Numatytasis ÄÆraÅ”o privatumas:" 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 "IeÅ”kai privačių lentynų? Gali nustatyti atskirus matomumo lygius kiekvienai lentynai, reikia nueiti ÄÆ Mano knygos, pasirinkti lentyną ir spustelėti \"Redaguoti lentyną\"" +#: 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV eksportas" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "Ä® eksportavimą ÄÆeis visos jÅ«sų lentynose esančios knygos, peržiÅ«rėtos knygos bei tos, kurias neseniai skaitėte." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4303,11 +4521,7 @@ msgstr "" msgid "Data" msgstr "Duomenys" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV eksportas" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Sąsajos" @@ -4801,7 +5015,8 @@ msgid "Active Tasks" msgstr "Aktyvios užduotys" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5203,9 +5418,14 @@ msgid "No instances found" msgstr "Serverių nerasta" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Sustabdyti importavimą?" +#: 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 "IÅ”jungti naujus importavimus" @@ -5218,70 +5438,107 @@ msgstr "Tai reikėtų naudoti tais atvejais, kai kyla problemų importuojant, to msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Kai importavimas iÅ”jungtas - naujų pradėti negalima, bet seni importai važiuos kaip važiavę." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "IÅ”jungti importavimus" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Naudotojai nebegali pradėti importuoti" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Ä®jungti importavimus" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Apriboti importo skaičių" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Kai kurie vartotojai gali pabandyti importuoti daug knygų, ko galbÅ«t nenorima." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Ä®raÅ”ius 0 apribojimo nebus." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Nustatyti importo limitą" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "knygas kas" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dienų." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Nustatyti limitą" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "Užbaigta" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Vartotojas" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Atnaujinimo data" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Laukiami elementai" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Sėkmingi elementai" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Nerasta atitinkančių importų." +#: 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 @@ -6094,17 +6351,15 @@ msgstr "Sukurti lentyną" msgid "Edit Shelf" msgstr "Redaguoti lentyną" -#: 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:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Visos knygos" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importuoti knygas" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/nl_NL/LC_MESSAGES/django.mo b/locale/nl_NL/LC_MESSAGES/django.mo index 2c66d828b451b562d2bec7d4c340e9fb642c38dd..932021e43a4544dc0c7eb07911b3ac9a0dadfb23 100644 GIT binary patch delta 35946 zcmajn2YeOPqVMt9n+~D(zL5?g^eVlG^j-xaB%2TjNk{=Hvgt*nNeNXtB2tt9K|p$w zDo7DUl&T_#U_nIj{r518mxl9VsYAcN>4I9Y=PN%Fb4DE+vvl!*cp#v87wf_jGz&=B|Zj~ z|5L2zahw~Nhj@{xj!z`k7^TC|pe4{;g3x6;f+^Hs(ZIDz!G zs~sl-&tVg+y~c5d<47EbKjU~D#HDa2d=FV2$FqZJ#PK)`pJ4|ax|4STeu6rd-(fn;#(K#-m>UaWdJMsg zSQE2iL(HHS+S-J!sEh;L2W&W-KFp>EFo@?oB6_Fx)3f~D~U=E9#) z9rCcTGGks0(g=M7RIn0e!djRe8)G)?XrK4Pyu=4#aU6@P@Lg27ZPvZ029BXddLGsB zZ!ibmxBiU*70kv?QbPr>ES5!er~_ufp4bb+QTg}T^b@F=xQNPs7pvk!)J&G(>}e^> zp&D+4nyHScCF;4G`B%?gCqX?Pg6ha{n{hI#;+a?h7ow*2AgUurt>;iPb`@3M4_Fz0 zM|G&o9`nuUiJHL~s3lpohxxBbU^@vMUFRP9aOPg~P1u6&=|EN7^b_-n?tq%waMVcS zP#qtM>fkgSf^TC9`~$0Dp?#)YJJd|P79gO4VW^SDp++(q7vKz3$4cyXoF{k$IT+5~ z17-$>9W+Zc8r7kxsF_)S>evd@NY|s<`51k80!v`v2Lc5MWI1GdR0=gk!5E88u^1+! z8n}R3%WqK?KSGTp?O|>VLe-ZOHINFZhU?kqtx$WaJ+cP^PHzI5+Wx4DhN2ouL~X8# zs0tQX*PzDk45o14#mH)HV&q@>dc52nRrrX& zHhhlF@S~F)N&F4_Vb@b;3b&)C`Z#KYUtoH?j_TkY`}{ZiJpF0&JP0%JJU42S7q*r< z&HU#fp%Mu`Y>Mhx7-qs@HsffUKFOxPgQ{>DYR1;u=Q~lG@`#OJvCr>dA<~~<2Z^Ik9=D}yTc3ThAZMlDGws$-Fu z6GvF5BQH^BDJp-@&)t~`IQ{YRMX)_E39N$GW246XEE7|CbZcE`1L*l8;cE@Do&lZ?FhH#NHTm#WWOw zYA6Pk{|!_Jm!QgRKy_%BO+SF@&{@Fa^q?W}psgs=K0Q;5Af5gHY!< z7FBKrYH1duW@rOy%|F4scnCGKU!Vqd4^`jqr~#+B%KR&k^{Sc5{HXX#sEoljy{@&n zwS%=cDxV)U;y9Z=0oCA4REHO11Kf^UipQw@e*_5RCXn$fzAXp zWnrkb9*L@GDypJ)Pz^6eEy-pqh3UREGf@FGwT)2qbU^J5KdRhV)BxT=orWc-{F~4{ z|9c6jr^iq|ypEc>2dI%gL8Yg;VH(JVs-PUI;yS3cZ;YDSE~pXqL^T+S>PS4QgHurh zTz-T3pG{x`30nI)H_Z&RLXEHos-ZEc4!n&jxDw?EM|z8w^|~5J8~$_vUxGreYIi#GY8>2lLx(i8zP&ZcLAD?wLK) z85JLF9fn%UH>}f9dus{mv}{Ao%zosB6>!cF&?dQ!8u9N~7`;Cli=p;FJ=7j(jcTBm zeLfhQ6Q6<^@f2!PUc`oY4K+iB@0+PFjmL;rLHGOrgn$aBd0?hA2(=`+Pz{$x?b@0) zy$z}(uiN-g)b1XK8pwRqt9U(T#ZOTAPobWFY2)|N{rUeH0gWi)xjaCJu@0L@;O)%7hzf4iyF{v)Sh{Q8t~s3(B?}2&@`CES`f35UKW+H z7G}prsHyIN>ezhDjPGI=d>?~w2Wq5;Fgsqv5_lU`F8$9YUyh$y|MnylC80P*q1OIw zR0lSoDo(*1co_B3xrkblpHL%B`^b#29ID}$QA^McHNbFGJ&~yT6K(q3N1O@ucp(W} zaSay3E|1OcUdLfC;`>k|E%1w(sgkG;R<-fQsCwF?rua3?jiLB5CZd+;Bh(BW!<_h8 zfWS)xZengs_bWfqVnN)3Cs7rS{LPFYfNFRKY7Zi={vGGT^ zm-rJ@hXdPxH$6Lu>d|G)f!|{_e2TR(_=zbHjv>T{p&D9=Dz^a(;cnCvU&12z2>W8T zKg?c=LhXq}q@92>nLtev7TOG_%>(BW<|F+ss)4`l^XyN}W-5SM+j^*_X@r`=)~G3d z9dqFz)YOm0NStHie_|266SMzmMiy+Xi#mR<*mze|g`ub^9fBIsFdILIT9Qks25+M} z^aRx*?=w?hKGckqLevG0_$zAdgZ?%R6h&>SDmLB$)v*Dnj!Z&z zYy%d;U8oL!j+OBaYUc7jH|fQ#RZ*L=*>mRKN1y`i9i2#v*AP6&7t@$EU&o`r{dWVhgv+-j#ehyXd6;#LWVrl%{J};79^|1b>2xtVs zs0v>}jkE)*r=iv%s1YZkcJCO}F`R~_a4BjNA3!yD4fP(lkIMf9RbQG6rk<>rnf9GL z1Tj7&dZ0EVcYp@#tZTm;on zLv%MYY6&`^I@S+0GjmXTF0kAttU=Adhc=#qvxpzTVC<63R6Nc)4b{OpSRB`(Dn5#O zUtGX6co#e2Jygf)XEz;dj`eBZX-7c2@-0-s*{B|`LG>^hHR6x0M^O!($B}p)wP$+f zFf%t0HIP_Tz7aSYC!vm`lhf3n1#{~B7bf5%y%K8e+q(}~W2{4b9;%|#s42gS8u|CA zj{S{VvP`*5{@hrdcw1Dtaj0@LQSX&ys19$z+&cez381lDcBqEBp{9HQ4#k0}O?(mcet3eaH)9^N1f?;cDGwo_-Pjb>Kwk{T2-K9# zM|ErkYEx}Rbzm22B**RZOQ`zpppNrX)TVnWuUX12s1EnChUVq`hmjCTg5FeTP(A(D z`Uuq_Z$4uX`iSR4b*wgO=9;3Gq&=3xFx0z#8mitcsD=-sI{YbWX0PPq{A(oFNYKcB zM6J=UsD{($_qcyKB?syo5rG|XJT}D(SQhgZFkiO@s40&`HTX8Fp82SbzKa^*MpQd{ z0tD27Gw7~8YANocUNjjBn&VXrHR6V-idvyY(hb#67^?gb)b1Z`;}cNd{dZ9Bk&USQ z=TQR=TqU4_H&H!%Y%`=OWHM$!z2S1BDyWL;Ku^@B3%3qKRXi3|-xTXYRK4r%^AuFM z{YVD_&S?UgqD!cre`Di!Q5F7->ggY-H=L)isjwt!WHnH4#{S_PWS0kzg|Ta&N?@zto!bq4jK`We;HlEpkuTda=ba2(b} zPjQcP9$&_CnAK;}Yhiifu^6aCUU zZxH_hLvX-L9``q)=3)clcTr1Is-(yLy``olIsa;SDGA#!8Fh{amNMsdGDZ*S$L;7ToIw0Ow!oM&9`~>9>_E-L(6S!)PtD)M-o*QqGc%b|j`Kf^gfB_Z ztFdi))5A#A`JRgE&`Dg4-=Moh73>nBK2k}jnOTn7Tx)ImCe-fVhB`Heaj}OV=TS=+ z83;CSqLJ8*gt6EaFQPV4`AX)+QwwVl?}&QGPe#4LrlU6HENhZ=C90$EqdJsq-GgfQ zFltiXclTyCE54})LMRo z`j#9XHO+l!csDPU3PN+@!dM(bs8Xjm9hM@|ML~WW0HhmiE^E(H%b{laD zrmt-}G81PLUxQlX>UGRao* z$1#mO&JO$>|HkQ!&AWYS6Z1;Fh=)i|)6~4Uj^XRX>ooJYzcrhLuM)q8!?1L7kNf-o zNvJi?)xvx`s$y~Cfp7v%2uwn~YL8(hEclAa&=N}!kHB#_9rt18mZsdNIEr|dSItjA zQ?Ls0ZKyqR3pM3Wu{36CWoEK6`gH!s5opbWRjAE%AA`|pZ8l3K)E=paT9Otv-U;>M z>Vv&-9LC|7s6EoIjVbp&YH7El2670s6t~^yoWDA4&B&W!MIJ1~3d)F`@B!*rHEL%% z&>l6i-l!>zMeXW2sD_rKj_(K97Pq0kE&rh28%5fi`s<*3{=*1pWRa*{nTTF|6RYAl z9Dv(U$1!gQvuVp&Lr_y(19f_uqc&qZ9EcOK6yC#fn7yON{ayDu7|_&DCD05nU^~p$ z$;87^r(*-E;w`9-rl2}<7=3sdHS#Amp02YgR|Zus7&Wk(HoXCArki!<{P!UcV-rr} zJH-D$6`awvGsR=DKk~bvMVN7KRazM5UiWjr1~V^ZbA>VU`{q=b?vRIpGH4#d?{UIF4J1e~;SCi+Y>< zn^5s{s2ABSR6BnM2vj2w`kI;g`PQ4L7g3cy9w#0nQOE3Se1<*yQXw7a`np+?LH$ez z60kbY7vQV-De5%k>Td?p2=yxNjI}W^l0Z`eA7N+w6}9PFhMEdTqJD&0g8BwrME#ub z18OEb1I&x76zWYm8rASN?1s-!BkmN&X`;hJQ1yHg?$IA~1e^;5RN+LwIZjJa=XVdP zf&2qakL#iGgdkfxbK)J;uLqu>j%khvb9~F7X0#?Q$7po_{4Z#b`J5KO zvOFk{TJuh*o`<8(?O4<~UxMnudzgr)a1J(!G;g>I_!03xa5HWkZ1zOYA?72MG0OZb zxd@-?`~UJ#^V4a~XwI#dbBd9q`-XX(6ZjVHz%Fs-C!tL79{p`fx`qAj`TPOu=gnQaVb37-Z+= z6UUeldEPYd{$$)kdfZr#^9hCoJkBb-kJEA1IAekF9%lye)i_l7CU~4za2cxJTN60{ z3kZZxG~e?l*0Ga3?%#e-H`)9)`YfD9zNgk{Q%pSnRP)YXkNSERoW|0z$zt&g@rlzt zP6RXB=`GXn$8USwKNEIldffL;qnY$LfsD&Y7>qe*nR7V?!-;>31F^+y^ZDI`1Bicx zeX-#jvlo_OKH>*(EM7q!>+W;SZ^ceW{aW!T>MPjv9bUn7bWngmFA`GbnV#jG?{QiZ z?}#ID5o#~wT3~+VGX}E~KZZ;2B5DR>7MdAMmtg#8XwT{Qa`uYDI0%~Xr7Q%z52CmukU##hu+MkS29cqbru{-McMWJTy8fxVCQS~^> zOnQFQ3#cq=2K!?%o&P8Tdb758Z+W;RK5pT3!k9YHe|V3 z%Ic_w8l&oOi>fCa>tQ?w8WPw-pb1R-hw5M-9F3tXIsa?|=W7yLVCGe(f{v&P2iW*f)JOuTrJ8}; z@m)NQT~_mX<~S8z<8l9PM}xIyhSIJxQ=b*JIg6s|sfe1%+Uq#~TEm7UsE1v#1csqL zK9f1kQTf-QI=mURvN$wYcglLhrU#x7&{xj0 z!8A}9)seEOhO41=Z8Ox1Y7DC3%XkX!p{8=@`(~;?L5=JT*2SBskr&x$_QXr5&0861 zC*af}ps8<$TBFXW-P|9GViIZuJ5UYpNB2czy7UHhvaW z&lS`jxM_WgsxQYj)6sGmP>&lB(1Xs{6$jf4`%&-mi#QGMqB<6nY<@v88kZ7ZiP{78 zx0@wuh8j>0)aePuFnkj=qc>3XJl@XytLM*2(3)o5VRmt097a3@)v=XW3U^@z{2KKl z%DB@s9E_@`I%2HtG4Sxng~Y zdevswYhO^P2CAX*H%0CCemDzDMCuZidp_ZZuD!mkD*Z02?0UehHZUV;-YZLE@ z$~Xr#LyJ-0hRxPMPnk*tgdtkMFuo+eHQPifqjH>W4zJWy!n_reMKsA`@i0NoB>iy9ewOMYUX~zR+#3P zsiz&P{_Zy37q#aC0}1HZ#G!gV9aZ6KR7D%H8tzBU$YWH)X^xwYUjgy zQnf)JzJ@A426YN%A~PFsk_hPCo{U<8FRZt$KcUv@DQe1co-k8g3N@lSsHts)y|EK& zNj9PKpF?%%CaQx!qw34>smgKwixbcYs=5jMFBw?d*z~?O?nh1W2%A0yHIiAVku5^a z*!!rF??Wx&SyTtFpgQ~mYU+PR_uv2gML?S@`$^NYil~a3;X>?*TAGKbkz_n&8qSAm z$cGwf71Rti!&q#OEpfk1&v4qj^K+ql>@lF81QSrjbx`qFP`@tdjLJ9{HACxgB5p=) z#;Rvb{+6hQyP$sk@H(!-H&H)~7C&oFPbt()wMTWl-&xMTzCtl1sDecMU>qua4(g+` z5WV;zY7LW7Q-2cGz(v$lU$x#umH!cy?-6S1pV@TpIrG=@GM?l7>vtjslQ03l$Ei5v zGxK}Dzu++9EzX-?@26k~;(0Ha3jEla_;F0ZLZ6$Nx`007U!q=I&rk!*c+o6zZqy7` z3=q(HZi1ScKBxjiQD3!DsNI@`+I(A4yL%s2z#FI~3c6&T`%rtKGHNNBVjPB|miQuS zDQ}{dIB?Gfm5h!xK>D7TEY&)MidW z$ygX{H>!4<)gS9_uB*Rc^8?a7Cm79l}>eZ-*Hlt?v zFsj^j)X$Fhv7F9-j;p4Jbx|X1kE)<6s)2s?c_gaBv8a#9eAH6ywCRUYd*Ldop5QOd zrmKc(xGrkuTB7Rdg?VV-i6KxMC!wZrFDm0XY>PKgzY+@h%B*Qy)RYcEjd&a?|7_IA zR-s0G6l>zQsCx5VGYywVEkz@A|NUv;Z}*6{zF93$>J&P&4^UfWYena^E)JfH>6D z%(AXUozvZ@seFo>q4amm50!aQ6*oXV?~Ua#0yP73Q5{)=I!$YBe2juOzwu3YK0-wTV`vW@d-=C~EIqLN$076YwEwM#H}|Yd;uus@_1=HxcPL|Ne`B z)^-!>SnWe?l5bHJevjJ4k5Ku_esBM>Dr%PxLUn8+YU&rFMta;nzm8h6r&t=Z{a}9W zR|DPO{~tx5A`hlmw_ynJ>sTGL-m|Z0RK1@o%WLOncufMF?t*JE1!GI_mjM)bUEO9z`|uIqEq7 zh^jB$12dy}PNEQfYE9GrWd7_oGqxn&7PYqX zaTKmVz1RvpH076|8eEN9(oHxPcRb|$`w7(e*;Kd$)xb4WgEvuMyYEnIpZSs5d__>3 zHW)Q?jZxqCZdf1tU@KgV+HAK_Gw=|b<8xGpnmxAXzujYVjC!F83`Z51fI5zIQ5|>> zi{Z!U!!PXfr`GJhnEa(tBYhe50&9+{ZxCupMxZ)8H$b2~fkhaMhfoC{TK_;DFVC-L z#JNz%uMBF}*TUM^%03^D>gWPg1Mi`ha0_aQcG~zs)Sd}^N$_qAFaDYUn-GNVeJdVbt+Gi`DQutcr#HFdc1+%KsW_(?%&>$7DPKH8=+~ zWs6ZG*oyjf!5-A!xPm&CX`h<>Ijw~-mh_USrJIjxXep|mO{gW?g?cZXLe0o64Csya z8v$*qpg&Cqil8!7Lv^eBM2)QYGt*!V)RebGb;ys}tiw^8 zZ_6{zzt(Us37XndsHwe#+H~JyMf@9eY|8&-M$`;-{yU&%CJgnSn1h9AEQQc2p8h#sF4qTZU(T#x)!w; zwxAD>qso1c>iAPkgINRrm_H`ZiCWtTR6_~a5Z^@Y`n{;7I)duhSE!l#5w*6zTQl+N zB*ly1OstHm_Y+h-Cs9jz0X0zm_XoW0@9ln%YIvB(6c~l7Xew&zmS7XyYtx^jj!{mp z$=@ASVHj#}#G&e2h-z>J>eaj+HPg3{fdri5X}s=~R7NdDGt|^|v+2<`eFExq%*Rr= z5w&N|VHv!N+U-tS)1e?#!v#_4K2-i-jK^9StnugBr;o z)MgolYIp*=Yl&)b1!^ik#6GwiH52(Wd7S}R3mfBN)ZY0LtKwg%r3%UHbvJLf%wF@q z|IwcWt!*@_!AaIdsF7~6&ktj9;#Y0@Q`C~>$YLt2ff`67)YP{@b^JBdW)4T~i4mxQ zjLi}-Q$CvnZK}1Xk$;LB;dxYtzCta{L;E~!kjWQ>>QEjG#u}*np{V?csHJ%eRqtZd z46m{#2MDMqM{S17s7-VoHIg4~{0XWXz$Mhrf;Ume zxo>uJnueq5n}f_$fPd#>DoC*zPN1ghCTfKDP;2>%jiF0 z@iZ35Z>I7N>a;w^{+OqLS&BsLMtml2##^Y4&n@V6|73{|09=ZbkRc|HBG< z-M?tG8g+h$6frY$7N-$^hI+9~Dr!2k3cC>BkNPa;?*z`C!A6apO;#CoygH(0 zUC!>~Twsjq{%bh*;`8ia>S5e3DZh(M#{I|{EDP?wT7S!=7f~uefR>W6P?}Y@^ zDH(_Ra2o1G)3UT_pgZ0q9)?PPrHru~>NJI;IvPkIaGAhccosv;dfngCsZ!32Xff&- ztwBxocGQSJMZE`Zp*s4Tjb|?Rx63`~x zi8|L8tdCF~$q{U()Q1{DB~*G7)QogOjc_1pO5e2cdFZ}?Q2F(@}bISh5IqEIiKIMkAi#Ev)*m*8!i9tiQee@wp^H;`Vl zvUxRMNB8gl_o`wVjzEoQ7^=Z3s0L=C)^Y*X$M;YpxQ*rTA*$g5Rn4i1L=9{zPR0z? zyzXyg&cqnvUt%7PdF$$&|2ib}t6^T1i|{n@$G8Re^VcCSV010>3T;x`>;5+TD$GX( zz3P}3QEXlFPCtT&$^SP_!h`ipxmRBHx_<#-J+>e{bA7Kf7dzJH{7)fplLSp+WCO4J z+v*chdtnPUz%$qmvoth6`}IP-fZjsAA2#7zco}bDXd|!tcgI^a_BtzxCt*#j)5L7% zXw+U=A0VLJxz|3ph>665nwpMGKuzst)Y3dh?fTr!%pPfsIt}e?yq9$#mL@$O^~PL` zQ!!0*ulsAo8K`oBzX)iTW^7?bQV_cnZ-!dqCD;wup*HC=RK>+#F-z70Rel9((|(BB zw4dNhc;2S}YW1`lj=-Q- zP5LBMx#^e==b+C0LR9_lV`bcqer?m+1k{1nt<047z}CbkUEr z_%=*~B|Dl|XjxQ;YGEk)QSXD}sI|X}dZpe&jWByBufyqdPZT(88TabPdJG}Fo!AcS zkj{Ng@T*#z;VBQ22^Y}9aSf*z)3|?Oo_BMPb5r^Iz2sR&3%N<#%JYm^pZFl|q2%F@ z1)Tb%X_RHS-yqL7#9zF6Qpa9?|G`O1V{0hz4^Lm=-b%O(1;QvW2X)QE%ETw|?3qb& zDiE(n`ZOCKML0lRU67w&oc6euJM}6=xEAGKyuQ@`{?gyvdJFzZhR#$Fgb`Grs~quH zxmS}%R|NMa;`$*)FQ~$#ziFRoZFP;M>?YgLCFJP4*UvUzUCO6k+JDZ`7ZOGhUqFE? zbmDXFP813wu9p=1#d+z4ysZciApJEArJ=L7f$=YlvNv^%B3S8c_9YkJaN;+{_Bc}eTdec!E`UviP2dQ~DEMZMbO>ufvy zu_omt(7wkq6H|Ka+CyiZ6! zWuneLTR-14ry{qm7;P9of$8?4o63LY+V~%2oIsv~n3uHb*ptyVA^a64@@zYe%phEi za0Oez1M+p_*7XHSGe1e`Dc=P*vbex zcL{gmS?aZb&aC9-YwMIJ|2^u^*OK40bJh}{OuCnQ3}y5lDMNZ0Q$FA) zo96I~8utq3zXK>dk^42$Pf) z+&=2N!adEchy8z-2>W$sfvt3X`WXKus%MK{tG>-_7Qs0whP9+Fm)IA2VsE#ZMARp-`K&NgCV z=D&Ms;40;&6WzdFlsuU!UxRdA%eXt+c3!h-Rjh&Y1j^V-4-@W9!D#Ns6k184_pqTY zJeo$1a98C%&aEqxttbz9KITqO{1(>c`A0n8WAoLw`S#J)J)R#UeX#!hZHj#mWeuY7 z-+1^Ng-_r{?hHI@h^y2hS0a^sM!sayzN0c-KaNTD~4l<-(xe13-c)ac8PlT6J$y4HExnl@VBF|L97kHLJ zxQ}h@$J9z*FbDa6Rb21ixn$058_!`2y-oZjGU*42U8L>6iln)}fFS=bwj=jQA7;xE zbh?us$MeCIT}ODN%@<|sU4e(l|D3!RG0>6>g(+~10{uz6#I5Tf55FVrB?=7X{?a5n z>BxJL^wet@&-5dDR?@%0Be;m?S1=8C5AH*>F@t*`_jcmCKBXL2!2R|9Gzvs>_odPP zHbYu6Zy-M0#+OoHB=KKB};*K2xC zny&kVKgV9EYcl03Vp+=ddZC>bgs*dJ|2a+U19j$&7c$)>{uc2mwld}A7eY>38q0#a zsPtp>H3vQI&<$P-)iD5-BkWMK4qTS29z|F=emm7v~85v&;KFhyT$#g`;;H| zNWaIgKb{U!^4d)R9cd>uEbAbKb|GoGODW@X;bKEYr+XOeKO%B?hND| z&a+0`#R$K`-I(+*sf#}>bN)23^};XnYqLy;NMCXO(ON!+1V{e8WjQ z%=4VYvr|Xv)z;>#M0yGC&$;>YNdEWb_>gg@Ui$kd?w@3p#KJrX;>mSe(O4?KPTGB3 zq%@npkzjh#_-#Sw8uH`*f3Ek)vyH}IBR!+-gdUzGz74~9o|*g+#NW{VTTWmt4>sA# zqv^=^gkL37d&0lk^c}dIxUPd#{JE`sDCq~NqZX#O9qCJ+F)wuLZ{lIxh^IMhoJMJ;ITsq3U zPq?3r>v&LRE|>gr6M!-N+RcF(^Ox6_+EJh+7;seCQ^Z6)uLc?N0uxUZ7_;&sL5 z3IDJ3x5&%?yZ>%%9OWBxCsF?g(E4 zqg0^lBF|6Qu;MoezoP)xC*-R^Jv+JElRlQb7YL`GvP^{ckfy5;&p$}R_*>G*S`ruX zuqKHms6@Z{l!5frYdp_~5^u_#k328iX9dWchH|Ob3iA1F1Nlg=z#T;XIPz^JQ#+e? z7xBK_?)-m6U=o>9uUS+uKo9Me$vzuFqwkVlj60fVvx#Tr9!I=4@tWK-3HPCq+LT#O zJ@a_}CO#$Y2H{BTN}jqr|C~Fpk^c;~JwC^S)az{mr)_VQHka^dn=dubSSsW<(A;Yv z&+fcXUWqrjgUM6Z%|Qpr6GwaQMS4?>zXgR3a{s_xnkTJohSS6!QF$ja?k8;mVg4eM zdwoH89CtkFGf8=s^y7GxyROaiG3CPu`|)S;CewIFY{=b@e2+=bqF?_%B=R{KtKlYY zFX2U0+y+OIS=ZNOUZo0b=cbcBh`6qtUT-{$1@*O9CI~)H51H`j(M{{4MOq4D63H5KL zuJ+u`C|8+yb)NO&4rC=E^-AKwWA5YJ`>1fJt^8dw@*A2?5cc4nM7Sr<$`bya@|SEr z5AhGFtS`@XeMvl?TUQ6}(cEwH>`kmlncDjOpXIhNX-+II@P}w_^x3tYajAxIi=P;&T2M9DwjcERZDBPY5bukv>C>)A=h|lA0 zM*O6$Q00#EtR=U8-*+#S&m?@GmMe3|lm8JuB!5Qk%fz#g?*e&xsCQhylUAPiD?FdC zHPe-syE&Ed%z29k9hJxxYMGTj^K>D!f4W^%pvo z&gMBmdJ8+4qC7urit=B^U!F|Y$e=6AHu5#$T7-9!c{_J?o@e9!o3w+(uTv%$;Y3@m zuvK-O<5~X~;>8Kq*Ua(k5M^8Nyffh~q)*rH|D+{hqAlS)I?j6JraqAkR=Xew6;w;oviu)Jx)}pSSHcjcX2?xg6!aq{!U)+U=x5e>f zeuWHs$yiCbxjr*Ef054bx;t-h*CE`W%3r*Wkamx>R@Cv8eRkUVmdcWzow8#z|AUB3 z=hl^#L|sG3T$_xgYV6r(Wq&>BHc9MSs;r+Iu1>`wr^G&ioq-+Q7 zy>`$a>F2*ZB+RE!cl?aIFO~ErUYZIglkp6Ni*lc_g>Dl5m~eetsTf84FlFDSY#e%Q zUOhWXJU{i#QbZTex{%Mk-1A51Ga5Tj#@B874>m&~3Kpb5GVvJhzqq&BXKQ)ZgfauU zQ!oDJt&^L&d?du;M()%r6VG({a1M30;aT7ek(EUFyT(ogcRezcBChLOTeuGK%*0b@ zIKifUOQRo=|0?kO>GupDMyF2mc`t{!$JDMrDjtV;1 zOf!ieCA^Z%-S8_a+QQw&HkO9x^SO`kydclZ5l+26CQy;I#rO~l)7Ve=-`75!|G7Mv zLZwf5TGr-xK!F}Myo5$)Q~74{mBeMlGuy`M5I$=wZivUY^V)bG+tHfTrRy#7&L^!A z;Zu}fP5OELWLky0yREQ+EtHPTX>D2!GTx@p5aRRjB+pW>?lv%$XZvl#JIMdU=J|*4 z8PZ#Gf5F|D^b?f1O?oNrz)}*Mr`CqoY{9C8<85d3_$>ENJX=hmXOyYSoqF{neJXc0 zp6w^`4a)sPyb_)I$mZKexC+m+^K38A{M=R3F#kW0IEROS;0o?LJQz)(Bc$ol2}y86 z{8lW5tC6R$jf;}xpKUu@hBCkMd@*Uh7dohX6?yg}cW%Ou@qO+{)qae^Pbstzhfyda z8P@SI_4mlz5oQJ=VFR+3CEFs|&G8Mu3#J6&%UX4ggz0Oj}CE_#iTN2-+k}5Pbi}-J( zw|XIOYME4TleYn!rgf!L6S?b&CM?q?P2J$Q{YE2=cvQpU)zGhB`jLqNHac&lAFd zG5qH`k<=?c4>waNl+3RZ{)T%Im0uvO2=`s$Ey!G!=eo)gFF?4Oji<2AjzprB_EQO3wQGT3&PC^e@&joR5+Qt z4fzI=K1c<)&huPX7|+t$x=K)X8S#w7yAi&_eULm4T2ZhpcSj!T%1(F%9&=-KjLNPO z4xzwe!XMho-z2WwZ(U0U^SQNOaA zh3XO#XgkF1T2jZ3o^r`GMlElVzSYp!n7D*_C->Ja5=Ardjym9r4UO=dP@I2wq<=(w za)tvxdxDzA#SHN?l0p8V{&_)%mZtYbMGlQjNM3oUSGvrh17Z>rd;=(+{L}GcX>%kp z0-yg4Rqu{7dDH0xZ*t*t#nR2PwFJH0Yx_lNu96Wvw@CPqb#oY(WAKRM{(^vu~peZxbeBEx-= zW-Vqs{Vv@gUvx}~{1xnJ+=0C|A}%t)AMay# zg{zu~n9!(rCXYQxB_rJ?wM7_4q`L=ff6d}f`1{kedEFvTXIlZ?V9$b5* z<)YUUlD1MpTx3`Rhk*@Z#>}8tD6)(s$Wi{3syRFr(ggWqeO2o@T@tWbN{`&0scAC#;}gszr0~BgAL}ipqvkGp zXq?}d7_054QEIAE_e@Ai%YvRTZ@}GSdJ-Lz;0uq84~wBAnk?UdksMaag}P_i&mySb z;W12`@|un0i;atMThl2Dak^?b*j?JVZgZU5$msZlPz^COOvhT293L4Gtq#4~HA~ly zEW)rvMi8H}s<3B=H_yNM^*S)6Qd$-BJkLBYaI8SCU|)US5HZma4V&BE&da$ae}K1- zd7;GDuWX;21EZ~zI?{2aeibt`j zqO=U=)mgfnn^2w^a^I674y9Po=&}jEl%V>aC!T=22{>E{Zc9v?yA#|=NL|&?cweNu zwqYD0PFR$Bsreh280~gO3!8e1&CG@P?7qwh+YucoGVXiQAP zAa)IJJu^B^HVN_mutauq6WSOanJ}_r;sE>Eh)?;Wfya}!uzz4^VpM`JHikuvjf)%} z8a6WZOOW)qiKlnUzNVi3o~-UnB}5MOkBW)*rxb1Od7dU6ug19eltQn1&ZWy(t%|Qo zoqAR3q&#Zp3HSc{dF$pIqD}4Rn=mBG9~sTk4q(6NOmGGU_~Z1k@cSbC1L6`R_2pm= z5=Z>|b~IBlz(2_Ej|->p@Hp0!Ttj`~|J%2XPh0SRf7^6A{84-gc=!2zoYg@wRAWAM zDSYbcw9DJle|W3=c6D3gE9IvuhCf!`&*_O3OKuiJrcB!88ShQkJTxJ3XiD0xo>J*^{pZ`rM49XGJQ60 zRi*wfpGc0d`-N;586TB6Bq8PUZckxPCU;Td*i$J#?BRu%vwKWbgkEOM{cr`NQ`+qF z{F1Q`C&3>*gm+*lZ)^6nKO&Sl9>ob68pC;r_6_n67~qc%_C@>stQkM#gvCTButR+@ zvA&^x3jObkol@txXSk=h8Hag0{9neAvh0NCS>~Kw-0voRV=qO8(y5e%pL-@}&DBy{ zkEC#xzu;f9(KkAyuVQG~cqU~q!x|DA%S)RrGb(a0 z?~7OIaJ>5!bvLexgmbLjGJHfsH4%JBWBjq9yoz+9quqTyAT%^CB&Er1kKfZ=-_iK6 zL2;3T2PXKU{Qh{p4N>m2a?JHJpKmbVANs=!jc)5pI*4XX-|fCgS$D@1nJ&L6>9nO1 z-pgTwBK?dzGCnEOkDe77`8c{i8l|lG(eriMmz(-|#SKySOifxzlffPNzZ;P5yXTeR zMEU$t{9uqW`e)BHZ_3Y)Js+k|dFQF;peI91ZH)wfO6O;u$!UT@?Y9-HrF{O}lRjEslLyQ1erD;5zOuXrRBuR1QabNJuQxIw>9dbKc>)RH zekOJVpH=dO$1qJ1{t>)}{`1x_`;u1#Ga8}wc0aHFD05aroaU@i>Wi3mGzb6l>pEPO zYL;W7dC4T`yvUnpR2eYoGT^i%4@B^<7UCdDJMYm8`Tw++H_B=bp-48762#$>E z(N56XxWC{E@io_|=(_zb^HO3XMpi=cx2D${;ZHeU$9uw)mY)xzQ)bokmQ4SD0Q>2rzyJUM delta 32128 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 diff --git a/locale/nl_NL/LC_MESSAGES/django.po b/locale/nl_NL/LC_MESSAGES/django.po index 06ff309e1..445628c7b 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-20 08:08\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Dutch\n" "Language: nl\n" @@ -54,19 +54,19 @@ msgstr "Wachtwoord komt niet overeen" msgid "Incorrect Password" msgstr "Onjuist wachtwoord" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Einddatum kan niet vĆ³Ć³r de begindatum zijn." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Einddatum van lezen kan niet voor begindatum zijn." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Einddatum van lezen kan niet in de toekomst zijn." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "De einddatum van lezen kan niet in de toekomst liggen." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automatisch gegenereerd rapport" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "In behandeling" @@ -258,17 +259,24 @@ msgstr "Volgers" msgid "Private" msgstr "PrivĆ©" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Actief" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Voltooid" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Gestopt" @@ -284,6 +292,10 @@ msgstr "Fout bij laden boek" msgid "Could not find a match for book" msgstr "Kan geen match vinden voor het boek" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Mislukt" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratis" @@ -359,7 +371,7 @@ msgstr "Recensies" msgid "Comments" msgstr "Opmerkingen" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Quotes" @@ -473,7 +485,7 @@ msgstr "ē®€ä½“äø­ę–‡ (Traditioneel Chinees)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Oh nee!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Toestemming geweigerd" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Je hebt geen toestemming om deze pagina te bekijken of deze actie uit te voeren. Je gebruikersrechtenniveau is %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Als u denkt dat u toegang zou moeten hebben, neem dan contact op met uw BookWyrm serverbeheerder." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ 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 "" +msgstr "Bestand te groot" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "Het bestand dat u wilt uploaden is te groot." #: 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 "" +msgstr "\n" +" U kunt een kleiner bestand proberen te gebruiken of uw BookWyrm serverbeheerder vragen om de DATA_UPLOAD_MAX_MEMORY_SIZE instelling te verhogen.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -964,6 +978,7 @@ msgstr "Opslaan" #: 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" @@ -981,6 +996,7 @@ msgstr "Bij het laden van gegevens wordt verbinding gemaakt met %(source #: 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 "Bevestigen" @@ -1480,9 +1496,12 @@ msgid "Domain" msgstr "Domein" #: 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 @@ -1494,7 +1513,8 @@ msgstr "Status" #: 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:108 msgid "Actions" @@ -2547,7 +2567,7 @@ msgstr "Streepjescodelezer" #: bookwyrm/templates/guided_tour/home.html:102 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 "" +msgstr "Gebruik de Lijsten, Ontdek, en Jouw boeken links om te ontdekken hoe je suggesties kunt lezen en wat er gebeurt op deze server, of om jouw catalogisboeken te zien!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2826,111 +2846,121 @@ msgid "No activities for this hashtag yet!" 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:66 -msgid "Import Books" -msgstr "Importeer boeken" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importeer boekenlijst" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "Geen geldig CSV-bestand" -#: 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] "Momenteel mag je %(display_size)s boek 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 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "Je hebt %(display_left)s over." -#: 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 "Recente imports hebben gemiddeld %(hours)s uur in beslag genomen." -#: 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 "Recente imports hebben gemiddeld %(minutes)s minuten in beslag genomen." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Gegevensbron:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Je kunt je Goodreads gegevens downloaden met behulp van de Import/Export pagina van je Goodreads account." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Data bestand:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Recensies toevoegen" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Privacyinstelling voor geĆÆmporteerde recensies:" -#: 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 "Importeren" -#: 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 "Je hebt de limiet voor importeren bereikt." -#: 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 "Importeren is tijdelijk uitgeschakeld. Bedankt voor je geduld." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Recent geĆÆmporteerd" -#: 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 "Datum aangemaakt" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Laatst bijgewerkt" -#: 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 "Items" -#: 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 "Geen recente imports" @@ -2966,7 +2996,8 @@ msgid "Refresh" msgstr "Vernieuw" #: 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 "Stop met importeren" @@ -3064,6 +3095,133 @@ msgstr "Deze import is in een oud formaat dat niet langer wordt ondersteund. Als msgid "Update import" msgstr "Import bijwerken" +#: 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 "Importeer BookWyrm Account" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "Geen geldig importbestand" + +#: 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 "Stap 1:" + +#: 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 "Stap 2:" + +#: 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 "Gebruikersprofiel" + +#: 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 "Gebruikersinstellingen" + +#: 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 "Uw tijdszone" + +#: bookwyrm/templates/import/import_user.html:104 +msgid "Your default post privacy setting" +msgstr "Uw standaard privacy-instelling voor post" + +#: bookwyrm/templates/import/import_user.html:112 +msgid "Followers and following" +msgstr "Volgers en volgen" + +#: bookwyrm/templates/import/import_user.html:116 +msgid "User blocks" +msgstr "Geblokkeerde gebruikers" + +#: bookwyrm/templates/import/import_user.html:123 +msgid "Reading goals" +msgstr "Leesdoelen" + +#: bookwyrm/templates/import/import_user.html:126 +msgid "Overwrites reading goals for all years listed in the import file" +msgstr "Overschrijft leesdoelen voor alle jaren vermeld in het importbestand" + +#: bookwyrm/templates/import/import_user.html:130 +msgid "Shelves" +msgstr "Boekenplanken" + +#: bookwyrm/templates/import/import_user.html:133 +msgid "Reading history" +msgstr "Leesgeschiedenis" + +#: bookwyrm/templates/import/import_user.html:136 +msgid "Book reviews" +msgstr "Recensies boeken" + +#: bookwyrm/templates/import/import_user.html:142 +msgid "Comments about books" +msgstr "Opmerkingen over boeken" + +#: bookwyrm/templates/import/import_user.html:145 +msgid "Book lists" +msgstr "Boekenlijst" + +#: bookwyrm/templates/import/import_user.html:148 +msgid "Saved lists" +msgstr "Opgeslagen lijsten" + #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" @@ -3084,7 +3242,7 @@ msgid "Reject" msgstr "Afwijzen" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Mislukte items" @@ -3864,6 +4022,16 @@ msgstr "heeft de naam van %(group_name)s verander msgid "has changed the description of %(group_name)s" msgstr "heeft de omschrijving van %(group_name)s gewijzigd" +#: 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 "Verwijder meldingen" @@ -4107,7 +4275,7 @@ msgstr "Alias verwijderen" #: 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 "Geblokkeerde gebruikers" @@ -4242,14 +4410,66 @@ msgstr "Standaard privacyniveau berichten:" 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 "Op zoek naar privacy voor boekenplanken? Je kan een apart zichtbaarheidsniveau instellen voor elk van je boekenplanken. Ga naar Jouw boeken, kies een boekenplank in de tabbalk en klik op \"Bewerk boekenplank\"" +#: 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 "Exporteer BookWyrm Account" + +#: 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "Maak gebruikersexportbestand aan" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "Recente exporten" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Datum" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Grootte" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "Download uw export" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV Export" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "Exporteer boekenlijst" #: 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 "Je export bevat alle boeken op je boekenplanken, boeken waar je een recensie voor hebt geschreven en boeken met leesactiviteit." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4487,7 @@ msgstr "Verhuis account" msgid "Data" msgstr "Gegevens" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV export" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relaties" @@ -4763,7 +4979,8 @@ msgid "Active Tasks" msgstr "Actieve Taken" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5157,9 +5374,14 @@ msgid "No instances found" msgstr "Geen instances gevonden" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Stop met importeren?" +#: 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 "Schakel het starten van nieuwe imports uit" @@ -5172,70 +5394,107 @@ msgstr "Dit is alleen bedoeld om te worden gebruikt wanneer er iets helemaal ver msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Zolang importeren is uitgeschakeld kunnen gebruikers geen nieuwe imports starten, maar bestaande imports blijven doorgaan." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "Importeren uitschakelen" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Gebruikers kunnen momenteel geen nieuwe imports starten" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Importeren inschakelen" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Beperk het aantal imports" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Sommige gebruikers proberen misschien een groot aantal boeken te importeren, wat je wilt beperken." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Zet de waarde op 0 om geen limiet af te dwingen." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Importlimiet instellen op" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "boeken elke" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dagen." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Limiet instellen" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "Beperk de import en export van gebruikers tot eenmaal elke " + +#: bookwyrm/templates/settings/imports/imports.html:113 +msgid "hours" +msgstr "uren" + +#: bookwyrm/templates/settings/imports/imports.html:117 +msgid "Change limit" +msgstr "Wijzig limiet" + +#: bookwyrm/templates/settings/imports/imports.html:125 +msgid "Book Imports" +msgstr "GeĆÆmporteerde boeken" + +#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:225 msgid "Completed" msgstr "Voltooid" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Gebruiker" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Laatst Bijgewerkt" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Openstaande items" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Succesvolle items" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Geen overeenkomende importen gevonden." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" +msgstr "GeĆÆmporteerde gebruikers" + #: 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 @@ -5722,7 +5981,7 @@ msgstr "Standaardthema van instance instellen" #: bookwyrm/templates/settings/themes.html:19 msgid "One of your themes appears to be broken. Selecting this theme will make the application unusable." -msgstr "" +msgstr "Een van uw thema's lijkt kapot te zijn. Het selecteren van dit thema maakt de toepassing onbruikbaar." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5776,15 +6035,15 @@ msgstr "Thema verwijderen" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Test thema" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "Gebroken thema" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Succesvol geladen" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5833,7 +6092,7 @@ msgstr "Niet ingesteld" #: bookwyrm/templates/settings/users/user_info.html:20 msgid "This account is the instance actor for signing HTTP requests." -msgstr "" +msgstr "Dit account is de instance actor voor het ondertekenen van HTTP-verzoeken." #: bookwyrm/templates/settings/users/user_info.html:24 msgid "View user profile" @@ -5905,15 +6164,15 @@ msgstr "Gebruikersacties" #: bookwyrm/templates/settings/users/user_moderation_actions.html:15 msgid "This is the instance admin actor" -msgstr "" +msgstr "Dit is de beheerder van de server" #: 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 "" +msgstr "Je moet deze rekening niet verwijderen of uitschakelen omdat deze cruciaal is voor de werking van je server. Deze actor signeert uitgaande GET-verzoeken om vloeiende interactie met veilige ActivityPub servers mogelijk te maken." #: 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 "" +msgstr "Dit account kan niet ontdekt worden door gewone gebruikers en heeft geen profielpagina." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6048,17 +6307,15 @@ msgstr "Nieuwe boekenplank maken" msgid "Edit Shelf" msgstr "Bewerk boekenplank" -#: 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:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alle boeken" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importeer boeken" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6625,7 +6882,7 @@ msgstr "heeft %(book)s beoordeeld:" #: bookwyrm/templates/snippets/status/headers/read.html:10 #, python-format msgid "finished reading %(book)s by %(author_name)s" -msgstr "heeft %(book)s door %(author_name)s uitlezen" +msgstr "heeft %(book)s door %(author_name)s gelezen" #: bookwyrm/templates/snippets/status/headers/read.html:17 #, python-format diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo index 9fad84bd2222cd9495f1343c1ba14f7787d1aec3..29996d39e01d25a76224b3309857bc5760a73b99 100644 GIT binary patch delta 25178 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 delta 25252 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 kCGFzoEs`gC\n" "Language-Team: Norwegian\n" "Language: no\n" @@ -54,19 +54,19 @@ msgstr "Passordet samsvarer ikke" msgid "Incorrect Password" msgstr "Feil passord" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Sluttdato kan ikke vƦre fĆør startdato." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Stoppdato for lesing kan ikke vƦre fĆør startdato." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Stoppdato for lesing kan ikke vƦre i fremtiden." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Sluttdato for lesing kan ikke vƦre i fremtiden." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automatisk generert rapport" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Avventer" @@ -258,17 +259,24 @@ msgstr "FĆølgere" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiv" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Ferdig" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Stoppet" @@ -284,6 +292,10 @@ msgstr "Feilet ved lasting av bok" msgid "Could not find a match for book" msgstr "Fant ikke den boka" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratis" @@ -359,7 +371,7 @@ msgstr "Anmeldelser" msgid "Comments" msgstr "Kommentarer" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Sitater" @@ -964,6 +976,7 @@ msgstr "Lagre" #: 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" @@ -981,6 +994,7 @@ msgstr "Laster inn data kobler til %(source_name)s og finner me #: 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 "Bekreft" @@ -1480,9 +1494,12 @@ msgid "Domain" msgstr "Domene" #: 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 @@ -1494,7 +1511,8 @@ msgstr "Status" #: 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:108 msgid "Actions" @@ -2826,111 +2844,121 @@ msgid "No activities for this hashtag yet!" msgstr "Ingen aktiviteter for denne emneknaggen ennĆ„!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "Importer bĆøker" +#: 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 "Ikke en gyldig CSV-fil" -#: 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 "I gjennomsnitt har de siste importene tatt %(hours)s timer." -#: 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 "I gjennomsnitt har de siste importene tatt %(minutes)s minutter." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Datakilde:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Du kan laste ned Goodreads-dataene dine fra Import/Export-siden pĆ„ Goodreads-kontoen din." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Datafil:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Inkluder anmeldelser" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Personverninnstilling for importerte anmeldelser:" -#: 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 "ImportĆ©r" -#: 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 "Du har nĆ„dd importeringsgrensa." -#: 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 "Importering er midlertidig deaktivert; takk for din tĆ„lmodighet." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Nylig importer" -#: 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 "Opprettet dato" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Sist oppdatert" -#: 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 "Elementer" -#: 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 "Ingen nylige importer" @@ -2966,7 +2994,8 @@ msgid "Refresh" msgstr "Oppdater" #: 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 "Stopp import" @@ -3064,6 +3093,133 @@ msgstr "Denne importen er i et gammelt format som ikke lenger stĆøttes. Klikk p msgid "Update import" msgstr "Oppdater import" +#: 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 "Brukerprofil" + +#: 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" @@ -3084,7 +3240,7 @@ msgid "Reject" msgstr "AvslĆ„" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Mislykkede ting" @@ -3864,6 +4020,16 @@ msgstr "har endret navnet pĆ„ %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "har endret beskrivelsen av %(group_name)s" +#: 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 "Slette varsler" @@ -4107,7 +4273,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 "Blokkerte brukere" @@ -4242,13 +4408,65 @@ msgstr "Standard tilgangsnivĆ„ pĆ„ innlegg:" 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV-eksport" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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." +msgid "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." msgstr "" #: bookwyrm/templates/preferences/export.html:20 @@ -4267,11 +4485,7 @@ msgstr "" msgid "Data" msgstr "Data" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV-eksport" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relasjoner" @@ -4761,7 +4975,8 @@ msgid "Active Tasks" msgstr "" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "" @@ -5155,9 +5370,14 @@ msgid "No instances found" msgstr "Ingen instanser funnet" #: 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 "" @@ -5170,70 +5390,107 @@ msgstr "" 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 +#: 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:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Sett importgrense til" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "bĆøker hver" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dager." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Sett grense" -#: bookwyrm/templates/settings/imports/imports.html:102 -msgid "Completed" -msgstr "FullfĆørt" - -#: bookwyrm/templates/settings/imports/imports.html:116 -msgid "User" -msgstr "Bruker" - -#: bookwyrm/templates/settings/imports/imports.html:125 -msgid "Date Updated" +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:132 -msgid "Pending items" +#: 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 "FullfĆørt" + +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 +msgid "User" +msgstr "Bruker" + +#: 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:170 +#: 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 @@ -6046,17 +6303,15 @@ msgstr "Lag hylle" msgid "Edit Shelf" msgstr "Rediger hylle" -#: bookwyrm/templates/shelf/shelf.html:26 -#: bookwyrm/templates/user/relationships/followers.html:18 -#: bookwyrm/templates/user/relationships/following.html:18 -msgid "User profile" -msgstr "Brukerprofil" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alle bĆøker" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importer bĆøker" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/pl_PL/LC_MESSAGES/django.mo b/locale/pl_PL/LC_MESSAGES/django.mo index 2f9ab5f42cb2c606864effa9abd2277f292961ae..d8acdec42fd8a22040b012c21a430ce8dfe66550 100644 GIT binary patch delta 36418 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 delta 28481 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 aG~uDaanWf4PW!H=4S1F!?n%yoj{gHi*O^=Z diff --git a/locale/pl_PL/LC_MESSAGES/django.po b/locale/pl_PL/LC_MESSAGES/django.po index 9d2fec098..ce119da92 100644 --- a/locale/pl_PL/LC_MESSAGES/django.po +++ b/locale/pl_PL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-02-26 20:08\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Polish\n" "Language: pl\n" @@ -54,19 +54,19 @@ msgstr "Hasła nie są identyczne" msgid "Incorrect Password" msgstr "Niepoprawne hasło" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Data ukończenia czytania musi mieć miejsce po dacie rozpoczęcia." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Data ukończenia czytania musi mieć miejsce po dacie rozpoczęcia." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Data wstrzymania czytania nie może być w przyszłości." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Data zakończenia czytania nie może być w przyszłości." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automatycznie wygenerowany raport" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Oczekujące" @@ -258,17 +259,24 @@ msgstr "Obserwujący" msgid "Private" msgstr "Prywatne" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktywne" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Zakończone" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Wstrzymane" @@ -284,6 +292,10 @@ msgstr "Błąd wczytywania książki" msgid "Could not find a match for book" msgstr "Nie znaleziono pasującej książki" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "Błąd" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Bezpłatne" @@ -305,47 +317,47 @@ msgstr "Zatwierdzone" #: bookwyrm/templates/settings/reports/report.html:115 #: bookwyrm/templates/snippets/create_status.html:26 msgid "Comment" -msgstr "" +msgstr "Skomentuj" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "Rozwiązane zgłoszenie" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "Ponownie otworzone zgłoszenie" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" -msgstr "" +msgstr "Wysłano do zgłaszającego" #: bookwyrm/models/report.py:88 msgid "Messaged reported user" -msgstr "" +msgstr "Wysłano do zgłoszonego użytkownika" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "Użytkownik zawieszony" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "Anulowano zawieszenie" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "Zmieniono poziom uprawnień użytkownika" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "Usunięto konto użytkownika" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "Domena zablokowana" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "Zatwierdzona domena" #: bookwyrm/models/report.py:95 msgid "Deleted item" @@ -359,7 +371,7 @@ msgstr "Oceny" msgid "Comments" msgstr "Komentarze" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Cytaty" @@ -409,7 +421,7 @@ msgstr "EspaƱol (Hiszpański)" #: bookwyrm/settings.py:318 msgid "Euskara (Basque)" -msgstr "" +msgstr "Euskara (Baskijski)" #: bookwyrm/settings.py:319 msgid "Galego (Galician)" @@ -441,7 +453,7 @@ msgstr "Norsk (Norweski)" #: bookwyrm/settings.py:326 msgid "Polski (Polish)" -msgstr "Polski" +msgstr "polski" #: bookwyrm/settings.py:327 msgid "PortuguĆŖs do Brasil (Brazilian Portuguese)" @@ -461,7 +473,7 @@ msgstr "Svenska (Szwedzki)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukraiński)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Tradycyjny chiński)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "O nie!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "Odmowa dostępu" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Brak uprawnień do zobaczenia tej strony lub wykonania tej czynności. Poziom Twoich uprawnień to %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "Jeśli Twoim zdaniem jest to błąd, skontaktuj się ze swoim administratorem serwera BookWyrm." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,19 @@ msgstr "Wygląda na to, że ta strona nie istnieje!" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "Za duży plik" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +msgstr "Przesyłany plik jest za duży." #: 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 "" +msgstr "\n" +" Możesz sprĆ³bować przesłać mniejszy plik lub poprosić swojego administratora serwera BookWyrm o zwiększenie wartości ustawienia DATA_UPLOAD_MAX_MEMORY_SIZE.\n" +" " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -536,7 +550,7 @@ msgstr "Witaj na %(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 jest częścią BookWyrm, sieci niezależnych, samostanowiących społeczności czytelnikĆ³w. Możesz beproblemowo wchodzić w interakcje z użytkownikami gdziekolwiek w sieci BookWyrm, ta społeczność jest wyjątkowa." +msgstr "%(site_name)s jest częścią BookWyrm, sieci niezależnych, samostanowiących społeczności czytelnikĆ³w. Możesz bezproblemowo wchodzić w interakcje z użytkownikami gdziekolwiek w sieci BookWyrm." #: bookwyrm/templates/about/about.html:45 #, python-format @@ -555,7 +569,7 @@ msgstr "%(title)s ma najbardziej podzielo #: 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 "ŚledÅŗ swĆ³j postęp czytelniczy, rozmawiaj o książkach, pisz opinie i odkrywaj co czytać następne. Na zawsze bez reklam, antykorporacyjne i skierowane w stronę społeczności, BookWyrm jest programem dla ludzi, stworzonym, by pozostać małym i personalnym. Jeśli masz pomysł, zauważył_ś błąd, albo masz wielkie marzenie, złoś się i pozwĆ³l się wysłuchać." +msgstr "ŚledÅŗ swĆ³j postęp czytania, rozmawiaj o książkach, pisz recenzje i odkryj swoją następną książkę. Na zawsze bez reklam, antykorporacyjne i skierowane w stronę społeczności, BookWyrm jest oprogramowaniem dla ludzi, stworzonym, by pozostać małym i personalnym. Jeśli masz pomysł, chcesz zgłosić błąd lub masz wielką wizję, daj znać i pozwĆ³l się wysłuchać." #: bookwyrm/templates/about/about.html:105 msgid "Meet your admins" @@ -925,7 +939,7 @@ msgstr "Klucz Goodreads:" #: bookwyrm/templates/author/edit_author.html:109 msgid "ISFDB:" -msgstr "" +msgstr "ISFDB:" #: bookwyrm/templates/author/edit_author.html:116 msgid "ISNI:" @@ -972,6 +986,7 @@ msgstr "Zapisz" #: 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" @@ -989,6 +1004,7 @@ msgstr "Wczytanie danych spowoduje połączenie z %(source_name)sLists, Discover, and Your Books links to discover reading suggestions and the latest happenings on this server, or to see your catalogued books!" -msgstr "" +msgstr "Użyj odnośnikĆ³w Listy, Odkrywaj oraz Twoje książki, aby odkrywać sugestie czytania i najnowsze wydarzenia na tym serwerze lub zobaczyć swoje skatalogowane książki!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2579,15 +2599,15 @@ msgstr "Książki na Twoich pĆ³Å‚kach statusu czytania zostaną pokazane tutaj." #: bookwyrm/templates/guided_tour/home.html:151 msgid "Updates from people you are following will appear in your Home timeline.

    The Books tab shows activity from anyone, related to your books." -msgstr "" +msgstr "Aktualizacje od obserwowanych osĆ³b zostaną pokazane na osi Głowna.

    W karcie Książki pokazywana jest aktywność każdej osoby związana z Twoimi książkami." #: bookwyrm/templates/guided_tour/home.html:152 msgid "Timelines" -msgstr "" +msgstr "Osie czasu" #: bookwyrm/templates/guided_tour/home.html:176 msgid "The bell will light up when you have a new notification. When it does, click on it to find out what exciting thing has happened!" -msgstr "Dzwonek podświetli się, gdy dostaniesz nowe powiadomienie. Gdy tak się stanie, naciśnij na niego, aby zobaczyć co ciekawego się wydarzyło!" +msgstr "Dzwonek zostanie podświetlony, 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:77 bookwyrm/templates/layout.html:107 @@ -2599,11 +2619,11 @@ msgstr "Powiadomienia" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Dostęp do swojego profilu, katalogu użytkownika, wiadomości bezpośrednich oraz ustawień możesz uzyskać, naciskając na swoją nazwę w tym menu." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." -msgstr "Wybierz Profil z listy rozwijanej menu, aby kontynuować." +msgstr "Wybierz Profil z rozwijanego menu, aby kontynuować." #: bookwyrm/templates/guided_tour/home.html:201 msgid "Profile and settings menu" @@ -2644,11 +2664,11 @@ msgstr "Prywatność listy" #: bookwyrm/templates/guided_tour/lists.html:105 msgid "You can also decide how your list is to be curated - only by you, by anyone, or by a group." -msgstr "" +msgstr "Możesz zdecydować, przez kogo może być edytowana Twoja lista ā€” tylko przez Ciebie, przez kogokolwiek lub przez grupę." #: bookwyrm/templates/guided_tour/lists.html:106 msgid "List curation" -msgstr "" +msgstr "Edytowanie listy" #: bookwyrm/templates/guided_tour/lists.html:128 msgid "Next in our tour we will explore Groups!" @@ -2709,7 +2729,7 @@ msgstr "Kontynuuj" #: bookwyrm/templates/guided_tour/user_books.html:10 msgid "This is the page where your books are listed, organised into shelves." -msgstr "" +msgstr "Na tej stronie Twoje książki są uporządkowane na pĆ³Å‚kach." #: bookwyrm/templates/guided_tour/user_books.html:11 #: bookwyrm/templates/user/books_header.html:4 @@ -2718,11 +2738,11 @@ msgstr "Twoje książki" #: 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 "" +msgstr "Do przeczytania, Obecnie czytane, Przeczytane oraz Wstrzymane to domyślne pĆ³Å‚ki. Po zmianie statusu czytania książki zostanie ona automatycznie przeniesiona na odpowiednią pĆ³Å‚kę. Książka może być umieszczona jednocześnie tylko na jednej z domyślnych pĆ³Å‚ek." #: bookwyrm/templates/guided_tour/user_books.html:32 msgid "Reading status shelves" -msgstr "" +msgstr "PĆ³Å‚ki statusu czytania" #: bookwyrm/templates/guided_tour/user_books.html:55 msgid "You can create additional custom shelves to organise your books. A book on a custom shelf can be on any number of other shelves simultaneously, including one of the default reading status shelves" @@ -2839,120 +2859,130 @@ msgstr "ZnajdÅŗ książkę" #: bookwyrm/templates/hashtag.html:12 #, python-format msgid "See tagged statuses in the local %(site_name)s community" -msgstr "" +msgstr "Zobacz oznaczone statusy w lokalnej społeczności %(site_name)s" #: bookwyrm/templates/hashtag.html:25 msgid "No activities for this hashtag yet!" -msgstr "Brak aktywności dla tej etykiety!" +msgstr "Brak aktywności dla tego znacznika!" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "Importuj książki" +#: bookwyrm/templates/import/import.html:6 +#: bookwyrm/templates/preferences/layout.html:43 +msgid "Import Book List" +msgstr "Importuj listę książek" -#: bookwyrm/templates/import/import.html:13 +#: bookwyrm/templates/import/import.html:12 msgid "Not a valid CSV file" msgstr "To nie jest prawidłowy plik CSV" -#: 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] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Obecnie możesz importować %(display_size)s książek co %(import_limit_reset)s dzień." +msgstr[1] "Obecnie możesz importować %(display_size)s książek co %(import_limit_reset)s dni." +msgstr[2] "Obecnie możesz importować %(display_size)s książek co %(import_limit_reset)s dni." +msgstr[3] "Obecnie możesz importować %(display_size)s książek co %(import_limit_reset)s dni." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." -msgstr "" +msgstr "Pozostało %(display_left)s." -#: 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 "Ostatnie importy zajmowały średnio %(hours)s godzin." -#: 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 "Ostatnie importy zajmowały średnio %(minutes)s minut." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "ŹrĆ³dło danych:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "" +msgstr "Możesz pobrać swoje dane Goodreads ze strony Importuj/Eksportuj na swoim koncie Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Plik danych:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Uwzględnij recenzje" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "Ustawienia prywatności dla importowanych recenzji:" -#: 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 "Importuj" -#: 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 "Limit importĆ³w osiągnięty." -#: 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 "Importowanie jest tymczasowo wyłączone; dziękujemy za Twoją cierpliwość." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Najnowsze recenzje" -#: 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 "Data utworzenia" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Najnowsza aktualizacja" -#: 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 "" +msgstr "Elementy" -#: 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 "Brak ostatnich importĆ³w" @@ -2965,7 +2995,7 @@ msgstr "Status importu" #: bookwyrm/templates/import/import_status.html:13 #: bookwyrm/templates/import/import_status.html:27 msgid "Retry Status" -msgstr "" +msgstr "PonĆ³w status" #: bookwyrm/templates/import/import_status.html:22 #: bookwyrm/templates/settings/celery.html:45 @@ -2988,7 +3018,8 @@ msgid "Refresh" msgstr "Odśwież" #: 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 "Wstrzymaj import" @@ -3004,7 +3035,7 @@ msgstr[3] "%(display_counter)s elementĆ³w wymaga ręcznego zatwierdzenia." #: bookwyrm/templates/import/import_status.html:83 #: bookwyrm/templates/import/manual_review.html:8 msgid "Review items" -msgstr "" +msgstr "Przejrzyj elementy" #: bookwyrm/templates/import/import_status.html:89 #, python-format @@ -3084,12 +3115,139 @@ msgstr "PonĆ³w" #: bookwyrm/templates/import/import_status.html:237 msgid "This import is in an old format that is no longer supported. If you would like to troubleshoot missing items from this import, click the button below to update the import format." -msgstr "" +msgstr "Ten import jest zapisany w starym formacie, ktĆ³ry nie jest już obsługiwany. Jeśli chcesz rozwiązać problemy z brakującymi elementami z tego importu, naciśnij na poniższy przycisk, aby zaktualizować format importu." #: bookwyrm/templates/import/import_status.html:239 msgid "Update import" msgstr "Zaktualizuj import" +#: 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 "Importuj konto BookWyrm" + +#: bookwyrm/templates/import/import_user.html:13 +msgid "Not a valid import file" +msgstr "To nie jest prawidłowy plik importu" + +#: 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 "Jeśli chcesz przenieść jakiekolwiek statusy (komentarze, recenzje lub cytaty), należy ustawić to konto jako alias konta, z ktĆ³rego chcesz coś przenieść lub przenieś to konto do tego przed importowaniem swoich danych użytkownika." + +#: 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 "Obecnie możesz importować jednego użytkownika co %(user_import_hours)s godzin." + +#: 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 "Krok 1:" + +#: 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 "Wybierz plik eksportu wygenerowany z innego konta BookWyrm. Plik powinien być w formacie .tar.gz." + +#: bookwyrm/templates/import/import_user.html:58 +msgid "Step 2:" +msgstr "Krok 2:" + +#: bookwyrm/templates/import/import_user.html:60 +msgid "Deselect any checkboxes for data you do not wish to include in your import." +msgstr "Odznacz wszelkie pola wyboru danych, ktĆ³rych nie chcesz zawrzeć w swoim imporcie." + +#: 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 "Profil użytkownika" + +#: bookwyrm/templates/import/import_user.html:74 +msgid "Overwrites display name, summary, and avatar" +msgstr "Nadpisuje nazwę wyświetlaną, podsumowanie oraz awatar" + +#: bookwyrm/templates/import/import_user.html:80 +msgid "User settings" +msgstr "Ustawienia użytkownika" + +#: bookwyrm/templates/import/import_user.html:83 +msgid "Overwrites:" +msgstr "Nadpisuje:" + +#: 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" @@ -3110,7 +3268,7 @@ msgid "Reject" msgstr "Odrzuć" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "" @@ -3900,6 +4058,16 @@ msgstr "zmienia nazwę dla %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "zmienia opis dla %(group_name)s" +#: 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 "Usuń powiadomienia" @@ -4143,7 +4311,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 "Zablokowani użytkownicy" @@ -4278,14 +4446,66 @@ msgstr "Domyślna prywatność wpisu:" 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Eksport CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "TwĆ³j eksport będzie zawierał wszystkie książki na Twoich pĆ³Å‚kach, książki z Twoimi recenzjami oraz książki z aktywnością czytania." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4303,11 +4523,7 @@ msgstr "" msgid "Data" msgstr "Dane" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Eksport CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relacje" @@ -4801,7 +5017,8 @@ msgid "Active Tasks" msgstr "Aktywne zadania" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5203,9 +5420,14 @@ msgid "No instances found" msgstr "Brak instancji" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Wstrzymać import?" +#: 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 "" @@ -5218,70 +5440,107 @@ msgstr "" 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 +#: 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 "Wyłącz importowanie" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Użytkownicy nie mogą obecnie rozpoczynać nowych importĆ³w" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Włącz importowanie" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Ograniczenie ilości importĆ³w" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Część użytkownikĆ³w może podjąć prĆ³bę importu dużej ilości książek, co możesz ograniczyć." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Ustaw wartość na 0, aby nie wymuszać żadnego ograniczenia." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Ustaw limit importĆ³w na" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "książek co" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dni." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Ustaw ograniczenie" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "Zakończone" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Użytkownik" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Data przesłania" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Oczekujące" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Zakończone elementy" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Nie znaleziono pasujących importĆ³w." +#: 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 @@ -6094,17 +6353,15 @@ msgstr "UtwĆ³rz pĆ³Å‚kę" msgid "Edit Shelf" msgstr "Edytuj pĆ³Å‚kę" -#: 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: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:66 +msgid "Import Books" +msgstr "Importuj książki" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 565cb0e0d06b992397c7537a90d526cc88d2b992..43e0165aceac0de44c323a324bd1b8d4983efe29 100644 GIT binary patch delta 23956 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 delta 24304 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 LqeOeJe187}Cm~TT diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index a8965b165..5fb111642 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-02 04:10\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -54,19 +54,19 @@ msgstr "As senhas nĆ£o correspondem" msgid "Incorrect Password" msgstr "Senha incorreta" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "A data de tĆ©rmino da leitura nĆ£o pode ser anterior a de inĆ­cio." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "A data de tĆ©rmino da leitura nĆ£o pode ser antes da data de comeƧo." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "A data de tĆ©rmino da leitura nĆ£o pode estar no futuro." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "A data final da leitura nĆ£o pode ser no futuro." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "RelatĆ³rio gerado automaticamente" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendente" @@ -258,17 +259,24 @@ msgstr "Seguidores" msgid "Private" msgstr "Particular" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Ativo" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Completo" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Parado" @@ -284,6 +292,10 @@ msgstr "Erro ao carregar livro" msgid "Could not find a match for book" msgstr "NĆ£o foi possĆ­vel encontrar o livro" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratuito" @@ -359,7 +371,7 @@ msgstr "Resenhas" msgid "Comments" msgstr "ComentĆ”rios" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "CitaƧƵes" @@ -964,6 +976,7 @@ msgstr "Salvar" #: 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" @@ -981,6 +994,7 @@ msgstr "Para carregar informaƧƵes nos conectaremos a %(source_name)sImport/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 "Arquivo de dados:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Incluir resenhas" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" 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: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 "Importar" -#: 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 "ImportaƧƵes recentes" -#: 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 "Nenhuma importaĆ§Ć£o recente" @@ -2966,7 +2994,8 @@ msgid "Refresh" msgstr "Atualizar" #: 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 "" @@ -3064,6 +3093,133 @@ msgstr "Esta importaĆ§Ć£o estĆ” em um formato antigo que nĆ£o Ć© mais compatĆ­ve msgid "Update import" msgstr "Atualizar importaĆ§Ć£o" +#: 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 "Perfil do usuĆ”rio" + +#: 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" @@ -3084,7 +3240,7 @@ msgid "Reject" msgstr "Rejeitar" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Itens cuja importaĆ§Ć£o falhou" @@ -3864,6 +4020,16 @@ msgstr "mudou o nome de %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "mudou a descriĆ§Ć£o de %(group_name)s" +#: 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 "Limpar notificaƧƵes" @@ -4107,7 +4273,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 "UsuĆ”rios bloqueados" @@ -4242,14 +4408,66 @@ msgstr "Privacidade padrĆ£o das publicaƧƵes:" 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Exportar CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "Seu arquivo conterĆ” todos os livros em suas estantes, suas resenhas e o andamento de suas leituras." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4485,7 @@ msgstr "" msgid "Data" msgstr "Dados" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Exportar CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "RelaƧƵes" @@ -4761,7 +4975,8 @@ msgid "Active Tasks" msgstr "" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "" @@ -5155,9 +5370,14 @@ msgid "No instances found" msgstr "Nenhuma instĆ¢ncia encontrada" #: 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 "" @@ -5170,70 +5390,107 @@ msgstr "" 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 +#: 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:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:102 -msgid "Completed" +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:116 -msgid "User" +#: 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 "Date Updated" -msgstr "" - -#: bookwyrm/templates/settings/imports/imports.html:132 -msgid "Pending items" +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:170 +#: 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 @@ -6046,17 +6303,15 @@ msgstr "Criar estante" msgid "Edit Shelf" msgstr "Editar estante" -#: 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 do usuĆ”rio" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os livros" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importar livros" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index d2cc1bacb7f1878c817fb2d0ca16236d1e7a787e..d44898ecd9c078972dd4e3091799edfeb9980916 100644 GIT binary patch delta 29612 zcmY-11#}hH!iM2F3GO67Z~}o4B#=Om;O_2Du;Nx+5AIsrT}yG7;_g=5T?(`mD+T`d zo4vVtyJrsGtqqg2NU>E<{o zF$?-*Da?rVFewheG&luI;07#&|6mRb@9sEiDhiw8Havg*F{DJdRTVlaMjIuj6dT*{F&&`CyX}dO@fG=EwBd5YyrS)Jo08 z6u8mGPhkT3ckUC2z`yWk3?AS(ac~wUz@?Z8H`(|#OiuhMrb5p^$BB(;FcD_Pc990t?Ve9lVblFmjmV{E9EEGlo0P zYT_kFIL<_Tg>7-*NXJ=#PjMBFq7#{mPFCX0(LDe01cr}soPFp&)^T>?CF{g-JYV7! zC^R3VO>i6@o3jMhVrqKRqdI9FHi->Jyzpd}8{Z*gc7FNAm~4vUFehg=w#GD5S%TsO zhEH`I_M3AQ2Vs$Ej>952d#%N%oAiU&iu6)5%u21cM$9xT_&atazw9i>se)VZ8%CRL zCK7E9CxQ6y*b>uu8D;|l!>~Ty!A2N4&m5oW*n;?BY=&7_hEN=fiE#&VfSi+<9gDNx z+Dn~KdteC$VuFPnTaV-9#C*hSE#h&ZcN_sWx^oUSfQpOFv08@7h(E@z_ywzC=OqjR z_o7b0Gvw9bBwA`rhW^A;V+;(#SeOsvV=;`0RZQIL)FGgPEp0}7li_r;>4PyI`J+%X zo@Vn`pc>kO>R=E0;t|woIe~uo1~nkxW#&``pxVoTvDkl3P6Dw>$d3uJ1SY^5ZUL4Z zb$;8S8XANuKh-)P;}Bnon&Bo?2m4XS@r?Bjs@@w^`~RYjq!W9&nL#+lC0+paD9WHJ zEVSvXQ7f<&HREF#j^{B3`mQjKEDoyU^r#ieh0(D9YGB1s1Fno-jiep{HP{-nVi(j> z&Or@efpryXg*KrYI*2*(9BLps)OvO2LakUU)FbGJd2j-U*mZPyfvHZPM4MhRSbXkXR2jfWVC= zJs8zt9?XwrQTc1=Ny1MK$yqRnD`?m=LuhX|N-PqTXB;Lm+7`)AVgBgx~#2;ZI z{D_)S?CoZt2~h(|hRP2{<>#~cg;9^B6voo|ucQFhM$N1VYNQVRzzz7=Y6-75;`g9mg>pzSzb3YiZ){Hm}yis1?YBaWOY)a}`B( zTm?fh3f18RRJl1ez5@M;Z?+!80>p2kW*)G|yf4b29?ix*tiMKbkOWnHfZA*yP&50A z8c>Yi%>a^EgHh%3qaIaJ)F~>DIyF^L1FUc3KiPO!>p)byW4*S(EYwVvqGr4v)!<&# zGd*Ozf=P%!N0tAEYAEhrb6QfMmO7`6S46ef3^m{`Hr@+0K<@|wYG?|o;RUGOyV({v zgzDft>RH~wZp44u@$yPt;}gu$5)YZUgr@3ZLU92&*VL7 zPsH4B1`;3h6HkL$>N?ga)WF+edhCfB_)JWVE3p9{Mhz(Nfaxa$(-RNJ_&WbJ38-Q- zRKc!phU4@>4QM246V0^g7g6Q!p=SISYH8yiG&4(rY9~FW#4Mux>yt;Vv6Lf+}~;rr)wYwZ64}MU{(v$P7Fgs-0l;s>5&s z8fjtF($_=HunFo^bV7}Mh;=e*Wfr1lwgI&Qdr?b&1hq#Vpz8gH$uRC=^9V9nvmIvr z_3R@^&`b;4jIyXDtcGc@9%jRysAsnr-BW?uv{x_%zC;Zq#u1YrAN3g$h#GKS)P&2T zCRppzP?3lh}f7i;vRX5{fvOP3neQ5GzSMKC7z#ppN$HIY%MiA+YV+#KsVj7Iz* zYUz(*I=tw$32#vie8rd;^O$KMA!@`ysDb1}tw14ELrpLSwnZJ!E*OZTP)olGW8rqx z3hYPsQx)~-yiWMwx|aCpq}+$)Dlj`SU3yS(PGp9Hlykv!#H>w zC*m{I%=?@)GaiGQ&`eCI^S_6HMs^xi@h0}fCm4ZEPML~RP|tc1YCtP6F7C7*K`rS8 z%!PMR9s8d)E1MB}5zmHN$t4(9=YKna*mwxF+t1)od}-6WoZ*`+@xG`I7h`-}i&~N0 zHohMtYA-B7&1?(m)x6(&3lkFmgb6VAC6k~062sO=B1q5*^g(U9Ay@>* zpjO~GYH2Ux5xkA+XxU{`Zv$$nccMBvjY;vAO@E8(IL05QTvGHW9^xgSkr%>bSOqn+ zR;UWyQ29e_d@8EpC8!nIVLgGWcLO!xXV$lR6}oCxvJA3GrtKeZwhe@uPXBmMSKsD5(X^L8*_Lu_uqgHM@YNBh#-58#rU^Oz1^r8A3$|*2KB6Op(gYY-2tK= zb;{eOUIuhO|3hp-1n#Cl0n`jXpf*XgJ7yp$P)nK(b73LOhn-R7S6~j@jOyqCY634X zC4RwFnEbB!o)B@D_19*pPJ*6!15^j?Fc0=aTk7elZh zs)Lr89=oDeU3>?kp*C6KN9GGg8q~8a zf-2v@##^E~9)xOlfz985dNjLGd*d8N*ZIFnK)dxeYKb3VeSC|xvGQZHq)X6;_=hl!t>fu=x}3&M6f|Jey>*UmsSd<3K6DNK&%Q8Rgt zdWQd5<2^H*GBv7$P|S^auo$+*ShyPXXg6UDJb+sQBT$>N5^7*kHvTiJgAtel$D;YG~VjTR4D)0NJJ^u;+G!3Od6$nHv zRW_R*j;fF!HK0>`+lfBlLGa^s)W4ay-sHWSx8uh zn(0|o2ai#2yw9i(Qv79BDif-sI+ze!p=R6z^=Jm5-fSaK?Jh!n?w>^MoqMSEUtqA# zzw@^_9+^=c6+?AU$=VS0>THMVXdJ4esi>LGL(O!xjjuhHLe#{TquW0A zA-)&A+60mB%+i!ajl4RlU_I=Itx%`p9;)G&m>B=VKuqx7JlmY8^yZi!yQA9q4Yi^> zF$o?=4e0iJ)?d%$ISH!p59Y?u52j)>RK-rHh6kVqJP|e1d8mdqpa!-F_33yTwIa_k z6TU|Elk}r$FCA(nb9`j|HNw0kXsJtLM=XolrCTr&UPU$h4E5||d@=(_h}vvHs1Ax? zb}WZlu^y;_4MNqMgqqMS)I?T#ZGo+*86Ck8ypCb$`>%P15vUOtz!q2n{ct&IfIF-w zPy@MPeT0F;U!w+;=(Aa|RH#Sc%}gL8fkLRIYKH1)B)UtD8u2{T4A!6?#THaYN3jl` z#}pXypZVwb5?F%x6wHi&U^e`UTG^~$+~G^kQ4Nhp4QLwb zMKmAP&^`>n^Ozi;VN&#QJnle~qgE`hjaNt2?~H19GJ3NTm_Xx{t@>^e66z?jAvRkD$u0K|R79s7G}YHL?4scAlZ?{q6CX^Y8e0+-DdEHK3%Z zO;QYVVGGoNreh^sj)U+mMq+ngk8>W^qT++1dE9sZP7Edf5VcZ%(M@_*3?yDFy4Q@n z2MO9l!%!ogXq}D~h|jY=#ooko$MCox*K1IF;s(~kPpFP+#PqoThSUyq%+kd2xW_dY z>JgR3^4QQzU^IbcI0SRX_Bf?+BW}Zws2Qz~<8l9i@;Npjz96nyp?|R}@ig%~?h9%n zYCvmH$L|Dc0P*8{+<)=RfO^D-Q4{u_C7=(9>!_LEMQx5JHvKhfv%N#@_818~&MXg0 ziFzb!5_;TM?QX11d_UI0fJA05bU?iq`d|c3LA_~@A+Kn!bBcgA#d+&>>jTtCU!n%| z-ue~Qag4+s_a~WTs3k9enrRKxo3u5m-F~P|ILyZ9pf>4JjIHy(!Dj42_Y|O3?V2U~$}t{ZIqCYQ2YX=-+uxKo#EMbo5Q) zaT?-m)Th{c)QCT$%Ed}*;>oN*n2Pi;8?S^~iTbD&?1aJC8#RChsMEC)y((~$fM$Fd zbK(u`iE)#eJuw6`6CaH#zX8?IF4W#QWaF1n=l(Y8eeed=(Kj2<5MXwHIBI}p133R_ z2{a->GwX-im7`G&O||LEQJ;33Q5BD(p7Bl8ae9O9=1gw%L)A}<8fX~mR79dyqAqGh z2PWtI>)DMZK^;#)#pk0cE=R4*I-9-)wVU^#9?=yXfw@zdf$YSI#LuA~WmHPDk{?hL z?3Bu^V1LwJ8sR0N4yU6!nvW{D6!YUo)XZLBUi^U7Fh^?hNW3_R_zKh`3rXW~e{-?` zHNeaG5W~}&O`9y8$Ni_<;&_mB?=%8q2-FYs@c!pjiFI&QdXKXOoeUo53v5NbdN&7| zH=l>UCOSYo4D|wfi%qaqCXf63zC&1!coGfTV{RWD9<^XQUdP2xeQ^j^qJogt`! zU&gHH3H3PDb^fyx&~X`v>UcbASI@$9xDGYIv#3|}P1K`!fT=MohdKY1Q4P06?WL)x z_GY8@*mCs2wHS^Y(A%8A0|I_nCa0-b-`W(lq^(e=p$F!{f%p?{#*COM%wvA2#45zw zVg=leCDAwB<5b47sQ5Hgd)LA_{~FJ%+W+^kE;$f&6RYz5cu* z+D_OAXWRG({DpW>Zc}e7>eF*CYR{#N;QVXXmWwb;y8@$#uSIo`Fpv4v3cyyxE1}Xi z+Vq_^{WWT7Yv(l`)x%uGn_&x_YSTZWChEy&HhB^+fea+%#Sb2iA?giPJ<{yb-l+IE z)SGV;X2xTvw{S*%Mt0n`7x6Kp=vQxv1lG z9@UXg5p#?JP%oassE)d0UEGa&K_w|_9#Lh~%sQdokb_YJpM&~lbO7}VPF0LJ6OF`V zI{&{E_c+(dScUo=A6CLNI2Uz(_h1%GP|^%2Kk9TeL3Pj_bK)G-r{GD{sd<8d7_*ca zSP1Hr6~ug40T=1~4Jrcr6%WJ@BD(b z%)8vFZ9W4I;#Sf})$usPuxMQ~utT_46?uSrFs#0bzrqc~*ETSpeo+mX8Sytb76&%+ zID;`xWAk1Zhuw)^Y0UW_MW9j>^C5H@M-Y!{YQ7aeLH(f7HOe&f%G$S?DIcS`#~Dce zWYnfi)WYL@#WuJTTetK$O)*0&kJAi?pkCn*u^|@u$!nH+_D|-8@DcS!3~p^+B%@I; zmdB{w?bpV1m8LkVU`KPz`k^-EX4ISTw)G+E)I7(S=+nu($l{>B0VPJ24?^w!EH*zs z>P_k`Ns0LnIzhO$^eqBs@D5fJ`3{@`*)m|S| zxzQMbOKti!OrrDuj6hp5zM^K{rmJbN7wSzm29>@P^Wi3pi!U$}en8DQ&Cg~<@}O3- zD5~SqsP{w^YCt_PK90a#^zTe15Dkyo0;jAuF_83^sF}y_W@ZqG`H9!IPC$Kz97T68 zU;*Mj-OVW|jA@B~#4rr#;c@>6wH$i&EO!vl2oIrVb{(}j9;5caYa93NX)4CU9HbAx zg181Xv!|#{_z_j#>E&_%g)}yvCAtISb1FvnHa`)~=)?Kf02=o-4YWZmb#K%+o{^}A zreZ3bhuW+=P|x}#2I33Ut2tgjQ!fjqC!QClVLcmvh1yGr`kNI^-=FiZiV-BJ;p(Ve z-U9XP+Mzb*a8$Xu=&l%QWe%YRc-6-5p-#m+)T8)j4H#g`=S1y|lBoRhUIN-=%}^uj zhw5;gjW0ocb=r)L&}X38-A(Z}@!qHb*JUC)rcF=->xPAKBx*p1QSF~aP2etS6MA0| z&}R9BnK5FJnNcIurfY>N*xNb+wO6KMXIzctG38+MZf}V@h_6FlicZ@h9`~2j7lxXN zB^+iRaWJxHyiOhhd#O+w^(u`%+~fZHT{-I})C#2?VFr{RHRFn?%~r#vH$ct2BkGY1 zMxClLHa-!x5;IYIYccxk{I4URB{^t4gPQR*8-IeT_%{aPf2gHQGtz9z9H@8&)QhJf z>JfIwA~+T`ffLvpAEJ(H<57Id>iiEPpbqklHZv@a8c;3NGi{1BusdpIM^PP~!$7=; zgV1M;`S2Nv>R<)x)qDcA7v7^*Bx0hrG<2e87ILUak4r~-vh1F4RB=FLzY zwLu-Del|WBb$q9y2DaSBx1l!can#;_6Sa39pa%RGYO{T`MxSWneyD+^^V&cj)C?-38fc7qXScVGLCt)X zbvNp`o<*I452yyeVNXmt$vo0=r~%AG?VV+)y|xzBpLaU}ZMG9O;W9=Ne`3?qPd544 zQ7e!Svtt?58>|~<#j)5Qx1u`8{fn_Mh7vD}del8o6B&%O=XItM(6d>BdgX3I4d8+) z;KZ9^DyBlsFf(c|l%^GJ%WfVjA z-H92AH$Z)(@S@gmJ8IisK@H@MO^-FhoV(1ZXBLVYKylQuscUVGTDo2{IA3!K3?o4^ zNI%nzFa$NzaBDHtE2}D&!Jkp(cc2dXKGe*PSkIycaMk+Krt4SJdiTag9gjdS0nNA^ z>LE8k&Ah!$?}l2T;WmFJ<{-Wb)zDQ`$FETb{v&FjezQ$`c~Hlv462>#s10q}N9sgN~?rqip&D)WA2{_%77M&Y}iz&&FS(y9bP3 zC+1wUi4tKT1vA-r8C1cBHr^7|K_Aq48jR{-ENW)+P zC(!--+KU7<;|Hjben5Tf`OG)p9EPAa&neWizKPmY_fdP~qs@=Gz;qmddO?Js$~8x= zY;T-_Ueu`xSV+6-C_4eos1WKImch{&h3fD*>J{|{)nVF2WE@qGoX3reDQY#BbwpEVbDDxO)PJ z5U;(&eAl{)orwo6HBP~L#C?~Ue~W3fjPt*NgpDLz6I!RM$`-HIBK)rv+=j6y%E>D+62<0KB)7dD%L_( z=!lxR$|--2&EJmd@I0!6$Ec3Kq9&5?SF;yVpxViZTFJbqy;2nQp77SN89gwNgn_6R z%mUP@ID^^?_fbpx6xGlNo6kR{x&ujqno$;1xuP~+1*;QpiF%}4QT2aE2Ih5+5>Ul! zsFA(4ai8DJm%HSsfs{v;Ym8N}8|p*m0P2l)AN7nqYt17}j%qI$^}>ooy~t{zK2v(S z`JBHw1XOV?s-wfG-F^*qOzxsK%PZ8^(NIr4o;Vt{qRw`+f=N-2v>hQ62Qd z%s33SLTfMx&!U$6EoxvHc9{W}!feEwq8{B?)BqP_ZoFvq#@uZR6vX^w)Ie>bvFN^V zP(KrGN6q*T)C?Y?29$V@NsmMgpe%-BTht29K()6TwHbG!+PRLbxYv0~K%3=pKQ(^F;uyKtJj#AJoA^i^ff@Fh_E(`^KrgMG{isKD1$E5sVhK!kzznE9YEQI6 zZQh>NL70aAoiPM7^OdNEwxKHQLoMBT)T6kEdgfnI&osk9Gq6b1Kq{hU*bD=)Evo() z)Fz&dn%EZ9quPaDJLSnn^6s(x86i`_yn~l z-k?_E3x=To5mT=aD!o3cd}mZUy^nDI)xl5_^a#e=jJc@v6*j&BwFh>i8aRWR(G}Fp zAD|}i7WL>pV^fTG)U?~d+7I;^G6q#|qL+X+%L2@a_fZY_9WxyUq0W0AEQ|F}=XW8h zflH{p@DQ~*Kcfbo;JC?8jv819X2vkoBd>>=hyeYzBH9@K!^oHyxxQA;=h^(>d6p6z+mizeO$^OI9%)L!X|Dn9~)aUN=- zhc0mb^~^4lP!jKasaLc~Rw?p!Q5>)bX5x8rW9Ur|4lD z|B9MG{6Ea;N{F8Pw*xiE8f|>JcWpY9X_brK9D-Wwa@EG&)hP@ zfvC+g#-=aA%*0ot26O?nQjbw9=X=|fPlsBWyr}&8sLk3F^(bbeCVB+j&;K(7G}6zg z0mQjumeL`S~7YEvCW4d@zbZ~Tdxsn1<=di+rJLs9+YK|QKcckTE8 z+BTyl>il*?eM6av5x5gIkk{A(|HD}rbV0kQepJENLx|m55ix$~YH?;&aT2ogSH`o{yc0??=5a!XJB_Ggt|A zyi+|f-+aPR`4zA+w(=5KK;R%Q!4^-=UzNmsW`4M=hZ;ck=N{(`_QAT??uA*Q1K5xF zL)2c0dTEYrFI2sWs6B8Kx8Wz$-rDe|Dev7wK+on9>e=74K0>X;E7Y<32Q?G_S00BW z?PNiHH}rjDUahII7V*s1{-|Sp9<@2|U?hG4c z(Gm3y?}ggkLohoovtB^$nQy2L)BkNYSz&bF8#dk%^O0y& z)RG>{@{xRiC<8$KmQ4=Zk&R7NA|9xFO0(wSW z@DCi1O|j*BGvh<3ft^K-{1Iw5e?bkChn6}_5K z%#UUTQehF|AvgqEqn_b&RE3YInP&cE9$8*ghec5{tA!e96I8q1F%(Ck>TR|8hpjh0 zasGqI_=^NRf~5bNhBBaD5ZO`bg;6h>3aEw~q5En^ZNj0bfzCxelGQeSD{5e8Q7e26 z_3D0a(^G%u{Ody@__OIS6xBcxRL2!ir=zZoH$`ox4yf}x7U$zL)PP3)=W)j29MrK6 z`QmZ^p9GJg+U@$)JkkNEiH!0Ra7T_hZmVs4J?dlfchu5-LVdA__09b1v^ZuaJ_ASL zUeqhO96uu$!h_fW9gmL_ljGVE^AhdhVh*+K_%ErjPrJiJY-~oXf;JqtZ*q_HhTW78?@J6355=d;8(2Pt6;s z0enIYFf6W*{y@;{bR?ix=~mRo;$w8*&GCHPzl{vUQlxLf$@meq8OOvo^>(1n`!m!d zh@Qa5{SKKN8xXIEA-Eh%<5|=zIB7x+#LGws=-G5cEp;F3DC-OiBYinW;T7zK`4joL ze+aN1RWDUyANMq5#pc9|qS{@IwQ()x!f1Xz?wc?lHlcr~D*+v&bEp|SLXGev>W${_ z@8h0^Jg7ZV23b0%66#b;Lw($?z}&bEwW(jA_SWC1Q{W`=abLZ0P!mdk?%&rIC7=q6 zQ5~$Zu0tKeEvQ%T5sbj|*b-wT^>JTF?NN_#D3--dSOPy|K`fHY$NiOUU(};KjyhEd z0(`vYTWNrqc?brQQ4rN}Bh>q$BgVqXs2R<+@s&2d0ke|67q$7GVy!RDJ&x zKJKwijmqzv!fO&%lAtAuk<#quM5qdVP)j-lTj5sJN~KQa*_V%E^}yA|7K|i6Gx^hO zdOON|zdn&yhx7s5#VIq7xDWY})SW=uueM<9K?MFJWBHU%b<(vhM)rJ)uHo)%yUC4u zd49i25Fbf?6wO{FaWQee95^FwfqH~>4aBO*o5rbZhq&3gYs%od0p+!1%-iv&rL2sh z0paP?YT?%Bx2v{v6Y{okhZDcSJ;3IRTci(~a<8txcL=p#+8Tukf4{QRVmR^1Hmw1@ z>DtM?kF+d&CeEZR*+{Wj#i_vKA8mW1zD zIVu(AuE<@3yEqxOso0WmFIz4xjSM8NYYq*yCcP5g<<3gpQ10{O&n3MRY1b*o+ts~F zkiLoZ>bCx5{a<_VODFeQU~rz%fIcLyQz_I|Y(a&(l)Fv*IN^ch&n6sb8>+w{drT=@ zKfwDdwX>6xgwh=e596*!=?u1|y*P|JBQ=t8>k6i%FM! z3*n!+3#mS37XL8702?laxhUh~#_7MUsp~AmTvW_tM&|ynrKa1Cc&WSBC|foG=~?3gu9rfX^V>1d;agJ^LB#tBfIo7g+@uTbj!W+2xw&N@%ZyLn$wC2giBFDH5VN&lVrF5>G5=eK>3#KkixWkSvtD(VyI0|i59XbJ^)5MD^7^Q6z@ zu1P!L&a=+%&(HTyIVPxJUT%Pbz22!8+ zWWu_F4eoz4leWh;c#M?1lr4(GxkCu+s)R)-7hvm$F`4bO-IjZ{O{Q{YCf&XnJ{ras?=t-exW$ zT-b#FcLw;M2D7XTq!dPQ@8k|;05520E#ZsYlL_lf#0|o?Z3p9tm!!cnc#Zou_Y>;< z!abUBD$1sy-O}7`NqbCM4eIiJfs6k2eX5Wf;TOLYu1ultS9vP!wjC*L7v(x|FD9JE z7D_}NT|t!9)zP+PV*GqSdP~YAr`;*G>@nNsGcO5=Y{de$MlKsybT^HSwF64_!@!hR z+s0qhSSP|8xm!{Gn@vw{2U3$hQc$KVR-)~Tq$eT1gWLOw|LAH$Vp+ocSoOcFK55NK zYfgh@NNtRLY@;d^ZabQ0jbjJi!M2%)wkA=oDJCav6Xj0YvZ_B{>)((}eztS6aG&DV z4|lrm(9zGtyHl|P{&-cTkxC>C{9!QDi2q{am24+zFpRpjZT)f#uoK}HHtzAY`!9%s zxw)s&z(g`nbI+pV6~v2k7b3jJHm+~@KM{{knH;vE2-4En{A8r9`(Bnoog>_ew2p*h z;1=q>C9N2DH!l^#$@q&%8bx#ksZ*GPbpL-N}J8gM>N$39Eg9-!?o;js@bARtsN(6J)vV)3Y&5r-rn%8Wa zLoHoJX*mIRaT{0KZo&;H7oE1qa(wuYKWR~<^(ReNJe*;}&+vwO_D!Dq-_jIrL}&;V zV{?xoo}7k;Q+Nd7y0&al2KF=YZ=|0foQL}`cP7fNC;bEIaj3r@w~+o5;d9(SUP~yq zp5M$kx5=nPQ<3(4fZByYtDf_3=?cR4@5}8Tm#AH;ZazVoDaDc6Rk@QEZ$(74?qHrU^A8`Ts zwJBSJPOegKu`M$P%aFH7g}L<0$%?j3#l4d#{Nt6G!r!kd5$VTmxF7K%#Iv|Lyu)ZSGkFCm z-;X;rdCN%CwMy@v7~Dg-KauhMnohz0xGzvK0}df0pUq!_&2487F%x-fxjT|Rgm$vC zqWtRLDMG!B+zSXVA>U)`)FVyTI&SZ8M2-?r+F<^(2Dfn+q|)~*J?ZUi<AWXwaGYW3lAZz>n#oRC2fp} zI{S%VQ={Cz+z%-?0^@VP;?~uLMng&en|lWF!Zw}X;yB&7(-Ut)UNiEp*u4LpzneDU z37J(W)Q)=?4dx@R>m1=`-+YzD?cD!T_B`rJLU<(M3WW1A z`|sCs($;Vn)cN1S{hWq=yz1Bno{{(mdC7jL9Fuqg?nB(=D3{Xa9ii+N(h3p3%pkvU zHy|yFy9#N4Fc@7aDf9jE{z?N+i7mC6A-LZb*lp9AP`Rs3%R-~yua$O?rES6#>m^&J z4D}vR@5B!ssz`tG^Kj4C?-MT3NqP$E`b@!}iPxgxgtn1gc$KvF+=saRZDVsNUz&2s z@x3Z@ou+JVTQ47FUvSr6mr<|@?gwxq_eTeJVce?VDJ`0C?shE<&(WyL` zg!^QiWTQ z3J`A1{jW_^dR#g_Mfs_O>)F97UDqwjt)$K0sCxjvVp?oZ`dIRRr(Sz~IcP>=APKE7 zF1N1uxQc?W3Fo8XaNBq}%C~Y$nEym0Jr8L~ZM~GLOFiwYyEg3$;WXUWC|8ZN3EV{q z>++Vhg%;px67QLGr!(P}wooi8w;E_YsA*q8Lxl!>tMUABcH zq%S8tk-P~uP5=H=fp~K|TSIyMro1V4AJTL+AuR>rFW6Jhe-QV-6y|rE?lqVARBm01 zD0rRwfStj4(k~J2LS8yMn9FWS^PlIo+*|4#*`%nS@AP+(?<1 z)T^w||1TuQA>j-O(WzJfJ=|wWdy4Nc1?novU5@(@X(zZ>k^X}CPjpnBcr6<5MqF1T z!n(F%q#ei-o3@Rzx<-G0|9>DM7KPT^g1**er2j_2baYh14q}9DHE2L-LvhSB;1Q|5KiQNOTMpGN$dYR8L5e^rm>|o)Q&V=4++1r4fMq8RJy>u z*$!kqWo{9UPrY8YL)9y8!`n!2!+n~xIg|^v_2R1#*Jj#upMPUAexhI<5-Ky0xHNFZ zb{vEF74jCkRrq0ovZu%|LweFUh$_?Xb zyZ=7Bfy70&!tXeSg8y;fp-?g$MQ3RV&m*rtWgp?FDW0zW-W0aU8I-6=v%31)p=ZPc z#BX3jTdpECvk>k@`gHEM+`5jD7K{65!hI-{0n4GT8l+d{)^&k9C+Q8bySDEETj;8_ z0~s;xKnl_ER#mbCBIy3#z&yY>+;?pq530y3I_ZiXiM+xIOj%b??m!#P?WSlWrKj%`HwBS}lmJ%hCU#1qnaNt<7U_*dGhjWlIKraY@1fPE`jkRzUQuNE5@T>8w&kl3q=wBe&ry%jB+1s*}FJ< vQ|)d&if+2Q@qV9e5uu)(aic{P2oKxVI=`n-xormqdA3d7_Q}sDbKL&}9$DET delta 29983 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 diff --git a/locale/pt_PT/LC_MESSAGES/django.po b/locale/pt_PT/LC_MESSAGES/django.po index 7a7fbdf9b..52cc6f770 100644 --- a/locale/pt_PT/LC_MESSAGES/django.po +++ b/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-02 04:10\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -54,19 +54,19 @@ msgstr "Palavras-passe nĆ£o coincidem" msgid "Incorrect Password" msgstr "Palavra-passe Incorreta" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "A data final de leitura nĆ£o pode ser anterior Ć  data de inĆ­cio." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "A data de paragem de leitura nĆ£o pode ser anterior Ć  data de inĆ­cio." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Data de paragem de leitura nĆ£o pode ser no futuro." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Data de fim de leitura nĆ£o pode ser no futuro." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "RelatĆ³rio gerado automaticamente" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Pendente" @@ -258,17 +259,24 @@ msgstr "Seguidores" msgid "Private" msgstr "Privado" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Ativo" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "ConcluĆ­do" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Parado" @@ -284,6 +292,10 @@ msgstr "Erro ao carregar o livro" msgid "Could not find a match for book" msgstr "NĆ£o foi possĆ­vel encontrar um resultado para o livro pedido" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "GrĆ”tis" @@ -359,7 +371,7 @@ msgstr "Criticas" msgid "Comments" msgstr "ComentĆ”rios" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "CitaƧƵes" @@ -964,6 +976,7 @@ msgstr "Salvar" #: 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" @@ -981,6 +994,7 @@ msgstr "Carregar os dados irĆ” conectar a %(source_name)s e ver #: 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 "Confirmar" @@ -1480,9 +1494,12 @@ msgid "Domain" msgstr "DomĆ­nio" #: 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 @@ -1494,7 +1511,8 @@ msgstr "Estado" #: bookwyrm/templates/book/file_links/edit_links.html:37 #: bookwyrm/templates/settings/announcements/announcements.html:41 #: bookwyrm/templates/settings/federation/instance.html:112 -#: bookwyrm/templates/settings/imports/imports.html: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:108 msgid "Actions" @@ -2826,111 +2844,121 @@ msgid "No activities for this hashtag yet!" 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:66 -msgid "Import Books" -msgstr "Importar livros" +#: 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 "NĆ£o Ć© um ficheiro CSV vĆ”lido" -#: 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 "Em mĆ©dia, as importaƧƵes recentes levaram %(hours)s horas." -#: 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 "Em mĆ©dia, as importaƧƵes recentes levaram %(minutes)s minutos." -#: bookwyrm/templates/import/import.html:53 +#: bookwyrm/templates/import/import.html:52 msgid "Data source:" msgstr "Origem dos dados:" -#: bookwyrm/templates/import/import.html:59 +#: bookwyrm/templates/import/import.html:58 msgid "Goodreads (CSV)" msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph(CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Podes fazer download dos teus dados do Goodreads na Importar/Exportar pĆ”gina da tua conta do Goodreads." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Ficheiro de dados:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Incluir criticas" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" 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: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 "Importar" -#: 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 "Atingiste o teu limite de importaƧƵes." -#: 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 "As importaƧƵes estĆ£o temporariamente desativadas; obrigado pela tua paciĆŖncia." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "ImportaƧƵes recentes" -#: 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 "Data de criaĆ§Ć£o" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "ƚltima AtualizaĆ§Ć£o" -#: 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 "Items" -#: 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 "Nenhuma importaĆ§Ć£o recente" @@ -2966,7 +2994,8 @@ msgid "Refresh" msgstr "Atualizar" #: 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 "Parar importaĆ§Ć£o" @@ -3064,6 +3093,133 @@ msgstr "Esta importaĆ§Ć£o estĆ” num formato antigo que jĆ” nĆ£o Ć© suportado. Se msgid "Update import" msgstr "Atualizar importaĆ§Ć£o" +#: 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 "Perfil de utilizador" + +#: 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" @@ -3084,7 +3240,7 @@ msgid "Reject" msgstr "Rejeitar" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Itens falhados" @@ -3864,6 +4020,16 @@ msgstr "mudou o nome de %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "mudou a descriĆ§Ć£o de %(group_name)s" +#: 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 "Apagar notificaƧƵes" @@ -4107,7 +4273,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 "Utilizadores Bloqueados" @@ -4242,14 +4408,66 @@ msgstr "Privacidade de publicaĆ§Ć£o predefinida:" 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 "Procuras a privacidade na prateleira? Podes definir um nĆ­vel de visibilidade separado para cada uma das tuas prateleiras. Vai para Os Teus livros, seleciona uma prateleira na barra de divisores e carrega em \"Editar prateleira\"" +#: 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Exportar para CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "A exportaĆ§Ć£o incluirĆ” todos os livros das tuas prateleiras, livros que tu jĆ” avaliaste e livros com a atividade da leitura." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4485,7 @@ msgstr "" msgid "Data" msgstr "Dados" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Exportar CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relacionamentos" @@ -4761,7 +4975,8 @@ msgid "Active Tasks" msgstr "Tarefas ativas" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5155,9 +5370,14 @@ msgid "No instances found" msgstr "Nenhum domĆ­nio encontrado" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Parar importaĆ§Ć£o?" +#: 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 "Desativar o inĆ­cio de novas importaƧƵes" @@ -5170,70 +5390,107 @@ msgstr "SĆ³ se destina a ser utilizado quando as coisas correram muito mal com a msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Enquanto as importaƧƵes sĆ£o desativadas, os utilizadores nĆ£o serĆ£o autorizados a iniciar novas importaƧƵes, mas as importaƧƵes existentes nĆ£o serĆ£o afetadas." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "Desativar importaƧƵes" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "Atualmente os usuĆ”rios nĆ£o podem iniciar novas importaƧƵes" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Ativar a ImportaĆ§Ć£o" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "Limitar a quantidade de importaƧƵes" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "Alguns usuĆ”rios podem tentar importar um grande nĆŗmero de livros, algo que deves limitar." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "Define o valor como 0 para nĆ£o aplicar qualquer limite." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Definir limite de importaĆ§Ć£o para" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "livros a cada" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dias." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Definir limite" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "Completado" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "Utilizador" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Data de ModificaĆ§Ć£o" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Itens pendentes" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Itens bem sucedidos" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Nenhuma importaĆ§Ć£o correspondente foi encontrada." +#: 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 @@ -6046,17 +6303,15 @@ msgstr "Criar prateleira" msgid "Edit Shelf" msgstr "Editar prateleira" -#: 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 de utilizador" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Todos os livros" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importar livros" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/ro_RO/LC_MESSAGES/django.mo b/locale/ro_RO/LC_MESSAGES/django.mo index d68465002fcecc5e0a00e26c78590b258182de0a..35ba27c9c5d9790f13c7c3a1a9c82b7646ff5790 100644 GIT binary patch delta 26284 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 delta 26601 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 ZNp($!y}}Z8jgE;rK6=lJE1o}+{SOT;27Ukl diff --git a/locale/ro_RO/LC_MESSAGES/django.po b/locale/ro_RO/LC_MESSAGES/django.po index e4059f28a..dc3a61a7c 100644 --- a/locale/ro_RO/LC_MESSAGES/django.po +++ b/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:11\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-02 04:10\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Romanian\n" "Language: ro\n" @@ -54,19 +54,19 @@ msgstr "Parola nu se potrivește" msgid "Incorrect Password" msgstr "" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Data de terminare a lecturii nu poate fi Ć®nainte de data de Ć®nceput." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Data de sfĆ¢rșit a lecturii nu poate fi Ć®nainte de data de Ć®nceput." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "" -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "" @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Raport generat automat" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "Ǝn așteptare" @@ -258,17 +259,24 @@ msgstr "Urmăritori" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Activ" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "" @@ -284,6 +292,10 @@ msgstr "Eroare la Ć®ncărcarea cărții" msgid "Could not find a match for book" msgstr "Nu a putut fi găsită o potrivire pentru carte" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratuită" @@ -359,7 +371,7 @@ msgstr "Recenzii" msgid "Comments" msgstr "Comentarii" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citate" @@ -968,6 +980,7 @@ msgstr "Salvați" #: 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" @@ -985,6 +998,7 @@ msgstr "Ǝncărcatul de date se va conecta la %(source_name)s #: 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 "Confirmați" @@ -1486,9 +1500,12 @@ msgid "Domain" msgstr "Domeniu" #: 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 @@ -1500,7 +1517,8 @@ msgstr "Status" #: 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:108 msgid "Actions" @@ -2836,16 +2854,16 @@ 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:66 -msgid "Import Books" -msgstr "Importați cărți" +#: 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." @@ -2853,95 +2871,105 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: 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 "Sursa de date:" -#: 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 "Fișierul de date:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Includeți recenzii" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" 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: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 "Importați" -#: 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 "Importuri recente" -#: 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 "Niciun import recent" @@ -2977,7 +3005,8 @@ msgid "Refresh" msgstr "ReĆ®mprospătați" #: 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 "" @@ -3077,6 +3106,133 @@ msgstr "Acest import este un format vechi care nu mai este suportat. Dacă dori msgid "Update import" msgstr "Actualizare import" +#: 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 "Profilul utilizatorului" + +#: 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" @@ -3097,7 +3253,7 @@ msgid "Reject" msgstr "Respingeți" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Elemente a căror importare a eșuat" @@ -3882,6 +4038,16 @@ msgstr "a schimbat numele pentru %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "a schimbat descrierea %(group_name)s" +#: 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 "Ștergeți notificările" @@ -4125,7 +4291,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 "Utilizatori blocați" @@ -4260,14 +4426,66 @@ msgstr "Confidențialitatea implicită a postărilor:" 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Export CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "Exportul dvs. va include toate cărțile de pe etajerele dvs., cărți pe care le-ați revizuit și cărți cu activitate de lectură." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4285,11 +4503,7 @@ msgstr "" msgid "Data" msgstr "Date" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "Export CSV" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "Relații" @@ -4780,7 +4994,8 @@ msgid "Active Tasks" msgstr "" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "" @@ -5178,9 +5393,14 @@ msgid "No instances found" msgstr "N-a fost găsită nicio instanță" #: 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 "" @@ -5193,70 +5413,107 @@ msgstr "" 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 +#: 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:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:102 -msgid "Completed" +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:116 -msgid "User" +#: 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 "Date Updated" -msgstr "" - -#: bookwyrm/templates/settings/imports/imports.html:132 -msgid "Pending items" +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:170 +#: 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 @@ -6070,17 +6327,15 @@ msgstr "Creați un raft" msgid "Edit Shelf" msgstr "Editați raftul" -#: bookwyrm/templates/shelf/shelf.html:26 -#: bookwyrm/templates/user/relationships/followers.html:18 -#: bookwyrm/templates/user/relationships/following.html:18 -msgid "User profile" -msgstr "Profilul utilizatorului" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Toate cărțile" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importați cărți" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index c4199d723a428b4fc0831847994fe0a754510236..bc359e38b5ca03d97e095711d748c4b0aff19b20 100644 GIT binary patch delta 30384 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 delta 30340 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\n" "Language-Team: Swedish\n" "Language: sv\n" @@ -54,19 +54,19 @@ msgstr "Lƶsenord matchar inte" msgid "Incorrect Password" msgstr "Felaktigt lƶsenord" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Slutdatum fƶr lƤsning kan inte vara fƶre startdatum." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Stoppdatum fƶr lƤsning kan inte vara fƶre startdatum." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Stoppdatum fƶr lƤsning kan inte vara i framtiden." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Slutdatum fƶr lƤsning kan inte vara i framtiden." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "Automatiskt genererad rapport" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "PĆ„gĆ„ende" @@ -258,17 +259,24 @@ msgstr "Fƶljare" msgid "Private" msgstr "Privat" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Aktiv" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Slutfƶrd" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Avbruten" @@ -284,6 +292,10 @@ msgstr "Fel uppstod vid inlƤsning av boken" msgid "Could not find a match for book" msgstr "Kunde inte hitta en trƤff fƶr boken" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Gratis" @@ -359,7 +371,7 @@ msgstr "Recensioner" msgid "Comments" msgstr "Kommentarer" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Citat" @@ -964,6 +976,7 @@ msgstr "Spara" #: 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" @@ -981,6 +994,7 @@ msgstr "Att ladda in data kommer att ansluta till %(source_name)sImport/Export page of your Goodreads account." msgstr "Du kan ladda ner din Goodreads-data frĆ„n Import/Export-sidan fƶr ditt Goodreads-konto." -#: bookwyrm/templates/import/import.html:86 +#: bookwyrm/templates/import/import.html:85 +#: bookwyrm/templates/import/import_user.html:49 msgid "Data file:" msgstr "Datafil:" -#: bookwyrm/templates/import/import.html:94 +#: bookwyrm/templates/import/import.html:93 msgid "Include reviews" msgstr "Inkludera recensioner" -#: bookwyrm/templates/import/import.html:99 +#: bookwyrm/templates/import/import.html:98 msgid "Privacy setting for imported reviews:" msgstr "IntegritetsinstƤllning fƶr importerade recensioner:" -#: 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 "Importera" -#: 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 "Du har nĆ„tt importeringsgrƤnsen." -#: 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 "Importer Ƥr tillfƤlligt inaktiverade, tack fƶr ditt tĆ„lamod." -#: bookwyrm/templates/import/import.html:125 +#: bookwyrm/templates/import/import.html:124 +#: bookwyrm/templates/import/import_user.html:166 msgid "Recent Imports" msgstr "Senaste importer" -#: 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 "Skapad" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" msgstr "Senast uppdaterad" -#: 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 "FƶremĆ„l" -#: 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 "Ingen importering nyligen" @@ -2966,7 +2994,8 @@ msgid "Refresh" msgstr "Uppdatera" #: 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 "Avsluta import" @@ -3064,6 +3093,133 @@ msgstr "Den hƤr importen Ƥr i ett gammalt format som inte lƤngre stƶds. Om d msgid "Update import" msgstr "Uppdatera importering" +#: 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 "Steg 1:" + +#: 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 "Steg 2:" + +#: 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 "AnvƤndarprofil" + +#: 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 "Din tidszon" + +#: 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" @@ -3084,7 +3240,7 @@ msgid "Reject" msgstr "Neka" #: bookwyrm/templates/import/troubleshoot.html:7 -#: bookwyrm/templates/settings/imports/imports.html:138 +#: bookwyrm/templates/settings/imports/imports.html:171 msgid "Failed items" msgstr "Misslyckade objekt" @@ -3864,6 +4020,16 @@ msgstr "har Ƥndrat namnet pĆ„ %(group_name)s" msgid "has changed the description of %(group_name)s" msgstr "har Ƥndrat beskrivningen pĆ„ %(group_name)s" +#: 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 "Ta bort aviseringar" @@ -4094,7 +4260,7 @@ msgstr "" #: bookwyrm/templates/preferences/alias_user.html:30 #: bookwyrm/templates/preferences/move_user.html:35 msgid "Confirm your password:" -msgstr "" +msgstr "BekrƤfta ditt lƶsenord:" #: bookwyrm/templates/preferences/alias_user.html:39 #: bookwyrm/templates/preferences/layout.html:28 @@ -4107,7 +4273,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 "Blockerade anvƤndare" @@ -4242,14 +4408,66 @@ msgstr "Standardsekretess fƶr inlƤgg:" 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "Datum" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "Storlek" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSV-export" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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 "Din export inkluderar alla bƶcker som du har pƄ din hylla, har recenserat och bƶcker med lƤsaktivitet." +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4267,11 +4485,7 @@ msgstr "" msgid "Data" msgstr "Data" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV-export" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "FƶrhĆ„llanden" @@ -4761,7 +4975,8 @@ msgid "Active Tasks" msgstr "Aktiva uppgifter" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5155,9 +5370,14 @@ msgid "No instances found" msgstr "Inga instanser hittades" #: bookwyrm/templates/settings/imports/complete_import_modal.html:4 +#: bookwyrm/templates/settings/imports/complete_user_import_modal.html:4 msgid "Stop import?" msgstr "Avsluta import?" +#: 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 "Inaktivera start av nya importer" @@ -5170,70 +5390,107 @@ msgstr "Detta Ƥr bara avsett att anvƤndas nƤr saker och ting har gĆ„tt mycket msgid "While imports are disabled, users will not be allowed to start new imports, but existing imports will not be affected." msgstr "Medans importer Ƥr avstƤngda sĆ„ kommer anvƤndare inte att tillĆ„tas att pĆ„bƶrja nya importer, men befintliga importer pĆ„verkas inte." -#: bookwyrm/templates/settings/imports/imports.html:36 +#: 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 "Inaktivera importer" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "AnvƤndare kan fƶr nƤrvarande inte starta nya importer" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Aktivera importer" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "BegrƤnsa mƤngden importer" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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 "En del anvƤndare kan fƶrsƶka importera ett stort antal bƶcker som du kan vilja begrƤnsa." -#: bookwyrm/templates/settings/imports/imports.html:75 +#: 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 "SƤtt vƤrdet till 0 fƶr att inte pĆ„tvinga nĆ„gon grƤns." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "SƤtt importeringsgrƤnsen till" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "bƶcker var" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "dagar." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "StƤll in grƤnsen" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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 "timmar" + +#: 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 "Slutfƶrd" -#: bookwyrm/templates/settings/imports/imports.html:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "AnvƤndare" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "Uppdaterad" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "VƤntande objekt" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "FramgĆ„ngsrika objekt" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: bookwyrm/templates/settings/imports/imports.html:203 +#: bookwyrm/templates/settings/imports/imports.html:295 msgid "No matching imports found." msgstr "Inga matchande importer hittades." +#: 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 @@ -6046,17 +6303,15 @@ msgstr "Skapa hylla" msgid "Edit Shelf" msgstr "Redigera hylla" -#: bookwyrm/templates/shelf/shelf.html:26 -#: bookwyrm/templates/user/relationships/followers.html:18 -#: bookwyrm/templates/user/relationships/following.html:18 -msgid "User profile" -msgstr "AnvƤndarprofil" - #: bookwyrm/templates/shelf/shelf.html:41 #: bookwyrm/templatetags/shelf_tags.py:13 bookwyrm/views/shelf/shelf.py:53 msgid "All books" msgstr "Alla bƶcker" +#: bookwyrm/templates/shelf/shelf.html:66 +msgid "Import Books" +msgstr "Importera bƶcker" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6575,7 +6830,7 @@ msgstr "(%(percent)s%%" #: bookwyrm/templates/snippets/status/content_status.html:93 #, python-format msgid " - %(endpercent)s%%" -msgstr "" +msgstr " - %(endpercent)s%%" #: bookwyrm/templates/snippets/status/content_status.html:116 msgid "Open image in new window" diff --git a/locale/uk_UA/LC_MESSAGES/django.mo b/locale/uk_UA/LC_MESSAGES/django.mo index 5f7e5092ee9ae4fc704114cadbc04b86eb930609..3ca5833de00d9ef2e1e5d08e185b3a913e636267 100644 GIT binary patch delta 31520 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 delta 28280 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 diff --git a/locale/uk_UA/LC_MESSAGES/django.po b/locale/uk_UA/LC_MESSAGES/django.po index 2773aa023..f270324c4 100644 --- a/locale/uk_UA/LC_MESSAGES/django.po +++ b/locale/uk_UA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:11\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-01-04 15:51\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Ukrainian\n" "Language: uk\n" @@ -54,19 +54,19 @@ msgstr "ŠŸŠ°Ń€Š¾Š»ŃŒ Š½Šµ Š·Š±Ń–Š³Š°Ń”Ń‚ŃŒŃŃ" msgid "Incorrect Password" msgstr "ŠŠµŠæрŠ°Š²ŠøŠ»ŃŒŠ½ŠøŠ¹ ŠŸŠ°Ń€Š¾Š»ŃŒ" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "Š”Š°Ń‚Š° ŠæрŠ¾Ń‡ŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š“Š¾ Š“Š°Ń‚Šø ŠæŠ¾Ń‡Š°Ń‚Šŗу чŠøтŠ°Š½Š½Ń." -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "Š”Š°Ń‚Š° Š·ŃƒŠæŠøŠ½ŠŗŠø чŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø рŠ°Š½Ń–ŃˆŠµ Š“Š°Ń‚Šø ŠæŠ¾Ń‡Š°Ń‚Šŗу." -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "Š”Š°Ń‚Š° Š·ŃƒŠæŠøŠ½ŠŗŠø чŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š² Š¼Š°Š¹Š±ŃƒŃ‚Š½ŃŒŠ¾Š¼Ńƒ." -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "Š”Š°Ń‚Š° ŠæрŠ¾Ń‡ŠøтŠ°Š½Š½Ń Š½Šµ Š¼Š¾Š¶Šµ Š±ŃƒŃ‚Šø Š² Š¼Š°Š¹Š±ŃƒŃ‚Š½ŃŒŠ¾Š¼Ńƒ." @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "ŠŠ²Ń‚Š¾Š¼Š°Ń‚ŠøчŠ½Š¾ Š·Š³ŠµŠ½ŠµŃ€Š¾Š²Š°Š½ŠøŠ¹ Š·Š²Ń–Ń‚" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "ŠŸŠµŃ€ŠµŠ²Ń–Ń€ŃŃ”Ń‚ŃŒŃŃ" @@ -258,17 +259,24 @@ msgstr "Š‘Š°Ń‡Š°Ń‚ŃŒ тіŠ»ŃŒŠŗŠø ŠæіŠ“ŠæŠøсŠ½ŠøŠŗŠø" msgid "Private" msgstr "ŠŠµ Š±Š°Ń‡Šøть Š½Ń–Ń…Ń‚Š¾" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "Š’ ŠæрŠ¾Ń†ŠµŃŃ–" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "Š—Š°Š²ŠµŃ€ŃˆŠµŠ½Š¾" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "Š—ŃƒŠæŠøŠ½ŠµŠ½Š¾" @@ -284,6 +292,10 @@ msgstr "ŠŸŠ¾Š¼ŠøŠ»ŠŗŠ° ŠæрŠø Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠµŠ½Š½Ń– ŠŗŠ½ŠøŠ³Šø" msgid "Could not find a match for book" msgstr "ŠŠµ Š²Š“Š°Š»Š¾ŃŃ Š·Š½Š°Š¹Ń‚Šø Š²Ń–Š“ŠæŠ¾Š²Ń–Š“Š½Ńƒ ŠŗŠ½ŠøŠ³Ńƒ" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "Š‘ŠµŠ·ŠæŠ»Š°Ń‚Š½Š¾" @@ -359,7 +371,7 @@ msgstr "Š ŠµŃ†ŠµŠ½Š·Ń–Ń—" msgid "Comments" msgstr "ŠšŠ¾Š¼ŠµŠ½Ń‚Š°Ń€Ń–" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "Š¦ŠøтŠ°Ń‚Šø" @@ -461,7 +473,7 @@ msgstr "Svenska (ŠØŠ²ŠµŠ“сьŠŗŠ°)" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ (Š¢Ń€Š°Š“ŠøціŠ¹Š½Š° ŠŗŠøтŠ°Š¹ŃŃŒŠŗŠ°)" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "Šž, Š½Ń–!" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "ŠŠµŠ¼Š°Ń” Š”Š¾Š·Š²Š¾Š»Ńƒ" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "Š£ Š’Š°Ń Š½ŠµŠ¼Š°Ń” Š“Š¾Š·Š²Š¾Š»Ńƒ Š½Š° ŠæŠµŃ€ŠµŠ³Š»ŃŠ“ цієї стŠ¾Ń€Ń–Š½ŠŗŠø Š°Š±Š¾ Š²ŠøŠŗŠ¾Š½Š°Š½Š½Ń цієї Š“ії. Š’Š°Ńˆ ріŠ²ŠµŠ½ŃŒ Š“Š¾Š·Š²Š¾Š»Ń–Š² ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š° %(level)s." #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "ŠÆŠŗщŠ¾ Š²Šø Š²Š²Š°Š¶Š°Ń”Ń‚Šµ, щŠ¾ Š²Š°Š¼ сŠ»Ń–Š“ Š¾Ń‚Ń€ŠøŠ¼Š°Ń‚Šø Š“Š¾ŃŃ‚ŃƒŠæ, Š±ŃƒŠ“ь Š»Š°ŃŠŗŠ°, Š·Š²ŠµŃ€Š½Ń–Ń‚ŃŒŃŃ Š“Š¾ Š°Š“Š¼Ń–Š½Ń–стрŠ°Ń‚Š¾Ń€Š° Š²Š°ŃˆŠ¾Š³Š¾ сŠµŃ€Š²ŠµŃ€Š° Bookrm." #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,18 @@ msgstr "Š’ŠŗŠ°Š·Š°Š½Š° стŠ¾Ń€Ń–Š½ŠŗŠ° Š½Šµ ісŠ½ŃƒŃ”!" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "Š¤Š°Š¹Š» Š·Š°Š²ŠµŠ»ŠøŠŗŠøŠ¹" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +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 "" +msgstr "\n" +"Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ сŠæрŠ¾Š±ŃƒŠ²Š°Ń‚Šø Š²ŠøŠŗŠ¾Ń€ŠøстŠ°Ń‚Šø Š¼ŠµŠ½ŃˆŠøŠ¹ фŠ°Š¹Š» Š°Š±Š¾ ŠæŠ¾ŠæрŠ¾ŃŠøтŠø Š°Š“Š¼Ń–Š½Ń–стрŠ°Ń‚Š¾Ń€Š° сŠµŃ€Š²ŠµŃ€Š° BookWyrm Š·Š±Ń–Š»ŃŒŃˆŠøтŠø ŠæŠ°Ń€Š°Š¼ŠµŃ‚Ń€ DATA_UPLOAD_MAX_MEMORY_SIZE. " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -972,6 +985,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" @@ -989,6 +1003,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 "ŠŸŃ–Š“тŠ²ŠµŃ€Š“ŠøтŠø" @@ -1492,9 +1507,12 @@ 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 @@ -1506,7 +1524,8 @@ 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:108 msgid "Actions" @@ -2567,7 +2586,7 @@ msgstr "Š”ŠŗŠ°Š½ŠµŃ€ штрŠøх-ŠŗŠ¾Š“іŠ²" #: bookwyrm/templates/guided_tour/home.html:102 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 "" +msgstr "Š’ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŠ¹Ń‚Šµ Š”ŠæŠøсŠŗŠø, Š’Ń–Š“ŠŗрŠøŠ¹ Š“Š»Ń сŠµŠ±Šµ і Š’Š°ŃˆŃ– ŠŗŠ½ŠøŠ³Šø ŠæŠ¾ŃŠøŠ»Š°Š½Š½Ń Š“Š»Ń ŠæŠ¾ŃˆŃƒŠŗу ŠæрŠ¾ŠæŠ¾Š·ŠøціŠ¹ щŠ¾Š“Š¾ чŠøтŠ°Š½Š½Ń і Š¾ŃŃ‚Š°Š½Š½Ń–Ń… ŠæŠ¾Š“іŠ¹ Š½Š° цьŠ¾Š¼Ńƒ сŠµŃ€Š²ŠµŃ€Ń–, Š°Š±Š¾ ŠæŠµŃ€ŠµŠ³Š»ŃŠ“у Š²Š°ŃˆŠøх ŠŗŠ°Ń‚Š°Š»Š¾Š¶Š½Šøх ŠŗŠ½ŠøŠ³!" #: bookwyrm/templates/guided_tour/home.html:103 msgid "Navigation Bar" @@ -2599,7 +2618,7 @@ msgstr "Š”ŠæŠ¾Š²Ń–щŠµŠ½Š½Ń" #: bookwyrm/templates/guided_tour/home.html:200 msgid "Your profile, user directory, direct messages, and settings can be accessed by clicking on your name in the menu here." -msgstr "" +msgstr "Š©Š¾Š± Š¾Ń‚Ń€ŠøŠ¼Š°Ń‚Šø Š“Š¾ŃŃ‚ŃƒŠæ Š“Š¾ сŠ²Š¾Š³Š¾ ŠæрŠ¾Ń„Ń–Š»ŃŽ, ŠŗŠ°Ń‚Š°Š»Š¾Š³Ńƒ ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń–Š², ŠæряŠ¼Šøх ŠæŠ¾Š²Ń–Š“Š¾Š¼Š»ŠµŠ½ŃŒ і Š½Š°Š»Š°ŃˆŃ‚ŃƒŠ²Š°Š½ŃŒ, ŠŗŠ»Š°Ń†Š½Ń–Ń‚ŃŒ сŠ²Š¾Ń” іŠ¼ā€™Ń Š² Š¼ŠµŠ½ŃŽ тут." #: bookwyrm/templates/guided_tour/home.html:200 msgid "Try selecting Profile from the drop down menu to continue the tour." @@ -2846,16 +2865,16 @@ 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:66 -msgid "Import Books" -msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø ŠšŠ½ŠøŠ³Šø" +#: 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 "ŠŠµŠŗŠ¾Ń€ŠµŠŗтŠ½ŠøŠ¹ CSV-фŠ°Š¹Š»" -#: 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." @@ -2864,95 +2883,105 @@ msgstr[1] "ŠŠ°Ń€Š°Š·Ń– Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø тіŠ»ŃŒŠŗŠø %( msgstr[2] "ŠŠ°Ń€Š°Š·Ń– Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø тіŠ»ŃŒŠŗŠø %(display_size)s ŠŗŠ½ŠøŠ³ Š²ŠæрŠ¾Š“Š¾Š²Š¶ ŠŗŠ¾Š¶Š½Šøх %(import_limit_reset)s Š“Š½Ń–Š²." msgstr[3] "ŠŠ°Ń€Š°Š·Ń– Š²Šø Š¼Š¾Š¶ŠµŃ‚Šµ іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø тіŠ»ŃŒŠŗŠø %(display_size)s ŠŗŠ½ŠøŠ³ Š²ŠæрŠ¾Š“Š¾Š²Š¶ ŠŗŠ¾Š¶Š½Šøх %(import_limit_reset)s Š“Š½Ń–Š²." -#: bookwyrm/templates/import/import.html:27 +#: bookwyrm/templates/import/import.html:26 #, python-format msgid "You have %(display_left)s left." msgstr "Š—Š°Š»ŠøшŠøŠ»Š¾ŃŃŒ %(display_left)s." -#: 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 "Š’ сŠµŃ€ŠµŠ“Š½ŃŒŠ¾Š¼Ńƒ, Š½ŠµŠ“Š°Š²Š½Ń– іŠ¼ŠæŠ¾Ń€Ń‚Šø Š·Š°Š¹Š½ŃŠ»Šø %(hours)s Š³Š¾Š“ŠøŠ½." -#: 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 "Š’ сŠµŃ€ŠµŠ“Š½ŃŒŠ¾Š¼Ńƒ, Š½ŠµŠ“Š°Š²Š½Ń– іŠ¼ŠæŠ¾Ń€Ń‚Šø Š·Š°Š¹Š½ŃŠ»Šø %(minutes)s хŠ²ŠøŠ»ŠøŠ½." -#: 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 "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" msgstr "Calibre (CSV)" -#: 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 "Š’Šø Š¼Š¾Š¶ŠµŃ‚Šµ Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠøтŠø Š“Š°Š½Ń– Goodreads Š½Š° стŠ¾Ń€Ń–Š½Ń†Ń– Import/Export Š²Š°ŃˆŠ¾Š³Š¾ Š¾Š±Š»Ń–ŠŗŠ¾Š²Š¾Š³Š¾ Š·Š°ŠæŠøсу Goodreads." -#: 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 "ŠžŃŃ‚Š°Š½Š½Ń–Š¼ чŠ°ŃŠ¾Š¼ іŠ¼ŠæŠ¾Ń€Ń‚Ń–Š² Š½Šµ Š±ŃƒŠ»Š¾" @@ -2988,7 +3017,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 "Š—ŃƒŠæŠøŠ½ŠøтŠø іŠ¼ŠæŠ¾Ń€Ń‚" @@ -3090,6 +3120,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" @@ -3110,7 +3267,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 "ŠŠµŠ²Š“Š°Š»Ń– ŠµŠ»ŠµŠ¼ŠµŠ½Ń‚Šø" @@ -3779,8 +3936,8 @@ msgid "New invite request awaiting response" msgid_plural "%(display_count)s new invite requests awaiting response" msgstr[0] "" msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[2] "%(display_count)s Š½Š¾Š²Šøх Š·Š°ŠæрŠ¾ŃˆŠµŠ½ŃŒ Š¾Ń‡Ń–Šŗують Š½Š° Š²Ń–Š“ŠæŠ¾Š²Ń–Š“ь" +msgstr[3] "%(display_count)s Š½Š¾Š²Šøх Š·Š°ŠæрŠ¾ŃˆŠµŠ½ŃŒ Š¾Ń‡Ń–Šŗують Š½Š° Š²Ń–Š“ŠæŠ¾Š²Ń–Š“ь" #: bookwyrm/templates/notifications/items/join.html:16 #, python-format @@ -3900,6 +4057,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 "" @@ -4143,7 +4310,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 "" @@ -4278,13 +4445,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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "Š•ŠŗсŠæŠ¾Ń€Ń‚ CSV" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "" #: 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." +msgid "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." msgstr "" #: bookwyrm/templates/preferences/export.html:20 @@ -4303,11 +4522,7 @@ msgstr "" msgid "Data" msgstr "" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "" @@ -4801,7 +5016,8 @@ msgid "Active Tasks" msgstr "ŠŠŗтŠøŠ²Š½Ń– Š·Š°Š²Š“Š°Š½Š½Ń" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5203,9 +5419,14 @@ 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 "Š’ŠøŠ¼ŠŗŠ½ŃƒŃ‚Šø стŠ²Š¾Ń€ŠµŠ½Š½Ń Š½Š¾Š²Šøх іŠ¼ŠæŠ¾Ń€Ń‚Ń–Š²" @@ -5218,70 +5439,107 @@ msgstr "Š¦Šµ ŠæŠ¾Ń‚ріŠ±Š½Š¾ Š»ŠøшŠµ у тŠøх сŠøтуŠ°Ń†Ń–ŃŃ…, ŠŗŠ¾Š»Šø Š· 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 +#: 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:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "ŠŠ°Ń€Š°Š·Ń– ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Ń– Š½Šµ Š¼Š¾Š¶ŃƒŃ‚ŃŒ Š“Š¾Š“Š°Ń‚Šø Š½Š¾Š²ŠøŠ¹ іŠ¼ŠæŠ¾Ń€Ń‚" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "Š£Š²Ń–Š¼ŠŗŠ½ŃƒŃ‚Šø іŠ¼ŠæŠ¾Ń€Ń‚Šø" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "ŠžŠ±Š¼ŠµŠ¶ŠøтŠø ŠŗіŠ»ŃŒŠŗість іŠ¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Š½ŃŒ" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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 "Š’стŠ°Š½Š¾Š²Ń–Ń‚ŃŒ Š·Š½Š°Ń‡ŠµŠ½Š½Ń 0, Š°Š±Šø Š½Šµ Š²ŃŃ‚Š°Š½Š¾Š²Š»ŃŽŠ²Š°Ń‚Šø Š¶Š¾Š“Š½Šøх Š¾Š±Š¼ŠµŠ¶ŠµŠ½ŃŒ." -#: bookwyrm/templates/settings/imports/imports.html:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "Š’стŠ°Š½Š¾Š²ŠøтŠø Š¾Š±Š¼ŠµŠ¶ŠµŠ½Š½Ń іŠ¼ŠæŠ¾Ń€Ń‚Ńƒ у" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "ŠŗŠ½ŠøŠ³ ŠŗŠ¾Š¶Š½Ń–" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "Š“Š½Ń–Š²." -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "Š’стŠ°Š½Š¾Š²ŠøтŠø Š»Ń–Š¼Ń–Ń‚" -#: bookwyrm/templates/settings/imports/imports.html:102 +#: 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:116 +#: bookwyrm/templates/settings/imports/imports.html:149 +#: bookwyrm/templates/settings/imports/imports.html:239 msgid "User" msgstr "ŠšŠ¾Ń€ŠøстуŠ²Š°Ń‡" -#: bookwyrm/templates/settings/imports/imports.html:125 +#: bookwyrm/templates/settings/imports/imports.html:158 +#: bookwyrm/templates/settings/imports/imports.html:248 msgid "Date Updated" msgstr "ŠžŃŃ‚Š°Š½Š½Ń” ŠžŠ½Š¾Š²Š»ŠµŠ½Š½Ń" -#: bookwyrm/templates/settings/imports/imports.html:132 +#: bookwyrm/templates/settings/imports/imports.html:165 msgid "Pending items" msgstr "Š’ Š¾Ń‡Ń–ŠŗуŠ²Š°Š½Š½Ń–" -#: bookwyrm/templates/settings/imports/imports.html:135 +#: bookwyrm/templates/settings/imports/imports.html:168 msgid "Successful items" msgstr "Š£ŃŠæішŠ½Š¾ іŠ¼ŠæŠ¾Ń€Ń‚Š¾Š²Š°Š½Š¾" -#: bookwyrm/templates/settings/imports/imports.html:170 +#: 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 @@ -5768,7 +6026,7 @@ 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 "" +msgstr "ŠžŠ“Š½Š° Š· Š²Š°ŃˆŠøх тŠµŠ¼, Š·Š“Š°Ń”Ń‚ŃŒŃŃ, ŠæŠ¾ŃˆŠŗŠ¾Š“Š¶ŠµŠ½Š°. Š’ŠøŠ±Ń–Ń€ цієї тŠµŠ¼Šø Š·Ń€Š¾Š±Šøть ŠæрŠ¾Š³Ń€Š°Š¼Ńƒ Š½ŠµŠæрŠøŠ“Š°Ń‚Š½Š¾ŃŽ Š“Š»Ń Š²ŠøŠŗŠ¾Ń€ŠøстŠ°Š½Š½Ń." #: bookwyrm/templates/settings/themes.html:28 msgid "Successfully added theme" @@ -5822,15 +6080,15 @@ msgstr "Š’ŠøŠ“Š°Š»ŠøтŠø тŠµŠ¼Ńƒ" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "Š¢ŠµŃŃ‚ŃƒŠ²Š°Š½Š½Ń тŠµŠ¼Šø" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" -msgstr "" +msgstr "ŠŸŠ¾Š»Š°Š¼Š°Š½Š° тŠµŠ¼Š°" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "Š—Š°Š²Š°Š½Ń‚Š°Š¶ŠµŠ½Š¾ усŠæішŠ½Š¾" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5955,11 +6213,11 @@ 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 "" +msgstr "Š’Šø ŠæŠ¾Š²ŠøŠ½Š½Ń– Š½Šµ Š²ŠøŠ“Š°Š»ŃŃ‚Šø Š°Š±Š¾ Š²Ń–Š“ŠŗŠ»ŃŽŃ‡Š°Ń‚Šø цŠµŠ¹ Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс, Š¾ŃŠŗіŠ»ŃŒŠŗŠø Š²Ń–Š½ є ŠŗрŠøтŠøчŠ½ŠøŠ¼ Š“Š»Ń фуŠ½ŠŗціŠ¾Š½ŃƒŠ²Š°Š½Š½Ń Š’Š°ŃˆŠ¾Š³Š¾ сŠµŃ€Š²ŠµŃ€Š°. Š¦ŠµŠ¹ ŠæŠµŃ€ŃŠ¾Š½Š°Š¶ ŠæіŠ“ŠæŠøсує Š²ŠøхіŠ“Š½Ń– GET Š·Š°ŠæŠøтŠø Š½Š° Š±ŠµŠ·ŠæрŠ¾Š±Š»ŠµŠ¼Š½Ńƒ Š²Š·Š°Ń”Š¼Š¾Š“ію Š· Š±ŠµŠ·ŠæŠµŃ‡Š½ŠøŠ¼Šø ActivityPub сŠµŃ€Š²ŠµŃ€Š°Š¼Šø." #: 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 "" +msgstr "Š¦ŠµŠ¹ Š¾Š±Š»Ń–ŠŗŠ¾Š²ŠøŠ¹ Š·Š°ŠæŠøс Š½Šµ Š¼Š¾Š¶Š½Š° Š·Š½Š°Š¹Ń‚Šø Š·Š²ŠøчŠ°Š¹Š½ŠøŠ¼Šø ŠŗŠ¾Ń€ŠøстуŠ²Š°Ń‡Š°Š¼Šø і у Š½ŃŒŠ¾Š³Š¾ Š½ŠµŠ¼Š°Ń” стŠ¾Ń€Ń–Š½ŠŗŠø ŠæрŠ¾Ń„Ń–Š»ŃŽ." #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" @@ -6094,17 +6352,15 @@ msgstr "Š”тŠ²Š¾Ń€ŠøтŠø ŠæŠ¾Š»Šøцю" 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:66 +msgid "Import Books" +msgstr "Š†Š¼ŠæŠ¾Ń€Ń‚ŃƒŠ²Š°Ń‚Šø ŠšŠ½ŠøŠ³Šø" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index b365646885b2efc9452a0b57d440a887bf3bca74..1d1227f8092b70c68bb692fb532759090142aa83 100644 GIT binary patch literal 44096 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 S0TOg?KN0&d0;IH0jQ%f4%`RX7 literal 94511 zcmcG$2YggjySF_cAPNeIAY$7z2_>N^C?ZHN(j*{?3Qm$qGBBBmGZR9rs93T0-mzov zz4zX`qT*xky}s9ft$WW*0{Z!!@0|V1&b98mYa6TA>^0dIvn!1>sZL}tUDaBJ8ArGEjG zyL+JG`6BEFe}r4YE-9a1!{DaK(@d^{+aMnR*M~R2Uhr>>SqC@VMuR={)NJlH%PiR=#df_uVSVF}zg6N!|=u`miRgT-*YY$VbF z4uf@YGVBlUh1+vZcMz1jW1!08RM-xl4^>{*n)yAj6Y`@_{=5xk{~P0PQ2w@T z@bPL7<^PsY<=f9V0?OSqDF5fe-mnrX9>>8p@N~F4yco*E%)Q2wlhec>%o`L_xx+||afpz`GxD1X-5FA^C5 zJ41y(0S<;spz`S|sC>U4ZVO+67s2)S_w{Qf9E$u5RQ+vvfcLiyZj79QD&J*L={gB2 zzGp(k?{Y}fj$94ZF1sA)!ygXit_CXo`$47eP%b?5{C^Ru zyjDT^`z=(wTOLZ?h8sZnw-HqS_k#*|2Q!}nRbOU6mGd4@P%0)JYl23!j z!z-Zt-~MQyp3$&1@-9%}&4Z;d0cGz#=*kHy{Vzj?gve^R37ogwk6US|dVU<#xO^Q{ z{yhg(e_nyg_fKIP_%l>}YjKPZw-TA{m#Y(Q1vYXmELRMBKS5`xlKOS zhd&R>-M&!ecN|oDPK6u5bD`3EmGN#Ud(Xo4;482Nd=IVpqfq@>7Rvrna07TM+zeg}RqyYG8^V{N;`gD+pFzdvS19-E zQn>Q3BUCvRL78s{hL1nePl$ zZ%Sc%xF=M3*T8l#1J(Wxh04#njE_LY_c^Hg@)n#2|Ag{)_Y=LpQ7H3;Q1L$o%HOk~ z>|JU4H^BDD_d(T*=S{!uN#1@}sC4y(%D)Lv`7#a4pLtO2rwl5b1K@^mIaIlw1yv5` z!w&FfsQ5n$<3h%kDO7%aZ}MMI_SQSu>vuMGGxj$QgR(aUDxEV-e*si@3!&n< z7%HDngtB)!>b*OZG3YGq!;pXr!sCuyZDSqCzEmV0Pj5n%+hU9sQ64Zc@L;`#Y}%6sCX@f za(5b3K3ob_PS-%?-~CYOc?2q)XQ9Gh1zo;Er89D-PhSV9_-_Rj{x~RmrEnWKA1WVC zhAPJkp~AZiDt>nuAAz#>0vrtAg9@kPSw7!-!g}O>Q2BH*l>6JD(*F=tJ$=UH&tY%m zAEE4RdA9ezFH}0WGkHg-`0fl9zg?l?w+9JdD0#ARCRBdRg{r63Q2A8{JHtbv z%IhqscwP-RgSSDI_e)Ua^P%Z~2NnNz=UKgiigy4XfqkL;`3B0~A5i|ZI^Wl$&QST( zAIjfRCQpZ|FHxxY)Ir7X2&nj;2W9_iGr!a1r=jZSTTtoz*0|0E-rdGf@#}8v59QBL zsC*g^6~C!a<+UeN{oV)mfDKUf;asSAKMa+w*PzOC6;%8_GJX%`fAb5yy$(?RcZG^a zU#NPs4OBjjf=chsQ10fU0Sy2954pq-@hAQVf;STUwsC2ej;p5c_c1P|FuY*(IHSjms5?*nKY=R8)|YvA?V-}w+2rm}@hXBU_idr_WeQaO?FrSN)WBiz0x0{h!4kL{ zt_wH5+`HQxc113MDwoM{a~OlI;UQ4vyBx~@v*EVzYS%~XUmlynV&v^$Ygh@lfGMc(jx}BhRsN5{ zP2i_c{x-kbvlCSKMNsv53RFCjZ~$BimEP-2{|@6*unqd}zyN*fLE@19&cM3$KFB;cZaqyb~^j4?(#fKxJ0^hC!K+hBBW5 zOW@5={(lIS|DVDx@GGc%Zhft17pQtv1m*Aca0na?cY<|L{@(&Og!e+l_Zg`0Uxv!x zcTN5Y%AaO5x((oZQ1y8eD0_pU>d6$Se3@@@EtJ2@p!%ETupL|h74Ms&((?=~f-k{- z@DHeX^ts-ra|l#Cw}T3QB2<3PF_uBK#}rikzX&S6w?d`!UXvd)`8ktchw^t7RJ^{1 zy#dDFd4l2C|LDi?j;YRQz*b}aRsz*;ih4&F$AN~ks zzuAr6zYU=L*#ydbOQ?M6WBLQ2>ful*cXOcP6@{u73!&Vnpz>icR5}lYJHTV1>^%;Z zkI%q?@J(0(+ur2!c?T$Wli?t^8!U!LL%F-n%pZnI&r49@eQ4&N8-Ibyzg9PUe*>ua zm6*J($z!4XnPT!hlcR8B^!G6y4wde+q2hNLRD5oM%BKgR{C^w{hR?xm;X1eYedX<; z`k`_tfA@vzZ;prZcO_JQ+z#dcr%>_w1uA{(-RkqZ15`Wc3j4rqVJEl%s$SGV`F{}H z8lD1G@9%^P=Orlr-!py%)qnj76;5!Q52pw!eS@IVH`3&BQ0d&o(>4phB)9m@VYQ1ST|Dm_0#`PbqO zU(Ow%@?k5ec=mxZ9|%>icZABo7CqadO9@IE<4OIG`guUQ%Q2zV~l^-qd^8RlCl}}w^ z4croHTsj7}hu6Z*;eAl~_cm0xAHlBhSE%%Ny4!~zK-n7z72ftx@ttJmyF$6Ighg;) zsQP&^RQ|sN6~8y&M(};8c>G{&b&t=dO^n@OfO$Wtcua-LkGW9!TMm1|B~bZrE|mWd zLdEMzsCd2(74MIs^7$L6@>u6y-`+QXV~~5p-f$u82Ty{^uX~{UT?OUt6R3E92jyRj z`+PW^p~|TjRQ_!XJHwf9D_8}Ujw7HeSEzWN2j&0OQ0{Mns)rAm{3P52`Aw+y`5lz~ zuJ`+Nb%%1-4=P?ez%AfZsCu>#%6>hRy@O2uc&L0i2P$1Fpu)Y@Dft0pFkWgbH^!RQh*=vY&zS=Tz7io(q-k$DqP}1u9eiq98M^N^^f(qvksQh2|As>&8V0Yvlq59vwq2h5e z+#X&GpNDUoeC@-&|NI0Nqu=onpAVy9ALQL(01t(V-z8At-3VL3dyEgmDacP5H+j^L zXJt_NcOu*kUJI4atsiqkeI$UY_b)=VpO2yX@!#NN*x_*>?>*o=?l<%Lu zfpd_5ges@0Py2n5-QhaO$H5lxB-k3BZoI&F1ysClfC~RE<3mv4JOz8ex1jPV@{CVU z7pQ)y7|P$#Q1xPp$x*2IEQIpE-t-TK>Zgu|8^9Bw+?@v%-p#Ntd>G2#uc6}g3zYq4 z&w9BXq>4l~fwK3u@gu1G{R*B2e}#L%6QA?>@C8)7zJ>DdFOxT*5=y@-+zj?Mc`Q`< z&4fxv3~mimP~n~iRsQFj`2$etdkQXwFF=*=bJj#OJV1C7|Y@5upiv$T|cgmgvyr`RJsp?z2K=(>ADk6 zfogM@^ckbJ^co53x9=` zaNtLN-g7!ELcR-5hpXWfxXph!YljEHY4AalJACZ@n*){J`B336gaJGNs-B)_^3|{< z^3$+2d=V-=Z<+pwQ2F{P+!J>G#LF3Y67u=5H5~k@ACGo`s%NJ`)ys!qE7;>R>L~0B z<^OWH4Lljf;A5s=^11hKC>)IbC|C~DrvD05dftVqzu&^{aN{rNlbW$#0W~if_?7S1 zc7~fG?+Leni(zkg3Y7c1U{ClCR5`EnweMfHg8h*vz$%!5_3%w7|4P5{{?)*a$jjlz z@O;=8-UPRU??Q#wUB?}2bjxIL8lZmZ~`R~3x9Sh~(gHZA9_XlGioC3#7AC7|S{psU9 z8E%hU233ydK$YL4uqFHosy_b!RUW^a+~F@jK6HU9$L>(}2AVv~-fEpP9yT z(_d^n)OdoKpKJ1UQ2Bnh>Az_DADR3eRJpZk=EEOq91C|=cqX3%75^(>7kE3=IQs$| z0^fq`!}iUaxpZv?l^=be>}=-qq4F;V)xK*?|0JkEegtlV z{309(Td&j1jpN%x*{g+ee<)P^PJk=nL$C)-w`k`3KUgV!sQC74>D>*6l1CXQK&4}v z$#dacXVkAt_tN8!YEn?=rt?OJ>L*Fwen7O491 zpvljh`8!bgxZ3o8gaPt8>otq0pX>=$J`0Tx%HBRu@oa#ye*~1h8R`x1o>U1SogA!aZR*R6g8i z`Y%F-_a0Qd{$u*zK!y7!R6N_Z^X8jC+3yCGo+6V6LdAC&ls~ggf4<2v*a7{N$p@SH za;W&61QpK}Q2Ba;$qzuq<5{Tj^lhm2_LJ!swfFUUC{(`R49|p5Ld7%I!TXzlk{e83 z3MU{R3l-i=rvD*Se7=EIu*F8+-vsQ8d zN~my~Z{q9qdQfr)D0^L?;@REIhno3FsPY+aa@M#XR6Gtbo((lWy~)hGbn*Ug1-C+f zYpC>2FqWG6-cb2gW%_kc^NvHz{4Udf5UM|T&h&pX{pOqc__u>f_oh(c3^0y>O6O$Q z70xvMMaCsi;U8x5$;JzeD~)$R<@2K^zhV53@q1&luHN2;#%@sY*~T~;sz00#6|aR* z{_bO31{I&vjVqws-w2i8_d%7{>rnoDVETVSrN7H&-hPR32je6tf9IH74prW@a0pxm zi{Wi>3-}R~e=Rom>g_ej-%=c?MMcFEFlzvUdkmzxy;) zyLt_3KK&My|Er+0uvC9x9wIpz^WU^mi~$g7Rk$RKD&B_kguf{pnLs^W<-#(zWhZ z&D=iT#!%(jA1c4bL%E-3j6$WS4$9p@#$%w;cc#f#n|wP|JfDK{?=7fu{17UBzZ#nb zzC2q)`O_21d>EAdkx=QJ4HbSF)H*ByRc`yi-tcg!cwJ-WcS42#gz*hC|J3*sR6T3a z&D$Fc748^V4JSj5LpPZIb%6Jk+a4byO7k7jP)`C{Wo zQ1<)u^x+SLk|!HyLY2c@sCXAzD>!I4+GN^c*VZ6Z1FNX^EW~lYSlThoax1juOR^D%_rZ{d|559FKeu zl)HzGFF=*YyT&g}|2OFBOF!RVwSxindP2D$4^=;ALB%Tu74E^tt@?ZScSG5K2r8Y= zoBk@O_Wdzby8kl$ZpGeR5mdYeK$XLe(1i=-&n&2XDl;yDD)-~yj_@uh`@cfXTh=Y{ z^=T+nymx|fUkVkEI8-{8n)x|U?yrTicNf%r42UX8wP~k6y%FiR9>|Fu1 zUb)NU*P+t$xyj83d4D@W+3y9_zitQn!#$wlcO+E)oNBxtDjiQ7KR5k0gS~&fq5K;L z8%=Ix=|>Mu&6{HcJdr;Feecm-5Gd~a+v)W>&2DEpnE@^1^%9|4ulaZvd&-551yp~61` z%HPwCmq7V=KZD1TaR=gl{Qk~f8F|64=l=Qd_O)6D0Zeue2Tg|dGHRQykcito8* zewpzasQ&$CsDAr#xC#6c%6+TteY@Hi%KcWxK2Y%=VjON94He!bsCG6J%3Y1=*F(8G z$apwZ`i_Ol_p{(oxYEo&H1p43Z}fkLs^`IQAHOkB?q@>vcY7I^oBr)k<^G7tuRw+W zfytkm{1a3@{Auz=J9vAW8Utf*DE~@K9%=G;sP;Ao%AbW$@jB4B+;|35_$!Q8L-nIK z8oz+5XT3-GaxR7PF9lWK4~5F7i{JowGgN$5LxuMPl>g0l^yRP~+!VP3)c$)vD0{P^ z$|VXl4ljc8f0@Y_Lxpn}l>KLoZ$Z_QPoUgyIMTBVl)dgy;SVr*sL5kZo&u+0J{Jyz zmq68*m!aIf4V9h`q3X}~P~mhK<>R**)VgRmRCpteJHwrjcZ2fhOsIUj0LuMMQ2yRy zdJ0^by zDt}v!_WpM<_A(AOj)Jl`6>5F90Ls6EpxVPxQ0?@3sC>K^DxHr)rRP;R3%&yt??Gd{ ze>0)va;Wqj0u}G$q3Xj5<2_LG!dIdE`v}VaFQDB0VeNa_^>94YI&vXYI43}bb2?Nwmze%d zCf^B_PftRn_eH4w<`by!g7Kb{jI~hyonc&Iyuo;{@hPbAUWb}LeF8OpL?-xk^JY-~ zjDjk!sV2`eRzbPXLZxGw=`V*$?-@|z`c+Wze+J6lD^Tv^Tj}pFN=RyBaE92SKIlBr`t~Dx6DA zz7DFr-VIg%zl4g{22;F$J3^UHfp^0Fpz6o4oqhXFLe-OVpxVhprvEn7xZGx{Pfu^C z_zi;!e;ic2ro%~a4jco|gX$MnLFHS!Y5sht7gYQXfTzH7pu!t8-G?*9SPA9dAyDyr z67CM0&+z%bC#*z17|Q*}Q0wt#GktiYq2f0esvM$F@!SWh9F~~8)OZAxz2l(LcOE>V z8THcSA+vn{yc3**`8cR>&w|Rg8_oPpsBqqe3jZT0|GqZu+N0302O6pz?d1 z$$J|!#>1ifI}@rMUTX6FQ1O2TD%^LBA4A3GTPSzGK$Si7Mj^`vOd$ZwDunbOzpF{bx!>&G@F~%8C>D<%g6jXiK-}KKmUSsC> zL$$YOpwjgnRQ~({72i$g`fz$eogemtD&Iq)<^{{4(tVTZ-wzf3)I8!7(_d#d z?|)|~cY~qwYZO#@&w+BEH1mUv$3e}L&W7#bbx`i^hnjc33e}#!GW}M&TmBpSK>0ru zD*iKI0O!I!a0yg=E`rL}YoW^f7Ly-=a`!aUJmO{3e;um7c@K_*f5HRd*m*vF55S|5 zUxO#Y@;!X|et-(E^`3sd(FrQtKE{Di;SYlhXZ z3Oo%e-&R58YnyW4&-aAo$P=Laxf1q;T`N4tL)ou|O5agX={OV0-@D-+uyxFrX9ZNh zx*t@2U2VMG_=xdEsCxV!)IETfm45$o7pVT^4k-8St30=W>i_z}1k9NJdrWNyJ_*Wv z7L@risDAZhsC4~kTxTEOU$%!dkI1<#n6tob;jL&iK+UIjXwF=WSI=SS-w5X*w=})u z(WA<_ypf$hc^|{@2vKxjWA6u~c$>=;NmU0nA`_DQ<5!J6~hxBJ_vyK8sq< zBr}tGu<11`(38HNYj_VJ>{EEd=Smdqu)7s+4etraH()**|F=PXj@iB0_%?dS5XR}) zRXwJeyXPm&TjJ(JsCM6h_g&N-(AyU-hjfjRPQ3r|P9k(M?l~JXJ-?gG&>dOF^d=Hc z_&kr^E|`4`FG91M*>8jY?NEP<-U(*^A=C$(AH}GLV!ofri0;w&@HqOXm_HX|eh2QS z6@+P4BZJV}9D6VEsvVq&-IN*biTZ2a+cE1$T=Z<|5xLs+r!N^^e?4A4ISd)+bXz`FwV zY~HWTuH2~)dzQC`m!=lL%{8&LlT|9^vf;@7F@twdhI`vvd0$US-WJc0Z$_FhFk z7+%V&=Sk#yG20LMb>vO)=SSqj(cc;tKF1*6!rKBnEzC^gUr*eg3y;LjCA>w*k0E~s z7a-paH-*jR7TyLs;75D(_1uGeH2RmIzTfHO{}rKsD(1gp_dJ*|qoKH0->v?39n?p_ zV|mMY_59AOv4XBI_uOFWeeqLId;ELM^zKC67roy2bspRq`8&+6$L@ispF({eW&<%B zgWg`~UC3L6o}RnD`^VgA|=ber^e6B-Y%&X^9 z^Yatr{dgDPZ=AOq?^VdB%H~JO4K`<8`FwBS|IO;n`@CD#NHs@@R^1BT=f6M z{CPCbL%s!ho>`cIyph@e5XR8&id{X^u(uoW(Zlp8a+X)-{!ccuUCNgzi}V@IvYEi@E(BPkN9&mdRNMC3+H{@cR~Kj-280%5@({H zMSdPTnltO!5cyvGc@f^vI~KDuEe^jRKW%E+-BIBbJQcWm+R`!;y8&1+wZpqt|SI>>`v;sd@F^lL!lw+qdC1EP+{)}6?7huf zk9m&*`!d@ay)^Gs%+KR}1h;3RpFmH~jp%J)>M6(*oo?fQqb$6g%6{a!Y z&dk2VzxL+eCFoy<`Kid$Fkg(CWmM#3GtZ(v67^@;I}Ni{a1n3#e1m!T>{5`f|DdkG zUWH9R6Og#hpY1Dra#~yH7%x*$&6R2kxZwYc= z^QRa3Z=zR={duU5F#YbRf8ZU6{;t^9v%8s1Kz)(v9Rj!J-4nZdK1Z$fTt73H-Wb$# zaQh{8dck7k{^(zX`ZC^Dgz+(Q9I{>0=oxDMN^@h>C&7+z2=*58u8W%s%+9@-U25v_ z_?zYZ61_O~mSV3C^$qB~1OMXfh2AUh8QjR(t^8Yz`QE61;vK;|$l~(~ycGM-pw|q0 z8(~k+e!L^)CwgVP>tU}A@+er1d?hT$-G=BbM}30qA?s;{p4R-$;Z)v}FfYbj&%wwy z@ve`0A$rI2HpBdN-XD4OykP!}!>k?Zm(e=}9tXF>?FR5z%u0D5M*R%#RzN*xptrSG zy7Mhl=5P{xIH8P=Acwt5M&N*(%;Gk^H9H!`2onQp`MM=(=!{r9nIZU=xLv8d-Ud*UJ||OydBIPTfLEtbIDu) z{bA_ONAGqx6#ctU>$%+AKLoEv?+BAGM|~FVUPoRB^)J}H1UYTySK`m%yhoz{7<#vw z{v+~~ry4h7u&<}ecrfa&rrra$>*1y=Zx`%df&O+deD=p&&lMi-{{`lDN9>)5dN_R1 z%wNWzN>lg8?OvE&3$HOZN5h>>{U>H;^Xhrn;=L{E$Fctu^5<|z`v7`dx|Z*rO3yd-jVoKiT%yYZ)tC6_C{m2xA~Ps z?+WBYd5<-{xwz?s`b^$u&HXl*FERB_@G#sJV}8H+S&RQ;&HP3fMILDK#kjqUcRKI& z=*`02Pq@pN+ehGd-a~m0!0aIG9S>V6(mdbuR`Xtg`CRn%e1-Z2{K}$cYo70y7~6S& zWB1 z-^6<{`di>Ofu5cb$Zw+l&Wn+^%-{Wu(tgM6M&N1a-%Na#@NS8Eiq!B}%qGDa-omG~ z#jjBB5QIUzH}f8h`EcG9xW691K7ya2e;@D8s5iiD2`qfxM(jod?J;mIF{@-P8?!#~G8a26p>|7UAL8 zeHr}^u+tTW&u|nAOt=v@cVVulFPw|L^HEo!{}Jy=_))@JhuKWb2AV%{>}-p9N90#| zOHtp=y9eq~@ICCmhn=jQ*iY58MH)Z}w0|iZGuAx4^&gydRo% z%o@yGdPQb12j0%R8E*{pec%na-_^oJbmvB5+XB7su(QnMJ2899{N5G)Z&3dMHzNGK z;V#&_MCn2Q1B+8T)F+@m1hW&(t-|;Nbtf3bou0A00qWhI|eG0upkyoMa#JdfC=xKxfFT65x3;He1 zpI5P~X9)I=H1&&^k4CQ#b}rz(5LwR?sJp?fpq{qy8?TIfft?xnF_^cS_fFpL@UH>= z-+AYny|+63zg}>2Y499~{58DC>|BJK9Z=uFyAJBv=7;RwOL)g& z{~EI^y*Dwx6TQjk{lfb#>T}S~z%qCQ44(rrKOA8Mdfiap2fu{#@i%<>gyF3p*i%{_ zO$KA4>GD)X%xOk?6_uyzlG#3)AXX92##6~Pbuyt=ERD6wR3ee8k0-07TbEA9lGz0f zv8aq@#iA7$1QS!y1f~`7Ol>0CupkVeB2^QOCxc`xR*?zPvBmLN{omTkIBS1zE1p~& z&&Dv{r!JPsuEm?i7LD*JWbqwfHIRHLSaABepd`Wi+0M zRRq~o5U)|VB~87^StXzUwOz~6nrN~vnh2t`wdvI2XyTvzRuKgMU_TkHiBX=3SYt^Y$_W~pzY=U!HBYSFkoc1Iu=g{(Z#WJw2A_8c7u2(=Wc-+^(oAke-l9F ze^@zBb-I+{uL z&IZ1?!@A|_8re@We4SE5GzaNe6?vjOCYkX}P@YI-Vihv4tLanWYh$s`GW8@b$MQy* zps88YQZKBc<*Az5L@XQYhWAZNwUMl1$y7(v)D_hc<+E!RM3HPx2bt%u85~&<<#wfG}hE58Mb1o8)?_R>3~auxz%*Et`ca#izl=6PUR}8XiXxP z$s`(r`gpcFaNRYHy`jE3mX4`O(whY%qCs^!R=H#M>TI?)Gkm~+g{gQ_SyE37O9*p7 zJW2CNmd7#!x(BqAs#tc%?hDFj35&WDhs2KElPOyk-&_WnUEN$!=$8mC?}gYpHn(QI{}O!twRF{m`kQ^|_D@~n@ty2*4b zQ;S|e7A7r2{h%6TYNItSoU$l&J60WC98aZ{nru9qV0;-Kkg&Qklh9Xje}~f$SIHHBMWw*gxNFS0>5Zy|PfsIjd2#vV1t0qO~7FVnP8!KU)uwfG`H4&?v7JD@E#R!p^>6lF;!YM(25|gF}86Zr}~er zT?qj*&3fcMQ|;!E0X2XI#2{AOs|YXpU^aNd=%BnhR=&uo$iC=erb5xOL@bhPnZ1gX z54p;z{K-`-*N3Ql1NvuIrE5|QL>2MH@l1SiI7Ol3s&qvxkJcDKdem zzgQxrIfO##?>ikjq$aZ^S4VSwa;naCi`zDeL%w!fb8!hQYbcDT>P;?73ahrW>kCP} zCO!7wWu)b6K^Xr&fJ*f@)%YKdg#Q{CbUY1Hl;RfPXP@uvX(uY7jx>;K5}Otc|0 z{NI<7Yi|F?g;XC+W@&jTR}=oLy5`z(xKQ&$!TU?k%(x~UsP|HHb&Od|8AfPe!-4h7evR4(|D1kMkz#70 z{yS4wtG+9UYaSBMHqf7B%4ynZn&3Z$sy?VJkt$zAo-g|1cvj)g5E(h z%*ukE%ges_ogYr4B*M6mN>;|T>d^$+O-Wq-#+Z6!6fkv8Gq@NV4XlJKDm3o7X&_nY z*4=(|@+$~dt-hAX=R`cY$X8iS=iQ99Hk!#W31w;%PbBEcb3r)MMqxM)vdn6NvN&UX znfh>*_UM4welinxnUYRZ-}uYMYhtoc9`&(OgqJWwWjGBgqSF0w z6@*<;5p-X3sAmeUQYVR8a5`I~X|c@cgVA-_>QuUsR%uCW-6k#`kWs75N@JVuac;VE@CA`BM4`0;j)U2sYJZo*1lSiRYuEM+$b;b zrN$=(4|1i5+O@P?PSJ#!@!-HI3i}~dn}QA`Y!&Lqqa(cwSF~=2lV%oY!Q(XC#CWvU zO4#DRZzeL5uqf7G%G|O&GCC2DW@4%-iFlQ*eHBAZ{r$#j*gRvj@EX=+q%o1u8%$N( zbSg^|dW(|mj@Uv&c4}x}+FEhel)cU>&9d>Z=*L##7|!aQeb;<~%5(SKA6Ak@cAFQQ#Hcc0mWHPVH zQ^T5A8%^0dW(y6qN;7lgFy{jeY~@s7P0QTslG;GfI7nz0bqtxVJ%f^9cl6~s>u_IV z@_w-WWUE{o8A}F~)fZR97W;5m^HjvbvEH(cVq-m{r7e+U%^U7-#L|rRWEyp3NqH!wIlmt74;TU42s3d6zA}nC%Z(Xfgs#c7-#?wuSV~ozFVsUQQ zy^mk$%ZG#-c$NZ4#HgF{fEiHO{`zP%NG6%^l+((RbbSSaM$~LmO_f8Yo(=BNOm&LK zrqaxO2mz7S$Euhyt+Fy+UQlcD-JwsYN+KF;GjJQ?r0oGB=8ufzQ!UIJ}5jH#Okq9^!oMtR+nvp)ngiIz?9#_e_ znAr5y_sadrAT7R$vD-{>+vl0EZcuOJD>*?8z%ikjLQ`x7RzZ>DaejhW*!9`Gl%9#) z)+x`ZV7A6dwP($rqErMeQJG^@kkKW<>{P(vK{=-b{R1`+RhLL@%tP!nTT z<#NOo3|mW79bcmet2XU=xI#bkbF#GW@_ZoddWJPLu88_gM7N=3_0+a3wC*U}#?m}a z`&%yE^)b>Kc2;tyA&g16?}lT(+jqO5`Hs+cY*ezUbgHhln3FUrh`JoAu-lBJfRt0t zm=e@RswUtifm)y+?G>q<9oI~9zB+$GPw51mH{m2fk>)5vXLXU$*}!&<8PV!0TrQ0E zlR~7Fsvr7(8s!j7b}OLDxNAOMt0IcU7BTjfwKPBT^c8(rUOEl4S-GPD9a2 zq@qb_u@g2tGA7E-m;R~MXy02=uyf8#&cITG?9Otr5M}!}GA7QnW=uTI$fBVHwU(a# zKWkZ?zj}eGyfY$2b2R17Nz@hBRhU!tYuW}yR87#oMiszmXj-GqT)$%TmS$^@*DKxp zmPYAMe4PswuQSvD?)K@*w1)EoAekIztfFeu()~fH?+~LwSzQ%f_mTpqZ0!+8>H+J? zOtv8r+p&9jDv?SL4|)t4JZwls`3~Ki?B+9*av7mr?M8ccZmy{4xk$OGlnaQ=K{FG~ zX5FSKfr;cxVUk&TV2#%6Co~A@Z)^OY&8dUv0$ck+{kRJ zx-P?S6O5lWdh*l-rQ@fM8$WBo^wHDChf^W-$ZN4OZUzpfhnARpx+r;zC9&k<&_t_* z5(`bkmg}F@Q?WGC(T!_%uIn$0kxGi%&kLees-QlW|Ft^>NC9Z3!EnP^l!@8kk?T}T zTvzPJhw=uSrZL*;q-kLtWtWJvc&TSpkJkGMOD!d;vM5usD||`eS22Z zU9y(mysBEOd(|0tV3dnioWrXIH=*-mkjsGlAYASWi)r~-M&5L8hTHR3&7Yd8!b(od?VRMK za2BN4JFk5sXuKWN$S8E74!w-i5!KABt5uxCaoRzNH{I59o>wuV)G@VZlw*2Gd+5z9 zC%4P4=A=UF7EEXDrPiXAq-)$|(M-G?C)y9h8tsd^nn*DvaVsvOK|e%^O|3)VwtfrYxlAyU<+bXb6dy4=B%M24KpBA?#TF z$#;q#o=(S=0)scp(tO;?X&S1-8mJVraL?Oj$9_kmK)*bdOsYpFB7W>xyV)$pC^k6K zsYT2(^1iwuEb6C9Zn~xS^Uh6V zLt}O9q1x>chk~!5ja@oD=5fk-v&Y(utSXo$hgG?I;dyf5l8W6V9}zb%`kz~upZPPr z#v!;!QHacunug+1pLgd(KkIUn7Z){EV_R1ExOxq35=PzpykM$U;6Ua+KiyI!GS;t1 zM7O7}ElxUWlfpiYj>_vW37+M9j>tGoI?^ChU6zWbD^O*l?w_mm!@bgPayuawjMko> z^kcysw+Ui`YHckOJa0tPYNRyBHaT`i4VlQe+!j}^?i6U@qgKLsTW$@(Qa8nH4STtn z^SGF9d!?g^_`dQvRvE2JaQvg?a3vd;?78?mP;%wXG*<}c7I|IQfF)|7ZYYSDTfX~B z?XCDiFg5G*I6EzV3oiGpRURpp zVSba<8j2G0GG|Ze1}Z8!rlnGlj#pKya{A@1hd*;QJ<^eK7xlPwQm|pC>{MLqlPth1 zT;G(J7(Y3l8PA<)_b*^XP)fqhitb*w(cmV_u5dYWDo_vi!WfN=PTO6N_9{2lIi(u} zooc2HQBEk;(WrOkI|-+okDNdK_7=ji%~>gE^G^1igjf15LTXJdwTsj^aS=ZycK-vn zP2dIwFT1%a8+pEfyq?W@NU1w`Eo1kB#u1c7INAOn>I3AiyA4k8In_YGdCL?pR6Lt zYK*kYsSZYSHD6PG|5aNn>wjmOZ^_zKa(3M*Z~hjU+XVF647NQo-q}!l)c19K2SN?fPC=!R3a!Ut&QsLO`pj4#WWq;`avBwlURZ!n{Prm zQ&VD7YJ7O+>}%5myrvl3%sOI%>sn|UektfRhhr%3CUBjP$s=OST|8uv%&AyCkqBLo zEYQ=;)Gyj5Xa=T#EL+veoKlA>`Y@m-x+GpxSHrSn-`MbA(74O5yX@Tki z5B2>{XJOyqZmV<;9jYNxfF}CbHM%E-Nm>(!Iu6BXrM|L~(nPe%_L7v1k}O{C1B}Q7 z2U>18DsWqPEqaZ6T}p@pxioVEn+N&+SACNb*IGT^$jD9jqm^EaMOT5?7=A_B058fo5DRw&r zUUd2I4BVjsmN+0!2jTK@0wvEF;};0FS2hYuI*;Il!_6oZhGfW%jt4J`vK%U!z|6Ru zW(TQ}u9C4kF)^BmRi&75Fn8qKhh4dewmlq7XOeA;pNZ~>tejP0WFm{elq+3ZXKRGW z&m^6csdL90m37)~rYX72j*1qgUb`E9q*!+{g!)74oH#r(k@#{NmpdJCy_`FkR;Wx6 z)ZME7=1;Io$emfcvBrC*8=GZr58eA=9&;L^10Q$H!#1Anreq4X@YI#+Jjx%auoa@-g%ex< z(T0m?=sLdv7q0ztRVcUgSALKueX{!`%Y{@> z@Px0jtcX`=25C!8)m=7u!s`a%R6KvW$ITG8t*sLbH)xkAcU-DmO3>D7#}+ks#oCfu zs@oCK3T2e)fV1v5ei{DL+VGm}{54cqSHi;EeFc|^Ox7$(a0d>Spn?MSDO7JCS_)4J z%Wr7KP?xN>r;ww6KAM3+PxApWcPsePdbso^^O9PkD-2l({8oZmfD_r)cM4`X)N~dwOz@`WHl0Eh zlb@-~*?cL+yxLbNTLw5&#oW!7%r11?_!6#Ss{xU>2tjfgpPPkT_$(EETUeeXsp>_-C=o>lJ^hx8a6|JjEBN`czg3)@>3AzDU$@`p@`xpRc)k-(bZCt1iOENVqew<&viTaMv^^6>k$2F~D1;o6FDS*3wubFKLn|0)hqLFj%i;D_K zQEC6Np7|>$cNDR0gZy7c*v+{9x1!5^A0i!I9a4_FPdmb61sxsJ*L$em{1(qw-IKv%|jqvkQ*LgL{3k;WJ-9N3k zbh59drSAE-eu>Kk?lOd5<9BlwhX-DY@PS$Wax;e!j1)Q!r9zfzQN$_*8#dvJySZkj zKqu?Ib_s1Tir_;-EK3;L{K((Q)_}?-Txlym)-Jk)F<)h|mu}$pS`*u3Pr-#nXGyc$ zLfd|Wf0dr3~?;g)eeEBq8Bx4f6F zCR#2_+^FPh=Reu-5igN1Oob>2O|i6rBb{1wXrinPZPUufBFu7iP74Zi(q^8xWOT-* z-BWaBZ+A1j4=z00HZW7S*l+BABd`61aBaY9%N)=1bw*8+wL8HoMr)~!E;w)IzX@~` zwMMldommtVO;4rkxr!8Jj;iCe30C{`6A82wWsm<)!)kN{J!9fIh<93=>z1o+d$R!T7EOrw_#G|s%C=OP-I4`mXEWv z1?B$PftH4FIxc=riR(npAmNu5Zb>WKq0B0yk-1xS_^br>{u56D%6OrOV9@ z+;=W?89M7oXm&v^uIa|#LRza!yMWZ#1E$aVAZrGp;+Y*MMrLYPWjNqoxlRI6*>?lE zk7->`mD9(rKjaD-j8Pwml>gkK!d;&TPc7DFq}sF={R*eY88*Wtd)G;w56!G@;DQ`& zeI^&V*i@lcj?7GOsY7r}sWt0FWM(RnSriY7pgU@tnX2V-9+$_P)GI8e*<#TDx~jSd zugnDF>l92~P~;U1s%FTXxlf_Ric~Nr&D}jt^x(d1e6L~GuSDcMbxQwO?N~1niZ(nt zLpKX#vEl^kqq`g_!EFZQ*YSS+l3TPFE@#|qY^MEq2}i12g5H;%lHoxFP4^pKj;tcl z;Fy-}3+OkfQMk2|F;LzqHeTCA5@RymgcM#JxVDX{Fkx1Y2Qb#<;JWTyHl`P zrKP^;XK6{mKh5fA#fqtxNl}N)48Z!RPhxl*n_HQFnW8R^YxjZff~YTahs2som9y_a zH}5ythvPO{;r_{zyXGJr36<_J)$cjwPh4zw!SDGiS4wiOy#vZ$+UjE&v$c98P<3+Q zJ)qG4Do)IN_zDdV`KB=E7u(9(bZ+X^KZO1_F4hR#4gJ2in&syKeq&o<%S`JQZLca@ zD;ZL%L%J0@LjJc>8VUBxP_|uJXiYx5FLGza>}qgzyjGeTSPi+kl#^ZH?u;$B`6$~= zy>}{X=VsT}r=~XbkxghJ{3O^sp)}Z_ofYG&I{nv|4jw@d{i=dA__Z7T+K;w#wA}T5 zPt(9t{}AoV?EZtay5scV2#8%|MUBlZY&RDx>jEsX=+O_tW?e??Vy=+pPqun zRk*HdYrwY8p`q=iFbqZty`T;EYR*9ddg87Q63QZ@*u z0Vak^Hxu3VLZek%ZgD3YDHe<&6=R!2GoM7Dzw-aX)2vy3VDhjlEheyc&)i58wA@v$ zfS*7LPm=t+zK<*IbRTW(`SB;TOgI|zwEX|q-emqefBrU5RR{O2Xh=8ojkPsGPSc&F zuVp|m$4pq%Qd2b#UX*<3(4YvFZC1}>3Ob8}0X`#e)bCV8N~0BYV)+d6#~1EAlwW3X zA2BfTK|LGR=QGDSqlOp&VuI_e1 zP8uF5F+AI+xm9X^hQqHl(Im_CD6Oz zu$D=RobWSk_DcwE!J`P06H7|Mu-wuv6qtf(zc1=S&1vdBlMjYAh)SO@MRf|HwSkQ} zY&I}qZQMXK@$)yTO5Fzxe$N6A^fd#4xUDFOm24lmamY7))8QtS_Kr$5_*eM*u;D#V zr)Luar_NtL^Y-(y-{f??0tZxB&hoD|N<-pAf@AGCH&yi8XLLcVbGTluSVx&FmBzR* zLmF){=|z>X`=G(yaYK-AE-kteqjJ-!3^g{aZuA@a(%9w~+U8O}R!|B3hrV3o<^Lj-U)e_xgmj!&z%U5b@b=XmU`SE9X?(>&gKiAG34g9@DH+S|0%aXLvfiA9=x}82+ zIzPjrt5mrkQK6hwkeZl=i&&?@fMplT6*+9M4PdGowhp~sSjw98X&0x4n?01cTiiHD z{+nQ@w2{@T{rCI~ziw3Xp7}Eke`8v{D_m)VFehXwyEu`A#%V$wszq+W7f&GX` zX{s{ICrYHk6oKyIxw(F*gHQU!%&>s8x>Vitofjr}Msd|^$EjXFbrpU&skNQk&dwF# z+I|DedEV5EZb2zG3Ye(6UoFznA+10<-Tb%qz8mn{3Zx{d>*o5v!~dXR&hA|8Jn*$q z!I!OUHfS@#S>c1o26>xx{k>CB4$<5#ei@;mDq@=frG@t%r~_W)x=%HYyjxD@hq|~D zp#1P3e=%z+b$5uGj?ba?-(J}C&a~bztA3s4wXM#16OCO8g9sPsYsrDOe$B*nwz^Yc za_(@`?_)UUvggm%|9%nYox2oaoyDNnpxg9Q;-<1}@@?8I>ju}71(^CyXq2<6yEt;9 z<&n8Uc71~1q_N*iB4q!A8p__fGP*CpecLY$ceyYmWn;GzgYh-oD%Oz4+DE6%Zl_HL zux7(wXY^|Vx5ikDzIBI%_aALLIv29tiu51Q=I4!#JhL@K#?Rs#8QBd7_x(jC*SGr4 zf|&Z>69v@TV{{u1|!{ax-- z`^CA&V?G^1!Aiq^m2QEi+1lQtQvSC;MvM18pm2)o7Aj%j@>o&xKYo`hZyh}OUNln5 zEu74vD3{RdnRw|EdMU#^lb~?>)23sQ*-`G=vvGuiLrT}laaxSTezazlk=a_LxQRq$ zw)VL-T-)c;XE`1;z&0_u{(&l82C!-5?Qe6y~ZyWIG4&Sf>TfKe#DTNxn5lf zuAx___mW4-7j_<)s9;$mp|hmQAFqsL4$G4{x?5(JSm(Nxdi$9v1Fff zH%dQ;>}I7tliU=bjIfI}Noy1{tg0KYsbz!B{WbyDO4MSQ?rM8mL$J>a1><(U*^=R| z4EIqOKnlKBQXJ(Eb4=~tyY{bKwbN-bz@`|?qYF3Eb?+wbip*^KM7a4FG13mQ`;sTd zuj!Lz?hclVQJj)fcKRgwMVrDy->>QNlN;7_ZU;=i4rbr>n$3)+Db5!tC_(z+Br;q> zOWrG`STkN5RWxgE;+-G+<(*$zti>zcX(JvPO)uPKCpRZ?Khvo|mCqKi%88UKG}=*q z>#Z(Xte*+;rv5ZdZO%I5+%+VP$GG*AZFg`(BP7SQsp~J(Y6hZTF~G6H;VPXzXt7}3 zqJ;|VXBuv8=%Qm&XSva-bdXBu1m9iJ*PKN@<)<76wXq2{qHLH6Ch==A2?hywdna6SyGfZw}$hV34O-pG<9vTKr6qZ%Dc|} zdb;ZneAg7@FQ{pi=n78zvm739$Az^PC8=K#QLR(UP=>j$9$2nMX&}0otsht6Ziz4U zw4K+IseDyvyW$oHb^mfs*QCm&N|H^{k~FPj$4SNu+%m_`hf25wJ2IH8?v1GVUsYFp zwBbePrV5@Kd-x-Ac;M%OLkl z{eS%y9Gxpy=wz(h%zmXZJHN)YSt&`5CfIXzGkez=@f*}!y~Jfu zUNl+EmnIZq#+E+)HPvU)q+y1tn2pjWYP-_cLY77Pb@5#5b>DkbG7{?t#B4Ian53Tr z@}=VUWBA1k>af0psX-$*PYQ3T>JV7DP*1$vuT#+R6|=n2=3>SFX!1lz46NMQau;UY z5UD|&D$h4olr&3~wB{%U-3^runLV&Ihk^VBJr!ud@T6s6*yePDk{^)w^*H}S#o9%n z)FQL%xTKq^taKkA|LsS|Dit@H<36!JFk!-JAe1ckF(((8Y2pW zbJ+a21g5iizY*z*O24zrzAZnKqK2A|>o+(VQuE#szyDX;xi!aiU3b18@}y7Eqp3`+ zs!;MJQR3$ksQI01yHN}!8M&_6zRfOb>lbR|(6i9$12vXvmpm+l>;spRj zngnqn9z63lpCZBOZan!b%(dt_di9Dve*Gto=x7FYmJKXvW@0;%5!qZ;v2B~si9gj6K8k@aDT;ZoFGyd9d ziPYH`C)jF${$u7ML3UjU>F5vwuG&Wf*70G9A_M%G@Vm2hjo0J0-jDUGNt(LJ;d0%!Sh@{0}6@QY*!<#XzA6<8S=E zjac+ zEQ3_vlGw4qW;OWqiPpQ)Oazz_T?p!Dh!q@__xJp}*3Yt_K>qSp0>*~;cNgNzj`FM4 z0|K2oMhiWWP$OdU?0JQ;(mtHBUta|)SaLJBsuOTzME>t~YIb)q%8 z0LYdzIaQC7zKGHXQcLY*A$3KTpdeD-!p7HEn=G09skE__DQc0~(?cnHo5gw{sp8-j zXcYB;gQpOSirl1^1;LP_q|+Vq(F`NeB|sDat1Srvq0~Yg5hP{p4*%r)%4I2BNdb8Y zW%OyGD*|q4XwfAF`<$h;)w(&Pe@`%v_Z4>k!8_#XMc~i7nij(ra@_jaPHg_b`JMh> z;D(H7KhrYEP}gt%TgqFv{vOz3D|u%KmF@3Yq4uKC$-Zvimk$%L4H2>K78YjqkGV5x zZD#tp0$q0EuPmu4NC2fWaVUPxaz6Oy$~;t6u0MzMp5Xp`(MnW&ts(jMYY)D+15v%U zwuFi#Bw&J=TvVd0EN!=v68a6{)8MjVlhCBW5fv2_x=?F!C+-hf&iWJGYyyow(#ya^ zxmHMo(x<&%tY7=nZLe+ro44Qo$+rHhb7IUO>XmyE{o(xDauP$g(g_VA(T0>1#|EfL zqt~t>Rd0S*N#OEx1v*O#m1qt+@m`eBu+MF=EQf`SMkqbS(iSdgU0HbPk8ODkSr2sx z^JY%umDgW=t3C8q+0DCesUvszIB?rWF^%%C$|>c9m5OiQFQo9T}bt^{8O% zFGM;aXJ!xLT`K;Bo0Pv$Q27_e{66xWZZno@LhS+nc_8?y!J9kZ-MdFx^JZ;A{fzf& zK1B8cr2gtDL%&7HF5-^)Fxmmc*tA+X?pL}4xfNJh>t8R1C*bcBQxay;xd0OYCa%a; z%@_OlYH5_XlEEvNqvKj$s(t4emvTTHz@PyGfL#yEU@Y-gLzA)KeNMz>1N@{&rC$#Z z8N7gM6X%oJ`3s>nkoxcZ8Ze3X)DXfjijmgxEuj8u<)UWTz5uxHad~SI&cjd?^jbLY z4IGe_Q#gbO)tsiLU7I?3_0kw2Y-AP^u$Q7M#EE{sv96E>8lk_wmcTFe^3D&Q_puC; z;US&)@{|)m49KXGhSj>UM47}eznER6uLy+M8t;pI*kIwY&p{tCsfM-!MGyrm-&#Q1 zjfO}#?=&L~1hEjlOd&qpu}1+ZB-_A?Q3$2y*^26Lp0JF_Ugjwd03Pk5m`n$#daV_q znnryK5zR1OMy`NnppLc$_cbWq?Gvj8vA#T4e)Uk(<7q3W>$IqOAdA3Z{yWfisCGAI z``S2KcaVWt#x_1dq?EspKa63@T_#&!+i((i7u0-U;ZND>iBL&#RpM+ZSqI{(%&ksH z-+eXE>*s%9bt{Z`#cPGY8I51gf{}3{ z1t16U5qFz6!c7q^3TZ@HO;?O?Oe<6hi<_4=LHA(vzt~AoECqNOAW&LZq09-<%_i+; z-y2_J*@!YQqKspSk&$5jQFNJ6f{T~Wn)abttD;)Dnd}E>OiW4IZ~3Srul3o{>cggM z{=La!*1fVG{~L}iYM9{mbO>1rD5n+Qib9c>h)$0P1AS#ejvqW}7A|Ebz*Z5}HDGcP z_8-Ox93m8Z$c-iqP~j;7y3$%_M6ipA^aY+ESx6Avl>wavhNC5s@RU|<1K z5~jblZ75b0So$#1HnJ(C@qO&*@2B1eVNz@d!c6*vLLJ;bgj>ZX?6|F31A$kAd*rnj ziWnq+FR^#ZYw)A>fGc-@l`*&*KE4y!;e8lt*}~n@0TkUpPt~OSozuogo&&j`uGLVh zeB()Vv#=HZkqRY6m@1x(4G$I6DxFA1bfLp~42ql5EPa;E3VBDMz40fKv~?%!)5MG9 zL15?U)?njm-r(Z8H2;3~9ukZjBTJau)BLB+$OM=}z%-otJ5Vr$0_ znMX@(oe85mq8MN~E6E-8A3^VhRE^g@c|oQ7Gxd7*MOo=(-he~f{6}?+Zpdqz-_}+( z8u%o6xfgEN)SX*(;K+b52JP6Jw&!P($znJQvJ#!}YxZL+b-WvJ46@O{3|}`kPcv%{ z72?(Z=NN@_#D@X{T+ccqNgKfa8v|%(sjC!T?<57RO5Cpz^V4dcqL()NB1qVn+zZql zxDurQ_*+p?3INBb(Ll|d^VlM!NQpo#g`W+zg0>9^Hc!U#XK4HExNXZqV^5wqkFBk2 zi!Rz|UvgYnzQ5)z5h4^<AuD1RW_d%Mb2bG2=@7A+-dG>k!^UnW;AqYu^@G*%X zp%f}|8vl8BW_We^^VRt~os$QMoJ9TDMV)tW?G+4Ikrv#2G_rQjXSY^wbL+|f=Z_5uqet&4o+XU`B_mjWf@)mflpz|%S z!i=}Jzx(a){@Ipqe`m|LzuW%y_qKlLyU)Erl+YGlxO-@qj8R+3v1b|Ww{{?kwEy!5 zx*!tdS3CY{FCVn|_`?@>@A&8kbaFNPEpHQhv9-*x-CtSVVr%=Ke(~I!ufO?Pf70K1 z@!QY6;wbJdZzDi#jl9Q~s5HKFH%UX}D1i6h|LNO5+Vbc9cA6k%rMJ9>6H@+)t?fVO z+q=*GWEWP`U0Z%cWEd{M-5B#FB%=odbOG@ul%_2L=}p+wqN>hLO$(8e);6Za{b>Cg?H|LDe`%C zytHHY_MdKh>5W&mzxmp>Z7=`zYujFW?|%TwJuiN^XWf`FkMI1)|Mn%a-PJvHRD)1$rF#qPP8 z&cy>fEi^nLjUXNbN7?YTU3un ztLaa>NB4IQUagKD+@ujN>K?z*8GE??Sx~yQOOLAArE2tQHGQ{t|LVUEZ+K5>=Gk_} z4^;DjvHcA{AJA`T!f^ud_#sitnwE+O8VdE8x|;iU#W4@BAp>qplZ-&;|? zw0iWQn)#x8WR4EK*{gm^v+TA#MU5AR{`il1FGima-udVSG_$_Mvv%n>^%DegYeKxP zGj&^UygR|uU%bP&xaF1G{l1=@zQDa*dAb!T-J8AByD_Yr7(Fr>l__@4U+o>Z+5Y2i zg?>sq!DsAL@6wG8P5W&O43!Ydfk3i@&5j@Nxd*C^GaT5rx_oi<(S<~4Mi0#H4Uh7I zY}ZigzP^2KMsMYG=c`Mdsc|-+lHs-5EQkV|etK?oU6i4li_#{a z#jD!uT9SHVL|!pk488P?;_=F|+Mb5wI9TZF{E^kg#nt5#)zn<)4WRJq@_ts%n!OT0z*2z%%~lr<)5~Zu0M4UR-TRl<0iKqti(mDwj8w-?SDzj3 z&Rl}d@pte3h2H%u-NpNz!z0~WXS$y}>a85@T{_IG+nw?2{M84L==i&}RLUdvp_&=1 z#?EL>^bj$ax{>P$8d`m^ubO(i_Q}lZ;saj0IzQ1HpLNg9sRz}_+3LVTb?%F5;keh4 za{KR=&Vo0Y%M;itv@N(Er=xk&8V@-F-Ni|t6XA2cyL|(r3EDb3!;S!=_BvB8xUHpm zZjHD2fO-nv#hNWNTA7mcPp`vv0I)$-@n(s1YaW0NIzx^v`4Z{q0hmd5qCbKz=t>X4aixpn6X(CVCi+?`(F zg(0*9iE3<)E6jE;45?u?d3f!>L~r5N>f-X+&BMLfkI#{%WzCEZ>)9z=3{-7GfMhm#dFXDfWHm)}HB zFMRgX-pso-o6Wxnc1EOU zSjEGy=(4)_u>JJVdiv3Ov-hFAPv4$HUR^(wa^k&W|uN$KVV71UQIQhh_lrs{7QnI^h2}UHk6x{i~ThaD^gV&l*-p-e<9LvBg>$o zgxyOsy_sp$PzwdU%eSh@V{5}B1`4D1+0!_tj};&%!t%*XcjhiqS#^F`qln|oJoa3w z+5HTsMxQ_K9JyM}?O$CwJ1}lcxj96unmg8;nFm^{3r9T4>dK|g$ZV@~_7gax20MPH zH#;k2dN3-fXm+W0;C?lI64|$NVy-hW(^)twbPSfJDS18Boznp%&0DHhh>y}xizxZT zrk>wGyO-nh>Yk#h1_q*mu4KNkV$ z{x(>+kxhe(ZMR{EEj6dMmv=`WtS+8pLekHCt8;SBugmL!hrZzT@m^3%(%U8%m^*qa zbNNK+3`U;3(Yub$c?Oaa%6<&ho0+SYPqcV>b@_{G6b*V`T1GY*y_y?YJAXL`v#}#D zu+t${8x_m*nJ-o!A8H{d_@T!eXu@03^$`7~-1&L;_Hm|^7p9P%Q&&4v7xLDV!7c0! z3(Y|LvSh<;esS&c>6XtI<_s1?FLdzE#U;PqQw3+x$W|Y(fYj&%Y>SA@!en6E73A4I z{wI_?urJv0!Mz@vL(Ahu+P1qBbkDWO%G5o6w@FpLUi|U+b?^OKTWe=N1rL3S!SSFJ zSWi=<>i=c6XKViko~0Y1c-dz->QR|uU-j&g!g;z(9K(ni{bJz}&>6D%G_Ar_H6>Gz1 zdn*SF0@Lo!)C6R!I&&k9LdTX@7pGBZtud2h$B99)B{^d1p;5pd8u^01nO z{)ns9=u*G5)j=CSaPwb>4-N{9|2iz7_YQs{l3^u_YnczETz?;TaGD-kf=q4E`{ug-(R3U6(VKo+XZjU2 zTFpGli&po}@y?|&raiH`G_pDmNjDO&E*=3x`m|CLH1@`(nzaarObB@Tn~}8xlWY5y zjd7jh4>Vr85&u9i0O96hFS!s-VVNYY_izOl9SRG%lTNvlC( zdNW@F58G*5o{_L(aT+vWK{DTpEgD(!2H1se2(kfB1cc7yQ7)M(L+1+S=2st$*2JrS z{KJHXC50XK%_f1>oI>H2sVmICy^-VHdyB$?^I>rodR>~qa42*5*u}Lo(+wH6Z+Pg7 zXiUnyyE=O6cS{!lR_F5xSRWEcZ{M=!{@L`}afw1QpFjQ_`?gUyg`p6#{HE-?xJ;6*FLF^9tLfV zNyxSEF;fxW@ycWiE|$gay!`Qd%4KR>wqw23l{uj{CiRqa{DW(y zH@hF{O^iswQE&EIXWwY(M(91eKI&ItL9fz*%kCDz!W2+D+y`5fnw|YlhFqBd1P{s1 zZkv=EHr~>KnO`uFP!C|Z-dTa1of>_pr5%0*J_$mTM^_)8tL~iY-iADWCG5U)sx$K& zp+WElaUGHV#~7dlIlr%a`~p&umKG00XnBcy2$nS+HA&EQHGF}i*{Y`RSNkTnwt6ea zv1GPn%|sR{t|UfGmy;i)YY8%4Enh~Lz>W=15FwHKb@34L#DN7(Cgd-!LI=#Bl>VSK z1Glv_vwNu`(E%?Ts)HtuHGFmPHh}R1+Oo?@{^Ftyc~bx*{G}v(f`jXL%m- z=-TB^d)LSER_-bCg{a5vOX&p*;#c@?TXMoRiLY`|VF+to!@?IfE0$U3 z{Iu#RB$Ni1f9k>7sr%i9l~!498({U0onifz~XXdy4otAoFL4URL z&)RkXQ4zCXb3&_yw!$0Iu3!qfx_AW?&;xJ)A+7ZaAKBUU+l%dQAzyax&2^VgRdY+L z3up0fz0i7v5{gu5$vFs+$MH8xA#K?V3f0>rEymKd?ZNr@wKrdW{f+J0UiL>W zH85ncbLh+7+(=DEQRLPR9L8YGu`*q+>8Af!J9`uYPe=T(+O%a!qP>R@;$zkPKK2ks z$^B+CO?qhrigpqe##HyN~?_D2(B=rvO)4Zyy%lrqMWqA^!Lbs?F z%mP;*9fI5Amg(F(;k{9}&ip7GxFIdXb;lkWoGsOX#hN`gxk;ZrcMgxQeKrHB!*9h4 z>eg}$vx+-c`%TStJDT}e%Y&zUVHGlO9e<3yS~|WQg`y??EB!eK_DfrBUZC)VtsO+; z&&yN2@vlT!fGTF;{DJ)Wa$}8GK{Fq&F2Y)(m%Ul>_HaFh2lB-I-ppl4s*5ISW`1Tn zPMULkc+HsemdzP?A)(>SqGV-v8+;hY1&u6(79T=4uohRI_*lt77#2>u#5Z~$w8J@6 zoMcP|BX_EkQLZ*hBP|Pq_T$wumt>dD7gIu6A0kAj z>64C8(7E8$oD+gcybED6k-Mlx@Yq^g{*yv}-`5A_ejWu&#Qz&XB`=lhmx%AC!0Mm; zfP=`vv9d*wI5$P3<5Z=x5I?;;*Q7=mi}NRu8MzC5?;INMO-@x4Cm?2~6ZL8El!Y62 zCpJG2@w#ca+XGoY4qgzrU_e}_0-qPZIV=G;wi9jQNL3WP5JF_hNNa_=21#0{6D9>U z7(Sqy7jX;kzVzQTSz*`K1G~BsK~p$l`mugLD@0=-*Eda z0+|(xa0gCR&!o?3EEuuRVrFSeN=g&@8a4>2!bRn72%Y)F`)0W{Z>6oTDbbcEj;`<% z-iR?apLmBb56ViI&qEWIKYwAN_nS{UC(o?6%=8^tP0a;6uLsaszjLy>%UK_^==`33 z>zixv-_u0|c<>z&vfS?#mkmp_k6*4dp$A9gLZ*T33T17gQHQekC9okFG zAFyV8B4uUk=%!Y(L}3TU>M?P5?aY@T?@i>m?zz(~8M7jLTewsjdi} z{)IeQT5H+hJ7D6gn>IR{D=5Ayn^x0bwyH1;6^z;B;>d;S+{KVo?<}q^Tq*-sM;5{9 zYGq$__+)Es@pKPM{)xjVU5@op2j7LduqJbN@hA8TLY7Xd+E_8opE8S3i))OQj+~%& zYZQ41ap^O27Mpx;20!a(d8@|j=ozoiCo(!OoNFrVPkdl)yFA8xAKGHbf-$|?Xfbfh z&iULHamZ+!qj-5>mGy8amI+H!hfkrj_zD!N6C#T=hy4>$8zPcORB7$Zgj7mfx5ePE zbr<*Nk3jqCj*mYYdiNLd_dh1C?v6b4Ys2SP=TE{$uaCf@u|tPMZ^^wGfwAs5XLI6U z2-|6yFt)naMi8(za@|cHfE)w^Z1TX83y`oaF?Gm8*tW-$%N0l<`uZH{R4y!7hUkl& z^G9)O1P>WM2)-b&AA^r`GQ^2J6o)u%tKG#5AWU!=)Wm2R_&Rc>bK*)GV{No+`Ny^o zj$s5qSlmD(x~OS}ITa@Xu8Sn^*FI6@l()z^9AdK7xyM4tIL?VwoQKY(E3FPDCfr8T zcZnm>XoxDb7ELqmX%!6VY1&q18JN3=ddtfu zE_sn&hwjqJ-eWd3em1ji<|CUA^CArl?&J%QDu!UO^27LozZ4jn7jcC0q7YB_8Q?Kx z7%`_!dJfDxT_gGGjl&F_^=xIfmm`PG0o_vKK(V8Qf^jtU!d6PC{3u8&)b}#^wGi&^gdDSZH}uLhCN=NMwM>}K^xfQ+Xs)-|!P|O`@3Z{&?w(y* zf!T+DIC0g&ye0XZwM9KY2t6xe zlIeH!TI)ye{Awq;meBNvH?-MA8zTAJzMA(^LCXW}pW;Rgw*Jp#FYm_huHe>CRYt_twYUT_~T@Lk)JqXS{jAmDx zx$p?QNtVPO$~q`8MPCx6vcfyTvk(j$L&_MvalA6CzZ#g98>R{K38y6l&w=spxLXcM z#n+eH7$JQVl;OYvr7%nm-pjY)p2t+szeu?`=G1mwXi?-K0RAJPb=pS^cur#lV`CSo#@@igEe_bc=y-u?Ar1E z9tk-IFIHn;a&T>rleA-_u_gIbpzPxdb0M@ecD=8Nn_Cr8wXcWPh0s(bYHO>$PU<52V<0QhJ~1ZBw54`2chN!62b+^{gnCswaR_OEQ2jtjMM5ZXkMDd>oUmHxYv!afe<2f>h9v|(o!{l5*8=n zE6vU_eRw3dmjrY4R*7J$aiUi8ZTAxl+=~?r9<0KLzIqHANDNZw_{sqq4X|V(OgO;Q zgpIF`4Kv9WljxnAtY3@92_b5#tWr{pm~NWKe(l!j)uq$b=os-a$V2i0<&UX^49?uf z!EYqNC?8ka5Kc95;Rdy}Z|gIy*I#Yb(Io?dLVZ`=l@=WTK#aHMACwc+ZTdf8-#2Gup_?!ig`G*jAE5t(sTPT6T7ADx4qeLIae`o zu!Q(a(nvGa$U;&J*kM@8pMlNu6Ri)i))$FHzUUnJ3}8KFPYY&RM?YFD-t5hSqWEfL zs&nUZUU*SvWz`WJfnUXHniGZ)K@_jxK42`gmntj6H72lGfX1++7+ZQQk_`=jP`=q|+Cj%Encg{z4tL6x`Lbb_=Y}4Td zoR)E%>nfOWY?IFnpjh()*$W@3I%Z2k<%(x30_0B5+Dc)q3bzF$CMlo2A(F--v{0va zd8+zc0gq_~3{O_JejQ&GAA=Qdgj7fXggsiEt(GpX&J(X6yOcldb-ELM`-hqBlaEap zT4eE56ZcBT$V+p5hIZcL4WxR>9N}MypZHzIPIi|TT6qz1h7Dmlnxt~Juz=_hHyqmH zW|dsb#Hc8kGp#G4QMWIZY?!m^)LS`L9+K^L{fY(9+Bm+6ZxZ*p>NeFOtFVdb9-U!<|zal z&q-_EtdO?IzZW9i`oe|!8WfX}Eev*Iawspwq3NIiJ&pWT4V__kQ#Y|hdZzt>a2`3b z5|`t6X1-#auCbz@QR?kkyR;xfo-b;1Ml6D~*58#? zaA`O+%#a4;W*^4`FTu=5S?p`<0A@^%GV$mcYmD3%8{PLUSq#)63yiBNW7`6_&9t$w zaD1jEVV%>b@9*g!0|%T$r;O_*j0+1+Ki)fKyJo(3tx=SQ5k^?wg-1ny#}o!G%47h_ zinEJ2O-dTr!@bTG##6gMtH)wGE{!!>m}6LS`tPrZE3L=Xi*gqW&o z@?guB>m*j_==GsNTUTmn{%G|zElLMP|2jNCtpWDd1|u~m)QnJ=mGuJ&3Ee@KH|5v# z>%@iDR`y|I5IYtqUO!+>iVN$Ot$dPZ-RsIlDAIb#a|pcd zT%2rW9fJ9p>fo0$J#5VMkFfuYLl^{uCP8q%iw{(fCD+LHCeJr+I-5%{*@nxZ&$jD8 z5HQ1c!+}Cjj`L*0pxmxC#PA=N)Y23YlL>~{BoH|@qo$jdi9;@*y6L2%G}agH8F@xl zV4Am7H$6TztIxn`;ARuz^Qxm`N-d}xNj|lyX?^381mPt`0*SdC4b2`mS#tOr$GaqDDsZ`G#%Mdn1ae zaO=6V%#3yNK9~jn5*#Fyfp>DMk!nS==PvVKCIIETpvQrs4CvDzVDY*me{DSyC1L*Y zp1niAlp*vpmPhm*w4-M@Y1jaS+c@@lV`Y={wyCkNMX z=M>ggse>MagUIZmr{*C@EtaD2Mt9DyKzc#a;ZWg*%hFN>Y^#$A(4c2KeV+(sWar(gyhNJEUGs% zZ6;{95KMWJ*NpcKA`z{bl3xjo*HpurR|wqaM8IGOBUWZf3Eg7EQW|caswS0_W6MpN zI8}%=Qu4dY|4VW`|hlrA{6-+Uh6Ac>9zNx zkKg}z$N&9gsQuc;k)RPOdc(AhVZ*LCit8YKt`_9l#Il8Kc z_Z7LeuCX-@i86>?1ZnCAb;ML7@0ph90+U8jMxwR!rpRa_DFl#WhJS{1uJXe0lIlR= z!8?piAOo7kcE=}Bcg~05HiTD2G^0P|9Q@NczJl_U_k00%1Yz~W8QLu&AsDpK1(9Ae=gk9&yEsCMHQI3HYUajNU&E2_b?SYg`nxY|9qF zJxpx+9yY16s>ZfS3mu}tM((Nm{;N2)e1&U}8Nhw+-&uV$*Rss5xvZVO!0~}nDARuM zXKQQoz|d?fZ;yNFzM)A)2KAcZ>szPMe z^L!hzG7)#|A%Fze^^;1voZtHoxBP>cLyR!Tj}!_t5hH;;u4D6pk!M9e7pTu16Blk71RHo9Zdr>%FXxE2jVB?f@F*7iB^$bLUL~ZdzC3s z*<>oFD4*@D=)=G(+ty`uMAKCB)ICi;=$Sj|S8w)Cl?h|zeLXR!$-R=fAene@2Aj1X zoO=J&&Qxh8Dy^r4MN1kOA=K3Yi1laTAqSS0vu67PMzR2vdPpgm)K7lzx2=3yQ|W-S z<>^g(e8i8`;jdwPyf#8Gp*f+Mnq`@c*liMme4Hl428BrYHr+y*(r+%U3)MSAx({n} z!|WPiI!>_AWUpVT_TQ6dB>%GHYeQX9p!`Vy77jLZi4&Z`8Jh(o0Dm`yU-o?|rOJ!S zo#Dm>kL&U~nQYbiJ%erR;Md@5v=_xc;yhm$yk8nGj^n-NF{AvG(cRu*=FWVV2&fW|>1+bQHv8H5ELT6neIVq~sck{v_p5kMfo?-OL z3;%R3?a!yq>B$SGCEuOf=;AJ(K?N^D0uXM?9IP)n5+sc`q)WwJ2JVNxd`<6iV%(`1 zF>n~Y_LG>7(S|SU9z;zQtoohPe(k5x)E*%wNHo~={N{hTcKKLMNv&mz> zKHFNtL4hP~0h4LD8>*_Kp_4Is=uKj0{h;=}`Lc{tA0NQGx^Sxqa&dw6(AHYy1wFKG ziK&jj87zT!xn;7)2`UzP%e=K={z=VjA{;tC#mP#DZWi^3Hxz#9 z*F~kXJdx6teO;^@(wW^3%a2Q@JWV4I+0vJDd&;&wyr&pCh{&C*Yd5EfI-;oIgZwdt z5o45>v6udieMp>BAV8$N#t`6qnD)F>jxnRrH&l)uXQN+P!NkT}Aw22&?!$hf&c zJpK4Ao+F$$V0z?d<&SpAH~6b5{Q&{Xd_jBTI9jUD?tan0EkCij5oFDANkncW(#E^j zfg>9llpASk9!4K@P*Rl+pIk8qHmCTDI=jd1buJbCL-oJtpTn>t`NX$V*z8>U1k$&) zwe90QAMBJA_M@GA(qrfsFZB)*WGVBG*0VR7p#nk!i=l7rA{&Onn z{_=UMOz!&r^Sk%>I}z>Od$9KKEfM~RPowSKu{ZLpKmIT@t2*7ETr5{M8l` zEsf%5WrHm|B#GSis~x+Ce)*0>$z#+)q5_O3KX#xqL4k!id97@NQ&{cn9sHP7m^!8a zfFq0enefJ3!hYUriV`gwnqg6*J9eBn`#j2qu=nO(mZpNL+?h6@C3i&d3-4W>|D56_ zfnTHvUwqh^okWVFoog(oUuJ5Yr8kP{s(m$mvvcJ$6GZKUNOU7DUIdL%;tU%@wNNS> z*oS~*(V4oXyyW3UlngJm{hjZ&Z75ErgtQPj9GdstG!3sV-;-E7wZJ4;qFXWz%QNtA z8gpK&&nclh?6vS3T2h9Kx7yl*0fFd6P>+@dUgz!sNG)} zasjHQtq3eeloR)@sR@l6C0P_k!YP=&YJoxk^Iy!xB161fp@-rR#q92GYR!bbb+mI& zB1u;t9YI19TZ#SCWC%NENysa*nqQT#Bo!T%0b9K7YaTa5mVR~3zVs2%%Yu*L$za_J zGUQT2Kj|5wDU4TWXtI;xVZIPGO|s|I-*sUL2AQ@|X}BW}H&kRZHF7NHUpSh07tEnL zN^EW95Z4~MgnE=otA~i-3VDrFehh2SUl4Jqa;rqiGH2q; zz8BWmoI$)h=d81YXtgZ+Bx5_<70$qUr`Z;oxjiuz_dZd<__J#5`LUl%<_g zfNey(P+Mo@>?)$!A`!L9H_r)hj*FR$&r3)%BdFyU1kE_Zy`d&p-XKGC+_NEME2r_DV15+`&^~5%DJ>6 zL0>NLGBn5AHhDQJ(Ap>v7-V$P+Pdc`IDUb!2ZhT_PoT)>z?^C6D`m*ITbCOVzDCVS zHUnC!tP#bo6ej5)h!!kB4`n|gK52L{@(S@L*tU=lXB5{2zy+hQEUP-y+?cBN26Ip_ z+h=ptetb1@%W}zTAR!q#P+->&iNWQBVV8+>+N(z^q~%AS32ADR^JL^=GgAE{YOEIv zf-3Zo#y#_x88Q#+90LF71LzuebOu(=Qv+353fDjF+_=OboN{{M!2&jovr6^&@kjD& zMMyXAHr4Qc$f7cRy>powMWAD&K6$B4pszG3N<>8oqCx?3&KABIxkumh{6>OL5~`3S zWIyG#B5P5MLBisdIqj`AeG?S)#95gxOwAE6X%DJrZ2(#FqNaDT1ecls(r_b@siBF< zg53P5wyp9T<;iJ;fm9)M8gCi|~J?`7gMdVLWr+B0)E9CBuZzsBV(OE&S<@d{5je zv$pd3R|D2_dksp2O9WEttfu)*1mYBi6gYEWH8Ez6$W*isRNB;CAT`nnf#ZRo=D*TI z=Zhx`{Paw@Axmn;FbGqK#qlRoIJmk*Qm*QJq8?(1SXhxpcwz;QA4NIlZgfToSX7oa?r2Z(wTnyx)FfTlw4Ot8yj5qL@IP@aHXZ41`hIfZCaE%mFe#Ct&}H1Y9`>osG$R)gSnn)wAq!+at*1R z4e?Uw0M4Y+^EYq5`9>Sqwcq5!m+$eJ5e=6(<{wKz5_M^aICwDb(^m9iVcQaI<&z$d$R9Y0P=&pF3d{#zvFNz7E2*a)&;gnPJ zhNF1H&WmH)?Y(gW_-%2F-Dp&F-_*FauEE!s*qSX{nFNHGhY`6tNL9ge5`8n9-9OM) z;;a05h5SL9M-?3u>D14S@~N!lqAEO)e5?P9FGP{EVzO3kCqh2CuTq?f&7#^{e8|Cr zGzpmrC8Kc@xUiiff)QTbjQtU9k6aCdvsp7z@<%A%S!5s-B^T&$e5=TiwSu$(q%uII zIRb`=0z*^_yKhYxEGEbC?H3M6f^zDC=Hf);#!2<;G#5(9hj|)P1x1^|C)XpDc)xEF zK-uyJ&trTHDP(*G*>!nd7>PyKsHtgL09Iv70A!aJbWUBTCzOct$)*+9j+?o$O=CjJ zk%qF1niLPiVLE%(W*An-JZ{X$wL3?pHS2JyR`lY1)#f_$xO<%<7LAKy+k#oMW}vN1 zDV!s!rlh`k9cG6>DK?vfkGd1XHw3)=Kz38cWA7lh82K^~V&zPC_JFt2*)QJyr~-Vb z&JzHS%ZJgV;Wa{sv^b!go_0@Qz5lgLa_UC$-}L78fhDyeL?ZjrBuaxFy2XjqW^hz6 zGWgkr($yM7-BnVSB^1_=u7~+z=8Ls6qeef#)jcv>UEWu8vNBV9fJ3g={x`ZjVJ_fG znZZxDy|(>t-hTTh+v-VphT4I~K)ljYvOuIGQ_8p6QsM~?5{R}E&eml^)IIGorGO#g z80bQI);#)+lCOM^%eF0xRXRaoHUr;;>|-a5oweB0pI1)jmDgW=3)9ve)f%KeOk_q# zv~!(POKrL3UJrsDI*2f!_(KtI0I7BP7kBLbRcau%WC0YzyAFXJ7!9-=jCB>xOH_!s z)pe6^dl?B=m#uY*K|sVBs#S0n&jDpc5Dr=X!m3EEHb6P>erH7(78~`T_P4(KqnBT3 z^VpF0CkZqd)0?3@unbylVJrzK#6#gk1TNTiZ(phdP;+d`D~JKT%*UpG9bX0kDkNrL zBWV^DVZqYj$qXx1NLWaww=YDUVLs_LHLj6h+wW76cc47U8Gm#H_^HL4JKx>AXK2qq ze6(pJfuTkIOd2hrAS_6y)>=pWV-B(-OnT0yEXZ6LeKH!$A_;im#b!~3xr z9LymK9K0rWLEaz|-~*INa$RLe(1_}5RRp_tqKuSxz&I`nO22hx+1fnCLQ)e9HK2eT zH$Z5%Ps10Of~9TL8O6;#)AzaCQI5KlYw%E}6~C7m+1_k&>_Cy2eeunhu^D6>XpCNv zm(Y}%Z>VYA#WO}GpY&2l^>AG#}# z)C00`)>1Srlpzk7ju1zsNyWm-{QM8BHN}Ay#zl45+z~o>&e^-@YbIb$iO!95p%ZWk z5lwQYHR8rM5gE%oW6+`&`Mbn)QxAlf>iC4Huy%G5A=RiNsg!8#m0@)7MAo`+ToaAN z-y#YG;@4bfp;A^N3uO{p#K@Bto>LqOJ{Z$C)_MWPs`b!lzQ}_@y*(Z!@I9oY^vS0j zHNon&6lYp&SDM+w50{nwOH>GxV!{#uLqx0&k9H2-w!=Z>mK^Z&7aJ2tHRhv`2gZ?_~xXTlzClSth_FZ1@8ZVz0f#fbM?PA!fVI=Qu{ zpp2Ek2-_<_B;qtN(DcVn8x)=;z5vzuSmx#}nrQ|77LJy)@4>#*+JYRBa@&XaIHJwN z@rjW?MX;115OKqsV8givO#BO0E7F|T4!ie76IgmqEYD^-y5T6Zg}bpoVZ(4#xrIYv zXjr-Vt~3+$7bBaW!d;$-iZtzv!L(-L3z?%Cxw-B9Er(41M|q*MlY} z=-{J(Wu^uOv?xj#VUI3)ZR+M7dAe6A9{K!*bxZ#Pu0^gc&!+^Jrpr2TskT=759LNe zqb;WRtUar+5=2{?2pP8|np=fgx4fvj+t^xP4{nr01iyLzbmo8K_xoh~J87}Op(Qox z&$B_M6vVMN7t$6VRU1`KGAPxEL7BqJ&W z4~6=mlhrU3ct84uKRM9|feO{I(NQNmL))8C{GvA0X<_u1oLceqi{_jneYgLDe&)z# zBu8b%KOU-4-?sLkX-~h>@Ch>=Fh>L&2l2Y&^#|MlQIC9&{XGggMhz9LgBGrj!3Kz7 z%!;%%(|)0$RWXTwONy`@h^A};^T{;d9XC?eKj32Hm^&ac#Y;t~HB8@6H`6Ee_(RV0 xpLhPRHr5LpJX(Y_L00fQ0_v8&NVEJo$6x2U`)FkC)^T4bSnttD{Y=4z{}01Xt0({f diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 3f8bd34d5..c86fcef7a 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-12-30 23:52+0000\n" -"PO-Revision-Date: 2024-01-02 03:12\n" +"POT-Creation-Date: 2024-01-02 03:27+0000\n" +"PO-Revision-Date: 2024-03-17 12:38\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -54,19 +54,19 @@ msgstr "äø¤ę¬”č¾“å…„ēš„åƆē äøäø€č‡“" msgid "Incorrect Password" msgstr "åƆē é”™čÆÆ" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "čÆ»å®Œę—„ęœŸäøå¾—ę—©äŗŽå¼€å§‹ę—„ꜟ怂" -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "阅čÆ»å®Œęˆę—„ęœŸäøčƒ½ę—©äŗŽå¼€å§‹ę—„ꜟ怂" -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "阅čÆ»åœę­¢ēš„ę—„ꜟäøčƒ½ę˜Æå°†ę„ēš„ę—„ꜟ" -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "čÆ»å®Œę—„ęœŸäøčƒ½ę˜ÆęœŖę„ę—„ęœŸ" @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "č‡ŖåŠØē”Ÿęˆēš„äø¾ęŠ„" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "待处ē†" @@ -258,17 +259,24 @@ msgstr "关ę³Ø者" msgid "Private" msgstr "ē§åƆ" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "ꓻ跃" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "å·²å®Œęˆ" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "å·²åœę­¢" @@ -284,6 +292,10 @@ msgstr "åŠ č½½ä¹¦ē±ę—¶å‡ŗ错" msgid "Could not find a match for book" msgstr "ę‰¾äøåˆ°åŒ¹é…ēš„书" +#: bookwyrm/models/job.py:22 +msgid "Failed" +msgstr "" + #: bookwyrm/models/link.py:51 msgid "Free" msgstr "å…č“¹" @@ -309,11 +321,11 @@ msgstr "čƄč®ŗ" #: bookwyrm/models/report.py:85 msgid "Resolved report" -msgstr "" +msgstr "å·²č§£å†³ēš„ꊄ告" #: bookwyrm/models/report.py:86 msgid "Re-opened report" -msgstr "" +msgstr "é‡ę–°ę‰“å¼€ęŠ„å‘Š" #: bookwyrm/models/report.py:87 msgid "Messaged reporter" @@ -325,31 +337,31 @@ msgstr "" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "停ē”Øē”Øꈷ" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" -msgstr "" +msgstr "å–ę¶ˆåœē”Øē”Øꈷ" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "ę›“ę”¹ē”Øęˆ·ęƒé™ēŗ§åˆ«" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "已删除ē”Øꈷ蓦ꈷ" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "å·²å±č”½ēš„域名" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "å·²ę‰¹å‡†ēš„域名" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "已删除ēš„锹ē›®" #: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -359,7 +371,7 @@ msgstr "书čƄ" msgid "Comments" msgstr "čƄč®ŗ" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "引ē”Ø" @@ -401,7 +413,7 @@ msgstr "Deutschļ¼ˆå¾·čÆ­ļ¼‰" #: bookwyrm/settings.py:316 msgid "Esperanto (Esperanto)" -msgstr "" +msgstr "Esperanto (äø–ē•ŒčÆ­)" #: bookwyrm/settings.py:317 msgid "EspaƱol (Spanish)" @@ -409,7 +421,7 @@ msgstr "EspaƱolļ¼ˆč„æē­ē‰™čÆ­ļ¼‰" #: bookwyrm/settings.py:318 msgid "Euskara (Basque)" -msgstr "" +msgstr "Euskara (å·“ę–Æ克čÆ­)" #: bookwyrm/settings.py:319 msgid "Galego (Galician)" @@ -433,7 +445,7 @@ msgstr "Lietuviųļ¼ˆē«‹é™¶å®›čÆ­ļ¼‰" #: bookwyrm/settings.py:324 msgid "Nederlands (Dutch)" -msgstr "" +msgstr "Nederlands (č·å…°čÆ­)" #: bookwyrm/settings.py:325 msgid "Norsk (Norwegian)" @@ -461,7 +473,7 @@ msgstr "Svenskaļ¼ˆē‘žå…øčÆ­ļ¼‰" #: bookwyrm/settings.py:331 msgid "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (Ukrainian)" -msgstr "" +msgstr "Š£ŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ° (乌克兰čÆ­)" #: bookwyrm/settings.py:332 msgid "ē®€ä½“äø­ę–‡ (Simplified Chinese)" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡ļ¼ˆē¹ä½“äø­ę–‡ļ¼‰" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "哦äøļ¼" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -482,11 +494,11 @@ msgstr "ę²”ęœ‰ęƒé™" #: bookwyrm/templates/403.html:11 #, python-format msgid "You do not have permission to view this page or perform this action. Your user permission level is %(level)s." -msgstr "" +msgstr "ę‚Øę— ęƒęŸ„ēœ‹ę­¤é”µé¢ęˆ–ę‰§č”Œę­¤ę“ä½œć€‚ę‚Øēš„åøęˆ·ęƒé™ēŗ§åˆ«ę˜Æ %(level)s怂" #: bookwyrm/templates/403.html:15 msgid "If you think you should have access, please speak to your BookWyrm server administrator." -msgstr "" +msgstr "č‹„ę‚Ø认äøŗę‚Øåŗ”ęœ‰ęƒé™ļ¼ŒčÆ·č”ē³»ę‚Øēš„ BookWyrm ęœåŠ”å™Øē®”ē†å‘˜ć€‚" #: bookwyrm/templates/404.html:4 bookwyrm/templates/404.html:8 msgid "Not Found" @@ -498,17 +510,18 @@ msgstr "ä½ čÆ·ę±‚ēš„锵面似乎并äøå­˜åœØļ¼" #: bookwyrm/templates/413.html:4 bookwyrm/templates/413.html:8 msgid "File too large" -msgstr "" +msgstr "ꖇ件å¤Ŗ大" #: bookwyrm/templates/413.html:9 msgid "The file you are uploading is too large." -msgstr "" +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 "" +msgstr "\n" +"ę‚ØåÆ仄尝čƕä½æē”Øę›“å°ēš„ꖇ件ļ¼Œęˆ–čƢ问 BookWyrm ęœåŠ”å™Øē®”ē†å‘˜å¢žåŠ  DATA_UPLOAD_MAX_MEMORY_SIZE ēš„å€¼ć€‚ " #: bookwyrm/templates/500.html:4 msgid "Oops!" @@ -960,6 +973,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" @@ -977,6 +991,7 @@ msgstr "åŠ č½½ę•°ę®ä¼ščæžęŽ„到 %(source_name)s å¹¶ę£€ęŸ„čæ™ #: 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 "ē”®č®¤" @@ -1100,11 +1115,11 @@ msgstr "ISBN:" #: bookwyrm/templates/book/book_identifiers.html:12 #: bookwyrm/templates/book/book_identifiers.html:13 msgid "Copy ISBN" -msgstr "" +msgstr "复制 ISBN" #: bookwyrm/templates/book/book_identifiers.html:16 msgid "Copied ISBN!" -msgstr "" +msgstr "已复制 ISBNļ¼" #: bookwyrm/templates/book/book_identifiers.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:352 @@ -1142,7 +1157,7 @@ msgstr "äøŠä¼ å°é¢:" #: bookwyrm/templates/book/cover_add_modal.html:23 #: bookwyrm/templates/book/edit/edit_book_form.html:250 msgid "Load cover from URL:" -msgstr "" +msgstr "从 URL åŠ č½½å°é¢ļ¼š" #: bookwyrm/templates/book/cover_show_modal.html:6 msgid "Book cover preview" @@ -1171,7 +1186,7 @@ msgstr "ę·»åŠ ä¹¦ē›®" #: bookwyrm/templates/book/edit/edit_book.html:43 msgid "Failed to save book, see errors below for more information." -msgstr "" +msgstr "书äæå­˜å¤±č“„ļ¼ŒčÆ·ęŸ„ēœ‹äø‹é¢ēš„é”™čÆÆä»„čŽ·å–ę›“å¤šäæ”ęÆ怂" #: bookwyrm/templates/book/edit/edit_book.html:70 msgid "Confirm Book Info" @@ -1474,9 +1489,12 @@ 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 @@ -1488,7 +1506,8 @@ 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:108 msgid "Actions" @@ -2084,7 +2103,7 @@ msgstr "ęŽØ荐ēš„书ē›®" #: bookwyrm/templates/get_started/books.html:33 msgid "Search results" -msgstr "" +msgstr "ꐜē“¢ē»“ęžœ" #: bookwyrm/templates/get_started/books.html:46 #, python-format @@ -2166,7 +2185,7 @@ msgstr "ä½ ēš„åøå·ä¼šę˜¾ē¤ŗåœØē›®å½•äø­ļ¼Œå¹¶äø”åÆčƒ½ä¼šå—å…¶å®ƒ BookWyrm #: bookwyrm/templates/get_started/users.html:8 msgid "You can follow users on other BookWyrm instances and federated services like Mastodon." -msgstr "" +msgstr "ę‚ØåÆ仄关ę³Ø其他BookWyrmå®žä¾‹å’Œč”é‚¦ęœåŠ”ēš„ē”Øꈷļ¼Œå¦‚Mastodon怂" #: bookwyrm/templates/get_started/users.html:11 msgid "Search for a user" @@ -2290,7 +2309,7 @@ msgstr "ē®”ē†å‘˜" #: bookwyrm/templates/groups/user_groups.html:35 msgid "No groups found." -msgstr "" +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!" @@ -2529,7 +2548,7 @@ msgstr "ꐜē“¢ę”†" #: bookwyrm/templates/guided_tour/home.html:79 msgid "Search book records by scanning an ISBN barcode using your device's camera - great when you're in the bookstore or library!" -msgstr "" +msgstr "ä½æē”Øę‚Øč®¾å¤‡ēš„ē›øęœŗę‰«ęäø€äøŖ ISBN ę”å½¢ē ę„ꐜē“¢ä¹¦ē±č®°å½• ā€”ā€” 当ę‚ØåœØ书åŗ—ęˆ–å›¾ä¹¦é¦†ę—¶ä¼šę„Ÿč§‰å¾ˆę£’ļ¼" #: bookwyrm/templates/guided_tour/home.html:80 msgid "Barcode reader" @@ -2545,7 +2564,7 @@ msgstr "åƼčˆŖꠏ" #: bookwyrm/templates/guided_tour/home.html:126 msgid "Books on your reading status shelves will be shown here." -msgstr "" +msgstr "ę‚Øēš„阅čÆ»ēŠ¶ę€ä¼šę˜¾ē¤ŗåœØčæ™é‡Œēš„ä¹¦ęž¶äøŠć€‚" #: bookwyrm/templates/guided_tour/home.html:151 msgid "Updates from people you are following will appear in your Home timeline.

    The Books tab shows activity from anyone, related to your books." @@ -2557,7 +2576,7 @@ msgstr "ꗶ闓ēŗæ" #: bookwyrm/templates/guided_tour/home.html:176 msgid "The bell will light up when you have a new notification. When it does, click on it to find out what exciting thing has happened!" -msgstr "" +msgstr "å½“ęœ‰ę–°é€šēŸ„ę—¶ļ¼Œé“ƒä¼šäŗ®čµ·ć€‚当它发ē”Ÿę—¶ļ¼Œē‚¹å‡»å®ƒę„ę‰¾å‡ŗ发ē”Ÿäŗ†ä»€ä¹ˆä»¤äŗŗå…“å„‹ēš„äŗ‹ęƒ…ļ¼" #: bookwyrm/templates/guided_tour/home.html:177 #: bookwyrm/templates/layout.html:77 bookwyrm/templates/layout.html:107 @@ -2671,7 +2690,7 @@ msgstr "ꉋåŠØę·»åŠ č®°å½•" #: bookwyrm/templates/guided_tour/search.html:147 msgid "Import, manually add, or view an existing book to continue the tour." -msgstr "" +msgstr "åƼ兄ļ¼Œę‰‹åŠØę·»åŠ ęˆ–ęŸ„ēœ‹ēŽ°ęœ‰ä¹¦ęœ¬ä»„ē»§ē»­ęøø览怂" #: bookwyrm/templates/guided_tour/search.html:148 msgid "Continue the tour" @@ -2696,19 +2715,19 @@ msgstr "" #: bookwyrm/templates/guided_tour/user_books.html:55 msgid "You can create additional custom shelves to organise your books. A book on a custom shelf can be on any number of other shelves simultaneously, including one of the default reading status shelves" -msgstr "" +msgstr "ę‚ØåÆ仄创å»ŗ额外ēš„č‡Ŗå®šä¹‰ä¹¦ęž¶ę„ē»„ē»‡ę‚Øēš„书ē±ć€‚åœØč‡Ŗå®šä¹‰ä¹¦ęž¶äøŠēš„书åÆä»„åŒę—¶ę”¾åœØå…¶ä»–ä»»ę„ä¹¦ęž¶äøŠļ¼ŒåŒ…ę‹¬å…¶äø­äø€äøŖ默认ēŠ¶ę€ēš„ä¹¦ęž¶äøŠć€‚" #: bookwyrm/templates/guided_tour/user_books.html:56 msgid "Adding custom shelves." -msgstr "" +msgstr "创å»ŗč‡Ŗå®šä¹‰ä¹¦ęž¶" #: bookwyrm/templates/guided_tour/user_books.html:78 msgid "If you have an export file from another service like Goodreads or LibraryThing, you can import it here." -msgstr "" +msgstr "å¦‚ęžœę‚Øä»Žå…¶ä»–ęœåŠ”åƼå‡ŗå­˜ę”£ę–‡ä»¶ļ¼Œä¾‹å¦‚ Goodreads ꈖ LibraryThingļ¼Œę‚ØåÆ仄åœØčæ™é‡ŒåÆ¼å…„ć€‚" #: bookwyrm/templates/guided_tour/user_books.html:79 msgid "Import from another service" -msgstr "" +msgstr "ä»Žå…¶ä»–ęœåŠ”åƼ兄" #: bookwyrm/templates/guided_tour/user_books.html:101 msgid "Now that we've explored book shelves, let's take a look at a related concept: book lists!" @@ -2766,7 +2785,7 @@ msgstr "" #: bookwyrm/templates/guided_tour/user_profile.html:10 msgid "This is your user profile. All your latest activities will be listed here. Other Bookwyrm users can see parts of this page too - what they can see depends on your privacy settings." -msgstr "" +msgstr "čæ™ę˜Æę‚Øēš„ē”Øęˆ·čµ„ę–™ć€‚ę‚Øēš„ę‰€ęœ‰ęœ€ę–°ę“»åŠØéƒ½ä¼šč¢«åˆ—åœØčæ™é‡Œć€‚其他 Bookwyrm 实例ē”Øęˆ·ä¹ŸåÆ仄ēœ‹åˆ°ę­¤é”µé¢ēš„éƒØ分内容 ā€”ā€” ä»–ä»¬čƒ½ēœ‹åˆ°ä»€ä¹ˆå–决äŗŽę‚Øēš„隐ē§č®¾ē½®ć€‚" #: bookwyrm/templates/guided_tour/user_profile.html:11 #: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14 @@ -2813,113 +2832,123 @@ msgstr "" #: bookwyrm/templates/hashtag.html:25 msgid "No activities for this hashtag yet!" -msgstr "" +msgstr "ꭤꠇē­¾å°šę— ę“»åŠØļ¼" #: bookwyrm/templates/import/import.html:5 -#: bookwyrm/templates/import/import.html:9 -#: bookwyrm/templates/shelf/shelf.html:66 -msgid "Import Books" -msgstr "åƼ兄书ē›®" +#: 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 "" +msgstr "ꗠꕈēš„ CSV ꖇ件" -#: 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] "" -#: 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 "" +msgstr "Goodreads (CSV)" -#: bookwyrm/templates/import/import.html:62 +#: bookwyrm/templates/import/import.html:61 msgid "Storygraph (CSV)" -msgstr "" +msgstr "Storygraph (CSV)" -#: bookwyrm/templates/import/import.html:65 +#: bookwyrm/templates/import/import.html:64 msgid "LibraryThing (TSV)" -msgstr "" +msgstr "LibraryThing (TSV)" -#: bookwyrm/templates/import/import.html:68 +#: bookwyrm/templates/import/import.html:67 msgid "OpenLibrary (CSV)" -msgstr "" +msgstr "OpenLibrary (CSV)" -#: bookwyrm/templates/import/import.html:71 +#: bookwyrm/templates/import/import.html:70 msgid "Calibre (CSV)" -msgstr "" +msgstr "Calibre (CSV)" -#: 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 "" +msgstr "ę‚ØåÆ仄从ę‚Øēš„Goodreadsåøęˆ·ēš„ åƼ兄/åƼå‡ŗ锵面 äø‹č½½ę‚Øēš„Goodreadsę•°ę®ć€‚" -#: 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 "" +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 "" +msgstr "创å»ŗę—„ęœŸ" -#: bookwyrm/templates/import/import.html:133 +#: bookwyrm/templates/import/import.html:132 +#: bookwyrm/templates/import/import_user.html:174 msgid "Last Updated" -msgstr "" +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 "ꗠ꜀čæ‘ēš„åƼ兄" @@ -2955,9 +2984,10 @@ 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 "" +msgstr "åœę­¢åƼ兄" #: bookwyrm/templates/import/import_status.html:78 #, python-format @@ -3051,6 +3081,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 åøęˆ·" + +#: 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 "ę­„éŖ¤1:" + +#: 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 "ę­„éŖ¤2:" + +#: 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" @@ -3071,7 +3228,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 "å¤±č“„é”¹ē›®" @@ -3239,7 +3396,7 @@ msgstr "åƆē " #: bookwyrm/templates/layout.html:136 msgid "Show/Hide password" -msgstr "" +msgstr "ę˜¾ē¤ŗ/隐藏åƆē " #: bookwyrm/templates/layout.html:150 msgid "Join" @@ -3520,7 +3677,7 @@ msgstr "" #: bookwyrm/templates/moved.html:42 msgid "Undo move" -msgstr "" +msgstr "꒤销ē§»åŠØ" #: bookwyrm/templates/moved.html:46 bookwyrm/templates/user_menu.html:77 msgid "Log out" @@ -3846,6 +4003,16 @@ msgstr "ę›“ę”¹äŗ† %(group_name)s ēš„名ē§°" msgid "has changed the description of %(group_name)s" msgstr "ę›“ę”¹äŗ† %(group_name)s ēš„ꏏčæ°" +#: 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 "删除通ēŸ„" @@ -3980,7 +4147,7 @@ msgstr "ę‚Øę­£åœØ关ę³Ø %(display_name)sļ¼" #: bookwyrm/templates/preferences/2fa.html:7 #: bookwyrm/templates/preferences/layout.html:24 msgid "Two Factor Authentication" -msgstr "" +msgstr "双重éŖŒčƁ" #: bookwyrm/templates/preferences/2fa.html:16 msgid "Successfully updated 2FA settings" @@ -4010,11 +4177,11 @@ msgstr "" #: bookwyrm/templates/preferences/2fa.html:40 msgid "Generate backup codes" -msgstr "" +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 "" +msgstr "ä½æē”Øčŗ«ä»½éŖŒčƁåŗ”ē”Øę‰«ęäŗŒē»“ē ļ¼Œē„¶åŽč¾“å…„代ē ä»„ē”®äæę‚Øå·²č®¾ē½®ć€‚" #: bookwyrm/templates/preferences/2fa.html:52 msgid "Use setup key" @@ -4050,24 +4217,24 @@ msgstr "č®¾ē½®åŒé‡čŗ«ä»½éŖŒčƁ" #: bookwyrm/templates/preferences/move_user.html:7 #: bookwyrm/templates/preferences/move_user.html:39 msgid "Move Account" -msgstr "" +msgstr "ē§»åŠØåøęˆ·" #: bookwyrm/templates/preferences/alias_user.html:7 #: bookwyrm/templates/preferences/alias_user.html:34 msgid "Create Alias" -msgstr "" +msgstr "创å»ŗ别名" #: bookwyrm/templates/preferences/alias_user.html:12 msgid "Add another account as an alias" -msgstr "" +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 "" +msgstr "å¦‚ęžœę‚Øęƒ³č¦å°†å¦äø€äøŖåøęˆ·ē§»åŠØåˆ°ę­¤åøęˆ·ļ¼Œåˆ™éœ€č¦å°†å…¶ę ‡č®°äøŗåˆ«åć€‚" #: bookwyrm/templates/preferences/alias_user.html:19 msgid "This is a reversable action and will not change the functionality of this account." -msgstr "" +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 :" @@ -4076,20 +4243,20 @@ msgstr "" #: bookwyrm/templates/preferences/alias_user.html:30 #: bookwyrm/templates/preferences/move_user.html:35 msgid "Confirm your password:" -msgstr "" +msgstr "ē”®č®¤åƆē " #: bookwyrm/templates/preferences/alias_user.html:39 #: bookwyrm/templates/preferences/layout.html:28 msgid "Aliases" -msgstr "" +msgstr "别名" #: bookwyrm/templates/preferences/alias_user.html:49 msgid "Remove alias" -msgstr "" +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 "å±č”½ēš„ē”Øꈷ" @@ -4222,16 +4389,68 @@ 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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " msgstr "" +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "åœØę‚Øꖰēš„ BookWyrm åøęˆ·äø­åÆ仄选ꋩåƼ兄什么ļ¼šę‚Øꗠ需åÆ¼å…„ę‰€ęœ‰åƼå‡ŗēš„å†…å®¹ć€‚" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "꜀čæ‘åƼå‡ŗ" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "ę—„ęœŸ" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "大小" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "äø‹č½½ę‚ØåƼå‡ŗēš„ꖇ件" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" -msgstr "CSVåƼå‡ŗ" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" +msgstr "åƼå‡ŗ书单" #: 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 "ä½ ēš„åƼå‡ŗå°†åŒ…ę‹¬ä½ ä¹¦ęž¶äøŠēš„ę‰€ęœ‰ä¹¦ē±ļ¼Œä½ čƄč®ŗčæ‡ēš„书ē±ļ¼Œä»„åŠęœ‰é˜…čÆ»ę“»åŠØēš„书ē±ć€‚" +msgid "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." +msgstr "" #: bookwyrm/templates/preferences/export.html:20 msgid "Download file" @@ -4243,27 +4462,23 @@ msgstr "åøå·" #: bookwyrm/templates/preferences/layout.html:32 msgid "Move Account" -msgstr "" +msgstr "ē§»åŠØåøęˆ·" #: bookwyrm/templates/preferences/layout.html:39 msgid "Data" msgstr "ę•°ę®" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "CSV åƼå‡ŗ" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "关ē³»" #: bookwyrm/templates/preferences/move_user.html:12 msgid "Migrate account to another server" -msgstr "" +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 "" +msgstr "ē§»åŠØę‚Øēš„åøęˆ·å°†ä¼šé€šēŸ„ę‚Øꉀ꜉ēš„å…³ę³Øč€…å¹¶ęŒ‡ē¤ŗ他们关ę³Øꖰåøęˆ·ć€‚" #: bookwyrm/templates/preferences/move_user.html:19 #, python-format @@ -4474,7 +4689,7 @@ msgstr "ę²”ęœ‰ę‰¾åˆ° ā€œ%(query)sā€ ēš„ęœē“¢ē»“ęžœ" #, python-format msgid "%(result_count)s result found" msgid_plural "%(result_count)s results found" -msgstr[0] "" +msgstr[0] "ę‰¾åˆ° %(result_count)s ę”ęœē“¢ē»“ęžœ" #: bookwyrm/templates/settings/announcements/announcement.html:5 #: bookwyrm/templates/settings/announcements/announcement.html:8 @@ -4687,11 +4902,11 @@ msgstr "" #: bookwyrm/templates/settings/celery.html:32 msgid "Broadcast" -msgstr "" +msgstr "å¹æ꒭" #: bookwyrm/templates/settings/celery.html:38 msgid "Inbox" -msgstr "" +msgstr "ꔶ件ē®±" #: bookwyrm/templates/settings/celery.html:51 msgid "Import triggered" @@ -4741,7 +4956,8 @@ msgid "Active Tasks" msgstr "当前任劔" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "ID" @@ -5131,9 +5347,14 @@ 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 "" @@ -5146,68 +5367,105 @@ msgstr "" 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" +#: bookwyrm/templates/settings/imports/imports.html:32 +msgid "This setting prevents both book imports and user imports." msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:50 +#: 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:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" -msgstr "" +msgstr "åÆē”ØåÆ¼å…„åŠŸčƒ½" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "č®¾ē½®åƼ兄限制äøŗ" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "ęœ¬ä¹¦ē±ęƏ" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "å¤©ć€‚" -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:102 -msgid "Completed" -msgstr "å·²å®Œęˆ" +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" +msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:116 -msgid "User" -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 "Date Updated" -msgstr "ę—„ęœŸå·²ę›“ę–°" - -#: bookwyrm/templates/settings/imports/imports.html:132 -msgid "Pending items" +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:170 -msgid "No matching imports found." +#: bookwyrm/templates/settings/imports/imports.html:215 +msgid "User Imports" msgstr "" #: bookwyrm/templates/settings/invites/manage_invite_requests.html:4 @@ -5464,7 +5722,7 @@ msgstr "允č®øę³Ø册" #: bookwyrm/templates/settings/registration.html:43 msgid "Default access level:" -msgstr "" +msgstr "é»˜č®¤ęƒé™ē­‰ēŗ§ļ¼š" #: bookwyrm/templates/settings/registration.html:61 msgid "Require users to confirm email address" @@ -5750,7 +6008,7 @@ msgstr "删除äø»é¢˜" #: bookwyrm/templates/settings/themes.html:134 msgid "Test theme" -msgstr "" +msgstr "굋čƕäø»é¢˜" #: bookwyrm/templates/settings/themes.html:143 msgid "Broken theme" @@ -5758,7 +6016,7 @@ msgstr "" #: bookwyrm/templates/settings/themes.html:152 msgid "Loaded successfully" -msgstr "" +msgstr "åŠ č½½ęˆåŠŸ" #: bookwyrm/templates/settings/users/delete_user_form.html:5 #: bookwyrm/templates/settings/users/user_moderation_actions.html:52 @@ -5781,7 +6039,7 @@ msgstr "ē”Øꈷ: %(instance_name)s" #: bookwyrm/templates/settings/users/user_admin.html:29 msgid "Deleted users" -msgstr "" +msgstr "已删除åøęˆ·" #: bookwyrm/templates/settings/users/user_admin.html:44 #: bookwyrm/templates/settings/users/username_filter.html:5 @@ -5891,7 +6149,7 @@ msgstr "" #: bookwyrm/templates/settings/users/user_moderation_actions.html:35 msgid "Activate user" -msgstr "" +msgstr "ęæ€ę“»ē”Øꈷ" #: bookwyrm/templates/settings/users/user_moderation_actions.html:41 msgid "Suspend user" @@ -6022,17 +6280,15 @@ msgstr "创å»ŗä¹¦ęž¶" 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:66 +msgid "Import Books" +msgstr "åƼ兄书ē›®" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6178,7 +6434,7 @@ msgstr "čƄč®ŗ:" #: bookwyrm/templates/snippets/create_status/post_options_block.html:19 msgid "Update" -msgstr "" +msgstr "ꛓꖰ" #: bookwyrm/templates/snippets/create_status/post_options_block.html:21 msgid "Post" @@ -6283,7 +6539,7 @@ msgstr "åœØ GitHub." -msgstr "" +msgstr "BookWyrmēš„ęŗä»£ē ę˜Æå…č“¹åÆē”Øēš„怂ę‚ØåÆ仄åœØ GitHub äøŠč“”ēŒ®ęˆ–ęŠ„å‘Šé—®é¢˜ć€‚" #: bookwyrm/templates/snippets/form_rate_stars.html:20 #: bookwyrm/templates/snippets/stars.html:23 @@ -6443,7 +6699,7 @@ msgstr "" #: bookwyrm/templates/snippets/shelf_selector.html:53 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:21 msgid "Stopped reading" -msgstr "" +msgstr "åœę­¢é˜…čÆ»" #: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6 #, python-format @@ -6516,7 +6772,7 @@ 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 "" +msgstr "åœę­¢é˜…čÆ»" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:40 msgid "Finish reading" @@ -6685,7 +6941,7 @@ msgstr "ę˜¾ē¤ŗę›“å°‘" #: bookwyrm/templates/snippets/user_active_tag.html:5 msgid "Moved" -msgstr "" +msgstr "å·²ē§»åŠØ" #: bookwyrm/templates/snippets/user_active_tag.html:12 msgid "Deleted" diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo index e9e223f74ebeacd4c6d2ef24a7a0324cf2e268a7..f9ca27be9b891b3b13c30e68d084e0cd54184a43 100644 GIT binary patch literal 38839 zcmchg34D~*x&L4Hiu+oZssoCE5hUF_oRYHRJjnwd;md#&19+uPRv_jk_oP9^~q@9pP5A5XsLIp@4*KhJs2 zd1vs~Cm+5j;B&{JLGUT~+Q~uC?XV!2-C3bQ(5rV4Tm&zHr@?z*2bh9q!!NU*kAuD7QLwMY4>Wm*$+ww&57cwz zkYNa_;IZ(23x5b6jXWKyUl*9X(zpRC{R{AT_*Hled=*{-e+5;)6H0^NM0h$>JGwwU zR|551DO5cMLDl0{sB&+ID);kH>8qjg{Ss7vZ?^E?L$&)YsQmr~mCvz#{P>*+mA*Gr zx)@adq@l`r5UQS2;mL3|)VME)O7|7xEAVjSSK(>!b*Os13D1CkhpO+%SNU=}L8b2n z)i0MpwZ9)!zBfSCXBbqyKL?e*5~{!MhnoMB;azYJRJvw3AHD~b-}I}4;3UOE$;+YY zwc6xuQ0?0RRlmJZ<$fP3-LIgY`vX+EKSQPa8&o}x>g(%!2Glr3p!%&FRDCYB`2JA! zxXE}ARDUKceiBqUGoZ?u2Q{DTq3W|9s-Jd1)$3)b{9d*2H!S=usOSC(8S3D~Yl5H$ zycwPcCqnh_6Hw1T4b_j&L*={I^SLg|B1Q1f9TJR3d+RsLqE^bJt;`zBO>d>^X6e+;jHS*ZR!x1VQMsPw&|(v?D$ zca!l>3m*+Nf5t)0&j+FEy8x;^&p?&G87luq<2Q^yu=t-t)wkK?cc9Asz`{@Hk1j(# z3#z`CLA4_R)qfeNc{2rSzAS_)?8&J=;Kt2BsbmMM3 zae!~{1@JuLyFs;Y5Y+s-9Y)~ipvrj&D!(~U^{a>Kr?pV&cSE)FWvG68&EynkL4zBfa-_c@J#q! zsPdbQf42C)L$&+pfj+v|j{2Lw)Pr1S8a|TqsE`)l%C;TkD1}gt2q56F_RQt9-rE7#k;dh|s&DnIK>d^

    X;zjxq~@Za!Uc*G#z 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 K+Af^UV*h`HluhUW literal 38001 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\n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -36,7 +36,7 @@ msgstr "ę°øäøå¤±ę•ˆ" #: bookwyrm/forms/admin.py:49 #, python-brace-format msgid "{i} uses" -msgstr "" +msgstr "{i} ꬔä½æē”Ø" #: bookwyrm/forms/admin.py:50 msgid "Unlimited" @@ -54,19 +54,19 @@ msgstr "åƆē¢¼äøäø€č‡“" msgid "Incorrect Password" msgstr "åƆē¢¼äøę­£ē¢ŗ" -#: bookwyrm/forms/forms.py:54 +#: bookwyrm/forms/forms.py:58 msgid "Reading finish date cannot be before start date." msgstr "閱讀ēµęŸę™‚é–“äøčƒ½ę—©ę–¼é–‹å§‹ę™‚間怂" -#: bookwyrm/forms/forms.py:59 +#: bookwyrm/forms/forms.py:63 msgid "Reading stopped date cannot be before start date." msgstr "é–±č®€åœę­¢ę™‚é–“äøčƒ½ę—©ę–¼é–‹å§‹ę™‚間怂" -#: bookwyrm/forms/forms.py:67 +#: bookwyrm/forms/forms.py:71 msgid "Reading stopped date cannot be in the future." msgstr "é–±č®€åœę­¢ę™‚é–“äøčƒ½ę˜ÆåœØęœŖä¾†ć€‚" -#: bookwyrm/forms/forms.py:74 +#: bookwyrm/forms/forms.py:78 msgid "Reading finished date cannot be in the future." msgstr "閱讀ēµęŸę™‚é–“äøčƒ½ę˜ÆåœØęœŖä¾†ć€‚" @@ -92,7 +92,7 @@ msgstr "這個ē¶²åŸŸå·²ē¶“č¢«é˜»ę“‹ć€‚å¦‚ęžœä½ č¦ŗ得這ę˜Æ個éŒÆčŖ¤ļ¼Œč«‹čÆēµ” #: bookwyrm/forms/links.py:49 msgid "This link with file type has already been added for this book. If it is not visible, the domain is still pending." -msgstr "" +msgstr "包含ęŖ”ę”ˆé”žåž‹ēš„連ēµå·²ē¶“č¢«åŠ åˆ°é€™ęœ¬ę›øē•¶äø­ļ¼Œå¦‚ęžœé‚„ēœ‹äøåˆ°ļ¼ŒåÆčƒ½ę˜Æ因ē‚ŗ域名尚åœØē­‰å¾…處ē†äø­ć€‚" #: bookwyrm/forms/lists.py:26 msgid "List Order" @@ -146,7 +146,8 @@ msgid "Automatically generated report" msgstr "č‡Ŗ動ē”Ÿęˆēš„報告" #: bookwyrm/models/base_model.py:18 bookwyrm/models/import_job.py:48 -#: bookwyrm/models/link.py:72 bookwyrm/templates/import/import_status.html:214 +#: bookwyrm/models/job.py:18 bookwyrm/models/link.py:72 +#: bookwyrm/templates/import/import_status.html:214 #: bookwyrm/templates/settings/link_domains/link_domains.html:19 msgid "Pending" msgstr "å¾…č™•ē†" @@ -258,17 +259,24 @@ msgstr "關ę³Ø者" msgid "Private" msgstr "ē§åƆ" -#: bookwyrm/models/import_job.py:49 bookwyrm/templates/import/import.html:174 -#: bookwyrm/templates/settings/imports/imports.html:98 +#: bookwyrm/models/import_job.py:49 bookwyrm/models/job.py:19 +#: bookwyrm/templates/import/import.html:173 +#: bookwyrm/templates/import/import_user.html:211 +#: bookwyrm/templates/preferences/export-user.html:112 +#: bookwyrm/templates/settings/imports/imports.html:131 +#: bookwyrm/templates/settings/imports/imports.html:221 #: bookwyrm/templates/snippets/user_active_tag.html:8 msgid "Active" msgstr "ę“»čŗ" -#: bookwyrm/models/import_job.py:50 bookwyrm/templates/import/import.html:172 +#: bookwyrm/models/import_job.py:50 bookwyrm/models/job.py:20 +#: bookwyrm/templates/import/import.html:171 +#: bookwyrm/templates/import/import_user.html:209 +#: bookwyrm/templates/preferences/export-user.html:110 msgid "Complete" msgstr "å·²å®Œęˆ" -#: bookwyrm/models/import_job.py:51 +#: bookwyrm/models/import_job.py:51 bookwyrm/models/job.py:21 msgid "Stopped" msgstr "å·²åœę­¢" @@ -278,10 +286,14 @@ msgstr "åŒÆå…„å·²åœę­¢" #: bookwyrm/models/import_job.py:356 bookwyrm/models/import_job.py:381 msgid "Error loading book" -msgstr "" +msgstr "č®€å–ę›øęœ¬ę™‚é‡åˆ°éŒÆčŖ¤" #: bookwyrm/models/import_job.py:365 msgid "Could not find a match for book" +msgstr "ę‰¾äøåˆ°åŒ¹é…ēš„ę›ø" + +#: bookwyrm/models/job.py:22 +msgid "Failed" msgstr "" #: bookwyrm/models/link.py:51 @@ -325,7 +337,7 @@ msgstr "" #: bookwyrm/models/report.py:89 msgid "Suspended user" -msgstr "" +msgstr "é­åˆ°åœę¬Šēš„ä½æē”Ø者" #: bookwyrm/models/report.py:90 msgid "Un-suspended user" @@ -333,23 +345,23 @@ msgstr "" #: bookwyrm/models/report.py:91 msgid "Changed user permission level" -msgstr "" +msgstr "ę›“ę”¹ä½æē”Ø者ꬊ限ē­‰ē“š" #: bookwyrm/models/report.py:92 msgid "Deleted user account" -msgstr "" +msgstr "å·²åˆŖ除ēš„ä½æē”Ø者åø³č™Ÿ" #: bookwyrm/models/report.py:93 msgid "Blocked domain" -msgstr "" +msgstr "已封鎖ēš„ē¶²åŸŸ" #: bookwyrm/models/report.py:94 msgid "Approved domain" -msgstr "" +msgstr "已通過åÆ©ę øēš„ē¶²åŸŸ" #: bookwyrm/models/report.py:95 msgid "Deleted item" -msgstr "" +msgstr "å·²åˆŖ除ēš„é …ē›®" #: bookwyrm/models/user.py:33 bookwyrm/templates/book/book.html:307 msgid "Reviews" @@ -359,7 +371,7 @@ msgstr "ę›øč©•" msgid "Comments" msgstr "č©•č«–" -#: bookwyrm/models/user.py:35 +#: bookwyrm/models/user.py:35 bookwyrm/templates/import/import_user.html:139 msgid "Quotations" msgstr "引ē”Ø" @@ -473,7 +485,7 @@ msgstr "ē¹é«”äø­ę–‡" #: bookwyrm/templates/403.html:5 msgid "Oh no!" -msgstr "" +msgstr "喔äøļ¼" #: bookwyrm/templates/403.html:9 bookwyrm/templates/landing/invite.html:21 msgid "Permission Denied" @@ -568,7 +580,7 @@ msgstr "" #: bookwyrm/templates/about/about.html:122 msgid "Moderator" -msgstr "" +msgstr "ē®”ē†č€…" #: bookwyrm/templates/about/about.html:124 bookwyrm/templates/user_menu.html:62 msgid "Admin" @@ -597,7 +609,7 @@ msgstr "" #: bookwyrm/templates/about/layout.html:11 msgid "Active users:" -msgstr "" +msgstr "ę“»čŗä½æē”Ø者ļ¼š" #: bookwyrm/templates/about/layout.html:15 msgid "Statuses posted:" @@ -606,7 +618,7 @@ msgstr "" #: bookwyrm/templates/about/layout.html:19 #: bookwyrm/templates/setup/config.html:74 msgid "Software version:" -msgstr "" +msgstr "č»Ÿé«”ē‰ˆęœ¬ļ¼š" #: bookwyrm/templates/about/layout.html:30 #: bookwyrm/templates/embed-layout.html:34 @@ -649,7 +661,7 @@ msgstr "" #: bookwyrm/templates/annual_summary/layout.html:68 #: bookwyrm/templates/lists/list.html:277 msgid "Copied!" -msgstr "" +msgstr "č¤‡č£½ęˆåŠŸļ¼" #: bookwyrm/templates/annual_summary/layout.html:77 msgid "Sharing status: public with key" @@ -661,7 +673,7 @@ msgstr "" #: bookwyrm/templates/annual_summary/layout.html:83 msgid "Make page private" -msgstr "" +msgstr "將頁面čØ­ē‚ŗē§äŗŗ" #: bookwyrm/templates/annual_summary/layout.html:89 msgid "Sharing status: private" @@ -669,20 +681,20 @@ msgstr "" #: bookwyrm/templates/annual_summary/layout.html:90 msgid "The page is private, only you can see it." -msgstr "" +msgstr "ę­¤ē‚ŗē§äŗŗ頁面ļ¼ŒåŖ꜉ę‚ØåÆ仄ēœ‹åˆ°ć€‚" #: bookwyrm/templates/annual_summary/layout.html:95 msgid "Make page public" -msgstr "" +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 "" +msgstr "ē•¶ę‚Ø將ę‚Øēš„頁面čØ­ē‚ŗē§äŗŗ後ļ¼ŒčˆŠēš„ē¶²å€å°‡ē„”ę³•å†å­˜å–é é¢ć€‚å¦‚ęžœé é¢å†ę¬”č¢«čØ­ē‚ŗ公開ļ¼Œé é¢å°‡ęœƒå¾—到äø€å€‹ę–°ēš„ē¶²čŖŒć€‚" #: bookwyrm/templates/annual_summary/layout.html:112 #, python-format msgid "Sadly %(display_name)s didnā€™t finish any books in %(year)s" -msgstr "" +msgstr "很éŗę†¾ēš„ %(display_name)s åœØ %(year)s äø¦ę²’ęœ‰č®€å®Œä»»ä½•ę›ø" #: bookwyrm/templates/annual_summary/layout.html:118 #, python-format @@ -960,6 +972,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" @@ -977,6 +990,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 "ē¢ŗčŖ" @@ -1025,7 +1039,7 @@ msgstr[0] "%(count)s ē‰ˆę¬”" #: bookwyrm/templates/book/book.html:246 msgid "You have shelved this edition in:" -msgstr "" +msgstr "ę­¤ē‰ˆęœ¬å·²åœØä½ ēš„ę›øꞶäøŠļ¼š" #: bookwyrm/templates/book/book.html:261 #, python-format @@ -1289,23 +1303,23 @@ msgstr "čŖžč؀:" #: bookwyrm/templates/book/edit/edit_book_form.html:97 msgid "Subjects:" -msgstr "" +msgstr "äø»ę—Øļ¼š" #: bookwyrm/templates/book/edit/edit_book_form.html:101 msgid "Add subject" -msgstr "" +msgstr "ę–°å¢žäø»ę—Ø" #: bookwyrm/templates/book/edit/edit_book_form.html:119 msgid "Remove subject" -msgstr "" +msgstr "ē§»é™¤äø»ę—Ø" #: bookwyrm/templates/book/edit/edit_book_form.html:142 msgid "Add Another Subject" -msgstr "" +msgstr "ę–°å¢žå¦äø€å€‹äø»ę—Ø" #: bookwyrm/templates/book/edit/edit_book_form.html:150 msgid "Publication" -msgstr "" +msgstr "å‡ŗē‰ˆå“" #: bookwyrm/templates/book/edit/edit_book_form.html:155 msgid "Publisher:" @@ -1331,7 +1345,7 @@ msgstr "" #: bookwyrm/templates/book/edit/edit_book_form.html:200 #, python-format msgid "Author page for %(name)s" -msgstr "" +msgstr "%(name)s ēš„ä½œč€…é é¢" #: bookwyrm/templates/book/edit/edit_book_form.html:208 msgid "Add Authors:" @@ -1401,11 +1415,11 @@ msgstr "" #: bookwyrm/templates/book/editions/editions.html:55 msgid "Can't find the edition you're looking for?" -msgstr "" +msgstr "ę‰¾äøåˆ°ä½ ę­£åœØå°‹ę‰¾ēš„ē‰ˆęœ¬ļ¼Ÿ" #: bookwyrm/templates/book/editions/editions.html:76 msgid "Add another edition" -msgstr "" +msgstr "ę–°å¢žå¦äø€å€‹ē‰ˆęœ¬" #: bookwyrm/templates/book/editions/format_filter.html:9 #: bookwyrm/templates/book/editions/language_filter.html:9 @@ -1419,15 +1433,15 @@ msgstr "čŖžč؀:" #: bookwyrm/templates/book/editions/search_filter.html:6 msgid "Search editions" -msgstr "" +msgstr "ęœå°‹ē‰ˆęœ¬" #: bookwyrm/templates/book/file_links/add_link_modal.html:6 msgid "Add file link" -msgstr "" +msgstr "ę–°å¢žęŖ”ę”ˆé€£ēµ" #: bookwyrm/templates/book/file_links/add_link_modal.html:19 msgid "Links from unknown domains will need to be approved by a moderator before they are added." -msgstr "" +msgstr "ę–°å¢žęœŖēŸ„ē¶²åŸŸēš„連ēµä¹‹å‰éœ€č¦ē”±ē®”ē†å“”åÆ©ę ø怂" #: bookwyrm/templates/book/file_links/add_link_modal.html:24 msgid "URL:" @@ -1435,7 +1449,7 @@ msgstr "" #: bookwyrm/templates/book/file_links/add_link_modal.html:29 msgid "File type:" -msgstr "" +msgstr "ęŖ”ę”ˆé”žåž‹ļ¼š" #: bookwyrm/templates/book/file_links/add_link_modal.html:48 msgid "Availability:" @@ -1465,18 +1479,21 @@ msgstr "" #: bookwyrm/templates/book/file_links/edit_links.html:34 #: bookwyrm/templates/settings/link_domains/link_table.html:8 msgid "Filetype" -msgstr "" +msgstr "ęŖ”ę”ˆé”žåž‹" #: bookwyrm/templates/book/file_links/edit_links.html:35 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:25 #: bookwyrm/templates/settings/reports/report_links_table.html:5 msgid "Domain" -msgstr "" +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 @@ -1488,7 +1505,8 @@ 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:108 msgid "Actions" @@ -1497,16 +1515,16 @@ msgstr "動作" #: bookwyrm/templates/book/file_links/edit_links.html:48 #: bookwyrm/templates/settings/link_domains/link_table.html:21 msgid "Unknown user" -msgstr "" +msgstr "ęœŖēŸ„ēš„ä½æē”Ø者" #: bookwyrm/templates/book/file_links/edit_links.html:57 #: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" -msgstr "" +msgstr "ęŖ¢čˆ‰åžƒåœ¾č؊ęÆ" #: bookwyrm/templates/book/file_links/edit_links.html:102 msgid "No links available for this book." -msgstr "" +msgstr "ę­¤ę›øę²”ęœ‰åÆē”Ø連ēµć€‚" #: bookwyrm/templates/book/file_links/edit_links.html:113 #: bookwyrm/templates/book/file_links/links.html:18 @@ -1523,7 +1541,7 @@ msgstr "" #: bookwyrm/templates/book/file_links/links.html:47 msgid "No links available" -msgstr "" +msgstr "ę²”ęœ‰åÆē”Ø連ēµ" #: bookwyrm/templates/book/file_links/verification_modal.html:5 msgid "Leaving BookWyrm" @@ -1593,11 +1611,11 @@ msgstr "" #: bookwyrm/templates/compose.html:5 bookwyrm/templates/compose.html:8 msgid "Edit status" -msgstr "" +msgstr "ē·Øč¼Æē‹€ę…‹" #: bookwyrm/templates/confirm_email/confirm_email.html:4 msgid "Confirm email" -msgstr "" +msgstr "ē¢ŗčŖé›»å­éƒµä»¶" #: bookwyrm/templates/confirm_email/confirm_email.html:7 msgid "Confirm your email address" @@ -1630,7 +1648,7 @@ msgstr "" #: bookwyrm/templates/confirm_email/resend.html:5 #: bookwyrm/templates/confirm_email/resend_modal.html:5 msgid "Resend confirmation link" -msgstr "" +msgstr "é‡ę–°å‚³é€ē¢ŗčŖé€£ēµ" #: bookwyrm/templates/confirm_email/resend_modal.html:15 #: bookwyrm/templates/landing/layout.html:68 @@ -1642,7 +1660,7 @@ msgstr "郵ē®±åœ°å€:" #: bookwyrm/templates/confirm_email/resend_modal.html:30 msgid "Resend link" -msgstr "" +msgstr "é‡ę–°å‚³é€é€£ēµ" #: bookwyrm/templates/directory/community_filter.html:5 msgid "Community" @@ -1670,7 +1688,7 @@ msgstr "ä½æä½ ēš„ä½æē”Øč€…č³‡ę–™åÆä»„č¢«å…¶å®ƒ BookWyrm ä½æē”Ø者ē™¼ē¾ć€‚" #: bookwyrm/templates/directory/directory.html:21 msgid "Join Directory" -msgstr "" +msgstr "åŠ å…„č³‡ę–™å¤¾" #: bookwyrm/templates/directory/directory.html:24 #, python-format @@ -1750,7 +1768,7 @@ msgstr "" #: bookwyrm/templates/discover/card-header.html:13 #, python-format msgid "%(username)s finished reading %(book_title)s" -msgstr "" +msgstr "%(username)s å·²č®€å®Œ %(book_title)s" #: bookwyrm/templates/discover/card-header.html:18 #, python-format @@ -1765,7 +1783,7 @@ msgstr "" #: bookwyrm/templates/discover/card-header.html:27 #, python-format msgid "%(username)s reviewed %(book_title)s" -msgstr "" +msgstr "%(username)s å·²č©•č«– %(book_title)s" #: bookwyrm/templates/discover/card-header.html:31 #, python-format @@ -2490,7 +2508,7 @@ 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 "" +msgstr "ę­å–œļ¼Œę‚Øå·²ē»å®Œęˆäŗ†å°Žč¦½ļ¼ē¾åœØę‚Øå·²ē»ēŸ„道åŸŗē¤ŽēŸ„識ļ¼Œä½†é‚„ęœ‰å¾ˆå¤šåŠŸčƒ½čƒ½å¤ č‡Ŗå·±ęŽ¢ē“¢ļ¼Œē„ę‚Ø閱讀åæ«ę؂ļ¼" #: bookwyrm/templates/guided_tour/group.html:115 msgid "End tour" @@ -2726,7 +2744,7 @@ msgstr "" #: bookwyrm/templates/guided_tour/user_profile.html:55 #: bookwyrm/templates/user/groups.html:6 bookwyrm/templates/user/layout.html:95 msgid "Groups" -msgstr "" +msgstr "ē¾¤ēµ„" #: bookwyrm/templates/guided_tour/user_groups.html:31 msgid "Let's create a new group!" @@ -2771,7 +2789,7 @@ msgstr "" #: bookwyrm/templates/guided_tour/user_profile.html:11 #: bookwyrm/templates/user/layout.html:20 bookwyrm/templates/user/user.html:14 msgid "User Profile" -msgstr "ä½æē”Ø者ä½æē”Øč€…č³‡ę–™" +msgstr "ä½æē”Øč€…č³‡ę–™" #: bookwyrm/templates/guided_tour/user_profile.html:31 msgid "This tab shows everything you have read towards your annual reading goal, or allows you to set one. You don't have to set a reading goal if that's not your thing!" @@ -2816,110 +2834,120 @@ 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:66 -msgid "Import Books" -msgstr "åŒÆå…„ę›øē›®" +#: 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] "" -#: 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 "ē„”꜀čæ‘ēš„åŒÆå…„" @@ -2955,7 +2983,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 "" @@ -3051,6 +3080,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" @@ -3071,7 +3227,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 "" @@ -3223,7 +3379,7 @@ msgstr "" #: bookwyrm/templates/layout.html:39 msgid "Search for a book, user, or list" -msgstr "" +msgstr "ęœå°‹ę›øē±ć€ä½æē”Øč€…ęˆ–åˆ—č”Ø" #: bookwyrm/templates/layout.html:54 bookwyrm/templates/layout.html:55 msgid "Scan Barcode" @@ -3846,6 +4002,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 "åˆŖ除通ēŸ„" @@ -4089,7 +4255,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 "封鎖ēš„ä½æē”Ø者" @@ -4224,13 +4390,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 "

    Your file will include:

    • User profile
    • Most user settings
    • Reading goals
    • Shelves
    • Reading history
    • Book reviews
    • Statuses
    • Your own lists and saved lists
    • Which users you follow and block

    Your file will not include:

    • Direct messages
    • Replies to your statuses
    • Groups
    • Favorites
    " +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:43 +msgid "In your new BookWyrm account can choose what to import: you will not have to import everything that is exported." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:46 +msgid "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." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:51 +#, python-format +msgid "You will be able to create a new export file at %(next_available)s" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:60 +msgid "Create user export file" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:67 +msgid "Recent Exports" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:69 +msgid "User export files will show 'complete' once ready. This may take a little while. Click the link to download your file." +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:75 +msgid "Date" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:81 +msgid "Size" +msgstr "" + +#: bookwyrm/templates/preferences/export-user.html:125 +msgid "Download your export" +msgstr "" + #: bookwyrm/templates/preferences/export.html:4 #: bookwyrm/templates/preferences/export.html:7 -msgid "CSV Export" +#: bookwyrm/templates/preferences/layout.html:47 +msgid "Export Book List" msgstr "" #: 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." +msgid "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." msgstr "" #: bookwyrm/templates/preferences/export.html:20 @@ -4249,11 +4467,7 @@ msgstr "" msgid "Data" msgstr "" -#: bookwyrm/templates/preferences/layout.html:47 -msgid "CSV export" -msgstr "" - -#: bookwyrm/templates/preferences/layout.html:50 +#: bookwyrm/templates/preferences/layout.html:58 msgid "Relationships" msgstr "關äæ‚" @@ -4739,7 +4953,8 @@ msgid "Active Tasks" msgstr "" #: bookwyrm/templates/settings/celery.html:131 -#: bookwyrm/templates/settings/imports/imports.html:113 +#: bookwyrm/templates/settings/imports/imports.html:146 +#: bookwyrm/templates/settings/imports/imports.html:236 msgid "ID" msgstr "" @@ -5129,9 +5344,14 @@ 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 "" @@ -5144,70 +5364,107 @@ msgstr "" 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 +#: 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:50 +#: bookwyrm/templates/settings/imports/imports.html:51 msgid "Users are currently unable to start new imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:55 +#: bookwyrm/templates/settings/imports/imports.html:56 msgid "Enable imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:63 +#: bookwyrm/templates/settings/imports/imports.html:64 msgid "Limit the amount of imports" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:74 +#: 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:75 +#: 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:78 +#: bookwyrm/templates/settings/imports/imports.html:79 msgid "Set import limit to" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:80 +#: bookwyrm/templates/settings/imports/imports.html:81 msgid "books every" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:82 +#: bookwyrm/templates/settings/imports/imports.html:83 msgid "days." msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:86 +#: bookwyrm/templates/settings/imports/imports.html:87 msgid "Set limit" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:102 -msgid "Completed" +#: bookwyrm/templates/settings/imports/imports.html:96 +msgid "Limit how often users can import and export" msgstr "" -#: bookwyrm/templates/settings/imports/imports.html:116 -msgid "User" +#: 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 "Date Updated" -msgstr "" - -#: bookwyrm/templates/settings/imports/imports.html:132 -msgid "Pending items" +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:170 +#: 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 @@ -6020,17 +6277,15 @@ msgstr "å»ŗē«‹ę›øꞶ" 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:66 +msgid "Import Books" +msgstr "åŒÆå…„ę›øē›®" + #: bookwyrm/templates/shelf/shelf.html:99 #, python-format msgid "%(formatted_count)s book" @@ -6210,7 +6465,7 @@ msgstr "" #: bookwyrm/templates/snippets/create_status/review.html:24 #, python-format msgid "Your review of '%(book_title)s'" -msgstr "" +msgstr "ä½ å°ć€Š%(book_title)s怋ēš„ę›øč©•" #: bookwyrm/templates/snippets/create_status/review.html:39 msgid "Review:" @@ -6277,11 +6532,11 @@ msgstr "ꖇ件:" #: bookwyrm/templates/snippets/footer.html:42 #, python-format msgid "Support %(site_name)s on %(support_title)s" -msgstr "" +msgstr "åœØ %(support_title)s äøŠę”Æꌁ %(site_name)s" #: bookwyrm/templates/snippets/footer.html:49 msgid "BookWyrm's source code is freely available. You can contribute or report issues on GitHub." -msgstr "" +msgstr "BookWyrm ę˜Æå…č²»é–‹ęŗč»Ÿé«”ļ¼Œä½ åÆ仄åœØ GitHub č²¢ē»ęˆ–å›žå ±å•é”Œć€‚" #: bookwyrm/templates/snippets/form_rate_stars.html:20 #: bookwyrm/templates/snippets/stars.html:23 @@ -6590,12 +6845,12 @@ msgstr "" #: bookwyrm/templates/snippets/status/headers/read.html:10 #, python-format msgid "finished reading %(book)s by %(author_name)s" -msgstr "" +msgstr "č®€å®Œäŗ† %(author_name)s ēš„ %(book)s" #: bookwyrm/templates/snippets/status/headers/read.html:17 #, python-format msgid "finished reading %(book)s" -msgstr "" +msgstr "č®€å®Œäŗ† %(book)s" #: bookwyrm/templates/snippets/status/headers/reading.html:10 #, python-format @@ -6759,7 +7014,7 @@ msgstr "關ę³Ø請걂" #: bookwyrm/templates/user/reviews_comments.html:6 #: bookwyrm/templates/user/reviews_comments.html:12 msgid "Reviews and Comments" -msgstr "" +msgstr "ę›øč©•å’Œč©•č«–" #: bookwyrm/templates/user/lists.html:16 #, python-format @@ -6856,7 +7111,7 @@ msgstr[0] "" #: bookwyrm/templates/user/user_preview.html:31 #, python-format msgid "%(counter)s following" -msgstr "關ę³Ø著 %(counter)s äŗŗ" +msgstr "ę­£åœØčæ½č¹¤ %(counter)s äŗŗ" #: bookwyrm/templates/user/user_preview.html:45 #, python-format From bf52eeaa9ee5816a0c8e71e3d9d440d61bd078be Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 25 Mar 2024 16:15:02 -0700 Subject: [PATCH 409/458] Bump version to 0.7.3. --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 7486fdbc5..f38fc5393 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.2 +0.7.3 From 145c67dd214f9df9d97ca12dad0b4f4b88125ef6 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 26 Mar 2024 12:41:04 +0100 Subject: [PATCH 410/458] Merge BookwyrmExportJob export_data field back into one with dynamic storage backend --- ...198_alter_bookwyrmexportjob_export_data.py | 23 +++++++++++ .../0198_export_job_separate_file_fields.py | 28 ------------- bookwyrm/models/bookwyrm_export_job.py | 41 +++++++------------ bookwyrm/settings.py | 20 +++++++-- 4 files changed, 54 insertions(+), 58 deletions(-) create mode 100644 bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py delete mode 100644 bookwyrm/migrations/0198_export_job_separate_file_fields.py diff --git a/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py b/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py new file mode 100644 index 000000000..552584d2b --- /dev/null +++ b/bookwyrm/migrations/0198_alter_bookwyrmexportjob_export_data.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.25 on 2024-03-26 11:37 + +import bookwyrm.models.bookwyrm_export_job +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0197_merge_20240324_0235"), + ] + + operations = [ + migrations.AlterField( + model_name="bookwyrmexportjob", + name="export_data", + field=models.FileField( + null=True, + storage=bookwyrm.models.bookwyrm_export_job.select_exports_storage, + upload_to="", + ), + ), + ] diff --git a/bookwyrm/migrations/0198_export_job_separate_file_fields.py b/bookwyrm/migrations/0198_export_job_separate_file_fields.py deleted file mode 100644 index d9dd87eee..000000000 --- a/bookwyrm/migrations/0198_export_job_separate_file_fields.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.25 on 2024-03-24 11:20 - -import bookwyrm.storage_backends -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("bookwyrm", "0197_merge_20240324_0235"), - ] - - operations = [ - migrations.RenameField( - model_name="bookwyrmexportjob", - old_name="export_data", - new_name="export_data_file", - ), - migrations.AddField( - model_name="bookwyrmexportjob", - name="export_data_s3", - field=models.FileField( - null=True, - storage=bookwyrm.storage_backends.ExportsS3Storage, - upload_to="", - ), - ), - ] diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index c94c6bec0..8fd108014 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -12,8 +12,9 @@ from django.db.models import Q from django.core.serializers.json import DjangoJSONEncoder from django.core.files.base import ContentFile from django.utils import timezone +from django.utils.module_loading import import_string -from bookwyrm import settings, storage_backends +from bookwyrm import settings from bookwyrm.models import AnnualGoal, ReadThrough, ShelfBook, List, ListItem from bookwyrm.models import Review, Comment, Quotation @@ -34,33 +35,19 @@ class BookwyrmAwsSession(BotoSession): return super().client("s3", *args, **kwargs) +def select_exports_storage(): + """callable to allow for dependency on runtime configuration""" + cls = import_string(settings.EXPORTS_STORAGE) + return cls() + + class BookwyrmExportJob(ParentJob): """entry for a specific request to export a bookwyrm user""" - # Only one of these fields is used, dependent on the configuration. - export_data_file = FileField(null=True, storage=storage_backends.ExportsFileStorage) - export_data_s3 = FileField(null=True, storage=storage_backends.ExportsS3Storage) - + export_data = FileField(null=True, storage=select_exports_storage) export_json = JSONField(null=True, encoder=DjangoJSONEncoder) json_completed = BooleanField(default=False) - @property - def export_data(self): - """returns the file field of the configured storage backend""" - # TODO: We could check whether a field for a different backend is - # filled, to support migrating to a different backend. - if settings.USE_S3: - return self.export_data_s3 - return self.export_data_file - - @export_data.setter - def export_data(self, value): - """sets the file field of the configured storage backend""" - if settings.USE_S3: - self.export_data_s3 = value - else: - self.export_data_file = value - def start_job(self): """Start the job""" @@ -265,15 +252,15 @@ class AddFileToTar(ChildJob): # Create archive and store file name s3_tar.tar() - export_job.export_data_s3 = s3_archive_path - export_job.save() + export_job.export_data = s3_archive_path + export_job.save(update_fields=["export_data"]) # Delete temporary files S3Boto3Storage.delete(storage, export_json_tmp_file) else: - export_job.export_data_file = f"{export_task_id}.tar.gz" - with export_job.export_data_file.open("wb") as tar_file: + export_job.export_data = f"{export_task_id}.tar.gz" + with export_job.export_data.open("wb") as tar_file: with BookwyrmTarFile.open(mode="w:gz", fileobj=tar_file) as tar: # save json file tar.write_bytes(export_json_bytes) @@ -285,7 +272,7 @@ class AddFileToTar(ChildJob): for edition in editions: if edition.cover: tar.add_image(edition.cover, directory="images/") - export_job.save() + export_job.save(update_fields=["export_data"]) self.complete_job() diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index d2ba490b7..1e778ad15 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -390,16 +390,20 @@ if USE_S3: # S3 Static settings STATIC_LOCATION = "static" STATIC_URL = f"{PROTOCOL}://{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/" + STATIC_FULL_URL = STATIC_URL STATICFILES_STORAGE = "bookwyrm.storage_backends.StaticStorage" # S3 Media settings MEDIA_LOCATION = "images" MEDIA_URL = f"{PROTOCOL}://{AWS_S3_CUSTOM_DOMAIN}/{MEDIA_LOCATION}/" MEDIA_FULL_URL = MEDIA_URL - STATIC_FULL_URL = STATIC_URL DEFAULT_FILE_STORAGE = "bookwyrm.storage_backends.ImagesStorage" + # S3 Exports settings + EXPORTS_STORAGE = "bookwyrm.storage_backends.ExportsS3Storage" + # Content Security Policy CSP_DEFAULT_SRC = ["'self'", AWS_S3_CUSTOM_DOMAIN] + CSP_ADDITIONAL_HOSTS CSP_SCRIPT_SRC = ["'self'", AWS_S3_CUSTOM_DOMAIN] + CSP_ADDITIONAL_HOSTS elif USE_AZURE: + # Azure settings AZURE_ACCOUNT_NAME = env("AZURE_ACCOUNT_NAME") AZURE_ACCOUNT_KEY = env("AZURE_ACCOUNT_KEY") AZURE_CONTAINER = env("AZURE_CONTAINER") @@ -409,6 +413,7 @@ elif USE_AZURE: STATIC_URL = ( f"{PROTOCOL}://{AZURE_CUSTOM_DOMAIN}/{AZURE_CONTAINER}/{STATIC_LOCATION}/" ) + STATIC_FULL_URL = STATIC_URL STATICFILES_STORAGE = "bookwyrm.storage_backends.AzureStaticStorage" # Azure Media settings MEDIA_LOCATION = "images" @@ -416,15 +421,24 @@ elif USE_AZURE: f"{PROTOCOL}://{AZURE_CUSTOM_DOMAIN}/{AZURE_CONTAINER}/{MEDIA_LOCATION}/" ) MEDIA_FULL_URL = MEDIA_URL - STATIC_FULL_URL = STATIC_URL DEFAULT_FILE_STORAGE = "bookwyrm.storage_backends.AzureImagesStorage" + # Azure Exports settings + EXPORTS_STORAGE = None # not implemented yet + # Content Security Policy CSP_DEFAULT_SRC = ["'self'", AZURE_CUSTOM_DOMAIN] + CSP_ADDITIONAL_HOSTS CSP_SCRIPT_SRC = ["'self'", AZURE_CUSTOM_DOMAIN] + CSP_ADDITIONAL_HOSTS else: + # Static settings STATIC_URL = "/static/" + STATIC_FULL_URL = f"{PROTOCOL}://{DOMAIN}{STATIC_URL}" + STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage" + # Media settings MEDIA_URL = "/images/" MEDIA_FULL_URL = f"{PROTOCOL}://{DOMAIN}{MEDIA_URL}" - STATIC_FULL_URL = f"{PROTOCOL}://{DOMAIN}{STATIC_URL}" + DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage" + # Exports settings + EXPORTS_STORAGE = "bookwyrm.storage_backends.ExportsFileStorage" + # Content Security Policy CSP_DEFAULT_SRC = ["'self'"] + CSP_ADDITIONAL_HOSTS CSP_SCRIPT_SRC = ["'self'"] + CSP_ADDITIONAL_HOSTS From ef57c0bc8b23bf4bb1dff7e4fc9ba3cb95db035d Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 26 Mar 2024 13:16:08 +0100 Subject: [PATCH 411/458] Check last user export too in post handler --- bookwyrm/views/preferences/export.py | 45 ++++++++++++++++------------ 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index f501f331b..de243586d 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -148,21 +148,35 @@ class Export(View): @method_decorator(login_required, name="dispatch") class ExportUser(View): """ - Let users export user data to import into another Bookwyrm instance - This view creates signed URLs to pre-processed export files in - s3 storage on load (if they exist) and allows the user to create - a new file. + Let users request and download an archive of user data to import into + another Bookwyrm instance. """ + user_jobs = None + + def setup(self, request, *args, **kwargs): + super().setup(request, *args, **kwargs) + + self.user_jobs = BookwyrmExportJob.objects.filter(user=request.user).order_by( + "-created_date" + ) + + def new_export_blocked_until(self): + """whether the user is allowed to request a new export""" + last_job = self.user_jobs.first() + if not last_job: + return None + site = models.SiteSettings.objects.get() + blocked_until = last_job.created_date + timedelta( + hours=site.user_import_time_limit + ) + return blocked_until if blocked_until > timezone.now() else None + def get(self, request): """Request tar file""" - jobs = BookwyrmExportJob.objects.filter(user=request.user).order_by( - "-created_date" - ) - exports = [] - for job in jobs: + for job in self.user_jobs: export = {"job": job} if job.export_data: @@ -178,16 +192,7 @@ class ExportUser(View): exports.append(export) - site = models.SiteSettings.objects.get() - hours = site.user_import_time_limit - allowed = ( - jobs.first().created_date < timezone.now() - timedelta(hours=hours) - if jobs.first() - else True - ) - next_available = ( - jobs.first().created_date + timedelta(hours=hours) if not allowed else False - ) + next_available = self.new_export_blocked_until() paginated = Paginator(exports, settings.PAGE_LENGTH) page = paginated.get_page(request.GET.get("page")) data = { @@ -202,6 +207,8 @@ class ExportUser(View): def post(self, request): """Trigger processing of a new user export file""" + if self.new_export_blocked_until() is not None: + return HttpResponse(status=429) # Too Many Requests job = BookwyrmExportJob.objects.create(user=request.user) job.start_job() From ed2e9e5ea87746bb50f2602a40c81bd648564f55 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 26 Mar 2024 13:18:13 +0100 Subject: [PATCH 412/458] Merge migration --- bookwyrm/migrations/0199_merge_20240326_1217.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bookwyrm/migrations/0199_merge_20240326_1217.py diff --git a/bookwyrm/migrations/0199_merge_20240326_1217.py b/bookwyrm/migrations/0199_merge_20240326_1217.py new file mode 100644 index 000000000..7794af54a --- /dev/null +++ b/bookwyrm/migrations/0199_merge_20240326_1217.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.25 on 2024-03-26 12:17 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0198_alter_bookwyrmexportjob_export_data"), + ("bookwyrm", "0198_book_search_vector_author_aliases"), + ] + + operations = [] From 98600440d8c2315205616e6bd2effe1aafc667df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20C=C3=A1mara?= Date: Tue, 26 Mar 2024 17:14:09 +0000 Subject: [PATCH 413/458] Remove twitter from README.md The Twitter/X account doesn't seem to exist, so removing the badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f8b2eb1f6..7e27d44e6 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ BookWyrm is a social network for tracking your reading, talking about books, wri ## Links [![Mastodon Follow](https://img.shields.io/mastodon/follow/000146121?domain=https%3A%2F%2Ftech.lgbt&style=social)](https://tech.lgbt/@bookwyrm) -[![Twitter Follow](https://img.shields.io/twitter/follow/BookWyrmSocial?style=social)](https://twitter.com/BookWyrmSocial) - [Project homepage](https://joinbookwyrm.com/) - [Support](https://patreon.com/bookwyrm) From 9685ae5a0a7f7ae073915554498c2f2bda546df5 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 26 Mar 2024 16:18:30 +0100 Subject: [PATCH 414/458] Consolidate BookwyrmExportJob into two tasks Creating the export JSON and export TAR are now the only two tasks. --- bookwyrm/models/bookwyrm_export_job.py | 565 ++++++++++--------------- 1 file changed, 218 insertions(+), 347 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 8fd108014..8c3eeb41f 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -7,20 +7,19 @@ from boto3.session import Session as BotoSession from s3_tar import S3Tar from storages.backends.s3boto3 import S3Boto3Storage -from django.db.models import CASCADE, BooleanField, FileField, ForeignKey, JSONField +from django.db.models import BooleanField, FileField, JSONField from django.db.models import Q from django.core.serializers.json import DjangoJSONEncoder from django.core.files.base import ContentFile -from django.utils import timezone from django.utils.module_loading import import_string from bookwyrm import settings -from bookwyrm.models import AnnualGoal, ReadThrough, ShelfBook, List, ListItem +from bookwyrm.models import AnnualGoal, ReadThrough, ShelfBook, 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, ChildJob, ParentTask +from bookwyrm.models.job import ParentJob from bookwyrm.tasks import app, IMPORTS from bookwyrm.utils.tar import BookwyrmTarFile @@ -49,40 +48,12 @@ class BookwyrmExportJob(ParentJob): json_completed = BooleanField(default=False) def start_job(self): - """Start the job""" + """schedule the first task""" - task = start_export_task.delay(job_id=self.id, no_children=False) + task = create_export_json_task.delay(job_id=self.id) self.task_id = task.id self.save(update_fields=["task_id"]) - 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: - if not self.json_completed: - try: - self.json_completed = True - self.save(update_fields=["json_completed"]) - - tar_job = AddFileToTar.objects.create( - parent_job=self, parent_export_job=self - ) - tar_job.start_job() - - except Exception as err: # pylint: disable=broad-except - logger.exception("job %s failed with error: %s", self.id, err) - tar_job.set_status("failed") - self.stop_job(reason="failed") - - else: - self.complete_job() - def url2relativepath(url: str) -> str: """turn an absolute URL into a relative filesystem path""" @@ -90,345 +61,245 @@ def url2relativepath(url: str) -> str: return unquote(parsed.path[1:]) -class AddBookToUserExportJob(ChildJob): - """append book metadata for each book in an export""" +@app.task(queue=IMPORTS) +def create_export_json_task(job_id): + """create the JSON data for the export""" - edition = ForeignKey(Edition, on_delete=CASCADE) - - # pylint: disable=too-many-locals - def start_job(self): - """Start the job""" - try: - - book = {} - book["work"] = self.edition.parent_work.to_activity() - book["edition"] = self.edition.to_activity() - - if book["edition"].get("cover"): - book["edition"]["cover"]["url"] = url2relativepath( - book["edition"]["cover"]["url"] - ) - - # authors - book["authors"] = [] - for author in self.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=self.parent_job.user, book=self.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=self.edition, user=self.parent_job.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=self.parent_job.user, book=self.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=self.parent_job.user, book=self.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=self.parent_job.user, book=self.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=self.parent_job.user, book=self.edition) - .distinct() - .values() - ) - book["readthroughs"] = list(book_readthroughs) - - self.parent_job.export_json["books"].append(book) - self.parent_job.save(update_fields=["export_json"]) - self.complete_job() - - except Exception as err: # pylint: disable=broad-except - logger.exception( - "AddBookToUserExportJob %s Failed with error: %s", self.id, err - ) - self.set_status("failed") - - -class AddFileToTar(ChildJob): - """add files to export""" - - parent_export_job = ForeignKey( - BookwyrmExportJob, on_delete=CASCADE, related_name="child_edition_export_jobs" - ) - - def start_job(self): - """Start the job""" - - # NOTE we are doing this all in one big job, - # which has the potential to block a thread - # This is because we need to refer to the same s3_job - # or BookwyrmTarFile whilst writing - # Using a series of jobs in a loop would be better - - try: - export_job = self.parent_export_job - export_task_id = str(export_job.task_id) - - export_json_bytes = ( - DjangoJSONEncoder().encode(export_job.export_json).encode("utf-8") - ) - - user = export_job.user - editions = get_books_for_user(user) - - if settings.USE_S3: - # Connection for writing temporary files - storage = S3Boto3Storage() - - # Handle for creating the final archive - s3_archive_path = f"exports/{export_task_id}.tar.gz" - s3_tar = S3Tar( - settings.AWS_STORAGE_BUCKET_NAME, - s3_archive_path, - session=BookwyrmAwsSession(), - ) - - # Save JSON file to a temporary location - export_json_tmp_file = f"exports/{export_task_id}/archive.json" - S3Boto3Storage.save( - storage, - export_json_tmp_file, - ContentFile(export_json_bytes), - ) - s3_tar.add_file(export_json_tmp_file) - - # Add avatar image if present - if user.avatar: - s3_tar.add_file(f"images/{user.avatar.name}") - - for edition in editions: - if edition.cover: - s3_tar.add_file(f"images/{edition.cover.name}") - - # Create archive and store file name - s3_tar.tar() - export_job.export_data = s3_archive_path - export_job.save(update_fields=["export_data"]) - - # Delete temporary files - S3Boto3Storage.delete(storage, export_json_tmp_file) - - else: - export_job.export_data = f"{export_task_id}.tar.gz" - with export_job.export_data.open("wb") as tar_file: - with BookwyrmTarFile.open(mode="w:gz", fileobj=tar_file) as tar: - # save json file - tar.write_bytes(export_json_bytes) - - # Add avatar image if present - if user.avatar: - tar.add_image(user.avatar, directory="images/") - - for edition in editions: - if edition.cover: - tar.add_image(edition.cover, directory="images/") - export_job.save(update_fields=["export_data"]) - - self.complete_job() - - except Exception as err: # pylint: disable=broad-except - logger.exception("AddFileToTar %s Failed with error: %s", self.id, err) - self.stop_job(reason="failed") - self.parent_job.stop_job(reason="failed") - - -@app.task(queue=IMPORTS, base=ParentTask) -def start_export_task(**kwargs): - """trigger the child tasks for user export""" - - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) + job = BookwyrmExportJob.objects.get(id=job_id) # don't start the job if it was stopped from the UI if job.complete: return - try: - - # prepare the initial file and base json - job.export_json = job.user.to_activity() - job.save(update_fields=["export_json"]) - - # let's go - json_export.delay(job_id=job.id, job_user=job.user.id, no_children=False) - - 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") - - -@app.task(queue=IMPORTS, base=ParentTask) -def export_saved_lists_task(**kwargs): - """add user saved lists to export JSON""" - - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) - saved_lists = List.objects.filter(id__in=job.user.saved_lists.all()).distinct() - job.export_json["saved_lists"] = [l.remote_id for l in saved_lists] - job.save(update_fields=["export_json"]) - - -@app.task(queue=IMPORTS, base=ParentTask) -def export_follows_task(**kwargs): - """add user follows to export JSON""" - - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) - follows = UserFollows.objects.filter(user_subject=job.user).distinct() - following = User.objects.filter(userfollows_user_object__in=follows).distinct() - job.export_json["follows"] = [f.remote_id for f in following] - job.save(update_fields=["export_json"]) - - -@app.task(queue=IMPORTS, base=ParentTask) -def export_blocks_task(**kwargs): - """add user blocks to export JSON""" - - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) - blocks = UserBlocks.objects.filter(user_subject=job.user).distinct() - blocking = User.objects.filter(userblocks_user_object__in=blocks).distinct() - job.export_json["blocks"] = [b.remote_id for b in blocking] - job.save(update_fields=["export_json"]) - - -@app.task(queue=IMPORTS, base=ParentTask) -def export_reading_goals_task(**kwargs): - """add user reading goals to export JSON""" - - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) - reading_goals = AnnualGoal.objects.filter(user=job.user).distinct() - job.export_json["goals"] = [] - for goal in reading_goals: - job.export_json["goals"].append( - {"goal": goal.goal, "year": goal.year, "privacy": goal.privacy} - ) - job.save(update_fields=["export_json"]) - - -@app.task(queue=IMPORTS, base=ParentTask) -def json_export(**kwargs): - """Generate an export for a user""" try: - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) job.set_status("active") - job_id = kwargs["job_id"] - if not job.export_json.get("icon"): - job.export_json["icon"] = {} - else: - job.export_json["icon"]["url"] = url2relativepath( - job.export_json["icon"]["url"] - ) - - # Additional settings - can't be serialized as AP - vals = [ - "show_goal", - "preferred_timezone", - "default_post_privacy", - "show_suggested_users", - ] - job.export_json["settings"] = {} - for k in vals: - job.export_json["settings"][k] = getattr(job.user, k) - - job.export_json["books"] = [] - - # save settings we just updated + # generate JSON structure + job.export_json = export_json(job.user) job.save(update_fields=["export_json"]) - # trigger subtasks - export_saved_lists_task.delay(job_id=job_id, no_children=False) - export_follows_task.delay(job_id=job_id, no_children=False) - export_blocks_task.delay(job_id=job_id, no_children=False) - trigger_books_jobs.delay(job_id=job_id, no_children=False) - + # create archive in separate task + create_archive_task.delay(job_id=job.id) except Exception as err: # pylint: disable=broad-except logger.exception( - "json_export task in job %s Failed with error: %s", - job.id, - err, + "create_export_json_task for %s failed with error: %s", job, err ) job.set_status("failed") -@app.task(queue=IMPORTS, base=ParentTask) -def trigger_books_jobs(**kwargs): - """trigger tasks to get data for each book""" +@app.task(queue=IMPORTS) +def create_archive_task(job_id): + """create the archive containing the JSON file and additional files""" + + job = BookwyrmExportJob.objects.get(id=job_id) + + # don't start the job if it was stopped from the UI + if job.complete: + return try: - job = BookwyrmExportJob.objects.get(id=kwargs["job_id"]) - editions = get_books_for_user(job.user) + export_task_id = job.task_id + export_json_bytes = DjangoJSONEncoder().encode(job.export_json).encode("utf-8") - if len(editions) == 0: - job.notify_child_job_complete() - return + user = job.user + editions = get_books_for_user(user) - for edition in editions: - try: - edition_job = AddBookToUserExportJob.objects.create( - edition=edition, parent_job=job - ) - edition_job.start_job() - except Exception as err: # pylint: disable=broad-except - logger.exception( - "AddBookToUserExportJob %s Failed with error: %s", - edition_job.id, - err, - ) - edition_job.set_status("failed") + if settings.USE_S3: + # Connection for writing temporary files + storage = S3Boto3Storage() + + # Handle for creating the final archive + s3_archive_path = f"exports/{export_task_id}.tar.gz" + s3_tar = S3Tar( + settings.AWS_STORAGE_BUCKET_NAME, + s3_archive_path, + session=BookwyrmAwsSession(), + ) + + # Save JSON file to a temporary location + export_json_tmp_file = f"exports/{export_task_id}/archive.json" + S3Boto3Storage.save( + storage, + export_json_tmp_file, + ContentFile(export_json_bytes), + ) + s3_tar.add_file(export_json_tmp_file) + + # Add avatar image if present + if user.avatar: + s3_tar.add_file(f"images/{user.avatar.name}") + + for edition in editions: + if edition.cover: + s3_tar.add_file(f"images/{edition.cover.name}") + + # Create archive and store file name + s3_tar.tar() + job.export_data = s3_archive_path + job.save(update_fields=["export_data"]) + + # Delete temporary files + S3Boto3Storage.delete(storage, export_json_tmp_file) + + else: + job.export_data = f"{export_task_id}.tar.gz" + with job.export_data.open("wb") as tar_file: + with BookwyrmTarFile.open(mode="w:gz", fileobj=tar_file) as tar: + # save json file + tar.write_bytes(export_json_bytes) + + # Add avatar image if present + if user.avatar: + tar.add_image(user.avatar, directory="images/") + + for edition in editions: + if edition.cover: + tar.add_image(edition.cover, directory="images/") + job.save(update_fields=["export_data"]) + + job.set_status("completed") except Exception as err: # pylint: disable=broad-except - logger.exception("trigger_books_jobs %s Failed with error: %s", job.id, err) + logger.exception("create_archive_task for %s failed with error: %s", job, err) job.set_status("failed") +def export_json(user: User): + """create export JSON""" + data = export_user(user) # in the root of the JSON structure + data["settings"] = export_settings(user) + data["goals"] = export_goals(user) + data["books"] = export_books(user) + data["saved_lists"] = export_saved_lists(user) + data["follows"] = export_follows(user) + data["blocks"] = export_blocks(user) + return data + + +def export_user(user: User): + """export user data""" + data = user.to_activity() + data["icon"]["url"] = ( + url2relativepath(data["icon"]["url"]) if data.get("icon", False) else {} + ) + return data + + +def export_settings(user: User): + """Additional settings - can't be serialized as AP""" + vals = [ + "show_goal", + "preferred_timezone", + "default_post_privacy", + "show_suggested_users", + ] + return {k: getattr(user, k) for k in vals} + + +def export_saved_lists(user: User): + """add user saved lists to export JSON""" + return [l.remote_id for l in user.saved_lists.all()] + + +def export_follows(user: User): + """add user follows to export JSON""" + follows = UserFollows.objects.filter(user_subject=user).distinct() + following = User.objects.filter(userfollows_user_object__in=follows).distinct() + return [f.remote_id for f in following] + + +def export_blocks(user: User): + """add user blocks to export JSON""" + blocks = UserBlocks.objects.filter(user_subject=user).distinct() + blocking = User.objects.filter(userblocks_user_object__in=blocks).distinct() + return [b.remote_id for b in blocking] + + +def export_goals(user: User): + """add user reading goals to export JSON""" + reading_goals = AnnualGoal.objects.filter(user=user).distinct() + return [ + {"goal": goal.goal, "year": goal.year, "privacy": goal.privacy} + for goal in reading_goals + ] + + +def export_books(user: User): + """add books to export JSON""" + editions = get_books_for_user(user) + return [export_book(user, edition) for edition in editions] + + +def export_book(user: User, edition: Edition): + """add book to export JSON""" + data = {} + data["work"] = edition.parent_work.to_activity() + data["edition"] = edition.to_activity() + + if data["edition"].get("cover"): + data["edition"]["cover"]["url"] = url2relativepath( + data["edition"]["cover"]["url"] + ) + + # authors + data["authors"] = [author.to_activity() for author in edition.authors.all()] + + # Shelves this book is on + # Every ShelfItem is this book so we don't other serializing + shelf_books = ( + ShelfBook.objects.select_related("shelf") + .filter(user=user, book=edition) + .distinct() + ) + data["shelves"] = [shelfbook.shelf.to_activity() for shelfbook in shelf_books] + + # Lists and ListItems + # ListItems include "notes" and "approved" so we need them + # even though we know it's this book + list_items = ListItem.objects.filter(book=edition, user=user).distinct() + + data["lists"] = [] + 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() + data["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"]: + data[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 + data["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 + data["quotations"].append(obj) + + reviews = Review.objects.filter(user=user, book=edition).all() + data["reviews"] = [status.to_activity() for status in reviews] + + # readthroughs can't be serialized to activity + book_readthroughs = ( + ReadThrough.objects.filter(user=user, book=edition).distinct().values() + ) + data["readthroughs"] = list(book_readthroughs) + return data + + def get_books_for_user(user): """Get all the books and editions related to a user""" From 9afd0ebb54d67f5cc1ed4f7d894479e713e44470 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 27 Mar 2024 20:15:06 +0100 Subject: [PATCH 415/458] Update migrations --- .../migrations/0200_auto_20240327_1914.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 bookwyrm/migrations/0200_auto_20240327_1914.py diff --git a/bookwyrm/migrations/0200_auto_20240327_1914.py b/bookwyrm/migrations/0200_auto_20240327_1914.py new file mode 100644 index 000000000..44d84a13e --- /dev/null +++ b/bookwyrm/migrations/0200_auto_20240327_1914.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.25 on 2024-03-27 19:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0199_merge_20240326_1217'), + ] + + operations = [ + migrations.RemoveField( + model_name='addfiletotar', + name='childjob_ptr', + ), + migrations.RemoveField( + model_name='addfiletotar', + name='parent_export_job', + ), + migrations.DeleteModel( + name='AddBookToUserExportJob', + ), + migrations.DeleteModel( + name='AddFileToTar', + ), + ] From 797d5cb508555283dd7807883866cb8bc5eb6508 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 27 Mar 2024 20:39:57 +0100 Subject: [PATCH 416/458] Update BookwyrmExportJob tests --- bookwyrm/models/bookwyrm_export_job.py | 9 ++- .../tests/models/test_bookwyrm_export_job.py | 76 ++----------------- 2 files changed, 11 insertions(+), 74 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 8c3eeb41f..7a0c1100c 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -179,9 +179,10 @@ def export_json(user: User): def export_user(user: User): """export user data""" data = user.to_activity() - data["icon"]["url"] = ( - url2relativepath(data["icon"]["url"]) if data.get("icon", False) else {} - ) + if data.get("icon", False): + data["icon"]["url"] = url2relativepath(data["icon"]["url"]) + else: + data["icon"] = {} return data @@ -236,7 +237,7 @@ def export_book(user: User, edition: Edition): data["work"] = edition.parent_work.to_activity() data["edition"] = edition.to_activity() - if data["edition"].get("cover"): + if data["edition"].get("cover", False): data["edition"]["cover"]["url"] = url2relativepath( data["edition"]["cover"]["url"] ) diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index 1e0f6a39f..654ecec9e 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -153,25 +153,15 @@ class BookwyrmExportJob(TestCase): book=self.edition, ) - self.job = models.BookwyrmExportJob.objects.create( - user=self.local_user, export_json={} - ) + self.job = models.BookwyrmExportJob.objects.create(user=self.local_user) + + # run the first stage of the export + with patch("bookwyrm.models.bookwyrm_export_job.create_archive_task.delay"): + models.bookwyrm_export_job.create_export_json_task(job_id=self.job.id) + self.job.refresh_from_db() def test_add_book_to_user_export_job(self): """does AddBookToUserExportJob ...add the book to the export?""" - - self.job.export_json["books"] = [] - self.job.save() - - with patch("bookwyrm.models.bookwyrm_export_job.AddFileToTar.start_job"): - model = models.bookwyrm_export_job - edition_job = model.AddBookToUserExportJob.objects.create( - edition=self.edition, parent_job=self.job - ) - - edition_job.start_job() - - self.job.refresh_from_db() self.assertIsNotNone(self.job.export_json["books"]) self.assertEqual(len(self.job.export_json["books"]), 1) book = self.job.export_json["books"][0] @@ -192,27 +182,12 @@ class BookwyrmExportJob(TestCase): def test_start_export_task(self): """test saved list task saves initial json and data""" - - with patch("bookwyrm.models.bookwyrm_export_job.json_export.delay"): - models.bookwyrm_export_job.start_export_task( - job_id=self.job.id, no_children=False - ) - - self.job.refresh_from_db() - self.assertIsNotNone(self.job.export_data) self.assertIsNotNone(self.job.export_json) self.assertEqual(self.job.export_json["name"], self.local_user.name) def test_export_saved_lists_task(self): """test export_saved_lists_task adds the saved lists""" - - models.bookwyrm_export_job.export_saved_lists_task( - job_id=self.job.id, no_children=False - ) - - self.job.refresh_from_db() - self.assertIsNotNone(self.job.export_json["saved_lists"]) self.assertEqual( self.job.export_json["saved_lists"][0], self.saved_list.remote_id @@ -220,60 +195,21 @@ class BookwyrmExportJob(TestCase): def test_export_follows_task(self): """test export_follows_task adds the follows""" - - models.bookwyrm_export_job.export_follows_task( - job_id=self.job.id, no_children=False - ) - - self.job.refresh_from_db() - self.assertIsNotNone(self.job.export_json["follows"]) self.assertEqual(self.job.export_json["follows"][0], self.rat_user.remote_id) def test_export_blocks_task(self): - """test export_blocks_task adds the blocks""" - - models.bookwyrm_export_job.export_blocks_task( - job_id=self.job.id, no_children=False - ) - - self.job.refresh_from_db() - self.assertIsNotNone(self.job.export_json["blocks"]) self.assertEqual(self.job.export_json["blocks"][0], self.badger_user.remote_id) def test_export_reading_goals_task(self): """test export_reading_goals_task adds the goals""" - - models.bookwyrm_export_job.export_reading_goals_task( - job_id=self.job.id, no_children=False - ) - - self.job.refresh_from_db() - self.assertIsNotNone(self.job.export_json["goals"]) self.assertEqual(self.job.export_json["goals"][0]["goal"], 128937123) def test_json_export(self): """test json_export job adds settings""" - - with patch( - "bookwyrm.models.bookwyrm_export_job.export_saved_lists_task.delay" - ), patch( - "bookwyrm.models.bookwyrm_export_job.export_follows_task.delay" - ), patch( - "bookwyrm.models.bookwyrm_export_job.export_blocks_task.delay" - ), patch( - "bookwyrm.models.bookwyrm_export_job.trigger_books_jobs.delay" - ): - - models.bookwyrm_export_job.json_export( - job_id=self.job.id, no_children=False - ) - - self.job.refresh_from_db() - self.assertIsNotNone(self.job.export_json["settings"]) self.assertFalse(self.job.export_json["settings"]["show_goal"]) self.assertEqual( From c6ca547d58c1c0bd1d2f378495507a068eba66ea Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 27 Mar 2024 20:41:59 +0100 Subject: [PATCH 417/458] Fix migration formatting --- bookwyrm/migrations/0200_auto_20240327_1914.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bookwyrm/migrations/0200_auto_20240327_1914.py b/bookwyrm/migrations/0200_auto_20240327_1914.py index 44d84a13e..38180b3f9 100644 --- a/bookwyrm/migrations/0200_auto_20240327_1914.py +++ b/bookwyrm/migrations/0200_auto_20240327_1914.py @@ -6,22 +6,22 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0199_merge_20240326_1217'), + ("bookwyrm", "0199_merge_20240326_1217"), ] operations = [ migrations.RemoveField( - model_name='addfiletotar', - name='childjob_ptr', + model_name="addfiletotar", + name="childjob_ptr", ), migrations.RemoveField( - model_name='addfiletotar', - name='parent_export_job', + model_name="addfiletotar", + name="parent_export_job", ), migrations.DeleteModel( - name='AddBookToUserExportJob', + name="AddBookToUserExportJob", ), migrations.DeleteModel( - name='AddFileToTar', + name="AddFileToTar", ), ] From cdbc1d172c00c30a4579c98bd38d51e0690330c9 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 27 Mar 2024 23:27:19 +0100 Subject: [PATCH 418/458] Fix double exports subdir in S3 user export --- bookwyrm/models/bookwyrm_export_job.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 7a0c1100c..35226c6a4 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -99,6 +99,7 @@ def create_archive_task(job_id): try: export_task_id = job.task_id + archive_filename = f"{export_task_id}.tar.gz" export_json_bytes = DjangoJSONEncoder().encode(job.export_json).encode("utf-8") user = job.user @@ -109,10 +110,9 @@ def create_archive_task(job_id): storage = S3Boto3Storage() # Handle for creating the final archive - s3_archive_path = f"exports/{export_task_id}.tar.gz" s3_tar = S3Tar( settings.AWS_STORAGE_BUCKET_NAME, - s3_archive_path, + f"exports/{archive_filename}", session=BookwyrmAwsSession(), ) @@ -135,14 +135,14 @@ def create_archive_task(job_id): # Create archive and store file name s3_tar.tar() - job.export_data = s3_archive_path + job.export_data = archive_filename job.save(update_fields=["export_data"]) # Delete temporary files S3Boto3Storage.delete(storage, export_json_tmp_file) else: - job.export_data = f"{export_task_id}.tar.gz" + job.export_data = archive_filename with job.export_data.open("wb") as tar_file: with BookwyrmTarFile.open(mode="w:gz", fileobj=tar_file) as tar: # save json file From dabf7c6e10084181765cc1356e8b099d29ee0742 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 28 Mar 2024 13:09:21 +0100 Subject: [PATCH 419/458] User export testing fixes --- bookwyrm/models/bookwyrm_export_job.py | 74 ++++++++++++++++---------- bookwyrm/utils/tar.py | 15 +++--- 2 files changed, 53 insertions(+), 36 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 35226c6a4..09f064ea2 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -1,11 +1,10 @@ """Export user account to tar.gz file for import into another Bookwyrm instance""" import logging -from urllib.parse import urlparse, unquote +import os from boto3.session import Session as BotoSession from s3_tar import S3Tar -from storages.backends.s3boto3 import S3Boto3Storage from django.db.models import BooleanField, FileField, JSONField from django.db.models import Q @@ -13,7 +12,7 @@ from django.core.serializers.json import DjangoJSONEncoder from django.core.files.base import ContentFile from django.utils.module_loading import import_string -from bookwyrm import settings +from bookwyrm import settings, storage_backends from bookwyrm.models import AnnualGoal, ReadThrough, ShelfBook, ListItem from bookwyrm.models import Review, Comment, Quotation @@ -55,12 +54,6 @@ class BookwyrmExportJob(ParentJob): self.save(update_fields=["task_id"]) -def url2relativepath(url: str) -> str: - """turn an absolute URL into a relative filesystem path""" - parsed = urlparse(url) - return unquote(parsed.path[1:]) - - @app.task(queue=IMPORTS) def create_export_json_task(job_id): """create the JSON data for the export""" @@ -87,6 +80,22 @@ def create_export_json_task(job_id): job.set_status("failed") +def archive_file_location(file, directory="") -> str: + """get the relative location of a file inside the archive""" + return os.path.join(directory, file.name) + + +def add_file_to_s3_tar(s3_tar: S3Tar, storage, file, directory=""): + """ + add file to S3Tar inside directory, keeping any directories under its + storage location + """ + s3_tar.add_file( + os.path.join(storage.location, file.name), + folder=os.path.dirname(archive_file_location(file, directory=directory)), + ) + + @app.task(queue=IMPORTS) def create_archive_task(job_id): """create the archive containing the JSON file and additional files""" @@ -98,7 +107,7 @@ def create_archive_task(job_id): return try: - export_task_id = job.task_id + export_task_id = str(job.task_id) archive_filename = f"{export_task_id}.tar.gz" export_json_bytes = DjangoJSONEncoder().encode(job.export_json).encode("utf-8") @@ -106,32 +115,39 @@ def create_archive_task(job_id): editions = get_books_for_user(user) if settings.USE_S3: - # Connection for writing temporary files - storage = S3Boto3Storage() + # Storage for writing temporary files + exports_storage = storage_backends.ExportsS3Storage() # Handle for creating the final archive s3_tar = S3Tar( - settings.AWS_STORAGE_BUCKET_NAME, - f"exports/{archive_filename}", + exports_storage.bucket_name, + os.path.join(exports_storage.location, archive_filename), session=BookwyrmAwsSession(), ) # Save JSON file to a temporary location - export_json_tmp_file = f"exports/{export_task_id}/archive.json" - S3Boto3Storage.save( - storage, + export_json_tmp_file = os.path.join(export_task_id, "archive.json") + exports_storage.save( export_json_tmp_file, ContentFile(export_json_bytes), ) - s3_tar.add_file(export_json_tmp_file) + s3_tar.add_file( + os.path.join(exports_storage.location, export_json_tmp_file) + ) + + # Add images to TAR + images_storage = storage_backends.ImagesStorage() - # Add avatar image if present if user.avatar: - s3_tar.add_file(f"images/{user.avatar.name}") + add_file_to_s3_tar( + s3_tar, images_storage, user.avatar, directory="images" + ) for edition in editions: if edition.cover: - s3_tar.add_file(f"images/{edition.cover.name}") + add_file_to_s3_tar( + s3_tar, images_storage, edition.cover, directory="images" + ) # Create archive and store file name s3_tar.tar() @@ -139,7 +155,7 @@ def create_archive_task(job_id): job.save(update_fields=["export_data"]) # Delete temporary files - S3Boto3Storage.delete(storage, export_json_tmp_file) + exports_storage.delete(export_json_tmp_file) else: job.export_data = archive_filename @@ -150,11 +166,11 @@ def create_archive_task(job_id): # Add avatar image if present if user.avatar: - tar.add_image(user.avatar, directory="images/") + tar.add_image(user.avatar, directory="images") for edition in editions: if edition.cover: - tar.add_image(edition.cover, directory="images/") + tar.add_image(edition.cover, directory="images") job.save(update_fields=["export_data"]) job.set_status("completed") @@ -179,8 +195,8 @@ def export_json(user: User): def export_user(user: User): """export user data""" data = user.to_activity() - if data.get("icon", False): - data["icon"]["url"] = url2relativepath(data["icon"]["url"]) + if user.avatar: + data["icon"]["url"] = archive_file_location(user.avatar, directory="images") else: data["icon"] = {} return data @@ -237,9 +253,9 @@ def export_book(user: User, edition: Edition): data["work"] = edition.parent_work.to_activity() data["edition"] = edition.to_activity() - if data["edition"].get("cover", False): - data["edition"]["cover"]["url"] = url2relativepath( - data["edition"]["cover"]["url"] + if edition.cover: + data["edition"]["cover"]["url"] = archive_file_location( + edition.cover, directory="images" ) # authors diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index bae3f7628..6b78b1a99 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -1,5 +1,6 @@ """manage tar files for user exports""" import io +import os import tarfile from typing import Any, Optional from uuid import uuid4 @@ -24,13 +25,13 @@ class BookwyrmTarFile(tarfile.TarFile): :param str filename: overrides the file name set by image :param str directory: the directory in the archive to put the image """ - if filename is not None: - file_type = image.name.rsplit(".", maxsplit=1)[-1] - filename = f"{directory}{filename}.{file_type}" + if filename is None: + filename = image.name else: - filename = f"{directory}{image.name}" + filename += os.path.splitext(image.name)[1] + path = os.path.join(directory, filename) - info = tarfile.TarInfo(name=filename) + info = tarfile.TarInfo(name=path) info.size = image.size self.addfile(info, fileobj=image) @@ -43,7 +44,7 @@ class BookwyrmTarFile(tarfile.TarFile): def write_image_to_file(self, filename: str, file_field: Any) -> None: """add an image to the tar""" - extension = filename.rsplit(".")[-1] + extension = os.path.splitext(filename)[1] if buf := self.extractfile(filename): - filename = f"{str(uuid4())}.{extension}" + filename = str(uuid4()) + extension file_field.save(filename, File(buf)) From bb5d8152f154e5d600ef381bd07a73423addd258 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 28 Mar 2024 13:21:30 +0100 Subject: [PATCH 420/458] Fix mypy error --- bookwyrm/utils/tar.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bookwyrm/utils/tar.py b/bookwyrm/utils/tar.py index 6b78b1a99..70fdc38f1 100644 --- a/bookwyrm/utils/tar.py +++ b/bookwyrm/utils/tar.py @@ -18,7 +18,7 @@ class BookwyrmTarFile(tarfile.TarFile): self.addfile(info, fileobj=buffer) def add_image( - self, image: Any, filename: Optional[str] = None, directory: Any = "" + self, image: Any, filename: Optional[str] = None, directory: str = "" ) -> None: """ Add an image to the tar archive @@ -26,12 +26,12 @@ class BookwyrmTarFile(tarfile.TarFile): :param str directory: the directory in the archive to put the image """ if filename is None: - filename = image.name + dst_filename = image.name else: - filename += os.path.splitext(image.name)[1] - path = os.path.join(directory, filename) + dst_filename = filename + os.path.splitext(image.name)[1] + dst_path = os.path.join(directory, dst_filename) - info = tarfile.TarInfo(name=path) + info = tarfile.TarInfo(name=dst_path) info.size = image.size self.addfile(info, fileobj=image) From 2bbe3d4c325ef7ace4353940a12b676da07a2f2f Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 28 Mar 2024 13:50:55 +0100 Subject: [PATCH 421/458] Test user export archive contents --- .../tests/models/test_bookwyrm_export_job.py | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index 654ecec9e..46c9bff56 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -1,17 +1,15 @@ """test bookwyrm user export functions""" import datetime -from io import BytesIO +import json import pathlib from unittest.mock import patch -from PIL import Image - -from django.core.files.base import ContentFile from django.utils import timezone from django.test import TestCase from bookwyrm import models +from bookwyrm.utils.tar import BookwyrmTarFile class BookwyrmExportJob(TestCase): @@ -47,6 +45,11 @@ class BookwyrmExportJob(TestCase): preferred_timezone="America/Los Angeles", default_post_privacy="followers", ) + avatar_path = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + with open(avatar_path, "rb") as avatar_file: + self.local_user.avatar.save("mouse-avatar.jpg", avatar_file) self.rat_user = models.User.objects.create_user( "rat", "rat@rat.rat", "ratword", local=True, localname="rat" @@ -93,13 +96,11 @@ class BookwyrmExportJob(TestCase): ) # edition cover - image_file = pathlib.Path(__file__).parent.joinpath( + cover_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) - self.edition.cover.save("tĆØst.jpg", ContentFile(output.getvalue())) + with open(cover_path, "rb") as cover_file: + self.edition.cover.save("tĆØst.jpg", cover_file) self.edition.authors.add(self.author) @@ -228,3 +229,28 @@ class BookwyrmExportJob(TestCase): self.assertEqual(len(data), 1) self.assertEqual(data[0].title, "Example Edition") + + def test_archive(self): + """actually create the TAR file""" + models.bookwyrm_export_job.create_archive_task(job_id=self.job.id) + self.job.refresh_from_db() + + with self.job.export_data.open("rb") as tar_file: + with BookwyrmTarFile.open(mode="r", fileobj=tar_file) as tar: + archive_json_file = tar.extractfile("archive.json") + data = json.load(archive_json_file) + + # JSON from the archive should be what we want it to be + self.assertEqual(data, self.job.export_json) + + # User avatar should be present in archive + with self.local_user.avatar.open() as expected_avatar: + archive_avatar = tar.extractfile(data["icon"]["url"]) + self.assertEqual(expected_avatar.read(), archive_avatar.read()) + + # Edition cover should be present in archive + with self.edition.cover.open() as expected_cover: + archive_cover = tar.extractfile( + data["books"][0]["edition"]["cover"]["url"] + ) + self.assertEqual(expected_cover.read(), archive_cover.read()) From 2272e7a326c751f55d4c37150fee8b346218e501 Mon Sep 17 00:00:00 2001 From: Anthony Date: Fri, 29 Mar 2024 12:07:52 +0100 Subject: [PATCH 422/458] flower 2.0.1 fixes a few link bugs (particularly for favicon) --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6b3d838bf..81975fc4d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ django-sass-processor==1.2.2 django-storages==1.13.2 django-storages[azure] environs==9.5.0 -flower==2.0.0 +flower==2.0.1 grpcio==1.57.0 # Not a direct dependency, pinned to get a security fix libsass==0.22.0 Markdown==3.4.1 From 5d597f1ca96659418f9fc4e68a81773cad7e0517 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Fri, 29 Mar 2024 14:25:08 +0100 Subject: [PATCH 423/458] Use new "with ()" style --- .../tests/models/test_bookwyrm_export_job.py | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/bookwyrm/tests/models/test_bookwyrm_export_job.py b/bookwyrm/tests/models/test_bookwyrm_export_job.py index a02cfe052..29a2a07c1 100644 --- a/bookwyrm/tests/models/test_bookwyrm_export_job.py +++ b/bookwyrm/tests/models/test_bookwyrm_export_job.py @@ -233,22 +233,24 @@ class BookwyrmExportJob(TestCase): models.bookwyrm_export_job.create_archive_task(job_id=self.job.id) self.job.refresh_from_db() - with self.job.export_data.open("rb") as tar_file: - with BookwyrmTarFile.open(mode="r", fileobj=tar_file) as tar: - archive_json_file = tar.extractfile("archive.json") - data = json.load(archive_json_file) + with ( + self.job.export_data.open("rb") as tar_file, + BookwyrmTarFile.open(mode="r", fileobj=tar_file) as tar, + ): + archive_json_file = tar.extractfile("archive.json") + data = json.load(archive_json_file) - # JSON from the archive should be what we want it to be - self.assertEqual(data, self.job.export_json) + # JSON from the archive should be what we want it to be + self.assertEqual(data, self.job.export_json) - # User avatar should be present in archive - with self.local_user.avatar.open() as expected_avatar: - archive_avatar = tar.extractfile(data["icon"]["url"]) - self.assertEqual(expected_avatar.read(), archive_avatar.read()) + # User avatar should be present in archive + with self.local_user.avatar.open() as expected_avatar: + archive_avatar = tar.extractfile(data["icon"]["url"]) + self.assertEqual(expected_avatar.read(), archive_avatar.read()) - # Edition cover should be present in archive - with self.edition.cover.open() as expected_cover: - archive_cover = tar.extractfile( - data["books"][0]["edition"]["cover"]["url"] - ) - self.assertEqual(expected_cover.read(), archive_cover.read()) + # Edition cover should be present in archive + with self.edition.cover.open() as expected_cover: + archive_cover = tar.extractfile( + data["books"][0]["edition"]["cover"]["url"] + ) + self.assertEqual(expected_cover.read(), archive_cover.read()) From 75bc4f8cb0d62acbdafe33d4a56d724da9909393 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Fri, 29 Mar 2024 15:04:38 +0100 Subject: [PATCH 424/458] Make nginx config safer Instead of allowing all image files anywhere, and disallowing non-image file under /images/, only allow image files under /images/ and don't match non-image files elsewhere. They get proxied to web instead and result in a 404 there. For example, the old config allowed /exports/foo.jpg to be served, while the new config does not. --- nginx/development | 19 +++++++++---------- nginx/production | 21 ++++++++++----------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/nginx/development b/nginx/development index 2c3a1d02f..f7443968c 100644 --- a/nginx/development +++ b/nginx/development @@ -64,7 +64,7 @@ server { # directly serve static files from the # bookwyrm filesystem using sendfile. # make the logs quieter by not reporting these requests - location ~ ^/static/ { + location /static/ { root /app; try_files $uri =404; add_header X-Cache-Status STATIC; @@ -72,15 +72,14 @@ server { } # 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/ { + location /images/ { + 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 return 403; } diff --git a/nginx/production b/nginx/production index 841ed8afa..a5e910b4b 100644 --- a/nginx/production +++ b/nginx/production @@ -96,23 +96,22 @@ server { # # directly serve static files from the # # bookwyrm filesystem using sendfile. # # make the logs quieter by not reporting these requests -# location ~ ^/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/ { +# location /images/ { +# 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 # return 403; # } # From ffee29d8e2d5c8c430520ac666b5083c75b16499 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Fri, 29 Mar 2024 15:45:35 +0100 Subject: [PATCH 425/458] Fix resource leaks Rewrite places where files (or other resources) are opened but not closed to "with" blocks, which automatically call close() at the end of the scope. Also simplify some tests where images need to be saved to a model field: an opened file can be passed directly to FileField.save(). --- bookwyrm/preview_images.py | 48 +++++++++--------- bookwyrm/settings.py | 1 - .../tests/activitypub/test_base_activity.py | 10 ++-- .../tests/importers/test_calibre_import.py | 6 ++- .../tests/importers/test_goodreads_import.py | 6 ++- bookwyrm/tests/importers/test_importer.py | 6 ++- .../importers/test_librarything_import.py | 6 ++- .../importers/test_openlibrary_import.py | 6 ++- .../tests/importers/test_storygraph_import.py | 6 ++- bookwyrm/tests/models/test_book_model.py | 11 ++--- bookwyrm/tests/models/test_fields.py | 49 +++++++------------ bookwyrm/tests/models/test_status_model.py | 15 +++--- bookwyrm/tests/test_preview_images.py | 17 ++++--- bookwyrm/tests/views/admin/test_federation.py | 8 +-- bookwyrm/tests/views/books/test_book.py | 30 +++++------- bookwyrm/tests/views/imports/test_import.py | 14 +++--- .../tests/views/imports/test_user_import.py | 14 +++--- .../tests/views/preferences/test_edit_user.py | 20 ++++---- bookwyrm/tests/views/test_feed.py | 11 ++--- 19 files changed, 135 insertions(+), 149 deletions(-) diff --git a/bookwyrm/preview_images.py b/bookwyrm/preview_images.py index 995f25bfd..a213490ab 100644 --- a/bookwyrm/preview_images.py +++ b/bookwyrm/preview_images.py @@ -175,11 +175,13 @@ def generate_instance_layer(content_width): site = models.SiteSettings.objects.get() if site.logo_small: - logo_img = Image.open(site.logo_small) + with Image.open(site.logo_small) as logo_img: + logo_img.load() else: try: static_path = os.path.join(settings.STATIC_ROOT, "images/logo-small.png") - logo_img = Image.open(static_path) + with Image.open(static_path) as logo_img: + logo_img.load() except FileNotFoundError: logo_img = None @@ -211,18 +213,9 @@ def generate_instance_layer(content_width): def generate_rating_layer(rating, content_width): """Places components for rating preview""" - try: - icon_star_full = Image.open( - os.path.join(settings.STATIC_ROOT, "images/icons/star-full.png") - ) - icon_star_empty = Image.open( - os.path.join(settings.STATIC_ROOT, "images/icons/star-empty.png") - ) - icon_star_half = Image.open( - os.path.join(settings.STATIC_ROOT, "images/icons/star-half.png") - ) - except FileNotFoundError: - return None + path_star_full = os.path.join(settings.STATIC_ROOT, "images/icons/star-full.png") + path_star_empty = os.path.join(settings.STATIC_ROOT, "images/icons/star-empty.png") + path_star_half = os.path.join(settings.STATIC_ROOT, "images/icons/star-half.png") icon_size = 64 icon_margin = 10 @@ -237,17 +230,23 @@ def generate_rating_layer(rating, content_width): position_x = 0 - for _ in range(math.floor(rating)): - rating_layer_mask.alpha_composite(icon_star_full, (position_x, 0)) - position_x = position_x + icon_size + icon_margin + try: + with Image.open(path_star_full) as icon_star_full: + for _ in range(math.floor(rating)): + rating_layer_mask.alpha_composite(icon_star_full, (position_x, 0)) + position_x = position_x + icon_size + icon_margin - if math.floor(rating) != math.ceil(rating): - rating_layer_mask.alpha_composite(icon_star_half, (position_x, 0)) - position_x = position_x + icon_size + icon_margin + if math.floor(rating) != math.ceil(rating): + with Image.open(path_star_half) as icon_star_half: + rating_layer_mask.alpha_composite(icon_star_half, (position_x, 0)) + position_x = position_x + icon_size + icon_margin - for _ in range(5 - math.ceil(rating)): - rating_layer_mask.alpha_composite(icon_star_empty, (position_x, 0)) - position_x = position_x + icon_size + icon_margin + with Image.open(path_star_empty) as icon_star_empty: + for _ in range(5 - math.ceil(rating)): + rating_layer_mask.alpha_composite(icon_star_empty, (position_x, 0)) + position_x = position_x + icon_size + icon_margin + except FileNotFoundError: + return None rating_layer_mask = rating_layer_mask.getchannel("A") rating_layer_mask = ImageOps.invert(rating_layer_mask) @@ -290,7 +289,8 @@ def generate_preview_image( texts = texts or {} # Cover try: - inner_img_layer = Image.open(picture) + with Image.open(picture) as inner_img_layer: + inner_img_layer.load() inner_img_layer.thumbnail( (inner_img_width, inner_img_height), Image.Resampling.LANCZOS ) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 77bec0d8e..28d78a3da 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -19,7 +19,6 @@ DOMAIN = env("DOMAIN") with open("VERSION", encoding="utf-8") as f: version = f.read() version = version.replace("\n", "") -f.close() VERSION = version diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index b529f6ae5..a545beb3e 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -1,12 +1,10 @@ """ tests the base functionality for activitypub dataclasses """ -from io import BytesIO import json import pathlib from unittest.mock import patch from dataclasses import dataclass from django.test import TestCase -from PIL import Image import responses from bookwyrm import activitypub @@ -48,13 +46,11 @@ class BaseActivity(TestCase): # don't try to load the user icon del self.userdata["icon"] - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) - self.image_data = output.getvalue() + with open(image_path, "rb") as image_file: + self.image_data = image_file.read() def test_get_representative_not_existing(self, *_): """test that an instance representative actor is created if it does not exist""" diff --git a/bookwyrm/tests/importers/test_calibre_import.py b/bookwyrm/tests/importers/test_calibre_import.py index dcbe68c64..d7947e65e 100644 --- a/bookwyrm/tests/importers/test_calibre_import.py +++ b/bookwyrm/tests/importers/test_calibre_import.py @@ -9,7 +9,6 @@ from bookwyrm.importers import CalibreImporter from bookwyrm.models.import_job import handle_imported_book -# pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @@ -20,8 +19,13 @@ class CalibreImport(TestCase): """use a test csv""" self.importer = CalibreImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/calibre.csv") + # pylint: disable-next=consider-using-with self.csv = open(datafile, "r", encoding=self.importer.encoding) + def tearDown(self): + """close test csv""" + self.csv.close() + @classmethod def setUpTestData(cls): """populate database""" diff --git a/bookwyrm/tests/importers/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py index f0b67cffd..79d58085c 100644 --- a/bookwyrm/tests/importers/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -16,7 +16,6 @@ def make_date(*args): return datetime.datetime(*args, tzinfo=pytz.UTC) -# pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @@ -27,8 +26,13 @@ class GoodreadsImport(TestCase): """use a test csv""" self.importer = GoodreadsImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") + # pylint: disable-next=consider-using-with self.csv = open(datafile, "r", encoding=self.importer.encoding) + def tearDown(self): + """close test csv""" + self.csv.close() + @classmethod def setUpTestData(cls): """populate database""" diff --git a/bookwyrm/tests/importers/test_importer.py b/bookwyrm/tests/importers/test_importer.py index ea10d0f53..39aac22ff 100644 --- a/bookwyrm/tests/importers/test_importer.py +++ b/bookwyrm/tests/importers/test_importer.py @@ -19,7 +19,6 @@ def make_date(*args): return datetime.datetime(*args, tzinfo=pytz.UTC) -# pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @@ -30,8 +29,13 @@ class GenericImporter(TestCase): """use a test csv""" self.importer = Importer() datafile = pathlib.Path(__file__).parent.joinpath("../data/generic.csv") + # pylint: disable-next=consider-using-with self.csv = open(datafile, "r", encoding=self.importer.encoding) + def tearDown(self): + """close test csv""" + self.csv.close() + @classmethod def setUpTestData(cls): """populate database""" diff --git a/bookwyrm/tests/importers/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py index 280131115..4d78d242a 100644 --- a/bookwyrm/tests/importers/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -16,7 +16,6 @@ def make_date(*args): return datetime.datetime(*args, tzinfo=pytz.UTC) -# pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @@ -29,8 +28,13 @@ class LibrarythingImport(TestCase): datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") # Librarything generates latin encoded exports... + # pylint: disable-next=consider-using-with self.csv = open(datafile, "r", encoding=self.importer.encoding) + def tearDown(self): + """close test csv""" + self.csv.close() + @classmethod def setUpTestData(cls): """populate database""" diff --git a/bookwyrm/tests/importers/test_openlibrary_import.py b/bookwyrm/tests/importers/test_openlibrary_import.py index 05bab0cc2..8f2f120ff 100644 --- a/bookwyrm/tests/importers/test_openlibrary_import.py +++ b/bookwyrm/tests/importers/test_openlibrary_import.py @@ -16,7 +16,6 @@ def make_date(*args): return datetime.datetime(*args, tzinfo=pytz.UTC) -# pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @@ -27,8 +26,13 @@ class OpenLibraryImport(TestCase): """use a test csv""" self.importer = OpenLibraryImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/openlibrary.csv") + # pylint: disable-next=consider-using-with self.csv = open(datafile, "r", encoding=self.importer.encoding) + def tearDown(self): + """close test csv""" + self.csv.close() + @classmethod def setUpTestData(cls): """populate database""" diff --git a/bookwyrm/tests/importers/test_storygraph_import.py b/bookwyrm/tests/importers/test_storygraph_import.py index eee27010c..3de2b13a0 100644 --- a/bookwyrm/tests/importers/test_storygraph_import.py +++ b/bookwyrm/tests/importers/test_storygraph_import.py @@ -16,7 +16,6 @@ def make_date(*args): return datetime.datetime(*args, tzinfo=pytz.UTC) -# pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @@ -27,8 +26,13 @@ class StorygraphImport(TestCase): """use a test csv""" self.importer = StorygraphImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/storygraph.csv") + # pylint: disable-next=consider-using-with self.csv = open(datafile, "r", encoding=self.importer.encoding) + def tearDown(self): + """close test csv""" + self.csv.close() + @classmethod def setUpTestData(cls): """populate database""" diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index c40c94294..5b2b71ba9 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -1,12 +1,9 @@ """ testing models """ -from io import BytesIO import pathlib import pytest from dateutil.parser import parse -from PIL import Image -from django.core.files.base import ContentFile from django.test import TestCase from django.utils import timezone @@ -130,15 +127,13 @@ class Book(TestCase): ) def test_thumbnail_fields(self): """Just hit them""" - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) book = models.Edition.objects.create(title="hello") - book.cover.save("test.jpg", ContentFile(output.getvalue())) + with open(image_path, "rb") as image_file: + book.cover.save("test.jpg", image_file) self.assertIsNotNone(book.cover_bw_book_xsmall_webp.url) self.assertIsNotNone(book.cover_bw_book_xsmall_jpg.url) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index cc8c54113..2917c8908 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -1,5 +1,4 @@ """ testing models """ -from io import BytesIO from collections import namedtuple from dataclasses import dataclass import datetime @@ -10,7 +9,6 @@ from typing import List from unittest import expectedFailure from unittest.mock import patch -from PIL import Image import responses from django.core.exceptions import ValidationError @@ -420,13 +418,11 @@ class ModelFields(TestCase): user = User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) - user.avatar.save("test.jpg", ContentFile(output.getvalue())) + with open(image_path, "rb") as image_file: + user.avatar.save("test.jpg", image_file) instance = fields.ImageField() @@ -516,30 +512,25 @@ class ModelFields(TestCase): @responses.activate def test_image_field_set_field_from_activity_no_overwrite_with_cover(self, *_): """update a model instance from an activitypub object""" - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) - - another_image_file = pathlib.Path(__file__).parent.joinpath( + another_image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/logo.png" ) - another_image = Image.open(another_image_file) - another_output = BytesIO() - another_image.save(another_output, format=another_image.format) instance = fields.ImageField(activitypub_field="cover", name="cover") - responses.add( - responses.GET, - "http://www.example.com/image.jpg", - body=another_image.tobytes(), - status=200, - ) + with open(another_image_path, "rb") as another_image_file: + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=another_image_file.read(), + status=200, + ) book = Edition.objects.create(title="hello") - book.cover.save("test.jpg", ContentFile(output.getvalue())) + with open(image_path, "rb") as image_file: + book.cover.save("test.jpg", image_file) cover_size = book.cover.size self.assertIsNotNone(cover_size) @@ -553,24 +544,22 @@ class ModelFields(TestCase): @responses.activate def test_image_field_set_field_from_activity_with_overwrite_with_cover(self, *_): """update a model instance from an activitypub object""" - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) book = Edition.objects.create(title="hello") - book.cover.save("test.jpg", ContentFile(output.getvalue())) + with open(image_path, "rb") as image_file: + book.cover.save("test.jpg", image_file) cover_size = book.cover.size self.assertIsNotNone(cover_size) - another_image_file = pathlib.Path(__file__).parent.joinpath( + another_image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/logo.png" ) instance = fields.ImageField(activitypub_field="cover", name="cover") - with open(another_image_file, "rb") as another_image: + with open(another_image_path, "rb") as another_image: responses.add( responses.GET, "http://www.example.com/image.jpg", diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index bd2853595..e97febbfa 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -1,16 +1,13 @@ """ testing models """ from unittest.mock import patch -from io import BytesIO import pathlib import re from django.http import Http404 -from django.core.files.base import ContentFile from django.db import IntegrityError from django.contrib.auth.models import AnonymousUser from django.test import TestCase from django.utils import timezone -from PIL import Image import responses from bookwyrm import activitypub, models, settings @@ -51,14 +48,14 @@ class Status(TestCase): """individual test setup""" self.anonymous_user = AnonymousUser self.anonymous_user.is_authenticated = False - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - with patch("bookwyrm.models.Status.broadcast"): - image.save(output, format=image.format) - self.book.cover.save("test.jpg", ContentFile(output.getvalue())) + with ( + patch("bookwyrm.models.Status.broadcast"), + open(image_path, "rb") as image_file, + ): + self.book.cover.save("test.jpg", image_file) def test_status_generated_fields(self, *_): """setting remote id""" diff --git a/bookwyrm/tests/test_preview_images.py b/bookwyrm/tests/test_preview_images.py index 4f711b38b..12fb56d07 100644 --- a/bookwyrm/tests/test_preview_images.py +++ b/bookwyrm/tests/test_preview_images.py @@ -21,20 +21,20 @@ from bookwyrm.preview_images import ( # pylint: disable=unused-argument # pylint: disable=missing-function-docstring -# pylint: disable=consider-using-with class PreviewImages(TestCase): """every response to a get request, html or json""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - avatar_file = pathlib.Path(__file__).parent.joinpath( + avatar_path = pathlib.Path(__file__).parent.joinpath( "../static/images/no_cover.jpg" ) with ( patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), + open(avatar_path, "rb") as avatar_file, ): self.local_user = models.User.objects.create_user( "possum@local.com", @@ -43,8 +43,8 @@ class PreviewImages(TestCase): local=True, localname="possum", avatar=SimpleUploadedFile( - avatar_file, - open(avatar_file, "rb").read(), + avatar_path, + avatar_file.read(), content_type="image/jpeg", ), ) @@ -68,6 +68,7 @@ class PreviewImages(TestCase): patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch("bookwyrm.lists_stream.populate_lists_task.delay"), + open(avatar_path, "rb") as avatar_file, ): self.remote_user_with_preview = models.User.objects.create_user( "badger@your.domain.here", @@ -78,8 +79,8 @@ class PreviewImages(TestCase): inbox="https://example.com/users/badger/inbox", outbox="https://example.com/users/badger/outbox", avatar=SimpleUploadedFile( - avatar_file, - open(avatar_file, "rb").read(), + avatar_path, + avatar_file.read(), content_type="image/jpeg", ), ) @@ -96,7 +97,7 @@ class PreviewImages(TestCase): settings.ENABLE_PREVIEW_IMAGES = True def test_generate_preview_image(self, *args, **kwargs): - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../static/images/no_cover.jpg" ) @@ -105,7 +106,7 @@ class PreviewImages(TestCase): "text_three": "@possum@local.com", } - result = generate_preview_image(texts=texts, picture=image_file, rating=5) + result = generate_preview_image(texts=texts, picture=image_path, rating=5) self.assertIsInstance(result, Image.Image) self.assertEqual( result.size, (settings.PREVIEW_IMG_WIDTH, settings.PREVIEW_IMG_HEIGHT) diff --git a/bookwyrm/tests/views/admin/test_federation.py b/bookwyrm/tests/views/admin/test_federation.py index 1d0012dde..6dcd5535f 100644 --- a/bookwyrm/tests/views/admin/test_federation.py +++ b/bookwyrm/tests/views/admin/test_federation.py @@ -1,5 +1,4 @@ """ test for app action functionality """ -import os import json from unittest.mock import patch @@ -179,7 +178,6 @@ class FederationViews(TestCase): self.assertEqual(server.application_type, "coolsoft") self.assertEqual(server.status, "blocked") - # pylint: disable=consider-using-with def test_import_blocklist(self): """load a json file with a list of servers to block""" server = models.FederatedServer.objects.create(server_name="hi.there.com") @@ -191,14 +189,13 @@ class FederationViews(TestCase): {"instance": "hi.there.com", "url": "https://explanation.url"}, # existing {"a": "b"}, # invalid ] - json.dump(data, open("file.json", "w")) # pylint: disable=unspecified-encoding view = views.ImportServerBlocklist.as_view() request = self.factory.post( "", { "json_file": SimpleUploadedFile( - "file.json", open("file.json", "rb").read() + "file.json", json.dumps(data).encode("utf-8") ) }, ) @@ -214,6 +211,3 @@ class FederationViews(TestCase): created = models.FederatedServer.objects.get(server_name="server.name") self.assertEqual(created.status, "blocked") self.assertEqual(created.notes, "https://explanation.url") - - # remove file.json after test - os.remove("file.json") diff --git a/bookwyrm/tests/views/books/test_book.py b/bookwyrm/tests/views/books/test_book.py index cb66811a1..ee6e7d8b4 100644 --- a/bookwyrm/tests/views/books/test_book.py +++ b/bookwyrm/tests/views/books/test_book.py @@ -1,8 +1,6 @@ """ test for app action functionality """ -from io import BytesIO import pathlib from unittest.mock import patch -from PIL import Image import responses @@ -161,15 +159,15 @@ class BookViews(TestCase): def test_upload_cover_file(self): """add a cover via file upload""" self.assertFalse(self.book.cover) - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../../static/images/default_avi.jpg" ) form = forms.CoverForm(instance=self.book) - # pylint: disable=consider-using-with - form.data["cover"] = SimpleUploadedFile( - image_file, open(image_file, "rb").read(), content_type="image/jpeg" - ) + with open(image_path, "rb") as image_file: + form.data["cover"] = SimpleUploadedFile( + image_path, image_file.read(), content_type="image/jpeg" + ) request = self.factory.post("", form.data) request.user = self.local_user @@ -296,16 +294,14 @@ class BookViews(TestCase): def _setup_cover_url(): """creates cover url mock""" cover_url = "http://example.com" - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) - responses.add( - responses.GET, - cover_url, - body=output.getvalue(), - status=200, - ) + with open(image_path, "rb") as image_file: + responses.add( + responses.GET, + cover_url, + body=image_file.read(), + status=200, + ) return cover_url diff --git a/bookwyrm/tests/views/imports/test_import.py b/bookwyrm/tests/views/imports/test_import.py index 658d95a33..f694b7bf5 100644 --- a/bookwyrm/tests/views/imports/test_import.py +++ b/bookwyrm/tests/views/imports/test_import.py @@ -81,13 +81,13 @@ class ImportViews(TestCase): form.data["source"] = "Goodreads" form.data["privacy"] = "public" form.data["include_reviews"] = False - csv_file = pathlib.Path(__file__).parent.joinpath("../../data/goodreads.csv") - form.data["csv_file"] = SimpleUploadedFile( - # pylint: disable=consider-using-with - csv_file, - open(csv_file, "rb").read(), - content_type="text/csv", - ) + csv_path = pathlib.Path(__file__).parent.joinpath("../../data/goodreads.csv") + with open(csv_path, "rb") as csv_file: + form.data["csv_file"] = SimpleUploadedFile( + csv_path, + csv_file.read(), + content_type="text/csv", + ) request = self.factory.post("", form.data) request.user = self.local_user diff --git a/bookwyrm/tests/views/imports/test_user_import.py b/bookwyrm/tests/views/imports/test_user_import.py index 4a676a57f..a8214e74e 100644 --- a/bookwyrm/tests/views/imports/test_user_import.py +++ b/bookwyrm/tests/views/imports/test_user_import.py @@ -47,16 +47,16 @@ class ImportUserViews(TestCase): view = views.UserImport.as_view() form = forms.ImportUserForm() - archive_file = pathlib.Path(__file__).parent.joinpath( + archive_path = pathlib.Path(__file__).parent.joinpath( "../../data/bookwyrm_account_export.tar.gz" ) - form.data["archive_file"] = SimpleUploadedFile( - # pylint: disable=consider-using-with - archive_file, - open(archive_file, "rb").read(), - content_type="application/gzip", - ) + with open(archive_path, "rb") as archive_file: + form.data["archive_file"] = SimpleUploadedFile( + archive_path, + archive_file.read(), + content_type="application/gzip", + ) form.data["include_user_settings"] = "" form.data["include_goals"] = "on" diff --git a/bookwyrm/tests/views/preferences/test_edit_user.py b/bookwyrm/tests/views/preferences/test_edit_user.py index 7872e8f6e..c31c8237e 100644 --- a/bookwyrm/tests/views/preferences/test_edit_user.py +++ b/bookwyrm/tests/views/preferences/test_edit_user.py @@ -96,13 +96,13 @@ class EditUserViews(TestCase): form.data["email"] = "wow@email.com" form.data["default_post_privacy"] = "public" form.data["preferred_timezone"] = "UTC" - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../../static/images/no_cover.jpg" ) - # pylint: disable=consider-using-with - form.data["avatar"] = SimpleUploadedFile( - image_file, open(image_file, "rb").read(), content_type="image/jpeg" - ) + with open(image_path, "rb") as image_file: + form.data["avatar"] = SimpleUploadedFile( + image_path, image_file.read(), content_type="image/jpeg" + ) request = self.factory.post("", form.data) request.user = self.local_user @@ -119,12 +119,12 @@ class EditUserViews(TestCase): def test_crop_avatar(self, _): """reduce that image size""" - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../../static/images/no_cover.jpg" ) - image = Image.open(image_file) - result = views.preferences.edit_user.crop_avatar(image) + with Image.open(image_path) as image: + result = views.preferences.edit_user.crop_avatar(image) self.assertIsInstance(result, ContentFile) - image_result = Image.open(result) - self.assertEqual(image_result.size, (120, 120)) + with Image.open(result) as image_result: + self.assertEqual(image_result.size, (120, 120)) diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index a57be1023..be4956c64 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -1,10 +1,7 @@ """ test for app action functionality """ -from io import BytesIO from unittest.mock import patch import pathlib -from PIL import Image -from django.core.files.base import ContentFile from django.http import Http404 from django.template.response import TemplateResponse from django.test import TestCase @@ -142,12 +139,9 @@ class FeedViews(TestCase): """there are so many views, this just makes sure it LOADS""" view = views.Status.as_view() - image_file = pathlib.Path(__file__).parent.joinpath( + image_path = pathlib.Path(__file__).parent.joinpath( "../../static/images/default_avi.jpg" ) - image = Image.open(image_file) - output = BytesIO() - image.save(output, format=image.format) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): status = models.Review.objects.create( content="hi", @@ -157,7 +151,8 @@ class FeedViews(TestCase): attachment = models.Image.objects.create( status=status, caption="alt text here" ) - attachment.image.save("test.jpg", ContentFile(output.getvalue())) + with open(image_path, "rb") as image_file: + attachment.image.save("test.jpg", image_file) request = self.factory.get("") request.user = self.local_user From fcd0087589d5467eceba4b9fce75e9f52fa9e90d Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Sat, 30 Mar 2024 01:58:41 +0100 Subject: [PATCH 426/458] [FIX] make sure to get Pillow>=10 compatible pilkit --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 81975fc4d..5bb33ae0e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,6 +27,7 @@ opentelemetry-instrumentation-django==0.37b0 opentelemetry-instrumentation-psycopg2==0.37b0 opentelemetry-sdk==1.16.0 Pillow==10.2.0 +pilkit>2.0 # dependency of django-imagekit, 2.0 is incompatible with Pillow>=10 protobuf==3.20.* psycopg2==2.9.5 pycryptodome==3.19.1 From f66695193497adc5b8d864b346c8a013ce359732 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sat, 30 Mar 2024 21:56:41 +0100 Subject: [PATCH 427/458] Update CodeQL workflows to v3 https://github.blog/changelog/2024-01-12-code-scanning-deprecation-of-codeql-action-v2/ --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 51316ef62..014745a52 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -40,7 +40,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -51,7 +51,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ā„¹ļø Command-line programs to run using the OS shell. # šŸ“š https://git.io/JvXDl @@ -65,4 +65,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 From 4bbdd0b2d0f4e97e3f9e50aadff437b11276e1a9 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 2 Apr 2024 21:54:30 +0200 Subject: [PATCH 428/458] Add index on Status.remote_id This field is often used in WHERE-clauses in queries that are very slow on bookwyrm.social. --- ...9_status_bookwyrm_st_remote__06aeba_idx.py | 19 +++++++++++++++++++ bookwyrm/models/status.py | 3 +++ 2 files changed, 22 insertions(+) create mode 100644 bookwyrm/migrations/0199_status_bookwyrm_st_remote__06aeba_idx.py diff --git a/bookwyrm/migrations/0199_status_bookwyrm_st_remote__06aeba_idx.py b/bookwyrm/migrations/0199_status_bookwyrm_st_remote__06aeba_idx.py new file mode 100644 index 000000000..5d2513698 --- /dev/null +++ b/bookwyrm/migrations/0199_status_bookwyrm_st_remote__06aeba_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.25 on 2024-04-02 19:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0198_book_search_vector_author_aliases"), + ] + + operations = [ + migrations.AddIndex( + model_name="status", + index=models.Index( + fields=["remote_id"], name="bookwyrm_st_remote__06aeba_idx" + ), + ), + ] diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index f6235dab6..a9c678cb5 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -80,6 +80,9 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): """default sorting""" ordering = ("-published_date",) + indexes = [ + models.Index(fields=["remote_id"]), + ] def save(self, *args, **kwargs): """save and notify""" From ea0ade955b83c9e0f3d29b0948ffa5699611cc63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Apr 2024 16:45:11 +0000 Subject: [PATCH 429/458] Bump pillow from 10.2.0 to 10.3.0 Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.2.0 to 10.3.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/10.2.0...10.3.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 81975fc4d..218035926 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,7 +26,7 @@ opentelemetry-instrumentation-celery==0.37b0 opentelemetry-instrumentation-django==0.37b0 opentelemetry-instrumentation-psycopg2==0.37b0 opentelemetry-sdk==1.16.0 -Pillow==10.2.0 +Pillow==10.3.0 protobuf==3.20.* psycopg2==2.9.5 pycryptodome==3.19.1 From 5cfe7eca6f3c177cc436812e45dfb03288b5fbc2 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 3 Apr 2024 21:06:24 +0200 Subject: [PATCH 430/458] Add index for finding all statuses in a thread --- ...0_status_bookwyrm_st_thread__cf064f_idx.py | 19 +++++++++++++++++++ bookwyrm/models/status.py | 1 + 2 files changed, 20 insertions(+) create mode 100644 bookwyrm/migrations/0200_status_bookwyrm_st_thread__cf064f_idx.py diff --git a/bookwyrm/migrations/0200_status_bookwyrm_st_thread__cf064f_idx.py b/bookwyrm/migrations/0200_status_bookwyrm_st_thread__cf064f_idx.py new file mode 100644 index 000000000..daca654c7 --- /dev/null +++ b/bookwyrm/migrations/0200_status_bookwyrm_st_thread__cf064f_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.25 on 2024-04-03 19:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0199_status_bookwyrm_st_remote__06aeba_idx"), + ] + + operations = [ + migrations.AddIndex( + model_name="status", + index=models.Index( + fields=["thread_id"], name="bookwyrm_st_thread__cf064f_idx" + ), + ), + ] diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index a9c678cb5..546a8d6c8 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -82,6 +82,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): ordering = ("-published_date",) indexes = [ models.Index(fields=["remote_id"]), + models.Index(fields=["thread_id"]), ] def save(self, *args, **kwargs): From 4d5a30d9533cec6f137cf25b85fad9415e122cfe Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 3 Apr 2024 21:11:27 +0200 Subject: [PATCH 431/458] Add index for looking up KeyPair by remote id --- ..._keypair_bookwyrm_ke_remote__472927_idx.py | 19 +++++++++++++++++++ bookwyrm/models/user.py | 7 +++++++ 2 files changed, 26 insertions(+) create mode 100644 bookwyrm/migrations/0201_keypair_bookwyrm_ke_remote__472927_idx.py diff --git a/bookwyrm/migrations/0201_keypair_bookwyrm_ke_remote__472927_idx.py b/bookwyrm/migrations/0201_keypair_bookwyrm_ke_remote__472927_idx.py new file mode 100644 index 000000000..e3d27a11b --- /dev/null +++ b/bookwyrm/migrations/0201_keypair_bookwyrm_ke_remote__472927_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.25 on 2024-04-03 19:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0200_status_bookwyrm_st_thread__cf064f_idx"), + ] + + operations = [ + migrations.AddIndex( + model_name="keypair", + index=models.Index( + fields=["remote_id"], name="bookwyrm_ke_remote__472927_idx" + ), + ), + ] diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 89fd39b73..e24143e8e 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -509,6 +509,13 @@ class KeyPair(ActivitypubMixin, BookWyrmModel): activity_serializer = activitypub.PublicKey serialize_reverse_fields = [("owner", "owner", "id")] + class Meta: + """indexes""" + + indexes = [ + models.Index(fields=["remote_id"]), + ] + def get_remote_id(self): # self.owner is set by the OneToOneField on User return f"{self.owner.remote_id}/#main-key" From 0501ce39cdd22a57b484b48f987dc342bbedf9e6 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 3 Apr 2024 21:15:24 +0200 Subject: [PATCH 432/458] Add index for looking up User by username --- ...202_user_bookwyrm_us_usernam_b2546d_idx.py | 19 +++++++++++++++++++ bookwyrm/models/user.py | 7 +++++++ 2 files changed, 26 insertions(+) create mode 100644 bookwyrm/migrations/0202_user_bookwyrm_us_usernam_b2546d_idx.py diff --git a/bookwyrm/migrations/0202_user_bookwyrm_us_usernam_b2546d_idx.py b/bookwyrm/migrations/0202_user_bookwyrm_us_usernam_b2546d_idx.py new file mode 100644 index 000000000..d8666fe3f --- /dev/null +++ b/bookwyrm/migrations/0202_user_bookwyrm_us_usernam_b2546d_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.25 on 2024-04-03 19:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0201_keypair_bookwyrm_ke_remote__472927_idx"), + ] + + operations = [ + migrations.AddIndex( + model_name="user", + index=models.Index( + fields=["username"], name="bookwyrm_us_usernam_b2546d_idx" + ), + ), + ] diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index e24143e8e..8c1b79e45 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -198,6 +198,13 @@ class User(OrderedCollectionPageMixin, AbstractUser): hotp_secret = models.CharField(max_length=32, default=None, blank=True, null=True) hotp_count = models.IntegerField(default=0, blank=True, null=True) + class Meta(AbstractUser.Meta): + """indexes""" + + indexes = [ + models.Index(fields=["username"]), + ] + @property def active_follower_requests(self): """Follow requests from active users""" From 464a0298c6de25780020201ee2f397939d443cd3 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 3 Apr 2024 21:23:24 +0200 Subject: [PATCH 433/458] Add index for finding active (and local) users --- ...203_user_bookwyrm_us_is_acti_972dc4_idx.py | 19 +++++++++++++++++++ bookwyrm/models/user.py | 1 + 2 files changed, 20 insertions(+) create mode 100644 bookwyrm/migrations/0203_user_bookwyrm_us_is_acti_972dc4_idx.py diff --git a/bookwyrm/migrations/0203_user_bookwyrm_us_is_acti_972dc4_idx.py b/bookwyrm/migrations/0203_user_bookwyrm_us_is_acti_972dc4_idx.py new file mode 100644 index 000000000..b07f1c8a9 --- /dev/null +++ b/bookwyrm/migrations/0203_user_bookwyrm_us_is_acti_972dc4_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.25 on 2024-04-03 19:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0202_user_bookwyrm_us_usernam_b2546d_idx"), + ] + + operations = [ + migrations.AddIndex( + model_name="user", + index=models.Index( + fields=["is_active", "local"], name="bookwyrm_us_is_acti_972dc4_idx" + ), + ), + ] diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 8c1b79e45..0ec2c6529 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -203,6 +203,7 @@ class User(OrderedCollectionPageMixin, AbstractUser): indexes = [ models.Index(fields=["username"]), + models.Index(fields=["is_active", "local"]), ] @property From 321397a349cc9f22e9b976e6edb249896460b78e Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 3 Apr 2024 21:27:40 +0200 Subject: [PATCH 434/458] Specify which column DISTINCT should apply to --- bookwyrm/activitystreams.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 42f99e209..5030005d7 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -139,14 +139,14 @@ class ActivityStream(RedisStore): | ( Q(following=status.user) & Q(following=status.reply_parent.user) ) # if the user is following both authors - ).distinct() + ) # only visible to the poster's followers and tagged users elif status.privacy == "followers": audience = audience.filter( Q(following=status.user) # if the user is following the author ) - return audience.distinct() + return audience.distinct("id") @tracer.start_as_current_span("ActivityStream.get_audience") def get_audience(self, status): From 439cb3ccaaddec6fa110bb1dc81561fd1710bac4 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 4 Apr 2024 13:15:31 +0200 Subject: [PATCH 435/458] Remove unnecessary conversions between list and set --- bookwyrm/activitystreams.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 5030005d7..b8f4ed985 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -156,7 +156,7 @@ class ActivityStream(RedisStore): status_author = models.User.objects.filter( is_active=True, local=True, id=status.user.id ).values_list("id", flat=True) - return list(set(list(audience) + list(status_author))) + return list(set(audience) | set(status_author)) def get_stores_for_users(self, user_ids): """convert a list of user ids into redis store ids""" @@ -191,7 +191,7 @@ class HomeStream(ActivityStream): status_author = models.User.objects.filter( is_active=True, local=True, id=status.user.id ).values_list("id", flat=True) - return list(set(list(audience) + list(status_author))) + return list(set(audience) | set(status_author)) def get_statuses_for_user(self, user): return models.Status.privacy_filter( From e1c54b2933bbfab278a2d49a5716911903f4385e Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 4 Apr 2024 13:47:51 +0200 Subject: [PATCH 436/458] Remove optimizations with adverse effects `if not audience` actually causes the entire query to be evaluated, before .values_list() is called. --- bookwyrm/activitystreams.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index b8f4ed985..0009ac7a3 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -183,8 +183,6 @@ class HomeStream(ActivityStream): def get_audience(self, status): trace.get_current_span().set_attribute("stream_id", self.key) audience = super()._get_audience(status) - if not audience: - return [] # if the user is following the author audience = audience.filter(following=status.user).values_list("id", flat=True) # if the user is the post's author @@ -239,9 +237,7 @@ class BooksStream(ActivityStream): ) audience = super()._get_audience(status) - if not audience: - return models.User.objects.none() - return audience.filter(shelfbook__book__parent_work=work).distinct() + return audience.filter(shelfbook__book__parent_work=work) def get_audience(self, status): # only show public statuses on the books feed, From af0bd90c15e6743cd267372d6533041c431282a7 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 9 Apr 2024 05:57:27 -0500 Subject: [PATCH 437/458] Adds merge migration --- bookwyrm/migrations/0204_merge_20240409_1042.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 bookwyrm/migrations/0204_merge_20240409_1042.py diff --git a/bookwyrm/migrations/0204_merge_20240409_1042.py b/bookwyrm/migrations/0204_merge_20240409_1042.py new file mode 100644 index 000000000..ba7513341 --- /dev/null +++ b/bookwyrm/migrations/0204_merge_20240409_1042.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.25 on 2024-04-09 10:42 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0197_mergedauthor_mergedbook'), + ('bookwyrm', '0203_user_bookwyrm_us_is_acti_972dc4_idx'), + ] + + operations = [ + ] From 3ffbb242a4f647f1317bb7892cf73965f3035ab0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 9 Apr 2024 05:59:01 -0500 Subject: [PATCH 438/458] Black --- bookwyrm/migrations/0204_merge_20240409_1042.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bookwyrm/migrations/0204_merge_20240409_1042.py b/bookwyrm/migrations/0204_merge_20240409_1042.py index ba7513341..5656ac586 100644 --- a/bookwyrm/migrations/0204_merge_20240409_1042.py +++ b/bookwyrm/migrations/0204_merge_20240409_1042.py @@ -6,9 +6,8 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0197_mergedauthor_mergedbook'), - ('bookwyrm', '0203_user_bookwyrm_us_is_acti_972dc4_idx'), + ("bookwyrm", "0197_mergedauthor_mergedbook"), + ("bookwyrm", "0203_user_bookwyrm_us_is_acti_972dc4_idx"), ] - operations = [ - ] + operations = [] From 9d9e64399c5018ab47ee53c19951b7b1f37d88d9 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 10 Apr 2024 21:26:34 +0200 Subject: [PATCH 439/458] Install same version of eslint in CI as in dev-tools --- .github/workflows/lint-frontend.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint-frontend.yaml b/.github/workflows/lint-frontend.yaml index 21f11ebf3..b0322f371 100644 --- a/.github/workflows/lint-frontend.yaml +++ b/.github/workflows/lint-frontend.yaml @@ -22,7 +22,8 @@ jobs: - uses: actions/checkout@v4 - name: Install modules - run: npm install stylelint stylelint-config-recommended stylelint-config-standard stylelint-order eslint + # run: npm install stylelint stylelint-config-recommended stylelint-config-standard stylelint-order eslint + run: npm install eslint@^8.9.0 # See .stylelintignore for files that are not linted. # - name: Run stylelint From d5a536ae367ae8197dae6c4e227377f09a36abc5 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Thu, 11 Apr 2024 14:45:13 +0200 Subject: [PATCH 440/458] Change pilkit constraint to the version that does work --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 957a2c4f7..df0ad6e13 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,7 +27,7 @@ opentelemetry-instrumentation-django==0.37b0 opentelemetry-instrumentation-psycopg2==0.37b0 opentelemetry-sdk==1.16.0 Pillow==10.3.0 -pilkit>2.0 # dependency of django-imagekit, 2.0 is incompatible with Pillow>=10 +pilkit>=3.0 # dependency of django-imagekit, 2.0 is incompatible with Pillow>=10 protobuf==3.20.* psycopg2==2.9.5 pycryptodome==3.19.1 From 501fb4552890c7336f45392047bb879c519b91c4 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 13 Apr 2024 12:03:35 +1000 Subject: [PATCH 441/458] export avatars to own directory Saving avatars to /images is problematic because it changes the original filepath from avatars/filename to images/avatars/filename. In this PR prior to this commit, imports failed as they are looking for a file path beginning with "avatar" --- bookwyrm/models/bookwyrm_export_job.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/bookwyrm/models/bookwyrm_export_job.py b/bookwyrm/models/bookwyrm_export_job.py index 09f064ea2..da79de6a8 100644 --- a/bookwyrm/models/bookwyrm_export_job.py +++ b/bookwyrm/models/bookwyrm_export_job.py @@ -139,9 +139,7 @@ def create_archive_task(job_id): images_storage = storage_backends.ImagesStorage() if user.avatar: - add_file_to_s3_tar( - s3_tar, images_storage, user.avatar, directory="images" - ) + add_file_to_s3_tar(s3_tar, images_storage, user.avatar) for edition in editions: if edition.cover: @@ -166,7 +164,7 @@ def create_archive_task(job_id): # Add avatar image if present if user.avatar: - tar.add_image(user.avatar, directory="images") + tar.add_image(user.avatar) for edition in editions: if edition.cover: @@ -196,7 +194,7 @@ def export_user(user: User): """export user data""" data = user.to_activity() if user.avatar: - data["icon"]["url"] = archive_file_location(user.avatar, directory="images") + data["icon"]["url"] = archive_file_location(user.avatar) else: data["icon"] = {} return data From c3c46144fe3aa61eefdb285d19d005705b95f6e6 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 13 Apr 2024 12:39:40 +1000 Subject: [PATCH 442/458] add merge migration --- bookwyrm/migrations/0205_merge_20240413_0232.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bookwyrm/migrations/0205_merge_20240413_0232.py diff --git a/bookwyrm/migrations/0205_merge_20240413_0232.py b/bookwyrm/migrations/0205_merge_20240413_0232.py new file mode 100644 index 000000000..9cca29c45 --- /dev/null +++ b/bookwyrm/migrations/0205_merge_20240413_0232.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2.25 on 2024-04-13 02:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0200_auto_20240327_1914"), + ("bookwyrm", "0204_merge_20240409_1042"), + ] + + operations = [] From f844abcad93f6754fd3c18c267656829f537c709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 8 Apr 2024 16:08:52 -0300 Subject: [PATCH 443/458] test_quotation_page_serialization: use strings for page numbers This follows from #3273, "Allow page numbers to be text, instead of integers". --- bookwyrm/tests/models/test_status_model.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index e97febbfa..b2ca63854 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -1,4 +1,5 @@ """ testing models """ +from unittest import expectedFailure from unittest.mock import patch import pathlib import re @@ -337,11 +338,14 @@ class Status(TestCase): activity["attachment"][0]["name"], "Author Name: Test Edition (worm)" ) + @expectedFailure def test_quotation_page_serialization(self, *_): """serialization of quotation page position""" tests = [ - ("single pos", 7, None, "p. 7"), - ("page range", 7, 10, "pp. 7-10"), + ("single pos", "7", "", "p. 7"), + ("page range", "7", "10", "pp. 7-10"), + ("page range roman", "xv", "xvi", "pp. xv-xvi"), + ("page range reverse", "14", "10", "pp. 14-10"), ] for desc, beg, end, pages in tests: with self.subTest(desc): From df78cc64a661a73e0e7cbafa9cac90d3d1f6b4e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 8 Apr 2024 16:10:00 -0300 Subject: [PATCH 444/458] Quotation._format_position: do not treat page numbers as integers Fixes: #3352 --- bookwyrm/models/status.py | 2 +- bookwyrm/tests/models/test_status_model.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 546a8d6c8..dc0ab45a6 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -395,7 +395,7 @@ class Quotation(BookStatus): end = self.endposition or 0 if self.position_mode != "PG" or not beg: return None - return f"pp. {beg}-{end}" if end > beg else f"p. {beg}" + return f"pp. {beg}-{end}" if end else f"p. {beg}" @property def pure_content(self): diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index b2ca63854..5a7f0429b 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -1,5 +1,4 @@ """ testing models """ -from unittest import expectedFailure from unittest.mock import patch import pathlib import re @@ -338,7 +337,6 @@ class Status(TestCase): activity["attachment"][0]["name"], "Author Name: Test Edition (worm)" ) - @expectedFailure def test_quotation_page_serialization(self, *_): """serialization of quotation page position""" tests = [ From 873336960595a5d2da5157f4fac143e442a1b1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Mon, 8 Apr 2024 16:15:50 -0300 Subject: [PATCH 445/458] test_quotation_page_serialization: add test with no position --- bookwyrm/models/status.py | 2 +- bookwyrm/tests/models/test_status_model.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index dc0ab45a6..d0c1e639b 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -392,7 +392,7 @@ class Quotation(BookStatus): def _format_position(self) -> Optional[str]: """serialize page position""" beg = self.position - end = self.endposition or 0 + end = self.endposition if self.position_mode != "PG" or not beg: return None return f"pp. {beg}-{end}" if end else f"p. {beg}" diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 5a7f0429b..c266999a7 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -341,6 +341,7 @@ class Status(TestCase): """serialization of quotation page position""" tests = [ ("single pos", "7", "", "p. 7"), + ("missing beg", "", "10", None), ("page range", "7", "10", "pp. 7-10"), ("page range roman", "xv", "xvi", "pp. xv-xvi"), ("page range reverse", "14", "10", "pp. 14-10"), @@ -357,10 +358,11 @@ class Status(TestCase): position_mode="PG", ) activity = status.to_activity(pure=True) - self.assertRegex( - activity["content"], - f'^

    "my quote"

    ā€” , {pages}

    $', - ) + if pages: + expect_re = f'^

    "my quote"

    ā€” , {pages}

    $' + else: + expect_re = '^

    "my quote"

    ā€”

    $' + self.assertRegex(activity["content"], expect_re) def test_review_to_activity(self, *_): """subclass of the base model version with a "pure" serializer""" From 4304cd4a791b9175e0d33a68350fc0ec95c48b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adeodato=20Sim=C3=B3?= Date: Tue, 9 Apr 2024 19:18:02 -0300 Subject: [PATCH 446/458] use re.escape --- bookwyrm/tests/models/test_status_model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index c266999a7..6323eeca3 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -359,7 +359,8 @@ class Status(TestCase): ) activity = status.to_activity(pure=True) if pages: - expect_re = f'^

    "my quote"

    ā€” , {pages}

    $' + pages_re = re.escape(pages) + expect_re = f'^

    "my quote"

    ā€” , {pages_re}

    $' else: expect_re = '^

    "my quote"

    ā€”

    $' self.assertRegex(activity["content"], expect_re) From be872ed6724fd4b187eaa8b48a816cf86db59be8 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 27 Mar 2024 22:58:43 +0100 Subject: [PATCH 447/458] Support AWS_S3_URL_PROTOCOL - Allow setting in .env - Default to PROTOCOL (same as before) - Propagate to django-storages so it generates the correct URLs in sass_src --- .env.example | 1 + bookwyrm/settings.py | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index ee2ccd45a..c63d4fd4c 100644 --- a/.env.example +++ b/.env.example @@ -82,6 +82,7 @@ S3_SIGNED_URL_EXPIRY=900 # AWS_STORAGE_BUCKET_NAME= # "example-bucket-name" # AWS_S3_CUSTOM_DOMAIN=None # "example-bucket-name.s3.fr-par.scw.cloud" +# AWS_S3_URL_PROTOCOL=None # "http:" # AWS_S3_REGION_NAME=None # "fr-par" # AWS_S3_ENDPOINT_URL=None # "https://s3.fr-par.scw.cloud" diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 415d0ac34..27c86a22a 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -386,21 +386,32 @@ if USE_S3: AWS_S3_ENDPOINT_URL = env("AWS_S3_ENDPOINT_URL", None) AWS_DEFAULT_ACL = "public-read" AWS_S3_OBJECT_PARAMETERS = {"CacheControl": "max-age=86400"} + AWS_S3_URL_PROTOCOL = env("AWS_S3_URL_PROTOCOL", f"{PROTOCOL}:") # S3 Static settings STATIC_LOCATION = "static" - STATIC_URL = f"{PROTOCOL}://{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/" + STATIC_URL = f"{AWS_S3_URL_PROTOCOL}//{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/" STATIC_FULL_URL = STATIC_URL STATICFILES_STORAGE = "bookwyrm.storage_backends.StaticStorage" # S3 Media settings MEDIA_LOCATION = "images" - MEDIA_URL = f"{PROTOCOL}://{AWS_S3_CUSTOM_DOMAIN}/{MEDIA_LOCATION}/" + MEDIA_URL = f"{AWS_S3_URL_PROTOCOL}//{AWS_S3_CUSTOM_DOMAIN}/{MEDIA_LOCATION}/" MEDIA_FULL_URL = MEDIA_URL DEFAULT_FILE_STORAGE = "bookwyrm.storage_backends.ImagesStorage" # S3 Exports settings EXPORTS_STORAGE = "bookwyrm.storage_backends.ExportsS3Storage" # Content Security Policy - CSP_DEFAULT_SRC = ["'self'", AWS_S3_CUSTOM_DOMAIN] + CSP_ADDITIONAL_HOSTS - CSP_SCRIPT_SRC = ["'self'", AWS_S3_CUSTOM_DOMAIN] + CSP_ADDITIONAL_HOSTS + CSP_DEFAULT_SRC = [ + "'self'", + f"{AWS_S3_URL_PROTOCOL}//{AWS_S3_CUSTOM_DOMAIN}" + if AWS_S3_CUSTOM_DOMAIN + else None, + ] + CSP_ADDITIONAL_HOSTS + CSP_SCRIPT_SRC = [ + "'self'", + f"{AWS_S3_URL_PROTOCOL}//{AWS_S3_CUSTOM_DOMAIN}" + if AWS_S3_CUSTOM_DOMAIN + else None, + ] + CSP_ADDITIONAL_HOSTS elif USE_AZURE: # Azure settings AZURE_ACCOUNT_NAME = env("AZURE_ACCOUNT_NAME") From bf5c08dbf38e510d2af174af9a171a37f192bd4c Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 27 Mar 2024 23:00:42 +0100 Subject: [PATCH 448/458] Add docker-compose.override.yml to .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 2d3393d3b..fd6cc7547 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ nginx/default.conf #macOS **/.DS_Store + +# Docker +docker-compose.override.yml From cca58023edec0e613931606edb0cbfa56a2b53a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:51:34 +0000 Subject: [PATCH 449/458] Bump aiohttp from 3.9.2 to 3.9.4 Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.2 to 3.9.4. - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.2...v3.9.4) --- updated-dependencies: - dependency-name: aiohttp dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0511d92c4..98c83068b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.9.2 +aiohttp==3.9.4 bleach==5.0.1 boto3==1.26.57 bw-file-resubmit==0.6.0rc2 From 6684d60526924d4dd4852167368a4caaf0181bac Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 22 Apr 2024 13:35:08 +1000 Subject: [PATCH 450/458] refactor Move for more redundancy As outlined in #3354, a use `Move` fails if the user is moving from a BookWyrm server to another BookWrym server. This is because: 1. the original code did not announce changes to alsoKnownAs; 2. the original code always checked the locally saved profile rather than refetching the remote data; This commit fixes both these problems by forcing `MoveUser` to always perform a "refresh" of the local data from the remote, and by saving the user with broadcast=True when updating alsoKnownAs ids. --- bookwyrm/models/move.py | 2 +- bookwyrm/tests/data/ap_user_move.json | 40 ++++++ bookwyrm/tests/models/test_move.py | 58 +++++++++ bookwyrm/tests/views/preferences/test_move.py | 114 ++++++++++++++++++ bookwyrm/views/helpers.py | 9 +- bookwyrm/views/preferences/move_user.py | 3 +- 6 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 bookwyrm/tests/data/ap_user_move.json create mode 100644 bookwyrm/tests/models/test_move.py create mode 100644 bookwyrm/tests/views/preferences/test_move.py diff --git a/bookwyrm/models/move.py b/bookwyrm/models/move.py index d6d8ef78f..b6b8655df 100644 --- a/bookwyrm/models/move.py +++ b/bookwyrm/models/move.py @@ -10,7 +10,7 @@ from .notification import Notification, NotificationType class Move(ActivityMixin, BookWyrmModel): - """migrating an activitypub user account""" + """migrating an activitypub object""" user = fields.ForeignKey( "User", on_delete=models.PROTECT, activitypub_field="actor" diff --git a/bookwyrm/tests/data/ap_user_move.json b/bookwyrm/tests/data/ap_user_move.json new file mode 100644 index 000000000..52de40a68 --- /dev/null +++ b/bookwyrm/tests/data/ap_user_move.json @@ -0,0 +1,40 @@ +{ + "@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" + } + ], + "id": "https://example.com/user/mouse", + "type": "Person", + "preferredUsername": "mouse", + "name": "MOUSE?? MOUSE!!", + "inbox": "https://example.com/user/mouse/inbox", + "outbox": "https://example.com/user/mouse/outbox", + "followers": "https://example.com/user/mouse/followers", + "following": "https://example.com/user/mouse/following", + "summary": "", + "publicKey": { + "id": "https://example.com/user/mouse/#main-key", + "owner": "https://example.com/user/mouse", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6QisDrjOQvkRo/MqNmSYPwqtt\nCxg/8rCW+9jKbFUKvqjTeKVotEE85122v/DCvobCCdfQuYIFdVMk+dB1xJ0iPGPg\nyU79QHY22NdV9mFKA2qtXVVxb5cxpA4PlwOHM6PM/k8B+H09OUrop2aPUAYwy+vg\n+MXyz8bAXrIS1kq6fQIDAQAB\n-----END PUBLIC KEY-----" + }, + "endpoints": { + "sharedInbox": "https://example.com/inbox" + }, + "bookwyrmUser": true, + "manuallyApprovesFollowers": false, + "discoverable": false, + "alsoKnownAs": ["https://your.domain.here/user/rat"], + "devices": "https://friend.camp/users/tripofmice/collections/devices", + "tag": [], + "icon": { + "type": "Image", + "mediaType": "image/png", + "url": "https://example.com/images/avatars/AL-2-crop-50.png" + } +} diff --git a/bookwyrm/tests/models/test_move.py b/bookwyrm/tests/models/test_move.py new file mode 100644 index 000000000..789307577 --- /dev/null +++ b/bookwyrm/tests/models/test_move.py @@ -0,0 +1,58 @@ +""" testing move models """ +from unittest.mock import patch +from django.core.exceptions import PermissionDenied +from django.test import TestCase + +from bookwyrm import models + + +class MoveUser(TestCase): + """move your account to another identity""" + + @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.target_user = models.User.objects.create_user( + "rat", + "rat@rat.com", + "ratword", + local=False, + remote_id="https://example.com/users/rat", + inbox="https://example.com/users/rat/inbox", + outbox="https://example.com/users/rat/outbox", + ) + + 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.origin_user = models.User.objects.create_user( + "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" + ) + self.origin_user.remote_id = "http://local.com/user/mouse" + self.origin_user.save(broadcast=False, update_fields=["remote_id"]) + + def test_user_move_unauthorized(self, *_): + """attempt a user move without alsoKnownAs set""" + + with self.assertRaises(PermissionDenied): + models.MoveUser.objects.create( + user=self.origin_user, + object=self.origin_user.remote_id, + target=self.target_user, + ) + + @patch("bookwyrm.suggested_users.remove_user_task.delay") + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + def test_user_move(self, *_): + """move user""" + + self.target_user.also_known_as.add(self.origin_user.id) + self.target_user.save(broadcast=False) + + models.MoveUser.objects.create( + user=self.origin_user, + object=self.origin_user.remote_id, + target=self.target_user, + ) + self.assertEqual(self.origin_user.moved_to, self.target_user.remote_id) diff --git a/bookwyrm/tests/views/preferences/test_move.py b/bookwyrm/tests/views/preferences/test_move.py new file mode 100644 index 000000000..339905183 --- /dev/null +++ b/bookwyrm/tests/views/preferences/test_move.py @@ -0,0 +1,114 @@ +""" test move functionality """ +import json +from unittest.mock import patch +import pathlib +from django.contrib.sessions.middleware import SessionMiddleware +from django.test import TestCase +from django.test.client import RequestFactory +import responses + +from bookwyrm import forms, models, views + + +@patch("bookwyrm.activitystreams.add_status_task.delay") +@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.suggested_users.rerank_user_task.delay") +class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods + """viewing and creating statuses""" + + @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" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"), patch( + "bookwyrm.suggested_users.rerank_user_task.delay" + ): + + self.local_user = models.User.objects.create_user( + "rat", + "rat@rat.com", + "ratword", + local=True, + discoverable=True, + localname="rat", + remote_id="https://your.domain.here/user/rat", + ) + + with patch("bookwyrm.models.user.set_remote_server.delay"), patch( + "bookwyrm.suggested_users.rerank_user_task.delay" + ): + self.remote_user = models.User.objects.create_user( + "mouse@example.com", + "mouse@mouse.com", + "mouseword", + local=False, + remote_id="https://example.com/user/mouse", + ) + + def setUp(self): + """individual test setup""" + self.factory = RequestFactory() + datafile = pathlib.Path(__file__).parent.joinpath( + "../../data/ap_user_move.json" + ) + self.userdata = json.loads(datafile.read_bytes()) + del self.userdata["icon"] + + @responses.activate + @patch("bookwyrm.models.user.set_remote_server.delay") + @patch("bookwyrm.suggested_users.remove_user_task.delay") + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + def test_move_user_view(self, *_): + """move user""" + + self.assertEqual(self.remote_user.remote_id, "https://example.com/user/mouse") + self.assertIsNone(self.local_user.moved_to) + self.assertIsNone(self.remote_user.moved_to) + self.assertIsNone(self.local_user.also_known_as.first()) + self.assertIsNone(self.remote_user.also_known_as.first()) + + username = "mouse@example.com" + wellknown = { + "subject": "acct:mouse@example.com", + "links": [ + { + "rel": "self", + "type": "application/activity+json", + "href": "https://example.com/user/mouse", + } + ], + } + responses.add( + responses.GET, + f"https://example.com/.well-known/webfinger?resource=acct:{username}", + json=wellknown, + status=200, + ) + responses.add( + responses.GET, + "https://example.com/user/mouse", + json=self.userdata, + status=200, + ) + + view = views.MoveUser.as_view() + form = forms.MoveUserForm() + form.data["target"] = "mouse@example.com" + form.data["password"] = "ratword" + + request = self.factory.post("", form.data) + request.user = self.local_user + middleware = SessionMiddleware() + middleware.process_request(request) + request.session.save() + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + view(request) + self.local_user.refresh_from_db() + + self.assertEqual(self.local_user.also_known_as.first(), self.remote_user) + self.assertEqual(self.remote_user.also_known_as.first(), self.local_user) + self.assertEqual(self.local_user.moved_to, "https://example.com/user/mouse") diff --git a/bookwyrm/views/helpers.py b/bookwyrm/views/helpers.py index 60d950354..b3af35f4a 100644 --- a/bookwyrm/views/helpers.py +++ b/bookwyrm/views/helpers.py @@ -60,7 +60,7 @@ def is_bookwyrm_request(request): return True -def handle_remote_webfinger(query, unknown_only=False): +def handle_remote_webfinger(query, unknown_only=False, refresh=False): """webfingerin' other servers""" user = None @@ -75,6 +75,11 @@ def handle_remote_webfinger(query, unknown_only=False): return None try: + + if refresh: + # Always fetch the remote info - don't even bother checking the DB + raise models.User.DoesNotExist("remote_only is set to True") + user = models.User.objects.get(username__iexact=query) if unknown_only: @@ -92,7 +97,7 @@ def handle_remote_webfinger(query, unknown_only=False): if link.get("rel") == "self": try: user = activitypub.resolve_remote_id( - link["href"], model=models.User + link["href"], model=models.User, refresh=refresh ) except (KeyError, activitypub.ActivitySerializerError): return None diff --git a/bookwyrm/views/preferences/move_user.py b/bookwyrm/views/preferences/move_user.py index 93abf2f18..848628c88 100644 --- a/bookwyrm/views/preferences/move_user.py +++ b/bookwyrm/views/preferences/move_user.py @@ -32,7 +32,7 @@ class MoveUser(View): if form.is_valid() and user.check_password(form.cleaned_data["password"]): username = form.cleaned_data["target"] - target = handle_remote_webfinger(username) + target = handle_remote_webfinger(username, refresh=True) try: models.MoveUser.objects.create( @@ -81,6 +81,7 @@ class AliasUser(View): return TemplateResponse(request, "preferences/alias_user.html", data) user.also_known_as.add(remote_user.id) + user.save(broadcast=True) # broadcast the alias return redirect("prefs-alias") From 031223104f35fe5e79dc9b71cdacaf4fcee1df22 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 24 Apr 2024 14:46:57 +0200 Subject: [PATCH 451/458] Clarify AWS_S3_URL_PROTOCOL in .env.example --- .env.example | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index c63d4fd4c..6a217df0c 100644 --- a/.env.example +++ b/.env.example @@ -78,7 +78,9 @@ S3_SIGNED_URL_EXPIRY=900 # Commented are example values if you use a non-AWS, S3-compatible service # AWS S3 should work with only AWS_STORAGE_BUCKET_NAME and AWS_S3_REGION_NAME # non-AWS S3-compatible services will need AWS_STORAGE_BUCKET_NAME, -# along with both AWS_S3_CUSTOM_DOMAIN and AWS_S3_ENDPOINT_URL +# along with both AWS_S3_CUSTOM_DOMAIN and AWS_S3_ENDPOINT_URL. +# AWS_S3_URL_PROTOCOL must end in ":" and defaults to the same protocol as +# the BookWyrm instance ("http:" or "https:", based on USE_SSL). # AWS_STORAGE_BUCKET_NAME= # "example-bucket-name" # AWS_S3_CUSTOM_DOMAIN=None # "example-bucket-name.s3.fr-par.scw.cloud" From f24fdf73b57d1d070294f64ed820ec69860bd5b3 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Wed, 24 Apr 2024 15:02:05 +0200 Subject: [PATCH 452/458] Update to match newer code style --- bookwyrm/tests/models/test_move.py | 20 +++++++++-------- bookwyrm/tests/views/preferences/test_move.py | 22 ++++++++++--------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/bookwyrm/tests/models/test_move.py b/bookwyrm/tests/models/test_move.py index 789307577..92c7a6cce 100644 --- a/bookwyrm/tests/models/test_move.py +++ b/bookwyrm/tests/models/test_move.py @@ -10,10 +10,10 @@ class MoveUser(TestCase): """move your account to another identity""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need some users for this""" with patch("bookwyrm.models.user.set_remote_server.delay"): - self.target_user = models.User.objects.create_user( + cls.target_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -23,16 +23,18 @@ class MoveUser(TestCase): outbox="https://example.com/users/rat/outbox", ) - 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.origin_user = models.User.objects.create_user( + with ( + patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), + patch("bookwyrm.activitystreams.populate_stream_task.delay"), + patch("bookwyrm.lists_stream.populate_lists_task.delay"), + ): + cls.origin_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) - self.origin_user.remote_id = "http://local.com/user/mouse" - self.origin_user.save(broadcast=False, update_fields=["remote_id"]) + cls.origin_user.remote_id = "http://local.com/user/mouse" + cls.origin_user.save(broadcast=False, update_fields=["remote_id"]) - def test_user_move_unauthorized(self, *_): + def test_user_move_unauthorized(self): """attempt a user move without alsoKnownAs set""" with self.assertRaises(PermissionDenied): diff --git a/bookwyrm/tests/views/preferences/test_move.py b/bookwyrm/tests/views/preferences/test_move.py index 339905183..acd2f4a2d 100644 --- a/bookwyrm/tests/views/preferences/test_move.py +++ b/bookwyrm/tests/views/preferences/test_move.py @@ -14,20 +14,21 @@ from bookwyrm import forms, models, views @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") -class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods +class ViewsHelpers(TestCase): """viewing and creating statuses""" @classmethod - def setUpTestData(self): # pylint: disable=bad-classmethod-argument + def setUpTestData(cls): """we need basic test data and mocks""" - 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" + 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( + cls.local_user = models.User.objects.create_user( "rat", "rat@rat.com", "ratword", @@ -37,10 +38,11 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods remote_id="https://your.domain.here/user/rat", ) - with patch("bookwyrm.models.user.set_remote_server.delay"), patch( - "bookwyrm.suggested_users.rerank_user_task.delay" + with ( + patch("bookwyrm.models.user.set_remote_server.delay"), + patch("bookwyrm.suggested_users.rerank_user_task.delay"), ): - self.remote_user = models.User.objects.create_user( + cls.remote_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", "mouseword", From c73d1fff6a7284057f5a87d160f59738fe9f1294 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 2 Apr 2024 14:27:47 +0200 Subject: [PATCH 453/458] Remove unnecessary exceptions from validate_url_domain --- bookwyrm/tests/test_utils.py | 4 ---- bookwyrm/utils/validate.py | 7 ++----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/bookwyrm/tests/test_utils.py b/bookwyrm/tests/test_utils.py index 61ed2262c..ed62050a8 100644 --- a/bookwyrm/tests/test_utils.py +++ b/bookwyrm/tests/test_utils.py @@ -25,7 +25,3 @@ class TestUtils(TestCase): self.assertIsNone( validate_url_domain("https://up-to-no-good.tld/bad-actor.exe") ) - - def test_default_url_domain(self): - """Check with a default URL""" - self.assertEqual(validate_url_domain("/"), "/") diff --git a/bookwyrm/utils/validate.py b/bookwyrm/utils/validate.py index ed1b00b0e..459bc70a6 100644 --- a/bookwyrm/utils/validate.py +++ b/bookwyrm/utils/validate.py @@ -4,14 +4,11 @@ from typing import Optional from bookwyrm.settings import DOMAIN, USE_HTTPS -def validate_url_domain(url: str) -> Optional[str]: +def validate_url_domain(url: Optional[str]) -> Optional[str]: """Basic check that the URL starts with the instance domain name""" - if not url: + if url is None: return None - if url == "/": - return url - protocol = "https://" if USE_HTTPS else "http://" origin = f"{protocol}{DOMAIN}" From baea105c182387def5858a908121b2983d952772 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Tue, 2 Apr 2024 14:23:34 +0200 Subject: [PATCH 454/458] pytest.ini env values should be unquoted Otherwise the quotes end up in the strings. --- pytest.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pytest.ini b/pytest.ini index 18c955032..2988a7dc5 100644 --- a/pytest.ini +++ b/pytest.ini @@ -14,16 +14,16 @@ env = ALLOWED_HOSTS = your.domain.here BOOKWYRM_DATABASE_BACKEND = postgres MEDIA_ROOT = images/ - CELERY_BROKER = "" + CELERY_BROKER = REDIS_BROKER_PORT = 6379 REDIS_BROKER_PASSWORD = beep REDIS_ACTIVITY_PORT = 6379 REDIS_ACTIVITY_PASSWORD = beep USE_DUMMY_CACHE = true FLOWER_PORT = 8888 - EMAIL_HOST = "smtp.mailgun.org" + EMAIL_HOST = smtp.mailgun.org EMAIL_PORT = 587 - EMAIL_HOST_USER = "" - EMAIL_HOST_PASSWORD = "" + EMAIL_HOST_USER = + EMAIL_HOST_PASSWORD = EMAIL_USE_TLS = true ENABLE_PREVIEW_IMAGES = false From 3aefbb548efcef558f4b96de1d8df7cad597b572 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 7 Apr 2024 17:19:48 +0200 Subject: [PATCH 455/458] Allow serving BookWyrm on a non-standard port --- .env.example | 11 ++++++++--- bookwyrm/connectors/connector_manager.py | 9 ++++++--- bookwyrm/forms/links.py | 2 +- bookwyrm/models/connector.py | 2 +- bookwyrm/models/federated_server.py | 5 ++--- bookwyrm/models/link.py | 2 +- bookwyrm/models/user.py | 4 ++-- bookwyrm/settings.py | 23 +++++++++++++---------- bookwyrm/templatetags/utilities.py | 2 +- bookwyrm/tests/test_signing.py | 4 ++-- pytest.ini | 1 + 11 files changed, 38 insertions(+), 27 deletions(-) diff --git a/.env.example b/.env.example index 6a217df0c..c61ceba1e 100644 --- a/.env.example +++ b/.env.example @@ -16,6 +16,11 @@ DEFAULT_LANGUAGE="English" ## Leave unset to allow all hosts # ALLOWED_HOSTS="localhost,127.0.0.1,[::1]" +# Specify when the site is served from a port that is not the default +# for the protocol (80 for HTTP or 443 for HTTPS). +# Probably only necessary in development. +# PORT=1333 + MEDIA_ROOT=images/ # Database configuration @@ -139,9 +144,9 @@ HTTP_X_FORWARDED_PROTO=false TWO_FACTOR_LOGIN_VALIDITY_WINDOW=2 TWO_FACTOR_LOGIN_MAX_SECONDS=60 -# Additional hosts to allow in the Content-Security-Policy, "self" (should be DOMAIN) -# and AWS_S3_CUSTOM_DOMAIN (if used) are added by default. -# Value should be a comma-separated list of host names. +# Additional hosts to allow in the Content-Security-Policy, "self" (should be +# DOMAIN with optionally ":" + PORT) 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) diff --git a/bookwyrm/connectors/connector_manager.py b/bookwyrm/connectors/connector_manager.py index 444a626ba..bdea00719 100644 --- a/bookwyrm/connectors/connector_manager.py +++ b/bookwyrm/connectors/connector_manager.py @@ -118,9 +118,9 @@ def get_connectors() -> Iterator[abstract_connector.AbstractConnector]: def get_or_create_connector(remote_id: str) -> abstract_connector.AbstractConnector: """get the connector related to the object's server""" url = urlparse(remote_id) - identifier = url.netloc + identifier = url.hostname if not identifier: - raise ValueError("Invalid remote id") + raise ValueError(f"Invalid remote id: {remote_id}") try: connector_info = models.Connector.objects.get(identifier=identifier) @@ -188,8 +188,11 @@ def raise_not_valid_url(url: str) -> None: if not parsed.scheme in ["http", "https"]: raise ConnectorException("Invalid scheme: ", url) + if not parsed.hostname: + raise ConnectorException("Hostname missing: ", url) + try: - ipaddress.ip_address(parsed.netloc) + ipaddress.ip_address(parsed.hostname) raise ConnectorException("Provided url is an IP address: ", url) except ValueError: # it's not an IP address, which is good diff --git a/bookwyrm/forms/links.py b/bookwyrm/forms/links.py index 345c5c1d4..5156d2578 100644 --- a/bookwyrm/forms/links.py +++ b/bookwyrm/forms/links.py @@ -26,7 +26,7 @@ class FileLinkForm(CustomForm): url = cleaned_data.get("url") filetype = cleaned_data.get("filetype") book = cleaned_data.get("book") - domain = urlparse(url).netloc + domain = urlparse(url).hostname if models.LinkDomain.objects.filter(domain=domain).exists(): status = models.LinkDomain.objects.get(domain=domain).status if status == "blocked": diff --git a/bookwyrm/models/connector.py b/bookwyrm/models/connector.py index 99e73ab37..f4b5be04c 100644 --- a/bookwyrm/models/connector.py +++ b/bookwyrm/models/connector.py @@ -11,7 +11,7 @@ ConnectorFiles = models.TextChoices("ConnectorFiles", CONNECTORS) class Connector(BookWyrmModel): """book data source connectors""" - identifier = models.CharField(max_length=255, unique=True) + identifier = models.CharField(max_length=255, unique=True) # domain priority = models.IntegerField(default=2) name = models.CharField(max_length=255, null=True, blank=True) connector_file = models.CharField(max_length=255, choices=ConnectorFiles.choices) diff --git a/bookwyrm/models/federated_server.py b/bookwyrm/models/federated_server.py index e1081ed45..5e08fc11d 100644 --- a/bookwyrm/models/federated_server.py +++ b/bookwyrm/models/federated_server.py @@ -16,7 +16,7 @@ FederationStatus = [ class FederatedServer(BookWyrmModel): """store which servers we federate with""" - server_name = models.CharField(max_length=255, unique=True) + server_name = models.CharField(max_length=255, unique=True) # domain status = models.CharField( max_length=255, default="federated", choices=FederationStatus ) @@ -64,5 +64,4 @@ class FederatedServer(BookWyrmModel): def is_blocked(cls, url: str) -> bool: """look up if a domain is blocked""" url = urlparse(url) - domain = url.netloc - return cls.objects.filter(server_name=domain, status="blocked").exists() + return cls.objects.filter(server_name=url.hostname, status="blocked").exists() diff --git a/bookwyrm/models/link.py b/bookwyrm/models/link.py index d334a9d29..67bf9c4d4 100644 --- a/bookwyrm/models/link.py +++ b/bookwyrm/models/link.py @@ -38,7 +38,7 @@ class Link(ActivitypubMixin, BookWyrmModel): """create a link""" # get or create the associated domain if not self.domain: - domain = urlparse(self.url).netloc + domain = urlparse(self.url).hostname self.domain, _ = LinkDomain.objects.get_or_create(domain=domain) # this is never broadcast, the owning model broadcasts an update diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 0ec2c6529..8db9af7b6 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -349,7 +349,7 @@ class User(OrderedCollectionPageMixin, AbstractUser): if not self.local and not re.match(regex.FULL_USERNAME, self.username): # generate a username that uses the domain (webfinger format) actor_parts = urlparse(self.remote_id) - self.username = f"{self.username}@{actor_parts.netloc}" + self.username = f"{self.username}@{actor_parts.hostname}" # this user already exists, no need to populate fields if not created: @@ -558,7 +558,7 @@ def set_remote_server(user_id, allow_external_connections=False): user = User.objects.get(id=user_id) actor_parts = urlparse(user.remote_id) federated_server = get_or_create_remote_server( - actor_parts.netloc, allow_external_connections=allow_external_connections + actor_parts.hostname, allow_external_connections=allow_external_connections ) # if we were unable to find the server, we need to create a new entry for it if not federated_server: diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 27c86a22a..72c5221a4 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -350,28 +350,31 @@ USE_L10N = True USE_TZ = True - -USER_AGENT = f"BookWyrm (BookWyrm/{VERSION}; +https://{DOMAIN}/)" - # Imagekit generated thumbnails ENABLE_THUMBNAIL_GENERATION = env.bool("ENABLE_THUMBNAIL_GENERATION", False) IMAGEKIT_CACHEFILE_DIR = "thumbnails" IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY = "bookwyrm.thumbnail_generation.Strategy" -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/3.2/howto/static-files/ - PROJECT_DIR = os.path.dirname(os.path.abspath(__file__)) CSP_ADDITIONAL_HOSTS = env.list("CSP_ADDITIONAL_HOSTS", []) -# Storage - PROTOCOL = "http" if USE_HTTPS: PROTOCOL = "https" SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True +PORT = env.int("PORT", 443 if USE_HTTPS else 80) +if (USE_HTTPS and PORT == 443) or (not USE_HTTPS and PORT == 80): + NETLOC = DOMAIN +else: + NETLOC = f"{DOMAIN}:{PORT}" +BASE_URL = f"{PROTOCOL}://{NETLOC}" + +USER_AGENT = f"BookWyrm (BookWyrm/{VERSION}; +{BASE_URL})" + +# Storage + USE_S3 = env.bool("USE_S3", False) USE_AZURE = env.bool("USE_AZURE", False) S3_SIGNED_URL_EXPIRY = env.int("S3_SIGNED_URL_EXPIRY", 900) @@ -440,11 +443,11 @@ elif USE_AZURE: else: # Static settings STATIC_URL = "/static/" - STATIC_FULL_URL = f"{PROTOCOL}://{DOMAIN}{STATIC_URL}" + STATIC_FULL_URL = BASE_URL + STATIC_URL STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage" # Media settings MEDIA_URL = "/images/" - MEDIA_FULL_URL = f"{PROTOCOL}://{DOMAIN}{MEDIA_URL}" + MEDIA_FULL_URL = BASE_URL + MEDIA_URL DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage" # Exports settings EXPORTS_STORAGE = "bookwyrm.storage_backends.ExportsFileStorage" diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py index fb2113de4..bc87a60d7 100644 --- a/bookwyrm/templatetags/utilities.py +++ b/bookwyrm/templatetags/utilities.py @@ -120,7 +120,7 @@ def id_to_username(user_id): """given an arbitrary remote id, return the username""" if user_id: url = urlparse(user_id) - domain = url.netloc + domain = url.hostname parts = url.path.split("/") name = parts[-1] value = f"{name}@{domain}" diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index e41548bcf..79370844a 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -15,7 +15,7 @@ from django.utils.http import http_date from bookwyrm import models from bookwyrm.activitypub import Follow -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import DOMAIN, NETLOC from bookwyrm.signatures import create_key_pair, make_signature, make_digest @@ -77,7 +77,7 @@ class Signature(TestCase): "HTTP_SIGNATURE": signature, "HTTP_DIGEST": digest, "HTTP_CONTENT_TYPE": "application/activity+json; charset=utf-8", - "HTTP_HOST": DOMAIN, + "HTTP_HOST": NETLOC, }, ) diff --git a/pytest.ini b/pytest.ini index 2988a7dc5..b963fb316 100644 --- a/pytest.ini +++ b/pytest.ini @@ -11,6 +11,7 @@ env = DEBUG = false USE_HTTPS = true DOMAIN = your.domain.here + PORT = 4242 ALLOWED_HOSTS = your.domain.here BOOKWYRM_DATABASE_BACKEND = postgres MEDIA_ROOT = images/ From c42db40a63a1a87b66ad349ac86e2823d60a1bd7 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 7 Apr 2024 17:22:29 +0200 Subject: [PATCH 456/458] Construct absolute URLs with the correct protocol and port --- bookwyrm/emailing.py | 3 +- bookwyrm/models/site.py | 6 +-- bookwyrm/models/user.py | 5 +- bookwyrm/templates/email/html_layout.html | 8 +-- .../templates/email/invite/html_content.html | 2 +- .../templates/email/invite/text_content.html | 2 +- bookwyrm/templates/opensearch.xml | 2 +- bookwyrm/tests/models/test_fields.py | 14 +++--- bookwyrm/tests/models/test_site.py | 4 +- bookwyrm/tests/models/test_status_model.py | 50 +++++++------------ bookwyrm/tests/test_utils.py | 7 ++- bookwyrm/tests/views/test_helpers.py | 10 ++-- bookwyrm/utils/validate.py | 11 ++-- bookwyrm/views/wellknown.py | 4 +- 14 files changed, 55 insertions(+), 73 deletions(-) diff --git a/bookwyrm/emailing.py b/bookwyrm/emailing.py index 5e08ebba1..ccc0aea61 100644 --- a/bookwyrm/emailing.py +++ b/bookwyrm/emailing.py @@ -4,7 +4,7 @@ from django.template.loader import get_template from bookwyrm import models, settings from bookwyrm.tasks import app, EMAIL -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import DOMAIN, BASE_URL def email_data(): @@ -14,6 +14,7 @@ def email_data(): "site_name": site.name, "logo": site.logo_small_url, "domain": DOMAIN, + "base_url": BASE_URL, "user": None, } diff --git a/bookwyrm/models/site.py b/bookwyrm/models/site.py index 201a499e5..36e6bb128 100644 --- a/bookwyrm/models/site.py +++ b/bookwyrm/models/site.py @@ -12,7 +12,7 @@ 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 BASE_URL, 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 @@ -188,7 +188,7 @@ class SiteInvite(models.Model): @property def link(self): """formats the invite link""" - return f"https://{DOMAIN}/invite/{self.code}" + return f"{BASE_URL}/invite/{self.code}" class InviteRequest(BookWyrmModel): @@ -235,7 +235,7 @@ class PasswordReset(models.Model): @property def link(self): """formats the invite link""" - return f"https://{DOMAIN}/password-reset/{self.code}" + return f"{BASE_URL}/password-reset/{self.code}" # pylint: disable=unused-argument diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 8db9af7b6..f793d61b8 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -19,7 +19,7 @@ from bookwyrm.connectors import get_data, ConnectorException from bookwyrm.models.shelf import Shelf from bookwyrm.models.status import Status from bookwyrm.preview_images import generate_user_preview_image_task -from bookwyrm.settings import DOMAIN, ENABLE_PREVIEW_IMAGES, USE_HTTPS, LANGUAGES +from bookwyrm.settings import BASE_URL, DOMAIN, ENABLE_PREVIEW_IMAGES, USE_HTTPS, LANGUAGES from bookwyrm.signatures import create_key_pair from bookwyrm.tasks import app, MISC from bookwyrm.utils import regex @@ -214,8 +214,7 @@ class User(OrderedCollectionPageMixin, AbstractUser): @property def confirmation_link(self): """helper for generating confirmation links""" - link = site_link() - return f"{link}/confirm-email/{self.confirmation_code}" + return f"{BASE_URL}/confirm-email/{self.confirmation_code}" @property def following_link(self): diff --git a/bookwyrm/templates/email/html_layout.html b/bookwyrm/templates/email/html_layout.html index b9f88732f..467d6d6e5 100644 --- a/bookwyrm/templates/email/html_layout.html +++ b/bookwyrm/templates/email/html_layout.html @@ -2,10 +2,10 @@
    -

    {% blocktrans %}BookWyrm hosted on {{ site_name }}{% endblocktrans %}

    +

    {% blocktrans %}BookWyrm hosted on {{ site_name }}{% endblocktrans %}

    {% if user %} -

    {% trans "Email preference" %}

    +

    {% trans "Email preference" %}

    {% endif %}

    diff --git a/bookwyrm/templates/email/invite/html_content.html b/bookwyrm/templates/email/invite/html_content.html index adc993b7b..9d2cda364 100644 --- a/bookwyrm/templates/email/invite/html_content.html +++ b/bookwyrm/templates/email/invite/html_content.html @@ -12,6 +12,6 @@

    {% url 'code-of-conduct' as coc_path %} {% url 'about' as about_path %} - {% blocktrans %}Learn more about {{ site_name }}.{% endblocktrans %} + {% blocktrans %}Learn more about {{ site_name }}.{% endblocktrans %}

    {% endblock %} diff --git a/bookwyrm/templates/email/invite/text_content.html b/bookwyrm/templates/email/invite/text_content.html index 26dcd1720..05fe91456 100644 --- a/bookwyrm/templates/email/invite/text_content.html +++ b/bookwyrm/templates/email/invite/text_content.html @@ -5,6 +5,6 @@ {{ invite_link }} -{% blocktrans %}Learn more about {{ site_name }}:{% endblocktrans %} https://{{ domain }}{% url 'about' %} +{% blocktrans %}Learn more about {{ site_name }}:{% endblocktrans %} {{ base_url }}{% url 'about' %} {% endblock %} diff --git a/bookwyrm/templates/opensearch.xml b/bookwyrm/templates/opensearch.xml index fd5c8f231..980ca5604 100644 --- a/bookwyrm/templates/opensearch.xml +++ b/bookwyrm/templates/opensearch.xml @@ -10,6 +10,6 @@ {{ image }} diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 2917c8908..7c1dcadc9 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -4,7 +4,7 @@ from dataclasses import dataclass import datetime import json import pathlib -import re +from urllib.parse import urlparse from typing import List from unittest import expectedFailure from unittest.mock import patch @@ -22,7 +22,7 @@ from bookwyrm.activitypub.base_activity import ActivityObject from bookwyrm.models import fields, User, Status, Edition from bookwyrm.models.base_model import BookWyrmModel from bookwyrm.models.activitypub_mixin import ActivitypubMixin -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import PROTOCOL, NETLOC # pylint: disable=too-many-public-methods @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @@ -427,12 +427,10 @@ class ModelFields(TestCase): instance = fields.ImageField() output = instance.field_to_activity(user.avatar) - self.assertIsNotNone( - re.match( - rf"https:\/\/{DOMAIN}\/.*\.jpg", - output.url, - ) - ) + parsed_url = urlparse(output.url) + self.assertEqual(parsed_url.scheme, PROTOCOL) + self.assertEqual(parsed_url.netloc, NETLOC) + self.assertRegex(parsed_url.path, r"\.jpg$") self.assertEqual(output.name, "") self.assertEqual(output.type, "Image") diff --git a/bookwyrm/tests/models/test_site.py b/bookwyrm/tests/models/test_site.py index 0933dac0c..c9f9a1315 100644 --- a/bookwyrm/tests/models/test_site.py +++ b/bookwyrm/tests/models/test_site.py @@ -79,7 +79,7 @@ class SiteModels(TestCase): def test_site_invite_link(self): """invite link generator""" invite = models.SiteInvite.objects.create(user=self.local_user, code="hello") - self.assertEqual(invite.link, f"https://{settings.DOMAIN}/invite/hello") + self.assertEqual(invite.link, f"{settings.BASE_URL}/invite/hello") def test_invite_request(self): """someone wants an invite""" @@ -95,7 +95,7 @@ class SiteModels(TestCase): """password reset token""" token = models.PasswordReset.objects.create(user=self.local_user, code="hello") self.assertTrue(token.valid()) - self.assertEqual(token.link, f"https://{settings.DOMAIN}/password-reset/hello") + self.assertEqual(token.link, f"{settings.BASE_URL}/password-reset/hello") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.suggested_users.remove_user_task.delay") diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 6323eeca3..2fede3684 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -227,11 +227,9 @@ class Status(TestCase): self.assertEqual(activity["sensitive"], False) self.assertIsInstance(activity["attachment"], list) self.assertEqual(activity["attachment"][0]["type"], "Document") - self.assertTrue( - re.match( - r"https:\/\/your.domain.here\/images\/covers\/test(_[A-z0-9]+)?.jpg", - activity["attachment"][0]["url"], - ) + self.assertRegex( + activity["attachment"][0]["url"], + rf"^{settings.BASE_URL}/images/covers/test(_[A-z0-9]+)?.jpg$", ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") @@ -263,12 +261,10 @@ class Status(TestCase): ), ) self.assertEqual(activity["attachment"][0]["type"], "Document") - # self.assertTrue( - # re.match( - # r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", - # activity["attachment"][0].url, - # ) - # ) + self.assertRegex( + activity["attachment"][0]["url"], + rf"^{settings.BASE_URL}/images/covers/test_[A-z0-9]+.jpg$", + ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") def test_quotation_to_activity(self, *_): @@ -306,11 +302,9 @@ class Status(TestCase): ), ) self.assertEqual(activity["attachment"][0]["type"], "Document") - self.assertTrue( - re.match( - r"https:\/\/your.domain.here\/images\/covers\/test(_[A-z0-9]+)?.jpg", - activity["attachment"][0]["url"], - ) + self.assertRegex( + activity["attachment"][0]["url"], + rf"^{settings.BASE_URL}/images/covers/test(_[A-z0-9]+)?.jpg$", ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") @@ -400,11 +394,9 @@ class Status(TestCase): ) self.assertEqual(activity["content"], "test content") self.assertEqual(activity["attachment"][0]["type"], "Document") - self.assertTrue( - re.match( - r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", - activity["attachment"][0]["url"], - ) + self.assertRegex( + activity["attachment"][0]["url"], + rf"^{settings.BASE_URL}/images/covers/test_[A-z0-9]+.jpg$", ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") @@ -425,11 +417,9 @@ class Status(TestCase): ) self.assertEqual(activity["content"], "test content") self.assertEqual(activity["attachment"][0]["type"], "Document") - self.assertTrue( - re.match( - r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", - activity["attachment"][0]["url"], - ) + self.assertRegex( + activity["attachment"][0]["url"], + rf"^{settings.BASE_URL}/images/covers/test_[A-z0-9]+.jpg$", ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") @@ -448,11 +438,9 @@ class Status(TestCase): f'rated {self.book.title}: 3 stars', ) self.assertEqual(activity["attachment"][0]["type"], "Document") - self.assertTrue( - re.match( - r"https:\/\/your.domain.here\/images\/covers\/test_[A-z0-9]+.jpg", - activity["attachment"][0]["url"], - ) + self.assertRegex( + activity["attachment"][0]["url"], + rf"^{settings.BASE_URL}/images/covers/test_[A-z0-9]+.jpg$", ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") diff --git a/bookwyrm/tests/test_utils.py b/bookwyrm/tests/test_utils.py index ed62050a8..438eb1dd3 100644 --- a/bookwyrm/tests/test_utils.py +++ b/bookwyrm/tests/test_utils.py @@ -2,6 +2,7 @@ import re from django.test import TestCase +from bookwyrm.settings import BASE_URL from bookwyrm.utils import regex from bookwyrm.utils.validate import validate_url_domain @@ -15,10 +16,8 @@ class TestUtils(TestCase): def test_valid_url_domain(self): """Check with a valid URL""" - self.assertEqual( - validate_url_domain("https://your.domain.here/legit-book-url/"), - "https://your.domain.here/legit-book-url/", - ) + legit = f"{BASE_URL}/legit-book-url/" + self.assertEqual(validate_url_domain(legit), legit) def test_invalid_url_domain(self): """Check with an invalid URL""" diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index 818647db1..a1c06bede 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -8,7 +8,7 @@ from django.test.client import RequestFactory import responses from bookwyrm import models, views -from bookwyrm.settings import USER_AGENT, DOMAIN +from bookwyrm.settings import USER_AGENT, BASE_URL @patch("bookwyrm.activitystreams.add_status_task.delay") @@ -288,13 +288,13 @@ class ViewsHelpers(TestCase): # pylint: disable=too-many-public-methods def test_redirect_to_referer_valid_domain(self, *_): """redirect to within the app""" request = self.factory.get("/path") - request.META = {"HTTP_REFERER": f"https://{DOMAIN}/and/a/path"} + request.META = {"HTTP_REFERER": f"{BASE_URL}/and/a/path"} result = views.helpers.redirect_to_referer(request) - self.assertEqual(result.url, f"https://{DOMAIN}/and/a/path") + self.assertEqual(result.url, f"{BASE_URL}/and/a/path") def test_redirect_to_referer_with_get_args(self, *_): """if the path has get params (like sort) they are preserved""" request = self.factory.get("/path") - request.META = {"HTTP_REFERER": f"https://{DOMAIN}/and/a/path?sort=hello"} + request.META = {"HTTP_REFERER": f"{BASE_URL}/and/a/path?sort=hello"} result = views.helpers.redirect_to_referer(request) - self.assertEqual(result.url, f"https://{DOMAIN}/and/a/path?sort=hello") + self.assertEqual(result.url, f"{BASE_URL}/and/a/path?sort=hello") diff --git a/bookwyrm/utils/validate.py b/bookwyrm/utils/validate.py index 459bc70a6..962d51a4e 100644 --- a/bookwyrm/utils/validate.py +++ b/bookwyrm/utils/validate.py @@ -1,7 +1,7 @@ """Validations""" from typing import Optional -from bookwyrm.settings import DOMAIN, USE_HTTPS +from bookwyrm.settings import BASE_URL def validate_url_domain(url: Optional[str]) -> Optional[str]: @@ -9,10 +9,7 @@ def validate_url_domain(url: Optional[str]) -> Optional[str]: if url is None: return None - protocol = "https://" if USE_HTTPS else "http://" - origin = f"{protocol}{DOMAIN}" + if not url.startswith(BASE_URL): + return None - if url.startswith(origin): - return url - - return None + return url diff --git a/bookwyrm/views/wellknown.py b/bookwyrm/views/wellknown.py index 0f2805ff2..e640c1c72 100644 --- a/bookwyrm/views/wellknown.py +++ b/bookwyrm/views/wellknown.py @@ -9,7 +9,7 @@ from django.utils import timezone from django.views.decorators.http import require_GET from bookwyrm import models -from bookwyrm.settings import DOMAIN, VERSION, LANGUAGE_CODE +from bookwyrm.settings import BASE_URL, DOMAIN, VERSION, LANGUAGE_CODE @require_GET @@ -34,7 +34,7 @@ def webfinger(request): }, { "rel": "http://ostatus.org/schema/1.0/subscribe", - "template": f"https://{DOMAIN}/ostatus_subscribe?acct={{uri}}", + "template": f"{BASE_URL}/ostatus_subscribe?acct={{uri}}", }, ], } From 609bc15406a5a728d673b628a839a43386f496e9 Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 7 Apr 2024 17:31:14 +0200 Subject: [PATCH 457/458] Support http:// protocol in BookWyrm connector --- bookwyrm/connectors/connector_manager.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bookwyrm/connectors/connector_manager.py b/bookwyrm/connectors/connector_manager.py index bdea00719..1e1b3b554 100644 --- a/bookwyrm/connectors/connector_manager.py +++ b/bookwyrm/connectors/connector_manager.py @@ -122,16 +122,18 @@ def get_or_create_connector(remote_id: str) -> abstract_connector.AbstractConnec if not identifier: raise ValueError(f"Invalid remote id: {remote_id}") + base_url = f"{url.scheme}://{url.netloc}" + try: connector_info = models.Connector.objects.get(identifier=identifier) except models.Connector.DoesNotExist: connector_info = models.Connector.objects.create( identifier=identifier, connector_file="bookwyrm_connector", - base_url=f"https://{identifier}", - books_url=f"https://{identifier}/book", - covers_url=f"https://{identifier}/images/covers", - search_url=f"https://{identifier}/search?q=", + base_url=base_url, + books_url=f"{base_url}/book", + covers_url=f"{base_url}/images/covers", + search_url=f"{base_url}/search?q=", priority=2, ) From 4f58b113309843757b5463b714a71d2c4631876a Mon Sep 17 00:00:00 2001 From: Bart Schuurmans Date: Sun, 7 Apr 2024 17:32:35 +0200 Subject: [PATCH 458/458] Include the correct protocol and port in remote IDs --- bookwyrm/models/author.py | 4 ++-- bookwyrm/models/base_model.py | 6 +++--- bookwyrm/models/book.py | 4 ++-- bookwyrm/models/group.py | 4 ++-- bookwyrm/models/list.py | 4 ++-- bookwyrm/models/report.py | 4 ++-- bookwyrm/models/shelf.py | 4 ++-- bookwyrm/models/user.py | 13 +++---------- .../connectors/test_abstract_connector.py | 8 +++----- bookwyrm/tests/data/ap_user_move.json | 6 ++++-- .../tests/data/bookwyrm_account_export.tar.gz | Bin 104793 -> 104717 bytes bookwyrm/tests/data/user_import.json | 6 +++--- bookwyrm/tests/models/test_base_model.py | 8 ++++---- bookwyrm/tests/models/test_book_model.py | 2 +- bookwyrm/tests/models/test_list.py | 2 +- bookwyrm/tests/models/test_shelf_model.py | 2 +- bookwyrm/tests/models/test_status_model.py | 4 ++-- bookwyrm/tests/models/test_user_model.py | 13 +++++-------- bookwyrm/tests/views/preferences/test_move.py | 2 -- bookwyrm/tests/views/test_isbn.py | 4 ++-- bookwyrm/tests/views/test_search.py | 4 ++-- 21 files changed, 46 insertions(+), 58 deletions(-) diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 70f85b3c8..abe78dafb 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -8,7 +8,7 @@ from django.contrib.postgres.indexes import GinIndex import pgtrigger from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from bookwyrm.utils.db import format_trigger from .book import BookDataModel, MergedAuthor @@ -70,7 +70,7 @@ class Author(BookDataModel): def get_remote_id(self): """editions and works both use "book" instead of model_name""" - return f"https://{DOMAIN}/author/{self.id}" + return f"{BASE_URL}/author/{self.id}" class Meta: """sets up indexes and triggers""" diff --git a/bookwyrm/models/base_model.py b/bookwyrm/models/base_model.py index 2d39e2a6f..ca13d9553 100644 --- a/bookwyrm/models/base_model.py +++ b/bookwyrm/models/base_model.py @@ -10,7 +10,7 @@ from django.http import Http404 from django.utils.translation import gettext_lazy as _ from django.utils.text import slugify -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .fields import RemoteIdField @@ -38,7 +38,7 @@ class BookWyrmModel(models.Model): def get_remote_id(self): """generate the url that resolves to the local object, without a slug""" - base_path = f"https://{DOMAIN}" + base_path = BASE_URL if hasattr(self, "user"): base_path = f"{base_path}{self.user.local_path}" @@ -53,7 +53,7 @@ class BookWyrmModel(models.Model): @property def local_path(self): """how to link to this object in the local app, with a slug""" - local = self.get_remote_id().replace(f"https://{DOMAIN}", "") + local = self.get_remote_id().replace(BASE_URL, "") name = None if hasattr(self, "name_field"): diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 6075d2c92..8e957b717 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -21,7 +21,7 @@ from bookwyrm import activitypub from bookwyrm.isbn.isbn import hyphenator_singleton as hyphenator from bookwyrm.preview_images import generate_edition_preview_image_task from bookwyrm.settings import ( - DOMAIN, + BASE_URL, DEFAULT_LANGUAGE, LANGUAGE_ARTICLES, ENABLE_PREVIEW_IMAGES, @@ -327,7 +327,7 @@ class Book(BookDataModel): def get_remote_id(self): """editions and works both use "book" instead of model_name""" - return f"https://{DOMAIN}/book/{self.id}" + return f"{BASE_URL}/book/{self.id}" def guess_sort_title(self): """Get a best-guess sort title for the current book""" diff --git a/bookwyrm/models/group.py b/bookwyrm/models/group.py index d02b56ab1..40a32b5dc 100644 --- a/bookwyrm/models/group.py +++ b/bookwyrm/models/group.py @@ -1,7 +1,7 @@ """ do book related things with other users """ from django.db import models, IntegrityError, transaction from django.db.models import Q -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .base_model import BookWyrmModel from . import fields from .relationship import UserBlocks @@ -17,7 +17,7 @@ class Group(BookWyrmModel): def get_remote_id(self): """don't want the user to be in there in this case""" - return f"https://{DOMAIN}/group/{self.id}" + return f"{BASE_URL}/group/{self.id}" @classmethod def followers_filter(cls, queryset, viewer): diff --git a/bookwyrm/models/list.py b/bookwyrm/models/list.py index 63dd5b23f..d32a8da95 100644 --- a/bookwyrm/models/list.py +++ b/bookwyrm/models/list.py @@ -7,7 +7,7 @@ from django.db.models import Q from django.utils import timezone from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .activitypub_mixin import CollectionItemMixin, OrderedCollectionMixin from .base_model import BookWyrmModel @@ -50,7 +50,7 @@ class List(OrderedCollectionMixin, BookWyrmModel): def get_remote_id(self): """don't want the user to be in there in this case""" - return f"https://{DOMAIN}/list/{self.id}" + return f"{BASE_URL}/list/{self.id}" @property def collection_queryset(self): diff --git a/bookwyrm/models/report.py b/bookwyrm/models/report.py index 74a9bbe41..64ade3a40 100644 --- a/bookwyrm/models/report.py +++ b/bookwyrm/models/report.py @@ -3,7 +3,7 @@ from django.core.exceptions import PermissionDenied from django.db import models from django.utils.translation import gettext_lazy as _ -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from .base_model import BookWyrmModel @@ -46,7 +46,7 @@ class Report(BookWyrmModel): raise PermissionDenied() def get_remote_id(self): - return f"https://{DOMAIN}/settings/reports/{self.id}" + return f"{BASE_URL}/settings/reports/{self.id}" def comment(self, user, note): """comment on a report""" diff --git a/bookwyrm/models/shelf.py b/bookwyrm/models/shelf.py index 3d92f8d43..4b4e3cd8d 100644 --- a/bookwyrm/models/shelf.py +++ b/bookwyrm/models/shelf.py @@ -6,7 +6,7 @@ from django.db import models from django.utils import timezone from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from bookwyrm.tasks import BROADCAST from .activitypub_mixin import CollectionItemMixin, OrderedCollectionMixin from .base_model import BookWyrmModel @@ -71,7 +71,7 @@ class Shelf(OrderedCollectionMixin, BookWyrmModel): @property def local_path(self): """No slugs""" - return self.get_remote_id().replace(f"https://{DOMAIN}", "") + return self.get_remote_id().replace(BASE_URL, "") def raise_not_deletable(self, viewer): """don't let anyone delete a default shelf""" diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index f793d61b8..e2671b07f 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -19,7 +19,7 @@ from bookwyrm.connectors import get_data, ConnectorException from bookwyrm.models.shelf import Shelf from bookwyrm.models.status import Status from bookwyrm.preview_images import generate_user_preview_image_task -from bookwyrm.settings import BASE_URL, DOMAIN, ENABLE_PREVIEW_IMAGES, USE_HTTPS, LANGUAGES +from bookwyrm.settings import BASE_URL, ENABLE_PREVIEW_IMAGES, LANGUAGES from bookwyrm.signatures import create_key_pair from bookwyrm.tasks import app, MISC from bookwyrm.utils import regex @@ -42,12 +42,6 @@ def get_feed_filter_choices(): return [f[0] for f in FeedFilterChoices] -def site_link(): - """helper for generating links to the site""" - protocol = "https" if USE_HTTPS else "http" - return f"{protocol}://{DOMAIN}" - - # pylint: disable=too-many-public-methods class User(OrderedCollectionPageMixin, AbstractUser): """a user who wants to read books""" @@ -368,11 +362,10 @@ class User(OrderedCollectionPageMixin, AbstractUser): with transaction.atomic(): # populate fields for local users - link = site_link() - self.remote_id = f"{link}/user/{self.localname}" + self.remote_id = f"{BASE_URL}/user/{self.localname}" self.followers_url = f"{self.remote_id}/followers" self.inbox = f"{self.remote_id}/inbox" - self.shared_inbox = f"{link}/inbox" + self.shared_inbox = f"{BASE_URL}/inbox" self.outbox = f"{self.remote_id}/outbox" # an id needs to be set before we can proceed with related models diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index 994286994..1a8421c12 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -6,7 +6,7 @@ import responses from bookwyrm import models from bookwyrm.connectors import abstract_connector, ConnectorException from bookwyrm.connectors.abstract_connector import Mapping, get_data -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL class AbstractConnector(TestCase): @@ -86,7 +86,7 @@ class AbstractConnector(TestCase): def test_get_or_create_book_existing(self): """find an existing book by remote/origin id""" self.assertEqual(models.Book.objects.count(), 1) - self.assertEqual(self.book.remote_id, f"https://{DOMAIN}/book/{self.book.id}") + self.assertEqual(self.book.remote_id, f"{BASE_URL}/book/{self.book.id}") self.assertEqual(self.book.origin_id, "https://example.com/book/1234") # dedupe by origin id @@ -95,9 +95,7 @@ class AbstractConnector(TestCase): self.assertEqual(result, self.book) # dedupe by remote id - result = self.connector.get_or_create_book( - f"https://{DOMAIN}/book/{self.book.id}" - ) + result = self.connector.get_or_create_book(f"{BASE_URL}/book/{self.book.id}") self.assertEqual(models.Book.objects.count(), 1) self.assertEqual(result, self.book) diff --git a/bookwyrm/tests/data/ap_user_move.json b/bookwyrm/tests/data/ap_user_move.json index 52de40a68..11b10ded1 100644 --- a/bookwyrm/tests/data/ap_user_move.json +++ b/bookwyrm/tests/data/ap_user_move.json @@ -29,7 +29,9 @@ "bookwyrmUser": true, "manuallyApprovesFollowers": false, "discoverable": false, - "alsoKnownAs": ["https://your.domain.here/user/rat"], + "alsoKnownAs": [ + "https://your.domain.here:4242/user/rat" + ], "devices": "https://friend.camp/users/tripofmice/collections/devices", "tag": [], "icon": { @@ -37,4 +39,4 @@ "mediaType": "image/png", "url": "https://example.com/images/avatars/AL-2-crop-50.png" } -} +} \ No newline at end of file diff --git a/bookwyrm/tests/data/bookwyrm_account_export.tar.gz b/bookwyrm/tests/data/bookwyrm_account_export.tar.gz index 34cee6bc001a7d834d45506100a98c1b01bcefa2..d7bc5634b0456cf7b3ad61a76800b714e1eab8d5 100644 GIT binary patch literal 104717 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 like it

    ", "to": [ - "https://your.domain.here/user/rat/followers" + "https://your.domain.here:4242/user/rat/followers" ], "cc": [], "replies": { @@ -395,7 +395,7 @@ "https://local.lists/9999" ], "follows": [ - "https://your.domain.here/user/rat" + "https://your.domain.here:4242/user/rat" ], - "blocks": ["https://your.domain.here/user/badger"] + "blocks": ["https://your.domain.here:4242/user/badger"] } diff --git a/bookwyrm/tests/models/test_base_model.py b/bookwyrm/tests/models/test_base_model.py index d666b0e46..f16bdfa78 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -5,7 +5,7 @@ from django.test import TestCase from bookwyrm import models from bookwyrm.models import base_model -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL # pylint: disable=attribute-defined-outside-init @@ -44,14 +44,14 @@ class BaseModel(TestCase): """these should be generated""" self.test_model.id = 1 # pylint: disable=invalid-name expected = self.test_model.get_remote_id() - self.assertEqual(expected, f"https://{DOMAIN}/bookwyrmtestmodel/1") + self.assertEqual(expected, f"{BASE_URL}/bookwyrmtestmodel/1") def test_remote_id_with_user(self): """format of remote id when there's a user object""" self.test_model.user = self.local_user self.test_model.id = 1 expected = self.test_model.get_remote_id() - self.assertEqual(expected, f"https://{DOMAIN}/user/mouse/bookwyrmtestmodel/1") + self.assertEqual(expected, f"{BASE_URL}/user/mouse/bookwyrmtestmodel/1") def test_set_remote_id(self): """this function sets remote ids after creation""" @@ -60,7 +60,7 @@ class BaseModel(TestCase): instance = models.Work.objects.create(title="work title") instance.remote_id = None base_model.set_remote_id(None, instance, True) - self.assertEqual(instance.remote_id, f"https://{DOMAIN}/book/{instance.id}") + self.assertEqual(instance.remote_id, f"{BASE_URL}/book/{instance.id}") # shouldn't set remote_id if it's not created instance.remote_id = None diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 5b2b71ba9..ebb57061d 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -31,7 +31,7 @@ class Book(TestCase): def test_remote_id(self): """fanciness with remote/origin ids""" - remote_id = f"https://{settings.DOMAIN}/book/{self.work.id}" + remote_id = f"{settings.BASE_URL}/book/{self.work.id}" self.assertEqual(self.work.get_remote_id(), remote_id) self.assertEqual(self.work.remote_id, remote_id) diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index b9148853b..a902f6cca 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -28,7 +28,7 @@ class List(TestCase): def test_remote_id(self, *_): """shelves use custom remote ids""" book_list = models.List.objects.create(name="Test List", user=self.local_user) - expected_id = f"https://{settings.DOMAIN}/list/{book_list.id}" + expected_id = f"{settings.BASE_URL}/list/{book_list.id}" self.assertEqual(book_list.get_remote_id(), expected_id) def test_to_activity(self, *_): diff --git a/bookwyrm/tests/models/test_shelf_model.py b/bookwyrm/tests/models/test_shelf_model.py index 022cb5c61..d510952ea 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -35,7 +35,7 @@ class Shelf(TestCase): shelf = models.Shelf.objects.create( name="Test Shelf", identifier="test-shelf", user=self.local_user ) - expected_id = f"https://{settings.DOMAIN}/user/mouse/books/test-shelf" + expected_id = f"{settings.BASE_URL}/user/mouse/books/test-shelf" self.assertEqual(shelf.get_remote_id(), expected_id) def test_to_activity(self, *_): diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 2fede3684..5837b4188 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -60,7 +60,7 @@ class Status(TestCase): def test_status_generated_fields(self, *_): """setting remote id""" status = models.Status.objects.create(content="bleh", user=self.local_user) - expected_id = f"https://{settings.DOMAIN}/user/mouse/status/{status.id}" + expected_id = f"{settings.BASE_URL}/user/mouse/status/{status.id}" self.assertEqual(status.remote_id, expected_id) self.assertEqual(status.privacy, "public") @@ -151,7 +151,7 @@ class Status(TestCase): self.assertEqual(activity["tag"][0]["type"], "Hashtag") self.assertEqual(activity["tag"][0]["name"], "#content") self.assertEqual( - activity["tag"][0]["href"], f"https://{settings.DOMAIN}/hashtag/{tag.id}" + activity["tag"][0]["href"], f"{settings.BASE_URL}/hashtag/{tag.id}" ) def test_status_with_mention_to_activity(self, *_): diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 22c7a171b..3147f95e3 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -9,15 +9,12 @@ import responses from bookwyrm import models from bookwyrm.management.commands import initdb -from bookwyrm.settings import USE_HTTPS, DOMAIN +from bookwyrm.settings import DOMAIN, BASE_URL # pylint: disable=missing-class-docstring # pylint: disable=missing-function-docstring class User(TestCase): - - protocol = "https://" if USE_HTTPS else "http://" - @classmethod def setUpTestData(cls): with ( @@ -49,11 +46,11 @@ class User(TestCase): def test_computed_fields(self): """username instead of id here""" - expected_id = f"{self.protocol}{DOMAIN}/user/mouse" + expected_id = f"{BASE_URL}/user/mouse" self.assertEqual(self.user.remote_id, expected_id) self.assertEqual(self.user.username, f"mouse@{DOMAIN}") self.assertEqual(self.user.localname, "mouse") - self.assertEqual(self.user.shared_inbox, f"{self.protocol}{DOMAIN}/inbox") + self.assertEqual(self.user.shared_inbox, f"{BASE_URL}/inbox") self.assertEqual(self.user.inbox, f"{expected_id}/inbox") self.assertEqual(self.user.outbox, f"{expected_id}/outbox") self.assertEqual(self.user.followers_url, f"{expected_id}/followers") @@ -130,7 +127,7 @@ class User(TestCase): patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): user = models.User.objects.create_user( - f"test2{DOMAIN}", + "test2", "test2@bookwyrm.test", localname="test2", **user_attrs, @@ -145,7 +142,7 @@ class User(TestCase): patch("bookwyrm.lists_stream.populate_lists_task.delay"), ): user = models.User.objects.create_user( - f"test1{DOMAIN}", + "test1", "test1@bookwyrm.test", localname="test1", **user_attrs, diff --git a/bookwyrm/tests/views/preferences/test_move.py b/bookwyrm/tests/views/preferences/test_move.py index acd2f4a2d..15edf3638 100644 --- a/bookwyrm/tests/views/preferences/test_move.py +++ b/bookwyrm/tests/views/preferences/test_move.py @@ -27,7 +27,6 @@ class ViewsHelpers(TestCase): patch("bookwyrm.lists_stream.populate_lists_task.delay"), patch("bookwyrm.suggested_users.rerank_user_task.delay"), ): - cls.local_user = models.User.objects.create_user( "rat", "rat@rat.com", @@ -35,7 +34,6 @@ class ViewsHelpers(TestCase): local=True, discoverable=True, localname="rat", - remote_id="https://your.domain.here/user/rat", ) with ( diff --git a/bookwyrm/tests/views/test_isbn.py b/bookwyrm/tests/views/test_isbn.py index 632a831b0..60a81f3a2 100644 --- a/bookwyrm/tests/views/test_isbn.py +++ b/bookwyrm/tests/views/test_isbn.py @@ -8,7 +8,7 @@ from django.test.client import RequestFactory from bookwyrm import models, views from bookwyrm.tests.validate_html import validate_html -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL class IsbnViews(TestCase): @@ -55,7 +55,7 @@ class IsbnViews(TestCase): data = json.loads(response.content) self.assertEqual(len(data), 1) self.assertEqual(data[0]["title"], "Test Book") - self.assertEqual(data[0]["key"], f"https://{DOMAIN}/book/{self.book.id}") + self.assertEqual(data[0]["key"], f"{BASE_URL}/book/{self.book.id}") def test_isbn_html_response(self): """searches local data only and returns book data in json format""" diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 64ff68ba8..6c7e41cf3 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -10,7 +10,7 @@ from django.test.client import RequestFactory from bookwyrm import models, views from bookwyrm.book_search import SearchResult -from bookwyrm.settings import DOMAIN +from bookwyrm.settings import BASE_URL from bookwyrm.tests.validate_html import validate_html @@ -57,7 +57,7 @@ class Views(TestCase): data = json.loads(response.content) self.assertEqual(len(data), 1) self.assertEqual(data[0]["title"], "Test Book") - self.assertEqual(data[0]["key"], f"https://{DOMAIN}/book/{self.book.id}") + self.assertEqual(data[0]["key"], f"{BASE_URL}/book/{self.book.id}") def test_search_no_query(self): """just the search page"""