         if @rowFilter(student)
           @rows.push(student)
           @calculateStudentGrade(student)
-          sortables[student.id] = @sortFn(student)
 
       @rows.sort (a, b) ->
-        if sortables[a.id] < sortables[b.id] then -1
-        else if sortables[a.id] > sortables[b.id] then 1
-        else 0
+        a.sortable_name.localeCompare(b.sortable_name,
+          window.I18n.locale,
+          { sensitivity: 'accent', ignorePunctuation: true, numeric: true})
 
       student.row = i for student, i in @rows
       @multiGrid.invalidate()

    # a full redraw
    buildRows: =>
      @rows.length = 0
      sortables = {}

      for id, column of @gradeGrid.getColumns() when ''+column.object?.submission_types is "attendance"
        column.unselectable = !@show_attendance

      @chunk_start = 0
      @students = {}
      @rows = []
      @assignmentsToHide = userSettings.contextGet('hidden_columns') || []
      @sectionToShow = userSettings.contextGet 'grading_show_only_section'
      @show_attendance = userSettings.contextGet 'show_attendance'
