/** * 语言包出口。 * * 组件不得硬编码中文文案,一律从 locale 取,便于整站切换 / 定制。 * 新增文案时同步补 enUS,保持两个语言包结构一致。 */ export interface Locale { name: string /** 空状态等通用文案。 */ empty: { description: string } /** 跨组件通用文案。 */ common: { /** 确认(Modal / 日期面板等) */ confirm: string cancel: string clear: string close: string loading: string /** 选择类组件的占位文案 */ selectPlaceholder: string /** 输入类组件的占位文案 */ inputPlaceholder: string /** 搜索框占位文案 */ searchPlaceholder: string /** 无匹配结果 */ noMatch: string } /** 分页文案,`{total}` / `{page}` 为占位符。 */ pagination: { total: string prev: string next: string page: string pageSize: string goto: string } /** 日期类组件文案,`{year}` / `{month}` 为占位符。 */ date: { placeholder: string startPlaceholder: string endPlaceholder: string today: string now: string year: string month: string weekdays: string[] months: string[] } /** * 表单校验文案,`{label}` / `{len}` / `{min}` / `{max}` 为占位符; * label 为空时会连同其后空白一起移除。 */ form: { required: string type: string pattern: string len: string min: string max: string invalid: string } /** 验证码类组件文案。 */ captcha: { /** 滑块验证:未通过时的提示 */ slide: string /** 滑块验证:通过后的文案 */ verified: string /** 滑块验证:手柄的可访问名称(读屏 / 键盘聚焦时播报) */ sliderLabel: string } /** * 附件管理器文案,`{count}` / `{name}` / `{size}` 为占位符。 */ attachment: { allCategory: string selectAll: string selected: string select: string upload: string download: string remove: string preview: string pending: string pendingCount: string total: string empty: string emptyHint: string limitAccept: string limitSize: string limitCount: string dropHint: string previewEmpty: string prev: string next: string removeConfirm: string removeConfirmSingle: string invalidAccept: string invalidMaxSize: string invalidMaxCount: string } /** 结果 / 缺省页文案(403 / 404 / 500 / 离线 / 空状态)。 */ result: { '403': { title: string; desc: string } '404': { title: string; desc: string } '500': { title: string; desc: string } offline: { title: string; desc: string } empty: { title: string; desc: string } } } export const zhCN: Locale = { name: 'zh-CN', empty: { description: '暂无数据' }, common: { confirm: '确定', cancel: '取消', clear: '清空', close: '关闭', loading: '加载中', selectPlaceholder: '请选择', inputPlaceholder: '请输入', searchPlaceholder: '搜索', noMatch: '无匹配数据', }, pagination: { total: '共 {total} 条', prev: '上一页', next: '下一页', page: '页', pageSize: '条/页', goto: '前往', }, date: { placeholder: '请选择日期', startPlaceholder: '开始日期', endPlaceholder: '结束日期', today: '今天', now: '此刻', year: '{year} 年', month: '{month} 月', // 与日历矩阵一致:周日开头 weekdays: ['日', '一', '二', '三', '四', '五', '六'], months: [ '1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月', ], }, form: { required: '{label}不能为空', type: '{label}格式不正确', pattern: '{label}格式不正确', len: '{label}长度必须为 {len}', min: '{label}长度不能少于 {min}', max: '{label}长度不能超过 {max}', invalid: '{label}校验未通过', }, captcha: { slide: '按住滑块拖动', verified: '验证通过', sliderLabel: '滑动验证', }, attachment: { allCategory: '全部', selectAll: '全选', selected: '已选 {count} 项', select: '选择', upload: '上传', download: '下载', remove: '删除', preview: '预览', pending: '待上传', pendingCount: '待上传 {count} 个', total: '共 {count} 个文件', empty: '暂无文件', emptyHint: '拖拽文件到此处,或点击选择', limitAccept: '支持格式:{accept}', limitSize: '单个文件不超过 {size}', limitCount: '最多 {count} 个待上传', dropHint: '释放文件到此处', previewEmpty: '选择文件查看预览', prev: '上一个', next: '下一个', removeConfirm: '确定删除选中的 {count} 个文件?', removeConfirmSingle: '确定删除「{name}」?', invalidAccept: '「{name}」类型不支持', invalidMaxSize: '「{name}」超过大小限制({size})', invalidMaxCount: '待上传文件最多 {count} 个', }, result: { '403': { title: '无权访问', desc: '你没有访问该页面的权限,请联系管理员', }, '404': { title: '页面不存在', desc: '你访问的页面不存在或已被移除', }, '500': { title: '页面出错了', desc: '服务暂时不可用,请稍后重试', }, offline: { title: '网络已断开', desc: '请检查网络连接后重试', }, empty: { title: '暂无数据', desc: '', }, }, } export const enUS: Locale = { name: 'en-US', empty: { description: 'No data' }, common: { confirm: 'OK', cancel: 'Cancel', clear: 'Clear', close: 'Close', loading: 'Loading', selectPlaceholder: 'Please select', inputPlaceholder: 'Please input', searchPlaceholder: 'Search', noMatch: 'No matching data', }, pagination: { total: 'Total {total}', prev: 'Previous', next: 'Next', page: 'Page', pageSize: '/ page', goto: 'Go to', }, date: { placeholder: 'Select date', startPlaceholder: 'Start date', endPlaceholder: 'End date', today: 'Today', now: 'Now', year: '{year}', month: '{month}', weekdays: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], months: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ], }, form: { required: '{label} is required', type: '{label} format is invalid', pattern: '{label} format is invalid', len: '{label} length must be {len}', min: '{label} length must be at least {min}', max: '{label} length must be at most {max}', invalid: '{label} failed validation', }, captcha: { slide: 'Slide to verify', verified: 'Verified', sliderLabel: 'Slide verification', }, attachment: { allCategory: 'All', selectAll: 'Select all', selected: '{count} selected', select: 'Choose', upload: 'Upload', download: 'Download', remove: 'Delete', preview: 'Preview', pending: 'Pending', pendingCount: '{count} pending', total: '{count} files', empty: 'No files', emptyHint: 'Drop files here, or click to choose', limitAccept: 'Accepted: {accept}', limitSize: 'Up to {size} per file', limitCount: 'At most {count} pending', dropHint: 'Drop files here', previewEmpty: 'Select a file to preview', prev: 'Previous', next: 'Next', removeConfirm: 'Delete the {count} selected files?', removeConfirmSingle: 'Delete "{name}"?', invalidAccept: '"{name}" is not an accepted file type', invalidMaxSize: '"{name}" exceeds the size limit ({size})', invalidMaxCount: 'At most {count} pending files', }, result: { '403': { title: 'Access Denied', desc: 'You do not have permission to view this page. Please contact an administrator.', }, '404': { title: 'Page Not Found', desc: 'The page you visited does not exist or has been removed', }, '500': { title: 'Something Went Wrong', desc: 'The service is temporarily unavailable. Please try again later.', }, offline: { title: 'You Are Offline', desc: 'Please check your network connection and try again', }, empty: { title: 'No Data', desc: '', }, }, }