mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-04 23:36:32 +00:00
Merge branch 'main' into production
This commit is contained in:
commit
94d18f6c24
28 changed files with 586 additions and 380 deletions
31
.editorconfig
Normal file
31
.editorconfig
Normal file
|
@ -0,0 +1,31 @@
|
|||
# @see https://editorconfig.org/
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
max_line_length = 100
|
||||
|
||||
# C-style doc comments
|
||||
block_comment_start = /*
|
||||
block_comment = *
|
||||
block_comment_end = */
|
||||
|
||||
[{bw-dev,fr-dev,LICENSE}]
|
||||
max_line_length = off
|
||||
|
||||
[*.{csv,json,html,md,po,py,svg,tsv}]
|
||||
max_line_length = off
|
||||
|
||||
[*.{md,markdown}]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
max_line_length = off
|
2
.github/workflows/black.yml
vendored
2
.github/workflows/black.yml
vendored
|
@ -1,4 +1,4 @@
|
|||
name: Lint
|
||||
name: Lint Python
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
|
|
21
.github/workflows/linters-global.yaml
vendored
Normal file
21
.github/workflows/linters-global.yaml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
# @url https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
|
||||
name: Lint Project
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, ci ]
|
||||
pull_request:
|
||||
branches: [ main, ci ]
|
||||
|
||||
jobs:
|
||||
linters:
|
||||
name: linters
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: EditorConfig
|
||||
uses: greut/eclint-action@v0
|
18
README.md
18
README.md
|
@ -158,6 +158,24 @@ The `production` branch of BookWyrm contains a number of tools not on the `main`
|
|||
|
||||
Instructions for running BookWyrm in production:
|
||||
|
||||
- Get the application code:
|
||||
`git clone git@github.com:mouse-reeve/bookwyrm.git`
|
||||
- Switch to the `production` branch
|
||||
`git checkout production`
|
||||
- Create your environment variables file
|
||||
`cp .env.example .env`
|
||||
- Add your domain, email address, SMTP credentials
|
||||
- Set a secure redis password and secret key
|
||||
- Set a secure database password for postgres
|
||||
- Update your nginx configuration in `nginx/default.conf`
|
||||
- Replace `your-domain.com` with your domain name
|
||||
- Run the application (this should also set up a Certbot ssl cert for your domain) with
|
||||
`docker-compose up --build`, and make sure all the images build successfully
|
||||
- When docker has built successfully, stop the process with `CTRL-C`
|
||||
- Comment out the `command: certonly...` line in `docker-compose.yml`
|
||||
- Run docker-compose in the background with: `docker-compose up -d`
|
||||
- Initialize the database with: `./bw-dev initdb`
|
||||
- Set up schedule backups with cron that runs that `docker-compose exec db pg_dump -U <databasename>` and saves the backup to a safe location
|
||||
- Get the application code:
|
||||
`git clone git@github.com:mouse-reeve/bookwyrm.git`
|
||||
- Switch to the `production` branch
|
||||
|
|
|
@ -76,7 +76,16 @@ class ReviewForm(CustomForm):
|
|||
class CommentForm(CustomForm):
|
||||
class Meta:
|
||||
model = models.Comment
|
||||
fields = ["user", "book", "content", "content_warning", "sensitive", "privacy"]
|
||||
fields = [
|
||||
"user",
|
||||
"book",
|
||||
"content",
|
||||
"content_warning",
|
||||
"sensitive",
|
||||
"privacy",
|
||||
"progress",
|
||||
"progress_mode",
|
||||
]
|
||||
|
||||
|
||||
class QuotationForm(CustomForm):
|
||||
|
|
34
bookwyrm/migrations/0055_auto_20210321_0101.py
Normal file
34
bookwyrm/migrations/0055_auto_20210321_0101.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.1.6 on 2021-03-21 01:01
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("bookwyrm", "0054_auto_20210319_1942"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="comment",
|
||||
name="progress",
|
||||
field=models.IntegerField(
|
||||
blank=True,
|
||||
null=True,
|
||||
validators=[django.core.validators.MinValueValidator(0)],
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="comment",
|
||||
name="progress_mode",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
choices=[("PG", "page"), ("PCT", "percent")],
|
||||
default="PG",
|
||||
max_length=3,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
]
|
|
@ -7,6 +7,8 @@ from .base_model import BookWyrmModel
|
|||
|
||||
|
||||
class ProgressMode(models.TextChoices):
|
||||
""" types of prgress available """
|
||||
|
||||
PAGE = "PG", "page"
|
||||
PERCENT = "PCT", "percent"
|
||||
|
||||
|
@ -32,10 +34,12 @@ class ReadThrough(BookWyrmModel):
|
|||
super().save(*args, **kwargs)
|
||||
|
||||
def create_update(self):
|
||||
""" add update to the readthrough """
|
||||
if self.progress:
|
||||
return self.progressupdate_set.create(
|
||||
user=self.user, progress=self.progress, mode=self.progress_mode
|
||||
)
|
||||
return None
|
||||
|
||||
|
||||
class ProgressUpdate(BookWyrmModel):
|
||||
|
|
|
@ -14,6 +14,7 @@ from .activitypub_mixin import ActivitypubMixin, ActivityMixin
|
|||
from .activitypub_mixin import OrderedCollectionPageMixin
|
||||
from .base_model import BookWyrmModel
|
||||
from .fields import image_serializer
|
||||
from .readthrough import ProgressMode
|
||||
from . import fields
|
||||
|
||||
|
||||
|
@ -229,6 +230,19 @@ class Comment(Status):
|
|||
"Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook"
|
||||
)
|
||||
|
||||
# this is it's own field instead of a foreign key to the progress update
|
||||
# so that the update can be deleted without impacting the status
|
||||
progress = models.IntegerField(
|
||||
validators=[MinValueValidator(0)], null=True, blank=True
|
||||
)
|
||||
progress_mode = models.CharField(
|
||||
max_length=3,
|
||||
choices=ProgressMode.choices,
|
||||
default=ProgressMode.PAGE,
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
|
||||
@property
|
||||
def pure_content(self):
|
||||
""" indicate the book in question for mastodon (or w/e) users """
|
||||
|
|
4
bookwyrm/static/css/fonts/.editorconfig
Normal file
4
bookwyrm/static/css/fonts/.editorconfig
Normal file
|
@ -0,0 +1,4 @@
|
|||
# @see https://editorconfig.org/
|
||||
|
||||
[*.svg]
|
||||
insert_final_newline = unset
|
|
@ -14,9 +14,6 @@ html {
|
|||
.card {
|
||||
overflow: visible;
|
||||
}
|
||||
.card-header-title {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* --- SHELVING --- */
|
||||
.shelf-option:disabled > *::after {
|
||||
|
|
|
@ -59,7 +59,9 @@ class TabGroup {
|
|||
}
|
||||
|
||||
initPanels() {
|
||||
let selectedPanelId = this.tablist.querySelector('[role="tab"][aria-selected="true"]').getAttribute("aria-controls");
|
||||
let selectedPanelId = this.tablist
|
||||
.querySelector('[role="tab"][aria-selected="true"]')
|
||||
.getAttribute("aria-controls");
|
||||
for(let panel of this.panels) {
|
||||
if(panel.getAttribute("id") !== selectedPanelId) {
|
||||
panel.setAttribute("hidden", "");
|
||||
|
|
|
@ -47,20 +47,18 @@
|
|||
{% for book in shelf.books %}
|
||||
<div class="suggested-tabs card" role="tabpanel" id="book-{{ book.id }}"{% if shelf_counter != 1 or not forloop.first %} hidden{% endif %} aria-labelledby="tab-book-{{ book.id }}">
|
||||
<div class="card-header">
|
||||
<p class="card-header-title">
|
||||
<span>{% include 'snippets/book_titleby.html' with book=book %}</span>
|
||||
</p>
|
||||
<div class="card-header-title">
|
||||
<div>
|
||||
<p class="mb-2">{% include 'snippets/book_titleby.html' with book=book %}</p>
|
||||
{% include 'snippets/shelve_button/shelve_button.html' with book=book %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-header-icon is-hidden-tablet">
|
||||
{% trans "Close" as button_text %}
|
||||
{% include 'snippets/toggle/toggle_button.html' with label=button_text controls_text="book" controls_uid=book.id class="delete" nonbutton=True pressed=True %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-content">
|
||||
{% include 'snippets/shelve_button/shelve_button.html' with book=book %}
|
||||
{% active_shelf book as active_shelf %}
|
||||
{% if active_shelf.shelf.identifier == 'reading' and book.latest_readthrough %}
|
||||
{% include 'snippets/progress_update.html' with readthrough=book.latest_readthrough %}
|
||||
{% endif %}
|
||||
{% include 'snippets/create_status.html' with book=book %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -13,7 +13,15 @@
|
|||
{% endif %}
|
||||
<div class="control">
|
||||
{% if type != 'reply' and type != 'direct' %}
|
||||
<label class="label" for="id_{% if type == 'quotation' %}quote{% else %}content{% endif %}_{{ book.id }}_{{ type }}">{{ type|title }}:</label>
|
||||
<label class="label" for="id_{% if type == 'quotation' %}quote{% else %}content{% endif %}_{{ book.id }}_{{ type }}">
|
||||
{% if type == 'comment' %}
|
||||
{% trans "Comment:" %}
|
||||
{% elif type == 'quotation' %}
|
||||
{% trans "Quote:" %}
|
||||
{% elif type == 'review' %}
|
||||
{% trans "Review:" %}
|
||||
{% endif %}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
{% if type == 'review' %}
|
||||
|
@ -45,6 +53,33 @@
|
|||
{% include 'snippets/content_warning_field.html' with parent_status=status %}
|
||||
<textarea name="content" class="textarea is-small" id="id_content_quote-{{ book.id }}"></textarea>
|
||||
</div>
|
||||
{% elif type == 'comment' %}
|
||||
<div class="control">
|
||||
{% active_shelf book as active_shelf %}
|
||||
{% if active_shelf.shelf.identifier == 'reading' and book.latest_readthrough %}
|
||||
|
||||
{% with readthrough=book.latest_readthrough %}
|
||||
<div class="field">
|
||||
<input type="hidden" name="id" value="{{ readthrough.id }}"/>
|
||||
<label class="label" for="progress-{{ uuid }}">{% trans "Progress:" %}</label>
|
||||
<div class="field has-addons mb-0">
|
||||
<div class="control">
|
||||
<input aria-label="{% if readthrough.progress_mode == 'PG' %}Current page{% else %}Percent read{% endif %}" class="input" type="number" min="0" name="progress" size="3" value="{{ readthrough.progress|default:'' }}" id="progress-{{ uuid }}">
|
||||
</div>
|
||||
<div class="control select">
|
||||
<select name="progress_mode" aria-label="Progress mode">
|
||||
<option value="PG" {% if readthrough.progress_mode == 'PG' %}selected{% endif %}>{% trans "pages" %}</option>
|
||||
<option value="PCT" {% if readthrough.progress_mode == 'PCT' %}selected{% endif %}>{% trans "percent" %}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% if readthrough.progress_mode == 'PG' and book.pages %}
|
||||
<p class="help">{% blocktrans with pages=book.pages %}of {{ pages }} pages{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<input type="checkbox" class="hidden" name="sensitive" id="id_show_spoilers-{{ uuid }}" {% if status.content_warning %}checked{% endif %} aria-hidden="true">
|
||||
{# bottom bar #}
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
{% load i18n %}
|
||||
<form class="field is-grouped is-small" action="/edit-readthrough" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="id" value="{{ readthrough.id }}"/>
|
||||
<div class="field">
|
||||
<label class="label is-align-self-center mb-0 pr-2" for="progress">{% trans "Progress:" %}</label>
|
||||
<div class="field has-addons mb-0">
|
||||
<div class="control">
|
||||
<input
|
||||
aria-label="{% if readthrough.progress_mode == 'PG' %}Current page{% else %}Percent read{% endif %}"
|
||||
class="input is-small" type="number" min="0"
|
||||
name="progress" size="3" value="{{ readthrough.progress|default:'' }}">
|
||||
</div>
|
||||
<div class="control select is-small">
|
||||
<select name="progress_mode" aria-label="Progress mode">
|
||||
<option value="PG" {% if readthrough.progress_mode == 'PG' %}selected{% endif %}>{% trans "pages" %}</option>
|
||||
<option value="PCT" {% if readthrough.progress_mode == 'PCT' %}selected{% endif %}>{% trans "percent" %}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="control">
|
||||
<button class="button is-small px-2 is-primary" type="submit">{% trans "Save" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
{% if readthrough.progress_mode == 'PG' and book.pages %}
|
||||
<p class="help">{% blocktrans with pages=book.pages %}of {{ pages }} pages{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1,46 @@
|
|||
{% extends 'components/modal.html' %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block modal-title %}
|
||||
{% trans "Update progress" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block modal-form-open %}
|
||||
<form action="{% url 'edit-readthrough' %}" method="POST">
|
||||
{% endblock %}
|
||||
|
||||
{% block modal-body %}
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="id" value="{{ readthrough.id }}"/>
|
||||
<div class="field">
|
||||
<label class="label is-align-self-center mb-0 pr-2" for="progress">{% trans "Progress:" %}</label>
|
||||
<div class="field has-addons mb-0">
|
||||
<div class="control">
|
||||
<input
|
||||
aria-label="{% if readthrough.progress_mode == 'PG' %}Current page{% else %}Percent read{% endif %}"
|
||||
class="input"
|
||||
type="number"
|
||||
min="0"
|
||||
name="progress"
|
||||
size="3"
|
||||
value="{{ readthrough.progress|default:'' }}">
|
||||
</div>
|
||||
<div class="control select">
|
||||
<select name="progress_mode" aria-label="Progress mode">
|
||||
<option value="PG" {% if readthrough.progress_mode == 'PG' %}selected{% endif %}>{% trans "pages" %}</option>
|
||||
<option value="PCT" {% if readthrough.progress_mode == 'PCT' %}selected{% endif %}>{% trans "percent" %}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% if readthrough.progress_mode == 'PG' and book.pages %}
|
||||
<p class="help">{% blocktrans with pages=book.pages %}of {{ pages }} pages{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block modal-footer %}
|
||||
<button class="button is-success" type="submit">{% trans "Save" %}</button>
|
||||
{% trans "Cancel" as button_text %}
|
||||
{% include 'snippets/toggle/toggle_button.html' with text=button_text %}
|
||||
{% endblock %}
|
||||
{% block modal-form-close %}</form>{% endblock %}
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
{% with book.id|uuid as uuid %}
|
||||
{% active_shelf book as active_shelf %}
|
||||
<div class="field has-addons">
|
||||
<div class="field has-addons mb-0">
|
||||
{% if switch_mode and active_shelf.book != book %}
|
||||
<div class="control">
|
||||
{% include 'snippets/switch_edition_button.html' with edition=book size='is-small' %}
|
||||
|
@ -23,5 +23,7 @@
|
|||
{% latest_read_through book request.user as readthrough %}
|
||||
{% include 'snippets/shelve_button/finish_reading_modal.html' with book=active_shelf.book controls_text="finish-reading" controls_uid=uuid readthrough=readthrough %}
|
||||
|
||||
{% include 'snippets/shelve_button/progress_update_modal.html' with book=shelf_book.book controls_text="progress-update" controls_uid=uuid readthrough=readthrough %}
|
||||
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
|
|
|
@ -27,3 +27,11 @@
|
|||
</div>
|
||||
{% if dropdown %}</li>{% endif %}
|
||||
{% endfor %}
|
||||
{% if dropdown %}
|
||||
<li role="menuitem">
|
||||
<div class="dropdown-item pt-0 pb-0">
|
||||
{% trans "Update progress" as button_text %}
|
||||
{% include 'snippets/toggle/toggle_button.html' with class=class text=button_text controls_text="progress-update" controls_uid=button_uuid focus="modal-title-progress-update" %}
|
||||
</div>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
|
|
@ -35,3 +35,9 @@
|
|||
{% elif status.mention_books %}
|
||||
<a href="/book/{{ status.mention_books.first.id }}">{{ status.mention_books.first.title }}</a>
|
||||
{% endif %}
|
||||
|
||||
{% if status.progress %}
|
||||
<p class="help">
|
||||
({% if status.progress_mode == 'PG' %}page {{ status.progress }}{%else %}{{ status.progress }}%{% endif %})
|
||||
</p>
|
||||
{% endif %}
|
||||
|
|
|
@ -183,7 +183,7 @@ urlpatterns = [
|
|||
re_path(r"^shelve/?$", views.shelve),
|
||||
re_path(r"^unshelve/?$", views.unshelve),
|
||||
# reading progress
|
||||
re_path(r"^edit-readthrough/?$", views.edit_readthrough),
|
||||
re_path(r"^edit-readthrough/?$", views.edit_readthrough, name="edit-readthrough"),
|
||||
re_path(r"^delete-readthrough/?$", views.delete_readthrough),
|
||||
re_path(r"^create-readthrough/?$", views.create_readthrough),
|
||||
re_path(r"^delete-progressupdate/?$", views.delete_progressupdate),
|
||||
|
|
|
@ -13,6 +13,7 @@ from bookwyrm.settings import DOMAIN
|
|||
from bookwyrm.status import delete_status
|
||||
from bookwyrm.utils import regex
|
||||
from .helpers import handle_remote_webfinger
|
||||
from .reading import edit_readthrough
|
||||
|
||||
|
||||
# pylint: disable= no-self-use
|
||||
|
@ -64,6 +65,10 @@ class CreateStatus(View):
|
|||
status.quote = to_markdown(status.quote)
|
||||
|
||||
status.save(created=True)
|
||||
|
||||
# update a readthorugh, if needed
|
||||
edit_readthrough(request)
|
||||
|
||||
return redirect(request.headers.get("Referer", "/"))
|
||||
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ msgstr "Deutsch"
|
|||
|
||||
#: bookwyrm/settings.py:144
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
msgstr "Spanisch"
|
||||
|
||||
#: bookwyrm/settings.py:145
|
||||
msgid "French"
|
||||
|
@ -139,7 +139,7 @@ msgstr "%(pages)s Seiten"
|
|||
#: bookwyrm/templates/book/book.html:86
|
||||
#, python-format
|
||||
msgid "Published %(date)s by %(publisher)s."
|
||||
msgstr ""
|
||||
msgstr "Am %(date)s von %(publisher)s veröffentlicht."
|
||||
|
||||
#: bookwyrm/templates/book/book.html:88
|
||||
#, fuzzy, python-format
|
||||
|
@ -150,7 +150,7 @@ msgstr "Veröffentlichungsdatum:"
|
|||
#: bookwyrm/templates/book/book.html:90
|
||||
#, python-format
|
||||
msgid "Published by %(publisher)s."
|
||||
msgstr ""
|
||||
msgstr "Veröffentlicht von %(publisher)s."
|
||||
|
||||
#: bookwyrm/templates/book/book.html:95
|
||||
msgid "View on OpenLibrary"
|
||||
|
@ -283,7 +283,7 @@ msgstr "Cover hinzufügen"
|
|||
#: bookwyrm/templates/book/cover_modal.html:23
|
||||
#: bookwyrm/templates/book/edit_book.html:169
|
||||
msgid "Load cover from url:"
|
||||
msgstr ""
|
||||
msgstr "Cover von URL laden:"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:5
|
||||
#: bookwyrm/templates/book/edit_book.html:11
|
||||
|
@ -316,12 +316,12 @@ msgstr "Zuletzt bearbeitet von:"
|
|||
|
||||
#: bookwyrm/templates/book/edit_book.html:40
|
||||
msgid "Confirm Book Info"
|
||||
msgstr ""
|
||||
msgstr "Buchinfo bestätigen"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:47
|
||||
#, python-format
|
||||
msgid "Is \"%(name)s\" an existing author?"
|
||||
msgstr ""
|
||||
msgstr "Existiert \"%(name)s\" bereits als Autor:in?"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:52
|
||||
#, fuzzy, python-format
|
||||
|
@ -331,20 +331,20 @@ msgstr "\"<em>%(book_title)s</em>\" beginnen"
|
|||
|
||||
#: bookwyrm/templates/book/edit_book.html:55
|
||||
msgid "This is a new author"
|
||||
msgstr ""
|
||||
msgstr "Neue:r Autor:in"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:61
|
||||
#, python-format
|
||||
msgid "Creating a new author: %(name)s"
|
||||
msgstr ""
|
||||
msgstr "Neu als Autor:in erstellen: %(name)s"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:67
|
||||
msgid "Is this an edition of an existing work?"
|
||||
msgstr ""
|
||||
msgstr "Ist das eine Edition eines vorhandenen Werkes?"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:71
|
||||
msgid "This is a new work"
|
||||
msgstr ""
|
||||
msgstr "Dies ist ein neues Werk."
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:77
|
||||
#: bookwyrm/templates/password_reset.html:30
|
||||
|
@ -385,7 +385,7 @@ msgstr "Veröffentlicht"
|
|||
|
||||
#: bookwyrm/templates/book/edit_book.html:119
|
||||
msgid "Separate multiple publishers with commas."
|
||||
msgstr ""
|
||||
msgstr "Mehrere Herausgeber:innen durch Kommata trennen"
|
||||
|
||||
#: bookwyrm/templates/book/edit_book.html:125
|
||||
msgid "First published date:"
|
||||
|
@ -729,7 +729,7 @@ msgstr "Laden fehlgeschlagen"
|
|||
#: bookwyrm/templates/import_status.html:44
|
||||
#, python-format
|
||||
msgid "Jump to the bottom of the list to select the %(failed_count)s items which failed to import."
|
||||
msgstr ""
|
||||
msgstr "Zum Ende der Liste springen, um die %(failed_count)s Einträge, deren Import fehlschlug, auszuwählen."
|
||||
|
||||
#: bookwyrm/templates/import_status.html:79
|
||||
msgid "Select all"
|
||||
|
@ -882,7 +882,7 @@ msgstr "Admin kontaktieren"
|
|||
#: bookwyrm/templates/layout.html:202
|
||||
#, python-format
|
||||
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\">%(support_title)s</a>"
|
||||
msgstr ""
|
||||
msgstr "%(site_name)s auf <a href=\"%(support_link)s\" target=\"_blank\">%(support_title)s</a> unterstützen"
|
||||
|
||||
#: bookwyrm/templates/layout.html:206
|
||||
msgid "BookWyrm is open source software. You can contribute or report issues on <a href=\"https://github.com/mouse-reeve/bookwyrm\">GitHub</a>."
|
||||
|
@ -1046,11 +1046,11 @@ msgstr "Mehr über diese Seite"
|
|||
#: bookwyrm/templates/moderation/report_preview.html:6
|
||||
#, python-format
|
||||
msgid "Report #%(report_id)s: %(username)s"
|
||||
msgstr ""
|
||||
msgstr "Meldung #%(report_id)s: %(username)s"
|
||||
|
||||
#: bookwyrm/templates/moderation/report.html:10
|
||||
msgid "Back to reports"
|
||||
msgstr ""
|
||||
msgstr "Zurück zu den Meldungen"
|
||||
|
||||
#: bookwyrm/templates/moderation/report.html:18
|
||||
#, fuzzy
|
||||
|
@ -1072,15 +1072,15 @@ msgstr "Direktnachricht senden"
|
|||
|
||||
#: bookwyrm/templates/moderation/report.html:27
|
||||
msgid "Deactivate user"
|
||||
msgstr ""
|
||||
msgstr "Nutzer:in deaktivieren"
|
||||
|
||||
#: bookwyrm/templates/moderation/report.html:29
|
||||
msgid "Reactivate user"
|
||||
msgstr ""
|
||||
msgstr "Nutzer:in reaktivieren"
|
||||
|
||||
#: bookwyrm/templates/moderation/report.html:36
|
||||
msgid "Moderator Comments"
|
||||
msgstr ""
|
||||
msgstr "Moderator:innenkommentare"
|
||||
|
||||
#: bookwyrm/templates/moderation/report.html:54
|
||||
#: bookwyrm/templates/snippets/create_status.html:12
|
||||
|
@ -1096,11 +1096,11 @@ msgstr "Post löschen"
|
|||
|
||||
#: bookwyrm/templates/moderation/report.html:61
|
||||
msgid "No statuses reported"
|
||||
msgstr ""
|
||||
msgstr "Keine Beiträge gemeldet"
|
||||
|
||||
#: bookwyrm/templates/moderation/report.html:67
|
||||
msgid "Statuses has been deleted"
|
||||
msgstr ""
|
||||
msgstr "Beiträge wurden gelöscht"
|
||||
|
||||
#: bookwyrm/templates/moderation/report_modal.html:6
|
||||
#, fuzzy, python-format
|
||||
|
@ -1111,7 +1111,7 @@ msgstr "Listen: %(username)s"
|
|||
#: bookwyrm/templates/moderation/report_modal.html:21
|
||||
#, python-format
|
||||
msgid "This report will be sent to %(site_name)s's moderators for review."
|
||||
msgstr ""
|
||||
msgstr "Diese Meldung wird an die Moderator:innen von %(site_name)s weitergeletiet."
|
||||
|
||||
#: bookwyrm/templates/moderation/report_modal.html:22
|
||||
#, fuzzy
|
||||
|
@ -1121,11 +1121,11 @@ msgstr "Mehr über diese Seite"
|
|||
|
||||
#: bookwyrm/templates/moderation/report_modal.html:31
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Absenden"
|
||||
|
||||
#: bookwyrm/templates/moderation/report_preview.html:13
|
||||
msgid "No notes provided"
|
||||
msgstr ""
|
||||
msgstr "Keine Notizen angegeben."
|
||||
|
||||
#: bookwyrm/templates/moderation/report_preview.html:20
|
||||
#, fuzzy, python-format
|
||||
|
@ -1135,11 +1135,11 @@ msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>"
|
|||
|
||||
#: bookwyrm/templates/moderation/report_preview.html:30
|
||||
msgid "Re-open"
|
||||
msgstr ""
|
||||
msgstr "Wiedereröffnen"
|
||||
|
||||
#: bookwyrm/templates/moderation/report_preview.html:32
|
||||
msgid "Resolve"
|
||||
msgstr ""
|
||||
msgstr "Lösen"
|
||||
|
||||
#: bookwyrm/templates/moderation/reports.html:4
|
||||
#: bookwyrm/templates/moderation/reports.html:5
|
||||
|
@ -1273,7 +1273,7 @@ msgstr "Dein <a href=\"/import/%(related_id)s\">Import</a> ist abgeschlossen."
|
|||
#: bookwyrm/templates/notifications.html:113
|
||||
#, python-format
|
||||
msgid "A new <a href=\"%(path)s\">report</a> needs moderation."
|
||||
msgstr ""
|
||||
msgstr "Eine neue <a href=\"%(path)s\">Meldung</a> muss moderiert werden."
|
||||
|
||||
#: bookwyrm/templates/notifications.html:139
|
||||
msgid "You're all caught up!"
|
||||
|
@ -1345,7 +1345,7 @@ msgstr "Bio:"
|
|||
|
||||
#: bookwyrm/templates/preferences/edit_user.html:46
|
||||
msgid "Show set reading goal prompt in feed:"
|
||||
msgstr ""
|
||||
msgstr "Angegebenes Leseziel im Feed anzeigen."
|
||||
|
||||
#: bookwyrm/templates/preferences/edit_user.html:52
|
||||
msgid "Manually approve followers:"
|
||||
|
|
Loading…
Reference in a new issue