Files
NextEdu/src/shared/i18n/messages/en/elective.json
SpecialX 0e63c24ed9
Some checks failed
CI / scheduled-backup (push) Has been skipped
CI / backup-verify (push) Has been skipped
CI / weekly-dr-drill (push) Failing after 0s
CI / build-deploy (push) Has been cancelled
CI / security-scan (push) Has been cancelled
feat(shared,tests): add error boundaries, lib utils, i18n messages, and integration tests
shared:

- Add class-filter, error-state, route-error, section-error-boundary, widget-boundary components

- Add ui/alert component

- Add constants directory

- Add breached-password, export-utils, permission-bitmap, rate-limit, resolve-action-error, route-permissions, route-resolver, type-guards lib

- Add i18n messages (en, zh-CN) for invitation-codes, parent, questions, rbac

tests:

- Add integration tests for elective

- Add tests/setup/empty-stub

scripts:

- Add update-md.cjs, tmp_append_en.ps1, tmp_merge_en.ps1 utilities
2026-07-03 10:26:38 +08:00

201 lines
7.0 KiB
JSON

{
"title": {
"adminList": "Elective Courses",
"create": "Create Course",
"edit": "Edit Course",
"detail": "Course Details",
"teacher": "My Elective Courses",
"student": "Course Selection"
},
"description": {
"adminList": "Manage elective courses, open/close selection and lottery.",
"create": "Create a new elective course.",
"edit": "Update elective course details.",
"detail": "View elective course details and student selections.",
"teacher": "View and manage the elective courses you teach.",
"student": "Browse available courses and make selections."
},
"status": {
"draft": "Draft",
"open": "Open",
"closed": "Closed",
"cancelled": "Cancelled"
},
"selectionMode": {
"fcfs": "First Come First Served",
"lottery": "Lottery"
},
"filters": {
"allStatuses": "All Modes"
},
"selectionStatus": {
"selected": "Selected",
"enrolled": "Enrolled",
"waitlist": "Waitlist",
"dropped": "Dropped",
"rejected": "Rejected"
},
"fields": {
"name": "Course Name",
"subject": "Subject",
"teacher": "Teacher",
"grade": "Grade",
"description": "Description",
"capacity": "Capacity",
"enrolled": "Enrolled",
"classroom": "Classroom",
"schedule": "Schedule",
"startDate": "Start Date",
"endDate": "End Date",
"selectionStart": "Selection Start",
"selectionEnd": "Selection End",
"selectionMode": "Selection Mode",
"credit": "Credit",
"dropDeadline": "Drop Deadline",
"dropReason": "Drop Reason"
},
"actions": {
"create": "Create Course",
"edit": "Edit",
"delete": "Delete",
"openSelection": "Open Selection",
"closeSelection": "Close Selection",
"runLottery": "Run Lottery",
"select": "Select",
"drop": "Drop",
"cancel": "Cancel",
"save": "Save",
"retry": "Retry"
},
"list": {
"empty": "No elective courses",
"emptyStudent": "No available courses",
"emptyDescription": "No elective courses have been created yet."
},
"form": {
"createTitle": "Create Elective Course",
"editTitle": "Edit Elective Course",
"namePlaceholder": "Enter course name",
"descriptionPlaceholder": "Enter course description",
"nameLabel": "Course Name *",
"subjectLabel": "Subject",
"gradeLabel": "Grade",
"teacherLabel": "Teacher",
"capacityLabel": "Capacity",
"classroomLabel": "Classroom",
"scheduleLabel": "Schedule",
"schedulePlaceholder": "e.g. Mon 14:00-15:30",
"creditLabel": "Credit",
"startDateLabel": "Start Date",
"endDateLabel": "End Date",
"selectionStartLabel": "Selection Start",
"selectionEndLabel": "Selection End",
"dropDeadlineLabel": "Drop Deadline",
"dropDeadlineHint": "Students cannot drop after this time. Leave empty for no restriction.",
"descriptionLabel": "Description",
"cancelButton": "Cancel",
"saveButton": "Save",
"createButton": "Create",
"savingButton": "Saving...",
"selectSubjectPlaceholder": "Select a subject",
"selectGradePlaceholder": "Select a grade",
"selectTeacherPlaceholder": "Select a teacher",
"selectModePlaceholder": "Select selection mode",
"invalidFormState": "Invalid form state",
"saveFailed": "Failed to save course"
},
"stats": {
"totalCourses": "Total Courses",
"totalEnrolled": "Total Enrolled",
"avgUtilization": "Avg Utilization",
"pendingLottery": "Pending Lottery",
"utilization": "{enrolled}/{capacity}",
"utilizationRate": "{rate}%"
},
"parent": {
"title": "Children Elective",
"description": "View your children's elective selections.",
"noChildrenTitle": "No Children Linked",
"noChildrenDescription": "You have no linked children, cannot view elective info.",
"noRecordsTitle": "No Selections",
"noRecordsDescription": "Your child has not selected any courses."
},
"student": {
"mySelections": "My Selections",
"availableCourses": "Available Courses",
"selected": "Selected",
"enrolled": "Enrolled",
"waitlist": "Waitlist",
"capacityFull": "Capacity full",
"selectSuccess": "Course selected successfully",
"dropSuccess": "Course dropped successfully",
"confirmDrop": "Are you sure you want to drop this course?",
"dropReasonPlaceholder": "Optional: enter drop reason (max 255 chars)"
},
"detail": {
"studentsTitle": "Selection Roster",
"noStudents": "No Students",
"noStudentsDescription": "No students have selected this course yet.",
"back": "Back to List",
"editCourse": "Edit Course",
"studentName": "Student Name",
"priority": "Priority",
"selectedAt": "Selected At",
"enrolledAt": "Enrolled At"
},
"lottery": {
"result": "Lottery result: {enrolled} enrolled, {waitlist} waitlisted",
"running": "Running lottery..."
},
"errors": {
"notFound": "Course not found",
"noOwnership": "You do not own this course",
"capacityFull": "Course capacity is full",
"alreadySelected": "You have already selected this course",
"selectionClosed": "Selection is closed",
"selectionNotOpen": "Selection is not open",
"selectionNotStarted": "Selection has not started yet",
"selectionEnded": "Selection has ended",
"courseNotFound": "Course not found",
"noActiveSelection": "No active selection found",
"gradeMismatch": "Your grade does not match the course requirement",
"scheduleConflict": "Schedule conflicts with your existing courses",
"creditExceeded": "Credit limit exceeded ({current}/{max})",
"invalidForm": "Invalid form data",
"unexpected": "Unexpected error",
"dropDeadlinePassed": "Drop deadline has passed, cannot drop course",
"title": "Loading failed",
"description": "Page data failed to load, please retry later."
},
"export": {
"courseSheetName": "Course List",
"selectionSheetName": "Selection Roster",
"statusHeader": "Status",
"priorityHeader": "Priority",
"selectedAtHeader": "Selected At",
"enrolledAtHeader": "Enrolled At",
"indexHeader": "#"
},
"messages": {
"created": "Elective course created",
"updated": "Elective course updated",
"deleted": "Elective course deleted",
"selectionOpened": "Selection opened",
"selectionClosed": "Selection closed",
"lotteryCompleted": "Lottery completed: {enrolled} enrolled, {waitlist} waitlisted",
"courseDropped": "Course dropped",
"ownershipCheckFailed": "Ownership check failed"
},
"settings": {
"creditLimitDefault": "Default Credit Limit",
"creditLimitDefaultDescription": "Global term credit limit used when no grade-specific limit is configured.",
"capacityNotifyThreshold": "Capacity Notify Threshold",
"capacityNotifyThresholdDescription": "Notify teacher/admin when enrolled count reaches this fraction of capacity (0-1, default 0.9).",
"saved": "Settings saved"
},
"notifications": {
"capacityWarningTitle": "Capacity Warning: {courseName}",
"capacityWarningContent": "Course \"{courseName}\" has reached {enrolled}/{capacity} enrollments ({percent}% threshold). Consider expanding capacity or closing selection."
}
}