diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po
index 587b067..8263f6a 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-10-18 07:19+0700\n"
+"POT-Creation-Date: 2022-11-10 07:59+0700\n"
"PO-Revision-Date: 2021-07-20 03:44\n"
"Last-Translator: Icyene\n"
"Language-Team: Vietnamese\n"
@@ -18,7 +18,7 @@ msgstr ""
"X-Crowdin-Project-ID: 466004\n"
"X-Crowdin-File-ID: 5\n"
-#: chat_box/models.py:31 chat_box/models.py:52 chat_box/models.py:63
+#: chat_box/models.py:31 chat_box/models.py:51 chat_box/models.py:65
#: judge/admin/interface.py:150 judge/models/contest.py:622
#: judge/models/contest.py:815 judge/models/profile.py:354
#: judge/models/profile.py:430
@@ -33,27 +33,27 @@ msgstr "thời gian đăng"
msgid "body of comment"
msgstr "nội dung bình luận"
-#: chat_box/models.py:56
+#: chat_box/models.py:55
msgid "last seen"
msgstr "xem lần cuối"
-#: chat_box/views.py:45 templates/chat/chat.html:4 templates/chat/chat.html:561
+#: chat_box/views.py:45 templates/chat/chat.html:4 templates/chat/chat.html:554
msgid "Chat Box"
msgstr "Chat Box"
-#: dmoj/settings.py:361
-msgid "English"
-msgstr ""
-
-#: dmoj/settings.py:362
+#: dmoj/settings.py:363
msgid "Vietnamese"
msgstr "Tiếng Việt"
+#: dmoj/settings.py:364
+msgid "English"
+msgstr ""
+
#: dmoj/urls.py:131
msgid "Login"
msgstr "Đăng nhập"
-#: dmoj/urls.py:208 templates/base.html:216
+#: dmoj/urls.py:208 templates/base.html:201
#: templates/organization/org-left-sidebar.html:2
msgid "Home"
msgstr "Trang chủ"
@@ -164,7 +164,7 @@ msgstr "Tính toán lại kết quả"
msgid "username"
msgstr "tên đăng nhập"
-#: judge/admin/contest.py:485 templates/base.html:325
+#: judge/admin/contest.py:485 templates/base.html:306
msgid "virtual"
msgstr "ảo"
@@ -226,7 +226,7 @@ msgid "Limits"
msgstr "Giới hạn"
#: judge/admin/problem.py:218 judge/admin/submission.py:353
-#: templates/base.html:252 templates/stats/tab.html:4
+#: templates/base.html:237 templates/stats/tab.html:4
#: templates/submission/list.html:342
msgid "Language"
msgstr "Ngôn ngữ"
@@ -430,20 +430,20 @@ msgstr "Dạng"
msgid "Online Judge"
msgstr ""
-#: judge/comments.py:61
+#: judge/comments.py:60
msgid "Comment body"
msgstr "Nội dung bình luận"
-#: judge/comments.py:67 judge/views/ticket.py:78
+#: judge/comments.py:66 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:76 templates/comments/list.html:132
+#: judge/comments.py:75 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:129
+#: judge/comments.py:128
msgid "Posted comment"
msgstr "Bình luận đã đăng"
@@ -467,71 +467,71 @@ msgstr ""
msgid "IOI"
msgstr ""
-#: judge/forms.py:68
+#: judge/forms.py:70
msgid "Subscribe to contest updates"
msgstr "Đăng ký để nhận thông báo về các kỳ thi"
-#: judge/forms.py:71
+#: judge/forms.py:73
msgid "Enable experimental features"
msgstr "Sử dụng các tính năng thử nghiệm"
-#: judge/forms.py:108 judge/views/organization.py:514
+#: judge/forms.py:110 judge/views/organization.py:519
#: judge/views/register.py:68
#, python-brace-format
msgid "You may not be part of more than {count} public groups."
msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai."
-#: judge/forms.py:140
+#: judge/forms.py:142
msgid "Any judge"
msgstr ""
-#: judge/forms.py:308
+#: judge/forms.py:317
msgid "Enter usernames separating by space"
msgstr "Nhập các tên đăng nhập, cách nhau bởi dấu cách"
-#: judge/forms.py:309 judge/views/stats.py:166 templates/stats/site.html:27
+#: judge/forms.py:318 judge/views/stats.py:166 templates/stats/site.html:27
msgid "New users"
msgstr "Thành viên mới"
-#: judge/forms.py:326
+#: judge/forms.py:335
#, python-brace-format
msgid "These usernames don't exist: {usernames}"
msgstr "Các tên đăng nhập này không tồn tại: {usernames}"
-#: judge/forms.py:385 judge/views/register.py:31
+#: judge/forms.py:394 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:386 templates/registration/registration_form.html:151
+#: judge/forms.py:395 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:412
+#: judge/forms.py:421
msgid "Two Factor Authentication tokens must be 6 decimal digits."
msgstr "Two Factor Authentication phải chứa 6 chữ số."
-#: judge/forms.py:425 templates/registration/totp_auth.html:32
+#: judge/forms.py:434 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:432 judge/models/problem.py:158
+#: judge/forms.py:441 judge/models/problem.py:130
msgid "Problem code must be ^[a-z0-9]+$"
msgstr "Mã bài phải có dạng ^[a-z0-9]+$"
-#: judge/forms.py:439
+#: judge/forms.py:448
msgid "Problem with code already exists."
msgstr "Mã bài đã tồn tại."
-#: judge/forms.py:446 judge/models/contest.py:90
+#: judge/forms.py:455 judge/models/contest.py:90
msgid "Contest id must be ^[a-z0-9]+$"
msgstr "Mã kỳ thi phải có dạng ^[a-z0-9]+$"
-#: judge/forms.py:452
+#: judge/forms.py:461
msgid "Contest with key already exists."
msgstr "Mã kỳ thi đã tồn tại."
@@ -582,7 +582,7 @@ msgstr "người bình luận"
msgid "associated page"
msgstr "trang tương ứng"
-#: judge/models/comment.py:53 judge/models/problem.py:714
+#: judge/models/comment.py:53 judge/models/problem.py:686
msgid "votes"
msgstr "bình chọn"
@@ -602,7 +602,7 @@ msgstr "bình luận"
msgid "comments"
msgstr ""
-#: judge/models/comment.py:160 judge/models/problem.py:682
+#: judge/models/comment.py:160 judge/models/problem.py:654
#, python-format
msgid "Editorial for %s"
msgstr ""
@@ -620,6 +620,10 @@ msgid "Override comment lock"
msgstr ""
#: 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
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:30
msgid "owner"
msgstr ""
@@ -628,6 +632,9 @@ msgid "read"
msgstr ""
#: 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 ""
@@ -703,10 +710,17 @@ 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:117 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
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:13
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:27
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:13
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:27
msgid "description"
msgstr "mô tả"
-#: judge/models/contest.py:119 judge/models/problem.py:587
+#: judge/models/contest.py:119 judge/models/problem.py:559
#: judge/models/runtime.py:216
msgid "problems"
msgstr "bài tập"
@@ -719,8 +733,8 @@ msgstr "thời gian bắt đầu"
msgid "end time"
msgstr "thời gian kết thúc"
-#: judge/models/contest.py:124 judge/models/problem.py:211
-#: judge/models/problem.py:622
+#: judge/models/contest.py:124 judge/models/problem.py:183
+#: judge/models/problem.py:594
msgid "time limit"
msgstr "giới hạn thời gian"
@@ -731,7 +745,7 @@ 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:132 judge/models/problem.py:250
+#: judge/models/contest.py:132 judge/models/problem.py:222
msgid "publicly visible"
msgstr "công khai"
@@ -830,12 +844,12 @@ msgstr ""
"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:212 judge/models/interface.py:92
-#: judge/models/problem.py:307
+#: judge/models/problem.py:279
msgid "private to organizations"
msgstr "riêng tư với các tổ chức"
#: judge/models/contest.py:217 judge/models/interface.py:88
-#: judge/models/problem.py:303 judge/models/profile.py:126
+#: judge/models/problem.py:275 judge/models/profile.py:126
msgid "organizations"
msgstr "tổ chức"
@@ -843,7 +857,7 @@ msgstr "tổ chức"
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:221 judge/models/problem.py:281
+#: judge/models/contest.py:221 judge/models/problem.py:253
msgid "OpenGraph image"
msgstr "Hình ảnh OpenGraph"
@@ -864,7 +878,7 @@ msgstr "số lượng thí sinh thi trực tiếp"
msgid "contest summary"
msgstr "tổng kết kỳ thi"
-#: judge/models/contest.py:243 judge/models/problem.py:287
+#: judge/models/contest.py:243 judge/models/problem.py:259
msgid "Plain-text, shown in meta description tag, e.g. for social media."
msgstr ""
@@ -880,7 +894,7 @@ 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:258 judge/models/problem.py:269
+#: judge/models/contest.py:258 judge/models/problem.py:241
msgid "personae non gratae"
msgstr "Chặn tham gia"
@@ -1025,14 +1039,14 @@ msgid "contest participations"
msgstr "lần tham gia kỳ thi"
#: judge/models/contest.py:740 judge/models/contest.py:789
-#: judge/models/contest.py:851 judge/models/problem.py:586
-#: judge/models/problem.py:593 judge/models/problem.py:614
-#: judge/models/problem.py:645 judge/models/problem_data.py:50
+#: judge/models/contest.py:851 judge/models/problem.py:558
+#: judge/models/problem.py:565 judge/models/problem.py:586
+#: judge/models/problem.py:617 judge/models/problem_data.py:50
msgid "problem"
msgstr "bài tập"
#: judge/models/contest.py:748 judge/models/contest.py:801
-#: judge/models/problem.py:234
+#: judge/models/problem.py:206
msgid "points"
msgstr "điểm"
@@ -1076,7 +1090,7 @@ msgstr "bài trong kỳ thi"
msgid "contest problems"
msgstr "bài trong kỳ thi"
-#: judge/models/contest.py:783 judge/models/submission.py:235
+#: judge/models/contest.py:783 judge/models/submission.py:233
msgid "submission"
msgstr "bài nộp"
@@ -1180,7 +1194,7 @@ msgstr "mục cha"
msgid "post title"
msgstr "tiêu đề bài đăng"
-#: judge/models/interface.py:75 judge/models/problem.py:671
+#: judge/models/interface.py:75 judge/models/problem.py:643
msgid "authors"
msgstr "tác giả"
@@ -1188,7 +1202,7 @@ msgstr "tác giả"
msgid "slug"
msgstr "slug"
-#: judge/models/interface.py:77 judge/models/problem.py:669
+#: judge/models/interface.py:77 judge/models/problem.py:641
msgid "public visibility"
msgstr "khả năng hiển thị công khai"
@@ -1252,140 +1266,140 @@ msgstr "thời gian gửi"
msgid "messages in the thread"
msgstr "tin nhắn trong chuỗi"
-#: judge/models/problem.py:44
+#: judge/models/problem.py:41
msgid "problem category ID"
msgstr "mã của nhóm bài"
-#: judge/models/problem.py:47
+#: judge/models/problem.py:44
msgid "problem category name"
msgstr "tên nhóm bài"
-#: judge/models/problem.py:55
+#: judge/models/problem.py:52
msgid "problem type"
msgstr "dạng bài"
-#: judge/models/problem.py:56 judge/models/problem.py:201
+#: judge/models/problem.py:53 judge/models/problem.py:173
#: judge/models/volunteer.py:28
msgid "problem types"
msgstr "dạng bài"
-#: judge/models/problem.py:61
+#: judge/models/problem.py:58
msgid "problem group ID"
msgstr "mã của nhóm bài"
-#: judge/models/problem.py:63
+#: judge/models/problem.py:60
msgid "problem group name"
msgstr "tên nhóm bài"
-#: judge/models/problem.py:70 judge/models/problem.py:206
+#: judge/models/problem.py:67 judge/models/problem.py:178
msgid "problem group"
msgstr "nhóm bài"
-#: judge/models/problem.py:71
+#: judge/models/problem.py:68
msgid "problem groups"
msgstr "nhóm bài"
-#: judge/models/problem.py:78
+#: judge/models/problem.py:75
msgid "key"
msgstr ""
-#: judge/models/problem.py:81
+#: judge/models/problem.py:78
msgid "link"
msgstr "đường dẫn"
-#: judge/models/problem.py:82
+#: judge/models/problem.py:79
msgid "full name"
msgstr "tên đầy đủ"
-#: judge/models/problem.py:86 judge/models/profile.py:39
+#: judge/models/problem.py:83 judge/models/profile.py:39
#: judge/models/runtime.py:34
msgid "short name"
msgstr "tên ngắn"
-#: judge/models/problem.py:87
+#: judge/models/problem.py:84
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:92
+#: judge/models/problem.py:89
msgid "icon"
msgstr "icon"
-#: judge/models/problem.py:93
+#: judge/models/problem.py:90
msgid "URL to the icon"
msgstr "Đường dẫn icon"
-#: judge/models/problem.py:95
+#: judge/models/problem.py:92
msgid "license text"
msgstr "văn bản giấy phép"
-#: judge/models/problem.py:104
+#: judge/models/problem.py:101
msgid "license"
msgstr ""
-#: judge/models/problem.py:105
+#: judge/models/problem.py:102
msgid "licenses"
msgstr ""
-#: judge/models/problem.py:155
+#: judge/models/problem.py:127
msgid "problem code"
msgstr "mã bài"
-#: judge/models/problem.py:161
+#: judge/models/problem.py:133
msgid "A short, unique code for the problem, used in the url after /problem/"
msgstr "Mã bài ngắn, độc nhất cho bài tập, được dùng trong url sau /problem/"
-#: judge/models/problem.py:166
+#: judge/models/problem.py:138
msgid "problem name"
msgstr "Tên bài"
-#: judge/models/problem.py:168
+#: judge/models/problem.py:140
msgid "The full name of the problem, as shown in the problem list."
msgstr "Tên đầy đủ của bài, như được hiển thị trên danh sách bài tập"
-#: judge/models/problem.py:170
+#: judge/models/problem.py:142
msgid "problem body"
msgstr "Nội dung"
-#: judge/models/problem.py:173
+#: judge/models/problem.py:145
msgid "creators"
msgstr ""
-#: judge/models/problem.py:177
+#: judge/models/problem.py:149
msgid "These users will be able to edit the problem, and be listed as authors."
msgstr ""
"Những người dùng này sẽ có thể chỉnh sửa bài tập, và nằm trong danh sách các "
"tác giả"
-#: judge/models/problem.py:182
+#: judge/models/problem.py:154
msgid "curators"
msgstr ""
-#: judge/models/problem.py:186
+#: judge/models/problem.py:158
msgid ""
"These users will be able to edit the problem, but not be listed as authors."
msgstr ""
"Những người dùng này sẽ có thể chỉnh sửa bài tập, nhưng không nằm trong danh "
"sách các tác giả"
-#: judge/models/problem.py:192
+#: judge/models/problem.py:164
msgid "testers"
msgstr ""
-#: judge/models/problem.py:196
+#: judge/models/problem.py:168
msgid "These users will be able to view the private problem, but not edit it."
msgstr ""
"Những người dùng này sẽ thấy được bài tập này (dù riêng tư), nhưng không "
"chỉnh sửa được"
-#: judge/models/problem.py:202 judge/models/volunteer.py:29
+#: judge/models/problem.py:174 judge/models/volunteer.py:29
msgid "The type of problem, as shown on the problem's page."
msgstr "Dạng bài, giống như trên trang bài tập"
-#: judge/models/problem.py:208
+#: judge/models/problem.py:180
msgid "The group of problem, shown under Category in the problem list."
msgstr "Nhóm bài, hiện ở mục Nhóm bài trong danh sách bài tập"
-#: judge/models/problem.py:213
+#: judge/models/problem.py:185
msgid ""
"The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) "
"are supported."
@@ -1393,11 +1407,11 @@ msgstr ""
"Giới hạn thời gian cho bài tập này, theo đơn vị giây. Có thể nhập số thực "
"(ví dụ 1.5)"
-#: judge/models/problem.py:222 judge/models/problem.py:629
+#: judge/models/problem.py:194 judge/models/problem.py:601
msgid "memory limit"
msgstr "Giới hạn bộ nhớ"
-#: judge/models/problem.py:224
+#: judge/models/problem.py:196
msgid ""
"The memory limit for this problem, in kilobytes (e.g. 256mb = 262144 "
"kilobytes)."
@@ -1405,7 +1419,7 @@ msgstr ""
"Giới hạn bộ nhớ cho bài này, theo đơn vị kilobytes (ví dụ 256mb = 262144 "
"kilobytes)"
-#: judge/models/problem.py:236
+#: judge/models/problem.py:208
msgid ""
"Points awarded for problem completion. Points are displayed with a 'p' "
"suffix if partial."
@@ -1413,143 +1427,143 @@ msgstr ""
"Điểm thưởng khi hoàn thành bài tập. Điểm có thêm chữ 'p' ở sau cùng nếu như "
"chấp nhận cho điểm thành phần (có điểm ngay khi không đúng toàn bộ test)"
-#: judge/models/problem.py:242
+#: judge/models/problem.py:214
msgid "allows partial points"
msgstr "cho phép điểm thành phần"
-#: judge/models/problem.py:246
+#: judge/models/problem.py:218
msgid "allowed languages"
msgstr "các ngôn ngữ được cho phép"
-#: judge/models/problem.py:247
+#: judge/models/problem.py:219
msgid "List of allowed submission languages."
msgstr "Danh sách các ngôn ngữ lập trình cho phép"
-#: judge/models/problem.py:253
+#: judge/models/problem.py:225
msgid "manually managed"
msgstr ""
-#: judge/models/problem.py:256
+#: judge/models/problem.py:228
msgid "Whether judges should be allowed to manage data or not."
msgstr ""
-#: judge/models/problem.py:259
+#: judge/models/problem.py:231
msgid "date of publishing"
msgstr "Ngày công bố"
-#: judge/models/problem.py:264
+#: judge/models/problem.py:236
msgid ""
"Doesn't have magic ability to auto-publish due to backward compatibility"
msgstr ""
-#: judge/models/problem.py:271
+#: judge/models/problem.py:243
msgid "Bans the selected users from submitting to this problem."
msgstr "Cấm những người dùng được chọn nộp bài tập này."
-#: judge/models/problem.py:278
+#: judge/models/problem.py:250
msgid "The license under which this problem is published."
msgstr "Giấy phép xuất bản bài tập"
-#: judge/models/problem.py:285
+#: judge/models/problem.py:257
msgid "problem summary"
msgstr "Tóm tắt bài tập"
-#: judge/models/problem.py:291
+#: judge/models/problem.py:263
msgid "number of users"
msgstr ""
-#: judge/models/problem.py:293
+#: judge/models/problem.py:265
msgid "The number of users who solved the problem."
msgstr "Số lượng người dùng đã giải được bài"
-#: judge/models/problem.py:295
+#: judge/models/problem.py:267
msgid "solve rate"
msgstr "Tỉ lệ giải đúng"
-#: judge/models/problem.py:304
+#: judge/models/problem.py:276
msgid "If private, only these organizations may see the problem."
msgstr "Nếu bài riêng tư, chỉ những tổ chức này thấy được"
-#: judge/models/problem.py:310
+#: judge/models/problem.py:282
msgid "pdf statement"
msgstr "Đề bài bằng file pdf"
-#: judge/models/problem.py:598 judge/models/problem.py:619
-#: judge/models/problem.py:650 judge/models/runtime.py:161
+#: judge/models/problem.py:570 judge/models/problem.py:591
+#: judge/models/problem.py:622 judge/models/runtime.py:161
msgid "language"
msgstr ""
-#: judge/models/problem.py:601
+#: judge/models/problem.py:573
msgid "translated name"
msgstr ""
-#: judge/models/problem.py:603
+#: judge/models/problem.py:575
msgid "translated description"
msgstr ""
-#: judge/models/problem.py:607
+#: judge/models/problem.py:579
msgid "problem translation"
msgstr ""
-#: judge/models/problem.py:608
+#: judge/models/problem.py:580
msgid "problem translations"
msgstr ""
-#: judge/models/problem.py:638
+#: judge/models/problem.py:610
msgid "language-specific resource limit"
msgstr ""
-#: judge/models/problem.py:639
+#: judge/models/problem.py:611
msgid "language-specific resource limits"
msgstr ""
-#: judge/models/problem.py:652 judge/models/submission.py:246
+#: judge/models/problem.py:624 judge/models/submission.py:244
msgid "source code"
msgstr "mã nguồn"
-#: judge/models/problem.py:656
+#: judge/models/problem.py:628
msgid "language-specific template"
msgstr ""
-#: judge/models/problem.py:657
+#: judge/models/problem.py:629
msgid "language-specific templates"
msgstr ""
-#: judge/models/problem.py:664
+#: judge/models/problem.py:636
msgid "associated problem"
msgstr ""
-#: judge/models/problem.py:670
+#: judge/models/problem.py:642
msgid "publish date"
msgstr ""
-#: judge/models/problem.py:672
+#: judge/models/problem.py:644
msgid "editorial content"
msgstr "nội dung lời giải"
-#: judge/models/problem.py:686
+#: judge/models/problem.py:658
msgid "solution"
msgstr "lời giải"
-#: judge/models/problem.py:687
+#: judge/models/problem.py:659
msgid "solutions"
msgstr "lời giải"
-#: judge/models/problem.py:692
+#: judge/models/problem.py:664
#, fuzzy
#| msgid "point value"
msgid "proposed point value"
msgstr "điểm"
-#: judge/models/problem.py:693
+#: judge/models/problem.py:665
msgid "The amount of points you think this problem deserves."
msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?"
-#: judge/models/problem.py:707
+#: judge/models/problem.py:679
msgid "The time this vote was cast"
msgstr ""
-#: judge/models/problem.py:713
+#: judge/models/problem.py:685
msgid "vote"
msgstr ""
@@ -2142,15 +2156,15 @@ msgstr "Lỗi máy chấm"
msgid "submission time"
msgstr "thời gian bài nộp"
-#: judge/models/submission.py:69 judge/models/submission.py:265
+#: judge/models/submission.py:69 judge/models/submission.py:263
msgid "execution time"
msgstr "thời gian chạy"
-#: judge/models/submission.py:70 judge/models/submission.py:266
+#: judge/models/submission.py:70 judge/models/submission.py:264
msgid "memory usage"
msgstr "bộ nhớ sử dụng"
-#: judge/models/submission.py:72 judge/models/submission.py:267
+#: judge/models/submission.py:72 judge/models/submission.py:265
msgid "points granted"
msgstr "điểm"
@@ -2198,47 +2212,47 @@ msgstr "được chấm lại bởi admin"
msgid "was ran on pretests only"
msgstr "chỉ chấm pretest"
-#: judge/models/submission.py:236 templates/contest/moss.html:58
+#: judge/models/submission.py:234 templates/contest/moss.html:58
msgid "submissions"
msgstr "bài nộp"
-#: judge/models/submission.py:243 judge/models/submission.py:257
+#: judge/models/submission.py:241 judge/models/submission.py:255
msgid "associated submission"
msgstr "bài nộp tương ứng"
-#: judge/models/submission.py:261
+#: judge/models/submission.py:259
msgid "test case ID"
msgstr "test case ID"
-#: judge/models/submission.py:263
+#: judge/models/submission.py:261
msgid "status flag"
msgstr ""
-#: judge/models/submission.py:268
+#: judge/models/submission.py:266
msgid "points possible"
msgstr ""
-#: judge/models/submission.py:269
+#: judge/models/submission.py:267
msgid "batch number"
msgstr "số thứ tự của nhóm"
-#: judge/models/submission.py:271
+#: judge/models/submission.py:269
msgid "judging feedback"
msgstr "phản hồi từ máy chấm"
-#: judge/models/submission.py:274
+#: judge/models/submission.py:272
msgid "extended judging feedback"
msgstr "phản hồi thêm từ máy chấm"
-#: judge/models/submission.py:276
+#: judge/models/submission.py:274
msgid "program output"
msgstr "output chương trình"
-#: judge/models/submission.py:284
+#: judge/models/submission.py:282
msgid "submission test case"
msgstr "cái testcase trong bài nộp"
-#: judge/models/submission.py:285
+#: judge/models/submission.py:283
msgid "submission test cases"
msgstr "cái testcase trong bài nộp"
@@ -2408,11 +2422,11 @@ msgstr "Lỗi"
msgid "Can't pass both queryset and keyword filters"
msgstr ""
-#: judge/utils/pwned.py:102
+#: judge/utils/pwned.py:101
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:103
+#: judge/utils/pwned.py:102
msgid "This password is too common."
msgstr "Mật khẩu này quá phổ biến."
@@ -2447,7 +2461,7 @@ msgstr "%h:%m"
#: judge/views/about.py:10 templates/organization/home.html:38
#: templates/organization/org-right-sidebar.html:70
#: templates/user/user-about.html:83 templates/user/user-tabs.html:4
-#: templates/user/users-table.html:32
+#: templates/user/users-table.html:22
msgid "About"
msgstr "Giới thiệu"
@@ -2455,16 +2469,16 @@ msgstr "Giới thiệu"
msgid "Custom Checker Sample"
msgstr "Hướng dẫn viết trình chấm"
-#: judge/views/blog.py:110
+#: judge/views/blog.py:115
#, python-format
msgid "Page %d of Posts"
msgstr "Trang %d"
-#: judge/views/blog.py:165
+#: judge/views/blog.py:170
msgid "Ticket feed"
msgstr "Báo cáo"
-#: judge/views/blog.py:183
+#: judge/views/blog.py:188
msgid "Comment feed"
msgstr "Bình luận"
@@ -2480,8 +2494,8 @@ msgstr "Bạn phải giải ít nhất 1 bài trước khi được vote."
msgid "You already voted."
msgstr "Bạn đã vote."
-#: judge/views/comment.py:155 judge/views/organization.py:814
-#: judge/views/organization.py:960 judge/views/organization.py:1125
+#: judge/views/comment.py:155 judge/views/organization.py:819
+#: judge/views/organization.py:965 judge/views/organization.py:1130
msgid "Edited from site"
msgstr "Chỉnh sửa từ web"
@@ -2489,17 +2503,17 @@ msgstr "Chỉnh sửa từ web"
msgid "Editing comment"
msgstr "Chỉnh sửa bình luận"
-#: judge/views/contests.py:115 judge/views/contests.py:364
+#: judge/views/contests.py:116 judge/views/contests.py:364
#: judge/views/contests.py:369 judge/views/contests.py:610
msgid "No such contest"
msgstr "Không có contest nào như vậy"
-#: judge/views/contests.py:116 judge/views/contests.py:365
+#: judge/views/contests.py:117 judge/views/contests.py:365
#, 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:135 judge/views/stats.py:178
+#: judge/views/contests.py:136 judge/views/stats.py:178
#: templates/organization/org-left-sidebar.html:5 templates/stats/site.html:21
msgid "Contests"
msgstr "Kỳ thi"
@@ -2659,91 +2673,91 @@ msgstr "Runtimes"
msgid "Notifications (%d unseen)"
msgstr "Thông báo (%d chưa xem)"
-#: judge/views/organization.py:142 judge/views/organization.py:148
+#: judge/views/organization.py:141 judge/views/organization.py:147
msgid "No such organization"
msgstr "Không có tổ chức như vậy"
-#: judge/views/organization.py:143
+#: judge/views/organization.py:142
#, 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:149
+#: judge/views/organization.py:148
msgid "Could not find such organization."
msgstr ""
-#: judge/views/organization.py:167
+#: judge/views/organization.py:171
msgid "Can't edit organization"
msgstr "Không thể chỉnh sửa tổ chức"
-#: judge/views/organization.py:168
+#: judge/views/organization.py:172
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:180 judge/views/organization.py:324
+#: judge/views/organization.py:184 judge/views/organization.py:329
#, fuzzy
#| msgid "Can't edit organization"
msgid "Can't access organization"
msgstr "Không thể chỉnh sửa tổ chức"
-#: judge/views/organization.py:181 judge/views/organization.py:325
+#: judge/views/organization.py:185 judge/views/organization.py:330
msgid "You are not allowed to access this organization."
msgstr "Bạn không được phép chỉnh sửa tổ chức này."
-#: judge/views/organization.py:239 judge/views/register.py:49
-#: judge/views/stats.py:184 templates/contest/list.html:87
+#: judge/views/organization.py:243 judge/views/register.py:49
+#: judge/views/stats.py:184 templates/contest/list.html:91
#: templates/problem/list-base.html:104 templates/stats/site.html:33
#: templates/user/user-left-sidebar.html:4 templates/user/user-list-tabs.html:6
msgid "Groups"
msgstr "Nhóm"
-#: judge/views/organization.py:331
+#: judge/views/organization.py:336
#, python-format
msgid "%s Members"
msgstr "%s Thành viên"
-#: judge/views/organization.py:470
+#: judge/views/organization.py:475
#, python-brace-format
msgid "All submissions in {0}"
msgstr "Bài nộp trong {0}"
-#: judge/views/organization.py:500 judge/views/organization.py:506
-#: judge/views/organization.py:513
+#: judge/views/organization.py:505 judge/views/organization.py:511
+#: judge/views/organization.py:518
msgid "Joining group"
msgstr "Tham gia nhóm"
-#: judge/views/organization.py:501
+#: judge/views/organization.py:506
msgid "You are already in the group."
msgstr "Bạn đã ở trong nhóm."
-#: judge/views/organization.py:506
+#: judge/views/organization.py:511
msgid "This group is not open."
msgstr "Nhóm này là nhóm kín."
-#: judge/views/organization.py:529
+#: judge/views/organization.py:534
msgid "Leaving group"
msgstr "Rời nhóm"
-#: judge/views/organization.py:530
+#: judge/views/organization.py:535
#, python-format
msgid "You are not in \"%s\"."
msgstr "Bạn không ở trong \"%s\"."
-#: judge/views/organization.py:555
+#: judge/views/organization.py:560
#, python-format
msgid "Request to join %s"
msgstr "Đăng ký tham gia %s"
-#: judge/views/organization.py:586
+#: judge/views/organization.py:591
msgid "Join request detail"
msgstr "Chi tiết đơn đăng ký"
-#: judge/views/organization.py:634
+#: judge/views/organization.py:639
#, python-format
msgid "Managing join requests for %s"
msgstr "Quản lý đơn đăng ký cho %s"
-#: judge/views/organization.py:674
+#: judge/views/organization.py:679
#, python-format
msgid ""
"Your organization can only receive %d more members. You cannot approve %d "
@@ -2752,154 +2766,154 @@ 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:692
+#: judge/views/organization.py:697
#, python-format
msgid "Approved %d user."
msgid_plural "Approved %d users."
msgstr[0] "Đã chấp thuận %d người."
-#: judge/views/organization.py:695
+#: judge/views/organization.py:700
#, python-format
msgid "Rejected %d user."
msgid_plural "Rejected %d users."
msgstr[0] "Đã từ chối %d người."
-#: judge/views/organization.py:735
+#: judge/views/organization.py:740
#, python-format
msgid "Add member for %s"
msgstr "Thêm thành viên cho %s"
-#: judge/views/organization.py:747
+#: judge/views/organization.py:752
#, fuzzy
#| msgid "Edited from site"
msgid "Added members from site"
msgstr "Chỉnh sửa từ web"
-#: judge/views/organization.py:767 judge/views/organization.py:775
+#: judge/views/organization.py:772 judge/views/organization.py:780
msgid "Can't kick user"
msgstr "Không thể đuổi"
-#: judge/views/organization.py:768
+#: judge/views/organization.py:773
msgid "The user you are trying to kick does not exist!"
msgstr ""
-#: judge/views/organization.py:776
+#: judge/views/organization.py:781
#, python-format
msgid "The user you are trying to kick is not in organization: %s."
msgstr ""
-#: judge/views/organization.py:797 judge/views/organization.py:949
+#: judge/views/organization.py:802 judge/views/organization.py:954
#, fuzzy, python-format
#| msgid "Editing %s"
msgid "Edit %s"
msgstr "Đang chỉnh sửa %s"
-#: judge/views/organization.py:825 templates/organization/list.html:59
+#: judge/views/organization.py:830 templates/organization/list.html:59
msgid "Create group"
msgstr "Tạo nhóm"
-#: judge/views/organization.py:840
+#: judge/views/organization.py:845
msgid "Exceeded limit"
msgstr ""
-#: judge/views/organization.py:841
+#: judge/views/organization.py:846
#, python-format
msgid "You created too many groups. You can only create at most %d groups"
msgstr ""
-#: judge/views/organization.py:846 judge/views/organization.py:871
-#: judge/views/organization.py:1015
+#: judge/views/organization.py:851 judge/views/organization.py:876
+#: judge/views/organization.py:1020
msgid "Added from site"
msgstr "Thêm từ web"
-#: judge/views/organization.py:862
+#: judge/views/organization.py:867
#: templates/organization/org-right-sidebar.html:55
msgid "Add contest"
msgstr "Thêm kỳ thi"
-#: judge/views/organization.py:905 judge/views/organization.py:1067
+#: judge/views/organization.py:910 judge/views/organization.py:1072
msgid "Permission denied"
msgstr "Truy cập bị từ chối"
-#: judge/views/organization.py:906
+#: judge/views/organization.py:911
#, fuzzy
#| msgid "You are not allowed to edit this organization."
msgid "You are not allowed to edit this contest"
msgstr "Bạn không được phép chỉnh sửa tổ chức này."
-#: judge/views/organization.py:1004
+#: judge/views/organization.py:1009
#, python-format
msgid "Add blog for %s"
msgstr "Thêm bài đăng cho %s"
-#: judge/views/organization.py:1068
+#: judge/views/organization.py:1073
msgid "Not allowed to edit this blog"
msgstr "Bạn không được phép chỉnh sửa bài đăng này."
-#: judge/views/organization.py:1100
+#: judge/views/organization.py:1105
#, python-format
msgid "Edit blog %s"
msgstr "Chỉnh sửa %s"
-#: judge/views/organization.py:1151
+#: judge/views/organization.py:1156
#, python-format
msgid "Pending blogs in %s"
msgstr "Bài đang đợi duyệt trong %s"
-#: judge/views/problem.py:109
+#: judge/views/problem.py:121
msgid "No such problem"
msgstr "Không có bài nào như vậy"
-#: judge/views/problem.py:110
+#: judge/views/problem.py:122
#, 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:170
+#: judge/views/problem.py:181
#, python-brace-format
msgid "Editorial for {0}"
msgstr "Hướng dẫn cho {0}"
-#: judge/views/problem.py:174
+#: judge/views/problem.py:185
#, python-brace-format
msgid "Editorial for {0}"
msgstr "Hướng dẫn cho {0}"
-#: judge/views/problem.py:424 templates/contest/contest.html:79
+#: judge/views/problem.py:434 templates/contest/contest.html:79
#: templates/organization/org-left-sidebar.html:4
#: templates/user/user-about.html:28 templates/user/user-tabs.html:5
-#: templates/user/users-table.html:29
+#: templates/user/users-table.html:19
msgid "Problems"
msgstr "Bài tập"
-#: judge/views/problem.py:794
+#: judge/views/problem.py:814
msgid "Problem feed"
msgstr "Bài tập"
-#: judge/views/problem.py:1030
+#: judge/views/problem.py:1047
msgid "Banned from submitting"
msgstr "Bị cấm nộp bài"
-#: judge/views/problem.py:1032
+#: judge/views/problem.py:1049
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:1055
+#: judge/views/problem.py:1072
msgid "Too many submissions"
msgstr "Quá nhiều lần nộp"
-#: judge/views/problem.py:1057
+#: judge/views/problem.py:1074
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:1136 judge/views/problem.py:1141
+#: judge/views/problem.py:1153 judge/views/problem.py:1158
#, python-format
msgid "Submit to %(problem)s"
msgstr "Nộp bài cho %(problem)s"
-#: judge/views/problem.py:1164
+#: judge/views/problem.py:1181
msgid "Clone Problem"
msgstr "Nhân bản bài tập"
@@ -2961,34 +2975,34 @@ 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:68
+#: judge/views/ranked_submission.py:69
#, 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:72
+#: judge/views/ranked_submission.py:73
#, 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:84
+#: judge/views/ranked_submission.py:87
#, 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:88
+#: judge/views/ranked_submission.py:91
#, 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:96
+#: judge/views/ranked_submission.py:99
#, 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:103
+#: judge/views/ranked_submission.py:106
#, 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}"
@@ -3055,57 +3069,57 @@ msgstr "Tin nhắn mới"
msgid "Site statistics"
msgstr "Thống kê"
-#: judge/views/status.py:27 templates/submission/list.html:333
+#: judge/views/status.py:26 templates/submission/list.html:333
msgid "Status"
msgstr "Kết quả chấm"
-#: judge/views/status.py:120
+#: judge/views/status.py:119
msgid "Version matrix"
msgstr "Ma trận phiên bản"
-#: judge/views/submission.py:118 judge/views/submission.py:126
+#: judge/views/submission.py:121 judge/views/submission.py:129
#, 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:295 judge/views/submission.py:296
+#: judge/views/submission.py:298 judge/views/submission.py:299
#: templates/problem/problem.html:200
msgid "All submissions"
msgstr "Tất cả bài nộp"
-#: judge/views/submission.py:488
+#: judge/views/submission.py:495
msgid "All my submissions"
msgstr "Tất cả bài nộp của tôi"
-#: judge/views/submission.py:489
+#: judge/views/submission.py:496
#, python-format
msgid "All submissions by %s"
msgstr "Tất cả bài nộp của %s"
-#: judge/views/submission.py:534
+#: judge/views/submission.py:541
#, python-format
msgid "All submissions for %s"
msgstr "Tất cả bài nộp cho %s"
-#: judge/views/submission.py:562
+#: judge/views/submission.py:569
msgid "Must pass a problem"
msgstr "Phải làm được một bài"
-#: judge/views/submission.py:620
+#: judge/views/submission.py:627
#, python-format
msgid "My submissions for %(problem)s"
msgstr "Bài nộp của tôi cho %(problem)s"
-#: judge/views/submission.py:621
+#: judge/views/submission.py:628
#, 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:751
+#: judge/views/submission.py:758
msgid "Must pass a contest"
msgstr "Phải qua một kỳ thi"
-#: judge/views/submission.py:781
+#: judge/views/submission.py:788
#, python-brace-format
msgid ""
"{0}'s submissions for {2} in {0} cho {2} trong {4}"
-#: judge/views/submission.py:793
+#: judge/views/submission.py:800
#, python-brace-format
msgid ""
"{0}'s submissions for problem {2} in {3}"
@@ -3123,7 +3137,7 @@ msgstr ""
"Các bài nộp của {0} cho bài {2} trong {3}"
""
-#: judge/views/submission.py:839
+#: judge/views/submission.py:851
#, fuzzy
#| msgid "You do not have the permission to rejudge submissions."
msgid "You don't have permission to access."
@@ -3214,7 +3228,7 @@ msgid "Updated on site"
msgstr "Được cập nhật trên web"
#: judge/views/user.py:449 templates/admin/auth/user/change_form.html:14
-#: templates/admin/auth/user/change_form.html:17 templates/base.html:285
+#: templates/admin/auth/user/change_form.html:17 templates/base.html:270
#: templates/user/user-tabs.html:10
msgid "Edit profile"
msgstr "Chỉnh sửa thông tin"
@@ -3237,6 +3251,147 @@ msgstr "Dữ liệu không hợp lệ: %s"
msgid "Bad latitude or longitude"
msgstr "Kinh độ / Vĩ độ không hợp lệ"
+#: src/dmoj-wpadmin/test_project/apps/authors/models.py:9
+#, fuzzy
+#| msgid "short name"
+msgid "first name"
+msgstr "tên ngắn"
+
+#: src/dmoj-wpadmin/test_project/apps/authors/models.py:10
+#, fuzzy
+#| msgid "short name"
+msgid "last name"
+msgstr "tên ngắn"
+
+#: src/dmoj-wpadmin/test_project/apps/authors/models.py:11
+msgid "biography"
+msgstr "tiểu sử"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:12
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:12
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:12
+msgid "name"
+msgstr "tên"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:19
+msgid "Category of Books"
+msgstr "Thể loại sách"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:20
+msgid "Categories of Books"
+msgstr "Thể loại sách"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:26
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:26
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:26
+msgid "title"
+msgstr "tiêu đề"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:29
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:29
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:29
+msgid "author"
+msgstr "tác giả"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:31
+msgid "publication date"
+msgstr "ngày xuất bản"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:37
+msgid "Book"
+msgstr "Sách"
+
+#: src/dmoj-wpadmin/test_project/apps/books/models.py:38
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:136
+msgid "Books"
+msgstr "Sách"
+
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:19
+msgid "Category of CDs"
+msgstr "Thể loại CDs"
+
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:20
+msgid "Categories of CDs"
+msgstr "Thể loại CDs"
+
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:36
+msgid "CD"
+msgstr ""
+
+#: src/dmoj-wpadmin/test_project/apps/cds/models.py:37
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:141
+msgid "CDs"
+msgstr ""
+
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:19
+msgid "Category of DVDs"
+msgstr "Thể loại DVDs"
+
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:20
+msgid "Categories of DVDs"
+msgstr "Thể loại DVDs"
+
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:36
+msgid "DVD"
+msgstr ""
+
+#: src/dmoj-wpadmin/test_project/apps/dvds/models.py:37
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:146
+msgid "DVDs"
+msgstr ""
+
+#: src/dmoj-wpadmin/test_project/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Quản trị viên Django"
+
+#: src/dmoj-wpadmin/test_project/test_project/forms.py:12
+#, python-format
+msgid ""
+"Please enter the correct %(username)s and password for an admin account. "
+"Note that both fields may be case-sensitive."
+msgstr ""
+"Hãy nhập %(username)s và mật khẩu hợp lệ cho tài khoản quản trị. Chú ý cả "
+"hai trường có phân biệt chữ Hoa-thường."
+
+#: src/dmoj-wpadmin/test_project/test_project/forms.py:32
+#, python-format
+msgid ""
+"Please enter the correct %(username)s and password for an user account. Note "
+"that both fields may be case-sensitive."
+msgstr ""
+"Hãy nhập %(username)s và mật khẩu hợp lệ cho tài khoản thành viên. Chú ý cả "
+"hai trường có phân biệt chữ Hoa-thường."
+
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:27
+#: templates/stats/tab.html:5
+msgid "Site"
+msgstr "Trang"
+
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:38
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:41
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:130
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:133
+msgid "Dashboard"
+msgstr "Bảng điều khiển"
+
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:48
+msgid "Applications"
+msgstr "Ứng dụng"
+
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:53
+#, fuzzy
+#| msgid "administrators"
+msgid "Administration"
+msgstr "người quản lý"
+
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:64
+msgid "Color theme"
+msgstr "Chủ đề màu sắc"
+
+#: src/dmoj-wpadmin/test_project/test_project/wp.py:66
+msgid "Change color theme"
+msgstr "Đổi chủ đề màu sắc"
+
#: templates/admin/judge/contest/change_form.html:9
msgid "Are you sure you want to rejudge ALL the submissions?"
msgstr "Bạn có muốn chấm lại tất cả bài nộp?"
@@ -3285,22 +3440,26 @@ msgstr "Chỉnh sửa thông tin"
msgid "Rejudge"
msgstr "Chấm lại"
-#: templates/base.html:234 templates/chat/chat.html:586
+#: templates/base.html:219 templates/chat/chat.html:579
msgid "Chat"
msgstr "Chat"
-#: templates/base.html:244
+#: templates/base.html:229
msgid "Notification"
msgstr "Thông báo"
-#: templates/base.html:273
+#: templates/base.html:257
#, python-format
msgid "Hello, %(username)s."
msgstr "Xin chào, %(username)s."
-#: templates/base.html:279 templates/chat/chat.html:20
+#: templates/base.html:262
+msgid "Profile"
+msgstr "Trang cá nhân"
+
+#: templates/base.html:264 templates/chat/chat.html:20
#: templates/comments/list.html:89 templates/contest/contest-list-tabs.html:24
-#: templates/contest/list.html:108 templates/contest/ranking-table.html:49
+#: templates/contest/list.html:112 templates/contest/ranking-table.html:49
#: templates/internal/base.html:59
#: templates/organization/org-left-sidebar.html:12
#: templates/problem/left-sidebar.html:5 templates/problem/list-base.html:261
@@ -3308,50 +3467,46 @@ msgstr "Xin chào, %(username)s."
#: templates/submission/info-base.html:12 templates/submission/list.html:386
#: templates/submission/submission-list-tabs.html:15
msgid "Admin"
-msgstr ""
+msgstr "Admin"
-#: templates/base.html:282
-#, fuzzy
-#| msgid "Internal Error"
+#: templates/base.html:267
msgid "Internal"
-msgstr "Internal Error"
+msgstr "Nội bộ"
-#: templates/base.html:283
-#, fuzzy
-#| msgid "Status"
+#: templates/base.html:268
msgid "Stats"
-msgstr "Kết quả chấm"
+msgstr "Thống kê"
-#: templates/base.html:292
+#: templates/base.html:275
msgid "Log out"
msgstr "Đăng xuất"
-#: templates/base.html:301
+#: templates/base.html:285
#: templates/registration/password_reset_complete.html:4
msgid "Log in"
msgstr "Đăng nhập"
-#: templates/base.html:302 templates/registration/registration_form.html:177
+#: templates/base.html:286 templates/registration/registration_form.html:177
msgid "or"
msgstr "hoặc"
-#: templates/base.html:303
+#: templates/base.html:287
msgid "Sign up"
msgstr "Đăng ký"
-#: templates/base.html:319
+#: templates/base.html:300
msgid "spectating"
msgstr "đang theo dõi"
-#: templates/base.html:331
+#: templates/base.html:312
msgid "Compete"
msgstr "Thi"
-#: templates/base.html:333
+#: templates/base.html:314
msgid "General"
msgstr "Chung"
-#: templates/base.html:340
+#: templates/base.html:321
msgid "This site works best with JavaScript enabled."
msgstr ""
@@ -3362,7 +3517,7 @@ msgstr "đã đăng vào %(time)s"
#: templates/blog/blog.html:30 templates/comments/list.html:68
#: templates/comments/list.html:83 templates/contest/contest-tabs.html:23
-#: templates/contest/list.html:126 templates/contest/tag-title.html:9
+#: templates/contest/list.html:130 templates/contest/tag-title.html:9
#: templates/flatpages/admin_link.html:3 templates/license.html:10
#: templates/problem/editorial.html:14 templates/problem/feed.html:68
msgid "Edit"
@@ -3425,30 +3580,30 @@ msgstr "Bạn bè"
msgid "Other"
msgstr "Thành viên khác"
-#: templates/chat/chat.html:173
+#: templates/chat/chat.html:171
msgid "New message(s)"
msgstr "Tin nhắn mới"
-#: templates/chat/chat.html:527 templates/chat/chat.html:608
+#: templates/chat/chat.html:520 templates/chat/chat.html:601
#: templates/user/base-users-js.html:10
#: templates/user/base-users-three-col.html:21
#: templates/user/base-users.html:21
msgid "Search by handle..."
msgstr "Tìm kiếm theo tên..."
-#: templates/chat/chat.html:588 templates/chat/chat.html:595
+#: templates/chat/chat.html:581 templates/chat/chat.html:588
msgid "Online Users"
msgstr "Trực tuyến"
-#: templates/chat/chat.html:596
+#: templates/chat/chat.html:589
msgid "Refresh"
msgstr "Làm mới"
-#: templates/chat/chat.html:629
+#: templates/chat/chat.html:622
msgid "Emoji"
msgstr ""
-#: templates/chat/chat.html:630
+#: templates/chat/chat.html:623
msgid "Enter your message"
msgstr "Nhập tin nhắn"
@@ -3603,7 +3758,7 @@ msgstr "Thứ sáu"
msgid "Saturday"
msgstr "Thứ bảy"
-#: templates/contest/clarification.html:52 templates/contest/list.html:225
+#: templates/contest/clarification.html:52 templates/contest/list.html:229
#: templates/organization/new.html:10 templates/ticket/new.html:38
msgid "Create"
msgstr "Tạo mới"
@@ -3628,13 +3783,13 @@ msgstr "Hôm nay"
msgid "Next"
msgstr "Tiếp"
-#: templates/contest/contest-list-tabs.html:21 templates/contest/list.html:106
+#: templates/contest/contest-list-tabs.html:21 templates/contest/list.html:110
#: templates/problem/left-sidebar.html:4 templates/problem/list-base.html:260
#: templates/problem/problem-list-tabs.html:5
msgid "List"
msgstr "Danh sách"
-#: templates/contest/contest-list-tabs.html:22 templates/contest/list.html:107
+#: templates/contest/contest-list-tabs.html:22 templates/contest/list.html:111
msgid "Calendar"
msgstr "Lịch"
@@ -3667,7 +3822,7 @@ msgstr "Nhân bản"
msgid "Leave contest"
msgstr "Rời kỳ thi"
-#: templates/contest/contest-tabs.html:45 templates/contest/list.html:395
+#: templates/contest/contest-tabs.html:45 templates/contest/list.html:399
msgid "Virtual join"
msgstr "Tham gia ảo"
@@ -3747,8 +3902,8 @@ msgstr "Kéo dài %(length)s bắt đầu từ %(start_time)s"
msgid "AC Rate"
msgstr "Tỷ lệ AC"
-#: templates/contest/contest.html:86 templates/contest/list.html:238
-#: templates/contest/list.html:287 templates/contest/list.html:372
+#: templates/contest/contest.html:86 templates/contest/list.html:242
+#: templates/contest/list.html:291 templates/contest/list.html:376
#: templates/problem/list.html:21
msgid "Users"
msgstr "Số lượng"
@@ -3758,11 +3913,11 @@ msgstr "Số lượng"
msgid "Editorial"
msgstr "Hướng dẫn"
-#: templates/contest/list.html:83 templates/contest/media-js.html:150
+#: templates/contest/list.html:87 templates/contest/media-js.html:150
msgid "Are you sure you want to join?"
msgstr "Bạn có chắc tham gia?"
-#: templates/contest/list.html:84
+#: templates/contest/list.html:88
msgid ""
"Joining a contest for the first time starts your timer, after which it "
"becomes unstoppable."
@@ -3770,76 +3925,76 @@ msgstr ""
"Tham gia kỳ thi lần đầu sẽ kích hoạt thời gian đếm ngược, không thể dừng lại "
"sau đó."
-#: templates/contest/list.html:120
+#: templates/contest/list.html:124
msgid "hidden"
msgstr "ẩn"
-#: templates/contest/list.html:132
+#: templates/contest/list.html:136
msgid "private"
msgstr "riêng tư"
-#: templates/contest/list.html:148
+#: templates/contest/list.html:152
msgid "rated"
msgstr "rated"
-#: templates/contest/list.html:174
+#: templates/contest/list.html:178
#, python-format
msgid "%(time_limit)s window"
msgstr "Cửa sổ thi dài %(time_limit)s"
-#: templates/contest/list.html:176
+#: templates/contest/list.html:180
#, python-format
msgid "%(duration)s long"
msgstr "Kéo dài %(duration)s"
-#: templates/contest/list.html:196
+#: templates/contest/list.html:200
msgid "Spectate"
msgstr "Theo dõi"
-#: templates/contest/list.html:202 templates/organization/home.html:16
+#: templates/contest/list.html:206 templates/organization/home.html:16
msgid "Join"
msgstr "Tham gia"
-#: templates/contest/list.html:213
+#: templates/contest/list.html:217
msgid "Search contests..."
msgstr "Tìm kiếm kỳ thi..."
-#: templates/contest/list.html:223
+#: templates/contest/list.html:227
msgid "Search"
msgstr "Tìm kiếm"
-#: templates/contest/list.html:231
+#: templates/contest/list.html:235
msgid "Active Contests"
msgstr "Kỳ thi bạn đang tham gia"
-#: templates/contest/list.html:237 templates/contest/list.html:286
-#: templates/contest/list.html:329 templates/contest/list.html:369
+#: templates/contest/list.html:241 templates/contest/list.html:290
+#: templates/contest/list.html:333 templates/contest/list.html:373
msgid "Contest"
msgstr "Kỳ thi"
-#: templates/contest/list.html:255
+#: templates/contest/list.html:259
#, python-format
msgid "Window ends in %(countdown)s"
msgstr "Cửa số thi còn %(countdown)s"
-#: templates/contest/list.html:258 templates/contest/list.html:302
+#: templates/contest/list.html:262 templates/contest/list.html:306
#, python-format
msgid "Ends in %(countdown)s"
msgstr "Kết thúc trong %(countdown)s"
-#: templates/contest/list.html:280
+#: templates/contest/list.html:284
msgid "Ongoing Contests"
msgstr "Kỳ thi đang diễn ra"
-#: templates/contest/list.html:322
+#: templates/contest/list.html:326
msgid "Upcoming Contests"
msgstr "Kỳ thi sắp tới"
-#: templates/contest/list.html:353
+#: templates/contest/list.html:357
msgid "There are no scheduled contests at this time."
msgstr "Không có kỳ thi nào được lên lịch hiện tại."
-#: templates/contest/list.html:359
+#: templates/contest/list.html:363
msgid "Past Contests"
msgstr "Kỳ thi trong quá khứ"
@@ -4583,21 +4738,21 @@ msgstr "Thời gian:"
msgid "Memory limit:"
msgstr "Bộ nhớ:"
-#: templates/problem/problem.html:276 templates/problem/raw.html:64
+#: templates/problem/problem.html:276 templates/problem/raw.html:67
#: templates/submission/status-testcases.html:157
msgid "Input:"
msgstr "Input:"
-#: templates/problem/problem.html:278 templates/problem/raw.html:64
+#: templates/problem/problem.html:278 templates/problem/raw.html:67
msgid "stdin"
msgstr "bàn phím"
-#: templates/problem/problem.html:282 templates/problem/raw.html:67
+#: templates/problem/problem.html:282 templates/problem/raw.html:70
#: templates/submission/status-testcases.html:161
msgid "Output:"
msgstr "Output:"
-#: templates/problem/problem.html:283 templates/problem/raw.html:67
+#: templates/problem/problem.html:283 templates/problem/raw.html:70
msgid "stdout"
msgstr "màn hình"
@@ -4646,11 +4801,11 @@ msgstr "Xem bình luận"
msgid "Be the first to comment"
msgstr "Bình luận đầu tiên"
-#: templates/problem/raw.html:70
+#: templates/problem/raw.html:73
msgid "Time Limit:"
msgstr "Giới hạn thời gian:"
-#: templates/problem/raw.html:79
+#: templates/problem/raw.html:82
msgid "Memory Limit:"
msgstr "Giới hạn bộ nhớ:"
@@ -4749,7 +4904,7 @@ msgstr "Không có máy chấm có thể chấm bài này."
msgid "Submit!"
msgstr "Nộp bài!"
-#: templates/recent-organization.html:30
+#: templates/recent-organization.html:31
msgid "Recent groups"
msgstr "Nhóm gần đây"
@@ -4935,10 +5090,6 @@ msgstr "Thống kê"
msgid "AC Submissions by Language"
msgstr "Thống kê AC theo ngôn ngữ"
-#: templates/stats/tab.html:5
-msgid "Site"
-msgstr "Trang"
-
#: templates/status/judge-status-table.html:4
msgid "Online"
msgstr "Trực tuyến"
@@ -5532,7 +5683,6 @@ msgstr "Thông tin"
msgid "Check all"
msgstr "Chọn tất cả"
-#, python-format
#~ msgid "Edit in %(org_slug)s"
#~ msgstr "Chỉnh sửa trong %(org_slug)s"
@@ -5545,89 +5695,6 @@ msgstr "Chọn tất cả"
#~ msgid "It takes some time for admin to approve"
#~ msgstr "Ban quản trị sẽ phê duyệt"
-#, fuzzy
-#~| msgid "short name"
-#~ msgid "first name"
-#~ msgstr "tên ngắn"
-
-#, fuzzy
-#~| msgid "short name"
-#~ msgid "last name"
-#~ msgstr "tên ngắn"
-
-#~ msgid "biography"
-#~ msgstr "tiểu sử"
-
-#~ msgid "name"
-#~ msgstr "tên"
-
-#~ msgid "Category of Books"
-#~ msgstr "Thể loại sách"
-
-#~ msgid "Categories of Books"
-#~ msgstr "Thể loại sách"
-
-#~ msgid "title"
-#~ msgstr "tiêu đề"
-
-#~ msgid "author"
-#~ msgstr "tác giả"
-
-#~ msgid "publication date"
-#~ msgstr "ngày xuất bản"
-
-#~ msgid "Book"
-#~ msgstr "Sách"
-
-#~ msgid "Books"
-#~ msgstr "Sách"
-
-#~ msgid "Category of CDs"
-#~ msgstr "Thể loại CDs"
-
-#~ msgid "Categories of CDs"
-#~ msgstr "Thể loại CDs"
-
-#~ msgid "Category of DVDs"
-#~ msgstr "Thể loại DVDs"
-
-#~ msgid "Categories of DVDs"
-#~ msgstr "Thể loại DVDs"
-
-#~ msgid "Django administration"
-#~ msgstr "Quản trị viên Django"
-
-#~ msgid ""
-#~ "Please enter the correct %(username)s and password for an admin account. "
-#~ "Note that both fields may be case-sensitive."
-#~ msgstr ""
-#~ "Hãy nhập %(username)s và mật khẩu hợp lệ cho tài khoản quản trị. Chú ý cả "
-#~ "hai trường có phân biệt chữ Hoa-thường."
-
-#~ msgid ""
-#~ "Please enter the correct %(username)s and password for an user account. "
-#~ "Note that both fields may be case-sensitive."
-#~ msgstr ""
-#~ "Hãy nhập %(username)s và mật khẩu hợp lệ cho tài khoản thành viên. Chú ý "
-#~ "cả hai trường có phân biệt chữ Hoa-thường."
-
-#~ msgid "Dashboard"
-#~ msgstr "Bảng điều khiển"
-
-#~ msgid "Applications"
-#~ msgstr "Ứng dụng"
-
-#, fuzzy
-#~| msgid "administrators"
-#~ msgid "Administration"
-#~ msgstr "người quản lý"
-
-#~ msgid "Color theme"
-#~ msgstr "Chủ đề màu sắc"
-
-#~ msgid "Change color theme"
-#~ msgstr "Đổi chủ đề màu sắc"
-
#~ msgid "Show"
#~ msgstr "Hiển thị"
diff --git a/resources/base.scss b/resources/base.scss
index 3ebe3da..752c749 100644
--- a/resources/base.scss
+++ b/resources/base.scss
@@ -183,10 +183,6 @@ header {
white-space: nowrap;
}
- a {
- color: lightcoral;
- }
-
li {
text-transform: none;
}
@@ -196,7 +192,6 @@ header {
margin: 0;
& > li > a > span {
- font-size: 13px;
height: 36px;
padding-top: 8px;
display: block;
@@ -210,7 +205,6 @@ header {
}
& > span {
- color: darkslateblue;
vertical-align: middle;
display: inline;
margin-top: 11px;
@@ -239,6 +233,7 @@ header {
top: 0;
left: 0;
right: 0;
+ height: 48px;
}
nav {
@@ -317,24 +312,20 @@ nav {
left: 5px;
display: none;
color: #fff;
- background: darkcyan;
+ background: white;
margin: 0 !important;
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);
- li {
- &:first-child {
- a.active {
- border-top: 1px solid $widget_black;
- background-color: darkcyan !important;
- }
- }
- }
li {
+ &:hover {
+ background: lightgray;
+ }
+
display: block;
a {
- color: white !important;
+ color: black !important;
}
a, button {
@@ -545,6 +536,7 @@ noscript #noscript {
#user-links {
height: 100%;
+ padding-right: 1em;
ul {
margin: 0;
@@ -729,32 +721,37 @@ math {
#nav-lang-icon:hover {
color: darkblue;
}
-#lang-dropdown {
- padding: 4px 0;
+.dropdown {
border-radius: 4px;
border: 0.5px solid lightgray;
margin-top: 1px;
background: white;
display: none;
+
+ a {
+ color: black;
+ }
}
-.lang-dropdown-item {
- padding-bottom: 0.3em;
- padding-left: 0.4em;
- font-size: 0.9em;
+.dropdown-item {
+ font-size: 15px;
+ padding: 6px 8px;
cursor: pointer;
}
-.lang-dropdown-item:hover {
+.dropdown-item:hover {
background: lightgray;
}
.navbar-icons {
+ display: inline-flex;
+ align-items: center;
+ float: left;
+ margin-right: 0.3em;
+
.navbar-icon {
font-size: 1.6em;
}
- float: left;
- margin-right: 0.3em;
}
.navbar-icon {
margin-right: 0.3em;
@@ -826,13 +823,16 @@ math {
}
@media (max-width: 799px) {
- .navbar-icons {
- margin-top: 6px;
+ #user-links, .anon {
+ padding-right: 0.5em;
}
}
@media (min-width: 800px) {
+ .anon {
+ padding-right: 1em;
+ }
.navbar-icons {
- margin-top: 12px;
+ margin-top: 6px;
}
}
diff --git a/resources/common.js b/resources/common.js
index 6100cb5..f0b21f0 100644
--- a/resources/common.js
+++ b/resources/common.js
@@ -385,3 +385,28 @@ $(function () {
handler();
});
});
+
+function registerPopper($trigger, $dropdown) {
+ const popper = Popper.createPopper($trigger[0], $dropdown[0]);
+ $trigger.click(function(e) {
+ $dropdown.toggle();
+ popper.update();
+ });
+
+ $(document).on("click touchend", function(e) {
+ var target = $(e.target);
+ if (target.closest($trigger).length === 0 && target.closest($dropdown).length === 0) {
+ $dropdown.hide();
+ }
+ })
+}
+
+$(function() {
+ registerPopper($('#nav-lang-icon'), $('#lang-dropdown'));
+ registerPopper($('#user-links'), $('#userlink_dropdown'));
+ $('.lang-dropdown-item').click(function() {
+ $('select[name="language"]').val($(this).attr('value'));
+ $('#form-lang').submit();
+ })
+ $('#logout').on('click', () => $('#logout-form').submit());
+});
diff --git a/templates/base.html b/templates/base.html
index 9774695..033340c 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -174,21 +174,6 @@
{% endif %}
-
-