Files
Edu/apps/admin-portal/src/lib/i18n.ts
SpecialX 7cf9aec20e feat(admin-portal): 完成参考项目差距闭环 - 4 批次补齐 + Vitest 测试
差距分析闭环(workline §7-§8):
- P0:审计子模块 3 页 + 学校组织 7 页
- P1:系统设置 4 Card + 公告管理 + 邀请码管理
- P2:文件管理 + AI 配置
- P6:5 测试文件 / 69 用例全过

共享基础设施:
- permissions +11 权限点 +14 路由
- view-models +20 接口
- i18n +100 key
- graphql-client +25 operation
- fixtures/handlers +15 mock +20 handler

质量:typecheck + lint 零错误,vitest 69/69 通过,arch.db 已更新
2026-07-13 13:05:29 +08:00

303 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 轻量 i18ncontract §1.7 命名空间admin.* / iam.error.* / bff.error.* / gateway.error.* / network.error.*
*
* 维护者ai16
* 仲裁F4 i18n key 模式 error.{{service}}.{{code_snake_case}}
*/
type MessageMap = Record<string, string>;
const messages: MessageMap = {
// 导航
"admin.nav.dashboard": "管理仪表盘",
"admin.nav.users": "用户管理",
"admin.nav.roles": "角色权限",
"admin.nav.permissions": "权限点",
"admin.nav.viewports": "视口配置",
"admin.nav.organization": "组织管理",
"admin.nav.system": "学校设置",
"admin.nav.classes": "班级管理",
"admin.nav.teachers": "教师管理",
"admin.nav.students": "学生管理",
"admin.nav.auditLogs": "审计日志",
// 通用
"admin.common.search": "搜索",
"admin.common.filter": "筛选",
"admin.common.create": "新建",
"admin.common.edit": "编辑",
"admin.common.delete": "删除",
"admin.common.save": "保存",
"admin.common.cancel": "取消",
"admin.common.confirm": "确认",
"admin.common.export": "导出",
"admin.common.actions": "操作",
"admin.common.status": "状态",
"admin.common.all": "全部",
"admin.common.loading": "加载中...",
"admin.common.empty": "暂无数据",
"admin.common.error": "加载失败",
"admin.common.retry": "重试",
"admin.common.page": "页",
"admin.common.total": "共",
"admin.common.records": "条",
"admin.common.active": "启用",
"admin.common.disabled": "禁用",
"admin.common.locked": "锁定",
"admin.common.yes": "是",
"admin.common.no": "否",
"admin.common.name": "姓名",
"admin.common.email": "邮箱",
"admin.common.role": "角色",
"admin.common.createdAt": "创建时间",
"admin.common.updatedAt": "更新时间",
"admin.common.lastLoginAt": "最后登录",
"admin.common.dataScope": "数据范围",
"admin.common.school": "学校",
"admin.common.grade": "年级",
"admin.common.class": "班级",
// 仪表盘
"admin.dashboard.title": "管理仪表盘",
"admin.dashboard.totalTeachers": "教师总数",
"admin.dashboard.totalStudents": "学生总数",
"admin.dashboard.totalClasses": "班级总数",
"admin.dashboard.totalSchools": "学校总数",
"admin.dashboard.schoolAvgScore": "全校平均分",
"admin.dashboard.activeUsersToday": "今日活跃用户",
"admin.dashboard.auditEventsToday": "今日审计事件",
"admin.dashboard.trend": "趋势",
"admin.dashboard.serviceHealth": "服务健康",
// 用户管理
"admin.users.title": "用户管理",
"admin.users.new": "新建用户",
"admin.users.edit": "编辑用户",
"admin.users.deleteConfirm": "确认删除该用户?",
"admin.users.toggleStatus": "切换状态",
"admin.users.assignRole": "分配角色",
"admin.users.password": "密码",
"admin.users.roles": "角色",
"admin.users.organization": "所属组织",
// 角色权限
"admin.roles.title": "角色权限管理",
"admin.roles.new": "新建角色",
"admin.roles.permissionMatrix": "权限矩阵",
"admin.roles.systemRole": "系统预置",
"admin.roles.userCount": "用户数",
"admin.roles.deleteConfirm": "确认删除该角色?",
"admin.roles.cannotDeleteSystem": "系统预置角色不可删除",
"admin.roles.cannotDeleteWithUsers": "角色下仍有用户,不可删除",
// 权限点
"admin.permissions.title": "权限点管理",
"admin.permissions.resource": "资源",
"admin.permissions.action": "操作",
"admin.permissions.code": "权限码",
// 视口配置
"admin.viewports.title": "视口配置",
"admin.viewports.key": "标识",
"admin.viewports.label": "标签",
"admin.viewports.route": "路由",
"admin.viewports.sortOrder": "排序",
"admin.viewports.requiredPermission": "所需权限",
"admin.viewports.scope": "作用域",
"admin.viewports.visible": "是否可见",
"admin.viewports.dragHint": "拖拽调整排序",
// 组织管理
"admin.organization.title": "组织管理",
"admin.organization.school": "学校",
"admin.organization.expand": "展开",
"admin.organization.collapse": "折叠",
// 学校设置
"admin.system.title": "学校设置",
"admin.system.schoolName": "学校名称",
"admin.system.schoolCode": "学校代码",
"admin.system.academicYear": "学年",
"admin.system.semester": "学期",
"admin.system.contactEmail": "联系邮箱",
"admin.system.contactPhone": "联系电话",
"admin.system.address": "地址",
"admin.system.timezone": "时区",
"admin.system.locale": "语言",
"admin.system.saveSuccess": "设置已保存",
// 班级管理
"admin.classes.title": "班级管理",
"admin.classes.headTeacher": "班主任",
"admin.classes.studentCount": "学生数",
// 教师管理
"admin.teachers.title": "教师管理",
"admin.teachers.subjects": "任教科目",
"admin.teachers.classCount": "班级数",
// 学生管理
"admin.students.title": "学生管理",
"admin.students.guardian": "家长",
"admin.students.guardianPhone": "家长电话",
// 审计日志
"admin.auditLogs.title": "审计日志",
"admin.auditLogs.actor": "操作人",
"admin.auditLogs.action": "操作",
"admin.auditLogs.resource": "资源",
"admin.auditLogs.resourceId": "资源ID",
"admin.auditLogs.ip": "IP地址",
"admin.auditLogs.time": "时间",
"admin.auditLogs.dateRange": "时间范围",
"admin.auditLogs.exportCsv": "导出CSV",
"admin.auditLogs.traceId": "追踪ID",
// 通知
"admin.notification.title": "通知中心",
"admin.notification.auditAlert": "审计告警",
"admin.notification.abnormalLogin": "异常登录",
"admin.notification.systemError": "系统异常",
// 退出
"admin.auth.logout": "退出登录",
"admin.auth.welcome": "Edu 管理端",
// 学校管理(细化)
"admin.school.title": "学校管理",
"admin.school.schools": "学校列表",
"admin.school.grades": "年级管理",
"admin.school.departments": "部门管理",
"admin.school.academicYear": "学年学期",
"admin.school.gradeInsights": "年级洞察",
"admin.school.principal": "校长",
"admin.school.director": "年级主任",
"admin.school.leader": "负责人",
"admin.school.memberCount": "成员数",
"admin.school.subject": "学科",
"admin.school.startDate": "开始日期",
"admin.school.endDate": "结束日期",
"admin.school.currentYear": "当前学年",
"admin.school.insights.summary": "全校概览",
"admin.school.insights.homework": "作业时间线",
"admin.school.insights.rankings": "班级排名",
"admin.school.insights.avgScore": "平均分",
"admin.school.insights.passingRate": "及格率",
"admin.school.insights.rank": "排名",
"admin.school.insights.delta": "环比",
// 审计日志子模块
"admin.auditLogs.overview": "审计总览",
"admin.auditLogs.dataChanges": "数据变更",
"admin.auditLogs.loginLogs": "登录日志",
"admin.auditLogs.totalEvents": "总事件数",
"admin.auditLogs.todayEvents": "今日事件",
"admin.auditLogs.uniqueActors": "操作人数",
"admin.auditLogs.failedActions": "失败操作",
"admin.auditLogs.topActions": "热门操作",
"admin.auditLogs.topResources": "热门资源",
"admin.auditLogs.trend": "操作趋势",
"admin.auditLogs.tableName": "数据表",
"admin.auditLogs.recordId": "记录ID",
"admin.auditLogs.beforeState": "变更前",
"admin.auditLogs.afterState": "变更后",
"admin.auditLogs.loginAction": "登录动作",
"admin.auditLogs.loginStatus": "状态",
"admin.auditLogs.failureReason": "失败原因",
"admin.auditLogs.userAgent": "User-Agent",
// 公告管理
"admin.announcements.title": "公告管理",
"admin.announcements.new": "发布公告",
"admin.announcements.publish": "发布",
"admin.announcements.archive": "归档",
"admin.announcements.pin": "置顶",
"admin.announcements.unpin": "取消置顶",
"admin.announcements.draft": "草稿",
"admin.announcements.published": "已发布",
"admin.announcements.archived": "已归档",
"admin.announcements.audience": "受众",
"admin.announcements.readCount": "已读",
"admin.announcements.author": "发布人",
"admin.announcements.publishedAt": "发布时间",
// 邀请码管理
"admin.invitationCodes.title": "邀请码管理",
"admin.invitationCodes.generate": "批量生成",
"admin.invitationCodes.code": "邀请码",
"admin.invitationCodes.batch": "批次",
"admin.invitationCodes.unused": "未使用",
"admin.invitationCodes.used": "已使用",
"admin.invitationCodes.expired": "已过期",
"admin.invitationCodes.bindRole": "绑定角色",
"admin.invitationCodes.bindClass": "绑定班级",
"admin.invitationCodes.bindEmail": "限定邮箱",
"admin.invitationCodes.usedBy": "使用者",
"admin.invitationCodes.usedAt": "使用时间",
"admin.invitationCodes.expiresAt": "过期时间",
"admin.invitationCodes.generateCount": "生成数量",
"admin.invitationCodes.generateSuccess": "成功生成 {{count}} 个邀请码",
// 文件管理
"admin.files.title": "文件管理",
"admin.files.filename": "文件名",
"admin.files.mimeType": "类型",
"admin.files.size": "大小",
"admin.files.entityType": "关联类型",
"admin.files.uploadedBy": "上传者",
"admin.files.totalFiles": "文件总数",
"admin.files.totalSize": "总大小",
"admin.files.batchDelete": "批量删除",
"admin.files.preview": "预览",
// AI 配置
"admin.aiSettings.title": "AI 配置",
"admin.aiSettings.providers": "AI Provider",
"admin.aiSettings.usage": "用量统计",
"admin.aiSettings.totalRequests": "总请求数",
"admin.aiSettings.totalTokens": "总 Token",
"admin.aiSettings.totalCost": "总费用",
"admin.aiSettings.provider": "Provider",
"admin.aiSettings.model": "模型",
"admin.aiSettings.isActive": "启用",
"admin.aiSettings.isPublic": "公共",
"admin.aiSettings.addProvider": "添加 Provider",
// 系统设置增强
"admin.system.security": "安全策略",
"admin.system.fileUpload": "文件上传",
"admin.system.notification": "通知配置",
"admin.system.brand": "品牌配置",
"admin.system.passwordMinLength": "密码最小长度",
"admin.system.passwordRequireSpecial": "要求特殊字符",
"admin.system.passwordRequireUppercase": "要求大写字母",
"admin.system.sessionTimeout": "会话超时(分钟)",
"admin.system.forcePasswordChange": "强制修改密码",
"admin.system.maxFileSize": "最大文件大小(MB)",
"admin.system.allowedTypes": "允许的文件类型",
"admin.system.notifyNewUser": "新用户通知",
"admin.system.notifyScheduleChange": "调课通知",
"admin.system.notifyAnnouncement": "公告通知",
"admin.system.logoUrl": "Logo URL",
"admin.system.primaryColor": "主题色",
"admin.system.schoolMotto": "校训",
};
/**
* 翻译函数
* @param key i18n key如 "admin.nav.dashboard"
* @param params 模板参数(如 { count: 5 },替换 {{count}}
*/
export function t(
key: string,
params?: Record<string, string | number>,
): string {
let msg = messages[key] ?? key;
if (params) {
for (const [k, v] of Object.entries(params)) {
msg = msg.replace(new RegExp(`\\{\\{${k}\\}\\}`, "g"), String(v));
}
}
return msg;
}