Files
NextEdu/src/shared/i18n/messages/en/exam-homework.json
SpecialX d1e4ccbf98 refactor(exams): redesign exam creation page with 3-mode selector
- Replace cramped 3-column grid with vertical layout
- Add 3 large selectable cards at top: Manual / AI / Rich Text Editor
- Rich Text Editor mode redirects to /teacher/exams/new
- Basic info form is now always visible (not hidden in AI mode)
- Exam mode config always visible at bottom
- Add "rich" to mode enum with validation bypass
- Replace all hardcoded English/Chinese strings with i18n keys
- Add 20+ new i18n keys to zh-CN and en (mode labels, descriptions, actions)
- Clean up mixed-language UI text
2026-06-24 13:23:13 +08:00

528 lines
20 KiB
JSON

{
"exam": {
"list": {
"title": "Exams",
"create": "Create Exam",
"empty": "No exams yet",
"emptyFiltered": "No exams match your filters",
"emptyDescription": "Create your first exam to start assigning and grading.",
"emptyFilteredDescription": "Try clearing filters or adjusting keywords.",
"clearFilters": "Clear filters",
"showing": "Showing",
"examsUnit": "exams",
"searchPlaceholder": "Search exams..."
},
"form": {
"createTitle": "Create Exam",
"createDescription": "Configure a new exam for your classes.",
"buildTitle": "Build Exam",
"buildDescription": "Assemble questions for your exam.",
"title": "Exam Title",
"subject": "Subject",
"grade": "Grade",
"difficulty": "Difficulty",
"totalScore": "Total Score",
"durationMin": "Duration (minutes)",
"scheduledAt": "Scheduled At",
"questions": "Questions",
"missingSubjectOrGrade": "Missing subject or grade configuration",
"previewBeforeCreate": "Please preview and confirm before creating",
"createSuccess": "Exam draft created",
"redirecting": "Redirecting to exam builder...",
"createFailed": "Failed to create exam",
"loadFormFailed": "Failed to load form data",
"loadSubjectsFailed": "Failed to load subjects",
"loadGradesFailed": "Failed to load grades",
"creating": "Creating...",
"detailsTitle": "Exam Details",
"detailsDesc": "Define the core information for your exam.",
"titlePlaceholder": "e.g. Midterm Mathematics Exam",
"subjectPlaceholder": "Select subject",
"gradePlaceholder": "Select grade level",
"difficultyPlaceholder": "Select level",
"difficultyLevel1": "Level 1 (Easy)",
"difficultyLevel2": "Level 2",
"difficultyLevel3": "Level 3 (Medium)",
"difficultyLevel4": "Level 4",
"difficultyLevel5": "Level 5 (Hard)",
"loadingSubjects": "Loading subjects...",
"loadingGrades": "Loading grades...",
"scheduledAtDesc": "If set, this exam will be scheduled for a specific time.",
"modeManual": "Manual Assembly",
"modeManualDesc": "Manually select questions from the bank and organize structure.",
"modeManualAction": "Create & Start Building",
"modeAi": "AI Generation",
"modeAiDesc": "Paste exam text and AI will auto-parse questions into structured preview.",
"modeAiAction": "Generate in Background",
"modeRich": "Rich Text Editor",
"modeRichDesc": "Use rich text editor to paste exam text, manually or AI-assisted marking of questions, groups, blanks, etc.",
"modeRichHint": "The rich text editor supports selecting text to mark as questions/groups/dotted chars/blanks, with live preview on the right.",
"modeRichAction": "Open Rich Text Editor"
},
"status": {
"draft": "Draft",
"published": "Published",
"archived": "Archived"
},
"difficulty": {
"1": "Easy",
"2": "Easy-Med",
"3": "Medium",
"4": "Med-Hard",
"5": "Hard",
"ariaLabel": "Difficulty level {{level}}: {{label}}"
},
"actions": {
"preview": "Preview Exam",
"copyId": "Copy ID",
"edit": "Edit",
"build": "Build",
"duplicate": "Duplicate",
"publish": "Publish",
"moveToDraft": "Move to Draft",
"archive": "Archive",
"delete": "Delete",
"deleteConfirmTitle": "Are you absolutely sure?",
"deleteConfirmDescription": "This action cannot be undone. This will permanently delete the exam \"{{title}}\" and remove all associated data.",
"cancel": "Cancel",
"deleteSuccess": "Exam deleted successfully",
"deleteFailed": "Failed to delete exam",
"publishSuccess": "Exam published",
"archiveSuccess": "Exam archived",
"draftSuccess": "Exam moved to draft",
"duplicateSuccess": "Exam duplicated",
"duplicateFailed": "Failed to duplicate exam",
"updateFailed": "Failed to update exam",
"previewFailed": "Failed to load exam preview",
"idCopied": "Exam ID copied to clipboard",
"openMenu": "Open menu",
"selectRow": "Select row",
"selectAll": "Select all",
"noQuestions": "No questions in this exam.",
"loadingPreview": "Loading preview..."
},
"columns": {
"examInfo": "Exam Info",
"status": "Status",
"stats": "Stats",
"difficulty": "Difficulty",
"date": "Date",
"scheduled": "Scheduled",
"created": "Created",
"questions": "Qs",
"points": "Pts"
},
"filters": {
"status": "Status",
"anyStatus": "Any Status",
"difficulty": "Difficulty",
"anyDifficulty": "Any Difficulty"
},
"error": {
"notFound": "Exam not found",
"loadFailed": "Failed to load exam"
},
"analytics": {
"title": "Exam Analytics",
"description": "View score distribution and per-question analysis",
"totalStudents": "Total Students",
"submitted": "Submitted",
"gradedCount": "Graded",
"assignmentCount": "Assignments",
"averageScore": "Average Score",
"passRate": "Pass Rate",
"scoreDistribution": "Score Distribution",
"scoreDistributionDesc": "Student count by percentage range",
"questionAnalysis": "Question Analysis",
"questionAnalysisDesc": "Error rate and difficulty (error rate >= 70% is hard)",
"questionType": "Type",
"questionText": "Question",
"maxScore": "Max Score",
"errorCount": "Errors",
"errorRate": "Error Rate",
"difficulty": "Difficulty",
"difficultyEasy": "Easy",
"difficultyMedium": "Medium",
"difficultyHard": "Hard",
"highErrorWarning": "High Error Rate Warning",
"highErrorWarningDesc": "The following questions have an error rate above 70% and are recommended for focused review",
"noData": "No analytics data yet. Data will be available after students submit and grading is complete.",
"viewAnalytics": "View Analytics"
},
"richEditor": {
"title": "Rich Text Exam Builder",
"description": "Paste exam text, use toolbar to mark questions/groups/blanks/dotted chars, live preview on the right",
"basicInfo": "Basic Info",
"sourceText": "Source Text",
"sourceTextPlaceholder": "Paste the full exam text here...",
"aiAutoMark": "AI Auto-Mark",
"aiMarking": "AI marking...",
"aiMarkSuccess": "AI auto-marking complete",
"aiMarkFailed": "AI auto-marking failed",
"aiMarkHint": "After pasting exam text, click this button to let AI auto-detect question structure",
"editorArea": "Editor",
"previewArea": "Preview",
"emptyEditor": "Enter or paste exam content in the editor on the left",
"emptyPreview": "Preview will appear here",
"markQuestion": "Mark Question",
"markGroup": "Mark Group",
"markDotted": "Dotted Char",
"markBlank": "Blank",
"insertImage": "Insert Image",
"questionType": "Type",
"score": "Score",
"groupTitle": "Group Title",
"saveDraft": "Save Draft",
"saving": "Saving...",
"saveSuccess": "Exam draft created",
"saveFailed": "Failed to create",
"loadFormFailed": "Failed to load form data",
"titleRequired": "Please fill in the exam title",
"subjectGradeRequired": "Please select subject and grade",
"emptyContent": "Exam content is empty",
"pasteSourceFirst": "Please paste exam text first",
"bold": "Bold",
"italic": "Italic",
"strike": "Strikethrough",
"dotted": "Dotted",
"bulletList": "Bullet List",
"orderedList": "Ordered List",
"quote": "Quote",
"undo": "Undo",
"redo": "Redo",
"questionTypes": {
"single_choice": "Single Choice",
"multiple_choice": "Multiple Choice",
"true_false": "True/False",
"fill_blank": "Fill in the Blank",
"short_answer": "Short Answer",
"essay": "Essay",
"text": "Text"
}
}
},
"homework": {
"list": {
"title": "Assignments",
"description": "Manage assignments, view submission rates and grading progress.",
"create": "Create Assignment",
"empty": "No assignments yet",
"emptyFiltered": "No assignments match your filters",
"emptyDescription": "You haven't created any assignments yet.",
"emptyFilteredDescription": "Try clearing filters or adjusting keywords.",
"clearFilters": "Clear filters",
"filterByClass": "Filter by class: {{className}}",
"columns": {
"title": "Title",
"status": "Status",
"dueAt": "Due Date",
"submissionRate": "Submission Rate",
"averageScore": "Average Score",
"overdue": "Overdue",
"sourceExam": "Source Exam",
"createdAt": "Created At"
},
"pagination": {
"itemLabel": "assignments"
}
},
"form": {
"createTitle": "Create Assignment",
"quickMode": "Quick Assignment",
"quickModeDescription": "Enter title and description directly, no questions needed",
"examMode": "Exam-based Assignment",
"examModeDescription": "Derive assignment from an existing exam",
"class": "Class",
"selectClass": "Select a class",
"sourceExam": "Source Exam",
"selectExam": "Select an exam",
"assignmentTitle": "Assignment Title",
"titlePlaceholderQuick": "e.g. Recite Lesson 3",
"titlePlaceholderExam": "Defaults to exam title",
"description": "Description (optional)",
"descriptionPlaceholderQuick": "Enter assignment requirements, question content, or instructions...",
"availableAt": "Available At (optional)",
"dueAt": "Due At (optional)",
"allowLate": "Allow late submissions",
"lateDueAt": "Late Due At (optional)",
"maxAttempts": "Max Attempts",
"submit": "Create Assignment",
"submitting": "Creating...",
"creating": "Creating assignment...",
"selectExamRequired": "Please select an exam",
"titleRequired": "Please enter a title",
"selectClassRequired": "Please select a class",
"createSuccess": "Assignment created",
"createFailed": "Failed to create"
},
"take": {
"questions": "Questions",
"question": "Question {{index}}",
"points": "points",
"startAssignment": "Start Assignment",
"submitAssignment": "Submit Assignment",
"submitAll": "Submit All",
"saveAnswer": "Save Answer",
"saved": "Saved",
"saveFailed": "Failed to save",
"starting": "Starting...",
"submitting": "Submitting...",
"started": "Started",
"submitted": "Submitted",
"notStarted": "Not Started",
"readyToStart": "Ready to start?",
"readyDescription": "Click the \"Start Assignment\" button above to begin. Your answers will be saved when you click \"Save Answer\".",
"startNow": "Start Now",
"back": "Back",
"timedExam": "Timed exam: {{minutes}} minutes",
"timeRemaining": "Time remaining",
"timeUpAutoSubmit": "Time is up, auto-submitting...",
"confirmSubmit": "Confirm Submission",
"confirmSubmitDescription": "All questions have been answered. Submitted answers cannot be changed. Are you sure you want to submit?",
"unansweredWarning": "You have {{count}} unanswered question(s). Submitted answers cannot be changed. Are you sure you want to submit?",
"cancel": "Cancel",
"confirmSubmitAction": "Confirm Submit",
"submitSuccess": "Submitted",
"submitFailed": "Failed to submit",
"startSuccess": "Started",
"startFailed": "Failed to start",
"assignmentInfo": "Assignment Info",
"status": "Status",
"dueDate": "Due Date",
"overdue": "Overdue",
"hoursLeft": "{{hours}} hour(s) left",
"lessThanOneHour": "Less than 1 hour left",
"attempts": "Attempts",
"attemptsUsed": "{{used}} / {{max}} used",
"attemptsRemaining": "· {{remaining}} remaining",
"description": "Description",
"noDescription": "No description provided.",
"progress": "Progress",
"jumpToQuestion": "Jump to question {{index}}",
"answered": "Answered",
"unanswered": "Not answered",
"yourAnswer": "Your answer",
"answerPlaceholder": "Type your answer here...",
"true": "True",
"false": "False",
"unsupportedType": "Unsupported question type",
"teacherFeedback": "Teacher Feedback",
"noFeedback": "No specific feedback provided.",
"makeSureAnswered": "Make sure you have answered all questions.",
"autoSaveIdle": "Auto-save ready",
"autoSaveSaving": "Auto-saving...",
"autoSaveSaved": "Auto-saved",
"autoSaveError": "Auto-save failed. Will retry when network recovers.",
"autoSaveRestored": "Restored unsaved answers from offline cache",
"autoSaveCacheError": "Failed to restore offline cache",
"scanTitle": "Answer Scan Upload",
"scanDescription": "After answering on paper, photograph and upload the full paper",
"selectImageFiles": "Please select image files",
"uploadFailed": "Upload failed",
"uploadSuccess": "Uploaded {{count}} images",
"deleteScan": "Delete",
"moveUp": "Move Up",
"moveDown": "Move Down",
"dragDropHint": "Drag images here, or click to select files",
"pageLabel": "Page {{page}}",
"scanDisabled": "Submitted, scan images cannot be modified"
},
"grade": {
"title": "Grade",
"submissions": "Submissions",
"student": "Student",
"status": "Status",
"submitted": "Submitted",
"score": "Score",
"action": "Action",
"back": "Back",
"openAssignment": "Open Assignment",
"late": "Late",
"targets": "Targets",
"submittedCount": "Submitted",
"gradedCount": "Graded",
"exam": "Exam",
"gradingSummary": "Grading Summary",
"totalScore": "Total Score",
"correct": "Correct",
"incorrect": "Incorrect",
"partial": "Partial",
"questionStatus": "Question Status",
"studentAnswer": "Student Answer",
"referenceAnswer": "Reference Answer",
"noReferenceAnswer": "No reference answer provided.",
"noQuestionText": "No question text",
"autoGraded": "Auto-graded",
"correctButton": "Correct",
"incorrectButton": "Incorrect",
"scoreLabel": "Score",
"addFeedback": "Add Feedback",
"hideFeedback": "Hide Feedback",
"feedbackPlaceholder": "Provide feedback for {{name}}...",
"submitGrades": "Submit Grades",
"saving": "Saving...",
"gradesSaved": "Grading saved successfully",
"gradesSaveFailed": "Failed to save grading",
"previousStudent": "Previous Student",
"nextStudent": "Next Student",
"prev": "Prev",
"next": "Next",
"gradesAutoSaveNote": "Grades are saved automatically when you click Submit. Students will see their grades and feedback immediately after you submit.",
"batchAutoGrade": "Batch Auto-Grade",
"batchSelected": "{{count}} submissions selected",
"batchSelectAtLeastOne": "Please select at least one submission",
"batchFailed": "Batch grading failed",
"selectAll": "Select All",
"selectRow": "Select this row",
"scanGrading": "Scan Grading",
"prevSubmission": "Previous",
"nextSubmission": "Next",
"saveGrading": "Save Grading",
"questionsAndGrading": "Questions & Grading",
"studentScanImages": "Student Scan Images",
"loadingScans": "Loading...",
"loadingImages": "Loading scan images...",
"noScans": "No scan images",
"saveFailed": "Save failed",
"scanFeedbackPlaceholder": "Grading feedback (optional)...",
"scoreOutOf": "/ {{max}} pts",
"questionsCount": "Questions & Grading ({{count}} items)",
"scanPagesCount": "Student Scan Images ({{count}} pages)"
},
"review": {
"title": "Review",
"yourAnswer": "Your Answer",
"correctAnswer": "Correct Answer",
"teacherFeedback": "Teacher Feedback",
"score": "Score",
"maxScore": "Max Score",
"correctMarker": "✓ Correct",
"backToList": "Back to List",
"gradedReport": "Graded Report",
"submissionDetails": "Submission Details",
"questionsUnit": "Questions",
"noAnswer": "No answer provided",
"noFeedback": "No specific feedback provided.",
"questionBreakdown": "Question Breakdown",
"responseSummary": "Response Summary",
"description": "Description",
"noDescription": "No description provided.",
"totalScore": "Total Score",
"correctAnswerTrue": "True",
"correctAnswerFalse": "False"
},
"result": {
"title": "Submission Result",
"scoreRate": "Score Rate",
"fullyGraded": "All questions have been graded",
"partiallyGraded": "Objective questions auto-graded. Subjective questions awaiting teacher review.",
"correctCount": "Correct",
"incorrectCount": "Incorrect",
"partialCount": "Partial",
"pendingCount": "Pending",
"wrongAnswersTitle": "Wrong Answers Preview",
"wrongAnswersDesc": "These questions need focused review",
"backToList": "Back to Assignments",
"viewErrorBook": "View Error Book"
},
"status": {
"draft": "Draft",
"published": "Published",
"archived": "Archived",
"started": "Started",
"submitted": "Submitted",
"graded": "Graded",
"not_started": "Not Started",
"in_progress": "In Progress"
},
"error": {
"notFound": "Assignment not found",
"submissionNotFound": "Submission not found",
"unauthorized": "Unauthorized",
"submissionLocked": "Submission is locked",
"pastDue": "Past due",
"pastLateDue": "Past late due",
"noActiveStudents": "No active students in this class",
"classNotFound": "Class not found",
"examNotFound": "Exam not found",
"examSubjectNotSet": "Exam subject not set",
"notAssignedToClass": "Not assigned to this class",
"notAssignedToSubject": "Not assigned to this subject",
"notAssigned": "Not assigned",
"notAvailableYet": "Not available yet",
"noAttemptsLeft": "No attempts left",
"assignmentNotFound": "Assignment not found",
"assignmentNotAvailable": "Assignment not available"
}
},
"proctoring": {
"mode": {
"title": "Exam Mode",
"description": "Select exam mode and configure options. Proctored mode enables anti-cheat monitoring.",
"homework": "Homework Mode",
"timed": "Timed Mode",
"proctored": "Proctored Mode",
"homeworkDescription": "Students can answer at any time, no time limit",
"timedDescription": "Timed answering, auto-submit on timeout",
"proctoredDescription": "Timed + anti-cheat + forced fullscreen"
},
"config": {
"duration": "Duration (minutes)",
"durationTimedDescription": "Auto-submit after timeout when student starts",
"durationProctoredDescription": "Required in proctored mode",
"shuffleQuestions": "Shuffle Questions",
"shuffleQuestionsDescription": "Each student sees questions in random order",
"antiCheat": "Enable Anti-cheat Monitoring",
"antiCheatDescription": "Monitor tab switch, copy, right-click, devtools, etc.",
"allowLateStart": "Allow Late Start",
"allowLateStartDescription": "Allow students to enter within a grace period after exam starts",
"lateStartGrace": "Late Start Grace (minutes)",
"lateStartGraceDescription": "No new students allowed after this time"
},
"dashboard": {
"title": "Proctoring Dashboard",
"summary": "Summary",
"students": "Students",
"recentEvents": "Recent Events",
"noEvents": "No events",
"eventCount": "Event Count",
"abnormalCount": "Abnormal Count"
},
"events": {
"tab_switch": "Tab Switch",
"window_blur": "Window Blur",
"copy_attempt": "Copy Attempt",
"paste_attempt": "Paste Attempt",
"right_click": "Right Click",
"devtools_open": "DevTools Open",
"fullscreen_exit": "Fullscreen Exit",
"idle_timeout": "Idle Timeout"
}
},
"common": {
"loading": "Loading...",
"save": "Save",
"cancel": "Cancel",
"confirm": "Confirm",
"back": "Back",
"edit": "Edit",
"delete": "Delete",
"create": "Create",
"search": "Search",
"filter": "Filter",
"noResults": "No results",
"error": "Error",
"success": "Success",
"failed": "Failed",
"retry": "Retry",
"page": "Page",
"of": "of",
"selected": "selected",
"rows": "row(s)",
"view": "View",
"continue": "Continue",
"other": "Other",
"completed": "Completed"
}
}