Merge branch 'main' into production

This commit is contained in:
Mouse Reeve 2021-08-16 11:00:27 -07:00
commit a8dbecde57
6 changed files with 142 additions and 149 deletions

View file

@ -3,4 +3,5 @@
{% block filter_fields %} {% block filter_fields %}
{% include 'user_admin/server_filter.html' %} {% include 'user_admin/server_filter.html' %}
{% include 'user_admin/username_filter.html' %} {% include 'user_admin/username_filter.html' %}
{% include 'directory/community_filter.html' %}
{% endblock %} {% endblock %}

View file

@ -1,5 +1,4 @@
""" testing import """ """ testing import """
from unittest.mock import patch from unittest.mock import patch
from django.test import RequestFactory, TestCase from django.test import RequestFactory, TestCase
@ -7,59 +6,77 @@ from bookwyrm import models
from bookwyrm.views import rss_feed from bookwyrm.views import rss_feed
@patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay")
@patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream")
@patch("bookwyrm.activitystreams.ActivityStream.add_status")
class RssFeedView(TestCase): class RssFeedView(TestCase):
"""rss feed behaves as expected""" """rss feed behaves as expected"""
def setUp(self): def setUp(self):
"""test data"""
self.site = models.SiteSettings.objects.create()
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"):
self.user = models.User.objects.create_user( self.local_user = models.User.objects.create_user(
"rss_user", "rss@test.rss", "password", local=True "rss_user", "rss@test.rss", "password", local=True
) )
work = models.Work.objects.create(title="Test Work") work = models.Work.objects.create(title="Test Work")
self.book = models.Edition.objects.create( self.book = models.Edition.objects.create(
title="Example Edition", title="Example Edition",
remote_id="https://example.com/book/1", remote_id="https://example.com/book/1",
parent_work=work, parent_work=work,
) )
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
with patch("bookwyrm.activitystreams.ActivityStream.add_status"):
self.review = models.Review.objects.create(
name="Review name",
content="test content",
rating=3,
user=self.user,
book=self.book,
)
self.quote = models.Quotation.objects.create(
quote="a sickening sense",
content="test content",
user=self.user,
book=self.book,
)
self.generatednote = models.GeneratedNote.objects.create(
content="test content", user=self.user
)
self.factory = RequestFactory() self.factory = RequestFactory()
@patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream") models.SiteSettings.objects.create()
def test_rss_feed(self, _):
def test_rss_empty(self, *_):
"""load an rss feed""" """load an rss feed"""
view = rss_feed.RssFeed() view = rss_feed.RssFeed()
request = self.factory.get("/user/rss_user/rss") request = self.factory.get("/user/rss_user/rss")
request.user = self.user request.user = self.local_user
with patch("bookwyrm.models.SiteSettings.objects.get") as site: result = view(request, username=self.local_user.username)
site.return_value = self.site self.assertEqual(result.status_code, 200)
result = view(request, username=self.user.username) self.assertIn(b"Status updates from rss_user", result.content)
def test_rss_comment(self, *_):
"""load an rss feed"""
models.Comment.objects.create(
content="comment test content",
user=self.local_user,
book=self.book,
)
view = rss_feed.RssFeed()
request = self.factory.get("/user/rss_user/rss")
request.user = self.local_user
result = view(request, username=self.local_user.username)
self.assertEqual(result.status_code, 200)
self.assertIn(b"Example Edition", result.content)
def test_rss_review(self, *_):
"""load an rss feed"""
models.Review.objects.create(
name="Review name",
content="test content",
rating=3,
user=self.local_user,
book=self.book,
)
view = rss_feed.RssFeed()
request = self.factory.get("/user/rss_user/rss")
request.user = self.local_user
result = view(request, username=self.local_user.username)
self.assertEqual(result.status_code, 200)
def test_rss_quotation(self, *_):
"""load an rss feed"""
models.Quotation.objects.create(
quote="a sickening sense",
content="test content",
user=self.local_user,
book=self.book,
)
view = rss_feed.RssFeed()
request = self.factory.get("/user/rss_user/rss")
request.user = self.local_user
result = view(request, username=self.local_user.username)
self.assertEqual(result.status_code, 200) self.assertEqual(result.status_code, 200)
self.assertIn(b"Status updates from rss_user", result.content)
self.assertIn(b"a sickening sense", result.content) self.assertIn(b"a sickening sense", result.content)
self.assertIn(b"Example Edition", result.content)

View file

@ -1,6 +1,9 @@
""" serialize user's posts in rss feed """ """ serialize user's posts in rss feed """
from django.contrib.syndication.views import Feed from django.contrib.syndication.views import Feed
from django.template.loader import get_template
from django.utils.translation import gettext_lazy as _
from .helpers import get_user_from_username, privacy_filter from .helpers import get_user_from_username, privacy_filter
# pylint: disable=no-self-use, unused-argument # pylint: disable=no-self-use, unused-argument
@ -8,7 +11,15 @@ class RssFeed(Feed):
"""serialize user's posts in rss feed""" """serialize user's posts in rss feed"""
description_template = "rss/content.html" description_template = "rss/content.html"
title_template = "rss/title.html"
def item_title(self, item):
"""render the item title"""
if hasattr(item, "pure_name") and item.pure_name:
return item.pure_name
title_template = get_template("snippets/status/header_content.html")
title = title_template.render({"status": item})
template = get_template("rss/title.html")
return template.render({"user": item.user, "item_title": title}).strip()
def get_object(self, request, username): # pylint: disable=arguments-differ def get_object(self, request, username): # pylint: disable=arguments-differ
"""the user who's posts get serialized""" """the user who's posts get serialized"""
@ -20,7 +31,7 @@ class RssFeed(Feed):
def title(self, obj): def title(self, obj):
"""title of the rss feed entry""" """title of the rss feed entry"""
return f"Status updates from {obj.display_name}" return _(f"Status updates from {obj.display_name}")
def items(self, obj): def items(self, obj):
"""the user's activity feed""" """the user's activity feed"""

View file

@ -30,6 +30,9 @@ class UserAdminList(View):
username = request.GET.get("username") username = request.GET.get("username")
if username: if username:
filters["username__icontains"] = username filters["username__icontains"] = username
scope = request.GET.get("scope")
if scope:
filters["local"] = scope == "local"
users = models.User.objects.filter(**filters) users = models.User.objects.filter(**filters)

Binary file not shown.

View file

@ -101,10 +101,8 @@ msgid "Home"
msgstr "主页" msgstr "主页"
#: bookwyrm/settings.py:124 #: bookwyrm/settings.py:124
#, fuzzy
#| msgid "Book Title"
msgid "Books Timeline" msgid "Books Timeline"
msgstr "书" msgstr "书目时间线"
#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 #: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21
#: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/search/layout.html:42
@ -446,7 +444,7 @@ msgstr "从网址加载封面:"
#: bookwyrm/templates/book/edit_book.html:11 #: bookwyrm/templates/book/edit_book.html:11
#, python-format #, python-format
msgid "Edit \"%(book_title)s\"" msgid "Edit \"%(book_title)s\""
msgstr "编辑 \"%(book_title)s\"" msgstr "编辑《%(book_title)s》"
#: bookwyrm/templates/book/edit_book.html:5 #: bookwyrm/templates/book/edit_book.html:5
#: bookwyrm/templates/book/edit_book.html:13 #: bookwyrm/templates/book/edit_book.html:13
@ -460,7 +458,7 @@ msgstr "确认书目信息"
#: bookwyrm/templates/book/edit_book.html:62 #: bookwyrm/templates/book/edit_book.html:62
#, python-format #, python-format
msgid "Is \"%(name)s\" an existing author?" msgid "Is \"%(name)s\" an existing author?"
msgstr "\"%(name)s\" 是已存在的作者吗?" msgstr "“%(name)s” 是已存在的作者吗?"
#: bookwyrm/templates/book/edit_book.html:71 #: bookwyrm/templates/book/edit_book.html:71
#, python-format #, python-format
@ -474,7 +472,7 @@ msgstr "这是一位新的作者"
#: bookwyrm/templates/book/edit_book.html:82 #: bookwyrm/templates/book/edit_book.html:82
#, python-format #, python-format
msgid "Creating a new author: %(name)s" msgid "Creating a new author: %(name)s"
msgstr "正在创建新的作者: %(name)s" msgstr "正在创建新的作者: %(name)s"
#: bookwyrm/templates/book/edit_book.html:89 #: bookwyrm/templates/book/edit_book.html:89
msgid "Is this an edition of an existing work?" msgid "Is this an edition of an existing work?"
@ -591,7 +589,7 @@ msgstr "%(book_title)s 的各版本"
#: bookwyrm/templates/book/editions.html:8 #: bookwyrm/templates/book/editions.html:8
#, python-format #, python-format
msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>" msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> 的各版本" msgstr "<a href=\"%(work_path)s\">《%(work_title)s》</a> 的各版本"
#: bookwyrm/templates/book/format_filter.html:8 #: bookwyrm/templates/book/format_filter.html:8
#: bookwyrm/templates/book/language_filter.html:8 #: bookwyrm/templates/book/language_filter.html:8
@ -685,30 +683,24 @@ msgid "Compose status"
msgstr "撰写状态" msgstr "撰写状态"
#: bookwyrm/templates/confirm_email/confirm_email.html:4 #: bookwyrm/templates/confirm_email/confirm_email.html:4
#, fuzzy
#| msgid "Confirm"
msgid "Confirm email" msgid "Confirm email"
msgstr "确认" msgstr "确认邮箱"
#: bookwyrm/templates/confirm_email/confirm_email.html:7 #: bookwyrm/templates/confirm_email/confirm_email.html:7
#, fuzzy
#| msgid "Email address:"
msgid "Confirm your email address" msgid "Confirm your email address"
msgstr "邮箱地址:" msgstr "确认你的邮箱地址:"
#: bookwyrm/templates/confirm_email/confirm_email.html:13 #: bookwyrm/templates/confirm_email/confirm_email.html:13
msgid "A confirmation code has been sent to the email address you used to register your account." msgid "A confirmation code has been sent to the email address you used to register your account."
msgstr "" msgstr "确认码已经被发送到了你注册时所使用的邮箱地址。"
#: bookwyrm/templates/confirm_email/confirm_email.html:15 #: bookwyrm/templates/confirm_email/confirm_email.html:15
msgid "Sorry! We couldn't find that code." msgid "Sorry! We couldn't find that code."
msgstr "" msgstr "抱歉!我们无法找到该代码。"
#: bookwyrm/templates/confirm_email/confirm_email.html:19 #: bookwyrm/templates/confirm_email/confirm_email.html:19
#, fuzzy
#| msgid "Confirm password:"
msgid "Confirmation code:" msgid "Confirmation code:"
msgstr "确认码:" msgstr "确认代码:"
#: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/confirm_email/confirm_email.html:25
#: bookwyrm/templates/landing/landing_layout.html:70 #: bookwyrm/templates/landing/landing_layout.html:70
@ -718,11 +710,11 @@ msgstr "提交"
#: bookwyrm/templates/confirm_email/confirm_email.html:32 #: bookwyrm/templates/confirm_email/confirm_email.html:32
msgid "Can't find your code?" msgid "Can't find your code?"
msgstr "" msgstr "找不到你的代码?"
#: bookwyrm/templates/confirm_email/resend_form.html:4 #: bookwyrm/templates/confirm_email/resend_form.html:4
msgid "Resend confirmation link" msgid "Resend confirmation link"
msgstr "" msgstr "重新发送确认链接"
#: bookwyrm/templates/confirm_email/resend_form.html:11 #: bookwyrm/templates/confirm_email/resend_form.html:11
#: bookwyrm/templates/landing/landing_layout.html:64 #: bookwyrm/templates/landing/landing_layout.html:64
@ -733,10 +725,8 @@ msgid "Email address:"
msgstr "邮箱地址:" msgstr "邮箱地址:"
#: bookwyrm/templates/confirm_email/resend_form.html:17 #: bookwyrm/templates/confirm_email/resend_form.html:17
#, fuzzy
#| msgid "Re-send invite"
msgid "Resend link" msgid "Resend link"
msgstr "重新发送请求" msgstr "重新发送链接"
#: bookwyrm/templates/directory/community_filter.html:5 #: bookwyrm/templates/directory/community_filter.html:5
msgid "Community" msgid "Community"
@ -787,10 +777,8 @@ msgstr "最近活跃"
#: bookwyrm/templates/directory/user_card.html:18 #: bookwyrm/templates/directory/user_card.html:18
#: bookwyrm/templates/user/user_preview.html:16 #: bookwyrm/templates/user/user_preview.html:16
#: bookwyrm/templates/user/user_preview.html:17 #: bookwyrm/templates/user/user_preview.html:17
#, fuzzy
#| msgid "Your Account"
msgid "Locked account" msgid "Locked account"
msgstr "你的帐号" msgstr "帐号已上锁"
#: bookwyrm/templates/directory/user_card.html:40 #: bookwyrm/templates/directory/user_card.html:40
msgid "follower you follow" msgid "follower you follow"
@ -825,15 +813,13 @@ msgstr "所有已知用户"
#: bookwyrm/templates/discover/discover.html:4 #: bookwyrm/templates/discover/discover.html:4
#: bookwyrm/templates/discover/discover.html:10 #: bookwyrm/templates/discover/discover.html:10
#: bookwyrm/templates/layout.html:71 #: bookwyrm/templates/layout.html:71
#, fuzzy
#| msgid "Discard"
msgid "Discover" msgid "Discover"
msgstr "削除" msgstr "发现"
#: bookwyrm/templates/discover/discover.html:12 #: bookwyrm/templates/discover/discover.html:12
#, python-format #, python-format
msgid "See what's new in the local %(site_name)s community" msgid "See what's new in the local %(site_name)s community"
msgstr "" msgstr "看看本地 %(site_name)s 社区的新消息"
#: bookwyrm/templates/discover/large-book.html:46 #: bookwyrm/templates/discover/large-book.html:46
#: bookwyrm/templates/discover/small-book.html:32 #: bookwyrm/templates/discover/small-book.html:32
@ -857,36 +843,32 @@ msgstr "引用了"
#: bookwyrm/templates/discover/large-book.html:68 #: bookwyrm/templates/discover/large-book.html:68
#: bookwyrm/templates/discover/small-book.html:52 #: bookwyrm/templates/discover/small-book.html:52
#, fuzzy
#| msgid "Like status"
msgid "View status" msgid "View status"
msgstr "喜欢状态" msgstr "浏览状态"
#: bookwyrm/templates/email/confirm/html_content.html:6 #: bookwyrm/templates/email/confirm/html_content.html:6
#: bookwyrm/templates/email/confirm/text_content.html:4 #: bookwyrm/templates/email/confirm/text_content.html:4
#, python-format #, python-format
msgid "One last step before you join %(site_name)s! Please confirm your email address by clicking the link below:" msgid "One last step before you join %(site_name)s! Please confirm your email address by clicking the link below:"
msgstr "" msgstr "在加入 %(site_name)s 前的最后一步!请点击以下链接以确认你的邮箱:"
#: bookwyrm/templates/email/confirm/html_content.html:11 #: bookwyrm/templates/email/confirm/html_content.html:11
#, fuzzy
#| msgid "Confirm"
msgid "Confirm Email" msgid "Confirm Email"
msgstr "确认" msgstr "确认邮箱"
#: bookwyrm/templates/email/confirm/html_content.html:15 #: bookwyrm/templates/email/confirm/html_content.html:15
#, python-format #, python-format
msgid "Or enter the code \"<code>%(confirmation_code)s</code>\" at login." msgid "Or enter the code \"<code>%(confirmation_code)s</code>\" at login."
msgstr "" msgstr "或者在登录时输入代码 “<code>%(confirmation_code)s</code>”。"
#: bookwyrm/templates/email/confirm/subject.html:2 #: bookwyrm/templates/email/confirm/subject.html:2
msgid "Please confirm your email" msgid "Please confirm your email"
msgstr "" msgstr "请确认你的邮箱"
#: bookwyrm/templates/email/confirm/text_content.html:10 #: bookwyrm/templates/email/confirm/text_content.html:10
#, python-format #, python-format
msgid "Or enter the code \"%(confirmation_code)s\" at login." msgid "Or enter the code \"%(confirmation_code)s\" at login."
msgstr "" msgstr "或者在登录时输入代码 “%(confirmation_code)s”。"
#: bookwyrm/templates/email/html_layout.html:15 #: bookwyrm/templates/email/html_layout.html:15
#: bookwyrm/templates/email/text_layout.html:2 #: bookwyrm/templates/email/text_layout.html:2
@ -969,10 +951,9 @@ msgid "You have no messages right now."
msgstr "你现在没有消息。" msgstr "你现在没有消息。"
#: bookwyrm/templates/feed/feed.html:22 #: bookwyrm/templates/feed/feed.html:22
#, fuzzy, python-format #, python-format
#| msgid "load <span data-poll=\"stream/%(tab)s\">0</span> unread status(es)"
msgid "load <span data-poll=\"stream/%(tab_key)s\">0</span> unread status(es)" msgid "load <span data-poll=\"stream/%(tab_key)s\">0</span> unread status(es)"
msgstr "加载 <span data-poll=\"stream/%(tab)s\">0</span> 条未读状态" msgstr "加载 <span data-poll=\"stream/%(tab_key)s\">0</span> 条未读状态"
#: bookwyrm/templates/feed/feed.html:38 #: bookwyrm/templates/feed/feed.html:38
msgid "There aren't any activities right now! Try following a user to get started" msgid "There aren't any activities right now! Try following a user to get started"
@ -1447,7 +1428,7 @@ msgstr "联系站点管理员"
#: bookwyrm/templates/layout.html:226 #: bookwyrm/templates/layout.html:226
msgid "Documentation" msgid "Documentation"
msgstr "文档:" msgstr "文档"
#: bookwyrm/templates/layout.html:233 #: bookwyrm/templates/layout.html:233
#, python-format #, python-format
@ -1591,7 +1572,7 @@ msgstr "清除搜索"
#: bookwyrm/templates/lists/list.html:151 #: bookwyrm/templates/lists/list.html:151
#, python-format #, python-format
msgid "No books found matching the query \"%(query)s\"" msgid "No books found matching the query \"%(query)s\""
msgstr "没有符合 \"%(query)s\" 请求的书目" msgstr "没有符合 “%(query)s” 请求的书目"
#: bookwyrm/templates/lists/list.html:179 #: bookwyrm/templates/lists/list.html:179
msgid "Suggest" msgid "Suggest"
@ -1607,7 +1588,7 @@ msgstr "登录"
#: bookwyrm/templates/login.html:16 #: bookwyrm/templates/login.html:16
msgid "Success! Email address confirmed." msgid "Success! Email address confirmed."
msgstr "" msgstr "成功!邮箱地址已确认。"
#: bookwyrm/templates/login.html:28 bookwyrm/templates/password_reset.html:17 #: bookwyrm/templates/login.html:28 bookwyrm/templates/password_reset.html:17
#: bookwyrm/templates/snippets/register_form.html:22 #: bookwyrm/templates/snippets/register_form.html:22
@ -1811,13 +1792,13 @@ msgstr "转发了你的 <a href=\"%(related_path)s\">状态</a>"
#: bookwyrm/templates/notifications.html:121 #: bookwyrm/templates/notifications.html:121
#, python-format #, python-format
msgid " added <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list \"<a href=\"%(list_path)s\">%(list_name)s</a>\"" msgid " added <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list “<a href=\"%(list_path)s\">%(list_name)s</a>”"
msgstr " 添加了 <em><a href=\"%(book_path)s\">%(book_title)s</a></em> 到你的列表 \"<a href=\"%(list_path)s\">%(list_name)s</a>\"" msgstr " 添加了 <em><a href=\"%(book_path)s\">%(book_title)s</a></em> 到你的列表 “<a href=\"%(list_path)s\">%(list_name)s</a>”"
#: bookwyrm/templates/notifications.html:123 #: bookwyrm/templates/notifications.html:123
#, python-format #, python-format
msgid " suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list \"<a href=\"%(list_path)s/curate\">%(list_name)s</a>\"" msgid " suggested adding <em><a href=\"%(book_path)s\">%(book_title)s</a></em> to your list \"<a href=\"%(list_path)s/curate\">%(list_name)s</a>\""
msgstr " 推荐添加 <em><a href=\"%(book_path)s\">%(book_title)s</a></em> 到你的列表 \"<a href=\"%(list_path)s/curate\">%(list_name)s</a>\"" msgstr " 推荐添加 <em><a href=\"%(book_path)s\">%(book_title)s</a></em> 到你的列表 “<a href=\"%(list_path)s/curate\">%(list_name)s</a>”"
#: bookwyrm/templates/notifications.html:128 #: bookwyrm/templates/notifications.html:128
#, python-format #, python-format
@ -1893,10 +1874,8 @@ msgid "Show set reading goal prompt in feed:"
msgstr "在消息流中显示设置阅读目标的提示:" msgstr "在消息流中显示设置阅读目标的提示:"
#: bookwyrm/templates/preferences/edit_user.html:58 #: bookwyrm/templates/preferences/edit_user.html:58
#, fuzzy
#| msgid "Post privacy"
msgid "Default post privacy:" msgid "Default post privacy:"
msgstr "发文隐私" msgstr "默认发文隐私:"
#: bookwyrm/templates/preferences/edit_user.html:70 #: bookwyrm/templates/preferences/edit_user.html:70
#, python-format #, python-format
@ -1922,17 +1901,17 @@ msgstr "关系"
#: bookwyrm/templates/reading_progress/finish.html:5 #: bookwyrm/templates/reading_progress/finish.html:5
#, python-format #, python-format
msgid "Finish \"%(book_title)s\"" msgid "Finish \"%(book_title)s\""
msgstr "完成 \"%(book_title)s\"" msgstr "完成《%(book_title)s》"
#: bookwyrm/templates/reading_progress/start.html:5 #: bookwyrm/templates/reading_progress/start.html:5
#, python-format #, python-format
msgid "Start \"%(book_title)s\"" msgid "Start \"%(book_title)s\""
msgstr "开始 \"%(book_title)s\"" msgstr "开始《%(book_title)s》"
#: bookwyrm/templates/reading_progress/want.html:5 #: bookwyrm/templates/reading_progress/want.html:5
#, python-format #, python-format
msgid "Want to Read \"%(book_title)s\"" msgid "Want to Read \"%(book_title)s\""
msgstr "想要阅读 \"%(book_title)s\"" msgstr "想要阅读《%(book_title)s》"
#: bookwyrm/templates/search/book.html:64 #: bookwyrm/templates/search/book.html:64
msgid "Load results from other catalogues" msgid "Load results from other catalogues"
@ -1944,7 +1923,7 @@ msgstr "手动添加书目"
#: bookwyrm/templates/search/book.html:73 #: bookwyrm/templates/search/book.html:73
msgid "Log in to import or add books." msgid "Log in to import or add books."
msgstr "登以导入或添加书目。" msgstr "登以导入或添加书目。"
#: bookwyrm/templates/search/layout.html:16 #: bookwyrm/templates/search/layout.html:16
msgid "Search query" msgid "Search query"
@ -1965,7 +1944,7 @@ msgstr "用户"
#: bookwyrm/templates/search/layout.html:58 #: bookwyrm/templates/search/layout.html:58
#, python-format #, python-format
msgid "No results found for \"%(query)s\"" msgid "No results found for \"%(query)s\""
msgstr "没有找到 \"%(query)s\" 的搜索结果" msgstr "没有找到 “%(query)s” 的搜索结果"
#: bookwyrm/templates/settings/admin_layout.html:4 #: bookwyrm/templates/settings/admin_layout.html:4
msgid "Administration" msgid "Administration"
@ -2414,11 +2393,11 @@ msgstr "允许请求邀请"
#: bookwyrm/templates/settings/site.html:97 #: bookwyrm/templates/settings/site.html:97
msgid "Require users to confirm email address" msgid "Require users to confirm email address"
msgstr "" msgstr "要求用户确认邮箱地址"
#: bookwyrm/templates/settings/site.html:99 #: bookwyrm/templates/settings/site.html:99
msgid "(Recommended if registration is open)" msgid "(Recommended if registration is open)"
msgstr "" msgstr "(当开放注册时推荐)"
#: bookwyrm/templates/settings/site.html:102 #: bookwyrm/templates/settings/site.html:102
msgid "Registration closed text:" msgid "Registration closed text:"
@ -2433,15 +2412,14 @@ msgstr "由 <a href=\"%(user_path)s\">%(username)s</a> 发布"
#, python-format #, python-format
msgid "and %(remainder_count_display)s other" msgid "and %(remainder_count_display)s other"
msgid_plural "and %(remainder_count_display)s others" msgid_plural "and %(remainder_count_display)s others"
msgstr[0] "" msgstr[0] "与其它 %(remainder_count_display)s 位"
#: bookwyrm/templates/snippets/book_cover.html:32 #: bookwyrm/templates/snippets/book_cover.html:32
msgid "No cover" msgid "No cover"
msgstr "没有封面" msgstr "没有封面"
#: bookwyrm/templates/snippets/book_titleby.html:6 #: bookwyrm/templates/snippets/book_titleby.html:6
#, fuzzy, python-format #, python-format
#| msgid "<a href=\"%(path)s\">%(title)s</a> by "
msgid "<a href=\"%(path)s\">%(title)s</a> by" msgid "<a href=\"%(path)s\">%(title)s</a> by"
msgstr "<a href=\"%(path)s\">%(title)s</a> 来自" msgstr "<a href=\"%(path)s\">%(title)s</a> 来自"
@ -2465,7 +2443,7 @@ msgstr "引用"
#: bookwyrm/templates/snippets/create_status/comment.html:15 #: bookwyrm/templates/snippets/create_status/comment.html:15
msgid "Some thoughts on the book" msgid "Some thoughts on the book"
msgstr "" msgstr "对书的一些看法"
#: bookwyrm/templates/snippets/create_status/comment.html:26 #: bookwyrm/templates/snippets/create_status/comment.html:26
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:16
@ -2533,16 +2511,14 @@ msgid "Quote:"
msgstr "引用:" msgstr "引用:"
#: bookwyrm/templates/snippets/create_status/quotation.html:27 #: bookwyrm/templates/snippets/create_status/quotation.html:27
#, fuzzy, python-format #, python-format
#| msgid "Start \"%(book_title)s\""
msgid "An excerpt from '%(book_title)s'" msgid "An excerpt from '%(book_title)s'"
msgstr "开始 \"%(book_title)s\"" msgstr "摘自《%(book_title)s》的节录"
#: bookwyrm/templates/snippets/create_status/review.html:20 #: bookwyrm/templates/snippets/create_status/review.html:20
#, fuzzy, python-format #, python-format
#| msgid "Editions of %(book_title)s"
msgid "Your review of '%(book_title)s'" msgid "Your review of '%(book_title)s'"
msgstr "%(book_title)s 的各版本" msgstr "你对《%(book_title)s》的书评"
#: bookwyrm/templates/snippets/create_status/review.html:32 #: bookwyrm/templates/snippets/create_status/review.html:32
msgid "Review:" msgid "Review:"
@ -2584,10 +2560,9 @@ msgid "Clear filters"
msgstr "清除过滤器" msgstr "清除过滤器"
#: bookwyrm/templates/snippets/follow_button.html:14 #: bookwyrm/templates/snippets/follow_button.html:14
#, fuzzy, python-format #, python-format
#| msgid "Report @%(username)s"
msgid "Follow @%(username)s" msgid "Follow @%(username)s"
msgstr "报告 %(username)s" msgstr "关注 @%(username)s"
#: bookwyrm/templates/snippets/follow_button.html:16 #: bookwyrm/templates/snippets/follow_button.html:16
msgid "Follow" msgid "Follow"
@ -2598,10 +2573,9 @@ msgid "Undo follow request"
msgstr "撤回关注请求" msgstr "撤回关注请求"
#: bookwyrm/templates/snippets/follow_button.html:30 #: bookwyrm/templates/snippets/follow_button.html:30
#, fuzzy, python-format #, python-format
#| msgid "Report @%(username)s"
msgid "Unfollow @%(username)s" msgid "Unfollow @%(username)s"
msgstr "报告 %(username)s" msgstr "取消关注 @%(username)s"
#: bookwyrm/templates/snippets/follow_button.html:32 #: bookwyrm/templates/snippets/follow_button.html:32
msgid "Unfollow" msgid "Unfollow"
@ -2630,9 +2604,7 @@ msgid_plural "set a goal to read %(counter)s books in %(year)s"
msgstr[0] "设定了在 %(year)s 内要读 %(counter)s 本书的目标" msgstr[0] "设定了在 %(year)s 内要读 %(counter)s 本书的目标"
#: bookwyrm/templates/snippets/generated_status/rating.html:3 #: bookwyrm/templates/snippets/generated_status/rating.html:3
#, fuzzy, python-format #, python-format
#| msgid "Rated <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rating)s star"
#| msgid_plural "Rated <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rating)s stars"
msgid "rated <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rating)s star" msgid "rated <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rating)s star"
msgid_plural "rated <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rating)s stars" msgid_plural "rated <em><a href=\"%(path)s\">%(title)s</a></em>: %(display_rating)s stars"
msgstr[0] "为 <em><a href=\"%(path)s\">%(title)s</a></em> 打了分: %(display_rating)s 星" msgstr[0] "为 <em><a href=\"%(path)s\">%(title)s</a></em> 打了分: %(display_rating)s 星"
@ -2641,12 +2613,12 @@ msgstr[0] "为 <em><a href=\"%(path)s\">%(title)s</a></em> 打了分: %(display_
#, python-format #, python-format
msgid "Review of \"%(book_title)s\" (%(display_rating)s star): %(review_title)s" 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" msgid_plural "Review of \"%(book_title)s\" (%(display_rating)s stars): %(review_title)s"
msgstr[0] "\"%(book_title)s\" 的书评(%(display_rating)s 星): %(review_title)s" msgstr[0] "《%(book_title)s》的书评(%(display_rating)s 星): %(review_title)s"
#: bookwyrm/templates/snippets/generated_status/review_pure_name.html:8 #: bookwyrm/templates/snippets/generated_status/review_pure_name.html:8
#, python-format #, python-format
msgid "Review of \"%(book_title)s\": %(review_title)s" msgid "Review of \"%(book_title)s\": %(review_title)s"
msgstr "\"%(book_title)s\" 的书评: %(review_title)s" msgstr "《%(book_title)s》的书评: %(review_title)s"
#: bookwyrm/templates/snippets/goal_card.html:23 #: bookwyrm/templates/snippets/goal_card.html:23
#, python-format #, python-format
@ -2777,7 +2749,7 @@ msgstr "移动书目"
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5 #: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:5
#, python-format #, python-format
msgid "Finish \"<em>%(book_title)s</em>\"" msgid "Finish \"<em>%(book_title)s</em>\""
msgstr "完成 \"<em>%(book_title)s</em>\"" msgstr "完成《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5 #: bookwyrm/templates/snippets/shelve_button/progress_update_modal.html:5
#: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45 #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:45
@ -2809,12 +2781,12 @@ msgstr "从 %(name)s 移除"
#: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5 #: bookwyrm/templates/snippets/shelve_button/start_reading_modal.html:5
#, python-format #, python-format
msgid "Start \"<em>%(book_title)s</em>\"" msgid "Start \"<em>%(book_title)s</em>\""
msgstr "开始 \"<em>%(book_title)s</em>\"" msgstr "开始《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5 #: bookwyrm/templates/snippets/shelve_button/want_to_read_modal.html:5
#, python-format #, python-format
msgid "Want to Read \"<em>%(book_title)s</em>\"" msgid "Want to Read \"<em>%(book_title)s</em>\""
msgstr "想要阅读 \"<em>%(book_title)s</em>\"" msgstr "想要阅读《<em>%(book_title)s</em>》"
#: bookwyrm/templates/snippets/status/content_status.html:72 #: bookwyrm/templates/snippets/status/content_status.html:72
#: bookwyrm/templates/snippets/trimmed_text.html:17 #: bookwyrm/templates/snippets/trimmed_text.html:17
@ -2831,10 +2803,9 @@ msgid "Open image in new window"
msgstr "在新窗口中打开图像" msgstr "在新窗口中打开图像"
#: bookwyrm/templates/snippets/status/headers/comment.html:2 #: bookwyrm/templates/snippets/status/headers/comment.html:2
#, fuzzy, python-format #, python-format
#| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgid "commented on <a href=\"%(book_path)s\">%(book)s</a>" msgid "commented on <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> 的各版本" msgstr "评论了 <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/note.html:15 #: bookwyrm/templates/snippets/status/headers/note.html:15
#, python-format #, python-format
@ -2842,40 +2813,35 @@ msgid "replied to <a href=\"%(user_path)s\">%(username)s</a>'s <a href=\"%(statu
msgstr "回复了 <a href=\"%(user_path)s\">%(username)s</a> 的 <a href=\"%(status_path)s\">状态</a>" msgstr "回复了 <a href=\"%(user_path)s\">%(username)s</a> 的 <a href=\"%(status_path)s\">状态</a>"
#: bookwyrm/templates/snippets/status/headers/quotation.html:2 #: bookwyrm/templates/snippets/status/headers/quotation.html:2
#, fuzzy, python-format #, python-format
#| msgid "Reported by <a href=\"%(path)s\">%(username)s</a>" #| msgid "Reported by <a href=\"%(path)s\">%(username)s</a>"
msgid "quoted <a href=\"%(book_path)s\">%(book)s</a>" msgid "quoted <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "由 <a href=\"%(path)s\">%(username)s</a> 报告" msgstr "引用了 <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/rating.html:3 #: bookwyrm/templates/snippets/status/headers/rating.html:3
#, fuzzy, python-format #, python-format
#| msgid "Created by <a href=\"%(path)s\">%(username)s</a>"
msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:" msgid "rated <a href=\"%(book_path)s\">%(book)s</a>:"
msgstr "由 <a href=\"%(path)s\">%(username)s</a> 创建" msgstr "为 <a href=\"%(book_path)s\">%(book)s</a> 打了分:"
#: bookwyrm/templates/snippets/status/headers/read.html:5 #: bookwyrm/templates/snippets/status/headers/read.html:5
#, fuzzy, python-format #, python-format
#| msgid "Editions of <a href=\"%(work_path)s\">\"%(work_title)s\"</a>"
msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "finished reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "<a href=\"%(work_path)s\">\"%(work_title)s\"</a> 的各版本" msgstr "完成阅读 <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/reading.html:6 #: bookwyrm/templates/snippets/status/headers/reading.html:6
#, fuzzy, python-format #, python-format
#| msgid "Created by <a href=\"%(path)s\">%(username)s</a>"
msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>" msgid "started reading <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "由 <a href=\"%(path)s\">%(username)s</a> 创建" msgstr "开始阅读 <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/headers/review.html:3 #: bookwyrm/templates/snippets/status/headers/review.html:3
#, fuzzy, python-format #, python-format
#| msgid "Created by <a href=\"%(path)s\">%(username)s</a>"
msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>" msgid "reviewed <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "由 <a href=\"%(path)s\">%(username)s</a> 创建" msgstr "为 <a href=\"%(book_path)s\">%(book)s</a> 撰写了书评"
#: bookwyrm/templates/snippets/status/headers/to_read.html:6 #: bookwyrm/templates/snippets/status/headers/to_read.html:6
#, fuzzy, python-format #, python-format
#| msgid "replied to <a href=\"%(user_path)s\">%(username)s's</a> <a href=\"%(status_path)s\">status</a>"
msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>" msgid "<a href=\"%(user_path)s\">%(username)s</a> wants to read <a href=\"%(book_path)s\">%(book)s</a>"
msgstr "回复了 <a href=\"%(user_path)s\">%(username)s</a> 的 <a href=\"%(status_path)s\">状态</a>" msgstr "<a href=\"%(user_path)s\">%(username)s</a> 想要阅读 <a href=\"%(book_path)s\">%(book)s</a>"
#: bookwyrm/templates/snippets/status/layout.html:21 #: bookwyrm/templates/snippets/status/layout.html:21
#: bookwyrm/templates/snippets/status/status_options.html:17 #: bookwyrm/templates/snippets/status/status_options.html:17
@ -2925,10 +2891,8 @@ msgstr[0] "%(shared_books)s 本在你书架上也有的书"
#: bookwyrm/templates/snippets/suggested_users.html:31 #: bookwyrm/templates/snippets/suggested_users.html:31
#: bookwyrm/templates/user/user_preview.html:36 #: bookwyrm/templates/user/user_preview.html:36
#, fuzzy
#| msgid "followed you"
msgid "Follows you" msgid "Follows you"
msgstr "关注了你" msgstr "正在关注着你"
#: bookwyrm/templates/snippets/switch_edition_button.html:5 #: bookwyrm/templates/snippets/switch_edition_button.html:5
msgid "Switch to this edition" msgid "Switch to this edition"
@ -3079,11 +3043,8 @@ msgid_plural "%(mutuals_display)s followers you follow"
msgstr[0] "%(mutuals_display)s 个你也关注的关注者" msgstr[0] "%(mutuals_display)s 个你也关注的关注者"
#: bookwyrm/templates/user/user_preview.html:38 #: bookwyrm/templates/user/user_preview.html:38
#, fuzzy
#| msgid "follower you follow"
#| msgid_plural "followers you follow"
msgid "No followers you follow" msgid "No followers you follow"
msgstr "你关注的关注者" msgstr "没有你关注的关注者"
#: bookwyrm/templates/user_admin/user.html:9 #: bookwyrm/templates/user_admin/user.html:9
msgid "Back to users" msgid "Back to users"
@ -3167,7 +3128,7 @@ msgstr "%(title)s%(subtitle)s"
#: bookwyrm/views/authentication.py:69 #: bookwyrm/views/authentication.py:69
msgid "Username or password are incorrect" msgid "Username or password are incorrect"
msgstr "" msgstr "用户名或密码不正确"
#: bookwyrm/views/import_data.py:67 #: bookwyrm/views/import_data.py:67
msgid "Not a valid csv file" msgid "Not a valid csv file"