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

View file

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

View file

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

View file

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

View file

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

View file

@ -137,7 +137,7 @@
let $checker = $('#id_problem-data-checker') let $checker = $('#id_problem-data-checker')
let $custom_checker = $('#id_problem-data-custom_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 $interactive = $('#id_problem-data-interactive_judge');
let $sig_handler = $('#id_problem-data-signature_handler'); let $sig_handler = $('#id_problem-data-signature_handler');
let $sig_header = $('#id_problem-data-signature_header'); let $sig_header = $('#id_problem-data-signature_header');
@ -165,10 +165,10 @@
$checker.change(function () { $checker.change(function () {
$tr_checker.toggle($checker.val() == 'custom').change(); $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(); $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(); }).change();
$ioi_signature.change(function() { $ioi_signature.change(function() {