diff --git a/judge/utils/problems.py b/judge/utils/problems.py
index 73d53d0..d20e542 100644
--- a/judge/utils/problems.py
+++ b/judge/utils/problems.py
@@ -88,11 +88,19 @@ def user_attempted_ids(profile):
result = cache.get(key)
if result is None:
result = {
- id: {"achieved_points": points, "max_points": max_points}
- for id, max_points, points in (
+ id: {
+ "achieved_points": points,
+ "max_points": max_points,
+ "last_submission": last_submission,
+ "code": problem_code,
+ "name": problem_name,
+ }
+ for id, max_points, problem_code, problem_name, points, last_submission in (
Submission.objects.filter(user=profile)
- .values_list("problem__id", "problem__points")
- .annotate(points=Max("points"))
+ .values_list(
+ "problem__id", "problem__points", "problem__code", "problem__name"
+ )
+ .annotate(points=Max("points"), last_submission=Max("id"))
.filter(points__lt=F("problem__points"))
)
}
diff --git a/judge/views/problem.py b/judge/views/problem.py
index 08bcb54..1efca66 100644
--- a/judge/views/problem.py
+++ b/judge/views/problem.py
@@ -52,6 +52,7 @@ from judge.models import (
TranslatedProblemForeignKeyQuerySet,
Organization,
VolunteerProblemVote,
+ Profile,
)
from judge.pdf_problems import DefaultPdfMaker, HAS_PDF
from judge.utils.diggpaginator import DiggPaginator
@@ -130,6 +131,15 @@ class SolvedProblemMixin(object):
else:
return user_attempted_ids(self.profile) if self.profile is not None else ()
+ def get_latest_attempted_problems(self, limit=None):
+ if self.in_contest or not self.profile:
+ return ()
+ result = list(user_attempted_ids(self.profile).values())
+ result = sorted(result, key=lambda d: -d["last_submission"])
+ if limit:
+ result = result[:limit]
+ return result
+
@cached_property
def in_contest(self):
return (
@@ -582,6 +592,8 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
Q(organizations__in=self.org_query)
| Q(contests__contest__organizations__in=self.org_query)
)
+ if self.author_query:
+ queryset = queryset.filter(authors__in=self.author_query)
if self.show_types:
queryset = queryset.prefetch_related("types")
if self.category is not None:
@@ -639,6 +651,8 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
context["have_editorial"] = 0 if self.in_contest else int(self.have_editorial)
context["organizations"] = Organization.objects.all()
+ all_authors_ids = set(Problem.objects.values_list("authors", flat=True))
+ context["all_authors"] = Profile.objects.filter(id__in=all_authors_ids)
context["category"] = self.category
context["categories"] = ProblemGroup.objects.all()
if self.show_types:
@@ -646,9 +660,11 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
context["problem_types"] = ProblemType.objects.all()
context["has_fts"] = settings.ENABLE_FTS
context["org_query"] = self.org_query
+ context["author_query"] = self.author_query
context["search_query"] = self.search_query
context["completed_problem_ids"] = self.get_completed_problems()
context["attempted_problems"] = self.get_attempted_problems()
+ context["last_attempted_problems"] = self.get_latest_attempted_problems(15)
context["page_type"] = "list"
context.update(self.get_sort_paginate_context())
if not self.in_contest:
@@ -736,6 +752,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
self.search_query = None
self.category = None
self.org_query = []
+ self.author_query = []
self.selected_types = []
# This actually copies into the instance dictionary...
@@ -749,12 +766,16 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
self.selected_types = list(map(int, request.GET.getlist("type")))
except ValueError:
pass
-
if "orgs" in request.GET:
try:
self.org_query = list(map(int, request.GET.getlist("orgs")))
except ValueError:
pass
+ if "authors" in request.GET:
+ try:
+ self.author_query = list(map(int, request.GET.getlist("authors")))
+ except ValueError:
+ pass
self.point_start = safe_float_or_none(request.GET.get("point_start"))
self.point_end = safe_float_or_none(request.GET.get("point_end"))
diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po
index 1e853b8..bd1b0d1 100644
--- a/locale/vi/LC_MESSAGES/django.po
+++ b/locale/vi/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lqdoj2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-03 09:54+0700\n"
+"POT-Creation-Date: 2022-05-22 08:28+0700\n"
"PO-Revision-Date: 2021-07-20 03:44\n"
"Last-Translator: Icyene\n"
"Language-Team: Vietnamese\n"
@@ -18,326 +18,326 @@ msgstr ""
"X-Crowdin-Project-ID: 466004\n"
"X-Crowdin-File-ID: 5\n"
-#: chat_box/models.py:23 chat_box/models.py:41 chat_box/models.py:47
-#: judge/admin/interface.py:112 judge/models/contest.py:404
-#: judge/models/contest.py:529 judge/models/profile.py:220
+#: chat_box/models.py:31 chat_box/models.py:52 chat_box/models.py:63
+#: judge/admin/interface.py:150 judge/models/contest.py:621
+#: judge/models/contest.py:809 judge/models/profile.py:338
msgid "user"
msgstr "người dùng"
-#: chat_box/models.py:24 judge/models/comment.py:43 judge/models/comment.py:193
+#: chat_box/models.py:32 judge/models/comment.py:46 judge/models/comment.py:242
msgid "posted time"
msgstr "thời gian đăng"
-#: chat_box/models.py:25 judge/models/comment.py:47
+#: chat_box/models.py:33 judge/models/comment.py:54
msgid "body of comment"
msgstr "nội dung bình luận"
-#: chat_box/models.py:43
+#: chat_box/models.py:56
msgid "last seen"
msgstr "xem lần cuối"
-#: chat_box/views.py:29 templates/chat/chat.html:4 templates/chat/chat.html:548
+#: chat_box/views.py:45 templates/chat/chat.html:4 templates/chat/chat.html:553
msgid "Chat Box"
msgstr "Chat Box"
-#: dmoj/settings.py:360
+#: dmoj/settings.py:365
msgid "German"
msgstr ""
-#: dmoj/settings.py:361
+#: dmoj/settings.py:366
msgid "English"
msgstr ""
-#: dmoj/settings.py:362
+#: dmoj/settings.py:367
msgid "Spanish"
msgstr ""
-#: dmoj/settings.py:363
+#: dmoj/settings.py:368
msgid "French"
msgstr ""
-#: dmoj/settings.py:364
+#: dmoj/settings.py:369
msgid "Croatian"
msgstr ""
-#: dmoj/settings.py:365
+#: dmoj/settings.py:370
msgid "Hungarian"
msgstr ""
-#: dmoj/settings.py:366
+#: dmoj/settings.py:371
msgid "Japanese"
msgstr ""
-#: dmoj/settings.py:367
+#: dmoj/settings.py:372
msgid "Korean"
msgstr ""
-#: dmoj/settings.py:368
+#: dmoj/settings.py:373
msgid "Brazilian Portuguese"
msgstr ""
-#: dmoj/settings.py:369
+#: dmoj/settings.py:374
msgid "Romanian"
msgstr ""
-#: dmoj/settings.py:370
+#: dmoj/settings.py:375
msgid "Russian"
msgstr ""
-#: dmoj/settings.py:371
+#: dmoj/settings.py:376
msgid "Serbian (Latin)"
msgstr ""
-#: dmoj/settings.py:372
+#: dmoj/settings.py:377
msgid "Turkish"
msgstr ""
-#: dmoj/settings.py:373
+#: dmoj/settings.py:378
msgid "Vietnamese"
msgstr "Tiếng Việt"
-#: dmoj/settings.py:374
+#: dmoj/settings.py:379
msgid "Simplified Chinese"
msgstr ""
-#: dmoj/settings.py:375
+#: dmoj/settings.py:380
msgid "Traditional Chinese"
msgstr ""
-#: dmoj/urls.py:58
+#: dmoj/urls.py:130
msgid "Login"
msgstr "Đăng nhập"
-#: dmoj/urls.py:106 templates/base.html:213
+#: dmoj/urls.py:206 templates/base.html:213
msgid "Home"
msgstr "Trang chủ"
-#: judge/admin/comments.py:41
+#: judge/admin/comments.py:46
#, python-format
msgid "%d comment successfully hidden."
msgid_plural "%d comments successfully hidden."
msgstr[0] "Đã ẩn %d bình luận."
-#: judge/admin/comments.py:44
+#: judge/admin/comments.py:53
msgid "Hide comments"
msgstr "Ẩn bình luận"
-#: judge/admin/comments.py:48
+#: judge/admin/comments.py:60
#, python-format
msgid "%d comment successfully unhidden."
msgid_plural "%d comments successfully unhidden."
msgstr[0] "Không ẩn được %d bình luận."
-#: judge/admin/comments.py:51
+#: judge/admin/comments.py:67
msgid "Unhide comments"
msgstr "Hiện bình luận"
-#: judge/admin/comments.py:59
+#: judge/admin/comments.py:76
msgid "Associated page"
msgstr "Trang liên kết"
-#: judge/admin/contest.py:31
+#: judge/admin/contest.py:37
msgid "Included contests"
msgstr ""
-#: judge/admin/contest.py:67 judge/admin/volunteer.py:17
+#: judge/admin/contest.py:74 judge/admin/volunteer.py:33
#: templates/contest/clarification.html:42 templates/contest/contest.html:83
#: templates/contest/moss.html:43 templates/internal/base.html:29
-#: templates/internal/base.html:37 templates/problem/list.html:278
-#: templates/problem/list.html:294 templates/problem/list.html:412
+#: templates/internal/base.html:37 templates/problem/list.html:264
+#: templates/problem/list.html:279 templates/problem/list.html:395
#: templates/user/user-problems.html:56 templates/user/user-problems.html:98
msgid "Problem"
msgstr "Bài tập"
-#: judge/admin/contest.py:120
+#: judge/admin/contest.py:149
msgid "Settings"
msgstr "Cài đặt"
-#: judge/admin/contest.py:122
+#: judge/admin/contest.py:161
msgid "Scheduling"
msgstr ""
-#: judge/admin/contest.py:123 templates/organization/home.html:100
+#: judge/admin/contest.py:163 templates/organization/home.html:100
msgid "Details"
msgstr "Chi tiết"
-#: judge/admin/contest.py:124
+#: judge/admin/contest.py:175
msgid "Format"
msgstr "Thể thức"
-#: judge/admin/contest.py:125 templates/contest/ranking-table.html:7
+#: judge/admin/contest.py:179 templates/contest/ranking-table.html:7
#: templates/user/user-about.html:15 templates/user/user-about.html:45
msgid "Rating"
msgstr ""
-#: judge/admin/contest.py:126
+#: judge/admin/contest.py:191
msgid "Access"
msgstr "Truy cập"
-#: judge/admin/contest.py:128 judge/admin/problem.py:135
+#: judge/admin/contest.py:203 judge/admin/problem.py:192
msgid "Justice"
msgstr "Xử phạt"
-#: judge/admin/contest.py:208
+#: judge/admin/contest.py:313
#, python-format
msgid "%d contest successfully marked as visible."
msgid_plural "%d contests successfully marked as visible."
msgstr[0] "%d kỳ thi đã được đánh dấu hiển thị."
-#: judge/admin/contest.py:211
+#: judge/admin/contest.py:320
msgid "Mark contests as visible"
msgstr "Đánh dấu hiển thị các kỳ thi"
-#: judge/admin/contest.py:217
+#: judge/admin/contest.py:331
#, python-format
msgid "%d contest successfully marked as hidden."
msgid_plural "%d contests successfully marked as hidden."
msgstr[0] "%d kỳ thi đã được đánh dấu ẩn."
-#: judge/admin/contest.py:220
+#: judge/admin/contest.py:338
msgid "Mark contests as hidden"
msgstr "Ẩn các kỳ thi"
-#: judge/admin/contest.py:234 judge/admin/submission.py:164
+#: judge/admin/contest.py:359 judge/admin/submission.py:243
#, python-format
msgid "%d submission was successfully scheduled for rejudging."
msgid_plural "%d submissions were successfully scheduled for rejudging."
msgstr[0] "%d bài nộp đã được lên lịch thành công để chấm lại."
-#: judge/admin/contest.py:309
+#: judge/admin/contest.py:467
#, python-format
msgid "%d participation recalculated."
msgid_plural "%d participations recalculated."
msgstr[0] "%d thí sinh đã được tính điểm lại."
-#: judge/admin/contest.py:312
+#: judge/admin/contest.py:474
msgid "Recalculate results"
msgstr "Tính toán lại kết quả"
-#: judge/admin/contest.py:316 judge/admin/organization.py:65
+#: judge/admin/contest.py:479 judge/admin/organization.py:92
msgid "username"
msgstr "tên đăng nhập"
-#: judge/admin/contest.py:321 templates/base.html:304
+#: judge/admin/contest.py:485 templates/base.html:304
msgid "virtual"
msgstr "ảo"
-#: judge/admin/interface.py:30 judge/models/interface.py:46
+#: judge/admin/interface.py:35 judge/models/interface.py:46
msgid "link path"
msgstr "đường dẫn"
-#: judge/admin/interface.py:67
+#: judge/admin/interface.py:94
msgid "Content"
msgstr "Nội dung"
-#: judge/admin/interface.py:68
+#: judge/admin/interface.py:95
msgid "Summary"
msgstr "Tổng kết"
-#: judge/admin/interface.py:153
+#: judge/admin/interface.py:212
msgid "object"
msgstr ""
-#: judge/admin/interface.py:161
+#: judge/admin/interface.py:222
msgid "Diff"
msgstr ""
-#: judge/admin/interface.py:165
+#: judge/admin/interface.py:227
msgid "diff"
msgstr ""
-#: judge/admin/organization.py:34 judge/admin/problem.py:175
-#: judge/admin/profile.py:80
+#: judge/admin/organization.py:59 judge/admin/problem.py:254
+#: judge/admin/profile.py:116
msgid "View on site"
msgstr "Xem trên trang"
-#: judge/admin/problem.py:32
+#: judge/admin/problem.py:48
msgid "Describe the changes you made (optional)"
msgstr "Mô tả các thay đổi (tùy chọn)"
-#: judge/admin/problem.py:130
+#: judge/admin/problem.py:185
msgid "Social Media"
msgstr "Mạng Xã Hội"
-#: judge/admin/problem.py:131
+#: judge/admin/problem.py:188
msgid "Taxonomy"
msgstr ""
-#: judge/admin/problem.py:132 judge/admin/problem.py:286
-#: templates/contest/contest.html:84 templates/problem/data.html:474
-#: templates/problem/list.html:284 templates/problem/list.html:310
+#: judge/admin/problem.py:189 judge/admin/problem.py:407
+#: templates/contest/contest.html:84 templates/problem/data.html:476
+#: templates/problem/list.html:269 templates/problem/list.html:293
#: templates/user/base-users-table.html:10 templates/user/user-about.html:36
#: templates/user/user-about.html:52 templates/user/user-problems.html:58
msgid "Points"
msgstr "Điểm"
-#: judge/admin/problem.py:133
+#: judge/admin/problem.py:190
msgid "Limits"
msgstr "Giới hạn"
-#: judge/admin/problem.py:134 judge/admin/submission.py:232
+#: judge/admin/problem.py:191 judge/admin/submission.py:353
#: templates/stats/base.html:14 templates/submission/list.html:322
msgid "Language"
msgstr "Ngôn ngữ"
-#: judge/admin/problem.py:136
+#: judge/admin/problem.py:193
msgid "History"
msgstr "Lịch sử"
-#: judge/admin/problem.py:172
+#: judge/admin/problem.py:250 templates/problem/list.html:97
msgid "Authors"
msgstr "Các tác giả"
-#: judge/admin/problem.py:187
+#: judge/admin/problem.py:271
#, python-format
msgid "%d problem successfully marked as public."
msgid_plural "%d problems successfully marked as public."
msgstr[0] "%d bài tập đã được đánh dấu công khai."
-#: judge/admin/problem.py:191
+#: judge/admin/problem.py:278
msgid "Mark problems as public"
msgstr "Công khai bài tập"
-#: judge/admin/problem.py:197
+#: judge/admin/problem.py:287
#, python-format
msgid "%d problem successfully marked as private."
msgid_plural "%d problems successfully marked as private."
msgstr[0] "%d bài tập đã được đánh dấu riêng tư."
-#: judge/admin/problem.py:201
+#: judge/admin/problem.py:294
msgid "Mark problems as private"
msgstr "Đánh dấu các bài tập là riêng tư"
-#: judge/admin/problem.py:281 judge/admin/submission.py:200
-#: templates/problem/list.html:279 templates/problem/list.html:298
+#: judge/admin/problem.py:401 judge/admin/submission.py:316
+#: templates/problem/list.html:265 templates/problem/list.html:282
msgid "Problem code"
msgstr "Mã bài"
-#: judge/admin/problem.py:291 judge/admin/submission.py:205
+#: judge/admin/problem.py:413 judge/admin/submission.py:322
msgid "Problem name"
msgstr "Tên bài"
-#: judge/admin/problem.py:296
+#: judge/admin/problem.py:419
#, fuzzy
#| msgid "contest rating"
msgid "Voter rating"
msgstr "rating kỳ thi"
-#: judge/admin/problem.py:301
+#: judge/admin/problem.py:425
#, fuzzy
#| msgid "Total points"
msgid "Voter point"
msgstr "Tổng điểm"
-#: judge/admin/problem.py:306
+#: judge/admin/problem.py:431
msgid "Vote"
msgstr ""
-#: judge/admin/profile.py:34
+#: judge/admin/profile.py:40
msgid "timezone"
msgstr "múi giờ"
-#: judge/admin/profile.py:86 judge/admin/submission.py:211
+#: judge/admin/profile.py:125 judge/admin/submission.py:329
#: templates/notification/list.html:12
#: templates/organization/requests/log.html:9
#: templates/organization/requests/pending.html:12
@@ -345,28 +345,28 @@ msgstr "múi giờ"
msgid "User"
msgstr "Thành viên"
-#: judge/admin/profile.py:91 templates/registration/registration_form.html:145
+#: judge/admin/profile.py:131 templates/registration/registration_form.html:145
#: templates/user/import/table_csv.html:8
msgid "Email"
msgstr "Email"
-#: judge/admin/profile.py:96 judge/views/register.py:29
+#: judge/admin/profile.py:137 judge/views/register.py:37
#: templates/registration/registration_form.html:173
#: templates/user/edit-profile.html:116
msgid "Timezone"
msgstr "Múi giờ"
-#: judge/admin/profile.py:101
+#: judge/admin/profile.py:143
msgid "date joined"
msgstr "ngày tham gia"
-#: judge/admin/profile.py:108
+#: judge/admin/profile.py:153
#, python-format
msgid "%d user have scores recalculated."
msgid_plural "%d users have scores recalculated."
msgstr[0] "%d người dùng đã được tính điểm lại."
-#: judge/admin/profile.py:111
+#: judge/admin/profile.py:160
msgid "Recalculate scores"
msgstr "Tính điểm lại"
@@ -378,87 +378,87 @@ msgstr "Các bài tập không được cho phép"
msgid "These problems are NOT allowed to be submitted in this language"
msgstr "Các bài này không cho phép sử dụng ngôn ngữ này"
-#: judge/admin/runtime.py:83 templates/problem/list.html:414
+#: judge/admin/runtime.py:117 templates/problem/list.html:397
msgid "Description"
msgstr "Mô tả"
-#: judge/admin/runtime.py:84
+#: judge/admin/runtime.py:119
msgid "Information"
msgstr "Thông tin"
-#: judge/admin/runtime.py:85
+#: judge/admin/runtime.py:122
msgid "Capabilities"
msgstr "Khả năng"
-#: judge/admin/submission.py:23 judge/admin/submission.py:42
-#: judge/admin/submission.py:221
+#: judge/admin/submission.py:31 judge/admin/submission.py:53
+#: judge/admin/submission.py:340
msgid "None"
msgstr "None"
-#: judge/admin/submission.py:23
+#: judge/admin/submission.py:32
msgid "Not done"
msgstr "Chưa xong"
-#: judge/admin/submission.py:23
+#: judge/admin/submission.py:33
msgid "Exceptional"
msgstr "Đặc biệt"
-#: judge/admin/submission.py:42
+#: judge/admin/submission.py:53
msgid "Unaccepted"
msgstr ""
-#: judge/admin/submission.py:89
+#: judge/admin/submission.py:104
#, python-format
msgctxt "contest problem"
msgid "%(problem)s in %(contest)s"
msgstr "%(problem)s trong %(contest)s"
-#: judge/admin/submission.py:149 judge/admin/submission.py:171
+#: judge/admin/submission.py:215 judge/admin/submission.py:256
msgid "You do not have the permission to rejudge submissions."
msgstr "Bạn không có quyền chấm lại bài."
-#: judge/admin/submission.py:155
+#: judge/admin/submission.py:227
msgid "You do not have the permission to rejudge THAT many submissions."
msgstr "Bạn không có quyền chấm lại nhiều bài nộp như vậy."
-#: judge/admin/submission.py:167
+#: judge/admin/submission.py:250
msgid "Rejudge the selected submissions"
msgstr "Chấm lại các bài nộp đã chọn"
-#: judge/admin/submission.py:193 judge/views/problem_manage.py:159
+#: judge/admin/submission.py:304 judge/views/problem_manage.py:212
#, python-format
msgid "%d submission were successfully rescored."
msgid_plural "%d submissions were successfully rescored."
msgstr[0] "%d bài nộp đã được tính điểm lại."
-#: judge/admin/submission.py:196
+#: judge/admin/submission.py:311
msgid "Rescore the selected submissions"
msgstr "Tính điểm lại cái bài nộp"
-#: judge/admin/submission.py:215 templates/notification/list.html:15
+#: judge/admin/submission.py:334 templates/notification/list.html:15
#: templates/organization/requests/log.html:10
#: templates/organization/requests/pending.html:13
-#: templates/problem/list.html:413
+#: templates/problem/list.html:396
#: templates/submission/status-testcases.html:125
#: templates/submission/status-testcases.html:127
msgid "Time"
msgstr "Thời gian"
-#: judge/admin/submission.py:223
+#: judge/admin/submission.py:342
#, python-format
msgid "%d KB"
msgstr "%d KB"
-#: judge/admin/submission.py:225
+#: judge/admin/submission.py:344
#, python-format
msgid "%.2f MB"
msgstr ""
-#: judge/admin/submission.py:227 templates/submission/status-testcases.html:132
+#: judge/admin/submission.py:347 templates/submission/status-testcases.html:132
msgid "Memory"
msgstr "Bộ nhớ"
-#: judge/admin/taxon.py:11 judge/admin/taxon.py:34
+#: judge/admin/taxon.py:11 judge/admin/taxon.py:37
msgid "Included problems"
msgstr ""
@@ -466,7 +466,7 @@ msgstr ""
msgid "These problems are included in this group of problems"
msgstr "Các bài tập trong nhóm này"
-#: judge/admin/taxon.py:37
+#: judge/admin/taxon.py:40
msgid "These problems are included in this type of problems"
msgstr "Các bài tập dạng này"
@@ -474,20 +474,20 @@ msgstr "Các bài tập dạng này"
msgid "Online Judge"
msgstr ""
-#: judge/comments.py:60
+#: judge/comments.py:61
msgid "Comment body"
msgstr "Nội dung bình luận"
-#: judge/comments.py:66 judge/views/ticket.py:63
+#: judge/comments.py:67 judge/views/ticket.py:78
msgid "Your part is silent, little toad."
msgstr "Bạn không được phép bình luận."
-#: judge/comments.py:69 templates/comments/list.html:132
+#: judge/comments.py:76 templates/comments/list.html:132
msgid ""
"You need to have solved at least one problem before your voice can be heard."
msgstr "Bạn phải giải ít nhất một bài trước khi được phép bình luận."
-#: judge/comments.py:115
+#: judge/comments.py:129
msgid "Posted comment"
msgstr "Bình luận đã đăng"
@@ -511,57 +511,57 @@ msgstr ""
msgid "IOI"
msgstr ""
-#: judge/forms.py:27
+#: judge/forms.py:44
msgid "Subscribe to contest updates"
msgstr "Đăng ký để nhận thông báo về các kỳ thi"
-#: judge/forms.py:28
+#: judge/forms.py:47
msgid "Enable experimental features"
msgstr "Sử dụng các tính năng thử nghiệm"
-#: judge/forms.py:57 judge/views/organization.py:168 judge/views/register.py:49
+#: judge/forms.py:85 judge/views/organization.py:247 judge/views/register.py:69
#, python-brace-format
msgid "You may not be part of more than {count} public organizations."
msgstr "Bạn không thể tham gia nhiều hơn {count} tổ chức công khai."
-#: judge/forms.py:82
+#: judge/forms.py:116
msgid "Any judge"
msgstr ""
-#: judge/forms.py:112 judge/views/register.py:26
+#: judge/forms.py:148 judge/views/register.py:31
#: templates/registration/registration_form.html:139
#: templates/user/base-users-table.html:5
#: templates/user/import/table_csv.html:4
msgid "Username"
msgstr "Tên đăng nhập"
-#: judge/forms.py:113 templates/registration/registration_form.html:151
+#: judge/forms.py:149 templates/registration/registration_form.html:151
#: templates/registration/registration_form.html:165
#: templates/user/import/table_csv.html:5
msgid "Password"
msgstr "Mật khẩu"
-#: judge/forms.py:135
+#: judge/forms.py:175
msgid "Two Factor Authentication tokens must be 6 decimal digits."
msgstr "Two Factor Authentication phải chứa 6 chữ số."
-#: judge/forms.py:144 templates/registration/totp_auth.html:32
+#: judge/forms.py:188 templates/registration/totp_auth.html:32
msgid "Invalid Two Factor Authentication token."
msgstr "Token Two Factor Authentication không hợp lệ."
-#: judge/forms.py:148 judge/models/problem.py:98
+#: judge/forms.py:195 judge/models/problem.py:151
msgid "Problem code must be ^[a-z0-9]+$"
msgstr "Mã bài phải có dạng ^[a-z0-9]+$"
-#: judge/forms.py:153
+#: judge/forms.py:202
msgid "Problem with code already exists."
msgstr "Mã bài đã tồn tại."
-#: judge/forms.py:158 judge/models/contest.py:61
+#: judge/forms.py:209 judge/models/contest.py:89
msgid "Contest id must be ^[a-z0-9]+$"
msgstr "Mã kỳ thi phải có dạng ^[a-z0-9]+$"
-#: judge/forms.py:163
+#: judge/forms.py:215
msgid "Contest with key already exists."
msgstr "Mã kỳ thi đã tồn tại."
@@ -604,52 +604,52 @@ msgstr ""
msgid "Page code must be ^[pcs]:[a-z0-9]+$|^b:\\d+$"
msgstr "Mã trang phải có dạng ^[pcs]:[a-z0-9]+$|^b:\\d+$"
-#: judge/models/comment.py:42
+#: judge/models/comment.py:45
msgid "commenter"
msgstr "người bình luận"
-#: judge/models/comment.py:44 judge/models/comment.py:179
+#: judge/models/comment.py:49 judge/models/comment.py:223
msgid "associated page"
msgstr "trang tương ứng"
-#: judge/models/comment.py:46 judge/models/problem.py:496
+#: judge/models/comment.py:53 judge/models/problem.py:719
msgid "votes"
msgstr "bình chọn"
-#: judge/models/comment.py:48
+#: judge/models/comment.py:55
msgid "hide the comment"
msgstr "ẩn bình luận"
-#: judge/models/comment.py:49
+#: judge/models/comment.py:58
msgid "parent"
msgstr ""
-#: judge/models/comment.py:54 judge/models/comment.py:194
+#: judge/models/comment.py:67 judge/models/comment.py:244
msgid "comment"
msgstr "bình luận"
-#: judge/models/comment.py:55
+#: judge/models/comment.py:68
msgid "comments"
msgstr ""
-#: judge/models/comment.py:139 judge/models/problem.py:466
+#: judge/models/comment.py:160 judge/models/problem.py:687
#, python-format
msgid "Editorial for %s"
msgstr ""
-#: judge/models/comment.py:174
+#: judge/models/comment.py:216
msgid "comment vote"
msgstr ""
-#: judge/models/comment.py:175
+#: judge/models/comment.py:217
msgid "comment votes"
msgstr ""
-#: judge/models/comment.py:184
+#: judge/models/comment.py:229
msgid "Override comment lock"
msgstr ""
-#: judge/models/comment.py:192
+#: judge/models/comment.py:238
#: src/dmoj-wpadmin/test_project/apps/books/admin.py:24
#: src/dmoj-wpadmin/test_project/apps/books/models.py:30
#: src/dmoj-wpadmin/test_project/apps/cds/models.py:30
@@ -657,89 +657,89 @@ msgstr ""
msgid "owner"
msgstr ""
-#: judge/models/comment.py:195 judge/models/message.py:16
+#: judge/models/comment.py:246 judge/models/message.py:28
msgid "read"
msgstr ""
-#: judge/models/comment.py:196
+#: judge/models/comment.py:247
#: src/dmoj-wpadmin/test_project/apps/books/models.py:28
#: src/dmoj-wpadmin/test_project/apps/cds/models.py:28
#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:28
msgid "category"
msgstr ""
-#: judge/models/comment.py:197
+#: judge/models/comment.py:250
msgid "html link to comments, used for non-comments"
msgstr ""
-#: judge/models/comment.py:198
+#: judge/models/comment.py:256
msgid "who trigger, used for non-comment"
msgstr ""
-#: judge/models/contest.py:23
+#: judge/models/contest.py:36
msgid "Invalid colour."
msgstr ""
-#: judge/models/contest.py:25
+#: judge/models/contest.py:40
msgid "tag name"
msgstr ""
-#: judge/models/contest.py:26
+#: judge/models/contest.py:44
msgid "Lowercase letters and hyphens only."
msgstr ""
-#: judge/models/contest.py:27
+#: judge/models/contest.py:49
msgid "tag colour"
msgstr ""
-#: judge/models/contest.py:28
+#: judge/models/contest.py:51
msgid "tag description"
msgstr ""
-#: judge/models/contest.py:47
+#: judge/models/contest.py:72
msgid "contest tag"
msgstr ""
-#: judge/models/contest.py:48 judge/models/contest.py:119
+#: judge/models/contest.py:73 judge/models/contest.py:233
msgid "contest tags"
msgstr "nhãn kỳ thi"
-#: judge/models/contest.py:56
+#: judge/models/contest.py:81
msgid "Visible"
msgstr "Hiển thị"
-#: judge/models/contest.py:57
+#: judge/models/contest.py:82
msgid "Hidden for duration of contest"
msgstr "Ẩn trong thời gian kỳ thi"
-#: judge/models/contest.py:58
+#: judge/models/contest.py:83
msgid "Hidden for duration of participation"
msgstr "Ẩn trong thời gian tham gia"
-#: judge/models/contest.py:60
+#: judge/models/contest.py:87
msgid "contest id"
msgstr "ID kỳ thi"
-#: judge/models/contest.py:62
+#: judge/models/contest.py:92
msgid "contest name"
msgstr "tên kỳ thi"
-#: judge/models/contest.py:63
+#: judge/models/contest.py:96
msgid "These users will be able to edit the contest."
msgstr "Những người dùng này có quyền chỉnh sửa kỳ thi."
-#: judge/models/contest.py:65
+#: judge/models/contest.py:102
msgid ""
"These users will be able to edit the contest, but will not be listed as "
"authors."
msgstr "Những người dùng này là tác giả và có quyền chỉnh sửa kỳ thi."
-#: judge/models/contest.py:68
+#: judge/models/contest.py:111
msgid "These users will be able to view the contest, but not edit it."
msgstr ""
"Những người dùng này có thể thấy kỳ thi nhưng không có quyền chỉnh sửa."
-#: judge/models/contest.py:71 judge/models/runtime.py:136
+#: judge/models/contest.py:116 judge/models/runtime.py:211
#: src/dmoj-wpadmin/test_project/apps/books/admin.py:20
#: src/dmoj-wpadmin/test_project/apps/books/models.py:13
#: src/dmoj-wpadmin/test_project/apps/books/models.py:27
@@ -750,36 +750,36 @@ msgstr ""
msgid "description"
msgstr "mô tả"
-#: judge/models/contest.py:72 judge/models/problem.py:413
-#: judge/models/runtime.py:138
+#: judge/models/contest.py:118 judge/models/problem.py:600
+#: judge/models/runtime.py:216
msgid "problems"
msgstr "bài tập"
-#: judge/models/contest.py:73 judge/models/contest.py:405
+#: judge/models/contest.py:120 judge/models/contest.py:626
msgid "start time"
msgstr "thời gian bắt đầu"
-#: judge/models/contest.py:74
+#: judge/models/contest.py:121
msgid "end time"
msgstr "thời gian kết thúc"
-#: judge/models/contest.py:75 judge/models/problem.py:119
-#: judge/models/problem.py:437
+#: judge/models/contest.py:123 judge/models/problem.py:204
+#: judge/models/problem.py:645
msgid "time limit"
msgstr "giới hạn thời gian"
-#: judge/models/contest.py:76
+#: judge/models/contest.py:127
msgid ""
"Format hh:mm:ss. For example, if you want a 2-hour contest, enter 02:00:00"
msgstr ""
"Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn tạo kỳ thi dài 2h, hãy "
"nhập 02:00:00"
-#: judge/models/contest.py:77 judge/models/problem.py:137
+#: judge/models/contest.py:131 judge/models/problem.py:243
msgid "publicly visible"
msgstr "công khai"
-#: judge/models/contest.py:78
+#: judge/models/contest.py:134
msgid ""
"Should be set even for organization-private contests, where it determines "
"whether the contest is visible to members of the specified organizations."
@@ -787,84 +787,84 @@ msgstr ""
"Đánh dấu ngay cả với các kỳ thi riêng tư của tổ chức, quyết định việc kỳ thi "
"có được hiển thị với các thành viên hay không."
-#: judge/models/contest.py:81
+#: judge/models/contest.py:140
msgid "contest rated"
msgstr "kỳ thi được xếp hạng"
-#: judge/models/contest.py:81
+#: judge/models/contest.py:141
msgid "Whether this contest can be rated."
msgstr "Quyết định kỳ thi có được xếp hạng không."
-#: judge/models/contest.py:83
+#: judge/models/contest.py:145
msgid "scoreboard visibility"
msgstr "khả năng hiển thị của bảng điểm"
-#: judge/models/contest.py:84
+#: judge/models/contest.py:148
msgid "Scoreboard visibility through the duration of the contest"
msgstr "Khả năng hiển thị của bảng điểm trong thời gian kỳ thi"
-#: judge/models/contest.py:86
+#: judge/models/contest.py:153
msgid "view contest scoreboard"
msgstr "xem bảng điểm kỳ thi"
-#: judge/models/contest.py:88
+#: judge/models/contest.py:156
msgid "These users will be able to view the scoreboard."
msgstr "Những người dùng này được phép xem bảng điểm."
-#: judge/models/contest.py:89
+#: judge/models/contest.py:159
msgid "no comments"
msgstr "không bình luận"
-#: judge/models/contest.py:90
+#: judge/models/contest.py:160
msgid "Use clarification system instead of comments."
msgstr "Dùng hệ thống thông báo thay vì bình luận."
-#: judge/models/contest.py:92
+#: judge/models/contest.py:165
msgid "Rating floor for contest"
msgstr "Cận dưới rating được xếp hạng trong kỳ thi"
-#: judge/models/contest.py:94
+#: judge/models/contest.py:171
msgid "Rating ceiling for contest"
msgstr "Cận trên rating được xếp hạng trong kỳ thi"
-#: judge/models/contest.py:96
+#: judge/models/contest.py:176
msgid "rate all"
msgstr "xếp hạng tất cả"
-#: judge/models/contest.py:96
+#: judge/models/contest.py:177
msgid "Rate all users who joined."
msgstr "Xếp hạng tất cả người dùng đã tham gia (kể cả không nộp)."
-#: judge/models/contest.py:97
+#: judge/models/contest.py:182
msgid "exclude from ratings"
msgstr "không xếp hạng"
-#: judge/models/contest.py:99
+#: judge/models/contest.py:187
msgid "private to specific users"
msgstr "riêng tư với các người dùng này"
-#: judge/models/contest.py:100
+#: judge/models/contest.py:192
msgid "private contestants"
msgstr "thí sinh riêng tư"
-#: judge/models/contest.py:101
+#: judge/models/contest.py:193
msgid "If private, only these users may see the contest"
msgstr "Nếu riêng tư, chỉ những người dùng này mới thấy kỳ thi"
-#: judge/models/contest.py:103
+#: judge/models/contest.py:197
msgid "hide problem tags"
msgstr "ẩn nhãn kỳ thi"
-#: judge/models/contest.py:104
+#: judge/models/contest.py:198
msgid "Whether problem tags should be hidden by default."
msgstr ""
"Quyết định việc nhãn bài tập (DP, Tham lam, ...) được ẩn trong kỳ thi không."
-#: judge/models/contest.py:106
+#: judge/models/contest.py:202
msgid "run pretests only"
msgstr "chỉ chạy pretests"
-#: judge/models/contest.py:107
+#: judge/models/contest.py:204
msgid ""
"Whether judges should grade pretests only, versus all testcases. Commonly "
"set during a contest, then unset prior to rejudging user submissions when "
@@ -873,50 +873,50 @@ msgstr ""
"Quyết định việc các máy chấm chỉ chấm pretests thay vì tất cả các test. Sau "
"kỳ thi, hãy bỏ đánh dấu ô này và chấm lại tất cả các bài."
-#: judge/models/contest.py:111 judge/models/interface.py:77
-#: judge/models/problem.py:158
+#: judge/models/contest.py:211 judge/models/interface.py:92
+#: judge/models/problem.py:300
msgid "private to organizations"
msgstr "riêng tư với các tổ chức"
-#: judge/models/contest.py:112 judge/models/interface.py:75
-#: judge/models/problem.py:156 judge/models/profile.py:77
+#: judge/models/contest.py:216 judge/models/interface.py:88
+#: judge/models/problem.py:296 judge/models/profile.py:116
msgid "organizations"
msgstr "tổ chức"
-#: judge/models/contest.py:113
+#: judge/models/contest.py:217
msgid "If private, only these organizations may see the contest"
msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được kỳ thi"
-#: judge/models/contest.py:114 judge/models/problem.py:146
+#: judge/models/contest.py:220 judge/models/problem.py:274
msgid "OpenGraph image"
msgstr "Hình ảnh OpenGraph"
-#: judge/models/contest.py:115 judge/models/profile.py:48
+#: judge/models/contest.py:223 judge/models/profile.py:80
msgid "Logo override image"
msgstr "Hình ảnh ghi đè logo"
-#: judge/models/contest.py:117
+#: judge/models/contest.py:228
msgid ""
"This image will replace the default site logo for users inside the contest."
msgstr "Ảnh này sẽ thay thế cho logo mặc định trong kỳ thi."
-#: judge/models/contest.py:120
+#: judge/models/contest.py:236
msgid "the amount of live participants"
msgstr "số lượng thí sinh thi trực tiếp"
-#: judge/models/contest.py:121
+#: judge/models/contest.py:240
msgid "contest summary"
msgstr "tổng kết kỳ thi"
-#: judge/models/contest.py:122 judge/models/problem.py:148
+#: judge/models/contest.py:242 judge/models/problem.py:280
msgid "Plain-text, shown in meta description tag, e.g. for social media."
msgstr ""
-#: judge/models/contest.py:123 judge/models/profile.py:47
+#: judge/models/contest.py:246 judge/models/profile.py:75
msgid "access code"
msgstr "mật khẩu truy cập"
-#: judge/models/contest.py:124
+#: judge/models/contest.py:251
msgid ""
"An optional code to prompt contestants before they are allowed to join the "
"contest. Leave it blank to disable."
@@ -924,251 +924,251 @@ msgstr ""
"Mật khẩu truy cập cho các thí sinh muốn tham gia kỳ thi. Để trống nếu không "
"dùng."
-#: judge/models/contest.py:126 judge/models/problem.py:142
+#: judge/models/contest.py:257 judge/models/problem.py:262
msgid "personae non gratae"
msgstr ""
-#: judge/models/contest.py:127
+#: judge/models/contest.py:259
msgid "Bans the selected users from joining this contest."
msgstr "Cấm những người dùng được chọn tham gia kỳ thi."
-#: judge/models/contest.py:128
+#: judge/models/contest.py:262
msgid "contest format"
msgstr "format kỳ thi"
-#: judge/models/contest.py:129
+#: judge/models/contest.py:266
msgid "The contest format module to use."
msgstr ""
-#: judge/models/contest.py:130
+#: judge/models/contest.py:269
msgid "contest format configuration"
msgstr ""
-#: judge/models/contest.py:131
+#: judge/models/contest.py:273
msgid ""
"A JSON object to serve as the configuration for the chosen contest format "
"module. Leave empty to use None. Exact format depends on the contest format "
"selected."
msgstr ""
-#: judge/models/contest.py:138
+#: judge/models/contest.py:286
msgid "precision points"
msgstr ""
-#: judge/models/contest.py:140
+#: judge/models/contest.py:289
msgid "Number of digits to round points to."
msgstr ""
-#: judge/models/contest.py:384
+#: judge/models/contest.py:594
msgid "See private contests"
msgstr ""
-#: judge/models/contest.py:385
+#: judge/models/contest.py:595
msgid "Edit own contests"
msgstr ""
-#: judge/models/contest.py:386
+#: judge/models/contest.py:596
msgid "Edit all contests"
msgstr ""
-#: judge/models/contest.py:387
+#: judge/models/contest.py:597
msgid "Clone contest"
msgstr ""
-#: judge/models/contest.py:388 templates/contest/moss.html:74
+#: judge/models/contest.py:598 templates/contest/moss.html:74
msgid "MOSS contest"
msgstr ""
-#: judge/models/contest.py:389
+#: judge/models/contest.py:599
msgid "Rate contests"
msgstr ""
-#: judge/models/contest.py:390
+#: judge/models/contest.py:600
msgid "Contest access codes"
msgstr ""
-#: judge/models/contest.py:391
+#: judge/models/contest.py:601
msgid "Create private contests"
msgstr ""
-#: judge/models/contest.py:392
+#: judge/models/contest.py:602
msgid "Change contest visibility"
msgstr ""
-#: judge/models/contest.py:393
+#: judge/models/contest.py:603
msgid "Edit contest problem label script"
msgstr ""
-#: judge/models/contest.py:395 judge/models/contest.py:493
-#: judge/models/contest.py:530 judge/models/contest.py:554
-#: judge/models/submission.py:84
+#: judge/models/contest.py:605 judge/models/contest.py:743
+#: judge/models/contest.py:812 judge/models/contest.py:842
+#: judge/models/submission.py:116
msgid "contest"
msgstr "kỳ thi"
-#: judge/models/contest.py:396
+#: judge/models/contest.py:606
msgid "contests"
msgstr "kỳ thi"
-#: judge/models/contest.py:403
+#: judge/models/contest.py:615
msgid "associated contest"
msgstr ""
-#: judge/models/contest.py:406
+#: judge/models/contest.py:628
msgid "score"
msgstr "điểm"
-#: judge/models/contest.py:407
+#: judge/models/contest.py:629
msgid "cumulative time"
msgstr "tổng thời gian"
-#: judge/models/contest.py:408
+#: judge/models/contest.py:631
msgid "is disqualified"
msgstr "đã bị loại"
-#: judge/models/contest.py:409
+#: judge/models/contest.py:633
msgid "Whether this participation is disqualified."
msgstr "Quyết định thí sinh có bị loại không."
-#: judge/models/contest.py:410
+#: judge/models/contest.py:635
msgid "tie-breaking field"
msgstr ""
-#: judge/models/contest.py:411
+#: judge/models/contest.py:637
msgid "virtual participation id"
msgstr "id lần tham gia ảo"
-#: judge/models/contest.py:412
+#: judge/models/contest.py:639
msgid "0 means non-virtual, otherwise the n-th virtual participation."
msgstr "0 nghĩa là tham gia chính thức, ngược lại là lần tham gia ảo thứ n."
-#: judge/models/contest.py:413
+#: judge/models/contest.py:642
msgid "contest format specific data"
msgstr ""
-#: judge/models/contest.py:479
+#: judge/models/contest.py:718
#, python-format
msgid "%s spectating in %s"
msgstr "%s đang theo dõi trong %s"
-#: judge/models/contest.py:481
+#: judge/models/contest.py:723
#, python-format
msgid "%s in %s, v%d"
msgstr "%s trong %s, v%d"
-#: judge/models/contest.py:482
+#: judge/models/contest.py:728
#, python-format
msgid "%s in %s"
msgstr "%s trong %s"
-#: judge/models/contest.py:485
+#: judge/models/contest.py:731
msgid "contest participation"
msgstr "lần tham gia kỳ thi"
-#: judge/models/contest.py:486
+#: judge/models/contest.py:732
msgid "contest participations"
msgstr "lần tham gia kỳ thi"
-#: judge/models/contest.py:492 judge/models/contest.py:514
-#: judge/models/contest.py:555 judge/models/problem.py:412
-#: judge/models/problem.py:417 judge/models/problem.py:435
-#: judge/models/problem_data.py:41
+#: judge/models/contest.py:739 judge/models/contest.py:783
+#: judge/models/contest.py:845 judge/models/problem.py:599
+#: judge/models/problem.py:606 judge/models/problem.py:637
+#: judge/models/problem_data.py:49
msgid "problem"
msgstr "bài tập"
-#: judge/models/contest.py:494 judge/models/contest.py:518
-#: judge/models/problem.py:130
+#: judge/models/contest.py:747 judge/models/contest.py:795
+#: judge/models/problem.py:227
msgid "points"
msgstr "điểm"
-#: judge/models/contest.py:495
+#: judge/models/contest.py:748
msgid "partial"
msgstr "thành phần"
-#: judge/models/contest.py:496 judge/models/contest.py:519
+#: judge/models/contest.py:749 judge/models/contest.py:797
msgid "is pretested"
msgstr "dùng pretest"
-#: judge/models/contest.py:497 judge/models/interface.py:43
+#: judge/models/contest.py:750 judge/models/interface.py:43
msgid "order"
msgstr "thứ tự"
-#: judge/models/contest.py:498
+#: judge/models/contest.py:752
msgid "0 to not show testcases, 1 to show"
msgstr "0 để ẩn test, 1 để hiện"
-#: judge/models/contest.py:499
+#: judge/models/contest.py:753
msgid "visible testcases"
msgstr "hiển thị test"
-#: judge/models/contest.py:500
+#: judge/models/contest.py:760
msgid "Maximum number of submissions for this problem, or 0 for no limit."
msgstr "Số lần nộp tối đa, đặt là 0 nếu không có giới hạn."
-#: judge/models/contest.py:502
+#: judge/models/contest.py:764
msgid "Why include a problem you can't submit to?"
msgstr ""
-#: judge/models/contest.py:507
+#: judge/models/contest.py:770
msgid "contest problem"
msgstr "bài trong kỳ thi"
-#: judge/models/contest.py:508
+#: judge/models/contest.py:771
msgid "contest problems"
msgstr "bài trong kỳ thi"
-#: judge/models/contest.py:512 judge/models/submission.py:183
+#: judge/models/contest.py:777 judge/models/submission.py:234
msgid "submission"
msgstr "bài nộp"
-#: judge/models/contest.py:516 judge/models/contest.py:531
+#: judge/models/contest.py:790 judge/models/contest.py:816
msgid "participation"
msgstr "lần tham gia"
-#: judge/models/contest.py:520
+#: judge/models/contest.py:798
msgid "Whether this submission was ran only on pretests."
msgstr "Quyết định bài nộp chỉ được chạy trên pretest không."
-#: judge/models/contest.py:524
+#: judge/models/contest.py:803
msgid "contest submission"
msgstr "bài nộp kỳ thi"
-#: judge/models/contest.py:525
+#: judge/models/contest.py:804
msgid "contest submissions"
msgstr "bài nộp kỳ thi"
-#: judge/models/contest.py:533
+#: judge/models/contest.py:820
msgid "rank"
msgstr "rank"
-#: judge/models/contest.py:534
+#: judge/models/contest.py:821
msgid "rating"
msgstr "rating"
-#: judge/models/contest.py:535
+#: judge/models/contest.py:822
msgid "raw rating"
msgstr "rating thật"
-#: judge/models/contest.py:536
+#: judge/models/contest.py:823
msgid "contest performance"
msgstr ""
-#: judge/models/contest.py:537
+#: judge/models/contest.py:824
msgid "last rated"
msgstr "lần cuối được xếp hạng"
-#: judge/models/contest.py:541
+#: judge/models/contest.py:828
msgid "contest rating"
msgstr "rating kỳ thi"
-#: judge/models/contest.py:542
+#: judge/models/contest.py:829
msgid "contest ratings"
msgstr "rating kỳ thi"
-#: judge/models/contest.py:562
+#: judge/models/contest.py:853
msgid "contest moss result"
msgstr "kết quả MOSS kỳ thi"
-#: judge/models/contest.py:563
+#: judge/models/contest.py:854
msgid "contest moss results"
msgstr "kết quả MOSS kỳ thi"
@@ -1196,63 +1196,63 @@ msgstr ""
msgid "label"
msgstr "nhãn"
-#: judge/models/interface.py:47
+#: judge/models/interface.py:48
msgid "highlight regex"
msgstr ""
-#: judge/models/interface.py:48
+#: judge/models/interface.py:52
msgid "parent item"
msgstr "mục cha"
-#: judge/models/interface.py:66
+#: judge/models/interface.py:74
msgid "post title"
msgstr "tiêu đề bài đăng"
-#: judge/models/interface.py:67 judge/models/problem.py:455
+#: judge/models/interface.py:75 judge/models/problem.py:676
msgid "authors"
msgstr "tác giả"
-#: judge/models/interface.py:68
+#: judge/models/interface.py:76
msgid "slug"
msgstr "slug"
-#: judge/models/interface.py:69 judge/models/problem.py:453
+#: judge/models/interface.py:77 judge/models/problem.py:674
msgid "public visibility"
msgstr "khả năng hiển thị công khai"
-#: judge/models/interface.py:70
+#: judge/models/interface.py:78
msgid "sticky"
msgstr "nổi lên đầu"
-#: judge/models/interface.py:71
+#: judge/models/interface.py:79
msgid "publish after"
msgstr "đăng sau khi"
-#: judge/models/interface.py:72
+#: judge/models/interface.py:80
msgid "post content"
msgstr "đăng nội dung"
-#: judge/models/interface.py:73
+#: judge/models/interface.py:81
msgid "post summary"
msgstr "đăng tổng kết"
-#: judge/models/interface.py:74
+#: judge/models/interface.py:83
msgid "openGraph image"
msgstr "hình ảnh openGraph"
-#: judge/models/interface.py:76
+#: judge/models/interface.py:89
msgid "If private, only these organizations may see the blog post."
msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được bài đăng."
-#: judge/models/interface.py:105
+#: judge/models/interface.py:129
msgid "Edit all posts"
msgstr "Chỉnh sửa tất cả bài đăng"
-#: judge/models/interface.py:107
+#: judge/models/interface.py:130
msgid "blog post"
msgstr "bài đăng"
-#: judge/models/interface.py:108
+#: judge/models/interface.py:131
msgid "blog posts"
msgstr "bài đăng"
@@ -1260,440 +1260,440 @@ msgstr "bài đăng"
msgid "message title"
msgstr "tiêu đề tin nhắn"
-#: judge/models/message.py:12 judge/models/ticket.py:29
+#: judge/models/message.py:12 judge/models/ticket.py:48
msgid "message body"
msgstr "nội dung tin nhắn"
-#: judge/models/message.py:13
+#: judge/models/message.py:15
msgid "sender"
msgstr "người gửi"
-#: judge/models/message.py:14
+#: judge/models/message.py:21
msgid "target"
msgstr "người nhận"
-#: judge/models/message.py:15
+#: judge/models/message.py:26
msgid "message timestamp"
msgstr "thời gian gửi"
-#: judge/models/message.py:20
+#: judge/models/message.py:33
msgid "messages in the thread"
msgstr "tin nhắn trong chuỗi"
-#: judge/models/problem.py:27
+#: judge/models/problem.py:37
msgid "problem category ID"
msgstr "mã của nhóm bài"
-#: judge/models/problem.py:28
+#: judge/models/problem.py:40
msgid "problem category name"
msgstr "tên nhóm bài"
-#: judge/models/problem.py:35
+#: judge/models/problem.py:48
msgid "problem type"
msgstr "dạng bài"
-#: judge/models/problem.py:36 judge/models/problem.py:114
-#: judge/models/volunteer.py:17
+#: judge/models/problem.py:49 judge/models/problem.py:194
+#: judge/models/volunteer.py:28
msgid "problem types"
msgstr "dạng bài"
-#: judge/models/problem.py:40
+#: judge/models/problem.py:54
msgid "problem group ID"
msgstr "mã của nhóm bài"
-#: judge/models/problem.py:41
+#: judge/models/problem.py:56
msgid "problem group name"
msgstr "tên nhóm bài"
-#: judge/models/problem.py:48 judge/models/problem.py:117
+#: judge/models/problem.py:63 judge/models/problem.py:199
msgid "problem group"
msgstr "nhóm bài"
-#: judge/models/problem.py:49
+#: judge/models/problem.py:64
msgid "problem groups"
msgstr "nhóm bài"
-#: judge/models/problem.py:53
+#: judge/models/problem.py:71
msgid "key"
msgstr ""
-#: judge/models/problem.py:55
+#: judge/models/problem.py:74
msgid "link"
msgstr "đường dẫn"
-#: judge/models/problem.py:56
+#: judge/models/problem.py:75
msgid "full name"
msgstr "tên đầy đủ"
-#: judge/models/problem.py:57 judge/models/profile.py:33
-#: judge/models/runtime.py:24
+#: judge/models/problem.py:79 judge/models/profile.py:38
+#: judge/models/runtime.py:34
msgid "short name"
msgstr "tên ngắn"
-#: judge/models/problem.py:58
+#: judge/models/problem.py:80
msgid "Displayed on pages under this license"
msgstr "Được hiển thị trên các trang theo giấy phép này"
-#: judge/models/problem.py:59
+#: judge/models/problem.py:85
msgid "icon"
msgstr "icon"
-#: judge/models/problem.py:59
+#: judge/models/problem.py:86
msgid "URL to the icon"
msgstr "Đường dẫn icon"
-#: judge/models/problem.py:60
+#: judge/models/problem.py:88
msgid "license text"
msgstr "văn bản giấy phép"
-#: judge/models/problem.py:69
+#: judge/models/problem.py:97
msgid "license"
msgstr ""
-#: judge/models/problem.py:70
+#: judge/models/problem.py:98
msgid "licenses"
msgstr ""
-#: judge/models/problem.py:97
+#: judge/models/problem.py:148
msgid "problem code"
msgstr ""
-#: judge/models/problem.py:99
+#: judge/models/problem.py:154
msgid "A short, unique code for the problem, used in the url after /problem/"
msgstr ""
-#: judge/models/problem.py:101
+#: judge/models/problem.py:159
msgid "problem name"
msgstr ""
-#: judge/models/problem.py:102
+#: judge/models/problem.py:161
msgid "The full name of the problem, as shown in the problem list."
msgstr ""
-#: judge/models/problem.py:104
+#: judge/models/problem.py:163
msgid "problem body"
msgstr ""
-#: judge/models/problem.py:105
+#: judge/models/problem.py:166
msgid "creators"
msgstr ""
-#: judge/models/problem.py:106
+#: judge/models/problem.py:170
msgid "These users will be able to edit the problem, and be listed as authors."
msgstr ""
-#: judge/models/problem.py:108
+#: judge/models/problem.py:175
msgid "curators"
msgstr ""
-#: judge/models/problem.py:109
+#: judge/models/problem.py:179
msgid ""
"These users will be able to edit the problem, but not be listed as authors."
msgstr ""
-#: judge/models/problem.py:111
+#: judge/models/problem.py:185
msgid "testers"
msgstr ""
-#: judge/models/problem.py:113
+#: judge/models/problem.py:189
msgid "These users will be able to view the private problem, but not edit it."
msgstr ""
-#: judge/models/problem.py:115 judge/models/volunteer.py:18
+#: judge/models/problem.py:195 judge/models/volunteer.py:29
msgid "The type of problem, as shown on the problem's page."
msgstr ""
-#: judge/models/problem.py:118
+#: judge/models/problem.py:201
msgid "The group of problem, shown under Category in the problem list."
msgstr ""
-#: judge/models/problem.py:120
+#: judge/models/problem.py:206
msgid ""
"The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) "
"are supported."
msgstr ""
-#: judge/models/problem.py:124 judge/models/problem.py:440
+#: judge/models/problem.py:215 judge/models/problem.py:652
msgid "memory limit"
msgstr ""
-#: judge/models/problem.py:125
+#: judge/models/problem.py:217
msgid ""
"The memory limit for this problem, in kilobytes (e.g. 64mb = 65536 "
"kilobytes)."
msgstr ""
-#: judge/models/problem.py:131
+#: judge/models/problem.py:229
msgid ""
"Points awarded for problem completion. Points are displayed with a 'p' "
"suffix if partial."
msgstr ""
-#: judge/models/problem.py:134
+#: judge/models/problem.py:235
msgid "allows partial points"
msgstr ""
-#: judge/models/problem.py:135
+#: judge/models/problem.py:239
msgid "allowed languages"
msgstr ""
-#: judge/models/problem.py:136
+#: judge/models/problem.py:240
msgid "List of allowed submission languages."
msgstr ""
-#: judge/models/problem.py:138
+#: judge/models/problem.py:246
msgid "manually managed"
msgstr ""
-#: judge/models/problem.py:139
+#: judge/models/problem.py:249
msgid "Whether judges should be allowed to manage data or not."
msgstr ""
-#: judge/models/problem.py:140
+#: judge/models/problem.py:252
msgid "date of publishing"
msgstr ""
-#: judge/models/problem.py:141
+#: judge/models/problem.py:257
msgid ""
"Doesn't have magic ability to auto-publish due to backward compatibility"
msgstr ""
-#: judge/models/problem.py:143
+#: judge/models/problem.py:264
msgid "Bans the selected users from submitting to this problem."
msgstr ""
-#: judge/models/problem.py:145
+#: judge/models/problem.py:271
msgid "The license under which this problem is published."
msgstr ""
-#: judge/models/problem.py:147
+#: judge/models/problem.py:278
msgid "problem summary"
msgstr ""
-#: judge/models/problem.py:149
+#: judge/models/problem.py:284
msgid "number of users"
msgstr ""
-#: judge/models/problem.py:150
+#: judge/models/problem.py:286
msgid "The number of users who solved the problem."
msgstr ""
-#: judge/models/problem.py:151
+#: judge/models/problem.py:288
msgid "solve rate"
msgstr ""
-#: judge/models/problem.py:157
+#: judge/models/problem.py:297
msgid "If private, only these organizations may see the problem."
msgstr ""
-#: judge/models/problem.py:418 judge/models/problem.py:436
-#: judge/models/runtime.py:111
+#: judge/models/problem.py:611 judge/models/problem.py:642
+#: judge/models/runtime.py:161
msgid "language"
msgstr ""
-#: judge/models/problem.py:419
+#: judge/models/problem.py:614
msgid "translated name"
msgstr ""
-#: judge/models/problem.py:420
+#: judge/models/problem.py:616
msgid "translated description"
msgstr ""
-#: judge/models/problem.py:424
+#: judge/models/problem.py:620
msgid "problem translation"
msgstr ""
-#: judge/models/problem.py:425
+#: judge/models/problem.py:621
msgid "problem translations"
msgstr ""
-#: judge/models/problem.py:429
+#: judge/models/problem.py:626
msgid "clarified problem"
msgstr ""
-#: judge/models/problem.py:430
+#: judge/models/problem.py:628
msgid "clarification body"
msgstr ""
-#: judge/models/problem.py:431
+#: judge/models/problem.py:630
msgid "clarification timestamp"
msgstr ""
-#: judge/models/problem.py:446
+#: judge/models/problem.py:661
msgid "language-specific resource limit"
msgstr ""
-#: judge/models/problem.py:447
+#: judge/models/problem.py:662
msgid "language-specific resource limits"
msgstr ""
-#: judge/models/problem.py:451
+#: judge/models/problem.py:669
msgid "associated problem"
msgstr ""
-#: judge/models/problem.py:454
+#: judge/models/problem.py:675
msgid "publish date"
msgstr ""
-#: judge/models/problem.py:456
+#: judge/models/problem.py:677
msgid "editorial content"
msgstr "nội dung lời giải"
-#: judge/models/problem.py:472
+#: judge/models/problem.py:691
msgid "solution"
msgstr "lời giải"
-#: judge/models/problem.py:473
+#: judge/models/problem.py:692
msgid "solutions"
msgstr "lời giải"
-#: judge/models/problem.py:478
+#: judge/models/problem.py:697
#, fuzzy
#| msgid "point value"
msgid "proposed point value"
msgstr "điểm"
-#: judge/models/problem.py:479
+#: judge/models/problem.py:698
msgid "The amount of points you think this problem deserves."
msgstr ""
-#: judge/models/problem.py:489
+#: judge/models/problem.py:712
msgid "The time this vote was cast"
msgstr ""
-#: judge/models/problem.py:495
+#: judge/models/problem.py:718
msgid "vote"
msgstr ""
-#: judge/models/problem_data.py:26
+#: judge/models/problem_data.py:32
msgid "Standard"
msgstr "Tiêu chuẩn"
-#: judge/models/problem_data.py:27
+#: judge/models/problem_data.py:33
msgid "Floats"
msgstr "Số thực"
-#: judge/models/problem_data.py:28
+#: judge/models/problem_data.py:34
msgid "Floats (absolute)"
msgstr "Số thực (chênh lệch tuyệt đối)"
-#: judge/models/problem_data.py:29
+#: judge/models/problem_data.py:35
msgid "Floats (relative)"
msgstr "Số thực (chênh lệch tương đối)"
-#: judge/models/problem_data.py:30
+#: judge/models/problem_data.py:36
msgid "Non-trailing spaces"
msgstr "Không cho phép dấu cách cuối dòng"
-#: judge/models/problem_data.py:31
+#: judge/models/problem_data.py:37
msgid "Unordered"
msgstr "Không thứ tự"
-#: judge/models/problem_data.py:32
+#: judge/models/problem_data.py:38
msgid "Byte identical"
msgstr "Giống từng byte"
-#: judge/models/problem_data.py:33
+#: judge/models/problem_data.py:39
msgid "Line-by-line"
msgstr "Chấm theo dòng (điểm = số dòng đúng)"
-#: judge/models/problem_data.py:34
+#: judge/models/problem_data.py:40
msgid "Custom checker (PY)"
msgstr "Trình chấm tự viết (Python)"
-#: judge/models/problem_data.py:35
+#: judge/models/problem_data.py:41
msgid "Custom validator (CPP)"
msgstr "Trình chấm tự viết (C++)"
-#: judge/models/problem_data.py:36
+#: judge/models/problem_data.py:42
msgid "Interactive"
msgstr ""
-#: judge/models/problem_data.py:43
+#: judge/models/problem_data.py:54
msgid "data zip file"
msgstr "file zip chứa test"
-#: judge/models/problem_data.py:45
+#: judge/models/problem_data.py:61
msgid "generator file"
msgstr "file tạo test"
-#: judge/models/problem_data.py:47 judge/models/problem_data.py:129
+#: judge/models/problem_data.py:68 judge/models/problem_data.py:190
msgid "output prefix length"
msgstr "độ dài hiển thị output"
-#: judge/models/problem_data.py:48 judge/models/problem_data.py:130
+#: judge/models/problem_data.py:71 judge/models/problem_data.py:193
msgid "output limit length"
msgstr "giới hạn hiển thị output"
-#: judge/models/problem_data.py:49
+#: judge/models/problem_data.py:74
msgid "init.yml generation feedback"
msgstr "phản hồi của quá trình tạo file init.yml"
-#: judge/models/problem_data.py:50 judge/models/problem_data.py:131
+#: judge/models/problem_data.py:77 judge/models/problem_data.py:196
msgid "checker"
msgstr "trình chấm"
-#: judge/models/problem_data.py:51 judge/models/problem_data.py:132
+#: judge/models/problem_data.py:80 judge/models/problem_data.py:199
msgid "checker arguments"
msgstr "các biến trong trình chấm"
-#: judge/models/problem_data.py:52 judge/models/problem_data.py:133
+#: judge/models/problem_data.py:82 judge/models/problem_data.py:201
msgid "checker arguments as a JSON object"
msgstr "các biến trong trình chấm theo dạng JSON"
-#: judge/models/problem_data.py:53
+#: judge/models/problem_data.py:85
msgid "custom checker file"
msgstr "file trình chấm"
-#: judge/models/problem_data.py:59
+#: judge/models/problem_data.py:93
msgid "custom validator file"
msgstr "file trình chấm"
-#: judge/models/problem_data.py:65
+#: judge/models/problem_data.py:101
msgid "interactive judge"
msgstr ""
-#: judge/models/problem_data.py:116
+#: judge/models/problem_data.py:165
msgid "problem data set"
msgstr "tập hợp dữ liệu bài"
-#: judge/models/problem_data.py:118
+#: judge/models/problem_data.py:169
msgid "case position"
msgstr "vị trí test"
-#: judge/models/problem_data.py:119
+#: judge/models/problem_data.py:172
msgid "case type"
msgstr "loại test"
-#: judge/models/problem_data.py:120
+#: judge/models/problem_data.py:174
msgid "Normal case"
msgstr "Test bình thường"
-#: judge/models/problem_data.py:121
+#: judge/models/problem_data.py:175
msgid "Batch start"
msgstr "Bắt đầu nhóm"
-#: judge/models/problem_data.py:122
+#: judge/models/problem_data.py:176
msgid "Batch end"
msgstr "Kết thúc nhóm"
-#: judge/models/problem_data.py:124
+#: judge/models/problem_data.py:181
msgid "input file name"
msgstr "tên file input"
-#: judge/models/problem_data.py:125
+#: judge/models/problem_data.py:184
msgid "output file name"
msgstr "tên file output"
-#: judge/models/problem_data.py:126
+#: judge/models/problem_data.py:186
msgid "generator arguments"
msgstr "biến trong file sinh test"
-#: judge/models/problem_data.py:127
+#: judge/models/problem_data.py:187
msgid "point value"
msgstr "điểm"
-#: judge/models/problem_data.py:128
+#: judge/models/problem_data.py:188
msgid "case is pretest?"
msgstr "test là pretest?"
@@ -1701,372 +1701,372 @@ msgstr "test là pretest?"
msgid "organization title"
msgstr "tiêu đề tổ chức"
-#: judge/models/profile.py:31
+#: judge/models/profile.py:33
msgid "organization slug"
msgstr "tên ngắn tổ chức"
-#: judge/models/profile.py:32
+#: judge/models/profile.py:34
msgid "Organization name shown in URL"
msgstr "Tên được hiển thị trong đường dẫn"
-#: judge/models/profile.py:34
+#: judge/models/profile.py:39
msgid "Displayed beside user name during contests"
msgstr "Hiển thị bên cạnh tên người dùng trong kỳ thi"
-#: judge/models/profile.py:35
+#: judge/models/profile.py:41
msgid "organization description"
msgstr "mô tả tổ chức"
-#: judge/models/profile.py:36
+#: judge/models/profile.py:44
msgid "registrant"
msgstr "người tạo"
-#: judge/models/profile.py:37
+#: judge/models/profile.py:47
msgid "User who registered this organization"
msgstr "Người tạo tổ chức"
-#: judge/models/profile.py:38
+#: judge/models/profile.py:51
msgid "administrators"
msgstr "người quản lý"
-#: judge/models/profile.py:39
+#: judge/models/profile.py:53
msgid "Those who can edit this organization"
msgstr "Những người có thể chỉnh sửa tổ chức"
-#: judge/models/profile.py:40
+#: judge/models/profile.py:56
msgid "creation date"
msgstr "ngày tạo"
-#: judge/models/profile.py:41
+#: judge/models/profile.py:59
msgid "is open organization?"
msgstr "tổ chức mở?"
-#: judge/models/profile.py:42
+#: judge/models/profile.py:60
msgid "Allow joining organization"
msgstr "Cho phép tham gia tổ chức"
-#: judge/models/profile.py:43
+#: judge/models/profile.py:64
msgid "maximum size"
msgstr "số lượng thành viên tối đa"
-#: judge/models/profile.py:44
+#: judge/models/profile.py:68
msgid ""
"Maximum amount of users in this organization, only applicable to private "
"organizations"
msgstr "Số người tối đa trong tổ chức, chỉ áp dụng với tổ chức riêng tư"
-#: judge/models/profile.py:46
+#: judge/models/profile.py:74
msgid "Student access code"
msgstr "Mã truy cập cho học sinh"
-#: judge/models/profile.py:50
+#: judge/models/profile.py:85
msgid ""
"This image will replace the default site logo for users viewing the "
"organization."
msgstr "Ảnh này sẽ thay thế logo mặc định khi ở trong tổ chức."
-#: judge/models/profile.py:76 judge/models/profile.py:93
-#: judge/models/profile.py:221
+#: judge/models/profile.py:115 judge/models/profile.py:144
+#: judge/models/profile.py:344
msgid "organization"
msgstr ""
-#: judge/models/profile.py:81
+#: judge/models/profile.py:121
msgid "user associated"
msgstr ""
-#: judge/models/profile.py:82
+#: judge/models/profile.py:123
msgid "self-description"
msgstr ""
-#: judge/models/profile.py:83
+#: judge/models/profile.py:126
msgid "location"
msgstr ""
-#: judge/models/profile.py:85
+#: judge/models/profile.py:132
msgid "preferred language"
msgstr ""
-#: judge/models/profile.py:91
+#: judge/models/profile.py:140
msgid "last access time"
msgstr ""
-#: judge/models/profile.py:92
+#: judge/models/profile.py:141
msgid "last IP"
msgstr ""
-#: judge/models/profile.py:95
+#: judge/models/profile.py:152
msgid "display rank"
msgstr ""
-#: judge/models/profile.py:97
+#: judge/models/profile.py:160
msgid "comment mute"
msgstr ""
-#: judge/models/profile.py:97
+#: judge/models/profile.py:161
msgid "Some users are at their best when silent."
msgstr ""
-#: judge/models/profile.py:99
+#: judge/models/profile.py:165
msgid "unlisted user"
msgstr ""
-#: judge/models/profile.py:99
+#: judge/models/profile.py:166
msgid "User will not be ranked."
msgstr ""
-#: judge/models/profile.py:102
+#: judge/models/profile.py:170
#, fuzzy
#| msgid "Banned from joining"
msgid "banned from voting"
msgstr "Bị cấm tham gia"
-#: judge/models/profile.py:103
+#: judge/models/profile.py:171
msgid "User will not be able to vote on problems' point values."
msgstr ""
-#: judge/models/profile.py:107
+#: judge/models/profile.py:176
msgid "user script"
msgstr ""
-#: judge/models/profile.py:108
+#: judge/models/profile.py:180
msgid "User-defined JavaScript for site customization."
msgstr ""
-#: judge/models/profile.py:109
+#: judge/models/profile.py:184
msgid "current contest"
msgstr "kỳ thi hiện tại"
-#: judge/models/profile.py:111
+#: judge/models/profile.py:191
msgid "math engine"
msgstr ""
-#: judge/models/profile.py:113
+#: judge/models/profile.py:195
msgid "the rendering engine used to render math"
msgstr ""
-#: judge/models/profile.py:114
+#: judge/models/profile.py:198
msgid "2FA enabled"
msgstr ""
-#: judge/models/profile.py:115
+#: judge/models/profile.py:200
msgid "check to enable TOTP-based two factor authentication"
msgstr "đánh dấu để sử dụng TOTP-based two factor authentication"
-#: judge/models/profile.py:116
+#: judge/models/profile.py:206
msgid "TOTP key"
msgstr "mã TOTP"
-#: judge/models/profile.py:117
+#: judge/models/profile.py:207
msgid "32 character base32-encoded key for TOTP"
msgstr ""
-#: judge/models/profile.py:119
+#: judge/models/profile.py:209
msgid "TOTP key must be empty or base32"
msgstr ""
-#: judge/models/profile.py:120
+#: judge/models/profile.py:213
msgid "internal notes"
msgstr "ghi chú nội bộ"
-#: judge/models/profile.py:121
+#: judge/models/profile.py:216
msgid "Notes for administrators regarding this user."
msgstr "Ghi chú riêng cho quản trị viên."
-#: judge/models/profile.py:215
+#: judge/models/profile.py:331
msgid "user profile"
msgstr "thông tin người dùng"
-#: judge/models/profile.py:216
+#: judge/models/profile.py:332
msgid "user profiles"
msgstr "thông tin người dùng"
-#: judge/models/profile.py:223
+#: judge/models/profile.py:348
msgid "request time"
msgstr "thời gian đăng ký"
-#: judge/models/profile.py:224
+#: judge/models/profile.py:351
msgid "state"
msgstr "trạng thái"
-#: judge/models/profile.py:229
+#: judge/models/profile.py:358
msgid "reason"
msgstr "lý do"
-#: judge/models/profile.py:232
+#: judge/models/profile.py:361
msgid "organization join request"
msgstr "đơn đăng ký tham gia"
-#: judge/models/profile.py:233
+#: judge/models/profile.py:362
msgid "organization join requests"
msgstr "đơn đăng ký tham gia"
-#: judge/models/runtime.py:19
+#: judge/models/runtime.py:21
msgid "short identifier"
msgstr "tên ngắn"
-#: judge/models/runtime.py:20
+#: judge/models/runtime.py:23
msgid ""
"The identifier for this language; the same as its executor id for judges."
msgstr ""
-#: judge/models/runtime.py:22
+#: judge/models/runtime.py:29
msgid "long name"
msgstr "tên dài"
-#: judge/models/runtime.py:23
+#: judge/models/runtime.py:30
msgid "Longer name for the language, e.g. \"Python 2\" or \"C++11\"."
msgstr "Tên dài, ví dụ \"Python 2\" or \"C++11\"."
-#: judge/models/runtime.py:25
+#: judge/models/runtime.py:36
msgid ""
"More readable, but short, name to display publicly; e.g. \"PY2\" or \"C+"
"+11\". If left blank, it will default to the short identifier."
msgstr ""
-#: judge/models/runtime.py:29
+#: judge/models/runtime.py:45
msgid "common name"
msgstr ""
-#: judge/models/runtime.py:30
+#: judge/models/runtime.py:47
msgid ""
"Common name for the language. For example, the common name for C++03, C++11, "
"and C++14 would be \"C++\""
msgstr ""
-#: judge/models/runtime.py:32
+#: judge/models/runtime.py:53
msgid "ace mode name"
msgstr ""
-#: judge/models/runtime.py:33
+#: judge/models/runtime.py:55
msgid ""
"Language ID for Ace.js editor highlighting, appended to \"mode-\" to "
"determine the Ace JavaScript file to use, e.g., \"python\"."
msgstr ""
-#: judge/models/runtime.py:35
+#: judge/models/runtime.py:61
msgid "pygments name"
msgstr ""
-#: judge/models/runtime.py:36
+#: judge/models/runtime.py:62
msgid "Language ID for Pygments highlighting in source windows."
msgstr ""
-#: judge/models/runtime.py:37
+#: judge/models/runtime.py:65
msgid "code template"
msgstr ""
-#: judge/models/runtime.py:38
+#: judge/models/runtime.py:66
msgid "Code template to display in submission editor."
msgstr ""
-#: judge/models/runtime.py:39
+#: judge/models/runtime.py:71
msgid "runtime info override"
msgstr ""
-#: judge/models/runtime.py:40
+#: judge/models/runtime.py:74
msgid ""
"Do not set this unless you know what you're doing! It will override the "
"usually more specific, judge-provided runtime info!"
msgstr ""
-#: judge/models/runtime.py:42
+#: judge/models/runtime.py:79
msgid "language description"
msgstr ""
-#: judge/models/runtime.py:43
+#: judge/models/runtime.py:81
msgid ""
"Use this field to inform users of quirks with your environment, additional "
"restrictions, etc."
msgstr ""
-#: judge/models/runtime.py:45
+#: judge/models/runtime.py:88
msgid "extension"
msgstr ""
-#: judge/models/runtime.py:46
+#: judge/models/runtime.py:89
msgid "The extension of source files, e.g., \"py\" or \"cpp\"."
msgstr ""
-#: judge/models/runtime.py:112
+#: judge/models/runtime.py:162
msgid "languages"
msgstr "ngôn ngữ"
-#: judge/models/runtime.py:116
+#: judge/models/runtime.py:168
msgid "language to which this runtime belongs"
msgstr ""
-#: judge/models/runtime.py:117
+#: judge/models/runtime.py:172
msgid "judge on which this runtime exists"
msgstr ""
-#: judge/models/runtime.py:118
+#: judge/models/runtime.py:174
msgid "runtime name"
msgstr ""
-#: judge/models/runtime.py:119
+#: judge/models/runtime.py:176
msgid "runtime version"
msgstr ""
-#: judge/models/runtime.py:120
+#: judge/models/runtime.py:179
msgid "order in which to display this runtime"
msgstr ""
-#: judge/models/runtime.py:124
+#: judge/models/runtime.py:185
msgid "Server name, hostname-style"
msgstr "Tên web"
-#: judge/models/runtime.py:125
+#: judge/models/runtime.py:188
msgid "time of creation"
msgstr "ngày tạo"
-#: judge/models/runtime.py:126
+#: judge/models/runtime.py:192
msgid "A key to authenticate this judge"
msgstr "Chìa khóa xác thực"
-#: judge/models/runtime.py:127
+#: judge/models/runtime.py:193
msgid "authentication key"
msgstr "mã xác thực"
-#: judge/models/runtime.py:128
+#: judge/models/runtime.py:196
msgid "block judge"
msgstr "chặn máy chấm"
-#: judge/models/runtime.py:129
+#: judge/models/runtime.py:199
msgid ""
"Whether this judge should be blocked from connecting, even if its key is "
"correct."
msgstr "Quyết định có chặn máy chấm, ngay cả khi mã xác thực đúng."
-#: judge/models/runtime.py:131
+#: judge/models/runtime.py:203
msgid "judge online status"
msgstr "trạng thái online của máy chấm"
-#: judge/models/runtime.py:132
+#: judge/models/runtime.py:204
msgid "judge start time"
msgstr "thời gian khởi đầu máy chấm"
-#: judge/models/runtime.py:133
+#: judge/models/runtime.py:205
msgid "response time"
msgstr "thời gian trả lời"
-#: judge/models/runtime.py:134
+#: judge/models/runtime.py:207
msgid "system load"
msgstr "lưu lượng xử lý"
-#: judge/models/runtime.py:135
+#: judge/models/runtime.py:209
msgid "Load for the last minute, divided by processors to be fair."
msgstr "Lưu lượng được chia đều."
-#: judge/models/runtime.py:139 judge/models/runtime.py:179
+#: judge/models/runtime.py:219 judge/models/runtime.py:261
msgid "judges"
msgstr "máy chấm"
-#: judge/models/runtime.py:178
+#: judge/models/runtime.py:260
msgid "judge"
msgstr "máy chấm"
#: judge/models/submission.py:20 judge/models/submission.py:47
-#: judge/utils/problems.py:79
+#: judge/utils/problems.py:116
msgid "Accepted"
msgstr "Accepted"
@@ -2095,7 +2095,7 @@ msgid "Runtime Error"
msgstr "Runtime Error"
#: judge/models/submission.py:27 judge/models/submission.py:41
-#: judge/models/submission.py:55 judge/utils/problems.py:81
+#: judge/models/submission.py:55 judge/utils/problems.py:120
msgid "Compile Error"
msgstr "Compile Error"
@@ -2132,111 +2132,111 @@ msgstr "Chấm xong"
msgid "Internal Error (judging server error)"
msgstr "Lỗi máy chấm"
-#: judge/models/submission.py:66
+#: judge/models/submission.py:67
msgid "submission time"
msgstr "thời gian bài nộp"
-#: judge/models/submission.py:67 judge/models/submission.py:203
+#: judge/models/submission.py:69 judge/models/submission.py:264
msgid "execution time"
msgstr "thời gian chạy"
-#: judge/models/submission.py:68 judge/models/submission.py:204
+#: judge/models/submission.py:70 judge/models/submission.py:265
msgid "memory usage"
msgstr "bộ nhớ sử dụng"
-#: judge/models/submission.py:69 judge/models/submission.py:205
+#: judge/models/submission.py:72 judge/models/submission.py:266
msgid "points granted"
msgstr "điểm"
-#: judge/models/submission.py:70
+#: judge/models/submission.py:75
msgid "submission language"
msgstr "ngôn ngữ bài nộp"
-#: judge/models/submission.py:71
+#: judge/models/submission.py:78
msgid "status"
msgstr "trạng thái"
-#: judge/models/submission.py:72
+#: judge/models/submission.py:85
msgid "result"
msgstr "kết quả"
-#: judge/models/submission.py:74
+#: judge/models/submission.py:93
msgid "compile errors"
msgstr "biên dịch lỗi"
-#: judge/models/submission.py:76
+#: judge/models/submission.py:95
msgid "batched cases"
msgstr "nhóm test"
-#: judge/models/submission.py:77
+#: judge/models/submission.py:96
msgid "test case points"
msgstr "điểm test"
-#: judge/models/submission.py:78
+#: judge/models/submission.py:97
msgid "test case total points"
msgstr "tổng điểm các test"
-#: judge/models/submission.py:79
+#: judge/models/submission.py:100
msgid "judged on"
msgstr "chấm trên"
-#: judge/models/submission.py:81
+#: judge/models/submission.py:106
msgid "submission judge time"
msgstr "thời điểm được chấm"
-#: judge/models/submission.py:82
+#: judge/models/submission.py:109
msgid "was rejudged by admin"
msgstr "được chấm lại bởi admin"
-#: judge/models/submission.py:83
+#: judge/models/submission.py:112
msgid "was ran on pretests only"
msgstr "chỉ chấm pretest"
-#: judge/models/submission.py:184 templates/contest/moss.html:58
+#: judge/models/submission.py:235 templates/contest/moss.html:58
msgid "submissions"
msgstr "bài nộp"
-#: judge/models/submission.py:188 judge/models/submission.py:199
+#: judge/models/submission.py:242 judge/models/submission.py:256
msgid "associated submission"
msgstr "bài nộp tương ứng"
-#: judge/models/submission.py:190
+#: judge/models/submission.py:245
msgid "source code"
msgstr "mã nguồn"
-#: judge/models/submission.py:201
+#: judge/models/submission.py:260
msgid "test case ID"
msgstr "test case ID"
-#: judge/models/submission.py:202
+#: judge/models/submission.py:262
msgid "status flag"
msgstr ""
-#: judge/models/submission.py:206
+#: judge/models/submission.py:267
msgid "points possible"
msgstr ""
-#: judge/models/submission.py:207
+#: judge/models/submission.py:268
msgid "batch number"
msgstr "số thứ tự của nhóm"
-#: judge/models/submission.py:208
+#: judge/models/submission.py:270
msgid "judging feedback"
msgstr "phản hồi từ máy chấm"
-#: judge/models/submission.py:209
+#: judge/models/submission.py:273
msgid "extended judging feedback"
msgstr "phản hồi thêm từ máy chấm"
-#: judge/models/submission.py:210
+#: judge/models/submission.py:275
msgid "program output"
msgstr "output chương trình"
-#: judge/models/submission.py:218
+#: judge/models/submission.py:283
msgid "submission test case"
msgstr "cái testcase trong bài nộp"
-#: judge/models/submission.py:219
+#: judge/models/submission.py:284
msgid "submission test cases"
msgstr "cái testcase trong bài nộp"
@@ -2244,394 +2244,394 @@ msgstr "cái testcase trong bài nộp"
msgid "ticket title"
msgstr "tiêu đề báo cáo"
-#: judge/models/ticket.py:11
+#: judge/models/ticket.py:13
msgid "ticket creator"
msgstr "người báo cáo"
-#: judge/models/ticket.py:13
+#: judge/models/ticket.py:17
msgid "creation time"
msgstr "thời gian tạo"
-#: judge/models/ticket.py:14
+#: judge/models/ticket.py:19
msgid "assignees"
msgstr "người được ủy thác"
-#: judge/models/ticket.py:15
+#: judge/models/ticket.py:22
msgid "quick notes"
msgstr ""
-#: judge/models/ticket.py:16
+#: judge/models/ticket.py:24
msgid "Staff notes for this issue to aid in processing."
msgstr ""
-#: judge/models/ticket.py:17
+#: judge/models/ticket.py:27
msgid "linked item type"
msgstr ""
-#: judge/models/ticket.py:19
+#: judge/models/ticket.py:29
msgid "linked item ID"
msgstr ""
-#: judge/models/ticket.py:21
+#: judge/models/ticket.py:31
msgid "is ticket open?"
msgstr ""
-#: judge/models/ticket.py:25
+#: judge/models/ticket.py:37
msgid "ticket"
msgstr ""
-#: judge/models/ticket.py:27
+#: judge/models/ticket.py:44
msgid "poster"
msgstr ""
-#: judge/models/ticket.py:30
+#: judge/models/ticket.py:49
msgid "message time"
msgstr ""
-#: judge/models/volunteer.py:13
+#: judge/models/volunteer.py:19
msgid "knowledge points"
msgstr "Độ khó kiến thức"
-#: judge/models/volunteer.py:14
+#: judge/models/volunteer.py:20
msgid "Points awarded by knowledge difficulty"
msgstr ""
-#: judge/models/volunteer.py:15
+#: judge/models/volunteer.py:23
msgid "thinking points"
msgstr "Độ khó nghĩ"
-#: judge/models/volunteer.py:16
+#: judge/models/volunteer.py:24
msgid "Points awarded by thinking difficulty"
msgstr ""
-#: judge/models/volunteer.py:20
+#: judge/models/volunteer.py:31
msgid "feedback"
msgstr "phản hồi"
-#: judge/models/volunteer.py:23
+#: judge/models/volunteer.py:34
msgid "volunteer vote"
msgstr "vote từ TNV"
-#: judge/models/volunteer.py:24
+#: judge/models/volunteer.py:35
msgid "volunteer votes"
msgstr "vote từ TNV"
-#: judge/pdf_problems.py:147 judge/pdf_problems.py:199
-#: judge/pdf_problems.py:259
+#: judge/pdf_problems.py:161 judge/pdf_problems.py:221
+#: judge/pdf_problems.py:294
msgid "Page [page] of [topage]"
msgstr "Trang [page]/[topage]"
-#: judge/pdf_problems.py:280
+#: judge/pdf_problems.py:324
#, python-format
msgid "Page %s of %s"
msgstr "Trang %s/%s"
-#: judge/tasks/contest.py:19
+#: judge/tasks/contest.py:20
msgid "Recalculating contest scores"
msgstr "Tính lại điểm kỳ thi"
-#: judge/tasks/contest.py:40
+#: judge/tasks/contest.py:42
msgid "Running MOSS"
msgstr "Đang chạy MOSS"
-#: judge/tasks/submission.py:43
+#: judge/tasks/submission.py:45
msgid "Modifying submissions"
msgstr "Chỉnh sửa bài nộp"
-#: judge/tasks/submission.py:56
+#: judge/tasks/submission.py:65
msgid "Recalculating user points"
msgstr "Tính lại điểm người dùng"
-#: judge/utils/problem_data.py:70
+#: judge/utils/problem_data.py:75
msgid "Empty batches not allowed."
msgstr "Nhóm test trống là không hợp lệ."
-#: judge/utils/problem_data.py:78 judge/utils/problem_data.py:99
+#: judge/utils/problem_data.py:84 judge/utils/problem_data.py:107
msgid "How did you corrupt the custom checker path?"
msgstr "How did you corrupt the custom checker path?"
-#: judge/utils/problem_data.py:120
+#: judge/utils/problem_data.py:130
#, python-format
msgid "Points must be defined for non-batch case #%d."
msgstr "Ô điểm số cho test #%d phải được điền."
-#: judge/utils/problem_data.py:125
+#: judge/utils/problem_data.py:137
#, python-format
msgid "Input file for case %d does not exist: %s"
msgstr "File input cho test %d không tồn tại: %s"
-#: judge/utils/problem_data.py:128
+#: judge/utils/problem_data.py:142
#, python-format
msgid "Output file for case %d does not exist: %s"
msgstr "File output cho test %d không tồn tại: %s"
-#: judge/utils/problem_data.py:153
+#: judge/utils/problem_data.py:169
#, python-format
msgid "Batch start case #%d requires points."
msgstr "Nhóm test #%d cần được điền điểm số."
-#: judge/utils/problem_data.py:174
+#: judge/utils/problem_data.py:192
#, python-format
msgid "Attempt to end batch outside of one in case #%d"
msgstr "Nhóm test #%d kết thúc không hợp lệ"
-#: judge/utils/problem_data.py:192
+#: judge/utils/problem_data.py:211
msgid "How did you corrupt the zip path?"
msgstr ""
-#: judge/utils/problem_data.py:198
+#: judge/utils/problem_data.py:217
msgid "How did you corrupt the generator path?"
msgstr ""
-#: judge/utils/problems.py:80
+#: judge/utils/problems.py:117
msgid "Wrong"
msgstr "Sai"
-#: judge/utils/problems.py:82
+#: judge/utils/problems.py:123
msgid "Timeout"
msgstr "Quá thời gian"
-#: judge/utils/problems.py:83
+#: judge/utils/problems.py:126
msgid "Error"
msgstr "Lỗi"
-#: judge/utils/problems.py:94
+#: judge/utils/problems.py:143
msgid "Can't pass both queryset and keyword filters"
msgstr ""
-#: judge/utils/pwned.py:101
+#: judge/utils/pwned.py:102
msgid "Your password can't be a commonly used password."
msgstr "Mật khẩu không được quá phổ biến."
-#: judge/utils/pwned.py:102
+#: judge/utils/pwned.py:103
msgid "This password is too common."
msgstr "Mật khẩu này quá phổ biến."
-#: judge/utils/timedelta.py:49
+#: judge/utils/timedelta.py:59
msgctxt "time format with day"
msgid "%d day %h:%m:%s"
msgid_plural "%d days %h:%m:%s"
msgstr[0] "%d ngày %h:%m:%s"
-#: judge/utils/timedelta.py:53
+#: judge/utils/timedelta.py:68
msgctxt "time format without day"
msgid "%h:%m:%s"
msgstr "%h:%m:%s"
-#: judge/utils/timedelta.py:59
+#: judge/utils/timedelta.py:80
msgctxt "time format no seconds with day"
msgid "%d day %h:%m"
msgid_plural "%d days %h:%m"
msgstr[0] "%d ngày %h:%m"
-#: judge/utils/timedelta.py:61
+#: judge/utils/timedelta.py:88
#, python-format
msgid "%d day"
msgid_plural "%d days"
msgstr[0] "%d ngày"
-#: judge/utils/timedelta.py:63
+#: judge/utils/timedelta.py:91
msgctxt "hours and minutes"
msgid "%h:%m"
msgstr "%h:%m"
-#: judge/views/about.py:7 templates/organization/home.html:105
+#: judge/views/about.py:10 templates/organization/home.html:105
#: templates/user/user-about.html:83 templates/user/user-tabs.html:4
#: templates/user/users-table.html:32
msgid "About"
msgstr "Giới thiệu"
-#: judge/views/about.py:13
+#: judge/views/about.py:20
msgid "Custom Checker Sample"
msgstr "Hướng dẫn viết trình chấm"
-#: judge/views/blog.py:93
+#: judge/views/blog.py:128
#, python-format
msgid "Page %d of Posts"
msgstr "Trang %d"
-#: judge/views/blog.py:134
+#: judge/views/blog.py:183
msgid "Ticket feed"
msgstr "Báo cáo"
-#: judge/views/blog.py:152
+#: judge/views/blog.py:201
msgid "Comment feed"
msgstr "Bình luận"
-#: judge/views/comment.py:28
+#: judge/views/comment.py:39
msgid "Messing around, are we?"
msgstr "Messing around, are we?"
-#: judge/views/comment.py:37
+#: judge/views/comment.py:55
msgid "You must solve at least one problem before you can vote."
msgstr "Bạn phải giải ít nhất 1 bài trước khi được vote."
-#: judge/views/comment.py:64
+#: judge/views/comment.py:86
msgid "You already voted."
msgstr "Bạn đã vote."
-#: judge/views/comment.py:126 judge/views/organization.py:344
+#: judge/views/comment.py:153 judge/views/organization.py:472
msgid "Edited from site"
msgstr "Chỉnh sửa từ web"
-#: judge/views/comment.py:147
+#: judge/views/comment.py:174
msgid "Editing comment"
msgstr "Chỉnh sửa bình luận"
-#: judge/views/contests.py:58 judge/views/contests.py:250
-#: judge/views/contests.py:253 judge/views/contests.py:427
+#: judge/views/contests.py:115 judge/views/contests.py:356
+#: judge/views/contests.py:361 judge/views/contests.py:602
msgid "No such contest"
msgstr "Không có contest nào như vậy"
-#: judge/views/contests.py:59 judge/views/contests.py:251
+#: judge/views/contests.py:116 judge/views/contests.py:357
#, python-format
msgid "Could not find a contest with the key \"%s\"."
msgstr "Không tìm thấy kỳ thi với mã \"%s\"."
-#: judge/views/contests.py:72
+#: judge/views/contests.py:135
msgid "Contests"
msgstr "Kỳ thi"
-#: judge/views/contests.py:254
+#: judge/views/contests.py:361
msgid "Could not find such contest."
msgstr "Không tìm thấy kỳ thi nào như vậy."
-#: judge/views/contests.py:257
+#: judge/views/contests.py:369
#, python-format
msgid "Access to contest \"%s\" denied"
msgstr "Truy cập tới kỳ thi \"%s\" bị từ chối"
-#: judge/views/contests.py:281
+#: judge/views/contests.py:407
msgid "Clone Contest"
msgstr "Nhân bản kỳ thi"
-#: judge/views/contests.py:346
+#: judge/views/contests.py:476
msgid "Contest not ongoing"
msgstr "Kỳ thi đang không diễn ra"
-#: judge/views/contests.py:347
+#: judge/views/contests.py:477
#, python-format
msgid "\"%s\" is not currently ongoing."
msgstr "\"%s\" kỳ thi đang không diễn ra."
-#: judge/views/contests.py:351
+#: judge/views/contests.py:484
msgid "Already in contest"
msgstr "Đã ở trong kỳ thi"
-#: judge/views/contests.py:352
+#: judge/views/contests.py:485
#, python-format
msgid "You are already in a contest: \"%s\"."
msgstr "Bạn đã ở trong kỳ thi: \"%s\"."
-#: judge/views/contests.py:355
+#: judge/views/contests.py:495
msgid "Banned from joining"
msgstr "Bị cấm tham gia"
-#: judge/views/contests.py:356
+#: judge/views/contests.py:497
msgid ""
"You have been declared persona non grata for this contest. You are "
"permanently barred from joining this contest."
msgstr "Bạn không được phép tham gia kỳ thi này."
-#: judge/views/contests.py:417
+#: judge/views/contests.py:586
#, python-format
msgid "Enter access code for \"%s\""
msgstr "Nhập mật khẩu truy cập cho \"%s\""
-#: judge/views/contests.py:428
+#: judge/views/contests.py:603
#, python-format
msgid "You are not in contest \"%s\"."
msgstr "Bạn không ở trong kỳ thi \"%s\"."
-#: judge/views/contests.py:448
+#: judge/views/contests.py:626
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"
-#: judge/views/contests.py:488
+#: judge/views/contests.py:684
#, python-format
msgid "Contests in %(month)s"
msgstr "Các kỳ thi trong %(month)s"
-#: judge/views/contests.py:488
+#: judge/views/contests.py:685
msgid "F Y"
msgstr "F Y"
-#: judge/views/contests.py:536
+#: judge/views/contests.py:745
#, python-format
msgid "%s Statistics"
msgstr "%s Thống kê"
-#: judge/views/contests.py:731
+#: judge/views/contests.py:1002
#, python-format
msgid "%s Rankings"
msgstr "%s Bảng điểm"
-#: judge/views/contests.py:739
+#: judge/views/contests.py:1013
msgid "???"
msgstr "???"
-#: judge/views/contests.py:755
+#: judge/views/contests.py:1029
#, python-format
msgid "Your participation in %s"
msgstr "Lần tham gia trong %s"
-#: judge/views/contests.py:756
+#: judge/views/contests.py:1030
#, python-format
msgid "%s's participation in %s"
msgstr "Lần tham gia của %s trong %s"
-#: judge/views/contests.py:763
+#: judge/views/contests.py:1044
msgid "Live"
msgstr "Trực tiếp"
-#: judge/views/contests.py:775 templates/contest/contest-tabs.html:13
+#: judge/views/contests.py:1063 templates/contest/contest-tabs.html:13
msgid "Participation"
msgstr "Lần tham gia"
-#: judge/views/contests.py:822
+#: judge/views/contests.py:1112
#, python-format
msgid "%s MOSS Results"
msgstr "%s Kết quả MOSS"
-#: judge/views/contests.py:849
+#: judge/views/contests.py:1148
#, python-format
msgid "Running MOSS for %s..."
msgstr "Đang chạy MOSS cho %s..."
-#: judge/views/contests.py:872
+#: judge/views/contests.py:1171
#, python-format
msgid "Contest tag: %s"
msgstr "Nhãn kỳ thi: %s"
-#: judge/views/contests.py:882 judge/views/ticket.py:57
+#: judge/views/contests.py:1186 judge/views/ticket.py:72
msgid "Issue description"
msgstr "Mô tả vấn đề"
-#: judge/views/contests.py:925
+#: judge/views/contests.py:1232
#, python-format
msgid "New clarification for %s"
msgstr "Thông báo mới cho %s"
-#: judge/views/error.py:14
+#: judge/views/error.py:17
msgid "404 error"
msgstr "Lỗi 404"
-#: judge/views/error.py:15
+#: judge/views/error.py:18
#, python-format
msgid "Could not find page \"%s\""
msgstr "Không thể tìm thấy trang \"%s\""
-#: judge/views/error.py:22
+#: judge/views/error.py:29
#, python-format
msgid "no permission for %s"
msgstr "không có quyền cho %s"
-#: judge/views/error.py:30
+#: judge/views/error.py:41
#, python-format
msgid "corrupt page %s"
msgstr "trang bị sập %s"
-#: judge/views/internal.py:11
+#: judge/views/internal.py:12
#, fuzzy
#| msgid "contest problems"
msgid "Internal problems"
@@ -2642,72 +2642,72 @@ msgstr "bài trong kỳ thi"
msgid "Runtimes"
msgstr "Runtimes"
-#: judge/views/notification.py:40
+#: judge/views/notification.py:43
#, python-format
msgid "Notifications (%d unseen)"
msgstr "Thông báo (%d chưa xem)"
-#: judge/views/organization.py:59 judge/views/organization.py:62
+#: judge/views/organization.py:93 judge/views/organization.py:99
msgid "No such organization"
msgstr "Không có tổ chức như vậy"
-#: judge/views/organization.py:60
+#: judge/views/organization.py:94
#, python-format
msgid "Could not find an organization with the key \"%s\"."
msgstr "Không tìm thấy tổ chức với mã \"%s\"."
-#: judge/views/organization.py:63
+#: judge/views/organization.py:100
msgid "Could not find such organization."
msgstr ""
-#: judge/views/organization.py:79 judge/views/register.py:34
+#: judge/views/organization.py:119 judge/views/register.py:49
#: templates/organization/list.html:32 templates/user/import/table_csv.html:9
#: templates/user/user-list-tabs.html:6
msgid "Organizations"
msgstr "Tổ chức"
-#: judge/views/organization.py:130
+#: judge/views/organization.py:187
#, python-format
msgid "%s Members"
msgstr "%s Thành viên"
-#: judge/views/organization.py:159 judge/views/organization.py:162
-#: judge/views/organization.py:167
+#: judge/views/organization.py:232 judge/views/organization.py:238
+#: judge/views/organization.py:245
msgid "Joining organization"
msgstr "Tham gia tổ chức"
-#: judge/views/organization.py:159
+#: judge/views/organization.py:233
msgid "You are already in the organization."
msgstr "Bạn đã ở trong tổ chức."
-#: judge/views/organization.py:162
+#: judge/views/organization.py:238
msgid "This organization is not open."
msgstr "Tổ chức này không phải tổ chức mở."
-#: judge/views/organization.py:179
+#: judge/views/organization.py:261
msgid "Leaving organization"
msgstr "Rời tổ chức"
-#: judge/views/organization.py:179
+#: judge/views/organization.py:262
#, python-format
msgid "You are not in \"%s\"."
msgstr "Bạn không ở trong \"%s\"."
-#: judge/views/organization.py:203
+#: judge/views/organization.py:287
#, python-format
msgid "Request to join %s"
msgstr "Đăng ký tham gia %s"
-#: judge/views/organization.py:221
+#: judge/views/organization.py:312
msgid "Join request detail"
msgstr "Chi tiết đơn đăng ký"
-#: judge/views/organization.py:254
+#: judge/views/organization.py:360
#, python-format
msgid "Managing join requests for %s"
msgstr "Quản lý đơn đăng ký cho %s"
-#: judge/views/organization.py:285
+#: judge/views/organization.py:400
#, python-format
msgid ""
"Your organization can only receive %d more members. You cannot approve %d "
@@ -2716,207 +2716,207 @@ 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 "
"người."
-#: judge/views/organization.py:297
+#: judge/views/organization.py:418
#, python-format
msgid "Approved %d user."
msgid_plural "Approved %d users."
msgstr[0] "Đã chấp thuận %d người."
-#: judge/views/organization.py:298
+#: judge/views/organization.py:421
#, python-format
msgid "Rejected %d user."
msgid_plural "Rejected %d users."
msgstr[0] "Đã từ chối %d người."
-#: judge/views/organization.py:328
+#: judge/views/organization.py:455
#, python-format
msgid "Editing %s"
msgstr "Đang chỉnh sửa %s"
-#: judge/views/organization.py:352 judge/views/organization.py:360
+#: judge/views/organization.py:482 judge/views/organization.py:496
msgid "Can't edit organization"
msgstr "Không thể chỉnh sửa tổ chức"
-#: judge/views/organization.py:353
+#: judge/views/organization.py:483
msgid "You are not allowed to edit this organization."
msgstr "Bạn không được phép chỉnh sửa tổ chức này."
-#: judge/views/organization.py:361
+#: judge/views/organization.py:497
msgid "You are not allowed to kick people from this organization."
msgstr "Bạn không được phép đuổi người."
-#: judge/views/organization.py:366 judge/views/organization.py:370
+#: judge/views/organization.py:506 judge/views/organization.py:514
msgid "Can't kick user"
msgstr "Không thể đuổi"
-#: judge/views/organization.py:367
+#: judge/views/organization.py:507
msgid "The user you are trying to kick does not exist!"
msgstr ""
-#: judge/views/organization.py:371
+#: judge/views/organization.py:515
#, python-format
msgid "The user you are trying to kick is not in organization: %s."
msgstr ""
-#: judge/views/problem.py:70
+#: judge/views/problem.py:108
msgid "No such problem"
msgstr "Không có bài nào như vậy"
-#: judge/views/problem.py:71
+#: judge/views/problem.py:109
#, python-format
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\"."
-#: judge/views/problem.py:115
+#: judge/views/problem.py:169
#, python-brace-format
msgid "Editorial for {0}"
msgstr "Hướng dẫn cho {0}"
-#: judge/views/problem.py:118
+#: judge/views/problem.py:173
#, python-brace-format
msgid "Editorial for {0}"
msgstr "Hướng dẫn cho {0}"
-#: judge/views/problem.py:343 templates/contest/contest.html:79
+#: judge/views/problem.py:463 templates/contest/contest.html:79
#: templates/user/user-about.html:28 templates/user/user-tabs.html:5
#: templates/user/users-table.html:29
msgid "Problems"
msgstr "Bài tập"
-#: judge/views/problem.py:602
+#: judge/views/problem.py:815
msgid "Problem feed"
msgstr "Bài tập"
-#: judge/views/problem.py:756
+#: judge/views/problem.py:1027
msgid "Banned from submitting"
msgstr "Bị cấm nộp bài"
-#: judge/views/problem.py:757
+#: judge/views/problem.py:1029
msgid ""
"You have been declared persona non grata for this problem. You are "
"permanently barred from submitting this problem."
msgstr "Bạn đã bị cấm nộp bài này."
-#: judge/views/problem.py:771
+#: judge/views/problem.py:1052
msgid "Too many submissions"
msgstr "Quá nhiều lần nộp"
-#: judge/views/problem.py:772
+#: judge/views/problem.py:1054
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."
-#: judge/views/problem.py:832 judge/views/problem.py:835
+#: judge/views/problem.py:1133 judge/views/problem.py:1138
#, python-format
msgid "Submit to %(problem)s"
msgstr "Nộp bài cho %(problem)s"
-#: judge/views/problem.py:850
+#: judge/views/problem.py:1160
msgid "Clone Problem"
msgstr "Nhân bản bài tập"
-#: judge/views/problem_data.py:48
+#: judge/views/problem_data.py:68
msgid "Checker arguments must be a JSON object"
msgstr ""
-#: judge/views/problem_data.py:50
+#: judge/views/problem_data.py:70
msgid "Checker arguments is invalid JSON"
msgstr ""
-#: judge/views/problem_data.py:57
+#: judge/views/problem_data.py:77
msgid "Your zip file is invalid!"
msgstr "File Zip không hợp lệ!"
-#: judge/views/problem_data.py:120
+#: judge/views/problem_data.py:157
#, python-brace-format
msgid "Comparing submissions for {0}"
msgstr "So sánh các bài nộp cho {0}"
-#: judge/views/problem_data.py:123
+#: judge/views/problem_data.py:161
#, python-brace-format
msgid "Comparing submissions for {0}"
msgstr "So sánh các bài nộp cho {0}"
-#: judge/views/problem_data.py:158
+#: judge/views/problem_data.py:198
#, python-brace-format
msgid "Editing data for {0}"
msgstr "Chỉnh sửa dữ liệu cho {0}"
-#: judge/views/problem_data.py:161
+#: judge/views/problem_data.py:202
#, python-format
msgid "Editing data for %s"
msgstr "Chỉnh sửa dữ liệu cho %s"
-#: judge/views/problem_data.py:253 judge/views/problem_data.py:254
+#: judge/views/problem_data.py:332 judge/views/problem_data.py:334
#, python-format
msgid "Generated init.yml for %s"
msgstr "File init.yml cho %s"
-#: judge/views/problem_manage.py:52 judge/views/problem_manage.py:55
+#: judge/views/problem_manage.py:57 judge/views/problem_manage.py:61
#, python-format
msgid "Managing submissions for %s"
msgstr "Quản lý bài nộp cho %s"
-#: judge/views/problem_manage.py:97
+#: judge/views/problem_manage.py:120
#, python-format
msgid "Rejudging selected submissions for %s..."
msgstr "Đang chấm lại các bài nộp cho %s..."
-#: judge/views/problem_manage.py:141
+#: judge/views/problem_manage.py:181
#, python-format
msgid "Rescoring all submissions for %s..."
msgstr "Đang tính điểm lại các bài nộp cho %s..."
-#: judge/views/problem_manage.py:150
+#: judge/views/problem_manage.py:196
#, python-format
msgid "Successfully scheduled %d submission for rejudging."
msgid_plural "Successfully scheduled %d submissions for rejudging."
msgstr[0] "Đã lên lịch chấm lại cho %d bài nộp."
-#: judge/views/ranked_submission.py:58
+#: judge/views/ranked_submission.py:67
#, python-format
msgid "Best solutions for %s"
msgstr "Các bài nộp tốt nhất cho %s"
-#: judge/views/ranked_submission.py:61
+#: judge/views/ranked_submission.py:71
#, python-brace-format
msgid "Best solutions for {0}"
msgstr "Các bài nộp tốt nhất cho {0}"
-#: judge/views/ranked_submission.py:71
+#: judge/views/ranked_submission.py:83
#, python-format
msgid "Best solutions for %(problem)s in %(contest)s"
msgstr "Các bài nộp tốt nhất cho %(problem)s trong %(contest)s"
-#: judge/views/ranked_submission.py:74
+#: judge/views/ranked_submission.py:87
#, python-format
msgid "Best solutions for problem %(number)s in %(contest)s"
msgstr "Các bài nộp tốt nhất cho bài %(number)s trong %(contest)s"
-#: judge/views/ranked_submission.py:80
+#: judge/views/ranked_submission.py:95
#, python-brace-format
msgid "Best solutions for {0} in {2}"
msgstr ""
"Các bài nộp tốt nhất cho {0} trong {2}"
"a>"
-#: judge/views/ranked_submission.py:83
+#: judge/views/ranked_submission.py:102
#, python-brace-format
msgid "Best solutions for problem {0} in {1}"
msgstr "Các bài nộp tốt nhất cho bài {0} trong {1}"
-#: judge/views/register.py:27
+#: judge/views/register.py:33
msgid "A username must contain letters, numbers, or underscores"
msgstr "Tên đăng nhập phải chứa ký tự, chữ số, hoặc dấu gạch dưới"
-#: judge/views/register.py:31 templates/user/edit-profile.html:120
+#: judge/views/register.py:43 templates/user/edit-profile.html:120
msgid "Preferred language"
msgstr "Ngôn ngữ ưa thích"
-#: judge/views/register.py:38
+#: judge/views/register.py:56
msgid "Subscribe to newsletter?"
msgstr "Đăng ký để nhận thông báo?"
-#: judge/views/register.py:55
+#: judge/views/register.py:79
#, python-format
msgid ""
"The email address \"%s\" is already taken. Only one registration is allowed "
@@ -2924,7 +2924,7 @@ msgid ""
msgstr ""
"Email \"%s\" đã được sử dụng. Mỗi email chỉ có thể đăng ký một tài khoản."
-#: judge/views/register.py:61
+#: judge/views/register.py:91
msgid ""
"Your email provider is not allowed due to history of abuse. Please use a "
"reputable email provider."
@@ -2932,69 +2932,69 @@ msgstr ""
"Your email provider is not allowed due to history of abuse. Please use a "
"reputable email provider."
-#: judge/views/register.py:67 judge/views/register.py:105
+#: judge/views/register.py:99 judge/views/register.py:140
msgid "Registration"
msgstr "Đăng ký"
-#: judge/views/register.py:116
+#: judge/views/register.py:154
msgid "Authentication failure"
msgstr "Xác thực thất bại"
-#: judge/views/stats.py:67
+#: judge/views/stats.py:99
msgid "Language statistics"
msgstr "Thống kê ngôn ngữ"
-#: judge/views/status.py:24 templates/submission/list.html:313
+#: judge/views/status.py:27 templates/submission/list.html:313
msgid "Status"
msgstr "Kết quả chấm"
-#: judge/views/status.py:107
+#: judge/views/status.py:120
msgid "Version matrix"
msgstr "Ma trận phiên bản"
-#: judge/views/submission.py:88 judge/views/submission.py:95
+#: judge/views/submission.py:112 judge/views/submission.py:120
#, python-format
msgid "Submission of %(problem)s by %(user)s"
msgstr "Bài nộp của %(user)s cho bài %(problem)s"
-#: judge/views/submission.py:248 judge/views/submission.py:249
+#: judge/views/submission.py:285 judge/views/submission.py:286
#: templates/problem/problem.html:194
msgid "All submissions"
msgstr "Tất cả bài nộp"
-#: judge/views/submission.py:410
+#: judge/views/submission.py:475
msgid "All my submissions"
msgstr "Tất cả bài nộp của tôi"
-#: judge/views/submission.py:411
+#: judge/views/submission.py:476
#, python-format
msgid "All submissions by %s"
msgstr "Tất cả bài nộp của %s"
-#: judge/views/submission.py:442
+#: judge/views/submission.py:521
#, python-format
msgid "All submissions for %s"
msgstr "Tất cả bài nộp cho %s"
-#: judge/views/submission.py:461
+#: judge/views/submission.py:543
msgid "Must pass a problem"
msgstr "Phải làm được một bài"
-#: judge/views/submission.py:507
+#: judge/views/submission.py:601
#, python-format
msgid "My submissions for %(problem)s"
msgstr "Bài nộp của tôi cho %(problem)s"
-#: judge/views/submission.py:508
+#: judge/views/submission.py:602
#, python-format
msgid "%(user)s's submissions for %(problem)s"
msgstr "Các bài nộp của %(user)s cho %(problem)s"
-#: judge/views/submission.py:609
+#: judge/views/submission.py:732
msgid "Must pass a contest"
msgstr "Phải qua một kỳ thi"
-#: judge/views/submission.py:628
+#: judge/views/submission.py:760
#, python-brace-format
msgid ""
"{0}'s submissions for {2} in {0} cho {2} trong {4}"
-#: judge/views/submission.py:635
+#: judge/views/submission.py:772
#, python-brace-format
msgid ""
"{0}'s submissions for problem {2} in {3}"
@@ -3012,44 +3012,44 @@ msgstr ""
"Các bài nộp của {0} cho bài {2} trong {3}"
""
-#: judge/views/ticket.py:50 judge/views/ticket.py:56
+#: judge/views/ticket.py:65 judge/views/ticket.py:71
msgid "Ticket title"
msgstr "Tiêu đề báo cáo"
-#: judge/views/ticket.py:107 judge/views/ticket.py:110
+#: judge/views/ticket.py:129 judge/views/ticket.py:133
#, python-format
msgid "New ticket for %s"
msgstr "Báo cáo mới cho %s"
-#: judge/views/ticket.py:170
+#: judge/views/ticket.py:210
#, python-format
msgid "%(title)s - Ticket %(id)d"
msgstr "%(title)s - Báo cáo %(id)d"
-#: judge/views/ticket.py:279
+#: judge/views/ticket.py:339
#, python-format
msgid "Tickets - Page %(number)d of %(total)d"
msgstr "Báo cáo - Trang %(number)d trên %(total)d"
-#: judge/views/ticket.py:328
+#: judge/views/ticket.py:405
#, python-format
msgid "New Ticket: %s"
msgstr "Báo cáo mới: %s"
-#: judge/views/ticket.py:329
+#: judge/views/ticket.py:408
#, python-format
msgid "#%(id)d, assigned to: %(users)s"
msgstr "#%(id)d, được phân cho: %(users)s"
-#: judge/views/ticket.py:331
+#: judge/views/ticket.py:412
msgid ", "
msgstr ", "
-#: judge/views/ticket.py:331
+#: judge/views/ticket.py:417
msgid "no one"
msgstr "không người nào"
-#: judge/views/ticket.py:351
+#: judge/views/ticket.py:444
#, python-format
msgid "New Ticket Message For: %s"
msgstr "Tin nhắn báo cáo mới cho: %s"
@@ -3058,64 +3058,64 @@ msgstr "Tin nhắn báo cáo mới cho: %s"
msgid "Enable Two Factor Authentication"
msgstr "Kích hoạt Two Factor Authentication"
-#: judge/views/totp.py:89 templates/registration/totp_disable.html:48
+#: judge/views/totp.py:93 templates/registration/totp_disable.html:48
msgid "Disable Two Factor Authentication"
msgstr "Hủy kích hoạt Two Factor Authentication"
-#: judge/views/totp.py:105
+#: judge/views/totp.py:109
msgid "Perform Two Factor Authentication"
msgstr "Thực hiện Two Factor Authentication"
-#: judge/views/user.py:74
+#: judge/views/user.py:89
msgid "No such user"
msgstr "Không người dùng nào như vậy"
-#: judge/views/user.py:74
+#: judge/views/user.py:90
#, python-format
msgid "No user handle \"%s\"."
msgstr "Không tồn tại tên người dùng \"%s\"."
-#: judge/views/user.py:78
+#: judge/views/user.py:95
msgid "My account"
msgstr "Tài khoản của tôi"
-#: judge/views/user.py:79
+#: judge/views/user.py:97
#, python-format
msgid "User %s"
msgstr "Thành viên %s"
-#: judge/views/user.py:149
+#: judge/views/user.py:195
msgid "M j, Y"
msgstr "j M, Y"
-#: judge/views/user.py:172
+#: judge/views/user.py:230
msgid "M j, Y, G:i"
msgstr "j M, Y, G:i"
-#: judge/views/user.py:291
+#: judge/views/user.py:392
msgid "Updated on site"
msgstr "Được cập nhật trên web"
-#: judge/views/user.py:326 templates/admin/auth/user/change_form.html:14
+#: judge/views/user.py:446 templates/admin/auth/user/change_form.html:14
#: templates/admin/auth/user/change_form.html:17 templates/base.html:264
#: templates/user/user-tabs.html:10
msgid "Edit profile"
msgstr "Chỉnh sửa thông tin"
-#: judge/views/user.py:335 templates/user/user-list-tabs.html:4
+#: judge/views/user.py:457 templates/user/user-list-tabs.html:4
msgid "Leaderboard"
msgstr "Bảng xếp hạng"
-#: judge/views/user.py:410
+#: judge/views/user.py:553
msgid "Import Users"
msgstr ""
-#: judge/views/widgets.py:48 judge/views/widgets.py:58
+#: judge/views/widgets.py:69 judge/views/widgets.py:85
#, python-format
msgid "Invalid upstream data: %s"
msgstr "Dữ liệu không hợp lệ: %s"
-#: judge/views/widgets.py:68
+#: judge/views/widgets.py:99
msgid "Bad latitude or longitude"
msgstr "Kinh độ / Vĩ độ không hợp lệ"
@@ -3307,7 +3307,7 @@ msgstr "Chỉnh sửa thông tin"
msgid "Rejudge"
msgstr "Chấm lại"
-#: templates/base.html:230 templates/chat/chat.html:573
+#: templates/base.html:230 templates/chat/chat.html:578
msgid "Chat"
msgstr "Chat"
@@ -3323,7 +3323,7 @@ msgstr "Xin chào, %(username)s."
#: templates/base.html:259 templates/chat/chat.html:20
#: templates/comments/list.html:89 templates/contest/contest-list-tabs.html:24
#: templates/contest/ranking-table.html:53 templates/internal/base.html:59
-#: templates/problem/list.html:263 templates/problem/problem-list-tabs.html:6
+#: templates/problem/list.html:249 templates/problem/problem-list-tabs.html:6
#: templates/submission/info-base.html:12
#: templates/submission/submission-list-tabs.html:15
msgid "Admin"
@@ -3412,7 +3412,7 @@ msgstr "Sự kiện"
msgid "You have no ticket"
msgstr "Bạn không có báo cáo"
-#: templates/blog/list.html:94 templates/problem/list.html:409
+#: templates/blog/list.html:94 templates/problem/list.html:392
#: templates/problem/problem.html:407
msgid "Clarifications"
msgstr "Thông báo"
@@ -3421,7 +3421,7 @@ msgstr "Thông báo"
msgid "Add"
msgstr "Thêm mới"
-#: templates/blog/list.html:119 templates/problem/list.html:431
+#: templates/blog/list.html:119 templates/problem/list.html:414
#: templates/problem/problem.html:418
msgid "No clarifications have been made at this time."
msgstr "Không có thông báo nào."
@@ -3458,28 +3458,28 @@ msgstr "Bạn bè"
msgid "Other"
msgstr "Thành viên khác"
-#: templates/chat/chat.html:166
+#: templates/chat/chat.html:168
msgid "New message(s)"
msgstr "Tin nhắn mới"
-#: templates/chat/chat.html:514 templates/chat/chat.html:595
+#: templates/chat/chat.html:519 templates/chat/chat.html:600
#: templates/user/base-users.html:14 templates/user/base-users.html:80
msgid "Search by handle..."
msgstr "Tìm kiếm theo tên..."
-#: templates/chat/chat.html:575 templates/chat/chat.html:582
+#: templates/chat/chat.html:580 templates/chat/chat.html:587
msgid "Online Users"
msgstr "Trực tuyến"
-#: templates/chat/chat.html:583
+#: templates/chat/chat.html:588
msgid "Refresh"
msgstr "Làm mới"
-#: templates/chat/chat.html:616
+#: templates/chat/chat.html:621
msgid "Emoji"
msgstr ""
-#: templates/chat/chat.html:617
+#: templates/chat/chat.html:622
msgid "Enter your message"
msgstr "Nhập tin nhắn"
@@ -3659,7 +3659,7 @@ msgstr "Hôm nay"
msgid "Next"
msgstr "Tiếp"
-#: templates/contest/contest-list-tabs.html:21 templates/problem/list.html:262
+#: templates/contest/contest-list-tabs.html:21 templates/problem/list.html:248
#: templates/problem/problem-list-tabs.html:5
msgid "List"
msgstr "Danh sách"
@@ -3766,8 +3766,8 @@ msgid ""
"%(time_limit)s window between %(start_time)s and "
"%(end_time)s"
msgstr ""
-"Kéo dài %(time_limit)s từ %(start_time)s đến "
-"%(end_time)s"
+"Kéo dài %(time_limit)s từ %(start_time)s đến %(end_time)s"
+"b>"
#: templates/contest/contest.html:63
#, python-format
@@ -3780,12 +3780,12 @@ msgstr "Tỷ lệ AC"
#: templates/contest/contest.html:86 templates/contest/list.html:236
#: templates/contest/list.html:290 templates/contest/list.html:370
-#: templates/problem/list.html:285 templates/problem/list.html:316
+#: templates/problem/list.html:270 templates/problem/list.html:299
msgid "Users"
msgstr "Số lượng"
-#: templates/contest/contest.html:111 templates/problem/list.html:320
-#: templates/problem/list.html:392
+#: templates/contest/contest.html:111 templates/problem/list.html:303
+#: templates/problem/list.html:375
msgid "Editorial"
msgstr "Hướng dẫn"
@@ -3805,7 +3805,7 @@ msgstr ""
msgid "Show"
msgstr "Hiển thị"
-#: templates/contest/list.html:102 templates/problem/list.html:111
+#: templates/contest/list.html:102 templates/problem/list.html:95
msgid "Organizations..."
msgstr "Tổ chức..."
@@ -4049,8 +4049,8 @@ msgstr ""
msgid "Thinking"
msgstr "Bảng xếp hạng"
-#: templates/internal/base.html:78 templates/problem/list.html:282
-#: templates/problem/list.html:306
+#: templates/internal/base.html:78 templates/problem/list.html:267
+#: templates/problem/list.html:289
msgid "Types"
msgstr "Dạng"
@@ -4274,7 +4274,7 @@ msgid "There are no requests to approve."
msgstr "Không có đơn đăng ký."
#: templates/organization/requests/pending.html:17
-#: templates/problem/data.html:477
+#: templates/problem/data.html:479
msgid "Delete?"
msgstr "Xóa?"
@@ -4310,35 +4310,35 @@ msgstr "Đuổi"
msgid "Enter a new code for the cloned problem:"
msgstr "Nhập mã bài mới cho bài tập được nhân bản:"
-#: templates/problem/data.html:147
+#: templates/problem/data.html:149
msgid "Instruction"
msgstr "Hướng dẫn"
-#: templates/problem/data.html:435
+#: templates/problem/data.html:437
msgid "View YAML"
msgstr "Xem YAML"
-#: templates/problem/data.html:466 templates/problem/data.html:517
+#: templates/problem/data.html:468 templates/problem/data.html:519
msgid "Apply!"
msgstr "Lưu!"
-#: templates/problem/data.html:471
+#: templates/problem/data.html:473
msgid "Type"
msgstr "Kiểu"
-#: templates/problem/data.html:472
+#: templates/problem/data.html:474
msgid "Input file"
msgstr "File Input"
-#: templates/problem/data.html:473
+#: templates/problem/data.html:475
msgid "Output file"
msgstr "File Output"
-#: templates/problem/data.html:475
+#: templates/problem/data.html:477
msgid "Pretest?"
msgstr "Pretest?"
-#: templates/problem/data.html:518
+#: templates/problem/data.html:520
msgid "Add new case"
msgstr "Thêm test mới"
@@ -4375,7 +4375,7 @@ msgstr "Tổng điểm"
msgid "Thinking point"
msgstr "Độ khó nghĩ"
-#: templates/problem/feed.html:70 templates/problem/search-form.html:63
+#: templates/problem/feed.html:70 templates/problem/search-form.html:73
msgid "Problem types"
msgstr "Dạng bài"
@@ -4383,49 +4383,49 @@ msgstr "Dạng bài"
msgid "Any additional note here"
msgstr "Lưu ý thêm cho admin"
-#: templates/problem/list.html:109
+#: templates/problem/list.html:93
msgid "Filter by type..."
msgstr "Lọc theo dạng..."
-#: templates/problem/list.html:166 templates/problem/list.html:192
+#: templates/problem/list.html:152 templates/problem/list.html:178
msgid "Add types..."
msgstr "Thêm dạng"
-#: templates/problem/list.html:208
+#: templates/problem/list.html:194
msgid "Fail to vote!"
msgstr "Hệ thống lỗi!"
-#: templates/problem/list.html:211
+#: templates/problem/list.html:197
msgid "Successful vote! Thank you!"
msgstr "Đã gửi thành công! Cảm ơn bạn!"
-#: templates/problem/list.html:261
+#: templates/problem/list.html:247
msgid "Feed"
msgstr "Gợi ý"
-#: templates/problem/list.html:280 templates/problem/list.html:302
-#: templates/problem/search-form.html:46 templates/user/user-problems.html:57
+#: templates/problem/list.html:285 templates/problem/search-form.html:56
+#: templates/user/user-problems.html:57
msgid "Category"
msgstr "Nhóm"
-#: templates/problem/list.html:313
+#: templates/problem/list.html:296
#, python-format
msgid "AC %%"
msgstr "AC %%"
-#: templates/problem/list.html:404
+#: templates/problem/list.html:387
msgid "Add clarifications"
msgstr "Thêm thông báo"
-#: templates/problem/list.html:440
+#: templates/problem/list.html:423
msgid "FOR YOU"
msgstr "DÀNH CHO BẠN"
-#: templates/problem/list.html:443
+#: templates/problem/list.html:426
msgid "NEW"
msgstr "MỚI NHẤT"
-#: templates/problem/list.html:447
+#: templates/problem/list.html:430
msgid "VOLUNTEER"
msgstr "TÌNH NGUYỆN"
@@ -4637,6 +4637,10 @@ msgstr "Giới hạn thời gian:"
msgid "Memory Limit:"
msgstr "Giới hạn bộ nhớ:"
+#: templates/problem/recent-attempt.html:2
+msgid "Last unsolved"
+msgstr "Nộp gần đây"
+
#: templates/problem/search-form.html:2
msgid "Problem search"
msgstr "Tìm kiếm bài tập"
@@ -4661,21 +4665,27 @@ msgstr "Hiển thị hướng dẫn"
msgid "Have editorial"
msgstr "Có hướng dẫn"
-#: templates/problem/search-form.html:49 templates/problem/search-form.html:51
+#: templates/problem/search-form.html:46
+#, fuzzy
+#| msgid "Authors"
+msgid "Author"
+msgstr "Các tác giả"
+
+#: templates/problem/search-form.html:59 templates/problem/search-form.html:61
#: templates/submission/submission-list-tabs.html:4
msgid "All"
msgstr "Tất cả"
-#: templates/problem/search-form.html:74
+#: templates/problem/search-form.html:84
msgid "Point range"
msgstr "Mốc điểm"
-#: templates/problem/search-form.html:80 templates/submission/list.html:331
+#: templates/problem/search-form.html:90 templates/submission/list.html:331
#: templates/ticket/list.html:248
msgid "Go"
msgstr "Lọc"
-#: templates/problem/search-form.html:81
+#: templates/problem/search-form.html:91
msgid "Random"
msgstr "Ngẫu nhiên"
diff --git a/templates/problem/list.html b/templates/problem/list.html
index 316d466..ba5ba04 100644
--- a/templates/problem/list.html
+++ b/templates/problem/list.html
@@ -10,17 +10,15 @@
{% if not request.in_contest_mode %}