diff --git a/lms/djangoapps/instructor/views/legacy.py b/lms/djangoapps/instructor/views/legacy.py
index ef6fee897d..f919608527 100644
--- a/lms/djangoapps/instructor/views/legacy.py
+++ b/lms/djangoapps/instructor/views/legacy.py
@@ -175,10 +175,12 @@ def instructor_dashboard(request, course_id):
student = User.objects.get(email=unique_student_identifier)
else:
student = User.objects.get(username=unique_student_identifier)
- msg += "Found a single student. "
+ msg += _u("Found a single student. ")
except User.DoesNotExist:
student = None
- msg += "Couldn't find student with that email or username. "
+ msg += "{text}".format(
+ text=_u("Couldn't find student with that email or username.")
+ )
return msg, student
# process actions from form POST
@@ -216,20 +218,20 @@ def instructor_dashboard(request, course_id):
if action == 'Dump list of enrolled students' or action == 'List enrolled students':
log.debug(action)
datatable = get_student_grade_summary_data(request, course, course_id, get_grades=False, use_offline=use_offline)
- datatable['title'] = 'List of students enrolled in {0}'.format(course_id)
+ datatable['title'] = _u('List of students enrolled in {0}').format(course_id)
track.views.server_track(request, "list-students", {}, page="idashboard")
elif 'Dump Grades' in action:
log.debug(action)
datatable = get_student_grade_summary_data(request, course, course_id, get_grades=True, use_offline=use_offline)
- datatable['title'] = 'Summary Grades of students enrolled in {0}'.format(course_id)
+ datatable['title'] = _u('Summary Grades of students enrolled in {0}').format(course_id)
track.views.server_track(request, "dump-grades", {}, page="idashboard")
elif 'Dump all RAW grades' in action:
log.debug(action)
datatable = get_student_grade_summary_data(request, course, course_id, get_grades=True,
get_raw_scores=True, use_offline=use_offline)
- datatable['title'] = 'Raw Grades of students enrolled in {0}'.format(course_id)
+ datatable['title'] = _u('Raw Grades of students enrolled in {0}').format(course_id)
track.views.server_track(request, "dump-grades-raw", {}, page="idashboard")
elif 'Download CSV of all student grades' in action:
@@ -257,14 +259,22 @@ def instructor_dashboard(request, course_id):
try:
instructor_task = submit_rescore_problem_for_all_students(request, course_id, problem_url)
if instructor_task is None:
- msg += 'Failed to create a background task for rescoring "{0}".'.format(problem_url)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for rescoring "{0}".').format(problem_url)
+ )
else:
track.views.server_track(request, "rescore-all-submissions", {"problem": problem_url, "course": course_id}, page="idashboard")
except ItemNotFoundError as err:
- msg += 'Failed to create a background task for rescoring "{0}": problem not found.'.format(problem_url)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for rescoring "{0}": problem not found.').format(problem_url)
+ )
except Exception as err:
log.error("Encountered exception from rescore: {0}".format(err))
- msg += 'Failed to create a background task for rescoring "{0}": {1}.'.format(problem_url, err.message)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for rescoring "{url}": {message}.').format(
+ url=problem_url, message=err.message
+ )
+ )
elif "Reset ALL students' attempts" in action:
problem_urlname = request.POST.get('problem_for_all_students', '')
@@ -272,15 +282,23 @@ def instructor_dashboard(request, course_id):
try:
instructor_task = submit_reset_problem_attempts_for_all_students(request, course_id, problem_url)
if instructor_task is None:
- msg += 'Failed to create a background task for resetting "{0}".'.format(problem_url)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for resetting "{0}".').format(problem_url)
+ )
else:
track.views.server_track(request, "reset-all-attempts", {"problem": problem_url, "course": course_id}, page="idashboard")
except ItemNotFoundError as err:
log.error('Failure to reset: unknown problem "{0}"'.format(err))
- msg += 'Failed to create a background task for resetting "{0}": problem not found.'.format(problem_url)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for resetting "{0}": problem not found.').format(problem_url)
+ )
except Exception as err:
log.error("Encountered exception from reset: {0}".format(err))
- msg += 'Failed to create a background task for resetting "{0}": {1}.'.format(problem_url, err.message)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for resetting "{url}": {message}.').format(
+ url=problem_url, message=err.message
+ )
+ )
elif "Show Background Task History for Student" in action:
# put this before the non-student case, since the use of "in" will cause this to be missed
@@ -321,12 +339,10 @@ def instructor_dashboard(request, course_id):
course_id=course_id,
module_state_key=module_state_key
)
- msg += "Found module. "
+ msg += _u("Found module. ")
except StudentModule.DoesNotExist as err:
- error_msg = "Couldn't find module with that urlname: {0}. ".format(
- problem_urlname
- )
- msg += "" + error_msg + "({0}) ".format(err) + ""
+ error_msg = _u("Couldn't find module with that urlname: {url}. ").format(url=problem_urlname)
+ msg += "{err_msg} ({err})".format(err_msg=error_msg, err=err)
log.debug(error_msg)
if student_module is not None:
@@ -334,7 +350,9 @@ def instructor_dashboard(request, course_id):
# delete the state
try:
student_module.delete()
- msg += "Deleted student module state for {0}!".format(module_state_key)
+ msg += "{text}".format(
+ text=_u("Deleted student module state for {state}!").format(state=module_state_key)
+ )
event = {
"problem": module_state_key,
"student": unique_student_identifier,
@@ -347,10 +365,10 @@ def instructor_dashboard(request, course_id):
page="idashboard"
)
except Exception as err:
- error_msg = "Failed to delete module state for {0}/{1}. ".format(
- unique_student_identifier, problem_urlname
+ error_msg = _u("Failed to delete module state for {id}/{url}. ").format(
+ id=unique_student_identifier, url=problem_urlname
)
- msg += "" + error_msg + "({0}) ".format(err) + ""
+ msg += "{err_msg} ({err})".format(err_msg=error_msg, err=err)
log.exception(error_msg)
elif "Reset student's attempts" in action:
# modify the problem's state
@@ -370,24 +388,32 @@ def instructor_dashboard(request, course_id):
"course": course_id
}
track.views.server_track(request, "reset-student-attempts", event, page="idashboard")
- msg += "Module state successfully reset!"
- except Exception as err:
- error_msg = "Couldn't reset module state for {0}/{1}. ".format(
- unique_student_identifier, problem_urlname
+ msg += "{text}".format(
+ text=_u("Module state successfully reset!")
)
- msg += "" + error_msg + "({0}) ".format(err) + ""
+ except Exception as err:
+ error_msg = _u("Couldn't reset module state for {id}/{url}. ").format(
+ id=unique_student_identifier, url=problem_urlname
+ )
+ msg += "{err_msg} ({err})".format(err_msg=error_msg, err=err)
log.exception(error_msg)
else:
# "Rescore student's problem submission" case
try:
instructor_task = submit_rescore_problem_for_student(request, course_id, module_state_key, student)
if instructor_task is None:
- msg += 'Failed to create a background task for rescoring "{0}" for student {1}.'.format(module_state_key, unique_student_identifier)
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for rescoring "{key}" for student {id}.').format(
+ key=module_state_key, id=unique_student_identifier
+ )
+ )
else:
track.views.server_track(request, "rescore-student-submission", {"problem": module_state_key, "student": unique_student_identifier, "course": course_id}, page="idashboard")
except Exception as err:
- msg += 'Failed to create a background task for rescoring "{0}": {1}.'.format(
- module_state_key, err.message
+ msg += '{text}'.format(
+ text=_u('Failed to create a background task for rescoring "{key}": {id}.').format(
+ key=module_state_key, id=err.message
+ )
)
log.exception("Encountered exception from rescore: student '{0}' problem '{1}'".format(
unique_student_identifier, module_state_key
@@ -402,7 +428,12 @@ def instructor_dashboard(request, course_id):
if student is not None:
progress_url = reverse('student_progress', kwargs={'course_id': course_id, 'student_id': student.id})
track.views.server_track(request, "get-student-progress-page", {"student": unicode(student), "instructor": unicode(request.user), "course": course_id}, page="idashboard")
- msg += " Progress page for username: {1} with email address: {2}.".format(progress_url, student.username, student.email)
+ msg += "{text}.".format(
+ url=progress_url,
+ text=_u("Progress page for username: {username} with email address: {email}").format(
+ username=student.username, email=student.email
+ )
+ )
#----------------------------------------
# export grades to remote gradebook
@@ -416,7 +447,7 @@ def instructor_dashboard(request, course_id):
allgrades = get_student_grade_summary_data(request, course, course_id, get_grades=True, use_offline=use_offline)
assignments = [[x] for x in allgrades['assignments']]
- datatable = {'header': ['Assignment Name']}
+ datatable = {'header': [_u('Assignment Name')]}
datatable['data'] = assignments
datatable['title'] = action
@@ -440,27 +471,31 @@ def instructor_dashboard(request, course_id):
datatable = {}
aname = request.POST.get('assignment_name', '')
if not aname:
- msg += "Please enter an assignment name"
+ msg += "{text}".format(text=_u("Please enter an assignment name"))
else:
allgrades = get_student_grade_summary_data(request, course, course_id, get_grades=True, use_offline=use_offline)
if aname not in allgrades['assignments']:
- msg += "Invalid assignment name '%s'" % aname
+ msg += "{text}".format(
+ text=_u("Invalid assignment name '{name}'").format(name=aname)
+ )
else:
aidx = allgrades['assignments'].index(aname)
- datatable = {'header': ['External email', aname]}
+ datatable = {'header': [_u('External email'), aname]}
ddata = []
for x in allgrades['students']: # do one by one in case there is a student who has only partial grades
try:
ddata.append([x.email, x.grades[aidx]])
except IndexError:
- log.debug('No grade for assignment %s (%s) for student %s', aidx, aname, x.email)
+ log.debug('No grade for assignment {idx} ({name}) for student {email}'.format(
+ idx=aidx, name=aname, email=x.email)
+ )
datatable['data'] = ddata
- datatable['title'] = 'Grades for assignment "%s"' % aname
+ datatable['title'] = _u('Grades for assignment "{name}"').format(name=aname)
if 'Export CSV' in action:
# generate and return CSV file
- return return_csv('grades %s.csv' % aname, datatable)
+ return return_csv('grades {name}.csv'.format(name=aname), datatable)
elif 'remote gradebook' in action:
file_pointer = StringIO()
@@ -475,12 +510,12 @@ def instructor_dashboard(request, course_id):
elif 'List course staff' in action:
role = CourseStaffRole(course.location)
- datatable = _role_members_table(role, "List of Staff", course_id)
+ datatable = _role_members_table(role, _("List of Staff"), course_id)
track.views.server_track(request, "list-staff", {}, page="idashboard")
elif 'List course instructors' in action and GlobalStaff().has_user(request.user):
role = CourseInstructorRole(course.location)
- datatable = _role_members_table(role, "List of Instructors", course_id)
+ datatable = _role_members_table(role, _("List of Instructors"), course_id)
track.views.server_track(request, "list-instructors", {}, page="idashboard")
elif action == 'Add course staff':
@@ -520,8 +555,8 @@ def instructor_dashboard(request, course_id):
return [u.username, u.email] + [getattr(p, x, '') for x in profkeys]
datatable['data'] = [getdat(u) for u in enrolled_students]
- datatable['title'] = 'Student profile data for course %s' % course_id
- return return_csv('profiledata_%s.csv' % course_id, datatable)
+ datatable['title'] = _u('Student profile data for course {couse_id}').format(course_id = course_id)
+ return return_csv('profiledata_{course_id}.csv'.format(course_id = course_id), datatable)
elif 'Download CSV of all responses to problem' in action:
problem_to_dump = request.POST.get('problem_to_dump', '')
@@ -534,17 +569,19 @@ def instructor_dashboard(request, course_id):
smdat = StudentModule.objects.filter(course_id=course_id,
module_state_key=module_state_key)
smdat = smdat.order_by('student')
- msg += "Found %d records to dump " % len(smdat)
+ msg += _u("Found {num} records to dump.").format(num=smdat)
except Exception as err:
- msg += "Couldn't find module with that urlname. "
- msg += "
%s
" % escape(err)
+ msg += "{text}
{err}
".format(
+ text=_u("Couldn't find module with that urlname."),
+ err=escape(err)
+ )
smdat = []
if smdat:
datatable = {'header': ['username', 'state']}
datatable['data'] = [[x.student.username, x.state] for x in smdat]
- datatable['title'] = 'Student state for problem %s' % problem_to_dump
- return return_csv('student_state_from_%s.csv' % problem_to_dump, datatable)
+ datatable['title'] = _u('Student state for problem {problem}').format(problem = problem_to_dump)
+ return return_csv('student_state_from_{problem}.csv'.format(problem = problem_to_dump), datatable)
elif 'Download CSV of all student anonymized IDs' in action:
students = User.objects.filter(
@@ -560,7 +597,7 @@ def instructor_dashboard(request, course_id):
elif 'List beta testers' in action:
role = CourseBetaTesterRole(course.location)
- datatable = _role_members_table(role, "List of Beta Testers", course_id)
+ datatable = _role_members_table(role, _("List of Beta Testers"), course_id)
track.views.server_track(request, "list-beta-testers", {}, page="idashboard")
elif action == 'Add beta testers':
@@ -699,9 +736,15 @@ def instructor_dashboard(request, course_id):
else:
# If sending the task succeeds, deliver a success message to the user.
if email_to_option == "all":
- email_msg = '
Your email was successfully queued for sending. Please note that for large classes, it may take up to an hour (or more, if other courses are simultaneously sending email) to send all emails.
'
+ text = _u(
+ "Your email was successfully queued for sending. "
+ "Please note that for large classes, it may take up to an hour "
+ "(or more, if other courses are simultaneously sending email) "
+ "to send all emails."
+ )
else:
- email_msg = '
Your email was successfully queued for sending.
'
+ text = _u('Your email was successfully queued for sending.')
+ email_msg = '
{text}
'.format(text=text)
elif "Show Background Email Task History" in action:
message, datatable = get_background_task_table(course_id, task_type='bulk_course_email')
@@ -768,7 +811,11 @@ def instructor_dashboard(request, course_id):
# offline grades?
if use_offline:
- msg += " Grades from %s" % offline_grades_available(course_id)
+ msg += " {text}".format(
+ text=_u("Grades from {course_id}").format(
+ course_id=offline_grades_available(course_id)
+ )
+ )
# generate list of pending background tasks
if settings.FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS'):
@@ -858,17 +905,17 @@ def _do_remote_gradebook(user, course, action, args=None, files=None):
'''
rg = course.remote_gradebook
if not rg:
- msg = "No remote gradebook defined in course metadata"
+ msg = _u("No remote gradebook defined in course metadata")
return msg, {}
rgurl = settings.FEATURES.get('REMOTE_GRADEBOOK_URL', '')
if not rgurl:
- msg = "No remote gradebook url defined in settings.FEATURES"
+ msg = _u("No remote gradebook url defined in settings.FEATURES")
return msg, {}
rgname = rg.get('name', '')
if not rgname:
- msg = "No gradebook name defined in course remote_gradebook metadata"
+ msg = _u("No gradebook name defined in course remote_gradebook metadata")
return msg, {}
if args is None:
@@ -880,19 +927,19 @@ def _do_remote_gradebook(user, course, action, args=None, files=None):
resp = requests.post(rgurl, data=data, verify=False, files=files)
retdict = json.loads(resp.content)
except Exception as err:
- msg = "Failed to communicate with gradebook server at %s " % rgurl
- msg += "Error: %s" % err
- msg += " resp=%s" % resp.content
- msg += " data=%s" % data
+ msg = _u("Failed to communicate with gradebook server at {url}").format(url = rgurl) + " "
+ msg += _u("Error: {err}").format(err = err)
+ msg += " resp={resp}".format(resp = resp.content)
+ msg += " data={data}".format(data = data)
return msg, {}
- msg = '
%s
' % retdict['msg'].replace('\n', ' ')
+ msg = '
{msg}
'.format(msg = retdict['msg'].replace('\n', ' '))
retdata = retdict['data'] # a list of dicts
if retdata:
datatable = {'header': retdata[0].keys()}
datatable['data'] = [x.values() for x in retdata]
- datatable['title'] = 'Remote gradebook response for %s' % action
+ datatable['title'] = _u('Remote gradebook response for {action}').format(action = action)
datatable['retdata'] = retdata
else:
datatable = {}
@@ -911,13 +958,13 @@ def _list_course_forum_members(course_id, rolename, datatable):
Returns message status string to append to displayed message, if role is unknown.
"""
# make sure datatable is set up properly for display first, before checking for errors
- datatable['header'] = ['Username', 'Full name', 'Roles']
- datatable['title'] = 'List of Forum {0}s in course {1}'.format(rolename, course_id)
+ datatable['header'] = [_u('Username'), _u('Full name'), _u('Roles')]
+ datatable['title'] = _u('List of Forum {name}s in course {id}').format(name = rolename, id = course_id)
datatable['data'] = []
try:
role = Role.objects.get(name=rolename, course_id=course_id)
except Role.DoesNotExist:
- return 'Error: unknown rolename "{0}"'.format(rolename)
+ return '' + _u('Error: unknown rolename "{0}"').format(rolename) + ''
uset = role.users.all().order_by('username')
msg = 'Role = {0}'.format(rolename)
log.debug('role={0}'.format(rolename))
@@ -941,11 +988,11 @@ def _update_forum_role_membership(uname, course, rolename, add_or_remove):
try:
user = User.objects.get(username=uname)
except User.DoesNotExist:
- return 'Error: unknown username "{0}"'.format(uname)
+ return '' + _u('Error: unknown username "{0}"').format(uname) + ''
try:
role = Role.objects.get(name=rolename, course_id=course.id)
except Role.DoesNotExist:
- return 'Error: unknown rolename "{0}"'.format(rolename)
+ return '' + _u('Error: unknown rolename "{0}"').format(rolename) + ''
# check whether role already has the specified user:
alreadyexists = role.users.filter(username=uname).exists()
@@ -953,19 +1000,19 @@ def _update_forum_role_membership(uname, course, rolename, add_or_remove):
log.debug('rolename={0}'.format(rolename))
if add_or_remove == FORUM_ROLE_REMOVE:
if not alreadyexists:
- msg = 'Error: user "{0}" does not have rolename "{1}", cannot remove'.format(uname, rolename)
+ msg = '' + _u('Error: user "{0}" does not have rolename "{1}", cannot remove').format(uname, rolename) + ''
else:
user.roles.remove(role)
- msg = 'Removed "{0}" from "{1}" forum role = "{2}"'.format(user, course.id, rolename)
+ msg = '' + _u('Removed "{0}" from "{1}" forum role = "{2}"').format(user, course.id, rolename) + ''
else:
if alreadyexists:
- msg = 'Error: user "{0}" already has rolename "{1}", cannot add'.format(uname, rolename)
+ msg = '' + _u('Error: user "{0}" already has rolename "{1}", cannot add').format(uname, rolename) + ''
else:
if (rolename == FORUM_ROLE_ADMINISTRATOR and not has_access(user, course, 'staff')):
- msg = 'Error: user "{0}" should first be added as staff before adding as a forum administrator, cannot add'.format(uname)
+ msg = '' + _u('Error: user "{0}" should first be added as staff before adding as a forum administrator, cannot add').format(uname) + ''
else:
user.roles.add(role)
- msg = 'Added "{0}" to "{1}" forum role = "{2}"'.format(user, course.id, rolename)
+ msg = '' + _u('Added "{0}" to "{1}" forum role = "{2}"').format(user, course.id, rolename) + ''
return msg
@@ -985,9 +1032,9 @@ def _role_members_table(role, title, course_id):
'title': "{title} in course {course}"
"""
uset = role.users_with_role()
- datatable = {'header': ['Username', 'Full name']}
+ datatable = {'header': [_u('Username'), _u('Full name')]}
datatable['data'] = [[x.username, x.profile.name] for x in uset]
- datatable['title'] = '{0} in course {1}'.format(title, course_id)
+ datatable['title'] = _u('{0} in course {1}').format(title, course_id)
return datatable
@@ -1110,7 +1157,7 @@ def get_student_grade_summary_data(request, course, course_id, get_grades=True,
courseenrollment__is_active=1,
).prefetch_related("groups").order_by('username')
- header = ['ID', 'Username', 'Full Name', 'edX email', 'External email']
+ header = [_u('ID'), _u('Username'), _u('Full Name'), _u('edX email'), _u('External email')]
assignments = []
if get_grades and enrolled_students.count() > 0:
# just to construct the header
@@ -1295,7 +1342,7 @@ def _do_enroll_students(course, course_id, students, overload=False, auto_enroll
datatable = {'header': ['StudentEmail', 'action']}
datatable['data'] = [[x, status[x]] for x in sorted(status)]
- datatable['title'] = 'Enrollment of students'
+ datatable['title'] = _u('Enrollment of students')
def sf(stat):
return [x for x in status if status[x] == stat]
@@ -1368,7 +1415,7 @@ def _do_unenroll_students(course_id, students, email_students=False):
datatable = {'header': ['StudentEmail', 'action']}
datatable['data'] = [[x, status[x]] for x in sorted(status)]
- datatable['title'] = 'Un-enrollment of students'
+ datatable['title'] = _u('Un-enrollment of students')
data = dict(datatable=datatable)
return data
@@ -1551,10 +1598,10 @@ def get_background_task_table(course_id, problem_url=None, student=None, task_ty
if problem_url is None:
msg += 'Failed to find any background tasks for course "{course}".'.format(course=course_id)
elif student is not None:
- template = 'Failed to find any background tasks for course "{course}", module "{problem}" and student "{student}".'
+ template = '' + _u('Failed to find any background tasks for course "{course}", module "{problem}" and student "{student}".') + ''
msg += template.format(course=course_id, problem=problem_url, student=student.username)
else:
- msg += 'Failed to find any background tasks for course "{course}" and module "{problem}".'.format(course=course_id, problem=problem_url)
+ msg += '' + _u('Failed to find any background tasks for course "{course}" and module "{problem}".').format(course=course_id, problem=problem_url) + ''
else:
datatable['header'] = ["Task Type",
"Task Id",
diff --git a/lms/static/coffee/src/staff_grading/staff_grading.coffee b/lms/static/coffee/src/staff_grading/staff_grading.coffee
index 80487f24ee..1035eadb3d 100644
--- a/lms/static/coffee/src/staff_grading/staff_grading.coffee
+++ b/lms/static/coffee/src/staff_grading/staff_grading.coffee
@@ -47,36 +47,36 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t
'''
rubric: '''
Purpose
-
+
-
+
-
+
-
+
Organization
-
+
-
+
-
+
-
+
@@ -98,9 +98,9 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t
max_score: 2 + @mock_cnt % 3
ml_error_info : 'ML accuracy info: ' + @mock_cnt
else
- response =
+ response =
success: false
-
+
else if cmd == 'save_grade'
response =
@@ -109,7 +109,7 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t
# should get back a list of problem_ids, problem_names, num_graded, min_for_ml
else if cmd == 'get_problem_list'
@mock_cnt = 1
- response =
+ response =
success: true
problem_list: [
{location: 'i4x://MITx/3.091x/problem/open_ended_demo1', \
@@ -123,7 +123,7 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t
error: 'Unknown command ' + cmd
if @mock_cnt % 5 == 0
- response =
+ response =
success: true
message: 'No more submissions'
@@ -132,7 +132,7 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t
response =
success: false
error: 'An error for testing'
-
+
return response
@@ -190,7 +190,7 @@ class @StaffGrading
@question_header = $('.question-header')
@question_header.click @collapse_question
@collapse_question()
-
+
# model state
@state = state_no_data
@submission_id = null
@@ -266,7 +266,7 @@ class @StaffGrading
@render_view()
@scroll_to_top()
-
+
get_next_submission: (location) ->
@location = location
@list_view = false
@@ -296,7 +296,7 @@ class @StaffGrading
submission_id: @submission_id
location: @location
submission_flagged: @flag_submission_checkbox.is(':checked')
- @gentle_alert "Grades saved. Fetching the next submission to grade."
+ @gentle_alert gettext("Grades saved. Fetching the next submission to grade.")
@backend.post('save_grade', data, @ajax_callback)
gentle_alert: (msg) =>
@@ -344,13 +344,13 @@ class @StaffGrading
# clear the problem list and breadcrumbs
@problem_list.html('''