Fix organization contest bug and add Bookmarks on dropdown list (#113)

This commit is contained in:
Phuoc Anh Kha Le 2024-05-29 14:22:58 -05:00 committed by GitHub
parent c6acfa5e05
commit 796a670cd7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 212 additions and 187 deletions

View file

@ -425,7 +425,6 @@ class OrganizationContests(
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(OrganizationContests, self).get_context_data(**kwargs) context = super(OrganizationContests, self).get_context_data(**kwargs)
context["page_type"] = "contests" context["page_type"] = "contests"
context["hide_contest_orgs"] = True
context.pop("organizations") context.pop("organizations")
if self.can_edit_organization(self.organization): if self.can_edit_organization(self.organization):

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: lqdoj2\n" "Project-Id-Version: lqdoj2\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-25 07:24+0700\n" "POT-Creation-Date: 2024-05-30 01:54+0700\n"
"PO-Revision-Date: 2021-07-20 03:44\n" "PO-Revision-Date: 2021-07-20 03:44\n"
"Last-Translator: Icyene\n" "Last-Translator: Icyene\n"
"Language-Team: Vietnamese\n" "Language-Team: Vietnamese\n"
@ -138,7 +138,7 @@ msgstr ""
msgid "Details" msgid "Details"
msgstr "Chi tiết" msgstr "Chi tiết"
#: judge/admin/contest.py:187 templates/contest/list.html:236 #: judge/admin/contest.py:187 templates/contest/macros.html:100
msgid "Format" msgid "Format"
msgstr "Thể thức" msgstr "Thể thức"
@ -196,7 +196,7 @@ msgstr "Tính toán lại kết quả"
msgid "username" msgid "username"
msgstr "tên đăng nhập" msgstr "tên đăng nhập"
#: judge/admin/contest.py:513 templates/base.html:248 #: judge/admin/contest.py:513 templates/base.html:251
msgid "virtual" msgid "virtual"
msgstr "ảo" msgstr "ảo"
@ -426,14 +426,15 @@ msgstr[0] "%d bài nộp đã được tính điểm lại."
msgid "Rescore the selected submissions" msgid "Rescore the selected submissions"
msgstr "Tính điểm lại cái bài nộp" msgstr "Tính điểm lại cái bài nộp"
#: judge/admin/submission.py:332 templates/contest/list.html:285 #: judge/admin/submission.py:332 templates/contest/list.html:181
#: templates/contest/list.html:325 templates/contest/list.html:360 #: templates/contest/list.html:223 templates/contest/list.html:260
#: templates/contest/list.html:392 templates/notification/list.html:12 #: templates/contest/list.html:294 templates/notification/list.html:12
#: templates/organization/requests/log.html:10 #: templates/organization/requests/log.html:10
#: templates/organization/requests/pending.html:20 #: templates/organization/requests/pending.html:20
#: templates/problem/list.html:154 #: templates/problem/list.html:154
#: templates/submission/status-testcases.html:139 #: templates/submission/status-testcases.html:139
#: templates/submission/status-testcases.html:141 #: templates/submission/status-testcases.html:141
#: templates/user/user-bookmarks.html:84
msgid "Time" msgid "Time"
msgstr "Thời gian" msgstr "Thời gian"
@ -635,7 +636,7 @@ msgid "associated page"
msgstr "trang tương ứng" msgstr "trang tương ứng"
#: judge/models/bookmark.py:20 judge/models/comment.py:49 #: judge/models/bookmark.py:20 judge/models/comment.py:49
#: judge/models/pagevote.py:19 judge/models/problem.py:740 #: judge/models/pagevote.py:19 judge/models/problem.py:744
msgid "votes" msgid "votes"
msgstr "bình chọn" msgstr "bình chọn"
@ -1757,34 +1758,34 @@ msgstr ""
msgid "editorial content" msgid "editorial content"
msgstr "nội dung lời giải" msgstr "nội dung lời giải"
#: judge/models/problem.py:708 #: judge/models/problem.py:712
#, python-format #, python-format
msgid "Editorial for %s" msgid "Editorial for %s"
msgstr "" msgstr ""
#: judge/models/problem.py:712 #: judge/models/problem.py:716
msgid "solution" msgid "solution"
msgstr "lời giải" msgstr "lời giải"
#: judge/models/problem.py:713 #: judge/models/problem.py:717
msgid "solutions" msgid "solutions"
msgstr "lời giải" msgstr "lời giải"
#: judge/models/problem.py:718 #: judge/models/problem.py:722
#, fuzzy #, fuzzy
#| msgid "point value" #| msgid "point value"
msgid "proposed point value" msgid "proposed point value"
msgstr "điểm" msgstr "điểm"
#: judge/models/problem.py:719 #: judge/models/problem.py:723
msgid "The amount of points you think this problem deserves." msgid "The amount of points you think this problem deserves."
msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?" msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?"
#: judge/models/problem.py:733 #: judge/models/problem.py:737
msgid "The time this vote was cast" msgid "The time this vote was cast"
msgstr "" msgstr ""
#: judge/models/problem.py:739 #: judge/models/problem.py:743
msgid "vote" msgid "vote"
msgstr "" msgstr ""
@ -2338,12 +2339,12 @@ msgid "Accepted"
msgstr "Accepted" msgstr "Accepted"
#: judge/models/submission.py:21 judge/models/submission.py:48 #: judge/models/submission.py:21 judge/models/submission.py:48
#: judge/utils/problems.py:117 #: judge/utils/problems.py:119
msgid "Wrong Answer" msgid "Wrong Answer"
msgstr "Wrong Answer" msgstr "Wrong Answer"
#: judge/models/submission.py:22 judge/models/submission.py:50 #: judge/models/submission.py:22 judge/models/submission.py:50
#: judge/utils/problems.py:123 #: judge/utils/problems.py:129
msgid "Time Limit Exceeded" msgid "Time Limit Exceeded"
msgstr "Time Limit Exceeded" msgstr "Time Limit Exceeded"
@ -2364,7 +2365,7 @@ msgid "Runtime Error"
msgstr "Runtime Error" msgstr "Runtime Error"
#: judge/models/submission.py:27 judge/models/submission.py:41 #: judge/models/submission.py:27 judge/models/submission.py:41
#: judge/models/submission.py:55 judge/utils/problems.py:120 #: judge/models/submission.py:55 judge/utils/problems.py:124
msgid "Compile Error" msgid "Compile Error"
msgstr "Compile Error" msgstr "Compile Error"
@ -2685,11 +2686,11 @@ msgstr "Invalid Return"
msgid "Invalid signature header" msgid "Invalid signature header"
msgstr "" msgstr ""
#: judge/utils/problems.py:126 #: judge/utils/problems.py:134
msgid "Error" msgid "Error"
msgstr "Lỗi" msgstr "Lỗi"
#: judge/utils/problems.py:143 #: judge/utils/problems.py:151
msgid "Can't pass both queryset and keyword filters" msgid "Can't pass both queryset and keyword filters"
msgstr "" msgstr ""
@ -2770,8 +2771,8 @@ msgstr "Bạn phải giải ít nhất 1 bài trước khi được vote."
msgid "You already voted." msgid "You already voted."
msgstr "Bạn đã vote." msgstr "Bạn đã vote."
#: judge/views/comment.py:267 judge/views/organization.py:821 #: judge/views/comment.py:267 judge/views/organization.py:820
#: judge/views/organization.py:971 judge/views/organization.py:1150 #: judge/views/organization.py:970 judge/views/organization.py:1149
msgid "Edited from site" msgid "Edited from site"
msgstr "Chỉnh sửa từ web" msgstr "Chỉnh sửa từ web"
@ -2796,132 +2797,132 @@ msgstr "Bạn phải giải ít nhất một bài trước khi được phép b
msgid "Posted comment" msgid "Posted comment"
msgstr "Bình luận đã đăng" msgstr "Bình luận đã đăng"
#: judge/views/contests.py:122 judge/views/contests.py:424 #: judge/views/contests.py:122 judge/views/contests.py:434
#: judge/views/contests.py:429 judge/views/contests.py:729 #: judge/views/contests.py:439 judge/views/contests.py:739
msgid "No such contest" msgid "No such contest"
msgstr "Không có contest nào như vậy" msgstr "Không có contest nào như vậy"
#: judge/views/contests.py:123 judge/views/contests.py:425 #: judge/views/contests.py:123 judge/views/contests.py:435
#, python-format #, python-format
msgid "Could not find a contest with the key \"%s\"." msgid "Could not find a contest with the key \"%s\"."
msgstr "Không tìm thấy kỳ thi với mã \"%s\"." msgstr "Không tìm thấy kỳ thi với mã \"%s\"."
#: judge/views/contests.py:142 judge/views/contests.py:1500 #: judge/views/contests.py:142 judge/views/contests.py:1510
#: judge/views/stats.py:178 templates/contest/list.html:281 #: judge/views/stats.py:178 templates/contest/list.html:177
#: templates/contest/list.html:321 templates/contest/list.html:356 #: templates/contest/list.html:219 templates/contest/list.html:256
#: templates/contest/list.html:388 #: templates/contest/list.html:290
#: templates/organization/org-left-sidebar.html:5 templates/stats/site.html:21 #: templates/organization/org-left-sidebar.html:5 templates/stats/site.html:21
#: templates/user/user-bookmarks.html:56 #: templates/user/user-bookmarks.html:19 templates/user/user-bookmarks.html:80
msgid "Contests" msgid "Contests"
msgstr "Kỳ thi" msgstr "Kỳ thi"
#: judge/views/contests.py:429 #: judge/views/contests.py:439
msgid "Could not find such contest." msgid "Could not find such contest."
msgstr "Không tìm thấy kỳ thi nào như vậy." msgstr "Không tìm thấy kỳ thi nào như vậy."
#: judge/views/contests.py:437 #: judge/views/contests.py:447
#, python-format #, python-format
msgid "Access to contest \"%s\" denied" msgid "Access to contest \"%s\" denied"
msgstr "Truy cập tới kỳ thi \"%s\" bị từ chối" msgstr "Truy cập tới kỳ thi \"%s\" bị từ chối"
#: judge/views/contests.py:515 #: judge/views/contests.py:525
msgid "Clone Contest" msgid "Clone Contest"
msgstr "Nhân bản kỳ thi" msgstr "Nhân bản kỳ thi"
#: judge/views/contests.py:607 #: judge/views/contests.py:617
msgid "Contest not ongoing" msgid "Contest not ongoing"
msgstr "Kỳ thi đang không diễn ra" msgstr "Kỳ thi đang không diễn ra"
#: judge/views/contests.py:608 #: judge/views/contests.py:618
#, python-format #, python-format
msgid "\"%s\" is not currently ongoing." msgid "\"%s\" is not currently ongoing."
msgstr "\"%s\" kỳ thi đang không diễn ra." msgstr "\"%s\" kỳ thi đang không diễn ra."
#: judge/views/contests.py:621 #: judge/views/contests.py:631
msgid "Banned from joining" msgid "Banned from joining"
msgstr "Bị cấm tham gia" msgstr "Bị cấm tham gia"
#: judge/views/contests.py:623 #: judge/views/contests.py:633
msgid "" msgid ""
"You have been declared persona non grata for this contest. You are " "You have been declared persona non grata for this contest. You are "
"permanently barred from joining this contest." "permanently barred from joining this contest."
msgstr "Bạn không được phép tham gia kỳ thi này." msgstr "Bạn không được phép tham gia kỳ thi này."
#: judge/views/contests.py:713 #: judge/views/contests.py:723
#, python-format #, python-format
msgid "Enter access code for \"%s\"" msgid "Enter access code for \"%s\""
msgstr "Nhập mật khẩu truy cập cho \"%s\"" msgstr "Nhập mật khẩu truy cập cho \"%s\""
#: judge/views/contests.py:730 #: judge/views/contests.py:740
#, python-format #, python-format
msgid "You are not in contest \"%s\"." msgid "You are not in contest \"%s\"."
msgstr "Bạn không ở trong kỳ thi \"%s\"." msgstr "Bạn không ở trong kỳ thi \"%s\"."
#: judge/views/contests.py:753 #: judge/views/contests.py:763
msgid "ContestCalendar requires integer year and month" msgid "ContestCalendar requires integer year and month"
msgstr "Lịch thi yêu cầu giá trị cho năm và tháng là số nguyên" msgstr "Lịch thi yêu cầu giá trị cho năm và tháng là số nguyên"
#: judge/views/contests.py:811 #: judge/views/contests.py:821
#, python-format #, python-format
msgid "Contests in %(month)s" msgid "Contests in %(month)s"
msgstr "Các kỳ thi trong %(month)s" msgstr "Các kỳ thi trong %(month)s"
#: judge/views/contests.py:812 #: judge/views/contests.py:822
msgid "F Y" msgid "F Y"
msgstr "F Y" msgstr "F Y"
#: judge/views/contests.py:872 #: judge/views/contests.py:882
#, python-format #, python-format
msgid "%s Statistics" msgid "%s Statistics"
msgstr "%s Thống kê" msgstr "%s Thống kê"
#: judge/views/contests.py:1181 #: judge/views/contests.py:1191
#, python-format #, python-format
msgid "%s Rankings" msgid "%s Rankings"
msgstr "%s Bảng điểm" msgstr "%s Bảng điểm"
#: judge/views/contests.py:1192 #: judge/views/contests.py:1202
msgid "???" msgid "???"
msgstr "???" msgstr "???"
#: judge/views/contests.py:1219 #: judge/views/contests.py:1229
#, python-format #, python-format
msgid "Your participation in %s" msgid "Your participation in %s"
msgstr "Lần tham gia trong %s" msgstr "Lần tham gia trong %s"
#: judge/views/contests.py:1220 #: judge/views/contests.py:1230
#, python-format #, python-format
msgid "%s's participation in %s" msgid "%s's participation in %s"
msgstr "Lần tham gia của %s trong %s" msgstr "Lần tham gia của %s trong %s"
#: judge/views/contests.py:1234 #: judge/views/contests.py:1244
msgid "Live" msgid "Live"
msgstr "Trực tiếp" msgstr "Trực tiếp"
#: judge/views/contests.py:1253 templates/contest/contest-tabs.html:21 #: judge/views/contests.py:1263 templates/contest/contest-tabs.html:21
msgid "Participation" msgid "Participation"
msgstr "Lần tham gia" msgstr "Lần tham gia"
#: judge/views/contests.py:1302 #: judge/views/contests.py:1312
#, python-format #, python-format
msgid "%s MOSS Results" msgid "%s MOSS Results"
msgstr "%s Kết quả MOSS" msgstr "%s Kết quả MOSS"
#: judge/views/contests.py:1338 #: judge/views/contests.py:1348
#, python-format #, python-format
msgid "Running MOSS for %s..." msgid "Running MOSS for %s..."
msgstr "Đang chạy MOSS cho %s..." msgstr "Đang chạy MOSS cho %s..."
#: judge/views/contests.py:1361 #: judge/views/contests.py:1371
#, python-format #, python-format
msgid "Contest tag: %s" msgid "Contest tag: %s"
msgstr "Nhãn kỳ thi: %s" msgstr "Nhãn kỳ thi: %s"
#: judge/views/contests.py:1376 judge/views/ticket.py:67 #: judge/views/contests.py:1386 judge/views/ticket.py:67
msgid "Issue description" msgid "Issue description"
msgstr "Mô tả vấn đề" msgstr "Mô tả vấn đề"
#: judge/views/contests.py:1419 #: judge/views/contests.py:1429
#, python-format #, python-format
msgid "New clarification for %s" msgid "New clarification for %s"
msgstr "Thông báo mới cho %s" msgstr "Thông báo mới cho %s"
@ -3075,61 +3076,61 @@ msgstr "Nhóm"
msgid "%s Members" msgid "%s Members"
msgstr "%s Thành viên" msgstr "%s Thành viên"
#: judge/views/organization.py:475 #: judge/views/organization.py:474
#, python-brace-format #, python-brace-format
msgid "All submissions in <a href=\"{1}\">{0}</a>" msgid "All submissions in <a href=\"{1}\">{0}</a>"
msgstr "Bài nộp trong <a href=\"{1}\">{0}</a>" msgstr "Bài nộp trong <a href=\"{1}\">{0}</a>"
#: judge/views/organization.py:483 judge/views/submission.py:857 #: judge/views/organization.py:482 judge/views/submission.py:857
msgid "Submissions in" msgid "Submissions in"
msgstr "Bài nộp trong" msgstr "Bài nộp trong"
#: judge/views/organization.py:508 judge/views/organization.py:514 #: judge/views/organization.py:507 judge/views/organization.py:513
#: judge/views/organization.py:521 #: judge/views/organization.py:520
msgid "Joining group" msgid "Joining group"
msgstr "Tham gia nhóm" msgstr "Tham gia nhóm"
#: judge/views/organization.py:509 #: judge/views/organization.py:508
msgid "You are already in the group." msgid "You are already in the group."
msgstr "Bạn đã ở trong nhóm." msgstr "Bạn đã ở trong nhóm."
#: judge/views/organization.py:514 #: judge/views/organization.py:513
msgid "This group is not open." msgid "This group is not open."
msgstr "Nhóm này là nhóm kín." msgstr "Nhóm này là nhóm kín."
#: judge/views/organization.py:522 #: judge/views/organization.py:521
#, python-brace-format #, python-brace-format
msgid "You may not be part of more than {count} public groups." msgid "You may not be part of more than {count} public groups."
msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai." msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai."
#: judge/views/organization.py:538 #: judge/views/organization.py:537
msgid "Leaving group" msgid "Leaving group"
msgstr "Rời nhóm" msgstr "Rời nhóm"
#: judge/views/organization.py:539 #: judge/views/organization.py:538
#, python-format #, python-format
msgid "You are not in \"%s\"." msgid "You are not in \"%s\"."
msgstr "Bạn không ở trong \"%s\"." msgstr "Bạn không ở trong \"%s\"."
#: judge/views/organization.py:565 #: judge/views/organization.py:564
#, python-format #, python-format
msgid "Request to join %s" msgid "Request to join %s"
msgstr "Đăng ký tham gia %s" msgstr "Đăng ký tham gia %s"
#: judge/views/organization.py:595 #: judge/views/organization.py:594
msgid "Join request detail" msgid "Join request detail"
msgstr "Chi tiết đơn đăng ký" msgstr "Chi tiết đơn đăng ký"
#: judge/views/organization.py:637 #: judge/views/organization.py:636
msgid "Manage join requests" msgid "Manage join requests"
msgstr "Quản lý đơn đăng ký" msgstr "Quản lý đơn đăng ký"
#: judge/views/organization.py:641 #: judge/views/organization.py:640
#, python-format #, python-format
msgid "Managing join requests for %s" msgid "Managing join requests for %s"
msgstr "Quản lý đơn đăng ký cho %s" msgstr "Quản lý đơn đăng ký cho %s"
#: judge/views/organization.py:681 #: judge/views/organization.py:680
#, python-format #, python-format
msgid "" msgid ""
"Your organization can only receive %d more members. You cannot approve %d " "Your organization can only receive %d more members. You cannot approve %d "
@ -3138,84 +3139,84 @@ msgstr ""
"Tổ chức chỉ có thể chứa %d thành viên. Bạn không thể chấp thuận nhiều hơn %d " "Tổ chức chỉ có thể chứa %d thành viên. Bạn không thể chấp thuận nhiều hơn %d "
"người." "người."
#: judge/views/organization.py:699 #: judge/views/organization.py:698
#, python-format #, python-format
msgid "Approved %d user." msgid "Approved %d user."
msgid_plural "Approved %d users." msgid_plural "Approved %d users."
msgstr[0] "Đã chấp thuận %d người." msgstr[0] "Đã chấp thuận %d người."
#: judge/views/organization.py:702 #: judge/views/organization.py:701
#, python-format #, python-format
msgid "Rejected %d user." msgid "Rejected %d user."
msgid_plural "Rejected %d users." msgid_plural "Rejected %d users."
msgstr[0] "Đã từ chối %d người." msgstr[0] "Đã từ chối %d người."
#: judge/views/organization.py:742 #: judge/views/organization.py:741
#, python-format #, python-format
msgid "Add member for %s" msgid "Add member for %s"
msgstr "Thêm thành viên cho %s" msgstr "Thêm thành viên cho %s"
#: judge/views/organization.py:754 #: judge/views/organization.py:753
#, fuzzy #, fuzzy
#| msgid "Edited from site" #| msgid "Edited from site"
msgid "Added members from site" msgid "Added members from site"
msgstr "Chỉnh sửa từ web" msgstr "Chỉnh sửa từ web"
#: judge/views/organization.py:774 judge/views/organization.py:782 #: judge/views/organization.py:773 judge/views/organization.py:781
msgid "Can't kick user" msgid "Can't kick user"
msgstr "Không thể đuổi" msgstr "Không thể đuổi"
#: judge/views/organization.py:775 #: judge/views/organization.py:774
msgid "The user you are trying to kick does not exist!" msgid "The user you are trying to kick does not exist!"
msgstr "" msgstr ""
#: judge/views/organization.py:783 #: judge/views/organization.py:782
#, python-format #, python-format
msgid "The user you are trying to kick is not in organization: %s." msgid "The user you are trying to kick is not in organization: %s."
msgstr "" msgstr ""
#: judge/views/organization.py:804 judge/views/organization.py:960 #: judge/views/organization.py:803 judge/views/organization.py:959
#, python-format #, python-format
msgid "Edit %s" msgid "Edit %s"
msgstr "Chỉnh sửa %s" msgstr "Chỉnh sửa %s"
#: judge/views/organization.py:832 templates/organization/list.html:46 #: judge/views/organization.py:831 templates/organization/list.html:46
msgid "Create group" msgid "Create group"
msgstr "Tạo nhóm" msgstr "Tạo nhóm"
#: judge/views/organization.py:847 #: judge/views/organization.py:846
msgid "Exceeded limit" msgid "Exceeded limit"
msgstr "" msgstr ""
#: judge/views/organization.py:848 #: judge/views/organization.py:847
#, python-format #, python-format
msgid "You created too many groups. You can only create at most %d groups" msgid "You created too many groups. You can only create at most %d groups"
msgstr "" msgstr ""
#: judge/views/organization.py:853 judge/views/organization.py:878 #: judge/views/organization.py:852 judge/views/organization.py:877
#: judge/views/organization.py:1051 #: judge/views/organization.py:1050
msgid "Added from site" msgid "Added from site"
msgstr "Thêm từ web" msgstr "Thêm từ web"
#: judge/views/organization.py:869 #: judge/views/organization.py:868
#: templates/organization/org-right-sidebar.html:52 #: templates/organization/org-right-sidebar.html:52
msgid "Add contest" msgid "Add contest"
msgstr "Thêm kỳ thi" msgstr "Thêm kỳ thi"
#: judge/views/organization.py:912 judge/views/organization.py:1101 #: judge/views/organization.py:911 judge/views/organization.py:1100
msgid "Permission denied" msgid "Permission denied"
msgstr "Truy cập bị từ chối" msgstr "Truy cập bị từ chối"
#: judge/views/organization.py:913 #: judge/views/organization.py:912
#, fuzzy #, fuzzy
#| msgid "You are not allowed to edit this organization." #| msgid "You are not allowed to edit this organization."
msgid "You are not allowed to edit this contest" msgid "You are not allowed to edit this contest"
msgstr "Bạn không được phép chỉnh sửa tổ chức này." msgstr "Bạn không được phép chỉnh sửa tổ chức này."
#: judge/views/organization.py:964 templates/blog/blog.html:31 #: judge/views/organization.py:963 templates/blog/blog.html:31
#: templates/comments/content-list.html:53 #: templates/comments/content-list.html:53
#: templates/comments/content-list.html:66 #: templates/comments/content-list.html:66
#: templates/contest/contest-tabs.html:36 templates/contest/list.html:150 #: templates/contest/contest-tabs.html:36 templates/contest/macros.html:14
#: templates/contest/tag-title.html:9 templates/flatpages/admin_link.html:3 #: templates/contest/tag-title.html:9 templates/flatpages/admin_link.html:3
#: templates/license.html:10 templates/problem/editorial.html:15 #: templates/license.html:10 templates/problem/editorial.html:15
#: templates/problem/feed/items.html:50 #: templates/problem/feed/items.html:50
@ -3223,85 +3224,85 @@ msgstr "Bạn không được phép chỉnh sửa tổ chức này."
msgid "Edit" msgid "Edit"
msgstr "Chỉnh sửa" msgstr "Chỉnh sửa"
#: judge/views/organization.py:1040 #: judge/views/organization.py:1039
#, python-format #, python-format
msgid "Add blog for %s" msgid "Add blog for %s"
msgstr "Thêm bài đăng cho %s" msgstr "Thêm bài đăng cho %s"
#: judge/views/organization.py:1102 #: judge/views/organization.py:1101
msgid "Not allowed to edit this blog" msgid "Not allowed to edit this blog"
msgstr "Bạn không được phép chỉnh sửa bài đăng này." msgstr "Bạn không được phép chỉnh sửa bài đăng này."
#: judge/views/organization.py:1134 #: judge/views/organization.py:1133
#, python-format #, python-format
msgid "Edit blog %s" msgid "Edit blog %s"
msgstr "Chỉnh sửa %s" msgstr "Chỉnh sửa %s"
#: judge/views/organization.py:1181 #: judge/views/organization.py:1180
#, python-format #, python-format
msgid "Pending blogs in %s" msgid "Pending blogs in %s"
msgstr "Bài đang đợi duyệt trong %s" msgstr "Bài đang đợi duyệt trong %s"
#: judge/views/problem.py:134 #: judge/views/problem.py:135
msgid "No such problem" msgid "No such problem"
msgstr "Không có bài nào như vậy" msgstr "Không có bài nào như vậy"
#: judge/views/problem.py:135 #: judge/views/problem.py:136
#, python-format #, python-format
msgid "Could not find a problem with the code \"%s\"." msgid "Could not find a problem with the code \"%s\"."
msgstr "Không tìm thấy bài tập với mã bài \"%s\"." msgstr "Không tìm thấy bài tập với mã bài \"%s\"."
#: judge/views/problem.py:202 #: judge/views/problem.py:203
#, python-brace-format #, python-brace-format
msgid "Editorial for {0}" msgid "Editorial for {0}"
msgstr "Hướng dẫn cho {0}" msgstr "Hướng dẫn cho {0}"
#: judge/views/problem.py:206 #: judge/views/problem.py:207
#, python-brace-format #, python-brace-format
msgid "Editorial for <a href=\"{1}\">{0}</a>" msgid "Editorial for <a href=\"{1}\">{0}</a>"
msgstr "Hướng dẫn cho <a href=\"{1}\">{0}</a>" msgstr "Hướng dẫn cho <a href=\"{1}\">{0}</a>"
#: judge/views/problem.py:459 templates/contest/contest.html:112 #: judge/views/problem.py:460 templates/contest/contest.html:112
#: templates/course/lesson.html:14 #: templates/course/lesson.html:14
#: templates/organization/org-left-sidebar.html:4 #: templates/organization/org-left-sidebar.html:4
#: templates/profile-table.html:25 templates/user/user-about.html:28 #: templates/profile-table.html:25 templates/user/user-about.html:28
#: templates/user/user-bookmarks.html:35 templates/user/user-tabs.html:5 #: templates/user/user-bookmarks.html:16 templates/user/user-tabs.html:5
#: templates/user/users-table.html:19 #: templates/user/users-table.html:19
msgid "Problems" msgid "Problems"
msgstr "Bài tập" msgstr "Bài tập"
#: judge/views/problem.py:831 #: judge/views/problem.py:842
msgid "Problem feed" msgid "Problem feed"
msgstr "Bài tập" msgstr "Bài tập"
#: judge/views/problem.py:1035 judge/views/problem.py:1068 #: judge/views/problem.py:1046 judge/views/problem.py:1079
msgid "<h1>You have submitted too many submissions.</h1>" msgid "<h1>You have submitted too many submissions.</h1>"
msgstr "<h1>Bạn nộp quá nhiều bài.</h1>" msgstr "<h1>Bạn nộp quá nhiều bài.</h1>"
#: judge/views/problem.py:1047 #: judge/views/problem.py:1058
msgid "Banned from submitting" msgid "Banned from submitting"
msgstr "Bị cấm nộp bài" msgstr "Bị cấm nộp bài"
#: judge/views/problem.py:1049 #: judge/views/problem.py:1060
msgid "" msgid ""
"You have been declared persona non grata for this problem. You are " "You have been declared persona non grata for this problem. You are "
"permanently barred from submitting this problem." "permanently barred from submitting this problem."
msgstr "Bạn đã bị cấm nộp bài này." msgstr "Bạn đã bị cấm nộp bài này."
#: judge/views/problem.py:1087 #: judge/views/problem.py:1098
msgid "Too many submissions" msgid "Too many submissions"
msgstr "Quá nhiều lần nộp" msgstr "Quá nhiều lần nộp"
#: judge/views/problem.py:1089 #: judge/views/problem.py:1100
msgid "You have exceeded the submission limit for this problem." msgid "You have exceeded the submission limit for this problem."
msgstr "Bạn đã vượt quá số lần nộp cho bài này." msgstr "Bạn đã vượt quá số lần nộp cho bài này."
#: judge/views/problem.py:1174 judge/views/problem.py:1179 #: judge/views/problem.py:1185 judge/views/problem.py:1190
#, python-format #, python-format
msgid "Submit to %(problem)s" msgid "Submit to %(problem)s"
msgstr "Nộp bài cho %(problem)s" msgstr "Nộp bài cho %(problem)s"
#: judge/views/problem.py:1206 #: judge/views/problem.py:1217
msgid "Clone Problem" msgid "Clone Problem"
msgstr "Nhân bản bài tập" msgstr "Nhân bản bài tập"
@ -3591,44 +3592,44 @@ msgstr "Hủy kích hoạt Two Factor Authentication"
msgid "Perform Two Factor Authentication" msgid "Perform Two Factor Authentication"
msgstr "Thực hiện Two Factor Authentication" msgstr "Thực hiện Two Factor Authentication"
#: judge/views/user.py:102 #: judge/views/user.py:115
msgid "No such user" msgid "No such user"
msgstr "Không người dùng nào như vậy" msgstr "Không người dùng nào như vậy"
#: judge/views/user.py:103 #: judge/views/user.py:116
#, python-format #, python-format
msgid "No user handle \"%s\"." msgid "No user handle \"%s\"."
msgstr "Không tồn tại tên người dùng \"%s\"." msgstr "Không tồn tại tên người dùng \"%s\"."
#: judge/views/user.py:108 #: judge/views/user.py:121
msgid "My account" msgid "My account"
msgstr "Tài khoản của tôi" msgstr "Tài khoản của tôi"
#: judge/views/user.py:110 #: judge/views/user.py:123
#, python-format #, python-format
msgid "User %s" msgid "User %s"
msgstr "Thành viên %s" msgstr "Thành viên %s"
#: judge/views/user.py:198 #: judge/views/user.py:211
msgid "M j, Y, G:i" msgid "M j, Y, G:i"
msgstr "j M, Y, G:i" msgstr "j M, Y, G:i"
#: judge/views/user.py:367 #: judge/views/user.py:412
msgid "Updated on site" msgid "Updated on site"
msgstr "Được cập nhật trên web" msgstr "Được cập nhật trên web"
#: judge/views/user.py:384 templates/admin/auth/user/change_form.html:14 #: judge/views/user.py:429 templates/admin/auth/user/change_form.html:14
#: templates/admin/auth/user/change_form.html:17 templates/base.html:208 #: templates/admin/auth/user/change_form.html:17 templates/base.html:211
#: templates/user/user-tabs.html:12 #: templates/user/user-tabs.html:12
msgid "Edit profile" msgid "Edit profile"
msgstr "Chỉnh sửa thông tin" msgstr "Chỉnh sửa thông tin"
#: judge/views/user.py:394 templates/user/user-left-sidebar.html:2 #: judge/views/user.py:439 templates/user/user-left-sidebar.html:2
#: templates/user/user-list-tabs.html:4 #: templates/user/user-list-tabs.html:4
msgid "Leaderboard" msgid "Leaderboard"
msgstr "Xếp hạng" msgstr "Xếp hạng"
#: judge/views/user.py:494 #: judge/views/user.py:539
msgid "Import Users" msgid "Import Users"
msgstr "" msgstr ""
@ -3649,7 +3650,7 @@ msgstr "Thích"
msgid "Comment" msgid "Comment"
msgstr "Bình luận" msgstr "Bình luận"
#: templates/actionbar/list.html:43 templates/user/user-tabs.html:11 #: templates/actionbar/list.html:43
msgid "Bookmark" msgid "Bookmark"
msgstr "Lưu" msgstr "Lưu"
@ -3736,33 +3737,37 @@ msgstr "Nội bộ"
msgid "Stats" msgid "Stats"
msgstr "Thống kê" msgstr "Thống kê"
#: templates/base.html:217 #: templates/base.html:208 templates/user/user-tabs.html:11
msgid "Bookmarks"
msgstr "Đã lưu"
#: templates/base.html:220
msgid "Log out" msgid "Log out"
msgstr "Đăng xuất" msgstr "Đăng xuất"
#: templates/base.html:227 #: templates/base.html:230
#: templates/registration/password_reset_complete.html:4 #: templates/registration/password_reset_complete.html:4
msgid "Log in" msgid "Log in"
msgstr "Đăng nhập" msgstr "Đăng nhập"
#: templates/base.html:228 #: templates/base.html:231
msgid "Sign up" msgid "Sign up"
msgstr "Đăng ký" msgstr "Đăng ký"
#: templates/base.html:242 #: templates/base.html:245
msgid "spectating" msgid "spectating"
msgstr "đang theo dõi" msgstr "đang theo dõi"
#: templates/base.html:254 templates/contest/list.html:218 #: templates/base.html:257 templates/contest/list.html:304
#: templates/contest/list.html:402 #: templates/contest/macros.html:82
msgid "In contest" msgid "In contest"
msgstr "Trong kỳ thi" msgstr "Trong kỳ thi"
#: templates/base.html:256 #: templates/base.html:259
msgid "Out contest" msgid "Out contest"
msgstr "Ngoài kỳ thi" msgstr "Ngoài kỳ thi"
#: templates/base.html:263 #: templates/base.html:266
msgid "This site works best with JavaScript enabled." msgid "This site works best with JavaScript enabled."
msgstr "" msgstr ""
@ -3777,6 +3782,8 @@ msgstr "Chỉnh sửa trong"
#: templates/blog/content.html:43 templates/comments/feed.html:18 #: templates/blog/content.html:43 templates/comments/feed.html:18
#: templates/problem/feed/items.html:109 templates/ticket/feed.html:26 #: templates/problem/feed/items.html:109 templates/ticket/feed.html:26
#: templates/user/user-bookmarks.html:61 templates/user/user-bookmarks.html:131
#: templates/user/user-bookmarks.html:180
msgid "...More" msgid "...More"
msgstr "...Xem thêm" msgstr "...Xem thêm"
@ -4137,7 +4144,7 @@ msgstr "MOSS"
msgid "Leave contest" msgid "Leave contest"
msgstr "Rời kỳ thi" msgstr "Rời kỳ thi"
#: templates/contest/contest.html:43 templates/contest/list.html:407 #: templates/contest/contest.html:43 templates/contest/list.html:309
msgid "Virtual join" msgid "Virtual join"
msgstr "Tham gia ảo" msgstr "Tham gia ảo"
@ -4201,89 +4208,89 @@ msgid "By joining in this contest, you will automatically leave contest"
msgstr "Khi tham gia kỳ thi này, bạn sẽ tự động rời khỏi kỳ thi" msgstr "Khi tham gia kỳ thi này, bạn sẽ tự động rời khỏi kỳ thi"
#: templates/contest/list.html:144 #: templates/contest/list.html:144
msgid "hidden"
msgstr "ẩn"
#: templates/contest/list.html:156
msgid "private"
msgstr "riêng tư"
#: templates/contest/list.html:168
msgid "rated"
msgstr "rated"
#: templates/contest/list.html:187 templates/contest/list.html:194
msgid "Start"
msgstr "Bắt đầu"
#: templates/contest/list.html:190
msgid "End"
msgstr "Kết thúc"
#: templates/contest/list.html:198
msgid "Length"
msgstr "Dài"
#: templates/contest/list.html:200
#, python-format
msgid "%(time_limit)s"
msgstr "%(time_limit)s"
#: templates/contest/list.html:202
#, python-format
msgid "%(duration)s"
msgstr "%(duration)s"
#: templates/contest/list.html:223
msgid "Spectate"
msgstr "Theo dõi"
#: templates/contest/list.html:229 templates/organization/home.html:23
msgid "Join"
msgstr "Tham gia"
#: templates/contest/list.html:249
msgid "Active" msgid "Active"
msgstr "Đang tham gia" msgstr "Đang tham gia"
#: templates/contest/list.html:257 #: templates/contest/list.html:152
msgid "Ongoing" msgid "Ongoing"
msgstr "Đang diễn ra" msgstr "Đang diễn ra"
#: templates/contest/list.html:264 #: templates/contest/list.html:159
msgid "Upcoming" msgid "Upcoming"
msgstr "Sắp diễn ra" msgstr "Sắp diễn ra"
#: templates/contest/list.html:271 #: templates/contest/list.html:166
msgid "Past" msgid "Past"
msgstr "Đã diễn ra" msgstr "Đã diễn ra"
#: templates/contest/list.html:291 #: templates/contest/list.html:187
#, python-format #, python-format
msgid "Window ends in %(countdown)s" msgid "Window ends in %(countdown)s"
msgstr "Cửa số thi còn %(countdown)s" msgstr "Cửa số thi còn %(countdown)s"
#: templates/contest/list.html:294 templates/contest/list.html:330 #: templates/contest/list.html:190 templates/contest/list.html:228
#, python-format #, python-format
msgid "Ends in %(countdown)s" msgid "Ends in %(countdown)s"
msgstr "Kết thúc trong %(countdown)s" msgstr "Kết thúc trong %(countdown)s"
#: templates/contest/list.html:314 #: templates/contest/list.html:210
msgid "There is no active contest at this time." msgid "There is no active contest at this time."
msgstr "Không có kỳ thi nào đang tham gia." msgstr "Không có kỳ thi nào đang tham gia."
#: templates/contest/list.html:349 #: templates/contest/list.html:247
msgid "There is no ongoing contest at this time." msgid "There is no ongoing contest at this time."
msgstr "Không có kỳ thi nào đang diễn ra hiện tại." msgstr "Không có kỳ thi nào đang diễn ra hiện tại."
#: templates/contest/list.html:381 #: templates/contest/list.html:281
msgid "There is no scheduled contest at this time." msgid "There is no scheduled contest at this time."
msgstr "Không có kỳ thi nào được lên lịch hiện tại." msgstr "Không có kỳ thi nào được lên lịch hiện tại."
#: templates/contest/list.html:419 #: templates/contest/list.html:321
msgid "There is no past contest." msgid "There is no past contest."
msgstr "Không có kỳ thi nào trong quá khứ." msgstr "Không có kỳ thi nào trong quá khứ."
#: templates/contest/macros.html:8
msgid "hidden"
msgstr "ẩn"
#: templates/contest/macros.html:20
msgid "private"
msgstr "riêng tư"
#: templates/contest/macros.html:32
msgid "rated"
msgstr "rated"
#: templates/contest/macros.html:51 templates/contest/macros.html:58
msgid "Start"
msgstr "Bắt đầu"
#: templates/contest/macros.html:54
msgid "End"
msgstr "Kết thúc"
#: templates/contest/macros.html:62
msgid "Length"
msgstr "Dài"
#: templates/contest/macros.html:64
#, python-format
msgid "%(time_limit)s"
msgstr "%(time_limit)s"
#: templates/contest/macros.html:66
#, python-format
msgid "%(duration)s"
msgstr "%(duration)s"
#: templates/contest/macros.html:87
msgid "Spectate"
msgstr "Theo dõi"
#: templates/contest/macros.html:93 templates/organization/home.html:23
msgid "Join"
msgstr "Tham gia"
#: templates/contest/media-js.html:147 #: templates/contest/media-js.html:147
msgid "Are you sure you want to leave?" msgid "Are you sure you want to leave?"
msgstr "Bạn có chắc muốn rời?" msgstr "Bạn có chắc muốn rời?"
@ -6066,13 +6073,29 @@ msgstr "Min. rating:"
msgid "Max rating:" msgid "Max rating:"
msgstr "Max rating:" msgstr "Max rating:"
#: templates/user/user-bookmarks.html:14 #: templates/user/user-bookmarks.html:22
msgid "Editorials"
msgstr "Lời giải"
#: templates/user/user-bookmarks.html:25
msgid "Posts" msgid "Posts"
msgstr "Bài đăng" msgstr "Bài đăng"
#: templates/user/user-bookmarks.html:78 #: templates/user/user-bookmarks.html:71
msgid "Editorials" msgid "There is no saved problem."
msgstr "Lời giải" msgstr "Không có bài tập nào đã lưu."
#: templates/user/user-bookmarks.html:100
msgid "There is no saved contest."
msgstr "Không có kỳ thi đã lưu."
#: templates/user/user-bookmarks.html:141
msgid "There is no saved editorial."
msgstr "Không có lời giải nào đã lưu."
#: templates/user/user-bookmarks.html:190
msgid "There is no saved post."
msgstr "Không có bài đăng nào đã lưu."
#: templates/user/user-problems.html:35 #: templates/user/user-problems.html:35
msgid "Points Breakdown" msgid "Points Breakdown"

View file

@ -204,6 +204,9 @@
<div class="dropdown-item">{{ _('Stats') }}</div> <div class="dropdown-item">{{ _('Stats') }}</div>
</a> </a>
{% endif %} {% endif %}
<a href="{{ url('user_bookmark') }}">
<div class="dropdown-item">{{ _('Bookmarks') }}</div>
</a>
<a href="{{ url('user_edit_profile') }}"> <a href="{{ url('user_edit_profile') }}">
<div class="dropdown-item">{{ _('Edit profile') }}</div> <div class="dropdown-item">{{ _('Edit profile') }}</div>
</a> </a>

View file

@ -175,7 +175,7 @@
<div class="list-contest"> <div class="list-contest">
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Contests') }} </div> <div class="contest-title"> {{ _('Contests') }} </div>
{{ contest_head(contest) }} {{ contest_head(contest, organization) }}
</div> </div>
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Time') }} </div> <div class="contest-title"> {{ _('Time') }} </div>
@ -217,7 +217,7 @@
<div class="list-contest"> <div class="list-contest">
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Contests') }} </div> <div class="contest-title"> {{ _('Contests') }} </div>
{{ contest_head(contest) }} {{ contest_head(contest, organization) }}
</div> </div>
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Time') }} </div> <div class="contest-title"> {{ _('Time') }} </div>
@ -254,7 +254,7 @@
<div class="list-contest"> <div class="list-contest">
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Contests') }} </div> <div class="contest-title"> {{ _('Contests') }} </div>
{{ contest_head(contest) }} {{ contest_head(contest, organization) }}
</div> </div>
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Time') }} </div> <div class="contest-title"> {{ _('Time') }} </div>
@ -288,7 +288,7 @@
<div class="list-contest"> <div class="list-contest">
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Contests') }} </div> <div class="contest-title"> {{ _('Contests') }} </div>
{{ contest_head(contest) }} {{ contest_head(contest, organization) }}
</div> </div>
<div class="info-contest"> <div class="info-contest">
<div class="contest-title"> {{ _('Time') }} </div> <div class="contest-title"> {{ _('Time') }} </div>

View file

@ -1,4 +1,4 @@
{% macro contest_head(contest) %} {% macro contest_head(contest, organization=None) %}
<a href="{{ url('contest_view', contest.key) }}" class="contest-list-title" style="margin-right: 5px;"> <a href="{{ url('contest_view', contest.key) }}" class="contest-list-title" style="margin-right: 5px;">
{{contest.name}} {{contest.name}}
</a> </a>
@ -8,7 +8,7 @@
<i class="fa fa-eye-slash"></i> {{ _('hidden') }} <i class="fa fa-eye-slash"></i> {{ _('hidden') }}
</span> </span>
{% endif %} {% endif %}
{% if contest.is_editable %} {% if organization and contest.is_editable %}
<span class="contest-tag contest-tag-edit"> <span class="contest-tag contest-tag-edit">
<a href="{{ url('organization_contest_edit', organization.id, organization.slug, contest.key) }}" class="white"> <a href="{{ url('organization_contest_edit', organization.id, organization.slug, contest.key) }}" class="white">
<i class="fa fa-edit"></i> {{ _('Edit') }} <i class="fa fa-edit"></i> {{ _('Edit') }}
@ -20,7 +20,7 @@
<i class="fa fa-lock"></i> {{ _('private') }} <i class="fa fa-lock"></i> {{ _('private') }}
</span> </span>
{% endif %} {% endif %}
{% if not hide_contest_orgs %} {% if not organization %}
{% if contest.is_organization_private %} {% if contest.is_organization_private %}
{% for org in contest.organizations.all() %} {% for org in contest.organizations.all() %}
{% include "organization/tag.html" %} {% include "organization/tag.html" %}

View file

@ -8,7 +8,7 @@
{{ make_tab('impersonate', 'fa-eye', url('impersonate-start', user.user.id), _('Impersonate')) }} {{ make_tab('impersonate', 'fa-eye', url('impersonate-start', user.user.id), _('Impersonate')) }}
{% endif %} {% endif %}
{% if user.user == request.user %} {% if user.user == request.user %}
{{ make_tab('bookmark', 'fa-bookmark', url('user_bookmark'), _('Bookmark')) }} {{ make_tab('bookmark', 'fa-bookmark', url('user_bookmark'), _('Bookmarks')) }}
{{ make_tab('edit', 'fa-edit', url('user_edit_profile'), _('Edit profile')) }} {{ make_tab('edit', 'fa-edit', url('user_edit_profile'), _('Edit profile')) }}
{% else %} {% else %}
{% if perms.auth.change_user %} {% if perms.auth.change_user %}