Files
FileCodeBoxFronted2026/src/i18n/locales/zh-CN.ts
T
2026-06-03 03:27:16 +08:00

754 lines
25 KiB
TypeScript

export default {
// 通用
common: {
confirm: '确认',
cancel: '取消',
close: '关闭',
delete: '删除',
edit: '编辑',
save: '保存',
add: '添加',
back: '返回',
next: '下一页',
previous: '上一页',
loading: '加载中...',
noData: '暂无数据',
success: '成功',
error: '错误',
warning: '警告',
info: '信息',
search: '搜索',
copy: '复制',
uploadSuccess: '上传成功',
uploadFailed: '上传失败',
copySuccess: '复制成功',
copyFailed: '复制失败',
deleteSuccess: '删除成功',
deleteFailed: '删除失败',
downloadSuccess: '下载成功',
downloadFailed: '下载失败',
shareSuccess: '分享成功',
shareFailed: '分享失败',
expiredFile: '文件已过期',
fileNotFound: '文件不存在',
networkError: '网络错误',
unknownError: '未知错误',
invalidFileType: '不支持的文件类型',
fileTooLarge: '文件过大',
uploadCanceled: '上传已取消',
processing: '处理中...',
pleaseWait: '请稍候...',
fileDetails: '文件详情',
enabled: '已开启',
disabled: '已关闭',
minute: '分钟',
files: '个文件',
second: '秒',
hour: '小时',
day: '天',
times: '次',
appName: '文件快递柜 - FileCodeBox',
appDescription: '开箱即用的文件快传系统'
},
// 管理员模块
admin: {
logout: '退出登录',
dashboard: {
title: '仪表盘',
totalFiles: '总文件数',
storageSpace: '存储空间',
todayShares: '今日分享',
totalRetrievals: '累计取件',
activeFiles: '有效文件:{count}',
todayIncrease: '今日新增容量:{count}',
yesterdayShares: '昨日分享:{count}',
serverUptime: '运行时间',
refresh: '刷新数据',
fileHealth: '文件健康',
fileHealthDesc: '基于真实文件记录统计有效、过期和类型分布。',
activeFileRatio: '有效占比',
fileShareRatio: '文件占比',
textShareRatio: '文本占比',
binaryFiles: '文件分享 {count} 个',
textShares: '文本分享 {count} 条',
expiredFiles: '已过期文件',
needCleanup: '可在文件管理中清理',
chunkedFiles: '分片上传文件',
storagePolicy: '存储与上传策略',
storagePolicyDesc: '当前后台配置对上传链路的影响。',
storageBackend: '存储后端',
singleFileLimit: '单文件上限',
guestUpload: '游客上传',
maxSaveTime: '最长保存',
noSaveLimit: '不限制',
todayCapacityReference: '今日容量 / 单文件上限',
fileTypeDistribution: '类型分布',
textType: '文本',
recentFiles: '最近分享',
recentFilesDesc: '最近创建的分享记录,便于快速核对状态。',
available: '可取件',
table: {
file: '文件',
size: '大小',
usage: '取件',
status: '状态'
}
},
fileManage: {
title: '文件管理'
},
settings: {
title: '系统设置',
basicSettings: '基本设置',
websiteInfo: '网站基本信息',
websiteName: '网站名称',
websiteDescription: '网站描述',
siteName: '网站名称',
adminPassword: '管理员密码',
passwordPlaceholder: '如需修改请输入新密码',
passwordNote: '不修改请留空',
keywords: 'SEO 关键词',
themeSelection: '界面主题',
robotsFile: 'Robots.txt 配置',
notificationSettings: '通知设置',
notificationTitle: '公告标题',
notificationContent: '公告内容',
storageSettings: '存储配置',
storagePath: '文件存储路径',
storagePathPlaceholder: '使用默认路径可留空',
storageMethod: '存储方式',
localStorage: '本地存储',
s3Storage: 'S3 对象存储',
webdavStorage: 'WebDAV 存储',
chunkUploadNote: '分片上传(实验性功能,大文件上传更稳定)',
s3AccessKeyId: 'Access Key ID',
s3SecretAccessKey: 'Secret Access Key',
s3BucketName: '存储桶名称',
s3EndpointUrl: '服务端点 URL',
s3RegionName: '区域名称',
s3SignatureVersion: '签名版本',
s3Hostname: '自定义域名',
s3v2: 'S3v2',
s3v4: 'S3v4',
autoPlaceholder: '自动识别',
enabled: '已启用',
disabled: '已禁用',
webdavUrl: '输入 WebDAV 服务地址',
webdavUsername: '输入 WebDAV 用户名',
webdavPassword: '输入 WebDAV 密码',
webdavUrlPlaceholder: '输入 WebDAV 服务地址',
webdavUsernamePlaceholder: '输入 WebDAV 用户名',
webdavPasswordPlaceholder: '输入 WebDAV 密码',
enableProxy: '启用下载代理',
uploadLimits: '上传设置',
uploadRateLimit: '限流时间窗口(在此时间内限制上传次数)',
uploadPerMinute: '限流时间窗口(在此时间内限制上传次数)',
minute: '分钟',
uploadCountLimit: '允许上传文件数(限流窗口内最多上传几个文件)',
files: '个文件',
fileSizeLimit: '单文件大小上限',
expirationMethod: '过期方式',
expirationType: '过期方式',
expiration: {
day: '按天数',
hour: '按小时',
minute: '按分钟',
forever: '永久有效',
count: '按下载次数'
},
maxSaveTime: '文件最长保存时间',
timeUnits: {
second: '秒',
minute: '分钟',
hour: '小时',
day: '天'
},
guestUpload: '允许游客上传',
errorLimits: '访问保护',
errorRateLimit: '检测时间窗口(在此时间内统计错误次数)',
errorPerMinute: '检测时间窗口(在此时间内统计错误次数)',
errorCountLimit: '允许错误次数(超过后临时封禁)',
times: '次',
saveChanges: '保存设置',
fileSizeUnits: {
kb: 'KB',
mb: 'MB',
gb: 'GB'
}
}
},
// 页面标题和导航
nav: {
sendFile: '发送文件',
retrieveFile: '取件',
fileRecords: '取件记录'
},
// 取件页面
retrieve: {
title: '文件取件',
codeInput: {
placeholder: '请输入5位取件码',
label: '取件码'
},
submit: '取件',
needSendFile: '需要发送文件?点击这里',
recordsDrawer: '取件记录',
messages: {
invalidCode: '请输入5位取件码',
retrieveSuccess: '文件获取成功',
invalidCodeError: '无效的取件码',
retrieveFailure: '获取文件失败:',
networkError: '取件失败,请稍后重试:',
unknownError: '未知错误',
previewUnavailable: '暂时无法预览文件信息,可直接取件'
},
workspace: {
sendFile: '发送文件',
inspect: '预览',
inspecting: '预览中',
retrieving: '取件中',
ready: '可取件',
noPreview: '等待取件码',
noPreviewDesc: '输入 5 位取件码后会先读取文件信息,确认后再消耗取件次数。',
latestRecord: '最近取件',
noRecord: '暂无取件记录',
currentCode: '取件码',
fileSize: '文件大小',
viewDetail: '查看详情',
historyCount: '{count} 条记录',
openRecords: '打开取件记录',
security: '安全取件',
securityState: '预览不会消耗取件次数,确认取件后才会记录访问。',
noExpiry: '不限制',
unlimited: '不限次数',
remainingCount: '剩余 {count} 次',
textType: '文本内容',
fileType: '文件下载',
expiresAt: '过期时间',
remainingDownloads: '剩余次数',
usedCount: '已取件',
emptyCode: '未输入',
previewState: '预览状态',
waiting: '等待输入'
}
},
// 发送页面
send: {
title: '文件发送',
sendText: '发送文本',
fileDetails: '文件详情',
expirationMethod: '过期方式',
uploadArea: {
dragText: '拖拽文件到此处或',
clickText: '点击选择文件',
textInput: '在此输入要发送的文本...',
placeholder: '点击或拖放文件到此处上传',
description: '支持各种常见格式',
descriptionWithLimit: '支持各种常见格式,最大{size}',
retry: '重试',
selectedFiles: '已选择 {count} 个文件',
status: {
initializing: '正在初始化上传...',
uploading: '正在上传文件...',
confirming: '正在确认上传...',
success: '上传成功!'
}
},
submit: '安全寄送',
submitting: '发送中...',
needRetrieveFile: '需要取件?点击这里',
sendRecords: '发件记录',
secureEncryption: '安全加密',
workspace: {
uploadLimit: '单文件上限',
uploadMode: '上传模式',
standardMode: '标准上传',
chunkMode: '分片上传',
guestPolicy: '游客上传',
guestOpen: '允许',
guestClosed: '已关闭',
currentTask: '当前任务',
awaitingFile: '等待选择文件',
fileReady: '已选择 {count} 个文件',
textDraft: '文本草稿 {count} 字',
payload: '发送内容',
expirationPreview: '有效期',
security: '安全状态',
latestRecord: '最近一次发送',
noRecord: '暂无记录',
copyLink: '复制链接',
viewDetail: '查看详情',
historyTitle: '发送历史',
historyCount: '{count} 条记录',
openRecords: '打开发送记录'
},
fileDetail: {
title: '文件详情',
content: '文件内容',
previewContent: '预览内容',
download: '点击下载',
qrCode: '取件二维码',
scanQrCode: '扫描二维码快速取件'
},
contentPreview: {
title: '内容预览'
},
fileManage: {
title: '文件管理',
searchPlaceholder: '搜索文件名称、描述...',
allFiles: '所有文件',
editFileInfo: '编辑文件信息',
saveChanges: '保存更改',
headers: {
code: '取件码',
name: '名称',
size: '大小',
description: '描述',
expiration: '过期时间',
actions: '操作'
},
form: {
code: '取件码',
codePlaceholder: '输入取件码',
filename: '文件名称',
filenamePlaceholder: '输入文件名称',
suffix: '文件后缀',
suffixPlaceholder: '输入文件后缀',
downloadLimit: '下载次数限制',
downloadLimitPlaceholder: '输入下载次数限制'
}
},
expiration: {
label: '过期时间',
placeholders: {
days: '输入天数',
hours: '输入小时数',
minutes: '输入分钟数',
count: '输入查看次数',
forever: '永久',
default: '输入值'
},
units: {
days: '天',
hours: '小时',
minutes: '分钟',
times: '次',
forever: '永久'
}
},
time: {
day: '按天',
hour: '按小时',
minute: '按分钟',
forever: '永久',
count: '按次数'
},
messages: {
selectFile: '请选择要上传的文件',
enterText: '请输入要发送的文本',
enterExpirationValue: '请输入过期值',
expirationTooLong: '过期时间不能超过{days}天',
sendSuccess: '文件发送成功!取件码:{code}',
initChunkUploadFailed: '初始化切片上传失败',
chunkUploadFailed: '切片 {index} 上传失败',
completeUploadFailed: '完成上传失败',
uploadFailed: '上传失败,请稍后重试',
guestUploadDisabled: '游客上传功能已关闭',
fileSizeExceeded: '文件大小超过限制 ({size})',
serverError: '服务器响应异常',
sendFailed: '发送失败,请稍后重试',
expiresAfterCount: '{count}次后过期',
expiresAt: '{date}过期',
emptyFileError: '无法读取空文件',
fileAddedFromClipboard: '已从剪贴板添加文件:{filename}',
fileProcessingFailed: '文件处理失败',
expiresAfter: '{value}{unit}后过期'
}
},
// 文件管理
fileManage: {
title: '文件管理',
searchPlaceholder: '搜索文件名称、描述...',
allFiles: '所有文件',
editFileInfo: '编辑文件信息',
saveChanges: '保存更改',
viewText: '查看',
textPreview: '文本预览',
copyText: '复制文本',
copySuccess: '文本已复制到剪贴板',
copyFailed: '复制失败,请重试',
charCount: '共 {count} 个字符',
headers: {
code: '取件码',
name: '名称',
size: '大小',
description: '描述',
expiration: '过期时间',
actions: '操作'
},
form: {
code: '取件码',
codePlaceholder: '输入取件码',
filename: '文件名称',
filenamePlaceholder: '输入文件名称',
suffix: '文件后缀',
suffixPlaceholder: '输入文件后缀',
downloadLimit: '下载次数限制',
downloadLimitPlaceholder: '输入下载次数限制'
}
},
// 文件记录
fileRecord: {
filename: '文件名',
size: '文件大小',
date: '取件日期',
code: '取件码',
actions: '操作',
download: '下载',
viewDetails: '查看详情',
deleteRecord: '删除记录',
preview: '预览',
copyContent: '复制内容',
contentCopied: '内容已复制到剪贴板',
copyFailed: '复制失败,请重试'
},
// 文件详情模态框
fileDetail: {
title: '文件详情',
content: '文件内容',
previewContent: '预览内容',
download: '点击下载',
qrCode: '取件二维码',
scanQrCode: '扫描二维码快速取件'
},
// 内容预览
contentPreview: {
title: '内容预览'
},
// 侧边抽屉
drawer: {
noRecords: '暂无记录'
},
// 文件大小单位
fileSize: {
bytes: 'Bytes',
kb: 'KB',
mb: 'MB',
gb: 'GB',
tb: 'TB'
},
// 管理页面
manage: {
settings: {
title: '系统设置',
basicSettings: '基本设置',
siteName: '网站名称',
adminPassword: '管理员密码',
passwordPlaceholder: '如需修改请输入新密码',
passwordNote: '不修改请留空',
keywords: 'SEO 关键词',
themeSelection: '界面主题',
robotsFile: 'Robots.txt 配置',
notificationSettings: '通知设置',
notificationTitle: '公告标题',
notificationContent: '公告内容',
storageSettings: '存储配置',
storagePath: '文件存储路径',
storagePathPlaceholder: '使用默认路径可留空',
storageMethod: '存储方式',
localStorage: '本地存储',
s3Storage: 'S3 对象存储',
webdavStorage: 'WebDAV 存储',
chunkUploadNote: '分片上传(实验性功能,大文件上传更稳定)',
uploadLimits: '上传设置',
uploadPerMinute: '限流时间窗口(在此时间内限制上传次数)',
uploadCountLimit: '允许上传文件数(限流窗口内最多上传几个文件)',
fileSizeLimit: '单文件大小上限',
expiration: {
day: '按天数',
hour: '按小时',
minute: '按分钟',
forever: '永久有效',
count: '按下载次数'
},
maxSaveTime: '文件最长保存时间',
s3AccessKeyId: 'Access Key ID',
s3SecretAccessKey: 'Secret Access Key',
s3BucketName: '存储桶名称',
s3EndpointUrl: '服务端点 URL',
s3RegionName: '区域名称',
s3SignatureVersion: '签名版本',
s3Hostname: '自定义域名',
s3v2: 'S3v2',
s3v4: 'S3v4',
autoPlaceholder: '自动识别',
enableProxy: '启用下载代理',
webdavUrlPlaceholder: '输入 WebDAV 服务地址',
webdavUsernamePlaceholder: '输入 WebDAV 用户名',
webdavPasswordPlaceholder: '输入 WebDAV 密码',
fileSizeUnits: {
kb: 'KB',
mb: 'MB',
gb: 'GB'
},
expirationType: '过期方式',
guestUpload: '允许游客上传',
errorLimits: '访问保护',
errorPerMinute: '检测时间窗口(在此时间内统计错误次数)',
errorCountLimit: '允许错误次数(超过后临时封禁)',
saveChanges: '保存设置',
refreshConfig: '刷新配置',
refreshing: '刷新中',
saving: '保存中',
unsavedChanges: '有未保存的配置变更',
allChangesSaved: '所有配置已保存',
refreshBlocked: '请先保存当前变更再刷新'
},
dashboard: {
title: '仪表盘',
totalFiles: '总文件数',
storageSpace: '存储空间',
todayShares: '今日分享',
totalRetrievals: '累计取件',
activeFiles: '有效文件:{count}',
todayIncrease: '今日新增容量:{count}',
yesterdayShares: '昨日分享:{count}',
serverUptime: '运行时间',
refresh: '刷新数据',
fileHealth: '文件健康',
fileHealthDesc: '基于真实文件记录统计有效、过期和类型分布。',
activeFileRatio: '有效占比',
fileShareRatio: '文件占比',
textShareRatio: '文本占比',
binaryFiles: '文件分享 {count} 个',
textShares: '文本分享 {count} 条',
expiredFiles: '已过期文件',
needCleanup: '可在文件管理中清理',
chunkedFiles: '分片上传文件',
storagePolicy: '存储与上传策略',
storagePolicyDesc: '当前后台配置对上传链路的影响。',
storageBackend: '存储后端',
singleFileLimit: '单文件上限',
guestUpload: '游客上传',
maxSaveTime: '最长保存',
noSaveLimit: '不限制',
todayCapacityReference: '今日容量 / 单文件上限',
fileTypeDistribution: '类型分布',
textType: '文本',
recentFiles: '最近分享',
recentFilesDesc: '最近创建的分享记录,便于快速核对状态。',
available: '可取件',
table: {
file: '文件',
size: '大小',
usage: '取件',
status: '状态'
}
},
fileManage: {
title: '文件管理',
searchPlaceholder: '搜索文件名称、描述...',
allFiles: '所有文件',
editFileInfo: '编辑文件信息',
saveChanges: '保存更改',
headers: {
code: '取件码',
name: '名称',
size: '大小',
description: '描述',
expiration: '过期时间',
actions: '操作'
},
form: {
code: '取件码',
codePlaceholder: '输入取件码',
filename: '文件名称',
filenamePlaceholder: '输入文件名称',
suffix: '文件后缀',
suffixPlaceholder: '输入文件后缀',
downloadLimit: '下载次数限制',
downloadLimitPlaceholder: '输入下载次数限制'
},
updateFailed: '更新失败',
deleteFailed: '删除失败',
deleteConfirm: '确认删除这个文件?此操作不可撤销。',
loadFileListFailed: '加载文件列表失败'
},
systemSettings: {
title: '系统设置',
basicSettings: '基本设置',
websiteInfo: '网站基本信息',
websiteName: '网站名称',
websiteDescription: '网站描述',
adminPassword: '管理员密码',
passwordPlaceholder: '如需修改请输入新密码',
passwordNote: '不修改请留空',
keywords: 'SEO 关键词',
themeSelection: '界面主题',
notificationSettings: '通知设置',
notificationTitle: '公告标题',
notificationContent: '公告内容',
storageSettings: '存储配置',
storagePath: '文件存储路径',
storagePathPlaceholder: '使用默认路径可留空',
storageMethod: '存储方式',
localStorage: '本地存储',
s3Storage: 'S3 对象存储',
webdavStorage: 'WebDAV 存储',
chunkUploadNote: '分片上传(实验性功能,大文件上传更稳定)',
enabled: '已启用',
disabled: '已禁用',
webdavUrl: '输入 WebDAV 服务地址',
webdavUsername: '输入 WebDAV 用户名',
webdavPassword: '输入 WebDAV 密码',
enableProxy: '启用下载代理',
uploadLimits: '上传设置',
uploadRateLimit: '限流时间窗口(在此时间内限制上传次数)',
minute: '分钟',
uploadCountLimit: '允许上传文件数(限流窗口内最多上传几个文件)',
files: '个文件',
fileSizeLimit: '单文件大小上限',
expirationMethod: '过期方式',
expirationMethods: {
day: '按天数',
hour: '按小时',
minute: '按分钟',
forever: '永久有效',
count: '按下载次数'
},
expiration: {
day: '按天数',
hour: '按小时',
minute: '按分钟',
forever: '永久有效',
count: '按下载次数'
},
maxSaveTime: '文件最长保存时间',
timeUnits: {
second: '秒',
minute: '分钟',
hour: '小时',
day: '天'
},
guestUpload: '允许游客上传',
errorLimits: '访问保护',
errorRateLimit: '检测时间窗口(在此时间内统计错误次数)',
errorCountLimit: '允许错误次数(超过后临时封禁)',
times: '次',
saveSettings: '保存设置',
saveSuccess: '设置已保存',
saveFailed: '保存失败,请重试',
getConfigFailed: '获取配置失败,请刷新页面'
},
login: {
title: '登录',
password: '密码',
passwordPlaceholder: '密码',
loginButton: '登录',
loggingIn: '登录中...',
invalidPassword: '无效的密码',
passwordTooShort: '密码长度至少为6位',
loginFailed: '登录失败',
noValidToken: '登录失败:未获取到有效令牌'
}
},
// 工具函数相关
utils: {
common: {
formatTime: '格式化时间戳为可读格式',
formatFileSize: '格式化文件大小',
formatDuration: '格式化持续时间',
time: {
forever: '永久',
day: '天',
hour: '小时',
minute: '分钟',
second: '秒'
},
copyToClipboard: '复制文本到剪贴板',
copyFailed: '复制失败:',
debounce: '防抖函数',
throttle: '节流函数',
validateEmail: '验证邮箱格式',
validateUrl: '验证URL格式',
generateRandomString: '生成随机字符串',
deepClone: '深度克隆对象',
getFileExtension: '获取文件扩展名',
isMobileDevice: '检查是否为移动设备',
formatNumber: '格式化数字,添加千分位分隔符'
},
clipboard: {
title: '剪贴板工具函数',
copyText: '复制文本到剪贴板',
copySuccess: '复制成功',
copyFailed: '复制失败,请手动复制'
}
},
// 组件相关
components: {
pagination: {
showing: '显示第',
to: '到',
of: '条,共',
total: '条',
previous: '上一页',
next: '下一页'
},
languageSwitcher: {
clickOutsideToClose: '点击外部关闭下拉菜单'
},
borderProgressBar: {
borderWidth: '边框宽度',
cornerRadius: '拐角半径',
createGradient: '创建渐变',
drawBackground: '绘制背景',
calculateProgress: '计算进度',
drawProgress: '绘制进度'
}
},
// 其他通用文本
misc: {
emptyFileError: '无法读取空文件',
fileAddedFromClipboard: '已从剪贴板添加文件:',
fileProcessFailed: '文件处理失败',
chunkSize: '保持 2MB 的切片大小用于计算哈希',
secureContext: '如果不是安全上下文(HTTP),则返回一个基于文件信息的替代哈希',
cryptoFallback: '如果 crypto.subtle.digest 失败,使用替代方案',
generateAlternativeHash: '生成替代哈希的函数',
fileInfoHash: '使用文件名、大小和最后修改时间生成一个简单的哈希',
convertToHex: '转换为16进制字符串并填充到64位',
defaultChunkSize: '默认切片大小为5MB',
initChunkUpload: '1. 初始化切片上传',
uploadChunk: '2. 上传切片',
completeUpload: '3. 完成上传',
chunkUploadFailed: '切片上传失败:',
uploadProgressListener: '添加上传进度监听',
noLimitCheck: '如果没有限制,直接返回true',
expirationValidation: '添加过期时间验证',
chunkUploadReplacement: '使用切片上传替代原来的直接上传',
textUploadUnchanged: '文本上传保持不变',
addSendRecord: '添加新的发送记录',
permanent: '永久',
sendSuccessMessage: '显示发送成功消息',
resetForm: '重置表单 - 只重置文件和文本内容,保留过期信息',
showDetails: '显示详情',
autoCopyLink: '自动复制取件码链接',
delayedLoading: '使用 onMounted 钩子延迟加载一些非关键资源或初始化',
nonCriticalInit: '这里可以放置一些非立即需要的初始化代码'
}
}