-

${_("Welcome, {0}!".format(user.username))}

+

${_("Welcome, {0}!").format(user.username)}

%if len(courses) > 0:
diff --git a/lms/djangoapps/instructor/views/legacy.py b/lms/djangoapps/instructor/views/legacy.py index 0788b05cc8..5434e5f5ef 100644 --- a/lms/djangoapps/instructor/views/legacy.py +++ b/lms/djangoapps/instructor/views/legacy.py @@ -172,10 +172,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 @@ -213,20 +215,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: @@ -254,14 +256,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', '') @@ -269,15 +279,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 @@ -318,12 +336,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: @@ -331,7 +347,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, @@ -344,10 +362,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 @@ -367,24 +385,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 @@ -399,7 +425,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 @@ -413,7 +444,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 @@ -437,27 +468,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() @@ -472,12 +507,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': @@ -517,8 +552,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', '') @@ -531,17 +566,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( @@ -557,7 +594,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': @@ -696,9 +733,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') @@ -765,7 +808,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'): @@ -855,17 +902,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: @@ -877,19 +924,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 = {} @@ -908,13 +955,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)) @@ -938,11 +985,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() @@ -950,19 +997,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 @@ -982,9 +1029,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 @@ -1107,7 +1154,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 @@ -1292,7 +1339,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] @@ -1365,7 +1412,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 @@ -1548,10 +1595,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: ''' - + - + - + - + - + - + - + - + @@ -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(''' - - - - - + + + + + - ''') + ''') @breadcrumbs.html('') @problem_list_container.toggle(@list_view) if @backend.mock_backend @@ -364,14 +364,14 @@ class @StaffGrading # only show the grading elements when we are not in list view or the state # is invalid - show_grading_elements = !(@list_view || @state == state_error || + show_grading_elements = !(@list_view || @state == state_error || @state == state_no_data) @prompt_wrapper.toggle(show_grading_elements) @submission_wrapper.toggle(show_grading_elements) @grading_wrapper.toggle(show_grading_elements) @meta_info_wrapper.toggle(show_grading_elements) @action_button.hide() - + if @list_view @render_list() else @@ -410,23 +410,27 @@ class @StaffGrading show_action_button = true problem_list_link = $('').attr('href', 'javascript:void(0);') - .append("< Back to problem list") + .append("< " + gettext("Back to problem list")) .click => @get_problem_list() # set up the breadcrumbing @breadcrumbs.append(problem_list_link) - + if @state == state_error - @set_button_text('Try loading again') + @set_button_text(gettext('Try loading again')) show_action_button = true else if @state == state_grading @ml_error_info_container.html(@ml_error_info) + available = _.template(gettext("<%= num %> available"), {num: @num_pending}) + graded = _.template(gettext("<%= num %> graded"), {num: @num_graded}) + needed = _.template(gettext("<%= num %> more needed to start ML"), + {num: Math.max(@min_for_ml - @num_graded, 0)}) meta_list = $("
") - meta_list.append("
#{@num_pending} available |
") - meta_list.append("
#{@num_graded} graded |
") - meta_list.append("
#{Math.max(@min_for_ml - @num_graded, 0)} more needed to start ML

") + .append("
#{available}
") + .append("
#{graded}
") + .append("
#{needed}
") @problem_meta_info.html(meta_list) @prompt_container.html(@prompt) @@ -437,24 +441,24 @@ class @StaffGrading show_action_button = false @setup_score_selection() - + else if @state == state_graded - @set_button_text('Submit') + @set_button_text(gettext('Submit')) show_action_button = false else if @state == state_no_data @message_container.html(@message) - @set_button_text('Re-check for submissions') + @set_button_text(gettext('Re-check for submissions')) else - @error('System got into invalid state ' + @state) + @error(_.template(gettext('System got into invalid state: <%= state %>'), {state: @state})) @submit_button.toggle(show_submit_button) @action_button.toggle(show_action_button) submit: (event) => event.preventDefault() - + if @state == state_error @get_next_submission(@location) else if @state == state_graded @@ -462,17 +466,17 @@ class @StaffGrading else if @state == state_no_data @get_next_submission(@location) else - @error('System got into invalid state for submission: ' + @state) + @error(gettext('System got into invalid state for submission: ') + @state) collapse_question: () => @prompt_container.slideToggle() @prompt_container.toggleClass('open') - if @question_header.text() == "(Hide)" + if @question_header.text() == gettext("(Hide)") Logger.log 'staff_grading_hide_question', {location: @location} - new_text = "(Show)" + new_text = gettext("(Show)") else Logger.log 'staff_grading_show_question', {location: @location} - new_text = "(Hide)" + new_text = gettext("(Hide)") @question_header.text(new_text) scroll_to_top: () => diff --git a/lms/templates/combinedopenended/combined_open_ended.html b/lms/templates/combinedopenended/combined_open_ended.html index c8f4c029dc..5b0f94f6bb 100644 --- a/lms/templates/combinedopenended/combined_open_ended.html +++ b/lms/templates/combinedopenended/combined_open_ended.html @@ -58,7 +58,7 @@
% if is_staff:
- Staff Warning: Please note that if you submit a duplicate of text that has already been submitted for grading, it will not show up in the staff grading view. It will be given the same grade that the original received automatically, and will be returned within 30 minutes if the original is already graded, or when the original is graded if not. + ${_("Staff Warning: Please note that if you submit a duplicate of text that has already been submitted for grading, it will not show up in the staff grading view. It will be given the same grade that the original received automatically, and will be returned within 30 minutes if the original is already graded, or when the original is graded if not.")}
% endif diff --git a/lms/templates/combinedopenended/openended/open_ended_rubric.html b/lms/templates/combinedopenended/openended/open_ended_rubric.html index 1d73647ec7..199f199245 100644 --- a/lms/templates/combinedopenended/openended/open_ended_rubric.html +++ b/lms/templates/combinedopenended/openended/open_ended_rubric.html @@ -1,4 +1,5 @@ <%! from django.utils.translation import ugettext as _ %> +<%! from django.utils.translation import ungettext%> <% from random import randint %>
@@ -6,7 +7,7 @@
${_("Rubric")} -

Select the criteria you feel best represents this submission in each category.

+

${_("Select the criteria you feel best represents this submission in each category.")}

% for i in range(len(categories)): <% category = categories[i] %> @@ -22,7 +23,14 @@ % endif % endfor diff --git a/lms/templates/courseware/course_navigation.html b/lms/templates/courseware/course_navigation.html index 0be247ed89..05189edfd1 100644 --- a/lms/templates/courseware/course_navigation.html +++ b/lms/templates/courseware/course_navigation.html @@ -1,4 +1,5 @@ ## mako +<%! from django.utils.translation import ugettext as _ %> <%page args="active_page=None" /> <% diff --git a/lms/templates/courseware/gradebook.html b/lms/templates/courseware/gradebook.html index 8828721555..4b1175590b 100644 --- a/lms/templates/courseware/gradebook.html +++ b/lms/templates/courseware/gradebook.html @@ -45,7 +45,7 @@
diff --git a/lms/templates/courseware/progress.html b/lms/templates/courseware/progress.html index 1c099119c0..6cb80e43e2 100644 --- a/lms/templates/courseware/progress.html +++ b/lms/templates/courseware/progress.html @@ -59,7 +59,7 @@ ${progress_graph.body(grade_summary, course.grade_cutoffs, "grade-detail-graph", ${ section['display_name'] } %if total > 0 or earned > 0: - ${"{0:.3n} of {1:.3n} possible points".format( float(earned), float(total) )} + ${_("{earned:.3n} of {total:.3n} possible points").format( earned = float(earned), total = float(total) )} %endif %if total > 0 or earned > 0: @@ -72,7 +72,7 @@ ${progress_graph.body(grade_summary, course.grade_cutoffs, "grade-detail-graph", %if section.get('due') is not None: <% formatted_string = get_time_display(section['due'], course.due_date_display_format) - due_date = '' if len(formatted_string)==0 else _('due {date}'.format(date=formatted_string)) + due_date = '' if len(formatted_string)==0 else _(u'due {date}').format(date=formatted_string) %> ${due_date} @@ -82,7 +82,7 @@ ${progress_graph.body(grade_summary, course.grade_cutoffs, "grade-detail-graph",
%if len(section['scores']) > 0: -

${ "Problem Scores: " if section['graded'] else "Practice Scores: "}

+

${ _("Problem Scores: ") if section['graded'] else _("Practice Scores: ")}

    %for score in section['scores']:
  1. ${"{0:.3n}/{1:.3n}".format(float(score.earned),float(score.possible))}
Purpose
Organization
Problem NameGradedAvailable to GradeRequiredProgress''' + gettext("Problem Name") + '''''' + gettext("Graded") + '''''' + gettext("Available to Grade") + '''''' + gettext("Required") + '''''' + gettext("Progress") + '''
- +