Merge branch 'main' into production

This commit is contained in:
Mouse Reeve 2021-08-17 15:09:38 -07:00
commit 376adc0a9a
51 changed files with 1001 additions and 644 deletions

View file

@ -106,8 +106,10 @@ class ActivityObject:
value = field.default value = field.default
setattr(self, field.name, value) setattr(self, field.name, value)
# pylint: disable=too-many-locals,too-many-branches # pylint: disable=too-many-locals,too-many-branches,too-many-arguments
def to_model(self, model=None, instance=None, allow_create=True, save=True): def to_model(
self, model=None, instance=None, allow_create=True, save=True, overwrite=True
):
"""convert from an activity to a model instance""" """convert from an activity to a model instance"""
model = model or get_model_from_type(self.type) model = model or get_model_from_type(self.type)
@ -129,9 +131,12 @@ class ActivityObject:
# keep track of what we've changed # keep track of what we've changed
update_fields = [] update_fields = []
# sets field on the model using the activity value
for field in instance.simple_fields: for field in instance.simple_fields:
try: try:
changed = field.set_field_from_activity(instance, self) changed = field.set_field_from_activity(
instance, self, overwrite=overwrite
)
if changed: if changed:
update_fields.append(field.name) update_fields.append(field.name)
except AttributeError as e: except AttributeError as e:
@ -140,7 +145,9 @@ class ActivityObject:
# image fields have to be set after other fields because they can save # image fields have to be set after other fields because they can save
# too early and jank up users # too early and jank up users
for field in instance.image_fields: for field in instance.image_fields:
changed = field.set_field_from_activity(instance, self, save=save) changed = field.set_field_from_activity(
instance, self, save=save, overwrite=overwrite
)
if changed: if changed:
update_fields.append(field.name) update_fields.append(field.name)

View file

@ -59,6 +59,9 @@ class Comment(Note):
"""like a note but with a book""" """like a note but with a book"""
inReplyToBook: str inReplyToBook: str
readingStatus: str = None
progress: int = None
progressMode: str = None
type: str = "Comment" type: str = "Comment"

View file

@ -139,7 +139,7 @@ class AbstractConnector(AbstractMinimalConnector):
**dict_from_mappings(work_data, self.book_mappings) **dict_from_mappings(work_data, self.book_mappings)
) )
# this will dedupe automatically # this will dedupe automatically
work = work_activity.to_model(model=models.Work) work = work_activity.to_model(model=models.Work, overwrite=False)
for author in self.get_authors_from_data(work_data): for author in self.get_authors_from_data(work_data):
work.authors.add(author) work.authors.add(author)
@ -156,7 +156,7 @@ class AbstractConnector(AbstractMinimalConnector):
mapped_data = dict_from_mappings(edition_data, self.book_mappings) mapped_data = dict_from_mappings(edition_data, self.book_mappings)
mapped_data["work"] = work.remote_id mapped_data["work"] = work.remote_id
edition_activity = activitypub.Edition(**mapped_data) edition_activity = activitypub.Edition(**mapped_data)
edition = edition_activity.to_model(model=models.Edition) edition = edition_activity.to_model(model=models.Edition, overwrite=False)
edition.connector = self.connector edition.connector = self.connector
edition.save() edition.save()
@ -182,7 +182,7 @@ class AbstractConnector(AbstractMinimalConnector):
return None return None
# this will dedupe # this will dedupe
return activity.to_model(model=models.Author) return activity.to_model(model=models.Author, overwrite=False)
@abstractmethod @abstractmethod
def is_work_data(self, data): def is_work_data(self, data):

View file

@ -86,6 +86,7 @@ class CommentForm(CustomForm):
"privacy", "privacy",
"progress", "progress",
"progress_mode", "progress_mode",
"reading_status",
] ]

View file

@ -0,0 +1,56 @@
# Generated by Django 3.2.4 on 2021-08-16 20:22
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0082_auto_20210806_2324"),
]
operations = [
migrations.AddField(
model_name="comment",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "Toread"),
("reading", "Reading"),
("read", "Read"),
],
max_length=255,
null=True,
),
),
migrations.AddField(
model_name="quotation",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "Toread"),
("reading", "Reading"),
("read", "Read"),
],
max_length=255,
null=True,
),
),
migrations.AddField(
model_name="review",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "Toread"),
("reading", "Reading"),
("read", "Read"),
],
max_length=255,
null=True,
),
),
]

View file

@ -0,0 +1,56 @@
# Generated by Django 3.2.4 on 2021-08-17 19:16
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0083_auto_20210816_2022"),
]
operations = [
migrations.AlterField(
model_name="comment",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "To-Read"),
("reading", "Reading"),
("read", "Read"),
],
max_length=255,
null=True,
),
),
migrations.AlterField(
model_name="quotation",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "To-Read"),
("reading", "Reading"),
("read", "Read"),
],
max_length=255,
null=True,
),
),
migrations.AlterField(
model_name="review",
name="reading_status",
field=bookwyrm.models.fields.CharField(
blank=True,
choices=[
("to-read", "To-Read"),
("reading", "Reading"),
("read", "Read"),
],
max_length=255,
null=True,
),
),
]

View file

@ -66,7 +66,7 @@ class ActivitypubFieldMixin:
self.activitypub_field = activitypub_field self.activitypub_field = activitypub_field
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def set_field_from_activity(self, instance, data): def set_field_from_activity(self, instance, data, overwrite=True):
"""helper function for assinging a value to the field. Returns if changed""" """helper function for assinging a value to the field. Returns if changed"""
try: try:
value = getattr(data, self.get_activitypub_field()) value = getattr(data, self.get_activitypub_field())
@ -79,8 +79,15 @@ class ActivitypubFieldMixin:
if formatted is None or formatted is MISSING or formatted == {}: if formatted is None or formatted is MISSING or formatted == {}:
return False return False
current_value = (
getattr(instance, self.name) if hasattr(instance, self.name) else None
)
# if we're not in overwrite mode, only continue updating the field if its unset
if current_value and not overwrite:
return False
# the field is unchanged # the field is unchanged
if hasattr(instance, self.name) and getattr(instance, self.name) == formatted: if current_value == formatted:
return False return False
setattr(instance, self.name, formatted) setattr(instance, self.name, formatted)
@ -210,7 +217,10 @@ class PrivacyField(ActivitypubFieldMixin, models.CharField):
) )
# pylint: disable=invalid-name # pylint: disable=invalid-name
def set_field_from_activity(self, instance, data): def set_field_from_activity(self, instance, data, overwrite=True):
if not overwrite:
return False
original = getattr(instance, self.name) original = getattr(instance, self.name)
to = data.to to = data.to
cc = data.cc cc = data.cc
@ -273,8 +283,11 @@ class ManyToManyField(ActivitypubFieldMixin, models.ManyToManyField):
self.link_only = link_only self.link_only = link_only
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def set_field_from_activity(self, instance, data): def set_field_from_activity(self, instance, data, overwrite=True):
"""helper function for assinging a value to the field""" """helper function for assinging a value to the field"""
if not overwrite and getattr(instance, self.name).exists():
return False
value = getattr(data, self.get_activitypub_field()) value = getattr(data, self.get_activitypub_field())
formatted = self.field_from_activity(value) formatted = self.field_from_activity(value)
if formatted is None or formatted is MISSING: if formatted is None or formatted is MISSING:
@ -377,13 +390,16 @@ class ImageField(ActivitypubFieldMixin, models.ImageField):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# pylint: disable=arguments-differ # pylint: disable=arguments-differ
def set_field_from_activity(self, instance, data, save=True): def set_field_from_activity(self, instance, data, save=True, overwrite=True):
"""helper function for assinging a value to the field""" """helper function for assinging a value to the field"""
value = getattr(data, self.get_activitypub_field()) value = getattr(data, self.get_activitypub_field())
formatted = self.field_from_activity(value) formatted = self.field_from_activity(value)
if formatted is None or formatted is MISSING: if formatted is None or formatted is MISSING:
return False return False
if not overwrite and hasattr(instance, self.name):
return False
getattr(instance, self.name).save(*formatted, save=save) getattr(instance, self.name).save(*formatted, save=save)
return True return True

View file

@ -235,12 +235,31 @@ class GeneratedNote(Status):
pure_type = "Note" pure_type = "Note"
class Comment(Status): ReadingStatusChoices = models.TextChoices(
"""like a review but without a rating and transient""" "ReadingStatusChoices", ["to-read", "reading", "read"]
)
class BookStatus(Status):
"""Shared fields for comments, quotes, reviews"""
book = fields.ForeignKey( book = fields.ForeignKey(
"Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook" "Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook"
) )
pure_type = "Note"
reading_status = fields.CharField(
max_length=255, choices=ReadingStatusChoices.choices, null=True, blank=True
)
class Meta:
"""not a real model, sorry"""
abstract = True
class Comment(BookStatus):
"""like a review but without a rating and transient"""
# this is it's own field instead of a foreign key to the progress update # 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 # so that the update can be deleted without impacting the status
@ -265,16 +284,12 @@ class Comment(Status):
) )
activity_serializer = activitypub.Comment activity_serializer = activitypub.Comment
pure_type = "Note"
class Quotation(Status): class Quotation(BookStatus):
"""like a review but without a rating and transient""" """like a review but without a rating and transient"""
quote = fields.HtmlField() quote = fields.HtmlField()
book = fields.ForeignKey(
"Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook"
)
@property @property
def pure_content(self): def pure_content(self):
@ -289,16 +304,12 @@ class Quotation(Status):
) )
activity_serializer = activitypub.Quotation activity_serializer = activitypub.Quotation
pure_type = "Note"
class Review(Status): class Review(BookStatus):
"""a book review""" """a book review"""
name = fields.CharField(max_length=255, null=True) name = fields.CharField(max_length=255, null=True)
book = fields.ForeignKey(
"Edition", on_delete=models.PROTECT, activitypub_field="inReplyToBook"
)
rating = fields.DecimalField( rating = fields.DecimalField(
default=None, default=None,
null=True, null=True,

View file

@ -138,8 +138,11 @@ let BookWyrm = new class {
* @return {undefined} * @return {undefined}
*/ */
toggleAction(event) { toggleAction(event) {
event.preventDefault();
let trigger = event.currentTarget; let trigger = event.currentTarget;
if (!trigger.dataset.allowDefault || event.currentTarget == event.target) {
event.preventDefault();
}
let pressed = trigger.getAttribute('aria-pressed') === 'false'; let pressed = trigger.getAttribute('aria-pressed') === 'false';
let targetId = trigger.dataset.controls; let targetId = trigger.dataset.controls;
@ -177,6 +180,13 @@ let BookWyrm = new class {
this.toggleCheckbox(checkbox, pressed); this.toggleCheckbox(checkbox, pressed);
} }
// Toggle form disabled, if appropriate
let disable = trigger.dataset.disables;
if (disable) {
this.toggleDisabled(disable, !pressed);
}
// Set focus, if appropriate. // Set focus, if appropriate.
let focus = trigger.dataset.focusTarget; let focus = trigger.dataset.focusTarget;
@ -227,6 +237,17 @@ let BookWyrm = new class {
document.getElementById(checkbox).checked = !!pressed; document.getElementById(checkbox).checked = !!pressed;
} }
/**
* Enable or disable a form element or fieldset
*
* @param {string} form_element - id of the element
* @param {boolean} pressed - Is the trigger pressed?
* @return {undefined}
*/
toggleDisabled(form_element, pressed) {
document.getElementById(form_element).disabled = !!pressed;
}
/** /**
* Give the focus to an element. * Give the focus to an element.
* Only move the focus based on user interactions. * Only move the focus based on user interactions.

View file

@ -1,6 +1,7 @@
{% extends 'snippets/filters_panel/filters_panel.html' %} {% extends 'snippets/filters_panel/filters_panel.html' %}
{% block filter_fields %} {% block filter_fields %}
{% include 'book/search_filter.html' %}
{% include 'book/language_filter.html' %} {% include 'book/language_filter.html' %}
{% include 'book/format_filter.html' %} {% include 'book/format_filter.html' %}
{% endblock %} {% endblock %}

View file

@ -0,0 +1,8 @@
{% extends 'snippets/filters_panel/filter_field.html' %}
{% load i18n %}
{% block filter %}
<label class="label" for="id_search">{% trans "Search editions" %}</label>
<input type="text" class="input" name="q" value="{{ request.GET.q|default:'' }}" id="id_search">
{% endblock %}

View file

@ -9,6 +9,6 @@ Finish "{{ book_title }}"
{% block content %} {% block content %}
{% include "snippets/shelve_button/finish_reading_modal.html" with book=book active=True %} {% include "snippets/reading_modals/finish_reading_modal.html" with book=book active=True %}
{% endblock %} {% endblock %}

View file

@ -9,6 +9,6 @@ Start "{{ book_title }}"
{% block content %} {% block content %}
{% include "snippets/shelve_button/start_reading_modal.html" with book=book active=True %} {% include "snippets/reading_modals/start_reading_modal.html" with book=book active=True %}
{% endblock %} {% endblock %}

View file

@ -9,6 +9,6 @@ Want to Read "{{ book_title }}"
{% block content %} {% block content %}
{% include "snippets/shelve_button/want_to_read_modal.html" with book=book active=True %} {% include "snippets/reading_modals/want_to_read_modal.html" with book=book active=True %}
{% endblock %} {% endblock %}

View file

@ -14,6 +14,6 @@ draft: an existing Status object that is providing default values for input fiel
id="id_content_{{ type }}_{{ book.id }}{{ reply_parent.id }}" id="id_content_{{ type }}_{{ book.id }}{{ reply_parent.id }}"
placeholder="{{ placeholder }}" placeholder="{{ placeholder }}"
aria-label="{% if reply_parent %}{% trans 'Reply' %}{% else %}{% trans 'Content' %}{% endif %}" aria-label="{% if reply_parent %}{% trans 'Reply' %}{% else %}{% trans 'Content' %}{% endif %}"
{% if type != "quotation" %}required{% endif %} {% if not optional and type != "quotation" %}required{% endif %}
>{% if reply_parent %}{{ reply_parent|mentions:request.user }}{% endif %}{% if mention %}@{{ mention|username }} {% endif %}{{ draft.content|default:'' }}</textarea> >{% if reply_parent %}{{ reply_parent|mentions:request.user }}{% endif %}{% if mention %}@{{ mention|username }} {% endif %}{{ draft.content|default:'' }}</textarea>

View file

@ -0,0 +1,36 @@
{% extends 'snippets/reading_modals/layout.html' %}
{% load i18n %}
{% load utilities %}
{% block modal-title %}
{% blocktrans trimmed with book_title=book|book_title %}
Finish "<em>{{ book_title }}</em>"
{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="finish-reading" action="{% url 'reading-status' 'finish' book.id %}" method="post">
{% csrf_token %}
<input type="hidden" name="reading_status" value="read">
{% endblock %}
{% block reading-dates %}
<div class="columns">
<div class="column is-half">
<div class="field">
<label class="label" for="finish_id_start_date_{{ uuid }}">
{% trans "Started reading" %}
</label>
<input type="date" name="start_date" class="input" id="finish_id_start_date_{{ uuid }}" value="{{ readthrough.start_date | date:"Y-m-d" }}">
</div>
</div>
<div class="column is-half">
<div class="field">
<label class="label" for="id_finish_date_{{ uuid }}">
{% trans "Finished reading" %}
</label>
<input type="date" name="finish_date" class="input" id="id_finish_date_{{ uuid }}" value="{% now "Y-m-d" %}">
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,15 @@
{% extends "snippets/create_status/layout.html" %}
{% load i18n %}
{% block form_open %}{% endblock %}
{% block content_label %}
{% trans "Comment:" %}
<span class="help mt-0 has-text-weight-normal">{% trans "(Optional)" %}</span>
{% endblock %}
{% block initial_fields %}
<input type="hidden" name="user" value="{{ request.user.id }}">
<input type="hidden" name="mention_books" value="{{ book.id }}">
<input type="hidden" name="book" value="{{ book.id }}">
{% endblock %}

View file

@ -0,0 +1,28 @@
{% extends 'components/modal.html' %}
{% load i18n %}
{% load utilities %}
{% block modal-body %}
{% block reading-dates %}{% endblock %}
{% with 0|uuid as local_uuid %}
<div class="is-flex is-justify-content-space-between">
<label for="post_status_{{ local_uuid }}_{{ uuid }}" data-controls="reading_content_{{ local_uuid }}_{{ uuid }}" data-controls-checkbox="post_status_{{ local_uuid }}_{{ uuid }}" data-disables="reading_content_fieldset_{{ local_uuid }}_{{ uuid }}" aria-pressed="true" data-allow-default="true">
<input type="checkbox" name="post-status" class="checkbox" id="post_status_{{ local_uuid }}_{{ uuid }}" checked>
{% trans "Post to feed" %}
</label>
<div class="is-hidden" id="hide_reading_content_{{ local_uuid }}_{{ uuid }}">
<button class="button is-link" type="submit">{% trans "Save" %}</button>
</div>
</div>
<div id="reading_content_{{ local_uuid }}_{{ uuid }}">
<hr aria-hidden="true">
<fieldset id="reading_content_fieldset_{{ local_uuid }}_{{ uuid }}">
{% include "snippets/reading_modals/form.html" with optional=True %}
</fieldset>
</div>
{% endwith %}
{% endblock %}

View file

@ -0,0 +1,24 @@
{% extends 'snippets/reading_modals/layout.html' %}
{% load i18n %}
{% load utilities %}
{% block modal-title %}
{% blocktrans trimmed with book_title=book|book_title %}
Start "<em>{{ book_title }}</em>"
{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="start-reading" action="{% url 'reading-status' 'start' book.id %}" method="post">
<input type="hidden" name="reading_status" value="reading">
{% csrf_token %}
{% endblock %}
{% block reading-dates %}
<div class="field">
<label class="label" for="start_id_start_date_{{ uuid }}">
{% trans "Started reading" %}
</label>
<input type="date" name="start_date" class="input" id="start_id_start_date_{{ uuid }}" value="{% now "Y-m-d" %}">
</div>
{% endblock %}

View file

@ -0,0 +1,15 @@
{% extends 'snippets/reading_modals/layout.html' %}
{% load i18n %}
{% load utilities %}
{% block modal-title %}
{% blocktrans trimmed with book_title=book|book_title %}
Want to Read "<em>{{ book_title }}</em>"
{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="shelve" action="{% url 'reading-status' 'want' book.id %}" method="post">
<input type="hidden" name="reading_status" value="to-read">
{% csrf_token %}
{% endblock %}

View file

@ -1,48 +0,0 @@
{% extends 'components/modal.html' %}
{% load i18n %}
{% block modal-title %}
{% blocktrans with book_title=book.title %}Finish "<em>{{ book_title }}</em>"{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="finish-reading" action="{% url 'reading-status' 'finish' book.id %}" method="post">
{% endblock %}
{% block modal-body %}
<section class="modal-card-body">
{% csrf_token %}
<input type="hidden" name="id" value="{{ readthrough.id }}">
<div class="field">
<label class="label" for="finish_id_start_date-{{ uuid }}">
{% trans "Started reading" %}
</label>
<input type="date" name="start_date" class="input" id="finish_id_start_date-{{ uuid }}" value="{{ readthrough.start_date | date:"Y-m-d" }}">
</div>
<div class="field">
<label class="label" for="id_finish_date-{{ uuid }}">
{% trans "Finished reading" %}
</label>
<input type="date" name="finish_date" class="input" id="id_finish_date-{{ uuid }}" value="{% now "Y-m-d" %}">
</div>
</section>
{% endblock %}
{% block modal-footer %}
<div class="columns">
<div class="column field">
<label for="post_status-{{ uuid }}">
<input type="checkbox" name="post-status" class="checkbox" id="post_status-{{ uuid }}" checked>
{% trans "Post to feed" %}
</label>
{% include 'snippets/privacy_select.html' %}
</div>
<div class="column has-text-right">
<button type="submit" class="button is-success">{% trans "Save" %}</button>
{% trans "Cancel" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="finish-reading" controls_uid=uuid %}
</div>
</div>
{% endblock %}
{% block modal-form-close %}</form>{% endblock %}

View file

@ -19,13 +19,13 @@
{% endif %} {% endif %}
</div> </div>
{% include 'snippets/shelve_button/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid %} {% include 'snippets/reading_modals/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid %}
{% include 'snippets/shelve_button/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid %} {% include 'snippets/reading_modals/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid %}
{% include 'snippets/shelve_button/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid readthrough=readthrough %} {% include 'snippets/reading_modals/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=active_shelf_book.book controls_text="progress_update" controls_uid=uuid readthrough=readthrough %} {% include 'snippets/reading_modals/progress_update_modal.html' with book=active_shelf_book.book controls_text="progress_update" controls_uid=uuid readthrough=readthrough %}
{% endwith %} {% endwith %}
{% endif %} {% endif %}

View file

@ -1,42 +0,0 @@
{% extends 'components/modal.html' %}
{% load i18n %}
{% block modal-title %}
{% blocktrans trimmed with book_title=book.title %}
Start "<em>{{ book_title }}</em>"
{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="start-reading" action="{% url 'reading-status' 'start' book.id %}" method="post">
{% endblock %}
{% block modal-body %}
<section class="modal-card-body">
{% csrf_token %}
<div class="field">
<label class="label" for="start_id_start_date-{{ uuid }}">
{% trans "Started reading" %}
</label>
<input type="date" name="start_date" class="input" id="start_id_start_date-{{ uuid }}" value="{% now "Y-m-d" %}">
</div>
</section>
{% endblock %}
{% block modal-footer %}
<div class="columns">
<div class="column field">
<label for="post_status_start-{{ uuid }}">
<input type="checkbox" name="post-status" class="checkbox" id="post_status_start-{{ uuid }}" checked>
{% trans "Post to feed" %}
</label>
{% include 'snippets/privacy_select.html' %}
</div>
<div class="column has-text-right">
<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 controls_text="start-reading" controls_uid=uuid %}
</div>
</div>
{% endblock %}
{% block modal-form-close %}</form>{% endblock %}

View file

@ -1,33 +0,0 @@
{% extends 'components/modal.html' %}
{% load i18n %}
{% block modal-title %}
{% blocktrans with book_title=book.title %}Want to Read "<em>{{ book_title }}</em>"{% endblocktrans %}
{% endblock %}
{% block modal-form-open %}
<form name="shelve" action="{% url 'reading-status' 'want' book.id %}" method="post">
{% csrf_token %}
<input type="hidden" name="book" value="{{ active_shelf.book.id }}">
<input type="hidden" name="shelf" value="to-read">
{% endblock %}
{% block modal-footer %}
<div class="columns">
<div class="column field">
<label for="post_status_want-{{ uuid }}">
<input type="checkbox" name="post-status" class="checkbox" id="post_status_want-{{ uuid }}" checked>
{% trans "Post to feed" %}
</label>
{% include 'snippets/privacy_select.html' %}
</div>
<div class="column">
<button class="button is-success" type="submit">
<span>{% trans "Want to read" %}</span>
</button>
{% trans "Cancel" as button_text %}
{% include 'snippets/toggle/toggle_button.html' with text=button_text controls_text="want-to-read" controls_uid=uuid %}
</div>
</div>
{% endblock %}
{% block modal-form-close %}</form>{% endblock %}

View file

@ -1,2 +1,2 @@
{% load i18n %}{% load utilities %} {% load i18n %}{% load utilities %}
{% blocktrans with book_path=book.local_path book=status.book|book_title %}commented on <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %} {% blocktrans with book_path=status.book.local_path book=status.book|book_title %}commented on <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %}

View file

@ -1,7 +1,8 @@
{% spaceless %} {% spaceless %}
{% load i18n %}{% load utilities %} {% load i18n %}
{% load utilities %}
{% load status_display %}
{% with book=status.mention_books.first %} {% load_book status as book %}
{% blocktrans with book_path=book.remote_id book=book|book_title %}finished reading <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %} {% blocktrans with book_path=book.remote_id book=book|book_title %}finished reading <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %}
{% endwith %}
{% endspaceless %} {% endspaceless %}

View file

@ -1,9 +1,8 @@
{% spaceless %} {% spaceless %}
{% load i18n %} {% load i18n %}
{% load utilities %} {% load utilities %}
{% load status_display %}
{% with book=status.mention_books.first %} {% load_book status as book %}
{% blocktrans with book_path=book.remote_id book=book|book_title %}started reading <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %} {% blocktrans with book_path=book.remote_id book=book|book_title %}started reading <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %}
{% endwith %}
{% endspaceless %} {% endspaceless %}

View file

@ -1,8 +1,8 @@
{% spaceless %} {% spaceless %}
{% load i18n %} {% load i18n %}
{% load utilities %} {% load utilities %}
{% load status_display %}
{% with book=status.mention_books.first %} {% load_book status as book %}
{% blocktrans with book_path=book.remote_id book=book|book_title %}<a href="{{ user_path }}">{{ username }}</a> wants to read <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %} {% blocktrans with book_path=book.remote_id book=book|book_title %}<a href="{{ user_path }}">{{ username }}</a> wants to read <a href="{{ book_path }}">{{ book }}</a>{% endblocktrans %}
{% endwith %}
{% endspaceless %} {% endspaceless %}

0
bookwyrm/templates/user/layout.html Normal file → Executable file
View file

0
bookwyrm/templates/user/lists.html Normal file → Executable file
View file

View file

@ -1,4 +1,4 @@
{% extends 'user/layout.html' %} {% extends 'layout.html' %}
{% load bookwyrm_tags %} {% load bookwyrm_tags %}
{% load utilities %} {% load utilities %}
{% load humanize %} {% load humanize %}
@ -8,15 +8,17 @@
{% include 'user/shelf/books_header.html' %} {% include 'user/shelf/books_header.html' %}
{% endblock %} {% endblock %}
{% block header %} {% block opengraph_images %}
<header class="columns"> {% include 'snippets/opengraph_images.html' with image=user.preview_image %}
{% endblock %}
{% block content %}
<header class="block">
<h1 class="title"> <h1 class="title">
{% include 'user/shelf/books_header.html' %} {% include 'user/shelf/books_header.html' %}
</h1> </h1>
</header> </header>
{% endblock %}
{% block tabs %}
<div class="block columns"> <div class="block columns">
<div class="column"> <div class="column">
<div class="tabs"> <div class="tabs">
@ -41,9 +43,7 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
{% endblock %}
{% block panel %}
<div class="block"> <div class="block">
{% include 'user/shelf/create_shelf_form.html' with controls_text='create_shelf_form' %} {% include 'user/shelf/create_shelf_form.html' with controls_text='create_shelf_form' %}
</div> </div>

0
bookwyrm/templates/user/user.html Normal file → Executable file
View file

0
bookwyrm/templates/user/user_preview.html Normal file → Executable file
View file

View file

@ -70,7 +70,13 @@ def get_header_template(status):
"""get the path for the status template""" """get the path for the status template"""
if isinstance(status, models.Boost): if isinstance(status, models.Boost):
status = status.boosted_status status = status.boosted_status
filename = "snippets/status/headers/{:s}.html".format(status.status_type.lower()) try:
header_type = status.reading_status
if not header_type:
raise AttributeError()
except AttributeError:
header_type = status.status_type.lower()
filename = f"snippets/status/headers/{header_type}.html"
header_template = select_template([filename, "snippets/status/headers/note.html"]) header_template = select_template([filename, "snippets/status/headers/note.html"])
return header_template.render({"status": status}) return header_template.render({"status": status})

View file

@ -77,6 +77,33 @@ class InboxCreate(TestCase):
views.inbox.activity_task(activity) views.inbox.activity_task(activity)
self.assertEqual(models.Status.objects.count(), 1) self.assertEqual(models.Status.objects.count(), 1)
@patch("bookwyrm.activitystreams.ActivityStream.add_status")
def test_create_comment_with_reading_status(self, *_):
"""the "it justs works" mode"""
datafile = pathlib.Path(__file__).parent.joinpath("../../data/ap_comment.json")
status_data = json.loads(datafile.read_bytes())
status_data["readingStatus"] = "to-read"
models.Edition.objects.create(
title="Test Book", remote_id="https://example.com/book/1"
)
activity = self.create_json
activity["object"] = status_data
with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock:
views.inbox.activity_task(activity)
self.assertTrue(redis_mock.called)
status = models.Comment.objects.get()
self.assertEqual(status.remote_id, "https://example.com/user/mouse/comment/6")
self.assertEqual(status.content, "commentary")
self.assertEqual(status.reading_status, "to-read")
self.assertEqual(status.user, self.local_user)
# while we're here, lets ensure we avoid dupes
views.inbox.activity_task(activity)
self.assertEqual(models.Status.objects.count(), 1)
def test_create_status_remote_note_with_mention(self, _): def test_create_status_remote_note_with_mention(self, _):
"""should only create it under the right circumstances""" """should only create it under the right circumstances"""
self.assertFalse( self.assertFalse(

View file

@ -280,49 +280,6 @@ class BookViews(TestCase):
self.assertEqual(book.authors.first().name, "Sappho") self.assertEqual(book.authors.first().name, "Sappho")
self.assertEqual(book.authors.first(), book.parent_work.authors.first()) self.assertEqual(book.authors.first(), book.parent_work.authors.first())
@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay")
def test_switch_edition(self, _):
"""updates user's relationships to a book"""
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)
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
shelf = models.Shelf.objects.create(name="Test Shelf", user=self.local_user)
models.ShelfBook.objects.create(
book=edition1,
user=self.local_user,
shelf=shelf,
)
models.ReadThrough.objects.create(user=self.local_user, book=edition1)
self.assertEqual(models.ShelfBook.objects.get().book, edition1)
self.assertEqual(models.ReadThrough.objects.get().book, edition1)
request = self.factory.post("", {"edition": edition2.id})
request.user = self.local_user
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
views.switch_edition(request)
self.assertEqual(models.ShelfBook.objects.get().book, edition2)
self.assertEqual(models.ReadThrough.objects.get().book, edition2)
def test_editions_page(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Editions.as_view()
request = self.factory.get("")
with patch("bookwyrm.views.books.is_api_request") as is_api:
is_api.return_value = False
result = view(request, self.work.id)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
request = self.factory.get("")
with patch("bookwyrm.views.books.is_api_request") as is_api:
is_api.return_value = True
result = view(request, self.work.id)
self.assertIsInstance(result, ActivitypubResponse)
self.assertEqual(result.status_code, 200)
def test_upload_cover_file(self): def test_upload_cover_file(self):
"""add a cover via file upload""" """add a cover via file upload"""
self.assertFalse(self.book.cover) self.assertFalse(self.book.cover)

View file

@ -0,0 +1,126 @@
""" test for app action functionality """
from unittest.mock import patch
from django.template.response import TemplateResponse
from django.test import TestCase
from django.test.client import RequestFactory
from bookwyrm import models, views
from bookwyrm.activitypub import ActivitypubResponse
class BookViews(TestCase):
"""books books books"""
def setUp(self):
"""we need basic test data and mocks"""
self.factory = RequestFactory()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"):
self.local_user = models.User.objects.create_user(
"mouse@local.com",
"mouse@mouse.com",
"mouseword",
local=True,
localname="mouse",
remote_id="https://example.com/users/mouse",
)
self.work = models.Work.objects.create(title="Test Work")
self.book = models.Edition.objects.create(
title="Example Edition",
remote_id="https://example.com/book/1",
parent_work=self.work,
physical_format="paperback",
)
models.SiteSettings.objects.create()
def test_editions_page(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Editions.as_view()
request = self.factory.get("")
with patch("bookwyrm.views.editions.is_api_request") as is_api:
is_api.return_value = False
result = view(request, self.work.id)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
self.assertTrue("paperback" in result.context_data["formats"])
def test_editions_page_filtered(self):
"""editions view with filters"""
models.Edition.objects.create(
title="Fish",
physical_format="okay",
parent_work=self.work,
)
view = views.Editions.as_view()
request = self.factory.get("")
with patch("bookwyrm.views.editions.is_api_request") as is_api:
is_api.return_value = False
result = view(request, self.work.id)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
self.assertEqual(len(result.context_data["editions"].object_list), 2)
self.assertEqual(len(result.context_data["formats"]), 2)
self.assertTrue("paperback" in result.context_data["formats"])
self.assertTrue("okay" in result.context_data["formats"])
request = self.factory.get("", {"q": "fish"})
with patch("bookwyrm.views.editions.is_api_request") as is_api:
is_api.return_value = False
result = view(request, self.work.id)
result.render()
self.assertEqual(result.status_code, 200)
self.assertEqual(len(result.context_data["editions"].object_list), 1)
request = self.factory.get("", {"q": "okay"})
with patch("bookwyrm.views.editions.is_api_request") as is_api:
is_api.return_value = False
result = view(request, self.work.id)
result.render()
self.assertEqual(result.status_code, 200)
self.assertEqual(len(result.context_data["editions"].object_list), 1)
request = self.factory.get("", {"format": "okay"})
with patch("bookwyrm.views.editions.is_api_request") as is_api:
is_api.return_value = False
result = view(request, self.work.id)
result.render()
self.assertEqual(result.status_code, 200)
self.assertEqual(len(result.context_data["editions"].object_list), 1)
def test_editions_page_api(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Editions.as_view()
request = self.factory.get("")
with patch("bookwyrm.views.editions.is_api_request") as is_api:
is_api.return_value = True
result = view(request, self.work.id)
self.assertIsInstance(result, ActivitypubResponse)
self.assertEqual(result.status_code, 200)
@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay")
def test_switch_edition(self, _):
"""updates user's relationships to a book"""
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)
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
shelf = models.Shelf.objects.create(name="Test Shelf", user=self.local_user)
models.ShelfBook.objects.create(
book=edition1,
user=self.local_user,
shelf=shelf,
)
models.ReadThrough.objects.create(user=self.local_user, book=edition1)
self.assertEqual(models.ShelfBook.objects.get().book, edition1)
self.assertEqual(models.ReadThrough.objects.get().book, edition1)
request = self.factory.post("", {"edition": edition2.id})
request.user = self.local_user
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
views.switch_edition(request)
self.assertEqual(models.ShelfBook.objects.get().book, edition2)
self.assertEqual(models.ReadThrough.objects.get().book, edition2)

View file

@ -4,11 +4,12 @@ from .authentication import Login, Register, Logout
from .authentication import ConfirmEmail, ConfirmEmailCode, resend_link from .authentication import ConfirmEmail, ConfirmEmailCode, resend_link
from .author import Author, EditAuthor from .author import Author, EditAuthor
from .block import Block, unblock from .block import Block, unblock
from .books import Book, EditBook, ConfirmEditBook, Editions from .books import Book, EditBook, ConfirmEditBook
from .books import upload_cover, add_description, switch_edition, resolve_book from .books import upload_cover, add_description, resolve_book
from .directory import Directory from .directory import Directory
from .discover import Discover from .discover import Discover
from .edit_user import EditUser, DeleteUser from .edit_user import EditUser, DeleteUser
from .editions import Editions, switch_edition
from .federation import Federation, FederatedServer from .federation import Federation, FederatedServer
from .federation import AddFederatedServer, ImportServerBlocklist from .federation import AddFederatedServer, ImportServerBlocklist
from .federation import block_server, unblock_server from .federation import block_server, unblock_server

View file

@ -24,7 +24,7 @@ from bookwyrm.settings import PAGE_LENGTH
from .helpers import is_api_request, get_edition, privacy_filter from .helpers import is_api_request, get_edition, privacy_filter
# pylint: disable= no-self-use # pylint: disable=no-self-use
class Book(View): class Book(View):
"""a book! this is the stuff""" """a book! this is the stuff"""
@ -270,37 +270,6 @@ class ConfirmEditBook(View):
return redirect("/book/%s" % book.id) return redirect("/book/%s" % book.id)
class Editions(View):
"""list of editions"""
def get(self, request, book_id):
"""list of editions of a book"""
work = get_object_or_404(models.Work, id=book_id)
if is_api_request(request):
return ActivitypubResponse(work.to_edition_list(**request.GET))
filters = {}
if request.GET.get("language"):
filters["languages__contains"] = [request.GET.get("language")]
if request.GET.get("format"):
filters["physical_format__iexact"] = request.GET.get("format")
editions = work.editions.order_by("-edition_rank")
languages = set(sum([e.languages for e in editions], []))
paginated = Paginator(editions.filter(**filters), PAGE_LENGTH)
data = {
"editions": paginated.get_page(request.GET.get("page")),
"work": work,
"languages": languages,
"formats": set(
e.physical_format.lower() for e in editions if e.physical_format
),
}
return TemplateResponse(request, "book/editions.html", data)
@login_required @login_required
@require_POST @require_POST
def upload_cover(request, book_id): def upload_cover(request, book_id):
@ -363,33 +332,3 @@ def resolve_book(request):
book = connector.get_or_create_book(remote_id) book = connector.get_or_create_book(remote_id)
return redirect("book", book.id) return redirect("book", book.id)
@login_required
@require_POST
@transaction.atomic
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)
shelfbooks = models.ShelfBook.objects.filter(
book__parent_work=new_edition.parent_work, shelf__user=request.user
)
for shelfbook in shelfbooks.all():
with transaction.atomic():
models.ShelfBook.objects.create(
created_date=shelfbook.created_date,
user=shelfbook.user,
shelf=shelfbook.shelf,
book=new_edition,
)
shelfbook.delete()
readthroughs = models.ReadThrough.objects.filter(
book__parent_work=new_edition.parent_work, user=request.user
)
for readthrough in readthroughs.all():
readthrough.book = new_edition
readthrough.save()
return redirect("/book/%d" % new_edition.id)

View file

@ -0,0 +1,99 @@
""" the good stuff! the books! """
from functools import reduce
import operator
from django.contrib.auth.decorators import login_required
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.template.response import TemplateResponse
from django.views import View
from django.views.decorators.http import require_POST
from bookwyrm import models
from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.settings import PAGE_LENGTH
from .helpers import is_api_request
# pylint: disable=no-self-use
class Editions(View):
"""list of editions"""
def get(self, request, book_id):
"""list of editions of a book"""
work = get_object_or_404(models.Work, id=book_id)
if is_api_request(request):
return ActivitypubResponse(work.to_edition_list(**request.GET))
filters = {}
if request.GET.get("language"):
filters["languages__contains"] = [request.GET.get("language")]
if request.GET.get("format"):
filters["physical_format__iexact"] = request.GET.get("format")
editions = work.editions.order_by("-edition_rank")
languages = set(sum(editions.values_list("languages", flat=True), []))
editions = editions.filter(**filters)
query = request.GET.get("q")
if query:
searchable_array_fields = ["languages", "publishers"]
searchable_fields = [
"title",
"physical_format",
"isbn_10",
"isbn_13",
"oclc_number",
"asin",
]
search_filter_entries = [
{f"{f}__icontains": query} for f in searchable_fields
] + [{f"{f}__iexact": query} for f in searchable_array_fields]
editions = editions.filter(
reduce(operator.or_, (Q(**f) for f in search_filter_entries))
)
paginated = Paginator(editions, PAGE_LENGTH)
data = {
"editions": paginated.get_page(request.GET.get("page")),
"work": work,
"languages": languages,
"formats": set(
e.physical_format.lower() for e in editions if e.physical_format
),
}
return TemplateResponse(request, "book/editions.html", data)
@login_required
@require_POST
@transaction.atomic
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)
shelfbooks = models.ShelfBook.objects.filter(
book__parent_work=new_edition.parent_work, shelf__user=request.user
)
for shelfbook in shelfbooks.all():
with transaction.atomic():
models.ShelfBook.objects.create(
created_date=shelfbook.created_date,
user=shelfbook.user,
shelf=shelfbook.shelf,
book=new_edition,
)
shelfbook.delete()
readthroughs = models.ReadThrough.objects.filter(
book__parent_work=new_edition.parent_work, user=request.user
)
for readthrough in readthroughs.all():
readthrough.book = new_edition
readthrough.save()
return redirect("/book/%d" % new_edition.id)

View file

@ -5,7 +5,7 @@ from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as _
from django.views import View from django.views import View
from bookwyrm import models from bookwyrm import models

View file

@ -12,7 +12,7 @@ from django.utils.decorators import method_decorator
from django.views import View from django.views import View
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
from bookwyrm import models from bookwyrm import forms, models
from .helpers import get_edition, handle_reading_status from .helpers import get_edition, handle_reading_status
@ -76,8 +76,17 @@ class ReadingStatus(View):
# post about it (if you want) # post about it (if you want)
if request.POST.get("post-status"): if request.POST.get("post-status"):
privacy = request.POST.get("privacy") # is it a comment?
handle_reading_status(request.user, desired_shelf, book, privacy) if request.POST.get("content"):
form = forms.CommentForm(request.POST)
if form.is_valid():
form.save()
else:
# uh oh
raise Exception(form.errors)
else:
privacy = request.POST.get("privacy")
handle_reading_status(request.user, desired_shelf, book, privacy)
return redirect(request.headers.get("Referer", "/")) return redirect(request.headers.get("Referer", "/"))

View file

@ -9,7 +9,7 @@ from django.http import HttpResponseBadRequest, HttpResponseNotFound
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as _
from django.views import View from django.views import View
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.0.1\n" "Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-13 02:21+0000\n" "POT-Creation-Date: 2021-08-16 21:26+0000\n"
"PO-Revision-Date: 2021-03-02 17:19-0800\n" "PO-Revision-Date: 2021-03-02 17:19-0800\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: English <LL@li.org>\n" "Language-Team: English <LL@li.org>\n"
@ -18,67 +18,67 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bookwyrm/forms.py:232 #: bookwyrm/forms.py:233
#, fuzzy #, fuzzy
#| msgid "A user with that username already exists." #| msgid "A user with that username already exists."
msgid "A user with this email already exists." msgid "A user with this email already exists."
msgstr "Dieser Benutzename ist bereits vergeben." msgstr "Dieser Benutzename ist bereits vergeben."
#: bookwyrm/forms.py:246 #: bookwyrm/forms.py:247
msgid "One Day" msgid "One Day"
msgstr "Ein Tag" msgstr "Ein Tag"
#: bookwyrm/forms.py:247 #: bookwyrm/forms.py:248
msgid "One Week" msgid "One Week"
msgstr "Eine Woche" msgstr "Eine Woche"
#: bookwyrm/forms.py:248 #: bookwyrm/forms.py:249
msgid "One Month" msgid "One Month"
msgstr "Ein Monat" msgstr "Ein Monat"
#: bookwyrm/forms.py:249 #: bookwyrm/forms.py:250
msgid "Does Not Expire" msgid "Does Not Expire"
msgstr "Läuft nicht aus" msgstr "Läuft nicht aus"
#: bookwyrm/forms.py:254 #: bookwyrm/forms.py:255
#, python-format #, python-format
msgid "%(count)d uses" msgid "%(count)d uses"
msgstr "%(count)d Benutzungen" msgstr "%(count)d Benutzungen"
#: bookwyrm/forms.py:257 #: bookwyrm/forms.py:258
#, fuzzy #, fuzzy
#| msgid "Unlisted" #| msgid "Unlisted"
msgid "Unlimited" msgid "Unlimited"
msgstr "Ungelistet" msgstr "Ungelistet"
#: bookwyrm/forms.py:307 #: bookwyrm/forms.py:308
msgid "List Order" msgid "List Order"
msgstr "" msgstr ""
#: bookwyrm/forms.py:308 #: bookwyrm/forms.py:309
#, fuzzy #, fuzzy
#| msgid "Title" #| msgid "Title"
msgid "Book Title" msgid "Book Title"
msgstr "Titel" msgstr "Titel"
#: bookwyrm/forms.py:309 #: bookwyrm/forms.py:310
#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/snippets/create_status/review.html:25
#: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:85
#: bookwyrm/templates/user/shelf/shelf.html:116 #: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating" msgid "Rating"
msgstr "" msgstr ""
#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 #: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107
msgid "Sort By" msgid "Sort By"
msgstr "" msgstr ""
#: bookwyrm/forms.py:315 #: bookwyrm/forms.py:316
#, fuzzy #, fuzzy
#| msgid "Started reading" #| msgid "Started reading"
msgid "Ascending" msgid "Ascending"
msgstr "Zu lesen angefangen" msgstr "Zu lesen angefangen"
#: bookwyrm/forms.py:316 #: bookwyrm/forms.py:317
#, fuzzy #, fuzzy
#| msgid "Started reading" #| msgid "Started reading"
msgid "Descending" msgid "Descending"
@ -308,9 +308,8 @@ msgstr ""
#: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:108 #: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/layout.html:16
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36
#: bookwyrm/templates/user_admin/user_moderation_actions.html:45 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@ -324,10 +323,7 @@ msgstr "Speichern"
#: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
@ -2709,24 +2705,24 @@ msgid "Some thoughts on the book"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16
msgid "Progress:" msgid "Progress:"
msgstr "Fortschritt:" msgstr "Fortschritt:"
#: bookwyrm/templates/snippets/create_status/comment.html:34 #: bookwyrm/templates/snippets/create_status/comment.html:34
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/readthrough_form.html:22
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30
msgid "pages" msgid "pages"
msgstr "Seiten" msgstr "Seiten"
#: bookwyrm/templates/snippets/create_status/comment.html:35 #: bookwyrm/templates/snippets/create_status/comment.html:35
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31
#: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/readthrough_form.html:23
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31
msgid "percent" msgid "percent"
msgstr "Prozent" msgstr "Prozent"
#: bookwyrm/templates/snippets/create_status/comment.html:41 #: bookwyrm/templates/snippets/create_status/comment.html:41
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36
#, python-format #, python-format
msgid "of %(pages)s pages" msgid "of %(pages)s pages"
msgstr "von %(pages)s Seiten" msgstr "von %(pages)s Seiten"
@ -2757,6 +2753,7 @@ msgid "Include spoiler alert"
msgstr "Spoileralarm aktivieren" msgstr "Spoileralarm aktivieren"
#: bookwyrm/templates/snippets/create_status/layout.html:38 #: bookwyrm/templates/snippets/create_status/layout.html:38
#: bookwyrm/templates/snippets/reading_modals/form.html:7
#, fuzzy #, fuzzy
#| msgid "Comment" #| msgid "Comment"
msgid "Comment:" msgid "Comment:"
@ -2926,9 +2923,7 @@ msgid "Goal privacy:"
msgstr "Sichtbarkeit des Ziels" msgstr "Sichtbarkeit des Ziels"
#: bookwyrm/templates/snippets/goal_form.html:26 #: bookwyrm/templates/snippets/goal_form.html:26
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 #: bookwyrm/templates/snippets/reading_modals/layout.html:13
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20
msgid "Post to feed" msgid "Post to feed"
msgstr "Posten" msgstr "Posten"
@ -3005,21 +3000,47 @@ msgstr "Raten"
msgid "Rate" msgid "Rate"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "\"<em>%(book_title)s</em>\" abschließen"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20
#: bookwyrm/templates/snippets/readthrough_form.html:7 #: bookwyrm/templates/snippets/readthrough_form.html:7
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19
msgid "Started reading" msgid "Started reading"
msgstr "Zu lesen angefangen" msgstr "Zu lesen angefangen"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:30
msgid "Finished reading"
msgstr "Lesen abgeschlossen"
#: bookwyrm/templates/snippets/reading_modals/form.html:8
msgid "(Optional)"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
#, fuzzy
#| msgid "Progress"
msgid "Update progress"
msgstr "Fortschritt"
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "\"<em>%(book_title)s</em>\" beginnen"
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "\"<em>%(book_title)s</em>\" auf Leseliste setzen"
#: bookwyrm/templates/snippets/readthrough_form.html:14 #: bookwyrm/templates/snippets/readthrough_form.html:14
msgid "Progress" msgid "Progress"
msgstr "Fortschritt" msgstr "Fortschritt"
#: bookwyrm/templates/snippets/readthrough_form.html:30
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25
msgid "Finished reading"
msgstr "Lesen abgeschlossen"
#: bookwyrm/templates/snippets/register_form.html:32 #: bookwyrm/templates/snippets/register_form.html:32
msgid "Sign Up" msgid "Sign Up"
msgstr "Registrieren" msgstr "Registrieren"
@ -3040,18 +3061,6 @@ msgstr "Buch importieren"
msgid "Move book" msgid "Move book"
msgstr "Deine Bücher" msgstr "Deine Bücher"
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "\"<em>%(book_title)s</em>\" abschließen"
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
#, fuzzy
#| msgid "Progress"
msgid "Update progress"
msgstr "Fortschritt"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
msgid "More shelves" msgid "More shelves"
msgstr "Mehr Regale" msgstr "Mehr Regale"
@ -3065,7 +3074,6 @@ msgid "Finish reading"
msgstr "Lesen abschließen" msgstr "Lesen abschließen"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26
msgid "Want to read" msgid "Want to read"
msgstr "Auf Leseliste setzen" msgstr "Auf Leseliste setzen"
@ -3075,16 +3083,6 @@ msgstr "Auf Leseliste setzen"
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Listen: %(username)s" msgstr "Listen: %(username)s"
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "\"<em>%(book_title)s</em>\" beginnen"
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "\"<em>%(book_title)s</em>\" auf Leseliste setzen"
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
msgid "Show more" msgid "Show more"
@ -3123,13 +3121,13 @@ msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>"
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>" msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>"
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>" #| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "Editionen von <a href=\"%(work_path)s\">\"%(work_title)s\"</a>" msgstr "Editionen von <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "Direct Messages with <a href=\"%(path)s\">%(username)s</a>" #| msgid "Direct Messages with <a href=\"%(path)s\">%(username)s</a>"
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
@ -3141,7 +3139,7 @@ msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>"
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>" msgstr "Direktnachrichten mit <a href=\"%(path)s\">%(username)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "<a href=\"%(related_path)s\">replied</a> to your <a href=\"%(parent_path)s\">status</a>" #| msgid "<a href=\"%(related_path)s\">replied</a> to your <a href=\"%(parent_path)s\">status</a>"
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
@ -3485,6 +3483,11 @@ msgstr "Dieser Benutzename ist bereits vergeben."
msgid "A password reset link sent to %s" msgid "A password reset link sent to %s"
msgstr "" msgstr ""
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"
msgstr ""
#, fuzzy #, fuzzy
#~| msgid "Federated Servers" #~| msgid "Federated Servers"
#~ msgid "Federated Timeline" #~ msgid "Federated Timeline"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.0.1\n" "Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-13 02:21+0000\n" "POT-Creation-Date: 2021-08-16 21:26+0000\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n" "Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: English <LL@li.org>\n" "Language-Team: English <LL@li.org>\n"
@ -18,59 +18,59 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bookwyrm/forms.py:232 #: bookwyrm/forms.py:233
msgid "A user with this email already exists." msgid "A user with this email already exists."
msgstr "" msgstr ""
#: bookwyrm/forms.py:246 #: bookwyrm/forms.py:247
msgid "One Day" msgid "One Day"
msgstr "" msgstr ""
#: bookwyrm/forms.py:247 #: bookwyrm/forms.py:248
msgid "One Week" msgid "One Week"
msgstr "" msgstr ""
#: bookwyrm/forms.py:248 #: bookwyrm/forms.py:249
msgid "One Month" msgid "One Month"
msgstr "" msgstr ""
#: bookwyrm/forms.py:249 #: bookwyrm/forms.py:250
msgid "Does Not Expire" msgid "Does Not Expire"
msgstr "" msgstr ""
#: bookwyrm/forms.py:254 #: bookwyrm/forms.py:255
#, python-format #, python-format
msgid "%(count)d uses" msgid "%(count)d uses"
msgstr "" msgstr ""
#: bookwyrm/forms.py:257 #: bookwyrm/forms.py:258
msgid "Unlimited" msgid "Unlimited"
msgstr "" msgstr ""
#: bookwyrm/forms.py:307 #: bookwyrm/forms.py:308
msgid "List Order" msgid "List Order"
msgstr "" msgstr ""
#: bookwyrm/forms.py:308 #: bookwyrm/forms.py:309
msgid "Book Title" msgid "Book Title"
msgstr "" msgstr ""
#: bookwyrm/forms.py:309 #: bookwyrm/forms.py:310
#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/snippets/create_status/review.html:25
#: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:85
#: bookwyrm/templates/user/shelf/shelf.html:116 #: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating" msgid "Rating"
msgstr "" msgstr ""
#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 #: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107
msgid "Sort By" msgid "Sort By"
msgstr "" msgstr ""
#: bookwyrm/forms.py:315 #: bookwyrm/forms.py:316
msgid "Ascending" msgid "Ascending"
msgstr "" msgstr ""
#: bookwyrm/forms.py:316 #: bookwyrm/forms.py:317
msgid "Descending" msgid "Descending"
msgstr "" msgstr ""
@ -284,9 +284,8 @@ msgstr ""
#: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:108 #: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/layout.html:16
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36
#: bookwyrm/templates/user_admin/user_moderation_actions.html:45 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -300,10 +299,7 @@ msgstr ""
#: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
@ -2450,24 +2446,24 @@ msgid "Some thoughts on the book"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16
msgid "Progress:" msgid "Progress:"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:34 #: bookwyrm/templates/snippets/create_status/comment.html:34
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/readthrough_form.html:22
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30
msgid "pages" msgid "pages"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:35 #: bookwyrm/templates/snippets/create_status/comment.html:35
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31
#: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/readthrough_form.html:23
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31
msgid "percent" msgid "percent"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:41 #: bookwyrm/templates/snippets/create_status/comment.html:41
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36
#, python-format #, python-format
msgid "of %(pages)s pages" msgid "of %(pages)s pages"
msgstr "" msgstr ""
@ -2496,6 +2492,7 @@ msgid "Include spoiler alert"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/layout.html:38 #: bookwyrm/templates/snippets/create_status/layout.html:38
#: bookwyrm/templates/snippets/reading_modals/form.html:7
msgid "Comment:" msgid "Comment:"
msgstr "" msgstr ""
@ -2646,9 +2643,7 @@ msgid "Goal privacy:"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/goal_form.html:26 #: bookwyrm/templates/snippets/goal_form.html:26
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 #: bookwyrm/templates/snippets/reading_modals/layout.html:13
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20
msgid "Post to feed" msgid "Post to feed"
msgstr "" msgstr ""
@ -2723,21 +2718,45 @@ msgstr ""
msgid "Rate" msgid "Rate"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20
#: bookwyrm/templates/snippets/readthrough_form.html:7 #: bookwyrm/templates/snippets/readthrough_form.html:7
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19
msgid "Started reading" msgid "Started reading"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:30
msgid "Finished reading"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/form.html:8
msgid "(Optional)"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr ""
#: bookwyrm/templates/snippets/readthrough_form.html:14 #: bookwyrm/templates/snippets/readthrough_form.html:14
msgid "Progress" msgid "Progress"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/readthrough_form.html:30
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25
msgid "Finished reading"
msgstr ""
#: bookwyrm/templates/snippets/register_form.html:32 #: bookwyrm/templates/snippets/register_form.html:32
msgid "Sign Up" msgid "Sign Up"
msgstr "" msgstr ""
@ -2754,16 +2773,6 @@ msgstr ""
msgid "Move book" msgid "Move book"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr ""
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr ""
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
msgid "More shelves" msgid "More shelves"
msgstr "" msgstr ""
@ -2777,7 +2786,6 @@ msgid "Finish reading"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26
msgid "Want to read" msgid "Want to read"
msgstr "" msgstr ""
@ -2786,16 +2794,6 @@ msgstr ""
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr ""
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr ""
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
msgid "Show more" msgid "Show more"
@ -2830,12 +2828,12 @@ msgstr ""
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:7
#, python-format #, python-format
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:7
#, python-format #, python-format
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "" msgstr ""
@ -2845,7 +2843,7 @@ msgstr ""
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:7
#, python-format #, python-format
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "" msgstr ""
@ -3153,3 +3151,8 @@ msgstr ""
#, python-format #, python-format
msgid "A password reset link sent to %s" msgid "A password reset link sent to %s"
msgstr "" msgstr ""
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"
msgstr ""

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.0.1\n" "Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-13 02:21+0000\n" "POT-Creation-Date: 2021-08-16 21:26+0000\n"
"PO-Revision-Date: 2021-03-19 11:49+0800\n" "PO-Revision-Date: 2021-03-19 11:49+0800\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,59 +18,59 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bookwyrm/forms.py:232 #: bookwyrm/forms.py:233
msgid "A user with this email already exists." msgid "A user with this email already exists."
msgstr "Ya existe un usuario con ese correo electrónico." msgstr "Ya existe un usuario con ese correo electrónico."
#: bookwyrm/forms.py:246 #: bookwyrm/forms.py:247
msgid "One Day" msgid "One Day"
msgstr "Un día" msgstr "Un día"
#: bookwyrm/forms.py:247 #: bookwyrm/forms.py:248
msgid "One Week" msgid "One Week"
msgstr "Una semana" msgstr "Una semana"
#: bookwyrm/forms.py:248 #: bookwyrm/forms.py:249
msgid "One Month" msgid "One Month"
msgstr "Un mes" msgstr "Un mes"
#: bookwyrm/forms.py:249 #: bookwyrm/forms.py:250
msgid "Does Not Expire" msgid "Does Not Expire"
msgstr "Nunca se vence" msgstr "Nunca se vence"
#: bookwyrm/forms.py:254 #: bookwyrm/forms.py:255
#, python-format #, python-format
msgid "%(count)d uses" msgid "%(count)d uses"
msgstr "%(count)d usos" msgstr "%(count)d usos"
#: bookwyrm/forms.py:257 #: bookwyrm/forms.py:258
msgid "Unlimited" msgid "Unlimited"
msgstr "Sin límite" msgstr "Sin límite"
#: bookwyrm/forms.py:307 #: bookwyrm/forms.py:308
msgid "List Order" msgid "List Order"
msgstr "Orden de la lista" msgstr "Orden de la lista"
#: bookwyrm/forms.py:308 #: bookwyrm/forms.py:309
msgid "Book Title" msgid "Book Title"
msgstr "Título" msgstr "Título"
#: bookwyrm/forms.py:309 #: bookwyrm/forms.py:310
#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/snippets/create_status/review.html:25
#: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:85
#: bookwyrm/templates/user/shelf/shelf.html:116 #: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating" msgid "Rating"
msgstr "Calificación" msgstr "Calificación"
#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 #: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107
msgid "Sort By" msgid "Sort By"
msgstr "Ordenar por" msgstr "Ordenar por"
#: bookwyrm/forms.py:315 #: bookwyrm/forms.py:316
msgid "Ascending" msgid "Ascending"
msgstr "Ascendente" msgstr "Ascendente"
#: bookwyrm/forms.py:316 #: bookwyrm/forms.py:317
msgid "Descending" msgid "Descending"
msgstr "Descendente" msgstr "Descendente"
@ -284,9 +284,8 @@ msgstr "Clave Goodreads:"
#: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:108 #: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/layout.html:16
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36
#: bookwyrm/templates/user_admin/user_moderation_actions.html:45 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@ -300,10 +299,7 @@ msgstr "Guardar"
#: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@ -2451,24 +2447,24 @@ msgid "Some thoughts on the book"
msgstr "Algunos pensamientos sobre el libro" msgstr "Algunos pensamientos sobre el libro"
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16
msgid "Progress:" msgid "Progress:"
msgstr "Progreso:" msgstr "Progreso:"
#: bookwyrm/templates/snippets/create_status/comment.html:34 #: bookwyrm/templates/snippets/create_status/comment.html:34
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/readthrough_form.html:22
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30
msgid "pages" msgid "pages"
msgstr "páginas" msgstr "páginas"
#: bookwyrm/templates/snippets/create_status/comment.html:35 #: bookwyrm/templates/snippets/create_status/comment.html:35
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31
#: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/readthrough_form.html:23
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31
msgid "percent" msgid "percent"
msgstr "por ciento" msgstr "por ciento"
#: bookwyrm/templates/snippets/create_status/comment.html:41 #: bookwyrm/templates/snippets/create_status/comment.html:41
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36
#, python-format #, python-format
msgid "of %(pages)s pages" msgid "of %(pages)s pages"
msgstr "de %(pages)s páginas" msgstr "de %(pages)s páginas"
@ -2497,6 +2493,7 @@ msgid "Include spoiler alert"
msgstr "Incluir alerta de spoiler" msgstr "Incluir alerta de spoiler"
#: bookwyrm/templates/snippets/create_status/layout.html:38 #: bookwyrm/templates/snippets/create_status/layout.html:38
#: bookwyrm/templates/snippets/reading_modals/form.html:7
msgid "Comment:" msgid "Comment:"
msgstr "Comentario:" msgstr "Comentario:"
@ -2647,9 +2644,7 @@ msgid "Goal privacy:"
msgstr "Privacidad de meta:" msgstr "Privacidad de meta:"
#: bookwyrm/templates/snippets/goal_form.html:26 #: bookwyrm/templates/snippets/goal_form.html:26
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 #: bookwyrm/templates/snippets/reading_modals/layout.html:13
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20
msgid "Post to feed" msgid "Post to feed"
msgstr "Compartir con tu feed" msgstr "Compartir con tu feed"
@ -2725,21 +2720,45 @@ msgstr "Da una calificación"
msgid "Rate" msgid "Rate"
msgstr "Calificar" msgstr "Calificar"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "Terminar \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20
#: bookwyrm/templates/snippets/readthrough_form.html:7 #: bookwyrm/templates/snippets/readthrough_form.html:7
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19
msgid "Started reading" msgid "Started reading"
msgstr "Lectura se empezó" msgstr "Lectura se empezó"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:30
msgid "Finished reading"
msgstr "Lectura se terminó"
#: bookwyrm/templates/snippets/reading_modals/form.html:8
msgid "(Optional)"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "Progreso de actualización"
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Empezar \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "Quiero leer \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/readthrough_form.html:14 #: bookwyrm/templates/snippets/readthrough_form.html:14
msgid "Progress" msgid "Progress"
msgstr "Progreso" msgstr "Progreso"
#: bookwyrm/templates/snippets/readthrough_form.html:30
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25
msgid "Finished reading"
msgstr "Lectura se terminó"
#: bookwyrm/templates/snippets/register_form.html:32 #: bookwyrm/templates/snippets/register_form.html:32
msgid "Sign Up" msgid "Sign Up"
msgstr "Inscribirse" msgstr "Inscribirse"
@ -2756,16 +2775,6 @@ msgstr "Importar libro"
msgid "Move book" msgid "Move book"
msgstr "Mover libro" msgstr "Mover libro"
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "Terminar \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "Progreso de actualización"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
msgid "More shelves" msgid "More shelves"
msgstr "Más estantes" msgstr "Más estantes"
@ -2779,7 +2788,6 @@ msgid "Finish reading"
msgstr "Terminar de leer" msgstr "Terminar de leer"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26
msgid "Want to read" msgid "Want to read"
msgstr "Quiero leer" msgstr "Quiero leer"
@ -2788,16 +2796,6 @@ msgstr "Quiero leer"
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Quitar de %(name)s" msgstr "Quitar de %(name)s"
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Empezar \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "Quiero leer \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
msgid "Show more" msgid "Show more"
@ -2832,12 +2830,12 @@ msgstr "citó a <a href=\"%(book_path)s\">%(book)s</a>"
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "calificó <a href=\"%(book_path)s\">%(book)s</a>:" msgstr "calificó <a href=\"%(book_path)s\">%(book)s</a>:"
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:7
#, python-format #, python-format
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "terminó de leer <a href=\"%(book_path)s\">%(book)s</a>" msgstr "terminó de leer <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:7
#, python-format #, python-format
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "empezó a leer <a href=\"%(book_path)s\">%(book)s</a>" msgstr "empezó a leer <a href=\"%(book_path)s\">%(book)s</a>"
@ -2847,7 +2845,7 @@ msgstr "empezó a leer <a href=\"%(book_path)s\">%(book)s</a>"
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "reseñó a <a href=\"%(book_path)s\">%(book)s</a>" msgstr "reseñó a <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:7
#, python-format #, python-format
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "<a href=\"%(user_path)s\">%(username)s</a> quiere leer <a href=\"%(book_path)s\">%(book)s</a>" msgstr "<a href=\"%(user_path)s\">%(username)s</a> quiere leer <a href=\"%(book_path)s\">%(book)s</a>"
@ -3156,6 +3154,11 @@ msgstr "No se pudo encontrar un usuario con esa dirección de correo electrónic
msgid "A password reset link sent to %s" msgid "A password reset link sent to %s"
msgstr "Un enlace para reestablecer tu contraseña se enviará a %s" msgstr "Un enlace para reestablecer tu contraseña se enviará a %s"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"
msgstr ""
#~ msgid "Local Timeline" #~ msgid "Local Timeline"
#~ msgstr "Línea temporal local" #~ msgstr "Línea temporal local"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1.1\n" "Project-Id-Version: 0.1.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-13 02:21+0000\n" "POT-Creation-Date: 2021-08-16 21:26+0000\n"
"PO-Revision-Date: 2021-04-05 12:44+0100\n" "PO-Revision-Date: 2021-04-05 12:44+0100\n"
"Last-Translator: Fabien Basmaison <contact@arkhi.org>\n" "Last-Translator: Fabien Basmaison <contact@arkhi.org>\n"
"Language-Team: Mouse Reeve <LL@li.org>\n" "Language-Team: Mouse Reeve <LL@li.org>\n"
@ -18,59 +18,59 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: bookwyrm/forms.py:232 #: bookwyrm/forms.py:233
msgid "A user with this email already exists." msgid "A user with this email already exists."
msgstr "Cet email est déjà associé à un compte." msgstr "Cet email est déjà associé à un compte."
#: bookwyrm/forms.py:246 #: bookwyrm/forms.py:247
msgid "One Day" msgid "One Day"
msgstr "Un jour" msgstr "Un jour"
#: bookwyrm/forms.py:247 #: bookwyrm/forms.py:248
msgid "One Week" msgid "One Week"
msgstr "Une semaine" msgstr "Une semaine"
#: bookwyrm/forms.py:248 #: bookwyrm/forms.py:249
msgid "One Month" msgid "One Month"
msgstr "Un mois" msgstr "Un mois"
#: bookwyrm/forms.py:249 #: bookwyrm/forms.py:250
msgid "Does Not Expire" msgid "Does Not Expire"
msgstr "Sans expiration" msgstr "Sans expiration"
#: bookwyrm/forms.py:254 #: bookwyrm/forms.py:255
#, python-format #, python-format
msgid "%(count)d uses" msgid "%(count)d uses"
msgstr "%(count)d utilisations" msgstr "%(count)d utilisations"
#: bookwyrm/forms.py:257 #: bookwyrm/forms.py:258
msgid "Unlimited" msgid "Unlimited"
msgstr "Sans limite" msgstr "Sans limite"
#: bookwyrm/forms.py:307 #: bookwyrm/forms.py:308
msgid "List Order" msgid "List Order"
msgstr "Ordre de la liste" msgstr "Ordre de la liste"
#: bookwyrm/forms.py:308 #: bookwyrm/forms.py:309
msgid "Book Title" msgid "Book Title"
msgstr "Titre du livre" msgstr "Titre du livre"
#: bookwyrm/forms.py:309 #: bookwyrm/forms.py:310
#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/snippets/create_status/review.html:25
#: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:85
#: bookwyrm/templates/user/shelf/shelf.html:116 #: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating" msgid "Rating"
msgstr "Note" msgstr "Note"
#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 #: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107
msgid "Sort By" msgid "Sort By"
msgstr "Trier par" msgstr "Trier par"
#: bookwyrm/forms.py:315 #: bookwyrm/forms.py:316
msgid "Ascending" msgid "Ascending"
msgstr "Ordre croissant" msgstr "Ordre croissant"
#: bookwyrm/forms.py:316 #: bookwyrm/forms.py:317
msgid "Descending" msgid "Descending"
msgstr "Ordre décroissant" msgstr "Ordre décroissant"
@ -288,9 +288,8 @@ msgstr "Clé Goodreads:"
#: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:108 #: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/layout.html:16
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36
#: bookwyrm/templates/user_admin/user_moderation_actions.html:45 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45
msgid "Save" msgid "Save"
msgstr "Enregistrer" msgstr "Enregistrer"
@ -304,10 +303,7 @@ msgstr "Enregistrer"
#: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
@ -2473,24 +2469,24 @@ msgid "Some thoughts on the book"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16
msgid "Progress:" msgid "Progress:"
msgstr "Progression:" msgstr "Progression:"
#: bookwyrm/templates/snippets/create_status/comment.html:34 #: bookwyrm/templates/snippets/create_status/comment.html:34
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/readthrough_form.html:22
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30
msgid "pages" msgid "pages"
msgstr "pages" msgstr "pages"
#: bookwyrm/templates/snippets/create_status/comment.html:35 #: bookwyrm/templates/snippets/create_status/comment.html:35
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31
#: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/readthrough_form.html:23
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31
msgid "percent" msgid "percent"
msgstr "pourcent" msgstr "pourcent"
#: bookwyrm/templates/snippets/create_status/comment.html:41 #: bookwyrm/templates/snippets/create_status/comment.html:41
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36
#, python-format #, python-format
msgid "of %(pages)s pages" msgid "of %(pages)s pages"
msgstr "sur %(pages)s pages" msgstr "sur %(pages)s pages"
@ -2519,6 +2515,7 @@ msgid "Include spoiler alert"
msgstr "Afficher une alerte spoiler" msgstr "Afficher une alerte spoiler"
#: bookwyrm/templates/snippets/create_status/layout.html:38 #: bookwyrm/templates/snippets/create_status/layout.html:38
#: bookwyrm/templates/snippets/reading_modals/form.html:7
msgid "Comment:" msgid "Comment:"
msgstr "Commentaire:" msgstr "Commentaire:"
@ -2675,9 +2672,7 @@ msgid "Goal privacy:"
msgstr "Confidentialité du défi:" msgstr "Confidentialité du défi:"
#: bookwyrm/templates/snippets/goal_form.html:26 #: bookwyrm/templates/snippets/goal_form.html:26
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 #: bookwyrm/templates/snippets/reading_modals/layout.html:13
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20
msgid "Post to feed" msgid "Post to feed"
msgstr "Publier sur le fil dactualité" msgstr "Publier sur le fil dactualité"
@ -2752,21 +2747,45 @@ msgstr "Laisser une note"
msgid "Rate" msgid "Rate"
msgstr "Noter" msgstr "Noter"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "Terminer « <em>%(book_title)s</em> »"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20
#: bookwyrm/templates/snippets/readthrough_form.html:7 #: bookwyrm/templates/snippets/readthrough_form.html:7
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19
msgid "Started reading" msgid "Started reading"
msgstr "Lecture commencée le" msgstr "Lecture commencée le"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:30
msgid "Finished reading"
msgstr "Lecture terminée le"
#: bookwyrm/templates/snippets/reading_modals/form.html:8
msgid "(Optional)"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "Progression de la mise à jour"
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Commencer « <em>%(book_title)s</em> »"
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "Ajouter « <em>%(book_title)s</em> » aux envies de lecture"
#: bookwyrm/templates/snippets/readthrough_form.html:14 #: bookwyrm/templates/snippets/readthrough_form.html:14
msgid "Progress" msgid "Progress"
msgstr "Progression" msgstr "Progression"
#: bookwyrm/templates/snippets/readthrough_form.html:30
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25
msgid "Finished reading"
msgstr "Lecture terminée le"
#: bookwyrm/templates/snippets/register_form.html:32 #: bookwyrm/templates/snippets/register_form.html:32
msgid "Sign Up" msgid "Sign Up"
msgstr "Senregistrer" msgstr "Senregistrer"
@ -2783,16 +2802,6 @@ msgstr "Importer le livre"
msgid "Move book" msgid "Move book"
msgstr "Déplacer le livre" msgstr "Déplacer le livre"
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "Terminer « <em>%(book_title)s</em> »"
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "Progression de la mise à jour"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
msgid "More shelves" msgid "More shelves"
msgstr "Plus détagères" msgstr "Plus détagères"
@ -2806,7 +2815,6 @@ msgid "Finish reading"
msgstr "Terminer la lecture" msgstr "Terminer la lecture"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26
msgid "Want to read" msgid "Want to read"
msgstr "Je veux le lire" msgstr "Je veux le lire"
@ -2815,16 +2823,6 @@ msgstr "Je veux le lire"
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "Retirer de %(name)s" msgstr "Retirer de %(name)s"
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "Commencer « <em>%(book_title)s</em> »"
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "Ajouter « <em>%(book_title)s</em> » aux envies de lecture"
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
msgid "Show more" msgid "Show more"
@ -2862,13 +2860,13 @@ msgstr "Signalé par <a href=\"%(path)s\">%(username)s</a>"
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "Créée par <a href=\"%(path)s\">%(username)s</a>" msgstr "Créée par <a href=\"%(path)s\">%(username)s</a>"
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>" #| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "Éditions de <a href=\"%(work_path)s\">« %(work_title)s»</a>" msgstr "Éditions de <a href=\"%(work_path)s\">« %(work_title)s»</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "Created by <a href=\"%(path)s\">%(username)s</a>" #| msgid "Created by <a href=\"%(path)s\">%(username)s</a>"
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
@ -2880,7 +2878,7 @@ msgstr "Créée par <a href=\"%(path)s\">%(username)s</a>"
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "Créée par <a href=\"%(path)s\">%(username)s</a>" msgstr "Créée par <a href=\"%(path)s\">%(username)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "replied to <a href=\"%(user_path)s\">%(username)s's</a> <a href=\"%(status_path)s\">quote</a>" #| msgid "replied to <a href=\"%(user_path)s\">%(username)s's</a> <a href=\"%(status_path)s\">quote</a>"
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
@ -3195,6 +3193,11 @@ msgstr "Aucun compte avec cette adresse email na été trouvé."
msgid "A password reset link sent to %s" msgid "A password reset link sent to %s"
msgstr "Un lien de réinitialisation a été envoyé à %s." msgstr "Un lien de réinitialisation a été envoyé à %s."
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"
msgstr ""
#~ msgid "Local Timeline" #~ msgid "Local Timeline"
#~ msgstr "Fil dactualité local" #~ msgstr "Fil dactualité local"

Binary file not shown.

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1.1\n" "Project-Id-Version: 0.1.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-13 02:21+0000\n" "POT-Creation-Date: 2021-08-16 21:26+0000\n"
"PO-Revision-Date: 2021-03-20 00:56+0000\n" "PO-Revision-Date: 2021-03-20 00:56+0000\n"
"Last-Translator: Kana <gudzpoz@live.com>\n" "Last-Translator: Kana <gudzpoz@live.com>\n"
"Language-Team: Mouse Reeve <LL@li.org>\n" "Language-Team: Mouse Reeve <LL@li.org>\n"
@ -18,59 +18,59 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: bookwyrm/forms.py:232 #: bookwyrm/forms.py:233
msgid "A user with this email already exists." msgid "A user with this email already exists."
msgstr "已经存在使用该邮箱的用户。" msgstr "已经存在使用该邮箱的用户。"
#: bookwyrm/forms.py:246 #: bookwyrm/forms.py:247
msgid "One Day" msgid "One Day"
msgstr "一天" msgstr "一天"
#: bookwyrm/forms.py:247 #: bookwyrm/forms.py:248
msgid "One Week" msgid "One Week"
msgstr "一周" msgstr "一周"
#: bookwyrm/forms.py:248 #: bookwyrm/forms.py:249
msgid "One Month" msgid "One Month"
msgstr "一个月" msgstr "一个月"
#: bookwyrm/forms.py:249 #: bookwyrm/forms.py:250
msgid "Does Not Expire" msgid "Does Not Expire"
msgstr "永不失效" msgstr "永不失效"
#: bookwyrm/forms.py:254 #: bookwyrm/forms.py:255
#, python-format #, python-format
msgid "%(count)d uses" msgid "%(count)d uses"
msgstr "%(count)d 次使用" msgstr "%(count)d 次使用"
#: bookwyrm/forms.py:257 #: bookwyrm/forms.py:258
msgid "Unlimited" msgid "Unlimited"
msgstr "不受限" msgstr "不受限"
#: bookwyrm/forms.py:307 #: bookwyrm/forms.py:308
msgid "List Order" msgid "List Order"
msgstr "列表顺序" msgstr "列表顺序"
#: bookwyrm/forms.py:308 #: bookwyrm/forms.py:309
msgid "Book Title" msgid "Book Title"
msgstr "书名" msgstr "书名"
#: bookwyrm/forms.py:309 #: bookwyrm/forms.py:310
#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/snippets/create_status/review.html:25
#: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:85
#: bookwyrm/templates/user/shelf/shelf.html:116 #: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating" msgid "Rating"
msgstr "评价" msgstr "评价"
#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 #: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107
msgid "Sort By" msgid "Sort By"
msgstr "排序方式" msgstr "排序方式"
#: bookwyrm/forms.py:315 #: bookwyrm/forms.py:316
msgid "Ascending" msgid "Ascending"
msgstr "升序" msgstr "升序"
#: bookwyrm/forms.py:316 #: bookwyrm/forms.py:317
msgid "Descending" msgid "Descending"
msgstr "降序" msgstr "降序"
@ -284,9 +284,8 @@ msgstr "Goodreads key:"
#: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:108 #: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/layout.html:16
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36
#: bookwyrm/templates/user_admin/user_moderation_actions.html:45 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45
msgid "Save" msgid "Save"
msgstr "保存" msgstr "保存"
@ -300,10 +299,7 @@ msgstr "保存"
#: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
@ -1791,8 +1787,9 @@ msgid "boosted your <a href=\"%(related_path)s\">status</a>"
msgstr "转发了你的 <a href=\"%(related_path)s\">状态</a>" msgstr "转发了你的 <a href=\"%(related_path)s\">状态</a>"
#: bookwyrm/templates/notifications.html:121 #: bookwyrm/templates/notifications.html:121
#, python-format #, fuzzy, python-format
msgid " added <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list “<a href=\"%(list_path)s\">%(list_name)s</a>”" #| msgid " added <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list “<a href=\"%(list_path)s\">%(list_name)s</a>”"
msgid " added <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\""
msgstr " 添加了 <em><a href=\"%(book_path)s\">%(book_title)s</a></em> 到你的列表 “<a href=\"%(list_path)s\">%(list_name)s</a>”" msgstr " 添加了 <em><a href=\"%(book_path)s\">%(book_title)s</a></em> 到你的列表 “<a href=\"%(list_path)s\">%(list_name)s</a>”"
#: bookwyrm/templates/notifications.html:123 #: bookwyrm/templates/notifications.html:123
@ -2446,24 +2443,24 @@ msgid "Some thoughts on the book"
msgstr "对书的一些看法" msgstr "对书的一些看法"
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16
msgid "Progress:" msgid "Progress:"
msgstr "进度:" msgstr "进度:"
#: bookwyrm/templates/snippets/create_status/comment.html:34 #: bookwyrm/templates/snippets/create_status/comment.html:34
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/readthrough_form.html:22
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30
msgid "pages" msgid "pages"
msgstr "页数" msgstr "页数"
#: bookwyrm/templates/snippets/create_status/comment.html:35 #: bookwyrm/templates/snippets/create_status/comment.html:35
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31
#: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/readthrough_form.html:23
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31
msgid "percent" msgid "percent"
msgstr "百分比" msgstr "百分比"
#: bookwyrm/templates/snippets/create_status/comment.html:41 #: bookwyrm/templates/snippets/create_status/comment.html:41
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36
#, python-format #, python-format
msgid "of %(pages)s pages" msgid "of %(pages)s pages"
msgstr "全书 %(pages)s 页" msgstr "全书 %(pages)s 页"
@ -2492,6 +2489,7 @@ msgid "Include spoiler alert"
msgstr "加入剧透警告" msgstr "加入剧透警告"
#: bookwyrm/templates/snippets/create_status/layout.html:38 #: bookwyrm/templates/snippets/create_status/layout.html:38
#: bookwyrm/templates/snippets/reading_modals/form.html:7
msgid "Comment:" msgid "Comment:"
msgstr "评论:" msgstr "评论:"
@ -2638,9 +2636,7 @@ msgid "Goal privacy:"
msgstr "目标隐私:" msgstr "目标隐私:"
#: bookwyrm/templates/snippets/goal_form.html:26 #: bookwyrm/templates/snippets/goal_form.html:26
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 #: bookwyrm/templates/snippets/reading_modals/layout.html:13
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20
msgid "Post to feed" msgid "Post to feed"
msgstr "发布到消息流中" msgstr "发布到消息流中"
@ -2715,21 +2711,45 @@ msgstr "留下评价"
msgid "Rate" msgid "Rate"
msgstr "评价" msgstr "评价"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "完成《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20
#: bookwyrm/templates/snippets/readthrough_form.html:7 #: bookwyrm/templates/snippets/readthrough_form.html:7
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19
msgid "Started reading" msgid "Started reading"
msgstr "已开始阅读" msgstr "已开始阅读"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:30
msgid "Finished reading"
msgstr "已完成阅读"
#: bookwyrm/templates/snippets/reading_modals/form.html:8
msgid "(Optional)"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "更新进度"
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "开始《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "想要阅读《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/readthrough_form.html:14 #: bookwyrm/templates/snippets/readthrough_form.html:14
msgid "Progress" msgid "Progress"
msgstr "进度" msgstr "进度"
#: bookwyrm/templates/snippets/readthrough_form.html:30
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25
msgid "Finished reading"
msgstr "已完成阅读"
#: bookwyrm/templates/snippets/register_form.html:32 #: bookwyrm/templates/snippets/register_form.html:32
msgid "Sign Up" msgid "Sign Up"
msgstr "注册" msgstr "注册"
@ -2746,16 +2766,6 @@ msgstr "导入书目"
msgid "Move book" msgid "Move book"
msgstr "移动书目" msgstr "移动书目"
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "完成《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "更新进度"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
msgid "More shelves" msgid "More shelves"
msgstr "更多书架" msgstr "更多书架"
@ -2769,7 +2779,6 @@ msgid "Finish reading"
msgstr "完成阅读" msgstr "完成阅读"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26
msgid "Want to read" msgid "Want to read"
msgstr "想要阅读" msgstr "想要阅读"
@ -2778,16 +2787,6 @@ msgstr "想要阅读"
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "从 %(name)s 移除" msgstr "从 %(name)s 移除"
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "开始《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "想要阅读《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
msgid "Show more" msgid "Show more"
@ -2814,7 +2813,6 @@ msgstr "回复了 <a href=\"%(user_path)s\">%(username)s</a> 的 <a href=\"%(sta
#: bookwyrm/templates/snippets/status/headers/quotation.html:2 #: bookwyrm/templates/snippets/status/headers/quotation.html:2
#, python-format #, python-format
#| msgid "Reported by <a href=\"%(path)s\">%(username)s</a>"
msgid "quoted <a href=\"%(book_path)s\">%(book)s</a>" msgid "quoted <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "引用了 <a href=\"%(book_path)s\">%(book)s</a>" msgstr "引用了 <a href=\"%(book_path)s\">%(book)s</a>"
@ -2823,12 +2821,12 @@ msgstr "引用了 <a href=\"%(book_path)s\">%(book)s</a>"
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "为 <a href=\"%(book_path)s\">%(book)s</a> 打了分:" msgstr "为 <a href=\"%(book_path)s\">%(book)s</a> 打了分:"
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:7
#, python-format #, python-format
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "完成阅读 <a href=\"%(book_path)s\">%(book)s</a>" msgstr "完成阅读 <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:7
#, python-format #, python-format
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "开始阅读 <a href=\"%(book_path)s\">%(book)s</a>" msgstr "开始阅读 <a href=\"%(book_path)s\">%(book)s</a>"
@ -2838,7 +2836,7 @@ msgstr "开始阅读 <a href=\"%(book_path)s\">%(book)s</a>"
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "为 <a href=\"%(book_path)s\">%(book)s</a> 撰写了书评" msgstr "为 <a href=\"%(book_path)s\">%(book)s</a> 撰写了书评"
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:7
#, python-format #, python-format
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "<a href=\"%(user_path)s\">%(username)s</a> 想要阅读 <a href=\"%(book_path)s\">%(book)s</a>" msgstr "<a href=\"%(user_path)s\">%(username)s</a> 想要阅读 <a href=\"%(book_path)s\">%(book)s</a>"
@ -3143,6 +3141,11 @@ msgstr "没有找到使用该邮箱的用户。"
msgid "A password reset link sent to %s" msgid "A password reset link sent to %s"
msgstr "密码重置连接已发送给 %s" msgstr "密码重置连接已发送给 %s"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"
msgstr ""
#~ msgid "Local Timeline" #~ msgid "Local Timeline"
#~ msgstr "本地时间线" #~ msgstr "本地时间线"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.0.1\n" "Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-13 02:21+0000\n" "POT-Creation-Date: 2021-08-16 21:26+0000\n"
"PO-Revision-Date: 2021-06-30 10:36+0000\n" "PO-Revision-Date: 2021-06-30 10:36+0000\n"
"Last-Translator: Grace Cheng <chengracecwy@gmail.com>\n" "Last-Translator: Grace Cheng <chengracecwy@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,59 +18,59 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: bookwyrm/forms.py:232 #: bookwyrm/forms.py:233
msgid "A user with this email already exists." msgid "A user with this email already exists."
msgstr "已經存在使用該郵箱的使用者。" msgstr "已經存在使用該郵箱的使用者。"
#: bookwyrm/forms.py:246 #: bookwyrm/forms.py:247
msgid "One Day" msgid "One Day"
msgstr "一天" msgstr "一天"
#: bookwyrm/forms.py:247 #: bookwyrm/forms.py:248
msgid "One Week" msgid "One Week"
msgstr "一週" msgstr "一週"
#: bookwyrm/forms.py:248 #: bookwyrm/forms.py:249
msgid "One Month" msgid "One Month"
msgstr "一個月" msgstr "一個月"
#: bookwyrm/forms.py:249 #: bookwyrm/forms.py:250
msgid "Does Not Expire" msgid "Does Not Expire"
msgstr "永不失效" msgstr "永不失效"
#: bookwyrm/forms.py:254 #: bookwyrm/forms.py:255
#, python-format #, python-format
msgid "%(count)d uses" msgid "%(count)d uses"
msgstr "%(count)d 次使用" msgstr "%(count)d 次使用"
#: bookwyrm/forms.py:257 #: bookwyrm/forms.py:258
msgid "Unlimited" msgid "Unlimited"
msgstr "不受限" msgstr "不受限"
#: bookwyrm/forms.py:307 #: bookwyrm/forms.py:308
msgid "List Order" msgid "List Order"
msgstr "列表順序" msgstr "列表順序"
#: bookwyrm/forms.py:308 #: bookwyrm/forms.py:309
msgid "Book Title" msgid "Book Title"
msgstr "書名" msgstr "書名"
#: bookwyrm/forms.py:309 #: bookwyrm/forms.py:310
#: bookwyrm/templates/snippets/create_status/review.html:25 #: bookwyrm/templates/snippets/create_status/review.html:25
#: bookwyrm/templates/user/shelf/shelf.html:85 #: bookwyrm/templates/user/shelf/shelf.html:85
#: bookwyrm/templates/user/shelf/shelf.html:116 #: bookwyrm/templates/user/shelf/shelf.html:116
msgid "Rating" msgid "Rating"
msgstr "評價" msgstr "評價"
#: bookwyrm/forms.py:311 bookwyrm/templates/lists/list.html:107 #: bookwyrm/forms.py:312 bookwyrm/templates/lists/list.html:107
msgid "Sort By" msgid "Sort By"
msgstr "排序方式" msgstr "排序方式"
#: bookwyrm/forms.py:315 #: bookwyrm/forms.py:316
msgid "Ascending" msgid "Ascending"
msgstr "升序" msgstr "升序"
#: bookwyrm/forms.py:316 #: bookwyrm/forms.py:317
msgid "Descending" msgid "Descending"
msgstr "降序" msgstr "降序"
@ -290,9 +290,8 @@ msgstr "Goodreads key:"
#: bookwyrm/templates/settings/edit_server.html:68 #: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:98 #: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:108 #: bookwyrm/templates/settings/site.html:108
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/layout.html:16
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:42
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:36
#: bookwyrm/templates/user_admin/user_moderation_actions.html:45 #: bookwyrm/templates/user_admin/user_moderation_actions.html:45
msgid "Save" msgid "Save"
msgstr "儲存" msgstr "儲存"
@ -306,10 +305,7 @@ msgstr "儲存"
#: bookwyrm/templates/settings/federated_server.html:99 #: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:43 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:43
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:37
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:28
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
@ -2487,24 +2483,24 @@ msgid "Some thoughts on the book"
msgstr "" msgstr ""
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:16
msgid "Progress:" msgid "Progress:"
msgstr "進度:" msgstr "進度:"
#: bookwyrm/templates/snippets/create_status/comment.html:34 #: bookwyrm/templates/snippets/create_status/comment.html:34
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/readthrough_form.html:22
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30
msgid "pages" msgid "pages"
msgstr "頁數" msgstr "頁數"
#: bookwyrm/templates/snippets/create_status/comment.html:35 #: bookwyrm/templates/snippets/create_status/comment.html:35
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:31
#: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/readthrough_form.html:23
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31
msgid "percent" msgid "percent"
msgstr "百分比" msgstr "百分比"
#: bookwyrm/templates/snippets/create_status/comment.html:41 #: bookwyrm/templates/snippets/create_status/comment.html:41
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:36
#, python-format #, python-format
msgid "of %(pages)s pages" msgid "of %(pages)s pages"
msgstr "全書 %(pages)s 頁" msgstr "全書 %(pages)s 頁"
@ -2533,6 +2529,7 @@ msgid "Include spoiler alert"
msgstr "加入劇透警告" msgstr "加入劇透警告"
#: bookwyrm/templates/snippets/create_status/layout.html:38 #: bookwyrm/templates/snippets/create_status/layout.html:38
#: bookwyrm/templates/snippets/reading_modals/form.html:7
msgid "Comment:" msgid "Comment:"
msgstr "評論:" msgstr "評論:"
@ -2685,9 +2682,7 @@ msgid "Goal privacy:"
msgstr "目標隱私:" msgstr "目標隱私:"
#: bookwyrm/templates/snippets/goal_form.html:26 #: bookwyrm/templates/snippets/goal_form.html:26
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:37 #: bookwyrm/templates/snippets/reading_modals/layout.html:13
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:31
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:20
msgid "Post to feed" msgid "Post to feed"
msgstr "發佈到即時動態" msgstr "發佈到即時動態"
@ -2762,21 +2757,45 @@ msgstr "留下評價"
msgid "Rate" msgid "Rate"
msgstr "評價" msgstr "評價"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:6
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "完成 \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:22
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:20
#: bookwyrm/templates/snippets/readthrough_form.html:7 #: bookwyrm/templates/snippets/readthrough_form.html:7
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:19
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:19
msgid "Started reading" msgid "Started reading"
msgstr "已開始閱讀" msgstr "已開始閱讀"
#: bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html:30
#: bookwyrm/templates/snippets/readthrough_form.html:30
msgid "Finished reading"
msgstr "已完成閱讀"
#: bookwyrm/templates/snippets/reading_modals/form.html:8
msgid "(Optional)"
msgstr ""
#: bookwyrm/templates/snippets/reading_modals/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "更新進度"
#: bookwyrm/templates/snippets/reading_modals/start_reading_modal.html:6
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "開始 \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html:6
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "想要閱讀 \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/readthrough_form.html:14 #: bookwyrm/templates/snippets/readthrough_form.html:14
msgid "Progress" msgid "Progress"
msgstr "進度" msgstr "進度"
#: bookwyrm/templates/snippets/readthrough_form.html:30
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:25
msgid "Finished reading"
msgstr "已完成閱讀"
#: bookwyrm/templates/snippets/register_form.html:32 #: bookwyrm/templates/snippets/register_form.html:32
msgid "Sign Up" msgid "Sign Up"
msgstr "註冊" msgstr "註冊"
@ -2793,16 +2812,6 @@ msgstr "匯入書目"
msgid "Move book" msgid "Move book"
msgstr "移動書目" msgstr "移動書目"
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format
msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "完成 \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
msgid "Update progress"
msgstr "更新進度"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5
msgid "More shelves" msgid "More shelves"
msgstr "更多書架" msgstr "更多書架"
@ -2816,7 +2825,6 @@ msgid "Finish reading"
msgstr "完成閱讀" msgstr "完成閱讀"
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:25
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:26
msgid "Want to read" msgid "Want to read"
msgstr "想要閱讀" msgstr "想要閱讀"
@ -2825,16 +2833,6 @@ msgstr "想要閱讀"
msgid "Remove from %(name)s" msgid "Remove from %(name)s"
msgstr "從 %(name)s 移除" msgstr "從 %(name)s 移除"
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format
msgid "Start \"<em>%(book_title)s</em>\""
msgstr "開始 \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "想要閱讀 \"<em>%(book_title)s</em>\""
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
msgid "Show more" msgid "Show more"
@ -2872,13 +2870,13 @@ msgstr "移除 <a href=\"%(path)s\">%(name)s</a>"
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "由 <a href=\"%(path)s\">%(username)s</a> 建立" msgstr "由 <a href=\"%(path)s\">%(username)s</a> 建立"
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>" #| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> 的各版本" msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> 的各版本"
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "Created by <a href=\"%(path)s\">%(username)s</a>" #| msgid "Created by <a href=\"%(path)s\">%(username)s</a>"
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
@ -2890,7 +2888,7 @@ msgstr "由 <a href=\"%(path)s\">%(username)s</a> 建立"
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "移除 <a href=\"%(path)s\">%(name)s</a>" msgstr "移除 <a href=\"%(path)s\">%(name)s</a>"
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:7
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "replied to <a href=\"%(user_path)s\">%(username)s's</a> <a href=\"%(status_path)s\">status</a>" #| msgid "replied to <a href=\"%(user_path)s\">%(username)s's</a> <a href=\"%(status_path)s\">status</a>"
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
@ -3201,6 +3199,11 @@ msgstr "沒有找到使用該郵箱的使用者。"
msgid "A password reset link sent to %s" msgid "A password reset link sent to %s"
msgstr "密碼重置連結已傳送給 %s" msgstr "密碼重置連結已傳送給 %s"
#: bookwyrm/views/rss_feed.py:34
#, python-brace-format
msgid "Status updates from {obj.display_name}"
msgstr ""
#~ msgid "Local Timeline" #~ msgid "Local Timeline"
#~ msgstr "本地時間線" #~ msgstr "本地時間線"