From 389d4b4f07256a21d70908f870ff9c13c48137f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=A7=D0=B5?= <39742182+Dmi4er4@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:06:54 +0300 Subject: [PATCH] Completed (#879) --- .../admission/locale/ru/LC_MESSAGES/django.po | 2 +- .../htmlpages/locale/ru/LC_MESSAGES/django.po | 2 +- apps/learning/gradebook/data.py | 13 +- apps/learning/gradebook/tests.py | 10 +- apps/learning/gradebook/views.py | 18 ++- apps/projects/locale/ru/LC_MESSAGES/django.po | 2 +- apps/surveys/locale/ru/LC_MESSAGES/django.po | 2 +- .../locale/ru/LC_MESSAGES/django.po | 2 +- .../locale/ru/LC_MESSAGES/django.po | 2 +- lms/jinja2/lms/gradebook/gradebook_form.html | 13 +- locale/ru/LC_MESSAGES/django.po | 118 ++++++++++-------- 11 files changed, 107 insertions(+), 77 deletions(-) diff --git a/apps/admission/locale/ru/LC_MESSAGES/django.po b/apps/admission/locale/ru/LC_MESSAGES/django.po index f3c3156ba..0f8061d07 100644 --- a/apps/admission/locale/ru/LC_MESSAGES/django.po +++ b/apps/admission/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" "PO-Revision-Date: 2024-07-23 17:04+0000\n" "Last-Translator: Дмитрий Чернушевич \n" "Language-Team: LANGUAGE \n" diff --git a/apps/htmlpages/locale/ru/LC_MESSAGES/django.po b/apps/htmlpages/locale/ru/LC_MESSAGES/django.po index 6e066b1c6..a3d59e071 100644 --- a/apps/htmlpages/locale/ru/LC_MESSAGES/django.po +++ b/apps/htmlpages/locale/ru/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" "PO-Revision-Date: 2015-03-18 08:34+0000\n" "Last-Translator: Jannis Leidel \n" "Language-Team: Russian (http://www.transifex.com/projects/p/django/language/" diff --git a/apps/learning/gradebook/data.py b/apps/learning/gradebook/data.py index 816b99fee..574e94e5c 100644 --- a/apps/learning/gradebook/data.py +++ b/apps/learning/gradebook/data.py @@ -35,6 +35,10 @@ def id(self): def enrollment_id(self): return self._enrollment.pk + @property + def enrollment_type_display(self): + return self._enrollment.get_type_display() + @property def final_grade(self): return self._enrollment.grade @@ -61,12 +65,15 @@ def student_group(self) -> Optional[StudentGroup]: def student_type(self) -> str: return self.student_profile.type + @property + def year_of_curriculum(self) -> int: + year_of_curriculum = self.student_profile.year_of_curriculum + return year_of_curriculum if year_of_curriculum else None + @property def invitation(self) -> Optional[str]: invitation = self.student_profile.invitation - if invitation: - return invitation.name - return None + return invitation.name if invitation else None @dataclass diff --git a/apps/learning/gradebook/tests.py b/apps/learning/gradebook/tests.py index a279f10ef..d087e97dc 100644 --- a/apps/learning/gradebook/tests.py +++ b/apps/learning/gradebook/tests.py @@ -327,12 +327,14 @@ def test_empty_gradebook_view(client): field = 'final_grade_{}'.format(enrollment.pk) assert field in response.context_data['form'].fields assert len(students) == len(response.context_data['form'].fields) - assert smart_bytes(_("Students") + f": {len(students)}") in response.content - assert smart_bytes(_("Students and listeners") + f": {len(students)}") in response.content + assert smart_bytes(_("Learners") + f": {len(students)}") in response.content + assert smart_bytes(_("Total students") + f": {len(students)}") in response.content + assert smart_bytes(_("Listeners") + ": 0") in response.content EnrollmentFactory.create(course=co1, type=EnrollmentTypes.LECTIONS_ONLY) response = client.get(co1.get_gradebook_url()) - assert smart_bytes(_("Students") + f": {len(students)}") in response.content - assert smart_bytes(_("Students and listeners") + f": {len(students) + 1}") in response.content + assert smart_bytes(_("Learners") + f": {len(students)}") in response.content + assert smart_bytes(_("Total students") + f": {len(students) + 1}") in response.content + assert smart_bytes(_("Listeners") + ": 1") in response.content for co in [co1, co2]: url = co.get_gradebook_url() assert smart_bytes(url) in response.content diff --git a/apps/learning/gradebook/views.py b/apps/learning/gradebook/views.py index f13f44501..f8d5429e8 100644 --- a/apps/learning/gradebook/views.py +++ b/apps/learning/gradebook/views.py @@ -7,7 +7,7 @@ from django.contrib import messages from django.core.exceptions import PermissionDenied, ValidationError -from django.db.models import Prefetch +from django.db.models import Prefetch, Q, Count from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect from django.utils.datastructures import MultiValueDictKeyError @@ -49,7 +49,7 @@ "ImportAssignmentScoresByYandexLoginView" ] -from learning.settings import AssignmentScoreUpdateSource, EnrollmentGradeUpdateSource +from learning.settings import AssignmentScoreUpdateSource, EnrollmentGradeUpdateSource, EnrollmentTypes from users.models import StudentTypes, User @@ -202,6 +202,12 @@ def get_context_data(self, form: BaseGradebookForm, .select_related('semester', 'meta_course', 'main_branch')) context['course_offering_list'] = courses context['user_type'] = self.user_type + enrollments_summary = Enrollment.active.filter(course=self.course).aggregate( + total_listeners=Count('id', filter=Q(type=EnrollmentTypes.LECTIONS_ONLY)), + total_learners=Count('id', filter=Q(type=EnrollmentTypes.REGULAR)) + ) + context['total_listeners'] = enrollments_summary['total_listeners'] + context['total_learners'] = enrollments_summary['total_learners'] return context @@ -224,12 +230,14 @@ def get(self, request, *args, **kwargs): writer = csv.writer(response) headers = [ - "id", + "Профиль на сайте", _("Last name"), _("First name"), _("Patronymic"), _("Branch"), _("Role"), + "Тип записи", + _("CSCUser|Curriculum year"), _("Group"), _("Yandex Login"), _("Telegram Username"), @@ -261,12 +269,14 @@ def get(self, request, *args, **kwargs): gitlab_manytask = connected_providers.get('gitlab-manytask') writer.writerow( itertools.chain( - [gradebook_student.enrollment_id, + [student.get_absolute_url(), student.last_name, student.first_name, student.patronymic, student_profile.branch.name, student_profile.get_type_display(), + gradebook_student.enrollment_type_display, + gradebook_student.year_of_curriculum, (student_group and student_group.name) or "-", student.yandex_login, student.telegram_username, diff --git a/apps/projects/locale/ru/LC_MESSAGES/django.po b/apps/projects/locale/ru/LC_MESSAGES/django.po index 6d4c2fe32..f333cb2d1 100644 --- a/apps/projects/locale/ru/LC_MESSAGES/django.po +++ b/apps/projects/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" "PO-Revision-Date: 2022-02-21 15:24+0000\n" "Last-Translator: Сергей Жеревчук \n" "Language-Team: LANGUAGE \n" diff --git a/apps/surveys/locale/ru/LC_MESSAGES/django.po b/apps/surveys/locale/ru/LC_MESSAGES/django.po index 32853f6ab..1860abcae 100644 --- a/apps/surveys/locale/ru/LC_MESSAGES/django.po +++ b/apps/surveys/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" "PO-Revision-Date: 2019-10-31 16:30+0000\n" "Last-Translator: b' '\n" "Language-Team: LANGUAGE \n" diff --git a/compscicenter_ru/locale/ru/LC_MESSAGES/django.po b/compscicenter_ru/locale/ru/LC_MESSAGES/django.po index 1152789ce..f1ee4e1be 100644 --- a/compscicenter_ru/locale/ru/LC_MESSAGES/django.po +++ b/compscicenter_ru/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" "PO-Revision-Date: 2020-02-03 16:52+0000\n" "Last-Translator: b' '\n" "Language-Team: LANGUAGE \n" diff --git a/compsciclub_ru/locale/ru/LC_MESSAGES/django.po b/compsciclub_ru/locale/ru/LC_MESSAGES/django.po index 6c9adf1dd..339875411 100644 --- a/compsciclub_ru/locale/ru/LC_MESSAGES/django.po +++ b/compsciclub_ru/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" "PO-Revision-Date: 2020-09-09 04:43+0000\n" "Last-Translator: b' '\n" "Language-Team: LANGUAGE \n" diff --git a/lms/jinja2/lms/gradebook/gradebook_form.html b/lms/jinja2/lms/gradebook/gradebook_form.html index ed29485a9..047f919a4 100644 --- a/lms/jinja2/lms/gradebook/gradebook_form.html +++ b/lms/jinja2/lms/gradebook/gradebook_form.html @@ -88,11 +88,6 @@

{% endfor %} -
-

-
{% trans %}Students and listeners{% endtrans %}: {{ - gradebook.course.learners_count + gradebook.course.listeners_count }}
-


@@ -150,7 +145,7 @@

{% if gradebook_student.student_profile.year_of_curriculum %} - {{ gradebook_student.student_profile.year_of_curriculum }} + {{ gradebook_student.year_of_curriculum }} {% endif %}
@@ -178,7 +173,11 @@

-
{% trans %}Students{% endtrans %}: {{ gradebook.students|length }}
+
+ {% trans %}Learners{% endtrans %}: {{ total_learners }}
+ {% trans %}Listeners{% endtrans %}: {{ total_listeners }}
+ {% trans %}Total students{% endtrans %}: {{ total_listeners + total_learners }} +
{% if gradebook.assignments %} diff --git a/locale/ru/LC_MESSAGES/django.po b/locale/ru/LC_MESSAGES/django.po index 81d96dc0c..ffbd0d72f 100644 --- a/locale/ru/LC_MESSAGES/django.po +++ b/locale/ru/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-04 09:52+0000\n" -"PO-Revision-Date: 2024-09-04 09:52+0000\n" -"Last-Translator: Имя Чернушевич \n" +"POT-Creation-Date: 2024-09-16 15:19+0000\n" +"PO-Revision-Date: 2024-09-16 15:20+0000\n" +"Last-Translator: Дмитрий Чернушевич \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" @@ -272,7 +272,7 @@ msgstr "Общее описание, правила обучения" #: apps/core/models.py:291 apps/courses/models.py:61 #: apps/courses/models.py:235 apps/courses/models.py:699 -#: apps/learning/admin.py:81 apps/learning/gradebook/views.py:231 +#: apps/learning/admin.py:81 apps/learning/gradebook/views.py:237 #: apps/learning/models.py:78 apps/learning/models.py:1086 #: apps/library/models.py:66 apps/staff/filters.py:130 #: apps/staff/filters.py:205 apps/staff/views.py:857 apps/staff/views.py:920 @@ -337,7 +337,7 @@ msgstr "Имя" #: apps/core/models.py:373 apps/universities/models.py:51 #: apps/universities/models.py:70 apps/users/models.py:830 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:172 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:176 msgid "University" msgstr "Университет" @@ -890,7 +890,7 @@ msgstr "Ручной" #: apps/courses/models.py:236 apps/learning/models.py:85 #: apps/learning/models.py:153 apps/learning/models.py:392 #: apps/learning/models.py:571 apps/users/models.py:911 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:186 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:190 msgid "Invitation" msgstr "Приглашение" @@ -1486,7 +1486,7 @@ msgstr "Посылка к заданию" #: apps/users/models.py:1068 lms/jinja2/lms/staff/status_log.html:21 #: lms/jinja2/lms/staff/student_search.html:69 #: lms/jinja2/lms/user_profile/_tab_student_profiles.html:52 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:75 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:79 msgid "Status" msgstr "Статус" @@ -1597,7 +1597,7 @@ msgstr "Обучение" #: apps/learning/forms.py:62 apps/learning/models.py:854 #: apps/users/models.py:894 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:195 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:199 msgid "Comment" msgstr "Комментарий" @@ -1734,16 +1734,19 @@ msgstr "Заголовок '{}' не найден" msgid "Invalid score format '{}'" msgstr "Неверный формат оценки '{}'" -#: apps/learning/gradebook/tests.py:100 apps/learning/gradebook/views.py:228 +#: apps/learning/gradebook/tests.py:100 apps/learning/gradebook/views.py:234 msgid "Last name" msgstr "Фамилия" -#: apps/learning/gradebook/tests.py:330 -#: lms/jinja2/lms/gradebook/gradebook_form.html:124 -#: lms/jinja2/lms/gradebook/gradebook_form.html:181 +#: apps/learning/gradebook/tests.py:330 apps/learning/gradebook/tests.py:334 +#: lms/jinja2/lms/gradebook/gradebook_form.html:119 msgid "Students" msgstr "Студенты" +#: apps/learning/gradebook/tests.py:331 apps/learning/gradebook/tests.py:335 +msgid "Students and listeners" +msgstr "Студенты и слушатели" + #: apps/learning/gradebook/views.py:144 msgid "" "Внимание, часть данных не была сохранена!
В процессе " @@ -1759,55 +1762,55 @@ msgstr "Ведомость успешно сохранена." msgid "Gradebook hasn't been saved." msgstr "Ведомость не была сохранена." -#: apps/learning/gradebook/views.py:229 +#: apps/learning/gradebook/views.py:235 msgid "First name" msgstr "Имя" -#: apps/learning/gradebook/views.py:230 +#: apps/learning/gradebook/views.py:236 msgid "Patronymic" msgstr "Отчество" -#: apps/learning/gradebook/views.py:232 apps/users/models.py:181 +#: apps/learning/gradebook/views.py:238 apps/users/models.py:181 msgid "Role" msgstr "Роль" -#: apps/learning/gradebook/views.py:233 apps/learning/models.py:246 +#: apps/learning/gradebook/views.py:239 apps/learning/models.py:246 #: apps/learning/models.py:268 msgid "Group" msgstr "Группа" -#: apps/learning/gradebook/views.py:234 apps/users/models.py:260 +#: apps/learning/gradebook/views.py:240 apps/users/models.py:260 #: apps/users/models.py:369 msgid "Yandex Login" msgstr "Логин на Яндексе" -#: apps/learning/gradebook/views.py:235 +#: apps/learning/gradebook/views.py:241 msgid "Telegram Username" msgstr "Telegram" -#: apps/learning/gradebook/views.py:237 apps/users/models.py:387 +#: apps/learning/gradebook/views.py:243 apps/users/models.py:387 msgid "Codeforces Handle" msgstr "" -#: apps/learning/gradebook/views.py:240 +#: apps/learning/gradebook/views.py:246 msgid "Final grade" msgstr "Итоговая оценка" -#: apps/learning/gradebook/views.py:241 -#: lms/jinja2/lms/gradebook/gradebook_form.html:128 +#: apps/learning/gradebook/views.py:247 +#: lms/jinja2/lms/gradebook/gradebook_form.html:123 msgid "Total" msgstr "Сумма баллов" -#: apps/learning/gradebook/views.py:316 +#: apps/learning/gradebook/views.py:322 msgid "Imported records for assignment {} - {} out of {}" msgstr "Импортировано оценок за задание {} - {} из {} найденных" -#: apps/learning/gradebook/views.py:320 +#: apps/learning/gradebook/views.py:326 msgid "Not all records were processed. Import stopped by an error:
" msgstr "" "Не все записи были обработаны. Импорт прекращён из-за ошибки:
" -#: apps/learning/gradebook/views.py:394 +#: apps/learning/gradebook/views.py:400 msgid "" "Успешно импортированы записи для курса {} - для {} из {} строк с верными " "идентификаторами студентов." @@ -1985,8 +1988,8 @@ msgid "Satisfactory" msgstr "Удовлетворительно" #: apps/learning/models.py:447 apps/users/models.py:1021 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:76 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:107 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:80 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:111 msgid "Entry Added" msgstr "Дата изменения" @@ -2714,7 +2717,7 @@ msgstr "" #: apps/staff/filters.py:116 apps/staff/views.py:858 apps/users/models.py:1100 #: lms/jinja2/lms/staff/academic_discipline_log.html:21 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:106 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:110 msgid "Field of study" msgstr "Направление обучения" @@ -2803,6 +2806,7 @@ msgid "AreaOfStudy|description" msgstr "Описание" #: apps/study_programs/models.py:37 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:68 msgid "Area of study" msgstr "Направление обучения" @@ -2832,7 +2836,7 @@ msgid "StudyProgram|description" msgstr "Доп. описание" #: apps/study_programs/models.py:80 apps/study_programs/models.py:113 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:136 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:140 msgid "Study Program" msgstr "Учебная программа" @@ -3143,61 +3147,61 @@ msgstr "Факультет" msgid "Faculties" msgstr "Факультеты" -#: apps/users/admin.py:58 +#: apps/users/admin.py:59 msgid "Create Student Profile before adding student permissions" msgstr "Требуется создать профиль студента перед выдачей роли студента." -#: apps/users/admin.py:63 +#: apps/users/admin.py:64 msgid "Selected branch does not match branch {} from the student profile" msgstr "" -#: apps/users/admin.py:69 +#: apps/users/admin.py:70 msgid "You have to specify branch for user before adding teacher permissions" msgstr "" "Укажите отделение у пользователя перед тем, как выдать ему права " "преподавателя." -#: apps/users/admin.py:73 +#: apps/users/admin.py:74 msgid "Assign branch relative to the selected site" msgstr "" -#: apps/users/admin.py:83 apps/users/admin.py:136 +#: apps/users/admin.py:84 apps/users/admin.py:137 msgid "Permissions" msgstr "Разрешения" -#: apps/users/admin.py:131 +#: apps/users/admin.py:132 msgid "Personal info" msgstr "Персональная информация" -#: apps/users/admin.py:138 +#: apps/users/admin.py:139 msgid "External services" msgstr "Внешние сервисы" -#: apps/users/admin.py:142 +#: apps/users/admin.py:143 msgid "Important dates" msgstr "Важные даты" -#: apps/users/admin.py:208 +#: apps/users/admin.py:209 msgid "" "Regular student profile already exists for this admission campaign year." msgstr "" "Профиль регулярного студента уже существует для связанной кампании по " "набору." -#: apps/users/admin.py:244 +#: apps/users/admin.py:243 msgid "Official Student Info" msgstr "Официальный студент" -#: apps/users/admin.py:248 +#: apps/users/admin.py:247 msgid "Curator's note" msgstr "Заметка куратора" -#: apps/users/admin.py:277 apps/users/forms.py:25 apps/users/models.py:346 +#: apps/users/admin.py:280 apps/users/forms.py:25 apps/users/models.py:346 #: lms/jinja2/lms/user_profile/_tab_account.html:154 msgid "Date of Birth" msgstr "Дата рождения" -#: apps/users/admin.py:296 +#: apps/users/admin.py:299 msgid "Anytask" msgstr "" @@ -3447,7 +3451,7 @@ msgid "Priority" msgstr "Приоритет" #: apps/users/models.py:803 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:176 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:180 msgid "Magistracy" msgstr "Магистратура" @@ -3461,7 +3465,7 @@ msgid "CSCUser|Curriculum year" msgstr "Год программы обучения" #: apps/users/models.py:839 -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:180 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:184 msgid "StudentInfo|University year" msgstr "Курс при поступлении" @@ -3909,15 +3913,23 @@ msgstr "Импортировать баллы по Яндекс-логину" msgid "Marks sheet" msgstr "Ведомость" -#: lms/jinja2/lms/gradebook/gradebook_form.html:93 -#| msgid "Student|admission year" -msgid "Students and listeners" -msgstr "Всего студентов и слушателей" - -#: lms/jinja2/lms/gradebook/gradebook_form.html:126 +#: lms/jinja2/lms/gradebook/gradebook_form.html:121 msgid "Grades" msgstr "Итоговая оценка" +#: lms/jinja2/lms/gradebook/gradebook_form.html:177 +#| msgid "Listeners" +msgid "Learners" +msgstr "Сдающие" + +#: lms/jinja2/lms/gradebook/gradebook_form.html:178 +msgid "Listeners" +msgstr "Слушатели" + +#: lms/jinja2/lms/gradebook/gradebook_form.html:179 +msgid "Total students" +msgstr "Всего" + #: lms/jinja2/lms/layouts/_top_menu.html:34 #: lms/jinja2/lms/user_profile/user_detail.html:6 #: lms/templates/_top_menu.html:37 @@ -4086,15 +4098,15 @@ msgstr "Онлайн-курсы" msgid "Email" msgstr "Email" -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:69 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:73 msgid "Status history" msgstr "История статусов" -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:100 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:104 msgid "Areas of study history" msgstr "История направлений" -#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:132 +#: lms/jinja2/lms/user_profile/_tab_student_profiles.html:136 msgid "Curriculum year" msgstr "Год программы обучения"