From 81a490ca9364ca2f46b07e889a783d16d2041c69 Mon Sep 17 00:00:00 2001 From: Zhao-Linux Date: Sat, 15 Oct 2022 23:23:50 +0700 Subject: [PATCH] Allow user change fullname --- judge/forms.py | 7 + judge/views/user.py | 11 +- locale/vi/LC_MESSAGES/django.po | 563 ++++++++++++++++--------------- templates/user/edit-profile.html | 6 + 4 files changed, 302 insertions(+), 285 deletions(-) diff --git a/judge/forms.py b/judge/forms.py index f155d49..402a040 100644 --- a/judge/forms.py +++ b/judge/forms.py @@ -3,6 +3,7 @@ from operator import attrgetter import pyotp from django import forms from django.conf import settings +from django.contrib.auth.models import User from django.contrib.auth.forms import AuthenticationForm from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.core.validators import RegexValidator @@ -51,6 +52,12 @@ def fix_unicode(string, unsafe=tuple("\u202a\u202b\u202d\u202e")): string + (sum(k in unsafe for k in string) - string.count("\u202c")) * "\u202c" ) +class UserForm(ModelForm): + class Meta: + model = User + fields = [ + "first_name", + ] class ProfileForm(ModelForm): if newsletter_id is not None: diff --git a/judge/views/user.py b/judge/views/user.py index 5a2d8f2..e65bdbd 100644 --- a/judge/views/user.py +++ b/judge/views/user.py @@ -34,7 +34,7 @@ from django.views.generic import DetailView, ListView, TemplateView from django.template.loader import render_to_string from reversion import revisions -from judge.forms import ProfileForm, newsletter_id +from judge.forms import UserForm, ProfileForm, newsletter_id from judge.models import Profile, Rating, Submission, Friend from judge.performance_points import get_pp_breakdown from judge.ratings import rating_class, rating_progress @@ -384,9 +384,11 @@ def edit_profile(request): if profile.mute: raise Http404() if request.method == "POST": + form_user = UserForm(request.POST, instance=request.user) form = ProfileForm(request.POST, instance=profile, user=request.user) - if form.is_valid(): + if form_user.is_valid() and form.is_valid(): with transaction.atomic(), revisions.create_revision(): + form_user.save() form.save() revisions.set_user(request.user) revisions.set_comment(_("Updated on site")) @@ -422,6 +424,7 @@ def edit_profile(request): return HttpResponseRedirect(request.path) else: + form_user = UserForm(instance=request.user) form = ProfileForm(instance=profile, user=request.user) if newsletter_id is not None: try: @@ -438,10 +441,10 @@ def edit_profile(request): print(settings.REGISTER_NAME_URL) return render( request, - "user/edit-profile.html", + "user/edit-profile.html", { "edit_name_url": settings.REGISTER_NAME_URL, - "require_staff_2fa": settings.DMOJ_REQUIRE_STAFF_2FA, + "require_staff_2fa": settings.DMOJ_REQUIRE_STAFF_2FA, 'form_user': form_user, "form": form, "title": _("Edit profile"), "profile": profile, diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po index 94ab6ca..7f40f8a 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-10 17:57+0700\n" +"POT-Creation-Date: 2022-10-15 23:21+0700\n" "PO-Revision-Date: 2021-07-20 03:44\n" "Last-Translator: Icyene\n" "Language-Team: Vietnamese\n" @@ -19,8 +19,8 @@ msgstr "" "X-Crowdin-File-ID: 5\n" #: chat_box/models.py:31 chat_box/models.py:52 chat_box/models.py:63 -#: judge/admin/interface.py:150 judge/models/contest.py:621 -#: judge/models/contest.py:810 judge/models/profile.py:354 +#: judge/admin/interface.py:150 judge/models/contest.py:622 +#: judge/models/contest.py:815 judge/models/profile.py:354 msgid "user" msgstr "người dùng" @@ -119,7 +119,7 @@ msgstr "" msgid "Access" msgstr "Truy cập" -#: judge/admin/contest.py:201 judge/admin/problem.py:237 +#: judge/admin/contest.py:201 judge/admin/problem.py:219 msgid "Justice" msgstr "Xử phạt" @@ -191,28 +191,28 @@ msgstr "" msgid "diff" msgstr "" -#: judge/admin/organization.py:61 judge/admin/problem.py:295 +#: judge/admin/organization.py:61 judge/admin/problem.py:276 #: judge/admin/profile.py:116 msgid "View on site" msgstr "Xem trên trang" -#: judge/admin/problem.py:55 +#: judge/admin/problem.py:54 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:110 msgid "Memory unit" msgstr "Đơn vị bộ nhớ" -#: judge/admin/problem.py:230 +#: judge/admin/problem.py:212 msgid "Social Media" msgstr "Mạng Xã Hội" -#: judge/admin/problem.py:233 +#: judge/admin/problem.py:215 msgid "Taxonomy" msgstr "" -#: judge/admin/problem.py:234 judge/admin/problem.py:453 +#: judge/admin/problem.py:216 judge/admin/problem.py:434 #: templates/contest/contest.html:84 templates/problem/data.html:475 #: templates/problem/list.html:20 templates/problem/list.html:44 #: templates/user/base-users-table.html:10 templates/user/user-about.html:36 @@ -220,66 +220,66 @@ msgstr "" msgid "Points" msgstr "Điểm" -#: judge/admin/problem.py:235 +#: judge/admin/problem.py:217 msgid "Limits" msgstr "Giới hạn" -#: judge/admin/problem.py:236 judge/admin/submission.py:353 +#: judge/admin/problem.py:218 judge/admin/submission.py:353 #: templates/base.html:252 templates/stats/tab.html:4 #: templates/submission/list.html:342 msgid "Language" msgstr "Ngôn ngữ" -#: judge/admin/problem.py:238 +#: judge/admin/problem.py:220 msgid "History" msgstr "Lịch sử" -#: judge/admin/problem.py:291 templates/problem/list-base.html:106 +#: judge/admin/problem.py:272 templates/problem/list-base.html:106 msgid "Authors" msgstr "Các tác giả" -#: judge/admin/problem.py:312 +#: judge/admin/problem.py:293 #, 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:319 +#: judge/admin/problem.py:300 msgid "Mark problems as public" msgstr "Công khai bài tập" -#: judge/admin/problem.py:328 +#: judge/admin/problem.py:309 #, 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:335 +#: judge/admin/problem.py:316 msgid "Mark problems as private" msgstr "Đánh dấu các bài tập là riêng tư" -#: judge/admin/problem.py:447 judge/admin/submission.py:316 +#: judge/admin/problem.py:428 judge/admin/submission.py:316 #: templates/problem/list.html:16 templates/problem/list.html:33 msgid "Problem code" msgstr "Mã bài" -#: judge/admin/problem.py:459 judge/admin/submission.py:322 +#: judge/admin/problem.py:440 judge/admin/submission.py:322 msgid "Problem name" msgstr "Tên bài" -#: judge/admin/problem.py:465 +#: judge/admin/problem.py:446 #, fuzzy #| msgid "contest rating" msgid "Voter rating" msgstr "rating kỳ thi" -#: judge/admin/problem.py:471 +#: judge/admin/problem.py:452 #, fuzzy #| msgid "Total points" msgid "Voter point" msgstr "Tổng điểm" -#: judge/admin/problem.py:477 +#: judge/admin/problem.py:458 msgid "Vote" msgstr "" @@ -302,7 +302,7 @@ msgstr "Email" #: judge/admin/profile.py:137 judge/views/register.py:37 #: templates/registration/registration_form.html:173 -#: templates/user/edit-profile.html:116 +#: templates/user/edit-profile.html:122 msgid "Timezone" msgstr "Múi giờ" @@ -466,70 +466,71 @@ msgstr "" msgid "IOI" msgstr "" -#: judge/forms.py:58 +#: judge/forms.py:65 msgid "Subscribe to contest updates" msgstr "Đăng ký để nhận thông báo về các kỳ thi" -#: judge/forms.py:61 +#: judge/forms.py:68 msgid "Enable experimental features" msgstr "Sử dụng các tính năng thử nghiệm" -#: judge/forms.py:98 judge/views/organization.py:513 judge/views/register.py:68 +#: judge/forms.py:105 judge/views/organization.py:513 +#: 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:130 +#: judge/forms.py:137 msgid "Any judge" msgstr "" -#: judge/forms.py:298 +#: judge/forms.py:305 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:299 judge/views/stats.py:166 templates/stats/site.html:27 +#: judge/forms.py:306 judge/views/stats.py:166 templates/stats/site.html:27 msgid "New users" msgstr "Thành viên mới" -#: judge/forms.py:316 +#: judge/forms.py:323 #, 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:375 judge/views/register.py:31 +#: judge/forms.py:382 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:376 templates/registration/registration_form.html:151 +#: judge/forms.py:383 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:402 +#: judge/forms.py:409 msgid "Two Factor Authentication tokens must be 6 decimal digits." msgstr "Two Factor Authentication phải chứa 6 chữ số." -#: judge/forms.py:415 templates/registration/totp_auth.html:32 +#: judge/forms.py:422 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:422 judge/models/problem.py:159 +#: judge/forms.py:429 judge/models/problem.py:158 msgid "Problem code must be ^[a-z0-9]+$" msgstr "Mã bài phải có dạng ^[a-z0-9]+$" -#: judge/forms.py:429 +#: judge/forms.py:436 msgid "Problem with code already exists." msgstr "Mã bài đã tồn tại." -#: judge/forms.py:436 judge/models/contest.py:89 +#: judge/forms.py:443 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:442 +#: judge/forms.py:449 msgid "Contest with key already exists." msgstr "Mã kỳ thi đã tồn tại." @@ -580,7 +581,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:729 +#: judge/models/comment.py:53 judge/models/problem.py:714 msgid "votes" msgstr "bình chọn" @@ -600,7 +601,7 @@ msgstr "bình luận" msgid "comments" msgstr "" -#: judge/models/comment.py:160 judge/models/problem.py:697 +#: judge/models/comment.py:160 judge/models/problem.py:682 #, python-format msgid "Editorial for %s" msgstr "" @@ -637,103 +638,103 @@ msgstr "" msgid "who trigger, used for non-comment" msgstr "" -#: judge/models/contest.py:36 +#: judge/models/contest.py:37 msgid "Invalid colour." msgstr "" -#: judge/models/contest.py:40 +#: judge/models/contest.py:41 msgid "tag name" msgstr "" -#: judge/models/contest.py:44 +#: judge/models/contest.py:45 msgid "Lowercase letters and hyphens only." msgstr "" -#: judge/models/contest.py:49 +#: judge/models/contest.py:50 msgid "tag colour" msgstr "" -#: judge/models/contest.py:51 +#: judge/models/contest.py:52 msgid "tag description" msgstr "" -#: judge/models/contest.py:72 +#: judge/models/contest.py:73 msgid "contest tag" msgstr "" -#: judge/models/contest.py:73 judge/models/contest.py:233 +#: judge/models/contest.py:74 judge/models/contest.py:234 msgid "contest tags" msgstr "nhãn kỳ thi" -#: judge/models/contest.py:81 +#: judge/models/contest.py:82 msgid "Visible" msgstr "Hiển thị" -#: judge/models/contest.py:82 +#: judge/models/contest.py:83 msgid "Hidden for duration of contest" msgstr "Ẩn trong thời gian kỳ thi" -#: judge/models/contest.py:83 +#: judge/models/contest.py:84 msgid "Hidden for duration of participation" msgstr "Ẩn trong thời gian tham gia" -#: judge/models/contest.py:87 +#: judge/models/contest.py:88 msgid "contest id" msgstr "ID kỳ thi" -#: judge/models/contest.py:92 +#: judge/models/contest.py:93 msgid "contest name" msgstr "tên kỳ thi" -#: judge/models/contest.py:96 +#: judge/models/contest.py:97 msgid "These users will be able to edit the contest." msgstr "Những người dùng này có quyền chỉnh sửa kỳ thi." -#: judge/models/contest.py:102 +#: judge/models/contest.py:103 msgid "" "These users will be able to edit the contest, but will not be listed as " "authors." msgstr "Những người dùng này là tác giả và có quyền chỉnh sửa kỳ thi." -#: judge/models/contest.py:111 +#: judge/models/contest.py:112 msgid "These users will be able to view the contest, but not edit it." msgstr "" "Những người dùng này có thể thấy kỳ thi nhưng không có quyền chỉnh sửa." -#: judge/models/contest.py:116 judge/models/runtime.py:211 +#: judge/models/contest.py:117 judge/models/runtime.py:211 msgid "description" msgstr "mô tả" -#: judge/models/contest.py:118 judge/models/problem.py:592 +#: judge/models/contest.py:119 judge/models/problem.py:587 #: judge/models/runtime.py:216 msgid "problems" msgstr "bài tập" -#: judge/models/contest.py:120 judge/models/contest.py:626 +#: judge/models/contest.py:121 judge/models/contest.py:627 msgid "start time" msgstr "thời gian bắt đầu" -#: judge/models/contest.py:121 +#: judge/models/contest.py:122 msgid "end time" msgstr "thời gian kết thúc" -#: judge/models/contest.py:123 judge/models/problem.py:212 -#: judge/models/problem.py:637 +#: judge/models/contest.py:124 judge/models/problem.py:211 +#: judge/models/problem.py:622 msgid "time limit" msgstr "giới hạn thời gian" -#: judge/models/contest.py:127 +#: judge/models/contest.py:128 msgid "" "Format hh:mm:ss. For example, if you want a 2-hour contest, enter 02:00:00" msgstr "" "Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn tạo kỳ thi dài 2h, hãy " "nhập 02:00:00" -#: judge/models/contest.py:131 judge/models/problem.py:251 +#: judge/models/contest.py:132 judge/models/problem.py:250 msgid "publicly visible" msgstr "công khai" -#: judge/models/contest.py:134 +#: judge/models/contest.py:135 msgid "" "Should be set even for organization-private contests, where it determines " "whether the contest is visible to members of the specified organizations." @@ -741,84 +742,84 @@ msgstr "" "Đánh dấu ngay cả với các kỳ thi riêng tư của nhóm, quyết định việc kỳ thi có " "được hiển thị với các thành viên hay không." -#: judge/models/contest.py:140 +#: judge/models/contest.py:141 msgid "contest rated" msgstr "kỳ thi được xếp hạng" -#: judge/models/contest.py:141 +#: judge/models/contest.py:142 msgid "Whether this contest can be rated." msgstr "Quyết định kỳ thi có được xếp hạng không." -#: judge/models/contest.py:145 +#: judge/models/contest.py:146 msgid "scoreboard visibility" msgstr "khả năng hiển thị của bảng điểm" -#: judge/models/contest.py:148 +#: judge/models/contest.py:149 msgid "Scoreboard visibility through the duration of the contest" msgstr "Khả năng hiển thị của bảng điểm trong thời gian kỳ thi" -#: judge/models/contest.py:153 +#: judge/models/contest.py:154 msgid "view contest scoreboard" msgstr "xem bảng điểm kỳ thi" -#: judge/models/contest.py:156 +#: judge/models/contest.py:157 msgid "These users will be able to view the scoreboard." msgstr "Những người dùng này được phép xem bảng điểm." -#: judge/models/contest.py:159 +#: judge/models/contest.py:160 msgid "no comments" msgstr "không bình luận" -#: judge/models/contest.py:160 +#: judge/models/contest.py:161 msgid "Use clarification system instead of comments." msgstr "Dùng hệ thống thông báo thay vì bình luận." -#: judge/models/contest.py:165 +#: judge/models/contest.py:166 msgid "Rating floor for contest" msgstr "Cận dưới rating được xếp hạng trong kỳ thi" -#: judge/models/contest.py:171 +#: judge/models/contest.py:172 msgid "Rating ceiling for contest" msgstr "Cận trên rating được xếp hạng trong kỳ thi" -#: judge/models/contest.py:176 +#: judge/models/contest.py:177 msgid "rate all" msgstr "xếp hạng tất cả" -#: judge/models/contest.py:177 +#: judge/models/contest.py:178 msgid "Rate all users who joined." msgstr "Xếp hạng tất cả người dùng đã tham gia (kể cả không nộp)." -#: judge/models/contest.py:182 +#: judge/models/contest.py:183 msgid "exclude from ratings" msgstr "không xếp hạng" -#: judge/models/contest.py:187 +#: judge/models/contest.py:188 msgid "private to specific users" msgstr "riêng tư với các người dùng này" -#: judge/models/contest.py:192 +#: judge/models/contest.py:193 msgid "private contestants" msgstr "thí sinh riêng tư" -#: judge/models/contest.py:193 +#: judge/models/contest.py:194 msgid "If private, only these users may see the contest" msgstr "Nếu riêng tư, chỉ những người dùng này mới thấy kỳ thi" -#: judge/models/contest.py:197 +#: judge/models/contest.py:198 msgid "hide problem tags" msgstr "ẩn nhãn kỳ thi" -#: judge/models/contest.py:198 +#: judge/models/contest.py:199 msgid "Whether problem tags should be hidden by default." msgstr "" "Quyết định việc nhãn bài tập (DP, Tham lam, ...) được ẩn trong kỳ thi không." -#: judge/models/contest.py:202 +#: judge/models/contest.py:203 msgid "run pretests only" msgstr "chỉ chạy pretests" -#: judge/models/contest.py:204 +#: judge/models/contest.py:205 msgid "" "Whether judges should grade pretests only, versus all testcases. Commonly " "set during a contest, then unset prior to rejudging user submissions when " @@ -827,50 +828,50 @@ msgstr "" "Quyết định việc các máy chấm chỉ chấm pretests thay vì tất cả các test. Sau " "kỳ thi, hãy bỏ đánh dấu ô này và chấm lại tất cả các bài." -#: judge/models/contest.py:211 judge/models/interface.py:92 -#: judge/models/problem.py:308 +#: judge/models/contest.py:212 judge/models/interface.py:92 +#: judge/models/problem.py:307 msgid "private to organizations" msgstr "riêng tư với các tổ chức" -#: judge/models/contest.py:216 judge/models/interface.py:88 -#: judge/models/problem.py:304 judge/models/profile.py:126 +#: judge/models/contest.py:217 judge/models/interface.py:88 +#: judge/models/problem.py:303 judge/models/profile.py:126 msgid "organizations" msgstr "tổ chức" -#: judge/models/contest.py:217 +#: judge/models/contest.py:218 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:220 judge/models/problem.py:282 +#: judge/models/contest.py:221 judge/models/problem.py:281 msgid "OpenGraph image" msgstr "Hình ảnh OpenGraph" -#: judge/models/contest.py:223 judge/models/profile.py:81 +#: judge/models/contest.py:224 judge/models/profile.py:81 msgid "Logo override image" msgstr "Hình ảnh ghi đè logo" -#: judge/models/contest.py:228 +#: judge/models/contest.py:229 msgid "" "This image will replace the default site logo for users inside the contest." msgstr "Ảnh này sẽ thay thế cho logo mặc định trong kỳ thi." -#: judge/models/contest.py:236 +#: judge/models/contest.py:237 msgid "the amount of live participants" msgstr "số lượng thí sinh thi trực tiếp" -#: judge/models/contest.py:240 +#: judge/models/contest.py:241 msgid "contest summary" msgstr "tổng kết kỳ thi" -#: judge/models/contest.py:242 judge/models/problem.py:288 +#: judge/models/contest.py:243 judge/models/problem.py:287 msgid "Plain-text, shown in meta description tag, e.g. for social media." msgstr "" -#: judge/models/contest.py:246 judge/models/profile.py:76 +#: judge/models/contest.py:247 judge/models/profile.py:76 msgid "access code" msgstr "mật khẩu truy cập" -#: judge/models/contest.py:251 +#: judge/models/contest.py:252 msgid "" "An optional code to prompt contestants before they are allowed to join the " "contest. Leave it blank to disable." @@ -878,258 +879,270 @@ 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:257 judge/models/problem.py:270 +#: judge/models/contest.py:258 judge/models/problem.py:269 msgid "personae non gratae" msgstr "Chặn tham gia" -#: judge/models/contest.py:259 +#: judge/models/contest.py:260 msgid "Bans the selected users from joining this contest." msgstr "Cấm những người dùng được chọn tham gia kỳ thi." -#: judge/models/contest.py:262 +#: judge/models/contest.py:263 msgid "contest format" msgstr "format kỳ thi" -#: judge/models/contest.py:266 +#: judge/models/contest.py:267 msgid "The contest format module to use." msgstr "Format kỳ thi sử dụng." -#: judge/models/contest.py:269 +#: judge/models/contest.py:270 msgid "contest format configuration" msgstr "Tùy chỉnh format kỳ thi" -#: judge/models/contest.py:273 +#: judge/models/contest.py:274 msgid "" "A JSON object to serve as the configuration for the chosen contest format " "module. Leave empty to use None. Exact format depends on the contest format " "selected." msgstr "" -#: judge/models/contest.py:286 +#: judge/models/contest.py:287 msgid "precision points" msgstr "Hiển thị điểm" -#: judge/models/contest.py:289 +#: judge/models/contest.py:290 msgid "Number of digits to round points to." msgstr "Số chữ số thập phân trên bảng điểm." -#: judge/models/contest.py:594 +#: judge/models/contest.py:595 msgid "See private contests" msgstr "" -#: judge/models/contest.py:595 +#: judge/models/contest.py:596 msgid "Edit own contests" msgstr "" -#: judge/models/contest.py:596 +#: judge/models/contest.py:597 msgid "Edit all contests" msgstr "" -#: judge/models/contest.py:597 +#: judge/models/contest.py:598 msgid "Clone contest" msgstr "" -#: judge/models/contest.py:598 templates/contest/moss.html:74 +#: judge/models/contest.py:599 templates/contest/moss.html:74 msgid "MOSS contest" msgstr "" -#: judge/models/contest.py:599 +#: judge/models/contest.py:600 msgid "Rate contests" msgstr "" -#: judge/models/contest.py:600 +#: judge/models/contest.py:601 msgid "Contest access codes" msgstr "" -#: judge/models/contest.py:601 +#: judge/models/contest.py:602 msgid "Create private contests" msgstr "" -#: judge/models/contest.py:602 +#: judge/models/contest.py:603 msgid "Change contest visibility" msgstr "" -#: judge/models/contest.py:603 +#: judge/models/contest.py:604 msgid "Edit contest problem label script" msgstr "Cách hiển thị thứ tự bài tập" -#: judge/models/contest.py:605 judge/models/contest.py:743 -#: judge/models/contest.py:813 judge/models/contest.py:843 +#: judge/models/contest.py:606 judge/models/contest.py:744 +#: judge/models/contest.py:818 judge/models/contest.py:848 #: judge/models/submission.py:116 msgid "contest" msgstr "kỳ thi" -#: judge/models/contest.py:606 +#: judge/models/contest.py:607 msgid "contests" msgstr "kỳ thi" -#: judge/models/contest.py:615 +#: judge/models/contest.py:616 msgid "associated contest" msgstr "" -#: judge/models/contest.py:628 +#: judge/models/contest.py:629 msgid "score" msgstr "điểm" -#: judge/models/contest.py:629 +#: judge/models/contest.py:630 msgid "cumulative time" msgstr "tổng thời gian" -#: judge/models/contest.py:631 +#: judge/models/contest.py:632 msgid "is disqualified" msgstr "đã bị loại" -#: judge/models/contest.py:633 +#: judge/models/contest.py:634 msgid "Whether this participation is disqualified." msgstr "Quyết định thí sinh có bị loại không." -#: judge/models/contest.py:635 +#: judge/models/contest.py:636 msgid "tie-breaking field" msgstr "" -#: judge/models/contest.py:637 +#: judge/models/contest.py:638 msgid "virtual participation id" msgstr "id lần tham gia ảo" -#: judge/models/contest.py:639 +#: judge/models/contest.py:640 msgid "0 means non-virtual, otherwise the n-th virtual participation." msgstr "0 nghĩa là tham gia chính thức, ngược lại là lần tham gia ảo thứ n." -#: judge/models/contest.py:642 +#: judge/models/contest.py:643 msgid "contest format specific data" msgstr "" -#: judge/models/contest.py:718 +#: judge/models/contest.py:719 #, python-format msgid "%s spectating in %s" msgstr "%s đang theo dõi trong %s" -#: judge/models/contest.py:723 +#: judge/models/contest.py:724 #, python-format msgid "%s in %s, v%d" msgstr "%s trong %s, v%d" -#: judge/models/contest.py:728 +#: judge/models/contest.py:729 #, python-format msgid "%s in %s" msgstr "%s trong %s" -#: judge/models/contest.py:731 +#: judge/models/contest.py:732 msgid "contest participation" msgstr "lần tham gia kỳ thi" -#: judge/models/contest.py:732 +#: judge/models/contest.py:733 msgid "contest participations" msgstr "lần tham gia kỳ thi" -#: judge/models/contest.py:739 judge/models/contest.py:784 -#: judge/models/contest.py:846 judge/models/problem.py:591 -#: judge/models/problem.py:598 judge/models/problem.py:629 -#: judge/models/problem.py:660 judge/models/problem_data.py:50 +#: 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 msgid "problem" msgstr "bài tập" -#: judge/models/contest.py:747 judge/models/contest.py:796 -#: judge/models/problem.py:235 +#: judge/models/contest.py:748 judge/models/contest.py:801 +#: judge/models/problem.py:234 msgid "points" msgstr "điểm" -#: judge/models/contest.py:748 +#: judge/models/contest.py:749 msgid "partial" msgstr "thành phần" -#: judge/models/contest.py:749 judge/models/contest.py:798 +#: judge/models/contest.py:750 judge/models/contest.py:803 msgid "is pretested" msgstr "dùng pretest" -#: judge/models/contest.py:750 judge/models/interface.py:43 +#: judge/models/contest.py:751 judge/models/interface.py:43 msgid "order" msgstr "thứ tự" -#: judge/models/contest.py:752 +#: judge/models/contest.py:753 msgid "0 to not show testcases, 1 to show" msgstr "0 để ẩn test, 1 để hiện" -#: judge/models/contest.py:753 +#: judge/models/contest.py:754 msgid "visible testcases" msgstr "hiển thị test" -#: judge/models/contest.py:760 +#: judge/models/contest.py:761 msgid "Maximum number of submissions for this problem, or 0 for no limit." msgstr "Số lần nộp tối đa, đặt là 0 nếu không có giới hạn." -#: judge/models/contest.py:762 +#: judge/models/contest.py:763 msgid "max submissions" msgstr "số lần nộp tối đa" -#: judge/models/contest.py:765 +#: judge/models/contest.py:766 msgid "Why include a problem you can't submit to?" msgstr "" -#: judge/models/contest.py:771 +#: judge/models/contest.py:776 msgid "contest problem" msgstr "bài trong kỳ thi" -#: judge/models/contest.py:772 +#: judge/models/contest.py:777 msgid "contest problems" msgstr "bài trong kỳ thi" -#: judge/models/contest.py:778 judge/models/submission.py:235 +#: judge/models/contest.py:783 judge/models/submission.py:235 msgid "submission" msgstr "bài nộp" -#: judge/models/contest.py:791 judge/models/contest.py:817 +#: judge/models/contest.py:796 judge/models/contest.py:822 msgid "participation" msgstr "lần tham gia" -#: judge/models/contest.py:799 +#: judge/models/contest.py:804 msgid "Whether this submission was ran only on pretests." msgstr "Quyết định bài nộp chỉ được chạy trên pretest không." -#: judge/models/contest.py:804 +#: judge/models/contest.py:809 msgid "contest submission" msgstr "bài nộp kỳ thi" -#: judge/models/contest.py:805 +#: judge/models/contest.py:810 msgid "contest submissions" msgstr "bài nộp kỳ thi" -#: judge/models/contest.py:821 +#: judge/models/contest.py:826 msgid "rank" msgstr "rank" -#: judge/models/contest.py:822 +#: judge/models/contest.py:827 msgid "rating" msgstr "rating" -#: judge/models/contest.py:823 +#: judge/models/contest.py:828 msgid "raw rating" msgstr "rating thật" -#: judge/models/contest.py:824 +#: judge/models/contest.py:829 msgid "contest performance" msgstr "" -#: judge/models/contest.py:825 +#: judge/models/contest.py:830 msgid "last rated" msgstr "lần cuối được xếp hạng" -#: judge/models/contest.py:829 +#: judge/models/contest.py:834 msgid "contest rating" msgstr "rating kỳ thi" -#: judge/models/contest.py:830 +#: judge/models/contest.py:835 msgid "contest ratings" msgstr "rating kỳ thi" -#: judge/models/contest.py:854 +#: judge/models/contest.py:859 msgid "contest moss result" msgstr "kết quả MOSS kỳ thi" -#: judge/models/contest.py:855 +#: judge/models/contest.py:860 msgid "contest moss results" msgstr "kết quả MOSS kỳ thi" +#: judge/models/contest.py:865 +msgid "clarified problem" +msgstr "" + +#: judge/models/contest.py:867 +msgid "clarification body" +msgstr "" + +#: judge/models/contest.py:869 +msgid "clarification timestamp" +msgstr "" + #: judge/models/interface.py:24 msgid "configuration item" msgstr "" @@ -1166,7 +1179,7 @@ msgstr "mục cha" msgid "post title" msgstr "tiêu đề bài đăng" -#: judge/models/interface.py:75 judge/models/problem.py:686 +#: judge/models/interface.py:75 judge/models/problem.py:671 msgid "authors" msgstr "tác giả" @@ -1174,7 +1187,7 @@ msgstr "tác giả" msgid "slug" msgstr "slug" -#: judge/models/interface.py:77 judge/models/problem.py:684 +#: judge/models/interface.py:77 judge/models/problem.py:669 msgid "public visibility" msgstr "khả năng hiển thị công khai" @@ -1238,140 +1251,140 @@ msgstr "thời gian gửi" msgid "messages in the thread" msgstr "tin nhắn trong chuỗi" -#: judge/models/problem.py:45 +#: judge/models/problem.py:44 msgid "problem category ID" msgstr "mã của nhóm bài" -#: judge/models/problem.py:48 +#: judge/models/problem.py:47 msgid "problem category name" msgstr "tên nhóm bài" -#: judge/models/problem.py:56 +#: judge/models/problem.py:55 msgid "problem type" msgstr "dạng bài" -#: judge/models/problem.py:57 judge/models/problem.py:202 +#: judge/models/problem.py:56 judge/models/problem.py:201 #: judge/models/volunteer.py:28 msgid "problem types" msgstr "dạng bài" -#: judge/models/problem.py:62 +#: judge/models/problem.py:61 msgid "problem group ID" msgstr "mã của nhóm bài" -#: judge/models/problem.py:64 +#: judge/models/problem.py:63 msgid "problem group name" msgstr "tên nhóm bài" -#: judge/models/problem.py:71 judge/models/problem.py:207 +#: judge/models/problem.py:70 judge/models/problem.py:206 msgid "problem group" msgstr "nhóm bài" -#: judge/models/problem.py:72 +#: judge/models/problem.py:71 msgid "problem groups" msgstr "nhóm bài" -#: judge/models/problem.py:79 +#: judge/models/problem.py:78 msgid "key" msgstr "" -#: judge/models/problem.py:82 +#: judge/models/problem.py:81 msgid "link" msgstr "đường dẫn" -#: judge/models/problem.py:83 +#: judge/models/problem.py:82 msgid "full name" msgstr "tên đầy đủ" -#: judge/models/problem.py:87 judge/models/profile.py:39 +#: judge/models/problem.py:86 judge/models/profile.py:39 #: judge/models/runtime.py:34 msgid "short name" msgstr "tên ngắn" -#: judge/models/problem.py:88 +#: judge/models/problem.py:87 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:93 +#: judge/models/problem.py:92 msgid "icon" msgstr "icon" -#: judge/models/problem.py:94 +#: judge/models/problem.py:93 msgid "URL to the icon" msgstr "Đường dẫn icon" -#: judge/models/problem.py:96 +#: judge/models/problem.py:95 msgid "license text" msgstr "văn bản giấy phép" -#: judge/models/problem.py:105 +#: judge/models/problem.py:104 msgid "license" msgstr "" -#: judge/models/problem.py:106 +#: judge/models/problem.py:105 msgid "licenses" msgstr "" -#: judge/models/problem.py:156 +#: judge/models/problem.py:155 msgid "problem code" msgstr "mã bài" -#: judge/models/problem.py:162 +#: judge/models/problem.py:161 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:167 +#: judge/models/problem.py:166 msgid "problem name" msgstr "Tên bài" -#: judge/models/problem.py:169 +#: judge/models/problem.py:168 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:171 +#: judge/models/problem.py:170 msgid "problem body" msgstr "Nội dung" -#: judge/models/problem.py:174 +#: judge/models/problem.py:173 msgid "creators" msgstr "" -#: judge/models/problem.py:178 +#: judge/models/problem.py:177 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:183 +#: judge/models/problem.py:182 msgid "curators" msgstr "" -#: judge/models/problem.py:187 +#: judge/models/problem.py:186 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:193 +#: judge/models/problem.py:192 msgid "testers" msgstr "" -#: judge/models/problem.py:197 +#: judge/models/problem.py:196 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:203 judge/models/volunteer.py:29 +#: judge/models/problem.py:202 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:209 +#: judge/models/problem.py:208 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:214 +#: judge/models/problem.py:213 msgid "" "The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) " "are supported." @@ -1379,11 +1392,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:223 judge/models/problem.py:644 +#: judge/models/problem.py:222 judge/models/problem.py:629 msgid "memory limit" msgstr "Giới hạn bộ nhớ" -#: judge/models/problem.py:225 +#: judge/models/problem.py:224 msgid "" "The memory limit for this problem, in kilobytes (e.g. 256mb = 262144 " "kilobytes)." @@ -1391,7 +1404,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:237 +#: judge/models/problem.py:236 msgid "" "Points awarded for problem completion. Points are displayed with a 'p' " "suffix if partial." @@ -1399,155 +1412,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:243 +#: judge/models/problem.py:242 msgid "allows partial points" msgstr "cho phép điểm thành phần" -#: judge/models/problem.py:247 +#: judge/models/problem.py:246 msgid "allowed languages" msgstr "các ngôn ngữ được cho phép" -#: judge/models/problem.py:248 +#: judge/models/problem.py:247 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:254 +#: judge/models/problem.py:253 msgid "manually managed" msgstr "" -#: judge/models/problem.py:257 +#: judge/models/problem.py:256 msgid "Whether judges should be allowed to manage data or not." msgstr "" -#: judge/models/problem.py:260 +#: judge/models/problem.py:259 msgid "date of publishing" msgstr "Ngày công bố" -#: judge/models/problem.py:265 +#: judge/models/problem.py:264 msgid "" "Doesn't have magic ability to auto-publish due to backward compatibility" msgstr "" -#: judge/models/problem.py:272 +#: judge/models/problem.py:271 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:279 +#: judge/models/problem.py:278 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:286 +#: judge/models/problem.py:285 msgid "problem summary" msgstr "Tóm tắt bài tập" -#: judge/models/problem.py:292 +#: judge/models/problem.py:291 msgid "number of users" msgstr "" -#: judge/models/problem.py:294 +#: judge/models/problem.py:293 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:296 +#: judge/models/problem.py:295 msgid "solve rate" msgstr "Tỉ lệ giải đúng" -#: judge/models/problem.py:305 +#: judge/models/problem.py:304 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:311 +#: judge/models/problem.py:310 msgid "pdf statement" msgstr "Đề bài bằng file pdf" -#: judge/models/problem.py:603 judge/models/problem.py:634 -#: judge/models/problem.py:665 judge/models/runtime.py:161 +#: judge/models/problem.py:598 judge/models/problem.py:619 +#: judge/models/problem.py:650 judge/models/runtime.py:161 msgid "language" msgstr "" -#: judge/models/problem.py:606 +#: judge/models/problem.py:601 msgid "translated name" msgstr "" -#: judge/models/problem.py:608 +#: judge/models/problem.py:603 msgid "translated description" msgstr "" -#: judge/models/problem.py:612 +#: judge/models/problem.py:607 msgid "problem translation" msgstr "" -#: judge/models/problem.py:613 +#: judge/models/problem.py:608 msgid "problem translations" msgstr "" -#: judge/models/problem.py:618 -msgid "clarified problem" -msgstr "" - -#: judge/models/problem.py:620 -msgid "clarification body" -msgstr "" - -#: judge/models/problem.py:622 -msgid "clarification timestamp" -msgstr "" - -#: judge/models/problem.py:653 +#: judge/models/problem.py:638 msgid "language-specific resource limit" msgstr "" -#: judge/models/problem.py:654 +#: judge/models/problem.py:639 msgid "language-specific resource limits" msgstr "" -#: judge/models/problem.py:667 judge/models/submission.py:246 +#: judge/models/problem.py:652 judge/models/submission.py:246 msgid "source code" msgstr "mã nguồn" -#: judge/models/problem.py:671 +#: judge/models/problem.py:656 msgid "language-specific template" msgstr "" -#: judge/models/problem.py:672 +#: judge/models/problem.py:657 msgid "language-specific templates" msgstr "" -#: judge/models/problem.py:679 +#: judge/models/problem.py:664 msgid "associated problem" msgstr "" -#: judge/models/problem.py:685 +#: judge/models/problem.py:670 msgid "publish date" msgstr "" -#: judge/models/problem.py:687 +#: judge/models/problem.py:672 msgid "editorial content" msgstr "nội dung lời giải" -#: judge/models/problem.py:701 +#: judge/models/problem.py:686 msgid "solution" msgstr "lời giải" -#: judge/models/problem.py:702 +#: judge/models/problem.py:687 msgid "solutions" msgstr "lời giải" -#: judge/models/problem.py:707 +#: judge/models/problem.py:692 #, fuzzy #| msgid "point value" msgid "proposed point value" msgstr "điểm" -#: judge/models/problem.py:708 +#: judge/models/problem.py:693 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:722 +#: judge/models/problem.py:707 msgid "The time this vote was cast" msgstr "" -#: judge/models/problem.py:728 +#: judge/models/problem.py:713 msgid "vote" msgstr "" @@ -2473,7 +2474,7 @@ msgid "You already voted." msgstr "Bạn đã vote." #: judge/views/comment.py:155 judge/views/organization.py:813 -#: judge/views/organization.py:954 judge/views/organization.py:1118 +#: judge/views/organization.py:959 judge/views/organization.py:1124 msgid "Edited from site" msgstr "Chỉnh sửa từ web" @@ -2611,7 +2612,7 @@ msgstr "Nhãn kỳ thi: %s" msgid "Issue description" msgstr "Mô tả vấn đề" -#: judge/views/contests.py:1240 +#: judge/views/contests.py:1241 #, python-format msgid "New clarification for %s" msgstr "Thông báo mới cho %s" @@ -2780,7 +2781,7 @@ msgstr "" msgid "The user you are trying to kick is not in organization: %s." msgstr "" -#: judge/views/organization.py:796 judge/views/organization.py:943 +#: judge/views/organization.py:796 judge/views/organization.py:948 #, fuzzy, python-format #| msgid "Editing %s" msgid "Edit %s" @@ -2800,7 +2801,7 @@ msgid "You created too many groups. You can only create at most %d groups" msgstr "" #: judge/views/organization.py:845 judge/views/organization.py:870 -#: judge/views/organization.py:1009 +#: judge/views/organization.py:1014 msgid "Added from site" msgstr "Thêm từ web" @@ -2809,7 +2810,7 @@ msgstr "Thêm từ web" msgid "Add contest" msgstr "Thêm kỳ thi" -#: judge/views/organization.py:904 judge/views/organization.py:1061 +#: judge/views/organization.py:904 judge/views/organization.py:1066 msgid "Permission denied" msgstr "Truy cập bị từ chối" @@ -2819,21 +2820,21 @@ msgstr "Truy cập bị từ chối" 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:998 +#: judge/views/organization.py:1003 #, python-format msgid "Add blog for %s" msgstr "Thêm bài đăng cho %s" -#: judge/views/organization.py:1062 +#: judge/views/organization.py:1067 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:1091 +#: judge/views/organization.py:1099 #, python-format msgid "Edit blog %s" msgstr "Chỉnh sửa %s" -#: judge/views/organization.py:1143 +#: judge/views/organization.py:1150 #, python-format msgid "Pending blogs in %s" msgstr "Bài đang đợi duyệt trong %s" @@ -2989,7 +2990,7 @@ msgstr "Các bài nộp tốt nhất cho bài {0} trong {1}" msgid "A username must contain letters, numbers, or underscores" msgstr "Tên đăng nhập phải chứa ký tự, chữ số, hoặc dấu gạch dưới" -#: judge/views/register.py:43 templates/user/edit-profile.html:120 +#: judge/views/register.py:43 templates/user/edit-profile.html:126 msgid "Preferred language" msgstr "Ngôn ngữ ưa thích" @@ -3201,22 +3202,22 @@ msgstr "j M, Y" msgid "M j, Y, G:i" msgstr "j M, Y, G:i" -#: judge/views/user.py:392 +#: judge/views/user.py:394 msgid "Updated on site" msgstr "Được cập nhật trên web" -#: judge/views/user.py:446 templates/admin/auth/user/change_form.html:14 +#: 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/user/user-tabs.html:10 msgid "Edit profile" msgstr "Chỉnh sửa thông tin" -#: judge/views/user.py:457 templates/user/user-left-sidebar.html:2 +#: judge/views/user.py:460 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:556 +#: judge/views/user.py:559 msgid "Import Users" msgstr "" @@ -3257,7 +3258,7 @@ msgid "View Submissions" msgstr "Xem Bài Nộp" #: templates/admin/judge/problem/change_form.html:18 -#: templates/user/user-base.html:112 +#: templates/user/user-base.html:113 msgid "View submissions" msgstr "Xem bài nộp" @@ -3888,7 +3889,7 @@ msgstr "Khôi phục kết quả" msgid "Disqualify" msgstr "Hủy kết quả" -#: templates/contest/ranking-table.html:56 +#: templates/contest/ranking-table.html:56 templates/user/edit-profile.html:108 msgid "Fullname" msgstr "Tên đầy đủ" @@ -4861,12 +4862,12 @@ msgid "Default language" msgstr "Ngôn ngữ ưa thích" #: templates/registration/registration_form.html:186 -#: templates/user/edit-profile.html:168 +#: templates/user/edit-profile.html:174 msgid "Affiliated organizations" msgstr "Tổ chức bạn muốn tham gia" #: templates/registration/registration_form.html:195 -#: templates/user/edit-profile.html:138 +#: templates/user/edit-profile.html:144 msgid "Notify me about upcoming contests" msgstr "Nhận thông báo về các kỳ thi tương lai" @@ -5272,43 +5273,43 @@ msgstr "Điền vào link này" msgid "It takes some time for admin to approve" msgstr "Ban quản trị sẽ phê duyệt" -#: templates/user/edit-profile.html:107 +#: templates/user/edit-profile.html:113 msgid "Self-description" msgstr "Tự giới thiệu" -#: templates/user/edit-profile.html:115 +#: templates/user/edit-profile.html:121 msgid "Select your closest major city" msgstr "Chọn thành phố gần nhất" -#: templates/user/edit-profile.html:124 +#: templates/user/edit-profile.html:130 msgid "Editor theme" msgstr "Giao diện cho code editor" -#: templates/user/edit-profile.html:129 +#: templates/user/edit-profile.html:135 msgid "Math engine" msgstr "" -#: templates/user/edit-profile.html:153 templates/user/edit-profile.html:154 +#: templates/user/edit-profile.html:159 templates/user/edit-profile.html:160 msgid "Change your avatar" msgstr "Đổi ảnh đại diện" -#: templates/user/edit-profile.html:160 +#: templates/user/edit-profile.html:166 msgid "Change your password" msgstr "Đổi mật khẩu" -#: templates/user/edit-profile.html:177 +#: templates/user/edit-profile.html:183 msgid "Two Factor Authentication is enabled." msgstr "Two Factor Authentication đã được kích hoạt." -#: templates/user/edit-profile.html:184 +#: templates/user/edit-profile.html:190 msgid "Two Factor Authentication is disabled." msgstr "Two Factor Authentication đã được hủy kích hoạt." -#: templates/user/edit-profile.html:189 +#: templates/user/edit-profile.html:195 msgid "User-script" msgstr "" -#: templates/user/edit-profile.html:193 +#: templates/user/edit-profile.html:199 msgid "Update profile" msgstr "Cập nhật thông tin" @@ -5450,27 +5451,27 @@ msgstr "bài nộp" msgid "submissions in the last year" msgstr "bài nộp trong năm qua" -#: templates/user/user-base.html:101 +#: templates/user/user-base.html:102 msgid "Unfollow" msgstr "Bỏ theo dõi" -#: templates/user/user-base.html:104 +#: templates/user/user-base.html:105 msgid "Follow" msgstr "Theo dõi" -#: templates/user/user-base.html:121 +#: templates/user/user-base.html:122 msgid "Send message" msgstr "Nhắn tin" -#: templates/user/user-base.html:130 +#: templates/user/user-base.html:131 msgid "Contests written" msgstr "Số kỳ thi" -#: templates/user/user-base.html:134 +#: templates/user/user-base.html:135 msgid "Min. rating:" msgstr "Min. rating:" -#: templates/user/user-base.html:138 +#: templates/user/user-base.html:139 msgid "Max rating:" msgstr "Max rating:" diff --git a/templates/user/edit-profile.html b/templates/user/edit-profile.html index 532c779..2155258 100644 --- a/templates/user/edit-profile.html +++ b/templates/user/edit-profile.html @@ -104,6 +104,12 @@ {% endif %} +
+
{{ _('Fullname') }}:
+
{{ form_user.first_name }}
+
+
+
{{ _('Self-description') }}:
{{ form.about }}