Rename problem data fields

This commit is contained in:
cuom1999 2024-03-18 23:53:35 -05:00
parent acdf94a8c9
commit 5e72b472e6
8 changed files with 277 additions and 170 deletions

View file

@ -0,0 +1,75 @@
# Generated by Django 3.2.18 on 2024-03-19 04:28
from django.db import migrations, models
def migrate_checker(apps, schema_editor):
ProblemData = apps.get_model("judge", "ProblemData")
ProblemTestCase = apps.get_model("judge", "ProblemTestCase")
for p in ProblemData.objects.all():
if p.checker == "customval":
p.checker = "customcpp"
p.save()
for p in ProblemTestCase.objects.all():
if p.checker == "customval":
p.checker = "customcpp"
p.save()
class Migration(migrations.Migration):
dependencies = [
("judge", "0181_remove_math_engine"),
]
operations = [
migrations.RunPython(migrate_checker, migrations.RunPython.noop, atomic=True),
migrations.AlterField(
model_name="problemdata",
name="checker",
field=models.CharField(
blank=True,
choices=[
("standard", "Standard"),
("floats", "Floats"),
("floatsabs", "Floats (absolute)"),
("floatsrel", "Floats (relative)"),
("rstripped", "Non-trailing spaces"),
("sorted", "Unordered"),
("identical", "Byte identical"),
("linecount", "Line-by-line"),
("custom", "Custom checker (PY)"),
("customcpp", "Custom checker (CPP)"),
("interact", "Interactive"),
("testlib", "Testlib"),
],
max_length=10,
verbose_name="checker",
),
),
migrations.AlterField(
model_name="problemtestcase",
name="checker",
field=models.CharField(
blank=True,
choices=[
("standard", "Standard"),
("floats", "Floats"),
("floatsabs", "Floats (absolute)"),
("floatsrel", "Floats (relative)"),
("rstripped", "Non-trailing spaces"),
("sorted", "Unordered"),
("identical", "Byte identical"),
("linecount", "Line-by-line"),
("custom", "Custom checker (PY)"),
("customcpp", "Custom checker (CPP)"),
("interact", "Interactive"),
("testlib", "Testlib"),
],
max_length=10,
verbose_name="checker",
),
),
]

View file

@ -0,0 +1,45 @@
# Generated by Django 3.2.18 on 2024-03-19 04:45
import django.core.validators
from django.db import migrations, models
import judge.models.problem_data
import judge.utils.problem_data
def migrate_checker(apps, schema_editor):
ProblemData = apps.get_model("judge", "ProblemData")
for p in ProblemData.objects.all():
p.custom_checker_cpp = p.custom_validator
p.save()
class Migration(migrations.Migration):
dependencies = [
("judge", "0182_rename_customcpp"),
]
operations = [
migrations.AddField(
model_name="problemdata",
name="custom_checker_cpp",
field=models.FileField(
blank=True,
null=True,
storage=judge.utils.problem_data.ProblemDataStorage(),
upload_to=judge.models.problem_data.problem_directory_file,
validators=[
django.core.validators.FileExtensionValidator(
allowed_extensions=["cpp"]
)
],
verbose_name="custom cpp checker file",
),
),
migrations.RunPython(migrate_checker, migrations.RunPython.noop, atomic=True),
migrations.RemoveField(
model_name="problemdata",
name="custom_validator",
),
]

View file

@ -38,7 +38,7 @@ CHECKERS = (
("identical", _("Byte identical")),
("linecount", _("Line-by-line")),
("custom", _("Custom checker (PY)")),
("customval", _("Custom validator (CPP)")),
("customcpp", _("Custom checker (CPP)")),
("interact", _("Interactive")),
("testlib", _("Testlib")),
)
@ -90,8 +90,8 @@ class ProblemData(models.Model):
upload_to=problem_directory_file,
validators=[FileExtensionValidator(allowed_extensions=["py"])],
)
custom_validator = models.FileField(
verbose_name=_("custom validator file"),
custom_checker_cpp = models.FileField(
verbose_name=_("custom cpp checker file"),
storage=problem_data_storage,
null=True,
blank=True,
@ -186,9 +186,9 @@ class ProblemData(models.Model):
self.custom_checker.name = problem_directory_file_helper(
new, self.custom_checker.name
)
if self.custom_validator:
self.custom_validator.name = problem_directory_file_helper(
new, self.custom_validator.name
if self.custom_checker_cpp:
self.custom_checker_cpp.name = problem_directory_file_helper(
new, self.custom_checker_cpp.name
)
if self.interactive_judge:
self.interactive_judge.name = problem_directory_file_helper(

View file

@ -82,8 +82,8 @@ class ProblemDataCompiler(object):
)
return custom_checker_path[1]
if case.checker == "customval":
custom_checker_path = split_path_first(case.custom_validator.name)
if case.checker == "customcpp":
custom_checker_path = split_path_first(case.custom_checker_cpp.name)
if len(custom_checker_path) != 2:
raise ProblemDataError(
_("How did you corrupt the custom checker path?")
@ -98,7 +98,7 @@ class ProblemDataCompiler(object):
}
if case.checker == "testlib":
custom_checker_path = split_path_first(case.custom_validator.name)
custom_checker_path = split_path_first(case.custom_checker_cpp.name)
if len(custom_checker_path) != 2:
raise ProblemDataError(
_("How did you corrupt the custom checker path?")

View file

@ -89,7 +89,7 @@ class ProblemDataForm(ModelForm):
"checker",
"checker_args",
"custom_checker",
"custom_validator",
"custom_checker_cpp",
"interactive_judge",
"fileio_input",
"fileio_output",

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lqdoj2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-27 03:20+0700\n"
"POT-Creation-Date: 2024-03-19 11:51+0700\n"
"PO-Revision-Date: 2021-07-20 03:44\n"
"Last-Translator: Icyene\n"
"Language-Team: Vietnamese\n"
@ -25,7 +25,7 @@ msgstr "xem lần cuối"
#: chat_box/models.py:54 chat_box/models.py:79 chat_box/models.py:95
#: judge/admin/interface.py:150 judge/models/contest.py:647
#: judge/models/contest.py:853 judge/models/course.py:129
#: judge/models/profile.py:419 judge/models/profile.py:493
#: judge/models/profile.py:412 judge/models/profile.py:486
msgid "user"
msgstr "người dùng"
@ -59,11 +59,11 @@ msgstr "Gần đây"
msgid "Admin"
msgstr "Admin"
#: dmoj/settings.py:367
#: dmoj/settings.py:366
msgid "Vietnamese"
msgstr "Tiếng Việt"
#: dmoj/settings.py:368
#: dmoj/settings.py:367
msgid "English"
msgstr ""
@ -153,7 +153,7 @@ msgstr ""
msgid "Access"
msgstr "Truy cập"
#: judge/admin/contest.py:212 judge/admin/problem.py:220
#: judge/admin/contest.py:212 judge/admin/problem.py:233
msgid "Justice"
msgstr "Xử phạt"
@ -225,28 +225,34 @@ msgstr ""
msgid "diff"
msgstr ""
#: judge/admin/organization.py:61 judge/admin/problem.py:277
#: judge/admin/profile.py:116
#: judge/admin/organization.py:61 judge/admin/problem.py:290
#: judge/admin/profile.py:115
msgid "View on site"
msgstr "Xem trên trang"
#: judge/admin/problem.py:55
#: judge/admin/problem.py:56
msgid "Describe the changes you made (optional)"
msgstr "Mô tả các thay đổi (tùy chọn)"
#: judge/admin/problem.py:111
#: judge/admin/problem.py:66
#, fuzzy
#| msgid "Problem with code already exists."
msgid "A problem with this code already exists."
msgstr "Mã bài đã tồn tại."
#: judge/admin/problem.py:122
msgid "Memory unit"
msgstr "Đơn vị bộ nhớ"
#: judge/admin/problem.py:213
#: judge/admin/problem.py:226
msgid "Social Media"
msgstr "Mạng Xã Hội"
#: judge/admin/problem.py:216
#: judge/admin/problem.py:229
msgid "Taxonomy"
msgstr ""
#: judge/admin/problem.py:217 judge/admin/problem.py:450
#: judge/admin/problem.py:230 judge/admin/problem.py:463
#: templates/contest/contest.html:121
#: templates/contest/contests_summary.html:41 templates/problem/data.html:533
#: templates/problem/list.html:22 templates/problem/list.html:48
@ -255,66 +261,66 @@ msgstr ""
msgid "Points"
msgstr "Điểm"
#: judge/admin/problem.py:218
#: judge/admin/problem.py:231
msgid "Limits"
msgstr "Giới hạn"
#: judge/admin/problem.py:219 judge/admin/submission.py:351
#: judge/admin/problem.py:232 judge/admin/submission.py:351
#: templates/base.html:158 templates/stats/tab.html:4
#: templates/submission/list.html:346
msgid "Language"
msgstr "Ngôn ngữ"
#: judge/admin/problem.py:221
#: judge/admin/problem.py:234
msgid "History"
msgstr "Lịch sử"
#: judge/admin/problem.py:273 templates/problem/list-base.html:95
#: judge/admin/problem.py:286 templates/problem/list-base.html:95
msgid "Authors"
msgstr "Các tác giả"
#: judge/admin/problem.py:294
#: judge/admin/problem.py:307
#, 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:301
#: judge/admin/problem.py:314
msgid "Mark problems as public"
msgstr "Công khai bài tập"
#: judge/admin/problem.py:310
#: judge/admin/problem.py:323
#, 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:317
#: judge/admin/problem.py:330
msgid "Mark problems as private"
msgstr "Đánh dấu các bài tập là riêng tư"
#: judge/admin/problem.py:444 judge/admin/submission.py:314
#: judge/admin/problem.py:457 judge/admin/submission.py:314
#: templates/problem/list.html:18 templates/problem/list.html:37
msgid "Problem code"
msgstr "Mã bài"
#: judge/admin/problem.py:456 judge/admin/submission.py:320
#: judge/admin/problem.py:469 judge/admin/submission.py:320
msgid "Problem name"
msgstr "Tên bài"
#: judge/admin/problem.py:462
#: judge/admin/problem.py:475
#, fuzzy
#| msgid "contest rating"
msgid "Voter rating"
msgstr "rating kỳ thi"
#: judge/admin/problem.py:468
#: judge/admin/problem.py:481
#, fuzzy
#| msgid "Total points"
msgid "Voter point"
msgstr "Tổng điểm"
#: judge/admin/problem.py:474
#: judge/admin/problem.py:487
msgid "Vote"
msgstr ""
@ -322,7 +328,7 @@ msgstr ""
msgid "timezone"
msgstr "múi giờ"
#: judge/admin/profile.py:125 judge/admin/submission.py:327
#: judge/admin/profile.py:124 judge/admin/submission.py:327
#: templates/notification/list.html:9
#: templates/organization/requests/log.html:9
#: templates/organization/requests/pending.html:19
@ -330,28 +336,28 @@ msgstr "múi giờ"
msgid "User"
msgstr "Thành viên"
#: judge/admin/profile.py:131 templates/registration/registration_form.html:40
#: judge/admin/profile.py:130 templates/registration/registration_form.html:40
#: templates/user/edit-profile.html:109 templates/user/import/table_csv.html:8
msgid "Email"
msgstr "Email"
#: judge/admin/profile.py:137 judge/views/register.py:36
#: judge/admin/profile.py:136 judge/views/register.py:36
#: templates/registration/registration_form.html:68
#: templates/user/edit-profile.html:133
msgid "Timezone"
msgstr "Múi giờ"
#: judge/admin/profile.py:143
#: judge/admin/profile.py:142
msgid "date joined"
msgstr "ngày tham gia"
#: judge/admin/profile.py:153
#: judge/admin/profile.py:152
#, 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:160
#: judge/admin/profile.py:159
msgid "Recalculate scores"
msgstr "Tính điểm lại"
@ -544,76 +550,76 @@ msgstr "Báo cáo lỗi"
msgid "Courses"
msgstr "Khóa học"
#: judge/forms.py:112
#: judge/forms.py:107
msgid "File size exceeds the maximum allowed limit of 5MB."
msgstr "File tải lên không được quá 5MB."
#: judge/forms.py:143
#: judge/forms.py:138
msgid "Any judge"
msgstr ""
#: judge/forms.py:343
#: judge/forms.py:338
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:344 judge/views/stats.py:166 templates/stats/site.html:27
#: judge/forms.py:339 judge/views/stats.py:166 templates/stats/site.html:27
msgid "New users"
msgstr "Thành viên mới"
#: judge/forms.py:361
#: judge/forms.py:356
#, 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:421
#: judge/forms.py:416
msgid "Username/Email"
msgstr "Tên đăng nhập / Email"
#: judge/forms.py:423 judge/views/email.py:22
#: judge/forms.py:418 judge/views/email.py:22
#: templates/registration/registration_form.html:46
#: templates/registration/registration_form.html:60
#: templates/user/edit-profile.html:101 templates/user/import/table_csv.html:5
msgid "Password"
msgstr "Mật khẩu"
#: judge/forms.py:449
#: judge/forms.py:444
msgid "Two Factor Authentication tokens must be 6 decimal digits."
msgstr "Two Factor Authentication phải chứa 6 chữ số."
#: judge/forms.py:462 templates/registration/totp_auth.html:32
#: judge/forms.py:457 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:469 judge/models/problem.py:132
#: judge/forms.py:464 judge/models/problem.py:132
msgid "Problem code must be ^[a-z0-9]+$"
msgstr "Mã bài phải có dạng ^[a-z0-9]+$"
#: judge/forms.py:476
#: judge/forms.py:471
msgid "Problem with code already exists."
msgstr "Mã bài đã tồn tại."
#: judge/forms.py:483 judge/models/contest.py:95
#: judge/forms.py:478 judge/models/contest.py:95
msgid "Contest id must be ^[a-z0-9]+$"
msgstr "Mã kỳ thi phải có dạng ^[a-z0-9]+$"
#: judge/forms.py:490 templates/contest/clone.html:47
#: judge/forms.py:485 templates/contest/clone.html:47
#: templates/problem/search-form.html:39
msgid "Group"
msgstr "Nhóm"
#: judge/forms.py:498
#: judge/forms.py:493
msgid "Contest with key already exists."
msgstr "Mã kỳ thi đã tồn tại."
#: judge/forms.py:506
#: judge/forms.py:501
msgid "Group doesn't exist."
msgstr "Nhóm không tồn tại."
#: judge/forms.py:508
#: judge/forms.py:503
msgid "You don't have permission in this group."
msgstr "Bạn không có quyền trong nhóm này."
#: judge/forms.py:558
#: judge/forms.py:553
msgid "This problem is duplicated."
msgstr "Bài này bị lặp"
@ -674,26 +680,6 @@ msgstr "Lưu"
msgid "make bookmarks"
msgstr "Lưu"
#: judge/models/choices.py:59
msgid "Leave as LaTeX"
msgstr "Để định dạng LaTeX"
#: judge/models/choices.py:60
msgid "SVG with PNG fallback"
msgstr ""
#: judge/models/choices.py:61
msgid "MathML only"
msgstr "chỉ dùng MathML"
#: judge/models/choices.py:62
msgid "MathJax with SVG/PNG fallback"
msgstr ""
#: judge/models/choices.py:63
msgid "Detect best quality"
msgstr ""
#: judge/models/comment.py:43
msgid "commenter"
msgstr "người bình luận"
@ -1846,8 +1832,8 @@ msgid "Custom checker (PY)"
msgstr "Trình chấm tự viết (Python)"
#: judge/models/problem_data.py:41
msgid "Custom validator (CPP)"
msgstr "Trình chấm tự viết (C++)"
msgid "Custom checker (CPP)"
msgstr "Trình chấm tự viết (CPP)"
#: judge/models/problem_data.py:42
msgid "Interactive"
@ -1891,15 +1877,15 @@ msgstr "các biến trong trình chấm theo dạng JSON"
#: judge/models/problem_data.py:86
msgid "custom checker file"
msgstr "file trình chấm"
msgstr "trình chấm"
#: judge/models/problem_data.py:94
msgid "custom validator file"
msgstr "file trình chấm"
msgid "custom cpp checker file"
msgstr "trình chấm C++"
#: judge/models/problem_data.py:102
msgid "interactive judge"
msgstr ""
msgstr "trình chấm interactive"
#: judge/models/problem_data.py:110 judge/models/problem_data.py:229
msgid "input file name"
@ -2046,7 +2032,7 @@ msgid ""
msgstr "Ảnh này sẽ thay thế logo mặc định khi ở trong tổ chức."
#: judge/models/profile.py:148 judge/models/profile.py:178
#: judge/models/profile.py:425 judge/models/profile.py:500
#: judge/models/profile.py:418 judge/models/profile.py:493
msgid "organization"
msgstr ""
@ -2109,78 +2095,70 @@ msgid "current contest"
msgstr "kỳ thi hiện tại"
#: judge/models/profile.py:219
msgid "math engine"
msgstr ""
#: judge/models/profile.py:223
msgid "the rendering engine used to render math"
msgstr ""
#: judge/models/profile.py:226
msgid "2FA enabled"
msgstr ""
#: judge/models/profile.py:228
#: judge/models/profile.py:221
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:234
#: judge/models/profile.py:227
msgid "TOTP key"
msgstr "mã TOTP"
#: judge/models/profile.py:235
#: judge/models/profile.py:228
msgid "32 character base32-encoded key for TOTP"
msgstr ""
#: judge/models/profile.py:237
#: judge/models/profile.py:230
msgid "TOTP key must be empty or base32"
msgstr ""
#: judge/models/profile.py:241
#: judge/models/profile.py:234
msgid "internal notes"
msgstr "ghi chú nội bộ"
#: judge/models/profile.py:244
#: judge/models/profile.py:237
msgid "Notes for administrators regarding this user."
msgstr "Ghi chú riêng cho quản trị viên."
#: judge/models/profile.py:249
#: judge/models/profile.py:242
msgid "Custom background"
msgstr "Background tự chọn"
#: judge/models/profile.py:252
#: judge/models/profile.py:245
msgid "CSS custom background properties: url(\"image_url\"), color, etc"
msgstr "CSS background tự chọn. Ví dụ: url(\"image_url\"), white, ..."
#: judge/models/profile.py:412
#: judge/models/profile.py:405
msgid "user profile"
msgstr "thông tin người dùng"
#: judge/models/profile.py:413
#: judge/models/profile.py:406
msgid "user profiles"
msgstr "thông tin người dùng"
#: judge/models/profile.py:429
#: judge/models/profile.py:422
msgid "request time"
msgstr "thời gian đăng ký"
#: judge/models/profile.py:432
#: judge/models/profile.py:425
msgid "state"
msgstr "trạng thái"
#: judge/models/profile.py:439
#: judge/models/profile.py:432
msgid "reason"
msgstr "lý do"
#: judge/models/profile.py:442
#: judge/models/profile.py:435
msgid "organization join request"
msgstr "đơn đăng ký tham gia"
#: judge/models/profile.py:443
#: judge/models/profile.py:436
msgid "organization join requests"
msgstr "đơn đăng ký tham gia"
#: judge/models/profile.py:505
#: judge/models/profile.py:498
#, fuzzy
#| msgid "last seen"
msgid "last visit"
@ -3266,7 +3244,7 @@ msgstr "Hướng dẫn cho {0}"
msgid "Editorial for <a href=\"{1}\">{0}</a>"
msgstr "Hướng dẫn cho <a href=\"{1}\">{0}</a>"
#: judge/views/problem.py:459 templates/contest/contest.html:116
#: judge/views/problem.py:458 templates/contest/contest.html:116
#: templates/course/lesson.html:14
#: templates/organization/org-left-sidebar.html:4
#: templates/user/user-about.html:28 templates/user/user-bookmarks.html:35
@ -3274,34 +3252,34 @@ msgstr "Hướng dẫn cho <a href=\"{1}\">{0}</a>"
msgid "Problems"
msgstr "Bài tập"
#: judge/views/problem.py:826
#: judge/views/problem.py:825
msgid "Problem feed"
msgstr "Bài tập"
#: judge/views/problem.py:1027
#: judge/views/problem.py:1026
msgid "Banned from submitting"
msgstr "Bị cấm nộp bài"
#: judge/views/problem.py:1029
#: judge/views/problem.py:1028
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:1052
#: judge/views/problem.py:1051
msgid "Too many submissions"
msgstr "Quá nhiều lần nộp"
#: judge/views/problem.py:1054
#: judge/views/problem.py:1053
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:1133 judge/views/problem.py:1138
#: judge/views/problem.py:1132 judge/views/problem.py:1137
#, python-format
msgid "Submit to %(problem)s"
msgstr "Nộp bài cho %(problem)s"
#: judge/views/problem.py:1164
#: judge/views/problem.py:1163
msgid "Clone Problem"
msgstr "Nhân bản bài tập"
@ -3454,7 +3432,7 @@ 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:278 judge/views/submission.py:279
#: templates/problem/problem.html:188
#: templates/problem/problem.html:192
msgid "All submissions"
msgstr "Tất cả bài nộp"
@ -3623,12 +3601,12 @@ msgstr "Được cập nhật trên web"
msgid "Edit profile"
msgstr "Chỉnh sửa thông tin"
#: judge/views/user.py:442 templates/user/user-left-sidebar.html:2
#: judge/views/user.py:441 templates/user/user-left-sidebar.html:2
#: templates/user/user-list-tabs.html:4
msgid "Leaderboard"
msgstr "Xếp hạng"
#: judge/views/user.py:542
#: judge/views/user.py:541
msgid "Import Users"
msgstr ""
@ -3812,7 +3790,7 @@ msgid "You have no ticket"
msgstr "Bạn không có báo cáo"
#: templates/blog/list.html:72 templates/problem/list.html:150
#: templates/problem/problem.html:408
#: templates/problem/problem.html:424
msgid "Clarifications"
msgstr "Thông báo"
@ -3821,7 +3799,7 @@ msgid "Add"
msgstr "Thêm mới"
#: templates/blog/list.html:97 templates/problem/list.html:172
#: templates/problem/problem.html:419
#: templates/problem/problem.html:435
msgid "No clarifications have been made at this time."
msgstr "Không có thông báo nào."
@ -4765,7 +4743,7 @@ msgstr "Xem YAML"
msgid "Autofill testcases"
msgstr "Tự động điền test"
#: templates/problem/data.html:506 templates/problem/problem.html:267
#: templates/problem/data.html:506 templates/problem/problem.html:283
msgid "Problem type"
msgid_plural "Problem types"
msgstr[0] "Dạng bài"
@ -4845,8 +4823,8 @@ msgstr "Xem mã nguồn"
msgid "Volunteer form"
msgstr "Phiếu tình nguyện"
#: templates/problem/feed/problems.html:53 templates/problem/problem.html:148
#: templates/problem/problem.html:163 templates/problem/problem.html:173
#: templates/problem/feed/problems.html:53 templates/problem/problem.html:152
#: templates/problem/problem.html:167 templates/problem/problem.html:177
msgid "Submit"
msgstr "Nộp bài"
@ -4997,116 +4975,116 @@ msgstr "Bạn có chắc muốn tính điểm lại %(count)d bài nộp?"
msgid "Rescore all submissions"
msgstr "Tính điểm lại các bài nộp"
#: templates/problem/problem.html:137
#: templates/problem/problem.html:141
msgid "View as PDF"
msgstr "Xem PDF"
#: templates/problem/problem.html:155
#: templates/problem/problem.html:159
#, python-format
msgid "%(counter)s submission left"
msgid_plural "%(counter)s submissions left"
msgstr[0] "Còn %(counter)s lần nộp"
#: templates/problem/problem.html:168
#: templates/problem/problem.html:172
msgid "0 submissions left"
msgstr "Còn 0 lần nộp"
#: templates/problem/problem.html:185
#: templates/problem/problem.html:189
msgid "My submissions"
msgstr "Bài nộp của tôi"
#: templates/problem/problem.html:189
#: templates/problem/problem.html:193
msgid "Best submissions"
msgstr "Các bài nộp tốt nhất"
#: templates/problem/problem.html:193
#: templates/problem/problem.html:197
msgid "Read editorial"
msgstr "Xem hướng dẫn"
#: templates/problem/problem.html:198
#: templates/problem/problem.html:202
msgid "Manage tickets"
msgstr "Xử lý báo cáo"
#: templates/problem/problem.html:202
#: templates/problem/problem.html:206
msgid "Edit problem"
msgstr "Chỉnh sửa bài"
#: templates/problem/problem.html:204
#: templates/problem/problem.html:208
msgid "Edit test data"
msgstr "Chỉnh sửa test"
#: templates/problem/problem.html:209
#: templates/problem/problem.html:213
msgid "My tickets"
msgstr "Báo cáo của tôi"
#: templates/problem/problem.html:217
#: templates/problem/problem.html:221
msgid "Manage submissions"
msgstr "Quản lý bài nộp"
#: templates/problem/problem.html:223
#: templates/problem/problem.html:227
msgid "Clone problem"
msgstr "Nhân bản bài"
#: templates/problem/problem.html:252
#: templates/problem/problem.html:236 templates/problem/problem.html:365
msgid "Time limit:"
msgstr "Thời gian:"
#: templates/problem/problem.html:249 templates/problem/problem.html:370
msgid "Memory limit:"
msgstr "Bộ nhớ:"
#: templates/problem/problem.html:268
msgid "Author:"
msgid_plural "Authors:"
msgstr[0] "Tác giả:"
#: templates/problem/problem.html:280
#: templates/problem/problem.html:296
msgid "Allowed languages"
msgstr "Ngôn ngữ cho phép"
#: templates/problem/problem.html:288
#: templates/problem/problem.html:304
#, python-format
msgid "No %(lang)s judge online"
msgstr "Không có máy chấm cho %(lang)s"
#: templates/problem/problem.html:300
#: templates/problem/problem.html:316
#: templates/status/judge-status-table.html:2
msgid "Judge"
msgid_plural "Judges"
msgstr[0] "Máy chấm"
#: templates/problem/problem.html:318
#: templates/problem/problem.html:334
msgid "none available"
msgstr "Bài này chưa có máy chấm"
#: templates/problem/problem.html:330
#: templates/problem/problem.html:346
#, python-format
msgid "This problem has %(length)s clarification(s)"
msgstr "Bài này có %(length)s thông báo"
#: templates/problem/problem.html:338
#: templates/problem/problem.html:354
msgid "Points:"
msgstr "Điểm:"
#: templates/problem/problem.html:349
msgid "Time limit:"
msgstr "Thời gian:"
#: templates/problem/problem.html:354
msgid "Memory limit:"
msgstr "Bộ nhớ:"
#: templates/problem/problem.html:359 templates/problem/raw.html:67
#: templates/problem/problem.html:375 templates/problem/raw.html:67
#: templates/submission/status-testcases.html:155
msgid "Input:"
msgstr "Input:"
#: templates/problem/problem.html:361 templates/problem/raw.html:67
#: templates/problem/problem.html:377 templates/problem/raw.html:67
msgid "stdin"
msgstr "bàn phím"
#: templates/problem/problem.html:366 templates/problem/raw.html:70
#: templates/problem/problem.html:382 templates/problem/raw.html:70
#: templates/submission/status-testcases.html:159
msgid "Output:"
msgstr "Output:"
#: templates/problem/problem.html:367 templates/problem/raw.html:70
#: templates/problem/problem.html:383 templates/problem/raw.html:70
msgid "stdout"
msgstr "màn hình"
#: templates/problem/problem.html:394
#: templates/problem/problem.html:410
msgid "Request clarification"
msgstr "Yêu cầu làm rõ đề"
@ -5845,31 +5823,27 @@ msgstr "Chọn thành phố gần nhất"
msgid "Editor theme"
msgstr "Giao diện cho code editor"
#: templates/user/edit-profile.html:146
msgid "Math engine"
msgstr ""
#: templates/user/edit-profile.html:157
#: templates/user/edit-profile.html:151
msgid "Two Factor Authentication is enabled."
msgstr "Two Factor Authentication đã được kích hoạt."
#: templates/user/edit-profile.html:161
#: templates/user/edit-profile.html:155
msgid "Disable"
msgstr "Tắt"
#: templates/user/edit-profile.html:164
#: templates/user/edit-profile.html:158
msgid "Two Factor Authentication is disabled."
msgstr "Two Factor Authentication chưa kích hoạt."
#: templates/user/edit-profile.html:165
#: templates/user/edit-profile.html:159
msgid "Enable"
msgstr "Bật"
#: templates/user/edit-profile.html:169
#: templates/user/edit-profile.html:163
msgid "CSS background"
msgstr ""
#: templates/user/edit-profile.html:173
#: templates/user/edit-profile.html:167
msgid "Update profile"
msgstr "Cập nhật thông tin"
@ -6081,6 +6055,18 @@ msgstr "Thông tin"
msgid "Check all"
msgstr "Chọn tất cả"
#~ msgid "custom validator file"
#~ msgstr "file trình chấm"
#~ msgid "Leave as LaTeX"
#~ msgstr "Để định dạng LaTeX"
#~ msgid "MathML only"
#~ msgstr "chỉ dùng MathML"
#~ msgid "Custom validator (CPP)"
#~ msgstr "Trình chấm tự viết (C++)"
#, fuzzy
#~| msgid "From the web"
#~ msgid "From the Web"

View file

@ -214,6 +214,7 @@ label[for="language"], label[for="status"] {
border-radius: .28571429rem;
border: 1px solid rgba(34,36,38,.15);
font-family: Consolas;
overflow-wrap: anywhere;
}
.testcases-table {

View file

@ -137,7 +137,7 @@
let $checker = $('#id_problem-data-checker')
let $custom_checker = $('#id_problem-data-custom_checker');
let $validator = $('#id_problem-data-custom_validator');
let $validator = $('#id_problem-data-custom_checker_cpp');
let $interactive = $('#id_problem-data-interactive_judge');
let $sig_handler = $('#id_problem-data-signature_handler');
let $sig_header = $('#id_problem-data-signature_header');
@ -165,10 +165,10 @@
$checker.change(function () {
$tr_checker.toggle($checker.val() == 'custom').change();
$tr_validator.toggle($checker.val() == 'customval' || $checker.val() == 'testlib').change();
$tr_validator.toggle($checker.val() == 'customcpp' || $checker.val() == 'testlib').change();
$tr_interactive.toggle($checker.val() == 'interact').change();
$sample.toggle(['custom', 'customval', 'interact'].includes($checker.val())).change();
$sample.toggle(['custom', 'customcpp', 'interact'].includes($checker.val())).change();
}).change();
$ioi_signature.change(function() {