diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 7615adcf7..c5b896e34 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -11,6 +11,7 @@ class Book(ActivityObject): """ serializes an edition or work, abstract """ title: str + lastEditedBy: str = None sortTitle: str = "" subtitle: str = "" description: str = "" @@ -64,6 +65,7 @@ class Author(ActivityObject): """ author of a book """ name: str + lastEditedBy: str = None born: str = None died: str = None aliases: List[str] = field(default_factory=lambda: []) diff --git a/bookwyrm/activitypub/verbs.py b/bookwyrm/activitypub/verbs.py index c2cbfea31..090beea5f 100644 --- a/bookwyrm/activitypub/verbs.py +++ b/bookwyrm/activitypub/verbs.py @@ -176,7 +176,8 @@ class Remove(Add): def action(self): """ find and remove the activity object """ obj = self.object.to_model(save=False, allow_create=False) - obj.delete() + if obj: + obj.delete() @dataclass(init=False) diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index 1f1f1a3b5..df68334e0 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -156,14 +156,6 @@ class UserGroupForm(CustomForm): fields = ["groups"] -class TagForm(CustomForm): - class Meta: - model = models.Tag - fields = ["name"] - help_texts = {f: None for f in fields} - labels = {"name": "Add a tag"} - - class CoverForm(CustomForm): class Meta: model = models.Book diff --git a/bookwyrm/migrations/0069_auto_20210422_1604.py b/bookwyrm/migrations/0069_auto_20210422_1604.py new file mode 100644 index 000000000..6591e7b92 --- /dev/null +++ b/bookwyrm/migrations/0069_auto_20210422_1604.py @@ -0,0 +1,34 @@ +# Generated by Django 3.1.8 on 2021-04-22 16:04 + +import bookwyrm.models.fields +from django.conf import settings +from django.db import migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0068_ordering_for_list_items"), + ] + + operations = [ + migrations.AlterField( + model_name="author", + name="last_edited_by", + field=bookwyrm.models.fields.ForeignKey( + null=True, + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name="book", + name="last_edited_by", + field=bookwyrm.models.fields.ForeignKey( + null=True, + on_delete=django.db.models.deletion.PROTECT, + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/bookwyrm/migrations/0070_auto_20210423_0121.py b/bookwyrm/migrations/0070_auto_20210423_0121.py new file mode 100644 index 000000000..0b04c3ca2 --- /dev/null +++ b/bookwyrm/migrations/0070_auto_20210423_0121.py @@ -0,0 +1,35 @@ +# Generated by Django 3.1.8 on 2021-04-23 01:21 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0069_auto_20210422_1604"), + ] + + operations = [ + migrations.AlterUniqueTogether( + name="usertag", + unique_together=None, + ), + migrations.RemoveField( + model_name="usertag", + name="book", + ), + migrations.RemoveField( + model_name="usertag", + name="tag", + ), + migrations.RemoveField( + model_name="usertag", + name="user", + ), + migrations.DeleteModel( + name="Tag", + ), + migrations.DeleteModel( + name="UserTag", + ), + ] diff --git a/bookwyrm/models/__init__.py b/bookwyrm/models/__init__.py index 35e32c2cf..2a25a5251 100644 --- a/bookwyrm/models/__init__.py +++ b/bookwyrm/models/__init__.py @@ -17,8 +17,6 @@ from .favorite import Favorite from .notification import Notification from .readthrough import ReadThrough, ProgressUpdate, ProgressMode -from .tag import Tag, UserTag - from .user import User, KeyPair, AnnualGoal from .relationship import UserFollows, UserFollowRequest, UserBlocks from .report import Report, ReportComment diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index f687e96cb..02cfafc0e 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -148,13 +148,17 @@ class ActivitypubMixin: mentions = self.recipients if hasattr(self, "recipients") else [] # we always send activities to explicitly mentioned users' inboxes - recipients = [u.inbox for u in mentions or []] + recipients = [u.inbox for u in mentions or [] if not u.local] # unless it's a dm, all the followers should receive the activity if privacy != "direct": # we will send this out to a subset of all remote users - queryset = user_model.viewer_aware_objects(user).filter( - local=False, + queryset = ( + user_model.viewer_aware_objects(user) + .filter( + local=False, + ) + .distinct() ) # filter users first by whether they're using the desired software # this lets us send book updates only to other bw servers @@ -175,7 +179,7 @@ class ActivitypubMixin: "inbox", flat=True ) recipients += list(shared_inboxes) + list(inboxes) - return recipients + return list(set(recipients)) def to_activity_dataclass(self): """ convert from a model to an activity """ @@ -200,7 +204,9 @@ class ObjectMixin(ActivitypubMixin): created = created or not bool(self.id) # first off, we want to save normally no matter what super().save(*args, **kwargs) - if not broadcast: + if not broadcast or ( + hasattr(self, "status_type") and self.status_type == "Announce" + ): return # this will work for objects owned by a user (lists, shelves) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index a6824c0ad..5280c7aaf 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -26,7 +26,11 @@ class BookDataModel(ObjectMixin, BookWyrmModel): max_length=255, blank=True, null=True, deduplication_field=True ) - last_edited_by = models.ForeignKey("User", on_delete=models.PROTECT, null=True) + last_edited_by = fields.ForeignKey( + "User", + on_delete=models.PROTECT, + null=True, + ) class Meta: """ can't initialize this model, that wouldn't make sense """ diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 2aefae51f..a1b2035b1 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -275,9 +275,12 @@ class ManyToManyField(ActivitypubFieldMixin, models.ManyToManyField): return [i.remote_id for i in value.all()] def field_from_activity(self, value): - items = [] if value is None or value is MISSING: - return [] + return None + if not isinstance(value, list): + # If this is a link, we currently aren't doing anything with it + return None + items = [] for remote_id in value: try: validate_remote_id(remote_id) diff --git a/bookwyrm/models/relationship.py b/bookwyrm/models/relationship.py index 927c87407..3f849597a 100644 --- a/bookwyrm/models/relationship.py +++ b/bookwyrm/models/relationship.py @@ -101,12 +101,15 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship): def save(self, *args, broadcast=True, **kwargs): """ make sure the follow or block relationship doesn't already exist """ - # don't create a request if a follow already exists + # if there's a request for a follow that already exists, accept it + # without changing the local database state if UserFollows.objects.filter( user_subject=self.user_subject, user_object=self.user_object, ).exists(): - raise IntegrityError() + self.accept(broadcast_only=True) + return + # blocking in either direction is a no-go if UserBlocks.objects.filter( Q( @@ -141,9 +144,9 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship): """ get id for sending an accept or reject of a local user """ base_path = self.user_object.remote_id - return "%s#%s/%d" % (base_path, status, self.id) + return "%s#%s/%d" % (base_path, status, self.id or 0) - def accept(self): + def accept(self, broadcast_only=False): """ turn this request into the real deal""" user = self.user_object if not self.user_subject.local: @@ -153,6 +156,9 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship): object=self.to_activity(), ).serialize() self.broadcast(activity, user) + if broadcast_only: + return + with transaction.atomic(): UserFollows.from_request(self) self.delete() diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 360288e93..0dee0b756 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -351,6 +351,16 @@ class Boost(ActivityMixin, Status): def save(self, *args, **kwargs): """ save and notify """ + # This constraint can't work as it would cross tables. + # class Meta: + # unique_together = ('user', 'boosted_status') + if ( + Boost.objects.filter(boosted_status=self.boosted_status, user=self.user) + .exclude(id=self.id) + .exists() + ): + return + super().save(*args, **kwargs) if not self.boosted_status.user.local or self.boosted_status.user == self.user: return diff --git a/bookwyrm/models/tag.py b/bookwyrm/models/tag.py deleted file mode 100644 index 2c45b8f91..000000000 --- a/bookwyrm/models/tag.py +++ /dev/null @@ -1,63 +0,0 @@ -""" models for storing different kinds of Activities """ -import urllib.parse - -from django.apps import apps -from django.db import models - -from bookwyrm import activitypub -from bookwyrm.settings import DOMAIN -from .activitypub_mixin import CollectionItemMixin, OrderedCollectionMixin -from .base_model import BookWyrmModel -from . import fields - - -class Tag(OrderedCollectionMixin, BookWyrmModel): - """ freeform tags for books """ - - name = fields.CharField(max_length=100, unique=True) - identifier = models.CharField(max_length=100) - - @property - def books(self): - """ count of books associated with this tag """ - edition_model = apps.get_model("bookwyrm.Edition", require_ready=True) - return ( - edition_model.objects.filter(usertag__tag__identifier=self.identifier) - .order_by("-created_date") - .distinct() - ) - - collection_queryset = books - - def get_remote_id(self): - """ tag should use identifier not id in remote_id """ - base_path = "https://%s" % DOMAIN - return "%s/tag/%s" % (base_path, self.identifier) - - def save(self, *args, **kwargs): - """ create a url-safe lookup key for the tag """ - if not self.id: - # add identifiers to new tags - self.identifier = urllib.parse.quote_plus(self.name) - super().save(*args, **kwargs) - - -class UserTag(CollectionItemMixin, BookWyrmModel): - """ an instance of a tag on a book by a user """ - - user = fields.ForeignKey( - "User", on_delete=models.PROTECT, activitypub_field="actor" - ) - book = fields.ForeignKey( - "Edition", on_delete=models.PROTECT, activitypub_field="object" - ) - tag = fields.ForeignKey("Tag", on_delete=models.PROTECT, activitypub_field="target") - - activity_serializer = activitypub.Add - object_field = "book" - collection_field = "tag" - - class Meta: - """ unqiueness constraint """ - - unique_together = ("user", "book", "tag") diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index fe7617bcc..cb9e1d12c 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -1,6 +1,5 @@ html { scroll-behavior: smooth; - scroll-padding-top: 20%; } body { @@ -110,6 +109,13 @@ body { } } +/** Stars + ******************************************************************************/ + +.stars { + white-space: nowrap; +} + /** Stars in a review form * * Specificity makes hovering taking over checked inputs. diff --git a/bookwyrm/templates/components/dropdown.html b/bookwyrm/templates/components/dropdown.html index 734d62764..96dce8232 100644 --- a/bookwyrm/templates/components/dropdown.html +++ b/bookwyrm/templates/components/dropdown.html @@ -23,7 +23,7 @@

{% include 'snippets/book_titleby.html' with book=book %}

-

{{ book|book_description|default:""|truncatewords_html:20 }}

+

{{ book|book_description|to_markdown|default:""|safe|truncatewords_html:20 }}

{% include 'snippets/shelve_button/shelve_button.html' with book=book %}
diff --git a/bookwyrm/templates/snippets/status/layout.html b/bookwyrm/templates/snippets/status/layout.html index 28bfe6213..6014158ff 100644 --- a/bookwyrm/templates/snippets/status/layout.html +++ b/bookwyrm/templates/snippets/status/layout.html @@ -16,7 +16,7 @@ - diff --git a/bookwyrm/templates/snippets/status/status_options.html b/bookwyrm/templates/snippets/status/status_options.html index 763d09b8d..549039b7c 100644 --- a/bookwyrm/templates/snippets/status/status_options.html +++ b/bookwyrm/templates/snippets/status/status_options.html @@ -10,19 +10,19 @@ {% block dropdown-list %} {% if status.user == request.user %} {# things you can do to your own statuses #} -
  • - +
  • {% if status.status_type != 'GeneratedNote' and status.status_type != 'Rating' %} -
  • - @@ -30,13 +30,15 @@ {% endif %} {% else %} {# things you can do to other people's statuses #} -
  • - {% trans "Send direct message" %} +
  • -
  • +
  • -
  • +
  • {% endif %} diff --git a/bookwyrm/templates/snippets/tag.html b/bookwyrm/templates/snippets/tag.html deleted file mode 100644 index 507def723..000000000 --- a/bookwyrm/templates/snippets/tag.html +++ /dev/null @@ -1,23 +0,0 @@ -{% load i18n %} -
    -
    - {% csrf_token %} - - - -
    - - {{ tag.tag.name }} - - {% if tag.tag.identifier in user_tags %} - - {% else %} - - {% endif %} -
    -
    -
    diff --git a/bookwyrm/templates/tag.html b/bookwyrm/templates/tag.html deleted file mode 100644 index b6fa67783..000000000 --- a/bookwyrm/templates/tag.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends 'layout.html' %} -{% load i18n %} -{% load bookwyrm_tags %} - -{% block title %}{{ tag.name }}{% endblock %} - -{% block content %} -
    -

    {% blocktrans %}Books tagged "{{ tag.name }}"{% endblocktrans %}

    - {% include 'snippets/book_tiles.html' with books=books.all %} -
    -{% endblock %} - - diff --git a/bookwyrm/templatetags/bookwyrm_tags.py b/bookwyrm/templatetags/bookwyrm_tags.py index 69e762cef..bd14a410f 100644 --- a/bookwyrm/templatetags/bookwyrm_tags.py +++ b/bookwyrm/templatetags/bookwyrm_tags.py @@ -1,7 +1,7 @@ """ template filters """ from uuid import uuid4 -from django import template +from django import template, utils from django.db.models import Avg from bookwyrm import models, views @@ -168,6 +168,17 @@ def get_next_shelf(current_shelf): return "to-read" +@register.filter(name="title") +def get_title(book): + """ display the subtitle if the title is short """ + if not book: + return "" + title = book.title + if len(title) < 6 and book.subtitle: + title = "{:s}: {:s}".format(title, book.subtitle) + return title + + @register.simple_tag(takes_context=False) def related_status(notification): """ for notifications """ @@ -217,3 +228,10 @@ def active_read_through(book, user): def comparison_bool(str1, str2): """ idk why I need to write a tag for this, it reutrns a bool """ return str1 == str2 + + +@register.simple_tag(takes_context=False) +def get_lang(): + """ get current language, strip to the first two letters """ + language = utils.translation.get_language() + return language[0 : language.find("-")] diff --git a/bookwyrm/tests/data/ap_user_rat.json b/bookwyrm/tests/data/ap_user_rat.json new file mode 100644 index 000000000..0e36f1c62 --- /dev/null +++ b/bookwyrm/tests/data/ap_user_rat.json @@ -0,0 +1,39 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value" + } + ], + "id": "https://example.com/users/rat", + "type": "Person", + "preferredUsername": "rat", + "name": "RAT???", + "inbox": "https://example.com/users/rat/inbox", + "outbox": "https://example.com/users/rat/outbox", + "followers": "https://example.com/users/rat/followers", + "following": "https://example.com/users/rat/following", + "summary": "", + "publicKey": { + "id": "https://example.com/users/rat/#main-key", + "owner": "https://example.com/users/rat", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6QisDrjOQvkRo/MqNmSYPwqtt\nCxg/8rCW+9jKbFUKvqjTeKVotEE85122v/DCvobCCdfQuYIFdVMk+dB1xJ0iPGPg\nyU79QHY22NdV9mFKA2qtXVVxb5cxpA4PlwOHM6PM/k8B+H09OUrop2aPUAYwy+vg\n+MXyz8bAXrIS1kq6fQIDAQAB\n-----END PUBLIC KEY-----" + }, + "endpoints": { + "sharedInbox": "https://example.com/inbox" + }, + "bookwyrmUser": true, + "manuallyApprovesFollowers": false, + "discoverable": true, + "devices": "https://friend.camp/users/tripofmice/collections/devices", + "tag": [], + "icon": { + "type": "Image", + "mediaType": "image/png", + "url": "https://example.com/images/avatars/AL-2-crop-50.png" + } +} diff --git a/bookwyrm/tests/data/bw_edition.json b/bookwyrm/tests/data/bw_edition.json index 0cc17d29a..6194e4090 100644 --- a/bookwyrm/tests/data/bw_edition.json +++ b/bookwyrm/tests/data/bw_edition.json @@ -1,5 +1,6 @@ { "id": "https://bookwyrm.social/book/5989", + "lastEditedBy": "https://example.com/users/rat", "type": "Edition", "authors": [ "https://bookwyrm.social/author/417" diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index 0d1acd978..e172ede96 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -155,8 +155,8 @@ class ActivitypubMixins(TestCase): recipients = ActivitypubMixin.get_recipients(mock_self) self.assertEqual(len(recipients), 2) - self.assertEqual(recipients[0], another_remote_user.inbox) - self.assertEqual(recipients[1], self.remote_user.inbox) + self.assertTrue(another_remote_user.inbox in recipients) + self.assertTrue(self.remote_user.inbox in recipients) def test_get_recipients_direct(self, _): """ determines the recipients for a user's object broadcast """ diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 4263c4572..52d6608a2 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -269,7 +269,7 @@ class Status(TestCase): def test_review_to_pure_activity(self, *_): """ subclass of the base model version with a "pure" serializer """ status = models.Review.objects.create( - name="Review name", + name="Review's name", content="test content", rating=3.0, user=self.local_user, @@ -280,7 +280,7 @@ class Status(TestCase): self.assertEqual(activity["type"], "Article") self.assertEqual( activity["name"], - 'Review of "%s" (3 stars): Review name' % self.book.title, + 'Review of "%s" (3 stars): Review\'s name' % self.book.title, ) self.assertEqual(activity["content"], "test content") self.assertEqual(activity["attachment"][0].type, "Document") diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py index 954d4e647..dbe4ec568 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_announce.py +++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py @@ -51,7 +51,7 @@ class InboxActivities(TestCase): models.SiteSettings.objects.create() @patch("bookwyrm.activitystreams.ActivityStream.add_status") - def test_handle_boost(self, _): + def test_boost(self, redis_mock): """ boost a status """ self.assertEqual(models.Notification.objects.count(), 0) activity = { @@ -66,16 +66,23 @@ class InboxActivities(TestCase): with patch("bookwyrm.models.status.Status.ignore_activity") as discarder: discarder.return_value = False views.inbox.activity_task(activity) + + # boost added to redis activitystreams + self.assertTrue(redis_mock.called) + + # boost created of correct status boost = models.Boost.objects.get() self.assertEqual(boost.boosted_status, self.status) + + # notification sent to original poster notification = models.Notification.objects.get() self.assertEqual(notification.user, self.local_user) self.assertEqual(notification.related_status, self.status) @responses.activate @patch("bookwyrm.activitystreams.ActivityStream.add_status") - def test_handle_boost_remote_status(self, redis_mock): - """ boost a status """ + def test_boost_remote_status(self, redis_mock): + """ boost a status from a remote server """ work = models.Work.objects.create(title="work title") book = models.Edition.objects.create( title="Test", @@ -123,7 +130,7 @@ class InboxActivities(TestCase): self.assertEqual(boost.boosted_status.comment.book, book) @responses.activate - def test_handle_discarded_boost(self): + def test_discarded_boost(self): """ test a boost of a mastodon status that will be discarded """ status = models.Status( content="hi", @@ -146,7 +153,7 @@ class InboxActivities(TestCase): views.inbox.activity_task(activity) self.assertEqual(models.Boost.objects.count(), 0) - def test_handle_unboost(self): + def test_unboost(self): """ undo a boost """ with patch("bookwyrm.activitystreams.ActivityStream.add_status"): boost = models.Boost.objects.create( @@ -175,7 +182,7 @@ class InboxActivities(TestCase): self.assertTrue(redis_mock.called) self.assertFalse(models.Boost.objects.exists()) - def test_handle_unboost_unknown_boost(self): + def test_unboost_unknown_boost(self): """ undo a boost """ activity = { "type": "Undo", diff --git a/bookwyrm/tests/views/inbox/test_inbox_follow.py b/bookwyrm/tests/views/inbox/test_inbox_follow.py index c549c31bd..b0177cb88 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_follow.py +++ b/bookwyrm/tests/views/inbox/test_inbox_follow.py @@ -1,4 +1,5 @@ """ tests incoming activities""" +import json from unittest.mock import patch from django.test import TestCase @@ -34,7 +35,7 @@ class InboxRelationships(TestCase): models.SiteSettings.objects.create() - def test_handle_follow(self): + def test_follow(self): """ remote user wants to follow local user """ activity = { "@context": "https://www.w3.org/ns/activitystreams", @@ -48,6 +49,8 @@ class InboxRelationships(TestCase): with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") as mock: views.inbox.activity_task(activity) self.assertEqual(mock.call_count, 1) + response_activity = json.loads(mock.call_args[0][1]) + self.assertEqual(response_activity["type"], "Accept") # notification created notification = models.Notification.objects.get() @@ -61,7 +64,34 @@ class InboxRelationships(TestCase): follow = models.UserFollows.objects.get(user_object=self.local_user) self.assertEqual(follow.user_subject, self.remote_user) - def test_handle_follow_manually_approved(self): + def test_follow_duplicate(self): + """ remote user wants to follow local user twice """ + activity = { + "@context": "https://www.w3.org/ns/activitystreams", + "id": "https://example.com/users/rat/follows/123", + "type": "Follow", + "actor": "https://example.com/users/rat", + "object": "https://example.com/user/mouse", + } + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): + views.inbox.activity_task(activity) + + # the follow relationship should exist + follow = models.UserFollows.objects.get(user_object=self.local_user) + self.assertEqual(follow.user_subject, self.remote_user) + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") as mock: + views.inbox.activity_task(activity) + self.assertEqual(mock.call_count, 1) + response_activity = json.loads(mock.call_args[0][1]) + self.assertEqual(response_activity["type"], "Accept") + + # the follow relationship should STILL exist + follow = models.UserFollows.objects.get(user_object=self.local_user) + self.assertEqual(follow.user_subject, self.remote_user) + + def test_follow_manually_approved(self): """ needs approval before following """ activity = { "@context": "https://www.w3.org/ns/activitystreams", @@ -91,7 +121,7 @@ class InboxRelationships(TestCase): follow = models.UserFollows.objects.all() self.assertEqual(list(follow), []) - def test_handle_undo_follow_request(self): + def test_undo_follow_request(self): """ the requester cancels a follow request """ self.local_user.manually_approves_followers = True self.local_user.save(broadcast=False) @@ -121,7 +151,7 @@ class InboxRelationships(TestCase): self.assertFalse(self.local_user.follower_requests.exists()) - def test_handle_unfollow(self): + def test_unfollow(self): """ remove a relationship """ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): rel = models.UserFollows.objects.create( @@ -146,7 +176,7 @@ class InboxRelationships(TestCase): views.inbox.activity_task(activity) self.assertIsNone(self.local_user.followers.first()) - def test_handle_follow_accept(self): + def test_follow_accept(self): """ a remote user approved a follow request from local """ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): rel = models.UserFollowRequest.objects.create( @@ -177,7 +207,7 @@ class InboxRelationships(TestCase): self.assertEqual(follows.count(), 1) self.assertEqual(follows.first(), self.local_user) - def test_handle_follow_reject(self): + def test_follow_reject(self): """ turn down a follow request """ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): rel = models.UserFollowRequest.objects.create( diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index 012343e78..5681ec882 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -23,6 +23,16 @@ class InboxUpdate(TestCase): ) self.local_user.remote_id = "https://example.com/user/mouse" self.local_user.save(broadcast=False) + with patch("bookwyrm.models.user.set_remote_server.delay"): + self.remote_user = models.User.objects.create_user( + "rat", + "rat@rat.com", + "ratword", + local=False, + remote_id="https://example.com/users/rat", + inbox="https://example.com/users/rat/inbox", + outbox="https://example.com/users/rat/outbox", + ) self.create_json = { "id": "hi", @@ -34,7 +44,7 @@ class InboxUpdate(TestCase): } models.SiteSettings.objects.create() - def test_handle_update_list(self): + def test_update_list(self): """ a new list """ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): book_list = models.List.objects.create( @@ -68,16 +78,24 @@ class InboxUpdate(TestCase): self.assertEqual(book_list.description, "summary text") self.assertEqual(book_list.remote_id, "https://example.com/list/22") - def test_handle_update_user(self): + def test_update_user(self): """ update an existing user """ - # we only do this with remote users - self.local_user.local = False - self.local_user.save() + models.UserFollows.objects.create( + user_subject=self.local_user, + user_object=self.remote_user, + ) + models.UserFollows.objects.create( + user_subject=self.remote_user, + user_object=self.local_user, + ) + self.assertTrue(self.remote_user in self.local_user.followers.all()) + self.assertTrue(self.local_user in self.remote_user.followers.all()) - datafile = pathlib.Path(__file__).parent.joinpath("../../data/ap_user.json") + datafile = pathlib.Path(__file__).parent.joinpath("../../data/ap_user_rat.json") userdata = json.loads(datafile.read_bytes()) del userdata["icon"] - self.assertIsNone(self.local_user.name) + self.assertIsNone(self.remote_user.name) + self.assertFalse(self.remote_user.discoverable) views.inbox.activity_task( { "type": "Update", @@ -88,13 +106,16 @@ class InboxUpdate(TestCase): "object": userdata, } ) - user = models.User.objects.get(id=self.local_user.id) - self.assertEqual(user.name, "MOUSE?? MOUSE!!") - self.assertEqual(user.username, "mouse@example.com") - self.assertEqual(user.localname, "mouse") + user = models.User.objects.get(id=self.remote_user.id) + self.assertEqual(user.name, "RAT???") + self.assertEqual(user.username, "rat@example.com") self.assertTrue(user.discoverable) - def test_handle_update_edition(self): + # make sure relationships aren't disrupted + self.assertTrue(self.remote_user in self.local_user.followers.all()) + self.assertTrue(self.local_user in self.remote_user.followers.all()) + + def test_update_edition(self): """ update an existing edition """ datafile = pathlib.Path(__file__).parent.joinpath("../../data/bw_edition.json") bookdata = json.loads(datafile.read_bytes()) @@ -122,8 +143,9 @@ class InboxUpdate(TestCase): ) book = models.Edition.objects.get(id=book.id) self.assertEqual(book.title, "Piranesi") + self.assertEqual(book.last_edited_by, self.remote_user) - def test_handle_update_work(self): + def test_update_work(self): """ update an existing edition """ datafile = pathlib.Path(__file__).parent.joinpath("../../data/bw_work.json") bookdata = json.loads(datafile.read_bytes()) diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py index 8d2c63ffc..f767edfaa 100644 --- a/bookwyrm/tests/views/test_interaction.py +++ b/bookwyrm/tests/views/test_interaction.py @@ -1,4 +1,5 @@ """ test for app action functionality """ +import json from unittest.mock import patch from django.test import TestCase from django.test.client import RequestFactory @@ -39,7 +40,7 @@ class InteractionViews(TestCase): parent_work=work, ) - def test_handle_favorite(self, _): + def test_favorite(self, _): """ create and broadcast faving a status """ view = views.Favorite.as_view() request = self.factory.post("") @@ -57,7 +58,7 @@ class InteractionViews(TestCase): self.assertEqual(notification.user, self.local_user) self.assertEqual(notification.related_user, self.remote_user) - def test_handle_unfavorite(self, _): + def test_unfavorite(self, _): """ unfav a status """ view = views.Unfavorite.as_view() request = self.factory.post("") @@ -74,7 +75,7 @@ class InteractionViews(TestCase): self.assertEqual(models.Favorite.objects.count(), 0) self.assertEqual(models.Notification.objects.count(), 0) - def test_handle_boost(self, _): + def test_boost(self, _): """ boost a status """ view = views.Boost.as_view() request = self.factory.post("") @@ -85,6 +86,7 @@ class InteractionViews(TestCase): view(request, status.id) boost = models.Boost.objects.get() + self.assertEqual(boost.boosted_status, status) self.assertEqual(boost.user, self.remote_user) self.assertEqual(boost.privacy, "public") @@ -95,7 +97,7 @@ class InteractionViews(TestCase): self.assertEqual(notification.related_user, self.remote_user) self.assertEqual(notification.related_status, status) - def test_handle_self_boost(self, _): + def test_self_boost(self, _): """ boost your own status """ view = views.Boost.as_view() request = self.factory.post("") @@ -103,7 +105,14 @@ class InteractionViews(TestCase): with patch("bookwyrm.activitystreams.ActivityStream.add_status"): status = models.Status.objects.create(user=self.local_user, content="hi") - view(request, status.id) + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.delay" + ) as broadcast_mock: + view(request, status.id) + + self.assertEqual(broadcast_mock.call_count, 1) + activity = json.loads(broadcast_mock.call_args[0][1]) + self.assertEqual(activity["type"], "Announce") boost = models.Boost.objects.get() self.assertEqual(boost.boosted_status, status) @@ -112,7 +121,7 @@ class InteractionViews(TestCase): self.assertFalse(models.Notification.objects.exists()) - def test_handle_boost_unlisted(self, _): + def test_boost_unlisted(self, _): """ boost a status """ view = views.Boost.as_view() request = self.factory.post("") @@ -127,7 +136,7 @@ class InteractionViews(TestCase): boost = models.Boost.objects.get() self.assertEqual(boost.privacy, "unlisted") - def test_handle_boost_private(self, _): + def test_boost_private(self, _): """ boost a status """ view = views.Boost.as_view() request = self.factory.post("") @@ -140,7 +149,7 @@ class InteractionViews(TestCase): view(request, status.id) self.assertFalse(models.Boost.objects.exists()) - def test_handle_boost_twice(self, _): + def test_boost_twice(self, _): """ boost a status """ view = views.Boost.as_view() request = self.factory.post("") @@ -152,7 +161,7 @@ class InteractionViews(TestCase): view(request, status.id) self.assertEqual(models.Boost.objects.count(), 1) - def test_handle_unboost(self, _): + def test_unboost(self, _): """ undo a boost """ view = views.Unboost.as_view() request = self.factory.post("") diff --git a/bookwyrm/tests/views/test_tag.py b/bookwyrm/tests/views/test_tag.py deleted file mode 100644 index 6ad6ab254..000000000 --- a/bookwyrm/tests/views/test_tag.py +++ /dev/null @@ -1,119 +0,0 @@ -""" test for app action functionality """ -from unittest.mock import patch -from django.contrib.auth.models import Group, Permission -from django.contrib.contenttypes.models import ContentType -from django.template.response import TemplateResponse -from django.test import TestCase -from django.test.client import RequestFactory - -from bookwyrm import models, views -from bookwyrm.activitypub import ActivitypubResponse - - -class TagViews(TestCase): - """ tag views""" - - def setUp(self): - """ we need basic test data and mocks """ - self.factory = RequestFactory() - 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.group = Group.objects.create(name="editor") - self.group.permissions.add( - Permission.objects.create( - name="edit_book", - codename="edit_book", - content_type=ContentType.objects.get_for_model(models.User), - ).id - ) - self.work = models.Work.objects.create(title="Test Work") - self.book = models.Edition.objects.create( - title="Example Edition", - remote_id="https://example.com/book/1", - parent_work=self.work, - ) - models.SiteSettings.objects.create() - - def test_tag_page(self): - """ there are so many views, this just makes sure it LOADS """ - view = views.Tag.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - tag = models.Tag.objects.create(name="hi there") - models.UserTag.objects.create(tag=tag, user=self.local_user, book=self.book) - request = self.factory.get("") - with patch("bookwyrm.views.tag.is_api_request") as is_api: - is_api.return_value = False - result = view(request, tag.identifier) - self.assertIsInstance(result, TemplateResponse) - result.render() - self.assertEqual(result.status_code, 200) - - request = self.factory.get("") - with patch("bookwyrm.views.tag.is_api_request") as is_api: - is_api.return_value = True - result = view(request, tag.identifier) - self.assertIsInstance(result, ActivitypubResponse) - self.assertEqual(result.status_code, 200) - - def test_tag_page_activitypub_page(self): - """ there are so many views, this just makes sure it LOADS """ - view = views.Tag.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - tag = models.Tag.objects.create(name="hi there") - models.UserTag.objects.create(tag=tag, user=self.local_user, book=self.book) - request = self.factory.get("", {"page": 1}) - with patch("bookwyrm.views.tag.is_api_request") as is_api: - is_api.return_value = True - result = view(request, tag.identifier) - self.assertIsInstance(result, ActivitypubResponse) - self.assertEqual(result.status_code, 200) - - def test_tag(self): - """ add a tag to a book """ - view = views.AddTag.as_view() - request = self.factory.post( - "", - { - "name": "A Tag!?", - "book": self.book.id, - }, - ) - request.user = self.local_user - - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - view(request) - - tag = models.Tag.objects.get() - user_tag = models.UserTag.objects.get() - self.assertEqual(tag.name, "A Tag!?") - self.assertEqual(tag.identifier, "A+Tag%21%3F") - self.assertEqual(user_tag.user, self.local_user) - self.assertEqual(user_tag.book, self.book) - - def test_untag(self): - """ remove a tag from a book """ - view = views.RemoveTag.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - tag = models.Tag.objects.create(name="A Tag!?") - models.UserTag.objects.create(user=self.local_user, book=self.book, tag=tag) - request = self.factory.post( - "", - { - "user": self.local_user.id, - "book": self.book.id, - "name": tag.name, - }, - ) - request.user = self.local_user - - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - view(request) - - self.assertTrue(models.Tag.objects.filter(name="A Tag!?").exists()) - self.assertFalse(models.UserTag.objects.exists()) diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 8c5266a6e..3ad064b23 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -277,11 +277,6 @@ urlpatterns = [ # author re_path(r"^author/(?P\d+)(.json)?/?$", views.Author.as_view()), re_path(r"^author/(?P\d+)/edit/?$", views.EditAuthor.as_view()), - # tags - re_path(r"^tag/(?P.+)\.json/?$", views.Tag.as_view()), - re_path(r"^tag/(?P.+)/?$", views.Tag.as_view()), - re_path(r"^tag/?$", views.AddTag.as_view()), - re_path(r"^untag/?$", views.RemoveTag.as_view()), # reading progress re_path(r"^edit-readthrough/?$", views.edit_readthrough, name="edit-readthrough"), re_path(r"^delete-readthrough/?$", views.delete_readthrough), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index c0f35ba81..bcd914e10 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -34,7 +34,6 @@ from .shelf import create_shelf, delete_shelf from .shelf import shelve, unshelve from .site import Site from .status import CreateStatus, DeleteStatus, DeleteAndRedraft -from .tag import Tag, AddTag, RemoveTag from .updates import get_notification_count, get_unread_status_count from .user import User, EditUser, Followers, Following from .user_admin import UserAdmin, UserAdminList diff --git a/bookwyrm/views/books.py b/bookwyrm/views/books.py index 0c61d1a20..34ebe0b68 100644 --- a/bookwyrm/views/books.py +++ b/bookwyrm/views/books.py @@ -57,12 +57,7 @@ class Book(View): ) reviews_page = paginated.get_page(request.GET.get("page")) - user_tags = readthroughs = user_shelves = other_edition_shelves = [] if request.user.is_authenticated: - user_tags = models.UserTag.objects.filter( - book=book, user=request.user - ).values_list("tag__identifier", flat=True) - readthroughs = models.ReadThrough.objects.filter( user=request.user, book=book, @@ -87,11 +82,9 @@ class Book(View): "review_count": reviews.count(), "ratings": reviews.filter(Q(content__isnull=True) | Q(content="")), "rating": reviews.aggregate(Avg("rating"))["rating__avg"], - "tags": models.UserTag.objects.filter(book=book), "lists": privacy_filter( request.user, book.list_set.filter(listitem__approved=True) ), - "user_tags": user_tags, "user_shelves": user_shelves, "other_edition_shelves": other_edition_shelves, "readthroughs": readthroughs, diff --git a/bookwyrm/views/tag.py b/bookwyrm/views/tag.py deleted file mode 100644 index a6bdf05a2..000000000 --- a/bookwyrm/views/tag.py +++ /dev/null @@ -1,73 +0,0 @@ -""" tagging views""" -from django.contrib.auth.decorators import login_required -from django.shortcuts import get_object_or_404, redirect -from django.template.response import TemplateResponse -from django.utils.decorators import method_decorator -from django.views import View - -from bookwyrm import models -from bookwyrm.activitypub import ActivitypubResponse -from .helpers import is_api_request - - -# pylint: disable= no-self-use -class Tag(View): - """ tag page """ - - def get(self, request, tag_id): - """ see books related to a tag """ - tag_obj = get_object_or_404(models.Tag, identifier=tag_id) - - if is_api_request(request): - return ActivitypubResponse(tag_obj.to_activity(**request.GET)) - - books = models.Edition.objects.filter( - usertag__tag__identifier=tag_id - ).distinct() - data = { - "books": books, - "tag": tag_obj, - } - return TemplateResponse(request, "tag.html", data) - - -@method_decorator(login_required, name="dispatch") -class AddTag(View): - """ add a tag to a book """ - - def post(self, request): - """ tag a book """ - # I'm not using a form here because sometimes "name" is sent as a hidden - # field which doesn't validate - name = request.POST.get("name") - book_id = request.POST.get("book") - book = get_object_or_404(models.Edition, id=book_id) - tag_obj, _ = models.Tag.objects.get_or_create( - name=name, - ) - models.UserTag.objects.get_or_create( - user=request.user, - book=book, - tag=tag_obj, - ) - - return redirect("/book/%s" % book_id) - - -@method_decorator(login_required, name="dispatch") -class RemoveTag(View): - """ remove a user's tag from a book """ - - def post(self, request): - """ untag a book """ - name = request.POST.get("name") - tag_obj = get_object_or_404(models.Tag, name=name) - book_id = request.POST.get("book") - book = get_object_or_404(models.Edition, id=book_id) - - user_tag = get_object_or_404( - models.UserTag, tag=tag_obj, book=book, user=request.user - ) - user_tag.delete() - - return redirect("/book/%s" % book_id) diff --git a/bw-dev b/bw-dev index 42fb4a2e7..c2b63bc17 100755 --- a/bw-dev +++ b/bw-dev @@ -90,10 +90,10 @@ case "$CMD" in runweb python manage.py collectstatic --no-input ;; makemessages) - runweb django-admin makemessages --no-wrap --ignore=venv3 $@ + runweb django-admin makemessages --no-wrap --ignore=venv $@ ;; compilemessages) - runweb django-admin compilemessages --ignore venv3 $@ + runweb django-admin compilemessages --ignore venv $@ ;; build) docker-compose build diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo index d42d83945..e2498fda1 100644 Binary files a/locale/es/LC_MESSAGES/django.mo and b/locale/es/LC_MESSAGES/django.mo differ diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 159e806ab..97aa4da3f 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-11 01:59+0000\n" +"POT-Creation-Date: 2021-04-22 15:55+0000\n" "PO-Revision-Date: 2021-03-19 11:49+0800\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,62 +18,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: bookwyrm/forms.py:226 -#, fuzzy -#| msgid "A user with that username already exists." +#: bookwyrm/forms.py:232 msgid "A user with this email already exists." -msgstr "Ya existe un usuario con ese nombre." +msgstr "Ya existe un usuario con ese correo electrónico." -#: bookwyrm/forms.py:240 +#: bookwyrm/forms.py:246 msgid "One Day" msgstr "Un día" -#: bookwyrm/forms.py:241 +#: bookwyrm/forms.py:247 msgid "One Week" msgstr "Una semana" -#: bookwyrm/forms.py:242 +#: bookwyrm/forms.py:248 msgid "One Month" msgstr "Un mes" -#: bookwyrm/forms.py:243 +#: bookwyrm/forms.py:249 msgid "Does Not Expire" msgstr "Nunca se vence" -#: bookwyrm/forms.py:248 +#: bookwyrm/forms.py:254 #, python-format msgid "%(count)d uses" msgstr "%(count)d usos" -#: bookwyrm/forms.py:251 +#: bookwyrm/forms.py:257 msgid "Unlimited" msgstr "Sin límite" -#: bookwyrm/forms.py:289 +#: bookwyrm/forms.py:301 msgid "List Order" msgstr "Orden de la lista" -#: bookwyrm/forms.py:290 -#| msgid "Title" +#: bookwyrm/forms.py:302 msgid "Book Title" msgstr "Título" -#: bookwyrm/forms.py:291 bookwyrm/templates/snippets/create_status_form.html:29 +#: bookwyrm/forms.py:303 bookwyrm/templates/snippets/create_status_form.html:31 #: bookwyrm/templates/user/shelf.html:81 msgid "Rating" msgstr "Calificación" -#: bookwyrm/forms.py:293 bookwyrm/templates/lists/list.html:105 +#: bookwyrm/forms.py:305 bookwyrm/templates/lists/list.html:72 msgid "Sort By" msgstr "Ordenar por" -#: bookwyrm/forms.py:297 -#| msgid "Started reading" +#: bookwyrm/forms.py:309 msgid "Ascending" msgstr "Ascendente" -#: bookwyrm/forms.py:298 -#| msgid "Started reading" +#: bookwyrm/forms.py:310 msgid "Descending" msgstr "Descendente" @@ -87,7 +82,7 @@ msgstr "%(value)s no es un remote_id válido" msgid "%(value)s is not a valid username" msgstr "%(value)s no es un usuario válido" -#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:152 +#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:153 msgid "username" msgstr "nombre de usuario" @@ -95,23 +90,23 @@ msgstr "nombre de usuario" msgid "A user with that username already exists." msgstr "Ya existe un usuario con ese nombre." -#: bookwyrm/settings.py:150 +#: bookwyrm/settings.py:152 msgid "English" msgstr "Inglés" -#: bookwyrm/settings.py:151 +#: bookwyrm/settings.py:153 msgid "German" msgstr "Aléman" -#: bookwyrm/settings.py:152 +#: bookwyrm/settings.py:154 msgid "Spanish" msgstr "Español" -#: bookwyrm/settings.py:153 +#: bookwyrm/settings.py:155 msgid "French" msgstr "Francés" -#: bookwyrm/settings.py:154 +#: bookwyrm/settings.py:156 msgid "Simplified Chinese" msgstr "Chino simplificado" @@ -148,79 +143,67 @@ msgstr "Wikipedia" msgid "Books by %(name)s" msgstr "Libros de %(name)s" -#: bookwyrm/templates/book/book.html:21 +#: bookwyrm/templates/book/book.html:33 #: bookwyrm/templates/discover/large-book.html:12 #: bookwyrm/templates/discover/small-book.html:9 msgid "by" msgstr "por" -#: bookwyrm/templates/book/book.html:29 bookwyrm/templates/book/book.html:30 +#: bookwyrm/templates/book/book.html:41 bookwyrm/templates/book/book.html:42 msgid "Edit Book" msgstr "Editar Libro" -#: bookwyrm/templates/book/book.html:49 +#: bookwyrm/templates/book/book.html:61 #: bookwyrm/templates/book/cover_modal.html:5 msgid "Add cover" msgstr "Agregar portada" -#: bookwyrm/templates/book/book.html:53 -#, fuzzy -#| msgid "Failed to load" +#: bookwyrm/templates/book/book.html:65 msgid "Failed to load cover" -msgstr "Se falló a cargar" +msgstr "No se pudo cargar la portada" -#: bookwyrm/templates/book/book.html:62 -msgid "ISBN:" -msgstr "ISBN:" - -#: bookwyrm/templates/book/book.html:69 -#: bookwyrm/templates/book/edit_book.html:223 -msgid "OCLC Number:" -msgstr "Número OCLC:" - -#: bookwyrm/templates/book/book.html:76 -#: bookwyrm/templates/book/edit_book.html:227 -msgid "ASIN:" -msgstr "ASIN:" - -#: bookwyrm/templates/book/book.html:85 +#: bookwyrm/templates/book/book.html:82 msgid "View on OpenLibrary" msgstr "Ver en OpenLibrary" -#: bookwyrm/templates/book/book.html:94 +#: bookwyrm/templates/book/book.html:102 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "(%(review_count)s reseña)" msgstr[1] "(%(review_count)s reseñas)" -#: bookwyrm/templates/book/book.html:100 +#: bookwyrm/templates/book/book.html:114 msgid "Add Description" msgstr "Agregar descripción" -#: bookwyrm/templates/book/book.html:107 +#: bookwyrm/templates/book/book.html:121 #: bookwyrm/templates/book/edit_book.html:107 #: bookwyrm/templates/lists/form.html:12 msgid "Description:" msgstr "Descripción:" -#: bookwyrm/templates/book/book.html:111 -#: bookwyrm/templates/book/edit_book.html:237 +#: bookwyrm/templates/book/book.html:125 +#: bookwyrm/templates/book/edit_book.html:240 #: bookwyrm/templates/edit_author.html:78 bookwyrm/templates/lists/form.html:42 #: bookwyrm/templates/preferences/edit_user.html:70 +#: bookwyrm/templates/settings/edit_server.html:68 +#: bookwyrm/templates/settings/federated_server.html:93 #: bookwyrm/templates/settings/site.html:93 #: bookwyrm/templates/snippets/readthrough.html:75 #: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:42 #: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:34 +#: bookwyrm/templates/user_admin/user_moderation_actions.html:38 msgid "Save" msgstr "Guardar" -#: bookwyrm/templates/book/book.html:112 bookwyrm/templates/book/book.html:161 +#: bookwyrm/templates/book/book.html:126 bookwyrm/templates/book/book.html:175 #: bookwyrm/templates/book/cover_modal.html:32 -#: bookwyrm/templates/book/edit_book.html:238 +#: bookwyrm/templates/book/edit_book.html:241 #: bookwyrm/templates/edit_author.html:79 -#: bookwyrm/templates/moderation/report_modal.html:32 +#: bookwyrm/templates/moderation/report_modal.html:34 +#: bookwyrm/templates/settings/federated_server.html:94 #: bookwyrm/templates/snippets/delete_readthrough_modal.html:17 #: bookwyrm/templates/snippets/goal_form.html:32 #: bookwyrm/templates/snippets/readthrough.html:76 @@ -231,91 +214,98 @@ msgstr "Guardar" msgid "Cancel" msgstr "Cancelar" -#: bookwyrm/templates/book/book.html:121 +#: bookwyrm/templates/book/book.html:135 #, python-format msgid "%(count)s editions" msgstr "%(count)s ediciones" -#: bookwyrm/templates/book/book.html:129 +#: bookwyrm/templates/book/book.html:143 #, python-format msgid "This edition is on your %(shelf_name)s shelf." msgstr "Esta edición está en tu %(shelf_name)s estante." -#: bookwyrm/templates/book/book.html:135 +#: bookwyrm/templates/book/book.html:149 #, python-format msgid "A different edition of this book is on your %(shelf_name)s shelf." msgstr "Una edición diferente de este libro está en tu %(shelf_name)s estante." -#: bookwyrm/templates/book/book.html:144 +#: bookwyrm/templates/book/book.html:158 msgid "Your reading activity" msgstr "Tu actividad de lectura" -#: bookwyrm/templates/book/book.html:146 +#: bookwyrm/templates/book/book.html:160 msgid "Add read dates" msgstr "Agregar fechas de lectura" -#: bookwyrm/templates/book/book.html:151 +#: bookwyrm/templates/book/book.html:165 msgid "You don't have any reading activity for this book." msgstr "No tienes ninguna actividad de lectura para este libro." -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:172 msgid "Create" msgstr "Crear" -#: bookwyrm/templates/book/book.html:180 +#: bookwyrm/templates/book/book.html:194 msgid "Subjects" msgstr "Sujetos" -#: bookwyrm/templates/book/book.html:191 +#: bookwyrm/templates/book/book.html:206 msgid "Places" msgstr "Lugares" -#: bookwyrm/templates/book/book.html:202 bookwyrm/templates/layout.html:64 +#: bookwyrm/templates/book/book.html:217 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search_results.html:91 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listas" -#: bookwyrm/templates/book/book.html:213 -#, fuzzy -#| msgid "Go to list" +#: bookwyrm/templates/book/book.html:228 msgid "Add to list" -msgstr "Irse a lista" +msgstr "Agregar a lista" -#: bookwyrm/templates/book/book.html:223 +#: bookwyrm/templates/book/book.html:238 #: bookwyrm/templates/book/cover_modal.html:31 -#: bookwyrm/templates/lists/list.html:156 +#: bookwyrm/templates/lists/list.html:123 msgid "Add" msgstr "Agregar" -#: bookwyrm/templates/book/book.html:251 +#: bookwyrm/templates/book/book.html:276 msgid "rated it" msgstr "lo calificó con" +#: bookwyrm/templates/book/book_identifiers.html:8 +msgid "ISBN:" +msgstr "ISBN:" + +#: bookwyrm/templates/book/book_identifiers.html:15 +#: bookwyrm/templates/book/edit_book.html:226 +msgid "OCLC Number:" +msgstr "Número OCLC:" + +#: bookwyrm/templates/book/book_identifiers.html:22 +#: bookwyrm/templates/book/edit_book.html:230 +msgid "ASIN:" +msgstr "ASIN:" + #: bookwyrm/templates/book/cover_modal.html:17 -#: bookwyrm/templates/book/edit_book.html:175 -#, fuzzy -#| msgid "Add cover" +#: bookwyrm/templates/book/edit_book.html:178 msgid "Upload cover:" -msgstr "Agregar portada" +msgstr "Subir portada:" #: bookwyrm/templates/book/cover_modal.html:23 -#: bookwyrm/templates/book/edit_book.html:181 +#: bookwyrm/templates/book/edit_book.html:184 msgid "Load cover from url:" -msgstr "" +msgstr "Agregar portada de url:" #: bookwyrm/templates/book/edit_book.html:5 #: bookwyrm/templates/book/edit_book.html:11 -#, fuzzy, python-format -#| msgid "Editions of %(book_title)s" +#, python-format msgid "Edit \"%(book_title)s\"" -msgstr "Ediciones de %(book_title)s" +msgstr "Editar \"%(book_title)s\"" #: bookwyrm/templates/book/edit_book.html:5 #: bookwyrm/templates/book/edit_book.html:13 -#, fuzzy -#| msgid "Add Books" msgid "Add Book" msgstr "Agregar libro" @@ -336,35 +326,34 @@ msgstr "Editado más recientemente por:" #: bookwyrm/templates/book/edit_book.html:40 msgid "Confirm Book Info" -msgstr "" +msgstr "Confirmar información de libro" #: bookwyrm/templates/book/edit_book.html:47 #, python-format msgid "Is \"%(name)s\" an existing author?" -msgstr "" +msgstr "¿Es \"%(name)s\" un autor ya existente?" #: bookwyrm/templates/book/edit_book.html:52 -#, fuzzy, python-format -#| msgid "Start \"%(book_title)s\"" +#, python-format msgid "Author of %(book_title)s" -msgstr "Empezar \"%(book_title)s\"" +msgstr "Autor de %(book_title)s" #: bookwyrm/templates/book/edit_book.html:55 msgid "This is a new author" -msgstr "" +msgstr "Este es un autor nuevo" #: bookwyrm/templates/book/edit_book.html:61 #, python-format msgid "Creating a new author: %(name)s" -msgstr "" +msgstr "Creando un autor nuevo: %(name)s" #: bookwyrm/templates/book/edit_book.html:67 msgid "Is this an edition of an existing work?" -msgstr "" +msgstr "¿Es esta una edición de una obra ya existente?" #: bookwyrm/templates/book/edit_book.html:71 msgid "This is a new work" -msgstr "" +msgstr "Esta es una obra nueva" #: bookwyrm/templates/book/edit_book.html:77 #: bookwyrm/templates/password_reset.html:30 @@ -389,85 +378,78 @@ msgstr "Título:" msgid "Subtitle:" msgstr "Subtítulo:" -#: bookwyrm/templates/book/edit_book.html:112 +#: bookwyrm/templates/book/edit_book.html:113 msgid "Series:" msgstr "Serie:" -#: bookwyrm/templates/book/edit_book.html:117 +#: bookwyrm/templates/book/edit_book.html:120 msgid "Series number:" msgstr "Número de serie:" -#: bookwyrm/templates/book/edit_book.html:123 -#, fuzzy -#| msgid "Published" +#: bookwyrm/templates/book/edit_book.html:126 msgid "Publisher:" -msgstr "Publicado" +msgstr "Editorial:" -#: bookwyrm/templates/book/edit_book.html:125 +#: bookwyrm/templates/book/edit_book.html:128 msgid "Separate multiple publishers with commas." -msgstr "" +msgstr "Separar varios editores con comas." -#: bookwyrm/templates/book/edit_book.html:132 +#: bookwyrm/templates/book/edit_book.html:135 msgid "First published date:" msgstr "Fecha de primera publicación:" -#: bookwyrm/templates/book/edit_book.html:140 +#: bookwyrm/templates/book/edit_book.html:143 msgid "Published date:" msgstr "Fecha de publicación:" -#: bookwyrm/templates/book/edit_book.html:149 -#, fuzzy -#| msgid "Author" +#: bookwyrm/templates/book/edit_book.html:152 msgid "Authors" -msgstr "Autor/Autora" +msgstr "Autores" -#: bookwyrm/templates/book/edit_book.html:155 -#, fuzzy, python-format -#| msgid "Added by %(username)s" +#: bookwyrm/templates/book/edit_book.html:158 +#, python-format msgid "Remove %(name)s" -msgstr "Agregado por %(username)s" +msgstr "Eliminar %(name)s" -#: bookwyrm/templates/book/edit_book.html:160 -#, fuzzy -#| msgid "Edit Author" +#: bookwyrm/templates/book/edit_book.html:163 msgid "Add Authors:" -msgstr "Editar Autor/Autora" +msgstr "Agregar Autores:" -#: bookwyrm/templates/book/edit_book.html:161 +#: bookwyrm/templates/book/edit_book.html:164 msgid "John Doe, Jane Smith" -msgstr "" +msgstr "Juan Nadie, Natalia Natalia" -#: bookwyrm/templates/book/edit_book.html:167 +#: bookwyrm/templates/book/edit_book.html:170 #: bookwyrm/templates/user/shelf.html:75 msgid "Cover" msgstr "Portada:" -#: bookwyrm/templates/book/edit_book.html:194 +#: bookwyrm/templates/book/edit_book.html:197 msgid "Physical Properties" msgstr "Propiedades físicas:" -#: bookwyrm/templates/book/edit_book.html:195 +#: bookwyrm/templates/book/edit_book.html:198 #: bookwyrm/templates/book/format_filter.html:5 msgid "Format:" msgstr "Formato:" -#: bookwyrm/templates/book/edit_book.html:203 +#: bookwyrm/templates/book/edit_book.html:206 msgid "Pages:" msgstr "Páginas:" -#: bookwyrm/templates/book/edit_book.html:210 +#: bookwyrm/templates/book/edit_book.html:213 msgid "Book Identifiers" msgstr "Identificadores de libro" -#: bookwyrm/templates/book/edit_book.html:211 +#: bookwyrm/templates/book/edit_book.html:214 msgid "ISBN 13:" msgstr "ISBN 13:" -#: bookwyrm/templates/book/edit_book.html:215 +#: bookwyrm/templates/book/edit_book.html:218 msgid "ISBN 10:" msgstr "ISBN 10:" -#: bookwyrm/templates/book/edit_book.html:219 +#: bookwyrm/templates/book/edit_book.html:222 #: bookwyrm/templates/edit_author.html:59 msgid "Openlibrary key:" msgstr "Clave OpenLibrary:" @@ -485,43 +467,46 @@ msgstr "Ediciones de \"%(work_title)s\"" #: bookwyrm/templates/book/format_filter.html:8 #: bookwyrm/templates/book/language_filter.html:8 msgid "Any" -msgstr "" +msgstr "Cualquier" #: bookwyrm/templates/book/language_filter.html:5 msgid "Language:" -msgstr "" +msgstr "Idioma:" -#: bookwyrm/templates/book/publisher_info.html:6 +#: bookwyrm/templates/book/publisher_info.html:22 +#, python-format +msgid "%(format)s" +msgstr "%(format)s" + +#: bookwyrm/templates/book/publisher_info.html:24 #, python-format msgid "%(format)s, %(pages)s pages" msgstr "%(format)s, %(pages)s páginas" -#: bookwyrm/templates/book/publisher_info.html:8 +#: bookwyrm/templates/book/publisher_info.html:26 #, python-format msgid "%(pages)s pages" msgstr "%(pages)s páginas" -#: bookwyrm/templates/book/publisher_info.html:13 -#, fuzzy, python-format -#| msgid "%(pages)s pages" +#: bookwyrm/templates/book/publisher_info.html:38 +#, python-format msgid "%(languages)s language" -msgstr "%(pages)s páginas" +msgstr "idioma %(languages)s" -#: bookwyrm/templates/book/publisher_info.html:18 +#: bookwyrm/templates/book/publisher_info.html:64 #, python-format msgid "Published %(date)s by %(publisher)s." -msgstr "" +msgstr "Publicado %(date)s por %(publisher)s." -#: bookwyrm/templates/book/publisher_info.html:20 -#, fuzzy, python-format -#| msgid "Published date:" +#: bookwyrm/templates/book/publisher_info.html:66 +#, python-format msgid "Published %(date)s" -msgstr "Fecha de publicación:" +msgstr "Publicado %(date)s" -#: bookwyrm/templates/book/publisher_info.html:22 +#: bookwyrm/templates/book/publisher_info.html:68 #, python-format msgid "Published by %(publisher)s." -msgstr "" +msgstr "Publicado por %(publisher)s." #: bookwyrm/templates/components/inline_form.html:8 #: bookwyrm/templates/components/modal.html:11 @@ -532,44 +517,35 @@ msgid "Close" msgstr "Cerrar" #: bookwyrm/templates/compose.html:5 bookwyrm/templates/compose.html:8 -#, fuzzy -#| msgid "Boost status" msgid "Compose status" -msgstr "Status de respaldo" +msgstr "Componer status" #: bookwyrm/templates/directory/community_filter.html:5 -#, fuzzy -#| msgid "Comment" msgid "Community" -msgstr "Comentario" +msgstr "Comunidad" #: bookwyrm/templates/directory/community_filter.html:8 -#, fuzzy -#| msgid "Max uses" msgid "Local users" -msgstr "Número máximo de usos" +msgstr "Usuarios locales" #: bookwyrm/templates/directory/community_filter.html:12 -#, fuzzy -#| msgid "Federated" msgid "Federated community" -msgstr "Federalizado" +msgstr "Comunidad federalizada" #: bookwyrm/templates/directory/directory.html:6 #: bookwyrm/templates/directory/directory.html:11 -#: bookwyrm/templates/layout.html:92 +#: bookwyrm/templates/layout.html:93 msgid "Directory" -msgstr "" +msgstr "Directorio" #: bookwyrm/templates/directory/directory.html:19 msgid "Make your profile discoverable to other BookWyrm users." -msgstr "" +msgstr "Haz que tu perfil sea reconocible a otros usarios de BookWyrm." #: bookwyrm/templates/directory/directory.html:26 -#, fuzzy, python-format -#| msgid "You can set or change your reading goal any time from your profile page" +#, python-format msgid "You can opt-out at any time in your profile settings." -msgstr "Puedes establecer o cambiar tu meta de lectura en cualquier momento que desees desde tu perfil" +msgstr "Puedes optar por no en cualquier hora en tus configuraciones de perfil." #: bookwyrm/templates/directory/directory.html:31 #: bookwyrm/templates/snippets/goal_card.html:22 @@ -577,56 +553,48 @@ msgid "Dismiss message" msgstr "Desechar mensaje" #: bookwyrm/templates/directory/directory.html:71 -#, fuzzy -#| msgid "followed you" msgid "follower you follow" msgid_plural "followers you follow" -msgstr[0] "te siguió" -msgstr[1] "te siguió" +msgstr[0] "seguidor que tu sigues" +msgstr[1] "seguidores que tu sigues" #: bookwyrm/templates/directory/directory.html:78 -#, fuzzy -#| msgid "Your shelves" msgid "book on your shelves" msgid_plural "books on your shelves" -msgstr[0] "Tus estantes" -msgstr[1] "Tus estantes" +msgstr[0] "libro en tus estantes" +msgstr[1] "libro en tus estantes" #: bookwyrm/templates/directory/directory.html:86 msgid "posts" -msgstr "" +msgstr "publicaciones" #: bookwyrm/templates/directory/directory.html:92 msgid "last active" -msgstr "" +msgstr "actividad reciente" #: bookwyrm/templates/directory/sort_filter.html:5 msgid "Order by" -msgstr "" +msgstr "Ordenar por" #: bookwyrm/templates/directory/sort_filter.html:8 -#, fuzzy -#| msgid "Suggest" msgid "Suggested" -msgstr "Sugerir" +msgstr "Sugerido" #: bookwyrm/templates/directory/sort_filter.html:9 msgid "Recently active" -msgstr "" +msgstr "Activ@ recientemente" #: bookwyrm/templates/directory/user_type_filter.html:5 -#, fuzzy -#| msgid "User Activity" msgid "User type" -msgstr "Actividad de usuario" +msgstr "Tipo de usuario" #: bookwyrm/templates/directory/user_type_filter.html:8 msgid "BookWyrm users" -msgstr "" +msgstr "Usuarios de BookWyrm" #: bookwyrm/templates/directory/user_type_filter.html:12 msgid "All known users" -msgstr "" +msgstr "Todos los usuarios conocidos" #: bookwyrm/templates/discover/about.html:7 #, python-format @@ -676,11 +644,11 @@ msgstr "Esta instancia está cerrada." #: bookwyrm/templates/discover/landing_layout.html:57 msgid "Thank you! Your request has been received." -msgstr "" +msgstr "¡Gracias! Tu solicitud ha sido recibido." #: bookwyrm/templates/discover/landing_layout.html:60 msgid "Request an Invitation" -msgstr "" +msgstr "Solicitar una invitación" #: bookwyrm/templates/discover/landing_layout.html:64 #: bookwyrm/templates/password_reset_request.html:18 @@ -690,19 +658,17 @@ msgid "Email address:" msgstr "Dirección de correo electrónico:" #: bookwyrm/templates/discover/landing_layout.html:70 -#: bookwyrm/templates/moderation/report_modal.html:31 +#: bookwyrm/templates/moderation/report_modal.html:33 msgid "Submit" -msgstr "" +msgstr "Enviar" #: bookwyrm/templates/discover/landing_layout.html:79 msgid "Your Account" msgstr "Tu cuenta" #: bookwyrm/templates/edit_author.html:5 -#, fuzzy -#| msgid "Edit Author" msgid "Edit Author:" -msgstr "Editar Autor/Autora" +msgstr "Editar Autor/Autora/Autore:" #: bookwyrm/templates/edit_author.html:32 bookwyrm/templates/lists/form.html:8 #: bookwyrm/templates/user/create_shelf_form.html:13 @@ -741,49 +707,46 @@ msgstr "Clave Goodreads:" #: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/text_layout.html:2 msgid "Hi there," -msgstr "" +msgstr "Hola, " #: bookwyrm/templates/email/html_layout.html:21 #, python-format msgid "BookWyrm hosted on %(site_name)s" -msgstr "" +msgstr "BookWyrm alojado en %(site_name)s" #: bookwyrm/templates/email/html_layout.html:23 msgid "Email preference" -msgstr "" +msgstr "Preferencia de correo electrónico" #: bookwyrm/templates/email/invite/html_content.html:6 #: bookwyrm/templates/email/invite/subject.html:2 -#, fuzzy, python-format -#| msgid "About %(site_name)s" +#, python-format msgid "You're invited to join %(site_name)s!" -msgstr "Sobre %(site_name)s" +msgstr "¡Estás invitado a unirse con %(site_name)s!" #: bookwyrm/templates/email/invite/html_content.html:9 msgid "Join Now" -msgstr "" +msgstr "Únete ahora" #: bookwyrm/templates/email/invite/html_content.html:15 #, python-format msgid "Learn more about this instance." -msgstr "" +msgstr "Aprenda más sobre esta instancia." #: bookwyrm/templates/email/invite/text_content.html:4 #, python-format msgid "You're invited to join %(site_name)s! Click the link below to create an account." -msgstr "" +msgstr "Estás invitado a unirte con %(site_name)s! Haz clic en el enlace a continuación para crear una cuenta." #: bookwyrm/templates/email/invite/text_content.html:8 -#, fuzzy -#| msgid "More about this site" msgid "Learn more about this instance:" -msgstr "Más sobre este sitio" +msgstr "Aprende más sobre esta intancia:" #: bookwyrm/templates/email/password_reset/html_content.html:6 #: bookwyrm/templates/email/password_reset/text_content.html:4 #, python-format msgid "You requested to reset your %(site_name)s password. Click the link below to set a new password and log in to your account." -msgstr "" +msgstr "Tú solicitaste reestablecer tu %(site_name)s contraseña. Haz clic en el enlace a continuación para establecer una nueva contraseña e ingresar a tu cuenta." #: bookwyrm/templates/email/password_reset/html_content.html:9 #: bookwyrm/templates/password_reset.html:4 @@ -796,13 +759,12 @@ msgstr "Restablecer contraseña" #: bookwyrm/templates/email/password_reset/html_content.html:13 #: bookwyrm/templates/email/password_reset/text_content.html:8 msgid "If you didn't request to reset your password, you can ignore this email." -msgstr "" +msgstr "Si no solicitaste reestablecer tu contraseña, puedes ignorar este mensaje." #: bookwyrm/templates/email/password_reset/subject.html:2 -#, fuzzy, python-format -#| msgid "About %(site_name)s" +#, python-format msgid "Reset your %(site_name)s password" -msgstr "Sobre %(site_name)s" +msgstr "Reestablece tu contraseña de %(site_name)s" #: bookwyrm/templates/feed/direct_messages.html:8 #, python-format @@ -810,7 +772,7 @@ msgid "Direct Messages with %(username)s" msgstr "Mensajes directos con %(username)s" #: bookwyrm/templates/feed/direct_messages.html:10 -#: bookwyrm/templates/layout.html:87 +#: bookwyrm/templates/layout.html:88 msgid "Direct Messages" msgstr "Mensajes directos" @@ -824,19 +786,15 @@ msgstr "No tienes ningún mensaje en este momento." #: bookwyrm/templates/feed/feed.html:9 msgid "Home Timeline" -msgstr "" +msgstr "Línea temporal de hogar" #: bookwyrm/templates/feed/feed.html:11 -#, fuzzy -#| msgid "%(tab_title)s Timeline" msgid "Local Timeline" -msgstr "%(tab_title)s Línea temporal" +msgstr "Línea temporal local" #: bookwyrm/templates/feed/feed.html:13 -#, fuzzy -#| msgid "Federated Servers" msgid "Federated Timeline" -msgstr "Servidores federalizados" +msgstr "Línea temporal federalizado" #: bookwyrm/templates/feed/feed.html:19 msgid "Home" @@ -847,29 +805,30 @@ msgid "Local" msgstr "Local" #: bookwyrm/templates/feed/feed.html:25 +#: bookwyrm/templates/settings/edit_server.html:40 msgid "Federated" msgstr "Federalizado" #: bookwyrm/templates/feed/feed.html:33 #, python-format msgid "load 0 unread status(es)" -msgstr "" +msgstr "cargar 0 status(es) no leídos" #: bookwyrm/templates/feed/feed.html:48 msgid "There aren't any activities right now! Try following a user to get started" -msgstr "¡No hay actividades en este momento! Sigue a otro usuario para empezar" +msgstr "¡No hay actividad ahora mismo! Sigue a otro usuario para empezar" #: bookwyrm/templates/feed/feed.html:56 #: bookwyrm/templates/get_started/users.html:6 msgid "Who to follow" -msgstr "" +msgstr "A quién seguir" #: bookwyrm/templates/feed/feed_layout.html:5 msgid "Updates" msgstr "Actualizaciones" #: bookwyrm/templates/feed/feed_layout.html:11 -#: bookwyrm/templates/layout.html:58 +#: bookwyrm/templates/layout.html:59 #: bookwyrm/templates/user/books_header.html:3 msgid "Your books" msgstr "Tus libros" @@ -892,7 +851,7 @@ msgstr "Leyendo actualmente" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:11 #: bookwyrm/templates/user/shelf.html:28 msgid "Read" -msgstr "Leer" +msgstr "Leido" #: bookwyrm/templates/feed/feed_layout.html:88 bookwyrm/templates/goal.html:26 #: bookwyrm/templates/snippets/goal_card.html:6 @@ -904,30 +863,27 @@ msgstr "%(year)s Meta de lectura" #, python-format msgid "%(mutuals)s follower you follow" msgid_plural "%(mutuals)s followers you follow" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(mutuals)s seguidor que sigues" +msgstr[1] "%(mutuals)s seguidores que sigues" #: bookwyrm/templates/feed/suggested_users.html:19 #, python-format msgid "%(shared_books)s book on your shelves" msgid_plural "%(shared_books)s books on your shelves" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(shared_books)s libro en tus estantes" +msgstr[1] "%(shared_books)s libros en tus estantes" #: bookwyrm/templates/get_started/book_preview.html:6 -#, fuzzy, python-format -#| msgid "Want to Read \"%(book_title)s\"" +#, python-format msgid "Have you read %(book_title)s?" -msgstr "Quiero leer \"%(book_title)s\"" +msgstr "¿Has leído %(book_title)s?" #: bookwyrm/templates/get_started/books.html:6 -#, fuzzy -#| msgid "Started reading" msgid "What are you reading?" -msgstr "Lectura se empezó" +msgstr "¿Qué estás leyendo?" #: bookwyrm/templates/get_started/books.html:9 -#: bookwyrm/templates/lists/list.html:124 +#: bookwyrm/templates/lists/list.html:91 msgid "Search for a book" msgstr "Buscar libros" @@ -941,77 +897,65 @@ msgstr "No se encontró ningún libro correspondiente a \"%(query)s\"" #: bookwyrm/templates/get_started/books.html:11 #, python-format msgid "You can add books when you start using %(site_name)s." -msgstr "" +msgstr "Puedes agregar libros cuando comiences a usar %(site_name)s." #: bookwyrm/templates/get_started/books.html:16 #: bookwyrm/templates/get_started/books.html:17 #: bookwyrm/templates/get_started/users.html:18 #: bookwyrm/templates/get_started/users.html:19 -#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38 -#: bookwyrm/templates/lists/list.html:128 +#: bookwyrm/templates/layout.html:38 bookwyrm/templates/layout.html:39 +#: bookwyrm/templates/lists/list.html:95 msgid "Search" msgstr "Buscar" #: bookwyrm/templates/get_started/books.html:26 -#, fuzzy -#| msgid "Suggest Books" msgid "Suggested Books" -msgstr "Sugerir libros" +msgstr "Libros sugeridos" #: bookwyrm/templates/get_started/books.html:41 -#, fuzzy, python-format -#| msgid "About %(site_name)s" +#, python-format msgid "Popular on %(site_name)s" -msgstr "Sobre %(site_name)s" +msgstr "Popular en %(site_name)s" #: bookwyrm/templates/get_started/books.html:51 -#: bookwyrm/templates/lists/list.html:141 +#: bookwyrm/templates/lists/list.html:108 msgid "No books found" msgstr "No se encontró ningún libro" #: bookwyrm/templates/get_started/books.html:54 #: bookwyrm/templates/get_started/profile.html:54 msgid "Save & continue" -msgstr "" +msgstr "Guardar & continuar" #: bookwyrm/templates/get_started/layout.html:14 -#, fuzzy, python-format -#| msgid "About %(site_name)s" +#, python-format msgid "Welcome to %(site_name)s!" -msgstr "Sobre %(site_name)s" +msgstr "¡Bienvenido a %(site_name)s!" #: bookwyrm/templates/get_started/layout.html:16 msgid "These are some first steps to get you started." -msgstr "" +msgstr "Estos son unos primeros pasos para empezar." #: bookwyrm/templates/get_started/layout.html:30 #: bookwyrm/templates/get_started/profile.html:6 -#, fuzzy -#| msgid "User Profile" msgid "Create your profile" -msgstr "Perfil de usuario" +msgstr "Crear tu perfil" #: bookwyrm/templates/get_started/layout.html:34 -#, fuzzy -#| msgid "Add Books" msgid "Add books" msgstr "Agregar libros" #: bookwyrm/templates/get_started/layout.html:38 -#, fuzzy -#| msgid "Friendly" msgid "Find friends" -msgstr "Amigable" +msgstr "Encontrar amigos" #: bookwyrm/templates/get_started/layout.html:44 msgid "Skip this step" -msgstr "" +msgstr "Saltar este paso" #: bookwyrm/templates/get_started/layout.html:48 -#, fuzzy -#| msgid "Finished" msgid "Finish" -msgstr "Terminado" +msgstr "Terminar" #: bookwyrm/templates/get_started/profile.html:15 #: bookwyrm/templates/preferences/edit_user.html:24 @@ -1025,7 +969,7 @@ msgstr "Resumen:" #: bookwyrm/templates/get_started/profile.html:23 msgid "A little bit about you" -msgstr "" +msgstr "Un poco sobre ti" #: bookwyrm/templates/get_started/profile.html:32 #: bookwyrm/templates/preferences/edit_user.html:17 @@ -1040,17 +984,15 @@ msgstr "Aprobar seguidores a mano:" #: bookwyrm/templates/get_started/profile.html:48 #: bookwyrm/templates/preferences/edit_user.html:58 msgid "Show this account in suggested users:" -msgstr "" +msgstr "Mostrar esta cuenta en los usuarios sugeridos:" #: bookwyrm/templates/get_started/profile.html:52 msgid "Your account will show up in the directory, and may be recommended to other BookWyrm users." -msgstr "" +msgstr "Tu cuenta se aparecerá en el directorio, y puede ser recomendado a otros usuarios de BookWyrm." #: bookwyrm/templates/get_started/users.html:11 -#, fuzzy -#| msgid "Search for a book or user" msgid "Search for a user" -msgstr "Buscar un libro o un usuario" +msgstr "Buscar un usuario" #: bookwyrm/templates/get_started/users.html:13 #: bookwyrm/templates/search_results.html:76 @@ -1089,19 +1031,17 @@ msgid "%(username)s's %(year)s Books" msgstr "Los libros de %(username)s para %(year)s" #: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9 -#: bookwyrm/templates/layout.html:97 +#: bookwyrm/templates/layout.html:98 msgid "Import Books" msgstr "Importar libros" #: bookwyrm/templates/import.html:16 -#, fuzzy -#| msgid "Data source" msgid "Data source:" -msgstr "Fuente de datos" +msgstr "Fuente de datos:" #: bookwyrm/templates/import.html:29 msgid "Data file:" -msgstr "" +msgstr "Archivo de datos:" #: bookwyrm/templates/import.html:37 msgid "Include reviews" @@ -1112,6 +1052,7 @@ msgid "Privacy setting for imported reviews:" msgstr "Configuración de privacidad para las reseñas importadas:" #: bookwyrm/templates/import.html:48 +#: bookwyrm/templates/settings/server_blocklist.html:64 msgid "Import" msgstr "Importar" @@ -1150,12 +1091,12 @@ msgstr "(¡Refresca para actualizar!)" #: bookwyrm/templates/import_status.html:35 msgid "Failed to load" -msgstr "Se falló a cargar" +msgstr "No se pudo cargar" #: bookwyrm/templates/import_status.html:44 #, python-format msgid "Jump to the bottom of the list to select the %(failed_count)s items which failed to import." -msgstr "" +msgstr "Saltar al final de la lista para seleccionar los %(failed_count)s artículos que no se pudieron importar." #: bookwyrm/templates/import_status.html:79 msgid "Select all" @@ -1218,100 +1159,98 @@ msgstr "Resultados de búsqueda por \"%(query)s\"" msgid "Matching Books" msgstr "Libros correspondientes" -#: bookwyrm/templates/layout.html:33 +#: bookwyrm/templates/layout.html:34 msgid "Search for a book or user" msgstr "Buscar un libro o un usuario" -#: bookwyrm/templates/layout.html:47 bookwyrm/templates/layout.html:48 +#: bookwyrm/templates/layout.html:48 bookwyrm/templates/layout.html:49 msgid "Main navigation menu" msgstr "Menú de navigación central" -#: bookwyrm/templates/layout.html:61 +#: bookwyrm/templates/layout.html:62 msgid "Feed" msgstr "Actividad" -#: bookwyrm/templates/layout.html:102 +#: bookwyrm/templates/layout.html:103 msgid "Settings" msgstr "Configuración" -#: bookwyrm/templates/layout.html:111 -#: bookwyrm/templates/settings/admin_layout.html:24 +#: bookwyrm/templates/layout.html:112 +#: bookwyrm/templates/settings/admin_layout.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:15 #: bookwyrm/templates/settings/manage_invites.html:3 #: bookwyrm/templates/settings/manage_invites.html:15 msgid "Invites" msgstr "Invitaciones" -#: bookwyrm/templates/layout.html:118 +#: bookwyrm/templates/layout.html:119 msgid "Admin" -msgstr "" +msgstr "Admin" -#: bookwyrm/templates/layout.html:125 +#: bookwyrm/templates/layout.html:126 msgid "Log out" msgstr "Cerrar sesión" -#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134 +#: bookwyrm/templates/layout.html:134 bookwyrm/templates/layout.html:135 #: bookwyrm/templates/notifications.html:6 #: bookwyrm/templates/notifications.html:10 msgid "Notifications" msgstr "Notificaciones" -#: bookwyrm/templates/layout.html:151 bookwyrm/templates/layout.html:155 +#: bookwyrm/templates/layout.html:152 bookwyrm/templates/layout.html:156 #: bookwyrm/templates/login.html:17 #: bookwyrm/templates/snippets/register_form.html:4 msgid "Username:" msgstr "Nombre de usuario:" -#: bookwyrm/templates/layout.html:156 +#: bookwyrm/templates/layout.html:157 msgid "password" msgstr "contraseña" -#: bookwyrm/templates/layout.html:157 bookwyrm/templates/login.html:36 +#: bookwyrm/templates/layout.html:158 bookwyrm/templates/login.html:36 msgid "Forgot your password?" msgstr "¿Olvidaste tu contraseña?" -#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:10 +#: bookwyrm/templates/layout.html:161 bookwyrm/templates/login.html:10 #: bookwyrm/templates/login.html:33 msgid "Log in" msgstr "Iniciar sesión" -#: bookwyrm/templates/layout.html:168 +#: bookwyrm/templates/layout.html:169 msgid "Join" -msgstr "" +msgstr "Unirse" -#: bookwyrm/templates/layout.html:191 +#: bookwyrm/templates/layout.html:195 msgid "About this server" msgstr "Sobre este servidor" -#: bookwyrm/templates/layout.html:195 +#: bookwyrm/templates/layout.html:199 msgid "Contact site admin" msgstr "Contactarse con administradores del sitio" -#: bookwyrm/templates/layout.html:202 +#: bookwyrm/templates/layout.html:206 #, python-format msgid "Support %(site_name)s on %(support_title)s" -msgstr "" +msgstr "Apoyar %(site_name)s en %(support_title)s" -#: bookwyrm/templates/layout.html:206 +#: bookwyrm/templates/layout.html:210 msgid "BookWyrm is open source software. You can contribute or report issues on GitHub." msgstr "BookWyrm es software de código abierto. Puedes contribuir o reportar problemas en GitHub." #: bookwyrm/templates/lists/create_form.html:5 -#: bookwyrm/templates/lists/lists.html:19 +#: bookwyrm/templates/lists/lists.html:20 msgid "Create List" msgstr "Crear lista" #: bookwyrm/templates/lists/created_text.html:5 -#, fuzzy, python-format -#| msgid "Added by %(username)s" +#, python-format msgid "Created and curated by %(username)s" -msgstr "Agregado por %(username)s" +msgstr "Agregado y comisariado por %(username)s" #: bookwyrm/templates/lists/created_text.html:7 -#, fuzzy, python-format -#| msgid "Added by %(username)s" +#, python-format msgid "Created by %(username)s" -msgstr "Agregado por %(username)s" +msgstr "Creado por %(username)s" #: bookwyrm/templates/lists/curate.html:6 msgid "Pending Books" @@ -1363,7 +1302,7 @@ msgid "Anyone can suggest books, subject to your approval" msgstr "Cualquier usuario puede sugerir libros, en cuanto lo hayas aprobado" #: bookwyrm/templates/lists/form.html:31 -#: bookwyrm/templates/moderation/reports.html:24 +#: bookwyrm/templates/moderation/reports.html:25 msgid "Open" msgstr "Abierto" @@ -1371,67 +1310,58 @@ msgstr "Abierto" msgid "Anyone can add books to this list" msgstr "Cualquer usuario puede agregar libros a esta lista" -#: bookwyrm/templates/lists/list.html:19 -#: bookwyrm/templates/snippets/pagination.html:12 -msgid "Previous" -msgstr "Anterior" - -#: bookwyrm/templates/lists/list.html:22 -#: bookwyrm/templates/snippets/pagination.html:23 -msgid "Next" -msgstr "Siguiente" - -#: bookwyrm/templates/lists/list.html:58 +#: bookwyrm/templates/lists/list.html:17 msgid "This list is currently empty" msgstr "Esta lista está vacia" -#: bookwyrm/templates/lists/list.html:76 +#: bookwyrm/templates/lists/list.html:36 #, python-format msgid "Added by %(username)s" msgstr "Agregado por %(username)s" -#: bookwyrm/templates/lists/list.html:82 +#: bookwyrm/templates/lists/list.html:48 +msgid "Set" +msgstr "Establecido" + +#: bookwyrm/templates/lists/list.html:51 +msgid "List position" +msgstr "Posición" + +#: bookwyrm/templates/lists/list.html:57 #: bookwyrm/templates/snippets/shelf_selector.html:26 msgid "Remove" msgstr "Quitar" -#: bookwyrm/templates/lists/list.html:90 -msgid "Set list position" -msgstr "Apunta indice" - -#: bookwyrm/templates/lists/list.html:103 -#: bookwyrm/templates/lists/list.html:115 +#: bookwyrm/templates/lists/list.html:70 bookwyrm/templates/lists/list.html:82 msgid "Sort List" msgstr "Ordena la lista" -#: bookwyrm/templates/lists/list.html:109 -#, fuzzy -#| msgid "List curation:" +#: bookwyrm/templates/lists/list.html:76 msgid "Direction" -msgstr "Enumerar lista de comisariado:" +msgstr "Dirección" -#: bookwyrm/templates/lists/list.html:120 +#: bookwyrm/templates/lists/list.html:87 msgid "Add Books" msgstr "Agregar libros" -#: bookwyrm/templates/lists/list.html:120 +#: bookwyrm/templates/lists/list.html:87 msgid "Suggest Books" msgstr "Sugerir libros" -#: bookwyrm/templates/lists/list.html:129 +#: bookwyrm/templates/lists/list.html:96 msgid "search" msgstr "buscar" -#: bookwyrm/templates/lists/list.html:135 +#: bookwyrm/templates/lists/list.html:102 msgid "Clear search" msgstr "Borrar búsqueda" -#: bookwyrm/templates/lists/list.html:140 +#: bookwyrm/templates/lists/list.html:107 #, python-format msgid "No books found matching the query \"%(query)s\"" msgstr "No se encontró ningún libro correspondiente a la búsqueda: \"%(query)s\"" -#: bookwyrm/templates/lists/list.html:156 +#: bookwyrm/templates/lists/list.html:123 msgid "Suggest" msgstr "Sugerir" @@ -1456,133 +1386,93 @@ msgstr "Contactar a unx administradorx para recibir una invitación" msgid "More about this site" msgstr "Más sobre este sitio" -#: bookwyrm/templates/moderation/report.html:5 #: bookwyrm/templates/moderation/report.html:6 +#: bookwyrm/templates/moderation/report.html:7 #: bookwyrm/templates/moderation/report_preview.html:6 #, python-format msgid "Report #%(report_id)s: %(username)s" -msgstr "" +msgstr "Reportar #%(report_id)s: %(username)s" -#: bookwyrm/templates/moderation/report.html:10 +#: bookwyrm/templates/moderation/report.html:11 msgid "Back to reports" -msgstr "" +msgstr "Volver a los informes" -#: bookwyrm/templates/moderation/report.html:18 -#, fuzzy -#| msgid "Notifications" -msgid "Actions" -msgstr "Notificaciones" - -#: bookwyrm/templates/moderation/report.html:19 -#, fuzzy -#| msgid "User Profile" -msgid "View user profile" -msgstr "Perfil de usuario" - -#: bookwyrm/templates/moderation/report.html:22 -#: bookwyrm/templates/snippets/status/status_options.html:35 -#: bookwyrm/templates/snippets/user_options.html:13 -msgid "Send direct message" -msgstr "Enviar mensaje directo" - -#: bookwyrm/templates/moderation/report.html:27 -msgid "Deactivate user" -msgstr "" - -#: bookwyrm/templates/moderation/report.html:29 -msgid "Reactivate user" -msgstr "" - -#: bookwyrm/templates/moderation/report.html:36 +#: bookwyrm/templates/moderation/report.html:23 msgid "Moderator Comments" -msgstr "" +msgstr "Comentarios de moderador" -#: bookwyrm/templates/moderation/report.html:54 +#: bookwyrm/templates/moderation/report.html:41 #: bookwyrm/templates/snippets/create_status.html:28 -#: bookwyrm/templates/snippets/create_status_form.html:44 +#: bookwyrm/templates/snippets/create_status_form.html:53 msgid "Comment" msgstr "Comentario" -#: bookwyrm/templates/moderation/report.html:59 -#, fuzzy -#| msgid "Delete status" +#: bookwyrm/templates/moderation/report.html:46 msgid "Reported statuses" -msgstr "Eliminar status" +msgstr "Statuses reportados" -#: bookwyrm/templates/moderation/report.html:61 +#: bookwyrm/templates/moderation/report.html:48 msgid "No statuses reported" -msgstr "" +msgstr "Ningún estatus reportado" -#: bookwyrm/templates/moderation/report.html:67 -msgid "Statuses has been deleted" -msgstr "" +#: bookwyrm/templates/moderation/report.html:54 +msgid "Status has been deleted" +msgstr "Status ha sido eliminado" #: bookwyrm/templates/moderation/report_modal.html:6 -#, fuzzy, python-format -#| msgid "Lists: %(username)s" +#, python-format msgid "Report @%(username)s" -msgstr "Listas: %(username)s" +msgstr "Reportar @%(username)s" -#: bookwyrm/templates/moderation/report_modal.html:21 +#: bookwyrm/templates/moderation/report_modal.html:23 #, python-format msgid "This report will be sent to %(site_name)s's moderators for review." -msgstr "" +msgstr "Este informe se enviará a los moderadores de %(site_name)s para la revisión." -#: bookwyrm/templates/moderation/report_modal.html:22 -#, fuzzy -#| msgid "More about this site" +#: bookwyrm/templates/moderation/report_modal.html:24 msgid "More info about this report:" -msgstr "Más sobre este sitio" +msgstr "Más información sobre este informe:" #: bookwyrm/templates/moderation/report_preview.html:13 msgid "No notes provided" -msgstr "" +msgstr "No se proporcionó notas" #: bookwyrm/templates/moderation/report_preview.html:20 -#, fuzzy, python-format -#| msgid "Added by %(username)s" +#, python-format msgid "Reported by %(username)s" -msgstr "Agregado por %(username)s" +msgstr "Reportado por %(username)s" #: bookwyrm/templates/moderation/report_preview.html:30 msgid "Re-open" -msgstr "" +msgstr "Reabrir" #: bookwyrm/templates/moderation/report_preview.html:32 msgid "Resolve" -msgstr "" +msgstr "Resolver" #: bookwyrm/templates/moderation/reports.html:6 -#, fuzzy, python-format -#| msgid "Lists: %(username)s" +#, python-format msgid "Reports: %(server_name)s" -msgstr "Listas: %(username)s" +msgstr "Informes: %(server_name)s" #: bookwyrm/templates/moderation/reports.html:8 -#: bookwyrm/templates/moderation/reports.html:16 -#: bookwyrm/templates/settings/admin_layout.html:28 -#, fuzzy -#| msgid "Recent Imports" +#: bookwyrm/templates/moderation/reports.html:17 +#: bookwyrm/templates/settings/admin_layout.html:35 msgid "Reports" -msgstr "Importaciones recientes" +msgstr "Informes" -#: bookwyrm/templates/moderation/reports.html:13 -#, fuzzy, python-format -#| msgid "Lists: %(username)s" +#: bookwyrm/templates/moderation/reports.html:14 +#, python-format msgid "Reports: %(server_name)s" -msgstr "Listas: %(username)s" +msgstr "Informes: %(server_name)s" -#: bookwyrm/templates/moderation/reports.html:27 -#, fuzzy -#| msgid "Shelved" +#: bookwyrm/templates/moderation/reports.html:28 msgid "Resolved" -msgstr "Archivado" +msgstr "Resuelto" -#: bookwyrm/templates/moderation/reports.html:34 -#, fuzzy -#| msgid "No books found" +#: bookwyrm/templates/moderation/reports.html:37 msgid "No reports found." -msgstr "No se encontró ningún libro" +msgstr "No se encontró ningún informe." #: bookwyrm/templates/notifications.html:14 msgid "Delete notifications" @@ -1694,7 +1584,7 @@ msgstr "Tu importación ha terminado." #: bookwyrm/templates/notifications.html:113 #, python-format msgid "A new report needs moderation." -msgstr "" +msgstr "Un informe nuevo se requiere moderación." #: bookwyrm/templates/notifications.html:139 msgid "You're all caught up!" @@ -1741,12 +1631,12 @@ msgstr "Editar perfil" #: bookwyrm/templates/preferences/edit_user.html:46 msgid "Show set reading goal prompt in feed:" -msgstr "" +msgstr "Mostrar meta de lectura en el feed:" #: bookwyrm/templates/preferences/edit_user.html:62 #, python-format msgid "Your account will show up in the directory, and may be recommended to other BookWyrm users." -msgstr "" +msgstr "Tu cuenta se aparecerá en el directorio, y puede ser recomendado a otros usuarios de BookWyrm." #: bookwyrm/templates/preferences/edit_user.html:65 msgid "Preferred Timezone: " @@ -1789,136 +1679,187 @@ msgstr "No se encontró ningúna lista correspondiente a \"%(query)s\"" msgid "Administration" msgstr "Adminstración" -#: bookwyrm/templates/settings/admin_layout.html:15 +#: bookwyrm/templates/settings/admin_layout.html:22 msgid "Manage Users" msgstr "Administrar usuarios" -#: bookwyrm/templates/settings/admin_layout.html:19 -#: bookwyrm/templates/settings/user_admin.html:3 -#: bookwyrm/templates/settings/user_admin.html:10 +#: bookwyrm/templates/settings/admin_layout.html:26 +#: bookwyrm/templates/user_admin/user_admin.html:3 +#: bookwyrm/templates/user_admin/user_admin.html:10 msgid "Users" -msgstr "" +msgstr "Usuarios" -#: bookwyrm/templates/settings/admin_layout.html:32 +#: bookwyrm/templates/settings/admin_layout.html:39 #: bookwyrm/templates/settings/federation.html:3 #: bookwyrm/templates/settings/federation.html:5 msgid "Federated Servers" msgstr "Servidores federalizados" -#: bookwyrm/templates/settings/admin_layout.html:37 +#: bookwyrm/templates/settings/admin_layout.html:44 msgid "Instance Settings" msgstr "Configuración de instancia" -#: bookwyrm/templates/settings/admin_layout.html:41 +#: bookwyrm/templates/settings/admin_layout.html:48 #: bookwyrm/templates/settings/site.html:4 #: bookwyrm/templates/settings/site.html:6 msgid "Site Settings" msgstr "Configuración de sitio" -#: bookwyrm/templates/settings/admin_layout.html:44 +#: bookwyrm/templates/settings/admin_layout.html:51 #: bookwyrm/templates/settings/site.html:13 msgid "Instance Info" msgstr "Información de instancia" -#: bookwyrm/templates/settings/admin_layout.html:45 +#: bookwyrm/templates/settings/admin_layout.html:52 #: bookwyrm/templates/settings/site.html:39 msgid "Images" msgstr "Imagenes" -#: bookwyrm/templates/settings/admin_layout.html:46 +#: bookwyrm/templates/settings/admin_layout.html:53 #: bookwyrm/templates/settings/site.html:59 msgid "Footer Content" msgstr "Contenido del pie de página" -#: bookwyrm/templates/settings/admin_layout.html:47 +#: bookwyrm/templates/settings/admin_layout.html:54 #: bookwyrm/templates/settings/site.html:77 msgid "Registration" msgstr "Registración" -#: bookwyrm/templates/settings/federated_server.html:7 -msgid "Back to server list" -msgstr "" +#: bookwyrm/templates/settings/edit_server.html:3 +#: bookwyrm/templates/settings/edit_server.html:6 +#: bookwyrm/templates/settings/edit_server.html:20 +#: bookwyrm/templates/settings/federation.html:9 +#: bookwyrm/templates/settings/federation.html:10 +#: bookwyrm/templates/settings/server_blocklist.html:3 +#: bookwyrm/templates/settings/server_blocklist.html:20 +msgid "Add server" +msgstr "Agregar servidor" +#: bookwyrm/templates/settings/edit_server.html:7 #: bookwyrm/templates/settings/federated_server.html:12 -msgid "Details" -msgstr "" +#: bookwyrm/templates/settings/server_blocklist.html:7 +msgid "Back to server list" +msgstr "Volver a la lista de servidores" -#: bookwyrm/templates/settings/federated_server.html:15 -#, fuzzy -#| msgid "Software" -msgid "Software:" -msgstr "Software" +#: bookwyrm/templates/settings/edit_server.html:16 +#: bookwyrm/templates/settings/server_blocklist.html:16 +msgid "Import block list" +msgstr "Importar lista de bloqueo" -#: bookwyrm/templates/settings/federated_server.html:19 -#, fuzzy -#| msgid "Description:" -msgid "Version:" -msgstr "Descripción:" +#: bookwyrm/templates/settings/edit_server.html:30 +msgid "Instance:" +msgstr "Instancia:" -#: bookwyrm/templates/settings/federated_server.html:23 -#, fuzzy -#| msgid "Status" +#: bookwyrm/templates/settings/edit_server.html:37 +#: bookwyrm/templates/settings/federated_server.html:29 +#: bookwyrm/templates/user_admin/user_info.html:34 msgid "Status:" -msgstr "Status" +msgstr "Status:" -#: bookwyrm/templates/settings/federated_server.html:30 +#: bookwyrm/templates/settings/edit_server.html:41 +#: bookwyrm/templates/settings/federated_server.html:9 +msgid "Blocked" +msgstr "Bloqueado" + +#: bookwyrm/templates/settings/edit_server.html:48 +#: bookwyrm/templates/settings/federated_server.html:21 +#: bookwyrm/templates/user_admin/user_info.html:26 +msgid "Software:" +msgstr "Software:" + +#: bookwyrm/templates/settings/edit_server.html:55 +#: bookwyrm/templates/settings/federated_server.html:25 +#: bookwyrm/templates/user_admin/user_info.html:30 +msgid "Version:" +msgstr "Versión:" + +#: bookwyrm/templates/settings/edit_server.html:64 +msgid "Notes:" +msgstr "Notas:" + +#: bookwyrm/templates/settings/federated_server.html:18 +msgid "Details" +msgstr "Detalles" + +#: bookwyrm/templates/settings/federated_server.html:36 #: bookwyrm/templates/user/user_layout.html:50 msgid "Activity" msgstr "Actividad" -#: bookwyrm/templates/settings/federated_server.html:33 -#, fuzzy -#| msgid "Username:" +#: bookwyrm/templates/settings/federated_server.html:39 msgid "Users:" -msgstr "Nombre de usuario:" +msgstr "Usuarios:" -#: bookwyrm/templates/settings/federated_server.html:36 -#: bookwyrm/templates/settings/federated_server.html:43 +#: bookwyrm/templates/settings/federated_server.html:42 +#: bookwyrm/templates/settings/federated_server.html:49 msgid "View all" -msgstr "" +msgstr "Ver todos" -#: bookwyrm/templates/settings/federated_server.html:40 -#, fuzzy -#| msgid "Recent Imports" +#: bookwyrm/templates/settings/federated_server.html:46 msgid "Reports:" -msgstr "Importaciones recientes" - -#: bookwyrm/templates/settings/federated_server.html:47 -#, fuzzy -#| msgid "followed you" -msgid "Followed by us:" -msgstr "te siguió" +msgstr "Informes:" #: bookwyrm/templates/settings/federated_server.html:53 -#, fuzzy -#| msgid "followed you" -msgid "Followed by them:" -msgstr "te siguió" +msgid "Followed by us:" +msgstr "Seguido por nosotros:" #: bookwyrm/templates/settings/federated_server.html:59 -#, fuzzy -#| msgid "Blocked Users" -msgid "Blocked by us:" -msgstr "Usuarios bloqueados" +msgid "Followed by them:" +msgstr "Seguido por ellos:" -#: bookwyrm/templates/settings/federation.html:13 +#: bookwyrm/templates/settings/federated_server.html:65 +msgid "Blocked by us:" +msgstr "Bloqueado por nosotros:" + +#: bookwyrm/templates/settings/federated_server.html:77 +#: bookwyrm/templates/user_admin/user_info.html:39 +msgid "Notes" +msgstr "Notas" + +#: bookwyrm/templates/settings/federated_server.html:80 +msgid "Edit" +msgstr "Editar" + +#: bookwyrm/templates/settings/federated_server.html:100 +#: bookwyrm/templates/user_admin/user_moderation_actions.html:3 +msgid "Actions" +msgstr "Acciones" + +#: bookwyrm/templates/settings/federated_server.html:104 +#: bookwyrm/templates/snippets/block_button.html:5 +msgid "Block" +msgstr "Bloquear" + +#: bookwyrm/templates/settings/federated_server.html:105 +msgid "All users from this instance will be deactivated." +msgstr "Todos los usuarios en esta instancia serán desactivados." + +#: bookwyrm/templates/settings/federated_server.html:110 +#: bookwyrm/templates/snippets/block_button.html:10 +msgid "Un-block" +msgstr "Desbloquear" + +#: bookwyrm/templates/settings/federated_server.html:111 +msgid "All users from this instance will be re-activated." +msgstr "Todos los usuarios en esta instancia serán re-activados." + +#: bookwyrm/templates/settings/federation.html:20 +#: bookwyrm/templates/user_admin/server_filter.html:5 msgid "Server name" msgstr "Nombre de servidor" -#: bookwyrm/templates/settings/federation.html:17 -#, fuzzy -#| msgid "Federated" +#: bookwyrm/templates/settings/federation.html:24 msgid "Date federated" -msgstr "Federalizado" +msgstr "Fecha de federalización" -#: bookwyrm/templates/settings/federation.html:21 +#: bookwyrm/templates/settings/federation.html:28 msgid "Software" msgstr "Software" -#: bookwyrm/templates/settings/federation.html:24 +#: bookwyrm/templates/settings/federation.html:31 #: bookwyrm/templates/settings/manage_invite_requests.html:44 #: bookwyrm/templates/settings/status_filter.html:5 -#: bookwyrm/templates/settings/user_admin.html:32 +#: bookwyrm/templates/user_admin/user_admin.html:34 msgid "Status" msgstr "Status" @@ -1926,83 +1867,71 @@ msgstr "Status" #: bookwyrm/templates/settings/manage_invite_requests.html:11 #: bookwyrm/templates/settings/manage_invite_requests.html:25 #: bookwyrm/templates/settings/manage_invites.html:11 -#, fuzzy -#| msgid "Invites" msgid "Invite Requests" -msgstr "Invitaciones" +msgstr "Solicitudes de invitación" #: bookwyrm/templates/settings/manage_invite_requests.html:23 msgid "Ignored Invite Requests" -msgstr "" +msgstr "Solicitudes de invitación ignoradas" #: bookwyrm/templates/settings/manage_invite_requests.html:35 -#, fuzzy -#| msgid "Federated" msgid "Date requested" -msgstr "Federalizado" +msgstr "Fecha solicitada" #: bookwyrm/templates/settings/manage_invite_requests.html:39 -#, fuzzy -#| msgid "Accept" msgid "Date accepted" -msgstr "Aceptar" +msgstr "Fecha de aceptación" #: bookwyrm/templates/settings/manage_invite_requests.html:42 msgid "Email" -msgstr "" +msgstr "Correo electronico" #: bookwyrm/templates/settings/manage_invite_requests.html:47 -#, fuzzy -#| msgid "Notifications" msgid "Action" -msgstr "Notificaciones" +msgstr "Acción" #: bookwyrm/templates/settings/manage_invite_requests.html:50 -#, fuzzy -#| msgid "Follow Requests" msgid "No requests" -msgstr "Solicitudes de seguidor" +msgstr "No solicitudes" #: bookwyrm/templates/settings/manage_invite_requests.html:59 #: bookwyrm/templates/settings/status_filter.html:16 -#, fuzzy -#| msgid "Accept" msgid "Accepted" -msgstr "Aceptar" +msgstr "Aceptado" #: bookwyrm/templates/settings/manage_invite_requests.html:61 #: bookwyrm/templates/settings/status_filter.html:12 msgid "Sent" -msgstr "" +msgstr "Enviado" #: bookwyrm/templates/settings/manage_invite_requests.html:63 #: bookwyrm/templates/settings/status_filter.html:8 msgid "Requested" -msgstr "" +msgstr "Solicitado" #: bookwyrm/templates/settings/manage_invite_requests.html:73 msgid "Send invite" -msgstr "" +msgstr "Enviar invitación" #: bookwyrm/templates/settings/manage_invite_requests.html:75 msgid "Re-send invite" -msgstr "" +msgstr "Re-enviar invitación" #: bookwyrm/templates/settings/manage_invite_requests.html:95 msgid "Ignore" -msgstr "" +msgstr "Ignorar" #: bookwyrm/templates/settings/manage_invite_requests.html:97 msgid "Un-ignore" -msgstr "" +msgstr "Des-ignorar" #: bookwyrm/templates/settings/manage_invite_requests.html:108 msgid "Back to pending requests" -msgstr "" +msgstr "Volver a las solicitudes pendientes" #: bookwyrm/templates/settings/manage_invite_requests.html:110 msgid "View ignored requests" -msgstr "" +msgstr "Ver solicitudes ignoradas" #: bookwyrm/templates/settings/manage_invites.html:21 msgid "Generate New Invite" @@ -2040,6 +1969,23 @@ msgstr "Número de usos" msgid "No active invites" msgstr "No invitaciónes activas" +#: bookwyrm/templates/settings/server_blocklist.html:6 +msgid "Import Blocklist" +msgstr "Importar lista de bloqueo" + +#: bookwyrm/templates/settings/server_blocklist.html:26 +#: bookwyrm/templates/snippets/goal_progress.html:5 +msgid "Success!" +msgstr "¡Meta logrado!" + +#: bookwyrm/templates/settings/server_blocklist.html:30 +msgid "Successfully blocked:" +msgstr "Se bloqueó exitosamente:" + +#: bookwyrm/templates/settings/server_blocklist.html:32 +msgid "Failed:" +msgstr "Falló:" + #: bookwyrm/templates/settings/site.html:15 msgid "Instance Name:" msgstr "Nombre de instancia:" @@ -2089,63 +2035,17 @@ msgid "Allow registration:" msgstr "Permitir registración:" #: bookwyrm/templates/settings/site.html:83 -#, fuzzy -#| msgid "Follow Requests" msgid "Allow invite requests:" -msgstr "Solicitudes de seguidor" +msgstr "Permitir solicitudes de invitación:" #: bookwyrm/templates/settings/site.html:87 msgid "Registration closed text:" msgstr "Texto de registración cerrada:" -#: bookwyrm/templates/settings/user_admin.html:7 -#, python-format -msgid "Users: %(server_name)s" -msgstr "" - -#: bookwyrm/templates/settings/user_admin.html:20 -#, fuzzy -#| msgid "Username:" -msgid "Username" -msgstr "Nombre de usuario:" - -#: bookwyrm/templates/settings/user_admin.html:24 -#, fuzzy -#| msgid "Added:" -msgid "Date Added" -msgstr "Agregado:" - -#: bookwyrm/templates/settings/user_admin.html:28 -msgid "Last Active" -msgstr "" - -#: bookwyrm/templates/settings/user_admin.html:36 -#, fuzzy -#| msgid "Remove" -msgid "Remote server" -msgstr "Quitar" - -#: bookwyrm/templates/settings/user_admin.html:45 -#, fuzzy -#| msgid "Activity" -msgid "Active" -msgstr "Actividad" - -#: bookwyrm/templates/settings/user_admin.html:45 -msgid "Inactive" -msgstr "" - -#: bookwyrm/templates/settings/user_admin.html:50 -msgid "Not set" -msgstr "" - -#: bookwyrm/templates/snippets/block_button.html:5 -msgid "Block" -msgstr "Bloquear" - -#: bookwyrm/templates/snippets/block_button.html:10 -msgid "Un-block" -msgstr "Desbloquear" +#: bookwyrm/templates/snippets/book_cover.html:20 +#: bookwyrm/templates/snippets/search_result_text.html:10 +msgid "No cover" +msgstr "Sin portada" #: bookwyrm/templates/snippets/book_titleby.html:3 #, python-format @@ -2154,8 +2054,8 @@ msgstr "%(title)s por " #: bookwyrm/templates/snippets/boost_button.html:8 #: bookwyrm/templates/snippets/boost_button.html:9 -#: bookwyrm/templates/snippets/status/status_body.html:52 -#: bookwyrm/templates/snippets/status/status_body.html:53 +#: bookwyrm/templates/snippets/status/layout.html:47 +#: bookwyrm/templates/snippets/status/layout.html:48 msgid "Boost status" msgstr "Status de respaldo" @@ -2180,59 +2080,60 @@ msgstr "Reseña" msgid "Quote" msgstr "Cita" -#: bookwyrm/templates/snippets/create_status_form.html:18 -#, fuzzy -#| msgid "Comment" -msgid "Comment:" -msgstr "Comentario" - #: bookwyrm/templates/snippets/create_status_form.html:20 -#, fuzzy -#| msgid "Quote" -msgid "Quote:" -msgstr "Cita" +msgid "Comment:" +msgstr "Comentario:" #: bookwyrm/templates/snippets/create_status_form.html:22 -#, fuzzy -#| msgid "Review" -msgid "Review:" -msgstr "Reseña" +msgid "Quote:" +msgstr "Cita:" -#: bookwyrm/templates/snippets/create_status_form.html:56 +#: bookwyrm/templates/snippets/create_status_form.html:24 +msgid "Review:" +msgstr "Reseña:" + +#: bookwyrm/templates/snippets/create_status_form.html:42 +#: bookwyrm/templates/snippets/status/layout.html:30 +#: bookwyrm/templates/snippets/status/layout.html:43 +#: bookwyrm/templates/snippets/status/layout.html:44 +msgid "Reply" +msgstr "Respuesta" + +#: bookwyrm/templates/snippets/create_status_form.html:67 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 msgid "Progress:" msgstr "Progreso:" -#: bookwyrm/templates/snippets/create_status_form.html:63 +#: bookwyrm/templates/snippets/create_status_form.html:75 #: bookwyrm/templates/snippets/readthrough_form.html:22 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:30 msgid "pages" msgstr "páginas" -#: bookwyrm/templates/snippets/create_status_form.html:64 +#: bookwyrm/templates/snippets/create_status_form.html:76 #: bookwyrm/templates/snippets/readthrough_form.html:23 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:31 msgid "percent" msgstr "por ciento" -#: bookwyrm/templates/snippets/create_status_form.html:69 +#: bookwyrm/templates/snippets/create_status_form.html:82 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:36 #, python-format msgid "of %(pages)s pages" msgstr "de %(pages)s páginas" -#: bookwyrm/templates/snippets/create_status_form.html:81 +#: bookwyrm/templates/snippets/create_status_form.html:97 msgid "Include spoiler alert" msgstr "Incluir alerta de spoiler" -#: bookwyrm/templates/snippets/create_status_form.html:88 +#: bookwyrm/templates/snippets/create_status_form.html:104 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:19 msgid "Private" msgstr "Privada" -#: bookwyrm/templates/snippets/create_status_form.html:99 +#: bookwyrm/templates/snippets/create_status_form.html:115 msgid "Post" msgstr "Compartir" @@ -2247,14 +2148,13 @@ msgstr "Estás eliminando esta lectura y sus %(count)s actualizaciones de progre #: bookwyrm/templates/snippets/delete_readthrough_modal.html:15 #: bookwyrm/templates/snippets/follow_request_buttons.html:13 -#: venv/lib/python3.8/site-packages/django/forms/formsets.py:391 msgid "Delete" msgstr "Eliminar" #: bookwyrm/templates/snippets/fav_button.html:7 #: bookwyrm/templates/snippets/fav_button.html:8 -#: bookwyrm/templates/snippets/status/status_body.html:56 -#: bookwyrm/templates/snippets/status/status_body.html:57 +#: bookwyrm/templates/snippets/status/layout.html:51 +#: bookwyrm/templates/snippets/status/layout.html:52 msgid "Like status" msgstr "Me gusta status" @@ -2264,34 +2164,28 @@ msgid "Un-like status" msgstr "Quitar me gusta de status" #: bookwyrm/templates/snippets/filters_panel/filters_panel.html:7 -#, fuzzy -#| msgid "Show less" msgid "Show filters" -msgstr "Mostrar menos" +msgstr "Mostrar filtros" #: bookwyrm/templates/snippets/filters_panel/filters_panel.html:9 msgid "Hide filters" -msgstr "" +msgstr "Ocultar filtros" #: bookwyrm/templates/snippets/filters_panel/filters_panel.html:22 msgid "Apply filters" -msgstr "" +msgstr "Aplicar filtros" #: bookwyrm/templates/snippets/filters_panel/filters_panel.html:26 -#, fuzzy -#| msgid "Clear search" msgid "Clear filters" -msgstr "Borrar búsqueda" +msgstr "Borrar filtros" #: bookwyrm/templates/snippets/follow_button.html:12 msgid "Follow" msgstr "Seguir" #: bookwyrm/templates/snippets/follow_button.html:18 -#, fuzzy -#| msgid "Send follow request" msgid "Undo follow request" -msgstr "Envia solicitud de seguidor" +msgstr "Des-enviar solicitud de seguidor" #: bookwyrm/templates/snippets/follow_button.html:20 msgid "Unfollow" @@ -2311,8 +2205,8 @@ msgstr "No calificación" #, python-format msgid "%(rating)s star" msgid_plural "%(rating)s stars" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(rating)s estrella" +msgstr[1] "%(rating)s estrellas" #: bookwyrm/templates/snippets/generated_status/goal.html:1 #, python-format @@ -2322,24 +2216,23 @@ msgstr[0] "estableció una meta de leer %(counter)s libro en %(year)s" msgstr[1] "estableció una meta de leer %(counter)s libros en %(year)s" #: bookwyrm/templates/snippets/generated_status/rating.html:3 -#, fuzzy, python-format -#| msgid "%(title)s by " +#, python-format msgid "Rated %(title)s: %(display_rating)s star" msgid_plural "Rated %(title)s: %(display_rating)s stars" -msgstr[0] "%(title)s por " -msgstr[1] "%(title)s por " +msgstr[0] "Reseño %(title)s: %(display_rating)s estrella" +msgstr[1] "Reseño %(title)s: %(display_rating)s estrellas" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:4 #, python-format msgid "Review of \"%(book_title)s\" (%(display_rating)s star): %(review_title)s" msgid_plural "Review of \"%(book_title)s\" (%(display_rating)s stars): %(review_title)s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Reseña de \"%(book_title)s\" (%(display_rating)s estrella): %(review_title)s" +msgstr[1] "Reseña de \"%(book_title)s\" (%(display_rating)s estrellas): %(review_title)s" #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:8 #, python-format msgid "Review of \"%(book_title)s\": %(review_title)s" -msgstr "" +msgstr "Reseña de \"%(book_title)s\": %(review_title)s" #: bookwyrm/templates/snippets/goal_card.html:23 #, python-format @@ -2369,10 +2262,6 @@ msgstr "Compartir con tu feed" msgid "Set goal" msgstr "Establecer meta" -#: bookwyrm/templates/snippets/goal_progress.html:5 -msgid "Success!" -msgstr "¡Meta logrado!" - #: bookwyrm/templates/snippets/goal_progress.html:7 #, python-format msgid "%(percent)s%% complete!" @@ -2389,16 +2278,21 @@ msgid "%(username)s has read %(read_count)s of %(goal_count msgstr "%(username)s ha leído %(read_count)s de %(goal_count)s libros." #: bookwyrm/templates/snippets/page_text.html:4 -#, fuzzy, python-format -#| msgid "of %(pages)s pages" +#, python-format msgid "page %(page)s of %(total_pages)s" -msgstr "de %(pages)s páginas" +msgstr "página %(page)s de %(total_pages)s" #: bookwyrm/templates/snippets/page_text.html:6 -#, fuzzy, python-format -#| msgid "%(pages)s pages" msgid "page %(page)s" -msgstr "%(pages)s páginas" +msgstr "página %(pages)s" + +#: bookwyrm/templates/snippets/pagination.html:12 +msgid "Previous" +msgstr "Anterior" + +#: bookwyrm/templates/snippets/pagination.html:23 +msgid "Next" +msgstr "Siguiente" #: bookwyrm/templates/snippets/privacy-icons.html:3 #: bookwyrm/templates/snippets/privacy-icons.html:4 @@ -2482,37 +2376,29 @@ msgid "Sign Up" msgstr "Inscribirse" #: bookwyrm/templates/snippets/report_button.html:5 -#, fuzzy -#| msgid "Import" msgid "Report" -msgstr "Importar" +msgstr "Reportar" #: bookwyrm/templates/snippets/rss_title.html:5 -#: bookwyrm/templates/snippets/status/status_header.html:11 +#: bookwyrm/templates/snippets/status/status_header.html:21 msgid "rated" msgstr "calificó" #: bookwyrm/templates/snippets/rss_title.html:7 -#: bookwyrm/templates/snippets/status/status_header.html:13 +#: bookwyrm/templates/snippets/status/status_header.html:23 msgid "reviewed" msgstr "reseñó" #: bookwyrm/templates/snippets/rss_title.html:9 -#: bookwyrm/templates/snippets/status/status_header.html:15 +#: bookwyrm/templates/snippets/status/status_header.html:25 msgid "commented on" msgstr "comentó en" #: bookwyrm/templates/snippets/rss_title.html:11 -#: bookwyrm/templates/snippets/status/status_header.html:17 +#: bookwyrm/templates/snippets/status/status_header.html:27 msgid "quoted" msgstr "citó" -#: bookwyrm/templates/snippets/search_result_text.html:10 -#, fuzzy -#| msgid "Add cover" -msgid "No cover" -msgstr "Agregar portada" - #: bookwyrm/templates/snippets/search_result_text.html:22 #, python-format msgid "by %(author)s" @@ -2523,10 +2409,8 @@ msgid "Import book" msgstr "Importar libro" #: bookwyrm/templates/snippets/shelf_selector.html:4 -#, fuzzy -#| msgid "Your books" msgid "Move book" -msgstr "Tus libros" +msgstr "Mover libro" #: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 #, python-format @@ -2534,11 +2418,9 @@ msgid "Finish \"%(book_title)s\"" msgstr "Terminar \"%(book_title)s\"" #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:35 -#, fuzzy -#| msgid "Updates" +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:34 msgid "Update progress" -msgstr "Actualizaciones" +msgstr "Progreso de actualización" #: bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html:5 msgid "More shelves" @@ -2557,11 +2439,10 @@ msgstr "Terminar de leer" msgid "Want to read" msgstr "Quiero leer" -#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:48 -#, fuzzy, python-format -#| msgid "Lists: %(username)s" +#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 +#, python-format msgid "Remove from %(name)s" -msgstr "Listas: %(username)s" +msgstr "Quitar de %(name)s" #: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 #, python-format @@ -2573,58 +2454,51 @@ msgstr "Empezar \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\"" msgstr "Quiero leer \"%(book_title)s\"" -#: bookwyrm/templates/snippets/status/status.html:9 -msgid "boosted" -msgstr "respaldó" +#: bookwyrm/templates/snippets/status/content_status.html:60 +#: bookwyrm/templates/snippets/status/status_content.html:50 +#: bookwyrm/templates/snippets/trimmed_text.html:14 +msgid "Show more" +msgstr "Mostrar más" -#: bookwyrm/templates/snippets/status/status_body.html:27 +#: bookwyrm/templates/snippets/status/content_status.html:75 +#: bookwyrm/templates/snippets/status/status_content.html:65 +#: bookwyrm/templates/snippets/trimmed_text.html:29 +msgid "Show less" +msgstr "Mostrar menos" + +#: bookwyrm/templates/snippets/status/content_status.html:105 +#: bookwyrm/templates/snippets/status/status_content.html:95 +msgid "Open image in new window" +msgstr "Abrir imagen en una nueva ventana" + +#: bookwyrm/templates/snippets/status/layout.html:22 #: bookwyrm/templates/snippets/status/status_options.html:18 msgid "Delete status" msgstr "Eliminar status" -#: bookwyrm/templates/snippets/status/status_body.html:35 -#: bookwyrm/templates/snippets/status/status_body.html:48 -#: bookwyrm/templates/snippets/status/status_body.html:49 -msgid "Reply" -msgstr "Respuesta" +#: bookwyrm/templates/snippets/status/status.html:9 +msgid "boosted" +msgstr "respaldó" -#: bookwyrm/templates/snippets/status/status_content.html:18 -#: bookwyrm/templates/snippets/trimmed_text.html:15 -msgid "Show more" -msgstr "Mostrar más" - -#: bookwyrm/templates/snippets/status/status_content.html:25 -#: bookwyrm/templates/snippets/trimmed_text.html:25 -msgid "Show less" -msgstr "Mostrar menos" - -#: bookwyrm/templates/snippets/status/status_content.html:46 -msgid "Open image in new window" -msgstr "Abrir imagen en una nueva ventana" - -#: bookwyrm/templates/snippets/status/status_header.html:22 -#, fuzzy, python-format -#| msgid "Added by %(username)s" +#: bookwyrm/templates/snippets/status/status_header.html:32 +#, python-format msgid "replied to %(username)s's review" -msgstr "Agregado por %(username)s" +msgstr "respondió a la reseña de %(username)s " -#: bookwyrm/templates/snippets/status/status_header.html:24 -#, fuzzy, python-format -#| msgid "replied to your status" +#: bookwyrm/templates/snippets/status/status_header.html:34 +#, python-format msgid "replied to %(username)s's comment" -msgstr "respondió a tu status" +msgstr "respondió al comentario de %(username)s " -#: bookwyrm/templates/snippets/status/status_header.html:26 -#, fuzzy, python-format -#| msgid "replied to your status" +#: bookwyrm/templates/snippets/status/status_header.html:36 +#, python-format msgid "replied to %(username)s's quote" -msgstr "respondió a tu status" +msgstr "respondió a la cita de %(username)s " -#: bookwyrm/templates/snippets/status/status_header.html:28 -#, fuzzy, python-format -#| msgid "replied to your status" +#: bookwyrm/templates/snippets/status/status_header.html:38 +#, python-format msgid "replied to %(username)s's status" -msgstr "respondió a tu status" +msgstr "respondió al status de %(username)s " #: bookwyrm/templates/snippets/status/status_options.html:7 #: bookwyrm/templates/snippets/user_options.html:7 @@ -2632,26 +2506,26 @@ msgid "More options" msgstr "Más opciones" #: bookwyrm/templates/snippets/status/status_options.html:27 -#, fuzzy -#| msgid "Delete these read dates" msgid "Delete & re-draft" -msgstr "Eliminar estas fechas de lectura" +msgstr "Eliminar y recomponer" + +#: bookwyrm/templates/snippets/status/status_options.html:36 +#: bookwyrm/templates/snippets/user_options.html:13 +#: bookwyrm/templates/user_admin/user_moderation_actions.html:6 +msgid "Send direct message" +msgstr "Enviar mensaje directo" #: bookwyrm/templates/snippets/switch_edition_button.html:5 msgid "Switch to this edition" msgstr "Cambiar a esta edición" #: bookwyrm/templates/snippets/table-sort-header.html:6 -#, fuzzy -#| msgid "Started reading" msgid "Sorted ascending" -msgstr "Lectura se empezó" +msgstr "En orden ascendente" #: bookwyrm/templates/snippets/table-sort-header.html:10 -#, fuzzy -#| msgid "Started reading" msgid "Sorted descending" -msgstr "Lectura se empezó" +msgstr "En orden descendente" #: bookwyrm/templates/snippets/tag.html:14 msgid "Remove tag" @@ -2667,10 +2541,9 @@ msgid "Books tagged \"%(tag.name)s\"" msgstr "Libros etiquetados con \"%(tag.name)s\"" #: bookwyrm/templates/user/books_header.html:5 -#, fuzzy, python-format -#| msgid "%(username)s's %(year)s Books" +#, python-format msgid "%(username)s's books" -msgstr "Los libros de %(username)s para %(year)s" +msgstr "Los libros de %(username)s" #: bookwyrm/templates/user/create_shelf_form.html:5 #: bookwyrm/templates/user/create_shelf_form.html:22 @@ -2714,11 +2587,9 @@ msgstr "Listas: %(username)s" msgid "Create list" msgstr "Crear lista" -#: bookwyrm/templates/user/shelf.html:24 bookwyrm/views/shelf.py:56 -#, fuzzy -#| msgid "books" +#: bookwyrm/templates/user/shelf.html:24 bookwyrm/views/shelf.py:51 msgid "All books" -msgstr "libros" +msgstr "Todos los libros" #: bookwyrm/templates/user/shelf.html:37 msgid "Create shelf" @@ -2753,14 +2624,13 @@ msgid "Edit profile" msgstr "Editar perfil" #: bookwyrm/templates/user/user.html:34 -#, fuzzy, python-format -#| msgid "See all %(size)s" +#, python-format msgid "View all %(size)s" -msgstr "Ver %(size)s" +msgstr "Ver todos los %(size)s" #: bookwyrm/templates/user/user.html:47 msgid "View all books" -msgstr "" +msgstr "Ver todos los libros" #: bookwyrm/templates/user/user.html:59 #, python-format @@ -2788,10 +2658,8 @@ msgid "Reading Goal" msgstr "Meta de lectura" #: bookwyrm/templates/user/user_layout.html:68 -#, fuzzy -#| msgid "Book" msgid "Books" -msgstr "Libro" +msgstr "Libros" #: bookwyrm/templates/user/user_preview.html:13 #, python-format @@ -2810,1364 +2678,948 @@ msgstr[1] "%(counter)s seguidores" msgid "%(counter)s following" msgstr "%(counter)s siguiendo" +#: bookwyrm/templates/user_admin/user.html:11 +msgid "Back to users" +msgstr "Volver a usuarios" + +#: bookwyrm/templates/user_admin/user_admin.html:7 +#, python-format +msgid "Users: %(server_name)s" +msgstr "Usuarios %(server_name)s" + +#: bookwyrm/templates/user_admin/user_admin.html:22 +#: bookwyrm/templates/user_admin/username_filter.html:5 +msgid "Username" +msgstr "Nombre de usuario" + +#: bookwyrm/templates/user_admin/user_admin.html:26 +msgid "Date Added" +msgstr "Fecha agregada" + +#: bookwyrm/templates/user_admin/user_admin.html:30 +msgid "Last Active" +msgstr "Actividad reciente" + +#: bookwyrm/templates/user_admin/user_admin.html:38 +msgid "Remote server" +msgstr "Quitar servidor" + +#: bookwyrm/templates/user_admin/user_admin.html:47 +msgid "Active" +msgstr "Activ@" + +#: bookwyrm/templates/user_admin/user_admin.html:47 +msgid "Inactive" +msgstr "Inactiv@" + +#: bookwyrm/templates/user_admin/user_admin.html:52 +#: bookwyrm/templates/user_admin/user_info.html:49 +msgid "Not set" +msgstr "No establecido" + +#: bookwyrm/templates/user_admin/user_info.html:5 +msgid "User details" +msgstr "Detalles" + +#: bookwyrm/templates/user_admin/user_info.html:14 +msgid "View user profile" +msgstr "Ver perfil de usuario" + +#: bookwyrm/templates/user_admin/user_info.html:20 +msgid "Instance details" +msgstr "Detalles de instancia" + +#: bookwyrm/templates/user_admin/user_info.html:46 +msgid "View instance" +msgstr "Ver instancia" + +#: bookwyrm/templates/user_admin/user_moderation_actions.html:11 +msgid "Suspend user" +msgstr "Suspender usuario" + +#: bookwyrm/templates/user_admin/user_moderation_actions.html:13 +msgid "Un-suspend user" +msgstr "Des-suspender usuario" + +#: bookwyrm/templates/user_admin/user_moderation_actions.html:21 +msgid "Access level:" +msgstr "Nivel de acceso:" + #: bookwyrm/views/password.py:32 -#, fuzzy -#| msgid "A user with that username already exists." msgid "No user with that email address was found." -msgstr "Ya existe un usuario con ese nombre." +msgstr "No se pudo encontrar un usuario con esa dirección de correo electrónico." #: bookwyrm/views/password.py:41 #, python-format msgid "A password reset link sent to %s" -msgstr "" +msgstr "Un enlace para reestablecer tu contraseña se enviará a %s" -#: venv/lib/python3.8/site-packages/_pytest/config/argparsing.py:442 -#, python-format -msgid "ambiguous option: %(option)s could match %(matches)s" -msgstr "" +#~ msgid "Deactivate user" +#~ msgstr "Desactivar usuario" -#: venv/lib/python3.8/site-packages/django/contrib/messages/apps.py:7 +#~ msgid "Reactivate user" +#~ msgstr "Reactivar usuario" + +#~ msgid "ambiguous option: %(option)s could match %(matches)s" +#~ msgstr "opción ambiguo: %(option)s pudiera coincidir con %(matches)s" + +#~ msgid "Messages" +#~ msgstr "Mensajes" + +#~ msgid "Site Maps" +#~ msgstr "Mapas de sitio" + +#~ msgid "Static Files" +#~ msgstr "Archivos estáticos" + +#~ msgid "Syndication" +#~ msgstr "Sindicación" + +#~ msgid "That page number is not an integer" +#~ msgstr "Ese numero de pagina no es un entero" + +#~ msgid "That page number is less than 1" +#~ msgstr "Ese numero de pagina es menos que uno" + +#~ msgid "That page contains no results" +#~ msgstr "Esa pagina no contiene resultados" + +#~ msgid "Enter a valid value." +#~ msgstr "Ingrese un valor válido." + +#~ msgid "Enter a valid URL." +#~ msgstr "Ingrese una URL válida." + +#~ msgid "Enter a valid integer." +#~ msgstr "Ingrese un entero válido." + +#~ msgid "Enter a valid email address." +#~ msgstr "Ingrese una dirección de correo electrónico válida." + +#~ msgid "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." +#~ msgstr "Ingrese un “slug” válido que consiste de letras, numeros, guiones bajos, o guiones" + +#~ msgid "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or hyphens." +#~ msgstr "Ingrese un “slug” válido que consiste de letras Unicode, numeros, guiones bajos, o guiones" + +#~ msgid "Enter a valid IPv4 address." +#~ msgstr "Ingrese una dirección IPv4 válida." + +#~ msgid "Enter a valid IPv6 address." +#~ msgstr "Ingrese una dirección IPv6 válida." + +#~ msgid "Enter a valid IPv4 or IPv6 address." +#~ msgstr "Ingrese una dirección IPv4 o IPv6 válida." + +#~ msgid "Enter only digits separated by commas." +#~ msgstr "Ingrese solo digitos separados por comas." + +#~ msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +#~ msgstr "Asegura que este valor es %(limit_value)s (es %(show_value)s)." + +#~ msgid "Ensure this value is less than or equal to %(limit_value)s." +#~ msgstr "Asegura que este valor es menor que o iguala a %(limit_value)s." + +#~ msgid "Ensure this value is greater than or equal to %(limit_value)s." +#~ msgstr "Asegura que este valor es más que o que iguala a %(limit_value)s." + +#~ msgid "Ensure this value has at least %(limit_value)d character (it has %(show_value)d)." +#~ msgid_plural "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)." +#~ msgstr[0] "Verifica que este valor tiene por lo menos %(limit_value)d carácter. (Tiene %(show_value)d).)" +#~ msgstr[1] "Verifica que este valor tiene por lo menos %(limit_value)d caracteres. (Tiene %(show_value)d).)" + +#~ msgid "Ensure this value has at most %(limit_value)d character (it has %(show_value)d)." +#~ msgid_plural "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)." +#~ msgstr[0] "Verifica que este valor tiene a lo sumo %(limit_value)d carácter. (Tiene %(show_value)d).)" +#~ msgstr[1] "Verifica que este valor tiene a lo sumo %(limit_value)d caracteres. (Tiene %(show_value)d).)" + +#~ msgid "Enter a number." +#~ msgstr "Ingrese un número." + +#~ msgid "Ensure that there are no more than %(max)s digit in total." +#~ msgid_plural "Ensure that there are no more than %(max)s digits in total." +#~ msgstr[0] "Verifica que no hay más que %(max)s digito en total." +#~ msgstr[1] "Verifica que no hay más que %(max)s digitos en total." + +# is +#~ msgid "Ensure that there are no more than %(max)s decimal place." +#~ msgid_plural "Ensure that there are no more than %(max)s decimal places." +#~ msgstr[0] "Verifica que no hay más que %(max)s cifra decimal." +#~ msgstr[1] "Verifica que no hay más que %(max)s cifras decimales." + +#~ msgid "Ensure that there are no more than %(max)s digit before the decimal point." +#~ msgid_plural "Ensure that there are no more than %(max)s digits before the decimal point." +#~ msgstr[0] "Verifica que no hay más que %(max)s digito antes de la coma decimal." +#~ msgstr[1] "Verifica que no hay más que %(max)s digitos antes de la coma decimal." + +#~ msgid "File extension “%(extension)s” is not allowed. Allowed extensions are: %(allowed_extensions)s." +#~ msgstr "No se permite la extensión de archivo “%(extension)s”. Extensiones permitidas son: %(allowed_extensions)s." + +#~ msgid "Null characters are not allowed." +#~ msgstr "No se permiten caracteres nulos" + +#~ msgid "and" +#~ msgstr "y" + +#~ msgid "%(model_name)s with this %(field_labels)s already exists." +#~ msgstr "Ya existe %(model_name)s con este %(field_labels)s." + +#~ msgid "Value %(value)r is not a valid choice." +#~ msgstr "El valor %(value)s no es una opción válida." + +#~ msgid "This field cannot be null." +#~ msgstr "Este campo no puede ser nulo." + +#~ msgid "This field cannot be blank." +#~ msgstr "Este campo no puede ser vacio." + +#~ msgid "%(model_name)s with this %(field_label)s already exists." +#~ msgstr "Ya existe %(model_name)s con este %(field_labels)s." + +#~ msgid "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +#~ msgstr "%(field_label)s deben ser unicos por %(date_field_label)s %(lookup_type)s." + +#~ msgid "Field of type: %(field_type)s" +#~ msgstr "Campo de tipo: %(field_type)s" + +#~ msgid "“%(value)s” value must be either True or False." +#~ msgstr "“%(value)s” valor debe ser o verdadero o falso." + +#~ msgid "“%(value)s” value must be either True, False, or None." +#~ msgstr "%(value)s” valor debe ser o True, False, o None." + +#~ msgid "Boolean (Either True or False)" +#~ msgstr "Booleano (O True O False)" + +#~ msgid "String (up to %(max_length)s)" +#~ msgstr "Cadena (máximo de %(max_length)s caracteres)" + +#~ msgid "Comma-separated integers" +#~ msgstr "Enteros separados por comas" + +#~ msgid "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD format." +#~ msgstr "“%(value)s” valor tiene un formato de fecha inválido. Hay que estar de formato YYYY-MM-DD." + +#~ msgid "“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid date." +#~ msgstr "“%(value)s” valor tiene el formato correcto (YYYY-MM-DD) pero la fecha es invalida." + +#~ msgid "Date (without time)" +#~ msgstr "Fecha (sin la hora)" + +#~ msgid "“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format." +#~ msgstr "“%(value)s” valor tiene un formato invalido. Debe estar en formato YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#~ msgid "“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time." +#~ msgstr "“%(value)s” valor tiene el formato correcto (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) pero es una fecha/hora invalida." + +#~ msgid "Date (with time)" +#~ msgstr "Fecha (con la hora)" + +#~ msgid "“%(value)s” value must be a decimal number." +#~ msgstr "El valor de “%(value)s” debe ser un número decimal." + +#~ msgid "Decimal number" +#~ msgstr "Número decimal" + +#~ msgid "“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[.uuuuuu] format." +#~ msgstr "“%(value)s” valor tiene un formato invalido. Debe estar en formato [DD] [[HH:]MM:]ss[.uuuuuu]." + +#~ msgid "Duration" +#~ msgstr "Duración" + +#~ msgid "Email address" +#~ msgstr "Dirección de correo electrónico" + +#~ msgid "File path" +#~ msgstr "Ruta de archivo" + +#~ msgid "“%(value)s” value must be a float." +#~ msgstr "%(value)s no es un usuario válido" + +#~ msgid "Floating point number" +#~ msgstr "Número de coma flotante" + +#~ msgid "“%(value)s” value must be an integer." +#~ msgstr "“%(value)s” valor debe ser un entero." + +#~ msgid "Integer" +#~ msgstr "Entero" + +#~ msgid "Big (8 byte) integer" +#~ msgstr "Entero grande (8 byte)" + +#~ msgid "IPv4 address" +#~ msgstr "Dirección IPv4" + +#~ msgid "IP address" +#~ msgstr "Dirección IP" + +#~ msgid "“%(value)s” value must be either None, True or False." +#~ msgstr "Valor “%(value)s” debe ser o None, True, o False." + +#~ msgid "Boolean (Either True, False or None)" +#~ msgstr "Booleano (O True, Falso, o None)" + +#~ msgid "Positive big integer" +#~ msgstr "Entero positivo grande" + +#~ msgid "Positive integer" +#~ msgstr "Entero positivo" + +#~ msgid "Positive small integer" +#~ msgstr "Entero positivo pequeño " + +#~ msgid "Slug (up to %(max_length)s)" +#~ msgstr "Slug (máximo de %(max_length)s)" + +#~ msgid "Small integer" +#~ msgstr "Entero pequeño" + +#~ msgid "Text" +#~ msgstr "Texto" + +#~ msgid "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format." +#~ msgstr "“%(value)s” valor tiene un formato invalido. Debe estar en formato HH:MM[:ss[.uuuuuu]]." + +#~ msgid "“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time." +#~ msgstr "“%(value)s” valor tiene el formato correcto (HH:MM[:ss[.uuuuuu]]) pero es una hora invalida." + +#~ msgid "Time" +#~ msgstr "Tiempo" + +#~ msgid "URL" +#~ msgstr "URL" + +#~ msgid "Raw binary data" +#~ msgstr "Datos binarios sin procesar" + +#~ msgid "“%(value)s” is not a valid UUID." +#~ msgstr "%(value)s no es una UUID válida." + +#~ msgid "Universally unique identifier" +#~ msgstr "Identificador universalmente único" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Image" +#~ msgstr "Imágen" + +#~ msgid "A JSON object" +#~ msgstr "Un objeto JSON" + +#~ msgid "Value must be valid JSON." +#~ msgstr "Valor debe ser JSON válido." + +#~ msgid "%(model)s instance with %(field)s %(value)r does not exist." +#~ msgstr "%(model)s instancia con %(field)s %(value)r no existe." + +#~ msgid "Foreign Key (type determined by related field)" +#~ msgstr "Clave externa (tipo determinado por campo relacionado)" + +#~ msgid "One-to-one relationship" +#~ msgstr "Relación uno-a-uno" + +#~ msgid "%(from)s-%(to)s relationship" +#~ msgstr "relación %(from)s-%(to)s" + +#~ msgid "%(from)s-%(to)s relationships" +#~ msgstr "relaciones %(from)s-%(to)s" + +#~ msgid "Many-to-many relationship" +#~ msgstr "Relaciones mucho-a-mucho" + +#~ msgid "This field is required." +#~ msgstr "Este campo es requerido." + +#~ msgid "Enter a whole number." +#~ msgstr "Ingrese un número entero." + +#~ msgid "Enter a valid date." +#~ msgstr "Ingrese una fecha válida." + +#~ msgid "Enter a valid time." +#~ msgstr "Ingrese una hora válida." + +#~ msgid "Enter a valid date/time." +#~ msgstr "Ingrese una fecha/hora válida." + +#~ msgid "Enter a valid duration." +#~ msgstr "Ingrese una duración válida." + +#~ msgid "The number of days must be between {min_days} and {max_days}." +#~ msgstr "El número de dias debe ser entre {min_days} y {max_days}." + +#~ msgid "No file was submitted. Check the encoding type on the form." +#~ msgstr "No se aceptó ningun archivo. Verfica el tipo de codificación en el formulario." + +#~ msgid "No file was submitted." +#~ msgstr "No se aceptó ningun archivo." + +#~ msgid "The submitted file is empty." +#~ msgstr "El archivo enviado está vacio." + +#~ msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +#~ msgid_plural "Ensure this filename has at most %(max)d characters (it has %(length)d)." +#~ msgstr[0] "Verifica que este nombre de archivo no tiene más que %(max)d carácter. (Tiene %(length)d)." +#~ msgstr[1] "Verifica que este nombre de archivo no tiene más que %(max)d caracteres. (Tiene %(length)d)." + +#~ msgid "Please either submit a file or check the clear checkbox, not both." +#~ msgstr "Por favor, o envia un archivo o marca la casilla vacia, no los dos." + +#~ msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image." +#~ msgstr "Subir una imagen válida. El archivo que subiste o no fue imagen o fue corrupto." + +#~ msgid "Select a valid choice. %(value)s is not one of the available choices." +#~ msgstr "Selecciona una opción válida. %(value)s no es una de las opciones disponibles." + +#~ msgid "Enter a list of values." +#~ msgstr "Ingrese una lista de valores." + +#~ msgid "Enter a complete value." +#~ msgstr "Ingresa un valor completo." + +#~ msgid "Enter a valid UUID." +#~ msgstr "Ingrese una UUID válida." + +#~ msgid "Enter a valid JSON." +#~ msgstr "Ingrese una JSON válida." + +#~ msgid ":" +#~ msgstr ":" + +#~ msgid "(Hidden field %(name)s) %(error)s" +#~ msgstr "(Campo oculto %(name)s) %(error)s" + +#~ msgid "ManagementForm data is missing or has been tampered with" +#~ msgstr "Datos de ManagementForm está ausento o ha sido corrompido" + +#~ msgid "Please submit %d or fewer forms." +#~ msgid_plural "Please submit %d or fewer forms." +#~ msgstr[0] "Por favor, enviar %d o menos formularios." +#~ msgstr[1] "Por favor, enviar %d o menos formularios." + +#~ msgid "Please submit %d or more forms." +#~ msgid_plural "Please submit %d or more forms." +#~ msgstr[0] "Por favor, enviar %d o más formularios." +#~ msgstr[1] "Por favor, enviar %d o más formularios." + +# TODO cc @mouse is this a verb or noun #, fuzzy -#| msgid "All messages" -msgid "Messages" -msgstr "Todos los mensajes" - -#: venv/lib/python3.8/site-packages/django/contrib/sitemaps/apps.py:7 -msgid "Site Maps" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/contrib/staticfiles/apps.py:9 -msgid "Static Files" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/contrib/syndication/apps.py:7 -msgid "Syndication" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/paginator.py:48 -msgid "That page number is not an integer" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/paginator.py:50 -msgid "That page number is less than 1" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/paginator.py:55 -msgid "That page contains no results" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:20 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid value." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:91 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:671 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid URL." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:145 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid integer." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:156 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid email address." -msgstr "Dirección de correo electrónico:" - -#. Translators: "letters" means latin letters: a-z and A-Z. -#: venv/lib/python3.8/site-packages/django/core/validators.py:230 -msgid "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:237 -msgid "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or hyphens." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:246 -#: venv/lib/python3.8/site-packages/django/core/validators.py:266 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid IPv4 address." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:251 -#: venv/lib/python3.8/site-packages/django/core/validators.py:267 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid IPv6 address." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:261 -#: venv/lib/python3.8/site-packages/django/core/validators.py:265 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid IPv4 or IPv6 address." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:295 -msgid "Enter only digits separated by commas." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:301 -#, python-format -msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:334 -#, python-format -msgid "Ensure this value is less than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:343 -#, python-format -msgid "Ensure this value is greater than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:353 -#, python-format -msgid "Ensure this value has at least %(limit_value)d character (it has %(show_value)d)." -msgid_plural "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:368 -#, python-format -msgid "Ensure this value has at most %(limit_value)d character (it has %(show_value)d)." -msgid_plural "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:387 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:292 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:327 -#, fuzzy -#| msgid "Series number:" -msgid "Enter a number." -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:389 -#, python-format -msgid "Ensure that there are no more than %(max)s digit in total." -msgid_plural "Ensure that there are no more than %(max)s digits in total." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:394 -#, python-format -msgid "Ensure that there are no more than %(max)s decimal place." -msgid_plural "Ensure that there are no more than %(max)s decimal places." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:399 -#, python-format -msgid "Ensure that there are no more than %(max)s digit before the decimal point." -msgid_plural "Ensure that there are no more than %(max)s digits before the decimal point." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:461 -#, python-format -msgid "File extension “%(extension)s” is not allowed. Allowed extensions are: %(allowed_extensions)s." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/core/validators.py:513 -msgid "Null characters are not allowed." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/base.py:1190 -#: venv/lib/python3.8/site-packages/django/forms/models.py:760 -msgid "and" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/base.py:1192 -#, fuzzy, python-format -#| msgid "A user with that username already exists." -msgid "%(model_name)s with this %(field_labels)s already exists." -msgstr "Ya existe un usuario con ese nombre." - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:100 -#, fuzzy, python-format -#| msgid "%(value)s is not a valid remote_id" -msgid "Value %(value)r is not a valid choice." -msgstr "%(value)s no es un remote_id válido" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:101 -#, fuzzy -#| msgid "This shelf is empty." -msgid "This field cannot be null." -msgstr "Este estante está vacio." - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:102 -msgid "This field cannot be blank." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:103 -#, fuzzy, python-format -#| msgid "A user with that username already exists." -msgid "%(model_name)s with this %(field_label)s already exists." -msgstr "Ya existe un usuario con ese nombre." - -#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. -#. Eg: "Title must be unique for pub_date year" -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:107 -#, python-format -msgid "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:126 -#, python-format -msgid "Field of type: %(field_type)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:939 -#, python-format -msgid "“%(value)s” value must be either True or False." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:940 -#, python-format -msgid "“%(value)s” value must be either True, False, or None." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:942 -msgid "Boolean (Either True or False)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:983 -#, python-format -msgid "String (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1047 -#, fuzzy -#| msgid "No active invites" -msgid "Comma-separated integers" -msgstr "No invitaciónes activas" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1096 -#, python-format -msgid "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD format." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1098 -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1241 -#, python-format -msgid "“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid date." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1101 -msgid "Date (without time)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1239 -#, python-format -msgid "“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1243 -#, python-format -msgid "“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1247 -msgid "Date (with time)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1395 -#, fuzzy, python-format -#| msgid "%(value)s is not a valid username" -msgid "“%(value)s” value must be a decimal number." -msgstr "%(value)s no es un usuario válido" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1397 -#, fuzzy -#| msgid "Series number:" -msgid "Decimal number" -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1536 -#, python-format -msgid "“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[.uuuuuu] format." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1539 -#, fuzzy -#| msgid "List curation:" -msgid "Duration" -msgstr "Enumerar lista de comisariado:" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1589 -#, fuzzy -#| msgid "Email address:" -msgid "Email address" -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1612 -msgid "File path" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1678 -#, fuzzy, python-format -#| msgid "%(value)s is not a valid username" -msgid "“%(value)s” value must be a float." -msgstr "%(value)s no es un usuario válido" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1680 -msgid "Floating point number" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1718 -#, python-format -msgid "“%(value)s” value must be an integer." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1720 -msgid "Integer" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1803 -#, fuzzy -#| msgid "No active invites" -msgid "Big (8 byte) integer" -msgstr "No invitaciónes activas" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1819 -#, fuzzy -#| msgid "Email address:" -msgid "IPv4 address" -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1850 -#, fuzzy -#| msgid "Email address:" -msgid "IP address" -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1930 -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1931 -#, python-format -msgid "“%(value)s” value must be either None, True or False." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1933 -msgid "Boolean (Either True, False or None)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1976 -#, fuzzy -#| msgid "No active invites" -msgid "Positive big integer" -msgstr "No invitaciónes activas" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:1989 -#, fuzzy -#| msgid "No active invites" -msgid "Positive integer" -msgstr "No invitaciónes activas" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2002 -#, fuzzy -#| msgid "No active invites" -msgid "Positive small integer" -msgstr "No invitaciónes activas" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2016 -#, python-format -msgid "Slug (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2048 -msgid "Small integer" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2055 -msgid "Text" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2083 -#, python-format -msgid "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2085 -#, python-format -msgid "“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2088 -msgid "Time" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2214 -msgid "URL" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2236 -msgid "Raw binary data" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2301 -#, fuzzy, python-format -#| msgid "%(value)s is not a valid username" -msgid "“%(value)s” is not a valid UUID." -msgstr "%(value)s no es un usuario válido" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/__init__.py:2303 -msgid "Universally unique identifier" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/files.py:231 -msgid "File" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/files.py:379 -#, fuzzy -#| msgid "Images" -msgid "Image" -msgstr "Imagenes" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/json.py:18 -msgid "A JSON object" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/json.py:20 -msgid "Value must be valid JSON." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/related.py:790 -#, python-format -msgid "%(model)s instance with %(field)s %(value)r does not exist." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/related.py:792 -msgid "Foreign Key (type determined by related field)" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/related.py:1045 -#, fuzzy -#| msgid "Relationships" -msgid "One-to-one relationship" -msgstr "Relaciones" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/related.py:1099 -#, fuzzy, python-format -#| msgid "Relationships" -msgid "%(from)s-%(to)s relationship" -msgstr "Relaciones" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/related.py:1100 -#, fuzzy, python-format -#| msgid "Relationships" -msgid "%(from)s-%(to)s relationships" -msgstr "Relaciones" - -#: venv/lib/python3.8/site-packages/django/db/models/fields/related.py:1142 -#, fuzzy -#| msgid "Relationships" -msgid "Many-to-many relationship" -msgstr "Relaciones" - -#. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the label -#: venv/lib/python3.8/site-packages/django/forms/boundfield.py:150 -msgid ":?.!" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:54 -#, fuzzy -#| msgid "This shelf is empty." -msgid "This field is required." -msgstr "Este estante está vacio." - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:247 -#, fuzzy -#| msgid "Series number:" -msgid "Enter a whole number." -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:398 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:1139 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid date." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:422 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:1140 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid time." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:450 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid date/time." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:484 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid duration." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:485 -#, python-brace-format -msgid "The number of days must be between {min_days} and {max_days}." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:545 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:546 -msgid "No file was submitted." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:547 -#, fuzzy -#| msgid "This shelf is empty." -msgid "The submitted file is empty." -msgstr "Este estante está vacio." - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:549 -#, python-format -msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." -msgid_plural "Ensure this filename has at most %(max)d characters (it has %(length)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:552 -msgid "Please either submit a file or check the clear checkbox, not both." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:613 -msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:775 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:865 -#: venv/lib/python3.8/site-packages/django/forms/models.py:1296 -#, python-format -msgid "Select a valid choice. %(value)s is not one of the available choices." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:866 -#: venv/lib/python3.8/site-packages/django/forms/fields.py:981 -#: venv/lib/python3.8/site-packages/django/forms/models.py:1295 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a list of values." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:982 -msgid "Enter a complete value." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:1198 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid UUID." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/forms/fields.py:1228 -#, fuzzy -#| msgid "Email address:" -msgid "Enter a valid JSON." -msgstr "Dirección de correo electrónico:" - -#. Translators: This is the default suffix added to form field labels -#: venv/lib/python3.8/site-packages/django/forms/forms.py:78 -msgid ":" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/forms.py:205 -#, python-format -msgid "(Hidden field %(name)s) %(error)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/formsets.py:93 -msgid "ManagementForm data is missing or has been tampered with" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/formsets.py:345 -#, python-format -msgid "Please submit %d or fewer forms." -msgid_plural "Please submit %d or fewer forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/forms/formsets.py:352 -#, python-format -msgid "Please submit %d or more forms." -msgid_plural "Please submit %d or more forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/forms/formsets.py:379 -#: venv/lib/python3.8/site-packages/django/forms/formsets.py:386 -msgid "Order" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:755 -#, python-format -msgid "Please correct the duplicate data for %(field)s." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:759 -#, python-format -msgid "Please correct the duplicate data for %(field)s, which must be unique." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:765 -#, python-format -msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:774 -msgid "Please correct the duplicate values below." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:1096 -msgid "The inline value did not match the parent instance." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:1180 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/models.py:1298 -#, fuzzy, python-format -#| msgid "%(value)s is not a valid username" -msgid "“%(pk)s” is not a valid value." -msgstr "%(value)s no es un usuario válido" - -#: venv/lib/python3.8/site-packages/django/forms/utils.py:167 -#, python-format -msgid "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it may be ambiguous or it may not exist." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/widgets.py:398 -msgid "Clear" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/widgets.py:399 -#, fuzzy -#| msgid "Currently Reading" -msgid "Currently" -msgstr "Leyendo actualmente" - -#: venv/lib/python3.8/site-packages/django/forms/widgets.py:400 -#, fuzzy -#| msgid "Change shelf" -msgid "Change" -msgstr "Cambiar estante" - -#: venv/lib/python3.8/site-packages/django/forms/widgets.py:709 -msgid "Unknown" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/widgets.py:710 -msgid "Yes" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/forms/widgets.py:711 -msgid "No" -msgstr "" - -#. Translators: Please do not add spaces around commas. -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:790 -msgid "yes,no,maybe" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:819 -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:836 -#, python-format -msgid "%(size)d byte" -msgid_plural "%(size)d bytes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:838 -#, python-format -msgid "%s KB" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:840 -#, python-format -msgid "%s MB" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:842 -#, python-format -msgid "%s GB" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:844 -#, python-format -msgid "%s TB" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/template/defaultfilters.py:846 -#, python-format -msgid "%s PB" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dateformat.py:65 -msgid "p.m." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dateformat.py:66 -msgid "a.m." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dateformat.py:71 -msgid "PM" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dateformat.py:72 -msgid "AM" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dateformat.py:149 -msgid "midnight" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dateformat.py:151 -msgid "noon" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:6 -#: venv/lib/python3.8/site-packages/tornado/locale.py:295 -msgid "Monday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:6 -#: venv/lib/python3.8/site-packages/tornado/locale.py:296 -msgid "Tuesday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:6 -#: venv/lib/python3.8/site-packages/tornado/locale.py:297 -msgid "Wednesday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:6 -#: venv/lib/python3.8/site-packages/tornado/locale.py:298 -msgid "Thursday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:6 -#: venv/lib/python3.8/site-packages/tornado/locale.py:299 -msgid "Friday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:7 -#: venv/lib/python3.8/site-packages/tornado/locale.py:300 -msgid "Saturday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:7 -#: venv/lib/python3.8/site-packages/tornado/locale.py:301 -msgid "Sunday" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:10 -msgid "Mon" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:10 -msgid "Tue" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:10 -msgid "Wed" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:10 -msgid "Thu" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:10 -msgid "Fri" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:11 -#, fuzzy -#| msgid "Status" -msgid "Sat" -msgstr "Status" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:11 -msgid "Sun" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:14 -#: venv/lib/python3.8/site-packages/tornado/locale.py:281 -msgid "January" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:14 -#: venv/lib/python3.8/site-packages/tornado/locale.py:282 -msgid "February" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:14 -#: venv/lib/python3.8/site-packages/tornado/locale.py:283 -#, fuzzy -#| msgid "Search" -msgid "March" -msgstr "Buscar" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:14 -#: venv/lib/python3.8/site-packages/tornado/locale.py:284 -msgid "April" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:14 -#: venv/lib/python3.8/site-packages/tornado/locale.py:285 -msgid "May" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:14 -#: venv/lib/python3.8/site-packages/tornado/locale.py:286 -msgid "June" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:15 -#: venv/lib/python3.8/site-packages/tornado/locale.py:287 -msgid "July" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:15 -#: venv/lib/python3.8/site-packages/tornado/locale.py:288 -msgid "August" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:15 -#: venv/lib/python3.8/site-packages/tornado/locale.py:289 -#, fuzzy -#| msgid "Series number:" -msgid "September" -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:15 -#: venv/lib/python3.8/site-packages/tornado/locale.py:290 -msgid "October" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:15 -#: venv/lib/python3.8/site-packages/tornado/locale.py:291 -msgid "November" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:16 -#: venv/lib/python3.8/site-packages/tornado/locale.py:292 -#, fuzzy -#| msgid "Series number:" -msgid "December" -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:19 -msgid "jan" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:19 -msgid "feb" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:19 -msgid "mar" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:19 -msgid "apr" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:19 -msgid "may" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:19 -msgid "jun" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:20 -msgid "jul" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:20 -msgid "aug" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:20 -msgid "sep" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:20 -msgid "oct" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:20 -msgid "nov" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:20 -msgid "dec" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:23 -msgctxt "abbrev. month" -msgid "Jan." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:24 -msgctxt "abbrev. month" -msgid "Feb." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:25 -#, fuzzy -#| msgid "Search" -msgctxt "abbrev. month" -msgid "March" -msgstr "Buscar" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:26 -msgctxt "abbrev. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:27 -msgctxt "abbrev. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:28 -msgctxt "abbrev. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:29 -msgctxt "abbrev. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:30 -msgctxt "abbrev. month" -msgid "Aug." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:31 -msgctxt "abbrev. month" -msgid "Sept." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:32 -msgctxt "abbrev. month" -msgid "Oct." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:33 -msgctxt "abbrev. month" -msgid "Nov." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:34 -msgctxt "abbrev. month" -msgid "Dec." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:37 -msgctxt "alt. month" -msgid "January" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:38 -msgctxt "alt. month" -msgid "February" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:39 -#, fuzzy -#| msgid "Search" -msgctxt "alt. month" -msgid "March" -msgstr "Buscar" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:40 -msgctxt "alt. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:41 -msgctxt "alt. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:42 -msgctxt "alt. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:43 -msgctxt "alt. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:44 -msgctxt "alt. month" -msgid "August" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:45 -#, fuzzy -#| msgid "Series number:" -msgctxt "alt. month" -msgid "September" -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:46 -msgctxt "alt. month" -msgid "October" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:47 -msgctxt "alt. month" -msgid "November" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/dates.py:48 -#, fuzzy -#| msgid "Series number:" -msgctxt "alt. month" -msgid "December" -msgstr "Número de serie:" - -#: venv/lib/python3.8/site-packages/django/utils/ipv6.py:8 -#, fuzzy -#| msgid "Email address:" -msgid "This is not a valid IPv6 address." -msgstr "Dirección de correo electrónico:" - -#: venv/lib/python3.8/site-packages/django/utils/text.py:70 -#, python-format -msgctxt "String to return when truncating text" -msgid "%(truncated_text)s…" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/text.py:236 -msgid "or" -msgstr "" - -#. Translators: This string is used as a separator between list elements -#: venv/lib/python3.8/site-packages/django/utils/text.py:255 -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:83 -msgid ", " -msgstr "" - -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:9 -#, python-format -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:10 -#, python-format -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:11 -#, python-format -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:12 -#, python-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:13 -#, python-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/utils/timesince.py:14 -#, python-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:110 -msgid "Forbidden" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:111 -msgid "CSRF verification failed. Request aborted." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:115 -msgid "You are seeing this message because this HTTPS site requires a “Referer header” to be sent by your Web browser, but none was sent. This header is required for security reasons, to ensure that your browser is not being hijacked by third parties." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:120 -msgid "If you have configured your browser to disable “Referer” headers, please re-enable them, at least for this site, or for HTTPS connections, or for “same-origin” requests." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:124 -msgid "If you are using the tag or including the “Referrer-Policy: no-referrer” header, please remove them. The CSRF protection requires the “Referer” header to do strict referer checking. If you’re concerned about privacy, use alternatives like for links to third-party sites." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:132 -msgid "You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:137 -msgid "If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for “same-origin” requests." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/csrf.py:142 -msgid "More information is available with DEBUG=True." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:41 -msgid "No year specified" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:61 -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:111 -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:208 -msgid "Date out of range" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:90 -msgid "No month specified" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:142 -msgid "No day specified" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:188 -msgid "No week specified" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:338 -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:367 -#, python-format -msgid "No %(verbose_name_plural)s available" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:589 -#, python-format -msgid "Future %(verbose_name_plural)s not available because %(class_name)s.allow_future is False." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/dates.py:623 -#, python-format -msgid "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/detail.py:54 -#, fuzzy, python-format -#| msgid "No books found matching the query \"%(query)s\"" -msgid "No %(verbose_name)s found matching the query" -msgstr "No se encontró ningún libro correspondiente a la búsqueda: \"%(query)s\"" - -#: venv/lib/python3.8/site-packages/django/views/generic/list.py:67 -msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/list.py:72 -#, python-format -msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/generic/list.py:154 -#, python-format -msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/static.py:40 -msgid "Directory indexes are not allowed here." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/static.py:42 -#, fuzzy, python-format -#| msgid "%(value)s is not a valid username" -msgid "“%(path)s” does not exist" -msgstr "%(value)s no es un usuario válido" - -#: venv/lib/python3.8/site-packages/django/views/static.py:80 -#, python-format -msgid "Index of %(directory)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:7 -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:346 -#, python-format -msgid "View release notes for Django %(version)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:368 -msgid "The install worked successfully! Congratulations!" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:369 -#, python-format -msgid "You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs." -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:384 -msgid "Django Documentation" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:385 -msgid "Topics, references, & how-to’s" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:396 -msgid "Tutorial: A Polling App" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:397 -msgid "Get started with Django" -msgstr "" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:408 -#, fuzzy -#| msgid "Comment" -msgid "Django Community" -msgstr "Comentario" - -#: venv/lib/python3.8/site-packages/django/views/templates/default_urlconf.html:409 -msgid "Connect, get help, or contribute" -msgstr "" - -#: venv/lib/python3.8/site-packages/kombu/transport/qpid.py:1301 -#, python-format -msgid "Attempting to connect to qpid with SASL mechanism %s" -msgstr "" - -#: venv/lib/python3.8/site-packages/kombu/transport/qpid.py:1306 -#, python-format -msgid "Connected to qpid with SASL mechanism %s" -msgstr "" - -#: venv/lib/python3.8/site-packages/kombu/transport/qpid.py:1324 -#, python-format -msgid "Unable to connect to qpid with SASL mechanism %s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:371 -msgid "1 second ago" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:377 -msgid "1 minute ago" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:382 -msgid "1 hour ago" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:385 -#, python-format -msgid "%(time)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:387 -msgid "yesterday" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:387 -#, python-format -msgid "yesterday at %(time)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:389 -#, python-format -msgid "%(weekday)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:389 -#, python-format -msgid "%(weekday)s at %(time)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:392 -#: venv/lib/python3.8/site-packages/tornado/locale.py:445 -#, python-format -msgid "%(month_name)s %(day)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:394 -#, python-format -msgid "%(month_name)s %(day)s at %(time)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:399 -#, python-format -msgid "%(month_name)s %(day)s, %(year)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:401 -#, python-format -msgid "%(month_name)s %(day)s, %(year)s at %(time)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:439 -#, python-format -msgid "%(weekday)s, %(month_name)s %(day)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/locale.py:462 -#, python-format -msgid "%(commas)s and %(last)s" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/test/locale_test.py:68 -msgctxt "law" -msgid "right" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/test/locale_test.py:69 -msgctxt "good" -msgid "right" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/test/locale_test.py:71 -#: venv/lib/python3.8/site-packages/tornado/test/locale_test.py:74 -msgctxt "organization" -msgid "club" -msgstr "" - -#: venv/lib/python3.8/site-packages/tornado/test/locale_test.py:76 -#: venv/lib/python3.8/site-packages/tornado/test/locale_test.py:77 -msgctxt "stick" -msgid "club" -msgstr "" +#~ msgid "Order" +#~ msgstr "Pedir" + +# if verb +# msgstr "Pedido" # if noun +#~ msgid "Please correct the duplicate data for %(field)s." +#~ msgstr "Por favor corrige los datos duplicados en %(field)s." + +#~ msgid "Please correct the duplicate data for %(field)s, which must be unique." +#~ msgstr "Por favor corrige los datos duplicados en %(field)s, los cuales deben ser unicos." + +#~ msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s." +#~ msgstr "Por favor corrige los datos duplicados en %(field_name)s los cuales deben ser unicos por el %(lookup)s en %(date_field)s." + +#~ msgid "Please correct the duplicate values below." +#~ msgstr "Por favor corrige los valores duplicados a continuación." + +#~ msgid "The inline value did not match the parent instance." +#~ msgstr "El valor en línea no empareja la instancia progenitor." + +#~ msgid "Select a valid choice. That choice is not one of the available choices." +#~ msgstr "Selecciona una opción válida. Esa opción no es una de las opciones disponibles." + +#~ msgid "“%(pk)s” is not a valid value." +#~ msgstr "“%(pk)s” no es un valor válido." + +#~ msgid "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it may be ambiguous or it may not exist." +#~ msgstr "%(datetime)s no se pudo interpretar en la zona horaria %(current_timezone)s; puede ser ambiguo o puede que no exista." + +#~ msgid "Clear" +#~ msgstr "Borrar" + +#~ msgid "Currently" +#~ msgstr "Actualmente" + +#~ msgid "Change" +#~ msgstr "Cambiar" + +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgid "Yes" +#~ msgstr "Sí" + +#~ msgid "No" +#~ msgstr "No" + +#~ msgid "yes,no,maybe" +#~ msgstr "sí,no,quizás" + +#~ msgid "%(size)d byte" +#~ msgid_plural "%(size)d bytes" +#~ msgstr[0] "%(size)d byte" +#~ msgstr[1] "%(size)d bytes" + +#~ msgid "%s KB" +#~ msgstr "%s KB" + +#~ msgid "%s MB" +#~ msgstr "%s MB" + +#~ msgid "%s GB" +#~ msgstr "%s GB" + +#~ msgid "%s TB" +#~ msgstr "%s TB" + +#~ msgid "%s PB" +#~ msgstr "%s PB" + +#~ msgid "p.m." +#~ msgstr "p.m." + +#~ msgid "a.m." +#~ msgstr "a.m." + +#~ msgid "PM" +#~ msgstr "PM" + +#~ msgid "AM" +#~ msgstr "AM" + +#~ msgid "midnight" +#~ msgstr "medianoche" + +#~ msgid "noon" +#~ msgstr "mediodia" + +#~ msgid "Monday" +#~ msgstr "Lunes" + +#~ msgid "Tuesday" +#~ msgstr "Martes" + +#~ msgid "Wednesday" +#~ msgstr "Miercoles" + +#~ msgid "Thursday" +#~ msgstr "Jueves" + +#~ msgid "Friday" +#~ msgstr "Viernes" + +#~ msgid "Saturday" +#~ msgstr "Sábado" + +#~ msgid "Sunday" +#~ msgstr "Domino" + +#~ msgid "Mon" +#~ msgstr "Lun" + +#~ msgid "Tue" +#~ msgstr "Mar" + +#~ msgid "Wed" +#~ msgstr "Mie" + +#~ msgid "Thu" +#~ msgstr "Jue" + +#~ msgid "Fri" +#~ msgstr "Vie" + +#~ msgid "Sat" +#~ msgstr "Sáb" + +#~ msgid "Sun" +#~ msgstr "Dom" + +#~ msgid "January" +#~ msgstr "Enero" + +#~ msgid "February" +#~ msgstr "Febrero" + +#~ msgid "March" +#~ msgstr "Marzo" + +#~ msgid "April" +#~ msgstr "Abril" + +#~ msgid "May" +#~ msgstr "Mayo" + +#~ msgid "June" +#~ msgstr "Junio" + +#~ msgid "July" +#~ msgstr "Julio" + +#~ msgid "August" +#~ msgstr "Agosto" + +#~ msgid "September" +#~ msgstr "Septiembre" + +#~ msgid "October" +#~ msgstr "Octubre" + +#~ msgid "November" +#~ msgstr "Noviembre" + +#~ msgid "December" +#~ msgstr "Diciembre" + +#~ msgid "jan" +#~ msgstr "ene" + +#~ msgid "feb" +#~ msgstr "feb" + +#~ msgid "mar" +#~ msgstr "mar" + +#~ msgid "apr" +#~ msgstr "abr" + +#~ msgid "may" +#~ msgstr "may" + +#~ msgid "jun" +#~ msgstr "jun" + +#~ msgid "jul" +#~ msgstr "jul" + +#~ msgid "aug" +#~ msgstr "ago" + +#~ msgid "sep" +#~ msgstr "sep" + +#~ msgid "oct" +#~ msgstr "oct" + +#~ msgid "nov" +#~ msgstr "nov" + +#~ msgid "dec" +#~ msgstr "dic" + +#~ msgctxt "abbrev. month" +#~ msgid "Jan." +#~ msgstr "en." + +#~ msgctxt "abbrev. month" +#~ msgid "Feb." +#~ msgstr "feb." + +#~ msgctxt "abbrev. month" +#~ msgid "March" +#~ msgstr "mzo." + +#~ msgctxt "abbrev. month" +#~ msgid "April" +#~ msgstr "abr." + +#~ msgctxt "abbrev. month" +#~ msgid "May" +#~ msgstr "my." + +#~ msgctxt "abbrev. month" +#~ msgid "June" +#~ msgstr "jun." + +#~ msgctxt "abbrev. month" +#~ msgid "July" +#~ msgstr "jul." + +#~ msgctxt "abbrev. month" +#~ msgid "Aug." +#~ msgstr "agto." + +#~ msgctxt "abbrev. month" +#~ msgid "Sept." +#~ msgstr "set." + +#~ msgctxt "abbrev. month" +#~ msgid "Oct." +#~ msgstr "oct." + +#~ msgctxt "abbrev. month" +#~ msgid "Nov." +#~ msgstr "nov." + +#~ msgctxt "abbrev. month" +#~ msgid "Dec." +#~ msgstr "dic." + +#~ msgctxt "alt. month" +#~ msgid "January" +#~ msgstr "Enero" + +#~ msgctxt "alt. month" +#~ msgid "February" +#~ msgstr "Febrero" + +#~ msgctxt "alt. month" +#~ msgid "March" +#~ msgstr "Marzo" + +#~ msgctxt "alt. month" +#~ msgid "April" +#~ msgstr "Abril" + +#~ msgctxt "alt. month" +#~ msgid "May" +#~ msgstr "Mayo" + +#~ msgctxt "alt. month" +#~ msgid "June" +#~ msgstr "Junio" + +#~ msgctxt "alt. month" +#~ msgid "July" +#~ msgstr "Julio" + +#~ msgctxt "alt. month" +#~ msgid "August" +#~ msgstr "Agosto" + +#~ msgctxt "alt. month" +#~ msgid "September" +#~ msgstr "Septiembre" + +#~ msgctxt "alt. month" +#~ msgid "October" +#~ msgstr "Octubre" + +#~ msgctxt "alt. month" +#~ msgid "November" +#~ msgstr "Noviembre" + +#~ msgctxt "alt. month" +#~ msgid "December" +#~ msgstr "Diciembre" + +#~ msgid "This is not a valid IPv6 address." +#~ msgstr "Esta no es una dirección IPv6 válida." + +#~ msgctxt "String to return when truncating text" +#~ msgid "%(truncated_text)s…" +#~ msgstr "%(truncated_text)s…" + +#~ msgid "or" +#~ msgstr "o" + +#~ msgid ", " +#~ msgstr ", " + +#~ msgid "%d year" +#~ msgid_plural "%d years" +#~ msgstr[0] "%d año" +#~ msgstr[1] "%d años" + +#~ msgid "%d month" +#~ msgid_plural "%d months" +#~ msgstr[0] "%d mes" +#~ msgstr[1] "%d meses" + +#~ msgid "%d week" +#~ msgid_plural "%d weeks" +#~ msgstr[0] "%d semana" +#~ msgstr[1] "%d semanas" + +#~ msgid "%d day" +#~ msgid_plural "%d days" +#~ msgstr[0] "%d día" +#~ msgstr[1] "%d días" + +#~ msgid "%d hour" +#~ msgid_plural "%d hours" +#~ msgstr[0] "%d hora" +#~ msgstr[1] "%d horas" + +#~ msgid "%d minute" +#~ msgid_plural "%d minutes" +#~ msgstr[0] "%d minuto" +#~ msgstr[1] "%d minutos" + +#~ msgid "Forbidden" +#~ msgstr "Prohibido" + +#~ msgid "CSRF verification failed. Request aborted." +#~ msgstr "Se falló la verificación CSRF. Se abortó la solicitud." + +#~ msgid "You are seeing this message because this HTTPS site requires a “Referer header” to be sent by your Web browser, but none was sent. This header is required for security reasons, to ensure that your browser is not being hijacked by third parties." +#~ msgstr "Estás viendo este mensaje porque este sitio HTTPS requiere que tu navegador Web envie un “Referer header”, pero no se la envió. Esta cabecedera se requiere por razones de seguridad, para asegurar que tu navegador no sea secuestrado por terceros." + +#~ msgid "If you have configured your browser to disable “Referer” headers, please re-enable them, at least for this site, or for HTTPS connections, or for “same-origin” requests." +#~ msgstr "Si has configurado su navegador para deshabilitar las cabecederas “Referer”, vuelva a habilitarlos, al menos para este sitio, o para conexiones HTTPS, o para solicitudes del “same-origin”. " + +#~ msgid "If you are using the tag or including the “Referrer-Policy: no-referrer” header, please remove them. The CSRF protection requires the “Referer” header to do strict referer checking. If you’re concerned about privacy, use alternatives like for links to third-party sites." +#~ msgstr "Si estás usando la eqtigueta o estás incluyendo la cabecedera “Referrer-Policy: no-referrer”, quitalas por favor. La protección CSRF require la cabecedera “Referer” para hacer verficación “strict referer“. Si te preocupa la privacidad, utiliza alternativas como para sitios de terceros." + +#~ msgid "You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties." +#~ msgstr "Estás viendo este mensaje porque este sitio requiere un cookie CSRF cuando se envie formularios. Este cookie se requiere por razones de seguridad, para asegurar que tu navegador no sea secuestrado por terceros." + +#~ msgid "If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for “same-origin” requests." +#~ msgstr "Si has configurado su navegador para deshabilitar los cookies, vuelva a habilitarlos, al menos para este sitio, o para conexiones HTTPS, o para solicitudes del “same-origin”. " + +#~ msgid "More information is available with DEBUG=True." +#~ msgstr "Más información es disponible con DEBUG=True." + +#~ msgid "No year specified" +#~ msgstr "Ningun año fue especificado" + +#~ msgid "Date out of range" +#~ msgstr "Fecha fuera de rango" + +#~ msgid "No month specified" +#~ msgstr "Ningun mes fue especificado" + +#~ msgid "No day specified" +#~ msgstr "Ningun día fue especificado" + +#~ msgid "No week specified" +#~ msgstr "Ninguna semana fue especificado" + +#~ msgid "No %(verbose_name_plural)s available" +#~ msgstr "No %(verbose_name_plural)s disponible" + +#~ msgid "Future %(verbose_name_plural)s not available because %(class_name)s.allow_future is False." +#~ msgstr "%(verbose_name_plural)s del futuro no está disponible porque %(class_name)s.allow_future es False." + +#~ msgid "Invalid date string “%(datestr)s” given format “%(format)s”" +#~ msgstr "Cadena de fecha invalida “%(datestr)s” dado el formato “%(format)s”" + +#~ msgid "No %(verbose_name)s found matching the query" +#~ msgstr "No se encontró ningún %(verbose_name)s correspondiente a la búsqueda" + +#~ msgid "Page is not “last”, nor can it be converted to an int." +#~ msgstr "Página no es “last”, ni puede ser convertido en un int." + +#~ msgid "Invalid page (%(page_number)s): %(message)s" +#~ msgstr "Página invalida (%(page_number)s): %(message)s" + +#~ msgid "Empty list and “%(class_name)s.allow_empty” is False." +#~ msgstr "Lista vacia y “%(class_name)s.allow_empty” es False." + +#~ msgid "Directory indexes are not allowed here." +#~ msgstr "Indices directorios no se permiten aquí." + +#~ msgid "“%(path)s” does not exist" +#~ msgstr "“%(path)s” no existe" + +#~ msgid "Index of %(directory)s" +#~ msgstr "Indice de %(directory)s" + +#~ msgid "Django: the Web framework for perfectionists with deadlines." +#~ msgstr "Django: el estructura Web para perfeccionistas con fechas límites." + +#~ msgid "View release notes for Django %(version)s" +#~ msgstr "Ver notas de lanzamiento por Django %(version)s" + +#~ msgid "The install worked successfully! Congratulations!" +#~ msgstr "¡La instalación fue exitoso! ¡Felicidades!" + +#~ msgid "You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs." +#~ msgstr "Estás viendo esta pagina porque DEBUG=True está en tu archivo de configuración y no has configurado ningún URL." + +#~ msgid "Django Documentation" +#~ msgstr "Documentación de Django" + +#~ msgid "Topics, references, & how-to’s" +#~ msgstr "Tópicos, referencias, & instrucciones paso-a-paso" + +#~ msgid "Tutorial: A Polling App" +#~ msgstr "Tutorial: Una aplicación polling" + +#~ msgid "Get started with Django" +#~ msgstr "Empezar con Django" + +#~ msgid "Django Community" +#~ msgstr "Comunidad Django" + +#~ msgid "Connect, get help, or contribute" +#~ msgstr "Conectarse, encontrar ayuda, o contribuir" + +#~ msgid "Attempting to connect to qpid with SASL mechanism %s" +#~ msgstr "Intentando conectar con qpid con mecanismo SASL %s" + +#~ msgid "Connected to qpid with SASL mechanism %s" +#~ msgstr "Conectado con qpid con mecanismo SASL %s" + +#~ msgid "Unable to connect to qpid with SASL mechanism %s" +#~ msgstr "No se pudo conectar con qpid con mecanismo SASL %s" + +#~ msgid "1 second ago" +#~ msgstr "Hace 1 segundo" + +#~ msgid "1 minute ago" +#~ msgstr "Hace 1 minuto" + +#~ msgid "1 hour ago" +#~ msgstr "Hace 1 hora" + +#~ msgid "%(time)s" +#~ msgstr "%(time)s" + +#~ msgid "yesterday" +#~ msgstr "ayer" + +# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock +# a working clock is broken twice a day! +#~ msgid "yesterday at %(time)s" +#~ msgstr "ayer a las %(time)s" + +#~ msgid "%(weekday)s" +#~ msgstr "%(weekday)s" + +# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock +# a working clock is broken twice a day! +#~ msgid "%(weekday)s at %(time)s" +#~ msgstr "%(weekday)s a las %(time)s" + +#~ msgid "%(month_name)s %(day)s" +#~ msgstr "%(day)s %(month_name)s" + +# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock +# a working clock is broken twice a day! +#~ msgid "%(month_name)s %(day)s at %(time)s" +#~ msgstr "%(day)s %(month_name)s a las %(time)s" + +#~ msgid "%(month_name)s %(day)s, %(year)s" +#~ msgstr "%(day)s %(month_name)s, %(year)s" + +# TODO cc @mouse this could be grammatically incorrect if the time said 1 o'clock +# a working clock is broken twice a day! +#~ msgid "%(month_name)s %(day)s, %(year)s at %(time)s" +#~ msgstr "%(day)s %(month_name)s, %(year)s a las %(time)s" + +#~ msgid "%(weekday)s, %(month_name)s %(day)s" +#~ msgstr "%(weekday)s, %(day)s %(month_name)s" + +#~ msgid "%(commas)s and %(last)s" +#~ msgstr "%(commas)s y %(last)s" + +#~ msgctxt "law" +#~ msgid "right" +#~ msgstr "justo" + +#~ msgctxt "good" +#~ msgid "right" +#~ msgstr "correcto" + +#~ msgctxt "organization" +#~ msgid "club" +#~ msgstr "club" + +#~ msgctxt "stick" +#~ msgid "club" +#~ msgstr "garrote" #, fuzzy #~| msgid "Started" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 09e90f22c..b91a542db 100644 Binary files a/locale/fr_FR/LC_MESSAGES/django.mo and b/locale/fr_FR/LC_MESSAGES/django.mo differ