feat(shared,tests): add error boundaries, lib utils, i18n messages, and integration tests
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

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
This commit is contained in:
SpecialX
2026-07-03 10:26:38 +08:00
parent 21142f9b99
commit 0e63c24ed9
97 changed files with 9753 additions and 819 deletions

View File

@@ -30,9 +30,9 @@
"alreadyInClass": "你已在该班级中",
"subjectConflict": "该班级此科目已有任课教师",
"generateSuccess": "邀请码生成成功",
"generateFailed": "邀请码生成失败",
"generateFailed": "生成邀请码失败",
"revokeSuccess": "邀请码已撤销",
"revokeFailed": "邀请码撤销失败",
"revokeFailed": "撤销邀请码失败",
"regenerateSuccess": "邀请码已重新生成",
"regenerateConfirm": "重新生成后旧邀请码将立即失效,确定继续吗?",
"revokeConfirm": "撤销后此邀请码将立即失效,确定继续吗?",
@@ -51,5 +51,418 @@
"homeroomTeacher": "班主任",
"studentCount": "学生人数",
"actions": "操作"
},
"list": {
"title": "班级管理",
"description": "管理班级并分配教师。",
"new": "新建班级",
"empty": {
"title": "暂无班级",
"description": "创建你的第一个班级以开始使用。",
"noMatch": "没有匹配结果",
"noMatchDescription": "尝试修改筛选条件或清空搜索。"
},
"column": {
"school": "学校",
"grade": "年级",
"name": "班级名称",
"homeroom": "班主任",
"room": "教室",
"subjectTeachers": "任课教师",
"studentCount": "学生人数",
"invitationCode": "邀请码",
"updated": "更新时间",
"actions": "操作"
},
"actions": {
"edit": "编辑",
"delete": "删除",
"viewDetail": "查看详情"
},
"failedCreate": "创建班级失败",
"failedUpdate": "更新班级失败",
"failedDelete": "删除班级失败",
"failedStatus": "更新状态失败",
"failedRegenerate": "重新生成邀请码失败",
"failedCopy": "复制失败"
},
"form": {
"createTitle": "新建班级",
"editTitle": "编辑班级",
"name": "班级名称",
"namePlaceholder": "如:一年级一班",
"school": "学校",
"schoolPlaceholder": "选择学校",
"grade": "年级",
"gradePlaceholder": "选择年级",
"homeroom": "班主任",
"homeroomPlaceholder": "选择班主任",
"homeroomLabel": "班号",
"room": "教室",
"roomPlaceholder": "可选",
"subjectTeachers": "任课教师",
"subjectTeacherPlaceholder": "选择教师",
"noSchools": "暂无学校",
"noGrades": "暂无年级",
"noTeachers": "暂无教师",
"selectSchool": "选择学校",
"selectGrade": "选择年级",
"selectTeacher": "选择教师",
"optional": "可选",
"cancel": "取消",
"create": "创建",
"save": "保存",
"saveChanges": "保存更改",
"saving": "保存中...",
"creating": "创建中...",
"deleting": "删除中...",
"adding": "添加中...",
"add": "添加"
},
"delete": {
"title": "删除班级",
"description": "确定要删除「{name}」吗?此操作不可撤销。",
"cancel": "取消",
"confirm": "删除",
"thisClass": "此班级"
},
"filters": {
"search": "搜索班级...",
"school": "学校",
"allSchools": "全部学校",
"grade": "年级",
"allGrades": "全部年级",
"class": "班级",
"allClasses": "全部班级",
"status": "状态",
"allStatuses": "全部状态",
"weekday": "星期",
"selectWeekday": "选择星期",
"allWeekdays": "全部",
"selectClass": "选择班级",
"selectSchool": "选择学校",
"selectGrade": "选择年级",
"clear": "清除筛选",
"reset": "重置",
"unknownClass": "未知班级",
"filterByClass": "按班级筛选",
"filterByStatus": "按状态筛选",
"addEvent": "添加事件",
"addStudent": "添加学生",
"email": "邮箱",
"emailPlaceholder": "student@example.com",
"subjectPlaceholderExample": "例如 数学",
"createScheduleEntryDescription": "创建一条课表项。",
"enrollStudentDescription": "通过邮箱将学生加入班级。",
"startTime": "开始",
"endTime": "结束"
},
"myClasses": {
"title": "我的班级",
"joinNew": "加入新班级",
"joinTitle": "加入班级",
"joinDescription": "输入管理员提供的 6 位邀请码。",
"invitationCode": "邀请码",
"invitationCodePlaceholder": "如123456",
"invitationCodeHint": "如果没有邀请码,请向管理员索取。",
"subject": "教学科目",
"subjectPlaceholder": "选择教学科目",
"noSubjects": "暂无可选科目",
"selectSubject": "选择教学科目",
"join": "加入班级",
"joining": "加入中...",
"cancel": "取消",
"empty": {
"title": "暂无班级",
"description": "加入一个班级或等待管理员分配。"
},
"entryPass": "入门卡",
"submissionTrends": "提交趋势",
"students": "学生",
"room": "教室",
"noRoom": "无教室",
"vsLastWeek": "较上周",
"viewDetail": "查看详情",
"copyCode": "复制邀请码",
"regenerateCode": "重新生成",
"codeCopied": "邀请码已复制"
},
"students": {
"title": "学生名单",
"searchPlaceholder": "搜索学生...",
"empty": {
"title": "暂无学生",
"description": "该班级还没有学生。",
"noMatch": "没有匹配的学生",
"noMatchDescription": "尝试清除筛选或调整关键词。"
},
"column": {
"name": "姓名",
"email": "邮箱",
"status": "状态",
"scores": "成绩",
"actions": "操作"
},
"status": {
"active": "在读",
"inactive": "停用"
},
"actions": {
"setActive": "设为在读",
"setInactive": "设为停用",
"remove": "移出班级"
},
"removeTitle": "移出班级",
"removeDescription": "确定要将「{name}」移出班级吗?"
},
"schedule": {
"title": "班级课表",
"empty": {
"title": "暂无课表",
"description": "该班级尚未设置课表。",
"noMatch": "该班级暂无课表",
"noMatchDescription": "尝试选择其他班级。"
},
"column": {
"weekday": "星期",
"period": "节次",
"subject": "科目",
"location": "地点",
"teacher": "教师",
"actions": "操作"
},
"form": {
"createTitle": "新增课表项",
"editTitle": "编辑课表项",
"createDescription": "新增一个课表项。",
"editDescription": "更新课表项信息。",
"weekday": "星期",
"period": "节次",
"subject": "科目",
"location": "地点",
"locationPlaceholder": "可选",
"subjectPlaceholder": "如:数学",
"startLabel": "开始时间",
"endLabel": "结束时间",
"cancel": "取消",
"create": "创建",
"save": "保存",
"deleteTitle": "确定删除?",
"deleteDescription": "此操作将永久删除该课表项。"
},
"weekday": {
"1": "周一",
"2": "周二",
"3": "周三",
"4": "周四",
"5": "周五",
"6": "周六",
"7": "周日"
}
},
"detail": {
"header": {
"students": "{count} 名学生",
"homeroom": "班主任 {name}",
"room": "教室 {room}",
"invite": "邀请",
"editDetails": "编辑详情",
"inviteStudents": "邀请学生",
"classSettings": "班级设置",
"moreActions": "更多操作"
},
"overview": {
"averageScore": "平均分",
"submissionRate": "提交率",
"papersToGrade": "待批改",
"overdueCount": "逾期数",
"overallPerformance": "整体表现",
"averageTurnInRate": "平均提交率",
"pendingReviews": "待审核",
"activeAssignmentsPastDue": "逾期活跃作业"
},
"trends": {
"submitted": "已提交",
"totalStudents": "总学生数",
"averageScore": "平均分",
"medianScore": "中位数",
"latest": "最新",
"submission": "提交",
"score": "成绩",
"allSubjects": "全部科目",
"scoreTrends": "成绩趋势",
"recentTurnInRates": "最近作业提交率",
"avgVsMedian": "均分与中位数对比",
"noDataForSubject": "该科目暂无数据"
},
"assignments": {
"due": "截止 {date}",
"noDueDate": "无截止日期",
"viewAll": "查看全部",
"createHomework": "创建作业",
"activeCount": "{count} 个进行中的作业",
"submittedCount": "{submitted}/{total} 已提交",
"avgLabel": "均分"
},
"widgets": {
"recentHomework": "最近作业",
"weeklySchedule": "本周课表",
"quickActions": "快捷操作",
"submissionTrends": "提交趋势",
"studentList": "学生名单"
},
"edit": {
"title": "编辑班级",
"name": "班级名称",
"homeroom": "班主任",
"room": "教室",
"cancel": "取消",
"save": "保存"
},
"empty": {
"noSchedule": "暂无课表",
"noScheduleDescription": "该班级尚未设置课表。",
"noAssignments": "暂无作业",
"noAssignmentsDescription": "该班级尚未布置任何作业。"
},
"students": {
"viewAll": "查看全部",
"activeCount": "{count} 名在读学生"
},
"schedule": {
"manage": "管理",
"showingWeekdays": "仅显示周一至周五课表"
},
"quickActions": {
"manageSchedule": "管理课表",
"messageClassComingSoon": "班级通知(即将上线)"
}
},
"grade": {
"title": "班级管理",
"description": "管理你所在年级的班级。",
"noManagedGrades": "暂无负责年级",
"noManagedGradesDescription": "你尚未管理任何年级。",
"insights": {
"title": "年级学情",
"description": "查看你负责年级的作业整体统计。",
"filters": "筛选",
"grade": "年级",
"apply": "应用",
"selectGrade": "选择年级",
"noGrades": "暂无负责年级",
"noGradesDescription": "你尚未被指派为任何年级的年级主任或教研组长。",
"selectToView": "请选择年级查看学情",
"selectToViewDescription": "选择一个年级以查看最新作业与历史成绩统计。",
"notFound": "年级不存在",
"notFoundDescription": "该年级可能不存在或暂无可访问数据。",
"noData": "该年级暂无作业数据",
"noDataDescription": "该年级学生尚未收到任何作业。",
"classes": "班级",
"students": "学生",
"overallAvg": "整体均分",
"latestAvg": "最新均分",
"homeworkTimeline": "作业时间线",
"classRanking": "班级排名",
"assignment": "作业",
"status": "状态",
"created": "创建时间",
"targeted": "目标人数",
"submitted": "已提交",
"graded": "已批改",
"avg": "均分",
"median": "中位数",
"class": "班级",
"latestAvgCol": "最新均分",
"prevAvg": "上次均分",
"delta": "变化",
"overallAvgCol": "整体均分",
"active": "活跃",
"inactive": "非活跃"
}
},
"bulk": {
"importStudents": {
"title": "批量导入学生",
"description": "每行一个邮箱格式name,email 或仅 email",
"placeholder": "张三,zhangsan@example.com\nlisi@example.com",
"submit": "导入",
"success": "成功导入 {imported} 个学生,{failed} 个失败",
"failed": "批量导入失败"
},
"assignTeachers": {
"title": "批量分配教师",
"description": "每行格式:班级名称,科目,教师邮箱",
"placeholder": "一班,语文,zhangsan@example.com\n二班,数学,lisi@example.com",
"submit": "分配",
"success": "成功更新 {updated} 个分配,{failed} 个失败",
"failed": "批量分配失败"
}
},
"errors": {
"boundary": {
"title": "加载失败",
"description": "数据加载时发生错误,请重试",
"retry": "重试"
}
},
"error": {
"title": "加载失败",
"description": "数据加载时发生错误,请重试",
"retry": "重试"
},
"actions": {
"classCreated": "班级创建成功",
"classUpdated": "班级更新成功",
"classDeleted": "班级删除成功",
"studentAdded": "学生添加成功",
"studentUpdated": "学生状态更新成功",
"invitationCodeReady": "邀请码已就绪",
"invitationCodeUpdated": "邀请码已更新",
"invitationCodeGenerated": "邀请码已生成",
"invitationCodeRevoked": "邀请码已撤销",
"scheduleItemCreated": "课表项创建成功",
"scheduleItemUpdated": "课表项更新成功",
"scheduleItemDeleted": "课表项删除成功",
"joinedClass": "加入班级成功",
"bulkImportResult": "成功导入 {imported} 个学生,{failed} 个失败",
"bulkAssignResult": "成功更新 {updated} 个分配,{failed} 个失败",
"missingClassId": "缺少班级 ID",
"missingScheduleId": "缺少课表 ID",
"missingCodeId": "缺少邀请码 ID",
"missingEnrollmentInfo": "缺少注册信息",
"invalidScheduleData": "课表项数据无效",
"invalidExpiresInHours": "有效期(小时)无效",
"invalidMaxUses": "最大使用次数无效",
"csvRequired": "CSV 数据为必填",
"noValidEntries": "未找到有效条目",
"classNameGradeTeacherRequired": "班级名称、年级和教师为必填",
"classNameGradeRequired": "班级名称和年级为必填",
"invitationCodeRequired": "邀请码为必填",
"subjectRequired": "科目为必填",
"tooManyAttempts": "尝试过于频繁,请稍后再试",
"scheduleItemNotFound": "未找到课表项",
"classNotFoundOrNotLinked": "班级不存在或未关联年级",
"notPermissionCreateGrade": "无权为该年级创建班级",
"notPermissionUpdateClass": "无权更新此班级",
"notPermissionMoveClass": "无权将班级移动到该年级",
"notPermissionDeleteClass": "无权删除此班级",
"notOwnClass": "你不是此班级的所有者",
"notPermissionManageClass": "无权管理此班级",
"notPermissionManageClassSchedule": "无权管理此班级课表",
"onlyAdminsAndGradeHeads": "仅管理员和年级主任可创建班级",
"classAndEmailRequired": "请选择班级并填写学生邮箱",
"invalidWeekday": "无效的星期值",
"invalidSubjectTeachers": "任课教师数据无效"
},
"metadata": {
"myClasses": "我的班级",
"classDetail": "班级详情",
"schedule": "班级课表",
"students": "学生名单",
"studentLearning": "学习中心",
"studentCourses": "我的课程",
"studentClassDetail": "班级主页",
"studentSchedule": "我的课表"
}
}