mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
0c00f8e0b3
- Tier cards (Hostel Bunkmate through No Return Ticket) with gradient icons and placeholder state for empty tiers - Animated shimmer badge and subtle radial glow behind the card - Mobile-responsive layout, name chips show just the month on small screens to avoid overflow - Copy + translations for all 15 supported languages
2274 lines
113 KiB
TypeScript
2274 lines
113 KiB
TypeScript
const zh: Record<string, string> = {
|
||
// Common
|
||
'common.save': '保存',
|
||
'common.showMore': '显示更多',
|
||
'common.showLess': '收起',
|
||
'common.cancel': '取消',
|
||
'common.clear': '清除',
|
||
'common.delete': '删除',
|
||
'common.edit': '编辑',
|
||
'common.add': '添加',
|
||
'common.loading': '加载中...',
|
||
'common.import': '导入',
|
||
'common.error': '错误',
|
||
'common.unknownError': '未知错误',
|
||
'common.tooManyAttempts': '尝试次数过多,请稍后再试。',
|
||
'common.back': '返回',
|
||
'common.all': '全部',
|
||
'common.close': '关闭',
|
||
'common.open': '打开',
|
||
'common.upload': '上传',
|
||
'common.search': '搜索',
|
||
'common.confirm': '确认',
|
||
'common.ok': '确定',
|
||
'common.yes': '是',
|
||
'common.no': '否',
|
||
'common.or': '或',
|
||
'common.none': '无',
|
||
'common.date': '日期',
|
||
'common.rename': '重命名',
|
||
'common.name': '名称',
|
||
'common.email': '邮箱',
|
||
'common.password': '密码',
|
||
'common.saving': '保存中...',
|
||
'common.saved': '已保存',
|
||
'common.expand': '展开',
|
||
'common.collapse': '折叠',
|
||
'trips.memberRemoved': '{username} 已移除',
|
||
'trips.memberRemoveError': '移除失败',
|
||
'trips.memberAdded': '{username} 已添加',
|
||
'trips.memberAddError': '添加失败',
|
||
'trips.reminder': '提醒',
|
||
'trips.reminderNone': '无',
|
||
'trips.reminderDay': '天',
|
||
'trips.reminderDays': '天',
|
||
'trips.reminderCustom': '自定义',
|
||
'trips.reminderDaysBefore': '天前提醒',
|
||
'trips.reminderDisabledHint': '旅行提醒已禁用。请在管理 > 设置 > 通知中启用。',
|
||
'common.update': '更新',
|
||
'common.change': '修改',
|
||
'common.uploading': '上传中…',
|
||
'common.backToPlanning': '返回规划',
|
||
'common.reset': '重置',
|
||
|
||
// Navbar
|
||
'nav.trip': '旅行',
|
||
'nav.share': '分享',
|
||
'nav.settings': '设置',
|
||
'nav.admin': '管理',
|
||
'nav.logout': '退出登录',
|
||
'nav.lightMode': '浅色模式',
|
||
'nav.darkMode': '深色模式',
|
||
'nav.autoMode': '自动模式',
|
||
'nav.administrator': '管理员',
|
||
|
||
// Dashboard
|
||
'dashboard.title': '我的旅行',
|
||
'dashboard.subtitle.loading': '加载旅行中...',
|
||
'dashboard.subtitle.trips': '{count} 次旅行({archived} 已归档)',
|
||
'dashboard.subtitle.empty': '开始你的第一次旅行',
|
||
'dashboard.subtitle.activeOne': '{count} 个进行中的旅行',
|
||
'dashboard.subtitle.activeMany': '{count} 个进行中的旅行',
|
||
'dashboard.subtitle.archivedSuffix': ' · {count} 已归档',
|
||
'dashboard.newTrip': '新建旅行',
|
||
'dashboard.gridView': '网格视图',
|
||
'dashboard.listView': '列表视图',
|
||
'dashboard.currency': '货币',
|
||
'dashboard.timezone': '时区',
|
||
'dashboard.localTime': '本地',
|
||
'dashboard.timezoneCustomTitle': '自定义时区',
|
||
'dashboard.timezoneCustomLabelPlaceholder': '标签(可选)',
|
||
'dashboard.timezoneCustomTzPlaceholder': '如 America/New_York',
|
||
'dashboard.timezoneCustomAdd': '添加',
|
||
'dashboard.timezoneCustomErrorEmpty': '请输入时区标识符',
|
||
'dashboard.timezoneCustomErrorInvalid': '无效的时区。请使用 Europe/Berlin 这样的格式',
|
||
'dashboard.timezoneCustomErrorDuplicate': '已添加',
|
||
'dashboard.emptyTitle': '暂无旅行',
|
||
'dashboard.emptyText': '创建你的第一次旅行,开始规划吧!',
|
||
'dashboard.emptyButton': '创建第一次旅行',
|
||
'dashboard.nextTrip': '下次旅行',
|
||
'dashboard.shared': '共享',
|
||
'dashboard.sharedBy': '由 {name} 分享',
|
||
'dashboard.days': '天',
|
||
'dashboard.places': '地点',
|
||
'dashboard.members': '旅伴',
|
||
'dashboard.archive': '归档',
|
||
'dashboard.copyTrip': '复制',
|
||
'dashboard.copySuffix': '副本',
|
||
'dashboard.restore': '恢复',
|
||
'dashboard.archived': '已归档',
|
||
'dashboard.status.ongoing': '进行中',
|
||
'dashboard.status.today': '今天',
|
||
'dashboard.status.tomorrow': '明天',
|
||
'dashboard.status.past': '已结束',
|
||
'dashboard.status.daysLeft': '还剩 {count} 天',
|
||
'dashboard.toast.loadError': '加载旅行失败',
|
||
'dashboard.toast.created': '旅行创建成功!',
|
||
'dashboard.toast.createError': '创建旅行失败',
|
||
'dashboard.toast.updated': '旅行已更新!',
|
||
'dashboard.toast.updateError': '更新旅行失败',
|
||
'dashboard.toast.deleted': '旅行已删除',
|
||
'dashboard.toast.deleteError': '删除旅行失败',
|
||
'dashboard.toast.archived': '旅行已归档',
|
||
'dashboard.toast.archiveError': '归档旅行失败',
|
||
'dashboard.toast.restored': '旅行已恢复',
|
||
'dashboard.toast.restoreError': '恢复旅行失败',
|
||
'dashboard.toast.copied': '旅行已复制!',
|
||
'dashboard.toast.copyError': '复制旅行失败',
|
||
'dashboard.confirm.delete': '删除旅行「{title}」?所有地点和计划将被永久删除。',
|
||
'dashboard.editTrip': '编辑旅行',
|
||
'dashboard.createTrip': '创建新旅行',
|
||
'dashboard.tripTitle': '标题',
|
||
'dashboard.tripTitlePlaceholder': '如:日本夏日之旅',
|
||
'dashboard.tripDescription': '描述',
|
||
'dashboard.tripDescriptionPlaceholder': '这次旅行是关于什么的?',
|
||
'dashboard.startDate': '开始日期',
|
||
'dashboard.endDate': '结束日期',
|
||
'dashboard.dayCount': '天数',
|
||
'dashboard.dayCountHint': '未设置旅行日期时要规划的天数。',
|
||
'dashboard.noDateHint': '未设置日期——将默认创建 7 天。你可以随时修改。',
|
||
'dashboard.coverImage': '封面图片',
|
||
'dashboard.addCoverImage': '添加封面图片',
|
||
'dashboard.addMembers': '旅伴',
|
||
'dashboard.addMember': '添加成员',
|
||
'dashboard.coverSaved': '封面图片已保存',
|
||
'dashboard.coverUploadError': '上传失败',
|
||
'dashboard.coverRemoveError': '移除失败',
|
||
'dashboard.titleRequired': '标题为必填项',
|
||
'dashboard.endDateError': '结束日期必须晚于开始日期',
|
||
|
||
// Settings
|
||
'settings.title': '设置',
|
||
'settings.subtitle': '配置你的个人设置',
|
||
'settings.tabs.display': '显示',
|
||
'settings.tabs.map': '地图',
|
||
'settings.tabs.notifications': '通知',
|
||
'settings.tabs.integrations': '集成',
|
||
'settings.tabs.account': '账户',
|
||
'settings.tabs.offline': 'Offline',
|
||
'settings.tabs.about': '关于',
|
||
'settings.map': '地图',
|
||
'settings.mapTemplate': '地图模板',
|
||
'settings.mapTemplatePlaceholder.select': '选择模板...',
|
||
'settings.mapDefaultHint': '留空则使用 OpenStreetMap(默认)',
|
||
'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||
'settings.mapHint': '地图瓦片 URL 模板',
|
||
'settings.latitude': '纬度',
|
||
'settings.longitude': '经度',
|
||
'settings.saveMap': '保存地图',
|
||
'settings.apiKeys': 'API 密钥',
|
||
'settings.mapsKey': 'Google Maps API 密钥',
|
||
'settings.mapsKeyHint': '用于地点搜索。需要 Places API (New)。在 console.cloud.google.com 获取',
|
||
'settings.weatherKey': 'OpenWeatherMap API 密钥',
|
||
'settings.weatherKeyHint': '用于天气数据。在 openweathermap.org/api 免费获取',
|
||
'settings.keyPlaceholder': '输入密钥...',
|
||
'settings.configured': '已配置',
|
||
'settings.saveKeys': '保存密钥',
|
||
'settings.display': '显示',
|
||
'settings.colorMode': '颜色模式',
|
||
'settings.light': '浅色',
|
||
'settings.dark': '深色',
|
||
'settings.auto': '自动',
|
||
'settings.language': '语言',
|
||
'settings.temperature': '温度单位',
|
||
'settings.timeFormat': '时间格式',
|
||
'settings.routeCalculation': '路线计算',
|
||
'settings.blurBookingCodes': '模糊预订代码',
|
||
'settings.notifications': '通知',
|
||
'settings.notifyTripInvite': '旅行邀请',
|
||
'settings.notifyBookingChange': '预订变更',
|
||
'settings.notifyTripReminder': '旅行提醒',
|
||
'settings.notifyVacayInvite': 'Vacay 融合邀请',
|
||
'settings.notifyPhotosShared': '共享照片 (Immich)',
|
||
'settings.notifyCollabMessage': '聊天消息 (Collab)',
|
||
'settings.notifyPackingTagged': '行李清单:分配',
|
||
'settings.notifyWebhook': 'Webhook 通知',
|
||
'settings.notificationsDisabled': '通知尚未配置。请联系管理员启用电子邮件或 Webhook 通知。',
|
||
'settings.notificationsActive': '活跃频道',
|
||
'settings.notificationsManagedByAdmin': '通知事件由管理员配置。',
|
||
'admin.notifications.title': '通知',
|
||
'admin.notifications.hint': '选择一个通知渠道。一次只能激活一个。',
|
||
'admin.notifications.none': '已禁用',
|
||
'admin.notifications.email': '电子邮件 (SMTP)',
|
||
'admin.notifications.webhook': 'Webhook',
|
||
'admin.notifications.save': '保存通知设置',
|
||
'admin.notifications.saved': '通知设置已保存',
|
||
'admin.notifications.testWebhook': '发送测试 Webhook',
|
||
'admin.notifications.testWebhookSuccess': '测试 Webhook 发送成功',
|
||
'admin.notifications.testWebhookFailed': '测试 Webhook 发送失败',
|
||
'admin.smtp.title': '邮件与通知',
|
||
'admin.smtp.hint': '用于发送电子邮件通知的 SMTP 配置。',
|
||
'admin.smtp.testButton': '发送测试邮件',
|
||
'admin.webhook.hint': '向外部 Webhook 发送通知(Discord、Slack 等)。',
|
||
'admin.smtp.testSuccess': '测试邮件发送成功',
|
||
'admin.smtp.testFailed': '测试邮件发送失败',
|
||
'dayplan.icsTooltip': '导出日历 (ICS)',
|
||
'share.linkTitle': '公开链接',
|
||
'share.linkHint': '创建一个链接,任何人无需登录即可查看此旅行。仅可查看,无法编辑。',
|
||
'share.createLink': '创建链接',
|
||
'share.deleteLink': '删除链接',
|
||
'share.createError': '无法创建链接',
|
||
'common.copy': '复制',
|
||
'common.copied': '已复制',
|
||
'share.permMap': '地图与计划',
|
||
'share.permBookings': '预订',
|
||
'share.permPacking': '行李',
|
||
'shared.expired': '链接已过期或无效',
|
||
'shared.expiredHint': '此共享旅行链接已失效。',
|
||
'shared.readOnly': '只读共享视图',
|
||
'shared.tabPlan': '计划',
|
||
'shared.tabBookings': '预订',
|
||
'shared.tabPacking': '行李',
|
||
'shared.tabBudget': '预算',
|
||
'shared.tabChat': '聊天',
|
||
'shared.days': '天',
|
||
'shared.places': '个地点',
|
||
'shared.other': '其他',
|
||
'shared.totalBudget': '总预算',
|
||
'shared.messages': '条消息',
|
||
'shared.sharedVia': '通过以下分享',
|
||
'shared.confirmed': '已确认',
|
||
'shared.pending': '待确认',
|
||
'share.permBudget': '预算',
|
||
'share.permCollab': '聊天',
|
||
'settings.on': '开',
|
||
'settings.off': '关',
|
||
'settings.mcp.title': 'MCP 配置',
|
||
'settings.mcp.endpoint': 'MCP 端点',
|
||
'settings.mcp.clientConfig': '客户端配置',
|
||
'settings.mcp.clientConfigHint': '将 <your_token> 替换为下方列表中的 API 令牌。npx 的路径可能需要根据您的系统进行调整(例如 Windows 上为 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
|
||
'settings.mcp.clientConfigHintOAuth': '将 <your_client_id> 和 <your_client_secret> 替换为上方创建的 OAuth 2.1 客户端凭据。首次连接时,mcp-remote 将打开浏览器完成授权。npx 的路径可能需要根据您的系统进行调整(例如 Windows 上为 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
|
||
'settings.mcp.copy': '复制',
|
||
'settings.mcp.copied': '已复制!',
|
||
'settings.mcp.apiTokens': 'API 令牌',
|
||
'settings.mcp.createToken': '创建新令牌',
|
||
'settings.mcp.noTokens': '暂无令牌,请创建一个以连接 MCP 客户端。',
|
||
'settings.mcp.tokenCreatedAt': '创建于',
|
||
'settings.mcp.tokenUsedAt': '使用于',
|
||
'settings.mcp.deleteTokenTitle': '删除令牌',
|
||
'settings.mcp.deleteTokenMessage': '此令牌将立即失效,使用它的所有 MCP 客户端将失去访问权限。',
|
||
'settings.mcp.modal.createTitle': '创建 API 令牌',
|
||
'settings.mcp.modal.tokenName': '令牌名称',
|
||
'settings.mcp.modal.tokenNamePlaceholder': '例如:Claude Desktop、工作电脑',
|
||
'settings.mcp.modal.creating': '创建中…',
|
||
'settings.mcp.modal.create': '创建令牌',
|
||
'settings.mcp.modal.createdTitle': '令牌已创建',
|
||
'settings.mcp.modal.createdWarning': '此令牌只会显示一次,请立即复制并妥善保存——无法找回。',
|
||
'settings.mcp.modal.done': '完成',
|
||
'settings.mcp.toast.created': '令牌已创建',
|
||
'settings.mcp.toast.createError': '创建令牌失败',
|
||
'settings.mcp.toast.deleted': '令牌已删除',
|
||
'settings.mcp.toast.deleteError': '删除令牌失败',
|
||
'settings.mcp.apiTokensDeprecated': 'API 令牌已弃用,将在未来版本中移除。请改用 OAuth 2.1 客户端。',
|
||
'settings.oauth.clients': 'OAuth 2.1 客户端',
|
||
'settings.oauth.clientsHint': '注册 OAuth 2.1 客户端,让第三方 MCP 应用程序(Claude Web、Cursor 等)无需静态令牌即可连接。',
|
||
'settings.oauth.createClient': '新建客户端',
|
||
'settings.oauth.noClients': '没有已注册的 OAuth 客户端。',
|
||
'settings.oauth.clientId': '客户端 ID',
|
||
'settings.oauth.clientSecret': '客户端密钥',
|
||
'settings.oauth.deleteClient': '删除客户端',
|
||
'settings.oauth.deleteClientMessage': '此客户端及所有活跃会话将被永久删除。使用此客户端的任何应用程序将立即失去访问权限。',
|
||
'settings.oauth.rotateSecret': '轮换密钥',
|
||
'settings.oauth.rotateSecretMessage': '将生成新的客户端密钥,所有现有会话将立即失效。在关闭此对话框之前,请更新您的应用程序。',
|
||
'settings.oauth.rotateSecretConfirm': '轮换',
|
||
'settings.oauth.rotateSecretConfirming': '轮换中…',
|
||
'settings.oauth.rotateSecretDoneTitle': '已生成新密钥',
|
||
'settings.oauth.rotateSecretDoneWarning': '此密钥仅显示一次。请立即复制并更新您的应用程序——所有之前的会话已失效。',
|
||
'settings.oauth.activeSessions': '活跃的 OAuth 会话',
|
||
'settings.oauth.sessionScopes': '权限范围',
|
||
'settings.oauth.sessionExpires': '过期时间',
|
||
'settings.oauth.revoke': '撤销',
|
||
'settings.oauth.revokeSession': '撤销会话',
|
||
'settings.oauth.revokeSessionMessage': '这将立即撤销此 OAuth 会话的访问权限。',
|
||
'settings.oauth.modal.createTitle': '注册 OAuth 客户端',
|
||
'settings.oauth.modal.presets': '快速预设',
|
||
'settings.oauth.modal.clientName': '应用程序名称',
|
||
'settings.oauth.modal.clientNamePlaceholder': '例如 Claude Web、我的 MCP 应用',
|
||
'settings.oauth.modal.redirectUris': '重定向 URI',
|
||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||
'settings.oauth.modal.redirectUrisHint': '每行一个 URI。需要 HTTPS(localhost 除外)。要求精确匹配。',
|
||
'settings.oauth.modal.scopes': '允许的权限范围',
|
||
'settings.oauth.modal.scopesHint': 'list_trips 和 get_trip_summary 始终可用——无需权限范围。它们帮助 AI 发现所需的行程 ID。',
|
||
'settings.oauth.modal.selectAll': '全选',
|
||
'settings.oauth.modal.deselectAll': '取消全选',
|
||
'settings.oauth.modal.creating': '注册中…',
|
||
'settings.oauth.modal.create': '注册客户端',
|
||
'settings.oauth.modal.createdTitle': '客户端已注册',
|
||
'settings.oauth.modal.createdWarning': '客户端密钥仅显示一次。请立即复制——无法恢复。',
|
||
'settings.oauth.toast.createError': '注册 OAuth 客户端失败',
|
||
'settings.oauth.toast.deleted': 'OAuth 客户端已删除',
|
||
'settings.oauth.toast.deleteError': '删除 OAuth 客户端失败',
|
||
'settings.oauth.toast.revoked': '会话已撤销',
|
||
'settings.oauth.toast.revokeError': '撤销会话失败',
|
||
'settings.oauth.toast.rotateError': '轮换客户端密钥失败',
|
||
'settings.account': '账户',
|
||
'settings.about': '关于',
|
||
'settings.about.reportBug': '报告错误',
|
||
'settings.about.reportBugHint': '发现问题?告诉我们',
|
||
'settings.about.featureRequest': '功能建议',
|
||
'settings.about.featureRequestHint': '建议一个新功能',
|
||
'settings.about.wikiHint': '文档和指南',
|
||
'settings.about.supporters.badge': '月度支持者',
|
||
'settings.about.supporters.title': '与 TREK 同行的伙伴',
|
||
'settings.about.supporters.subtitle': '当你在规划下一段路线时,这些人也在一起规划 TREK 的未来。他们每月的支持直接用于开发与真实投入的时间——让 TREK 保持开源。',
|
||
'settings.about.supporters.since': '{date} 起的支持者',
|
||
'settings.about.supporters.tierEmpty': '成为第一个',
|
||
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
|
||
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
|
||
'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
|
||
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
|
||
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
|
||
'settings.about.description': 'TREK 是一个自托管的旅行规划工具,帮助你从最初的想法到最后的回忆,全程组织你的旅行。日程规划、预算、行李清单、照片等——一切尽在一处,在你自己的服务器上。',
|
||
'settings.about.madeWith': '用',
|
||
'settings.about.madeBy': '由 Maurice 和不断壮大的开源社区打造。',
|
||
'settings.username': '用户名',
|
||
'settings.email': '邮箱',
|
||
'settings.role': '角色',
|
||
'settings.roleAdmin': '管理员',
|
||
'settings.oidcLinked': '已关联',
|
||
'settings.changePassword': '修改密码',
|
||
'settings.mustChangePassword': '您必须更改密码才能继续。请在下方设置新密码。',
|
||
'settings.currentPassword': '当前密码',
|
||
'settings.currentPasswordRequired': '请输入当前密码',
|
||
'settings.newPassword': '新密码',
|
||
'settings.confirmPassword': '确认新密码',
|
||
'settings.updatePassword': '更新密码',
|
||
'settings.passwordRequired': '请输入当前密码和新密码',
|
||
'settings.passwordTooShort': '密码至少需要 8 个字符',
|
||
'settings.passwordMismatch': '两次输入的密码不一致',
|
||
'settings.passwordWeak': '密码必须包含大写字母、小写字母、数字和特殊字符',
|
||
'settings.passwordChanged': '密码修改成功',
|
||
'settings.deleteAccount': '删除账户',
|
||
'settings.deleteAccountTitle': '确定删除账户?',
|
||
'settings.deleteAccountWarning': '你的账户以及所有旅行、地点和文件将被永久删除。此操作无法撤销。',
|
||
'settings.deleteAccountConfirm': '永久删除',
|
||
'settings.deleteBlockedTitle': '无法删除',
|
||
'settings.deleteBlockedMessage': '你是唯一的管理员。请先将其他用户提升为管理员,然后再删除账户。',
|
||
'settings.roleUser': '用户',
|
||
'settings.saveProfile': '保存资料',
|
||
'settings.mfa.title': '双因素认证 (2FA)',
|
||
'settings.mfa.description': '登录时添加第二步验证。使用身份验证器应用(Google Authenticator、Authy 等)。',
|
||
'settings.mfa.requiredByPolicy': '管理员要求双因素身份验证。请先完成下方的身份验证器设置后再继续。',
|
||
'settings.mfa.backupTitle': '备用代码',
|
||
'settings.mfa.backupDescription': '如果你无法使用身份验证器应用,可使用这些一次性备用代码登录。',
|
||
'settings.mfa.backupWarning': '请立即保存这些代码。每个代码只能使用一次。',
|
||
'settings.mfa.backupCopy': '复制代码',
|
||
'settings.mfa.backupDownload': '下载 TXT',
|
||
'settings.mfa.backupPrint': '打印 / PDF',
|
||
'settings.mfa.backupCopied': '备用代码已复制',
|
||
'settings.mfa.enabled': '您的账户已启用 2FA。',
|
||
'settings.mfa.disabled': '2FA 未启用。',
|
||
'settings.mfa.setup': '设置身份验证器',
|
||
'settings.mfa.scanQr': '使用应用扫描此二维码,或手动输入密钥。',
|
||
'settings.mfa.secretLabel': '密钥(手动输入)',
|
||
'settings.mfa.codePlaceholder': '6 位验证码',
|
||
'settings.mfa.enable': '启用 2FA',
|
||
'settings.mfa.cancelSetup': '取消',
|
||
'settings.mfa.disableTitle': '停用 2FA',
|
||
'settings.mfa.disableHint': '输入您的账户密码和身份验证器中的当前验证码。',
|
||
'settings.mfa.disable': '停用 2FA',
|
||
'settings.mfa.toastEnabled': '双因素认证已启用',
|
||
'settings.mfa.toastDisabled': '双因素认证已停用',
|
||
'settings.mfa.demoBlocked': '演示模式下不可用',
|
||
'settings.toast.mapSaved': '地图设置已保存',
|
||
'settings.toast.keysSaved': 'API 密钥已保存',
|
||
'settings.toast.displaySaved': '显示设置已保存',
|
||
'settings.toast.profileSaved': '资料已保存',
|
||
'settings.uploadAvatar': '上传头像',
|
||
'settings.removeAvatar': '移除头像',
|
||
'settings.avatarUploaded': '头像已更新',
|
||
'settings.avatarRemoved': '头像已移除',
|
||
'settings.avatarError': '上传失败',
|
||
|
||
// Login
|
||
'login.error': '登录失败,请检查你的凭据。',
|
||
'login.tagline': '你的旅行。\n你的计划。',
|
||
'login.description': '通过互动地图、预算管理和实时同步,协同规划旅行。',
|
||
'login.features.maps': '互动地图',
|
||
'login.features.mapsDesc': 'Google Places、路线和聚类',
|
||
'login.features.realtime': '实时同步',
|
||
'login.features.realtimeDesc': '通过 WebSocket 协同规划',
|
||
'login.features.budget': '预算跟踪',
|
||
'login.features.budgetDesc': '分类、图表和人均费用',
|
||
'login.features.collab': '协作',
|
||
'login.features.collabDesc': '多用户共享旅行',
|
||
'login.features.packing': '行李清单',
|
||
'login.features.packingDesc': '分类、进度和建议',
|
||
'login.features.bookings': '预订',
|
||
'login.features.bookingsDesc': '航班、酒店、餐厅等',
|
||
'login.features.files': '文档',
|
||
'login.features.filesDesc': '上传和管理文档',
|
||
'login.features.routes': '智能路线',
|
||
'login.features.routesDesc': '自动优化和导出到 Google Maps',
|
||
'login.selfHosted': '自托管 · 开源 · 数据由你掌控',
|
||
'login.title': '登录',
|
||
'login.subtitle': '欢迎回来',
|
||
'login.signingIn': '登录中…',
|
||
'login.signIn': '登录',
|
||
'login.createAdmin': '创建管理员账户',
|
||
'login.createAdminHint': '为 TREK 设置第一个管理员账户。',
|
||
'login.setNewPassword': '设置新密码',
|
||
'login.setNewPasswordHint': '您必须更改密码才能继续。',
|
||
'login.createAccount': '创建账户',
|
||
'login.createAccountHint': '注册新账户。',
|
||
'login.creating': '创建中…',
|
||
'login.noAccount': '还没有账户?',
|
||
'login.hasAccount': '已有账户?',
|
||
'login.register': '注册',
|
||
'login.emailPlaceholder': 'your@email.com',
|
||
'login.username': '用户名',
|
||
'login.oidc.registrationDisabled': '注册已关闭。请联系管理员。',
|
||
'login.oidc.noEmail': '未从提供商获取到邮箱。',
|
||
'login.mfaTitle': '双因素认证',
|
||
'login.mfaSubtitle': '请输入身份验证器应用中的 6 位验证码。',
|
||
'login.mfaCodeLabel': '验证码',
|
||
'login.mfaCodeRequired': '请输入身份验证器应用中的验证码。',
|
||
'login.mfaHint': '打开 Google Authenticator、Authy 或其他 TOTP 应用。',
|
||
'login.mfaBack': '← 返回登录',
|
||
'login.mfaVerify': '验证',
|
||
'login.invalidInviteLink': '邀请链接无效或已过期',
|
||
'login.oidcFailed': 'OIDC 登录失败',
|
||
'login.usernameRequired': '用户名为必填项',
|
||
'login.passwordMinLength': '密码至少需要8个字符',
|
||
'login.oidc.tokenFailed': '认证失败。',
|
||
'login.oidc.invalidState': '会话无效,请重试。',
|
||
'login.demoFailed': '演示登录失败',
|
||
'login.oidcSignIn': '通过 {name} 登录',
|
||
'login.oidcOnly': '密码登录已关闭。请通过 SSO 提供商登录。',
|
||
'login.oidcLoggedOut': '您已退出登录。请重新通过 SSO 提供商登录。',
|
||
'login.demoHint': '试用演示——无需注册',
|
||
|
||
// Register
|
||
'register.passwordMismatch': '两次输入的密码不一致',
|
||
'register.passwordTooShort': '密码至少需要 8 个字符',
|
||
'register.failed': '注册失败',
|
||
'register.getStarted': '开始使用',
|
||
'register.subtitle': '创建账户,开始规划你的梦想旅行。',
|
||
'register.feature1': '无限旅行计划',
|
||
'register.feature2': '互动地图视图',
|
||
'register.feature3': '管理地点和分类',
|
||
'register.feature4': '跟踪预订',
|
||
'register.feature5': '创建行李清单',
|
||
'register.feature6': '存储照片和文件',
|
||
'register.createAccount': '创建账户',
|
||
'register.startPlanning': '开始规划你的旅行',
|
||
'register.minChars': '至少 6 个字符',
|
||
'register.confirmPassword': '确认密码',
|
||
'register.repeatPassword': '重复密码',
|
||
'register.registering': '注册中...',
|
||
'register.register': '注册',
|
||
'register.hasAccount': '已有账户?',
|
||
'register.signIn': '登录',
|
||
|
||
// Admin
|
||
'admin.title': '管理后台',
|
||
'admin.subtitle': '用户管理和系统设置',
|
||
'admin.tabs.users': '用户',
|
||
'admin.tabs.categories': '分类',
|
||
'admin.tabs.backup': '备份',
|
||
'admin.tabs.audit': '审计',
|
||
'admin.stats.users': '用户',
|
||
'admin.stats.trips': '旅行',
|
||
'admin.stats.places': '地点',
|
||
'admin.stats.photos': '照片',
|
||
'admin.stats.files': '文件',
|
||
'admin.table.user': '用户',
|
||
'admin.table.email': '邮箱',
|
||
'admin.table.role': '角色',
|
||
'admin.table.created': '创建时间',
|
||
'admin.table.lastLogin': '最后登录',
|
||
'admin.table.actions': '操作',
|
||
'admin.you': '(你)',
|
||
'admin.editUser': '编辑用户',
|
||
'admin.newPassword': '新密码',
|
||
'admin.newPasswordHint': '留空则保持当前密码',
|
||
'admin.deleteUser': '删除用户「{name}」?所有旅行将被永久删除。',
|
||
'admin.deleteUserTitle': '删除用户',
|
||
'admin.newPasswordPlaceholder': '输入新密码…',
|
||
'admin.toast.loadError': '加载管理数据失败',
|
||
'admin.toast.userUpdated': '用户已更新',
|
||
'admin.toast.updateError': '更新失败',
|
||
'admin.toast.userDeleted': '用户已删除',
|
||
'admin.toast.deleteError': '删除失败',
|
||
'admin.toast.cannotDeleteSelf': '不能删除自己的账户',
|
||
'admin.toast.userCreated': '用户已创建',
|
||
'admin.toast.createError': '创建用户失败',
|
||
'admin.toast.fieldsRequired': '用户名、邮箱和密码为必填项',
|
||
'admin.createUser': '创建用户',
|
||
'admin.invite.title': '邀请链接',
|
||
'admin.invite.subtitle': '创建一次性注册链接',
|
||
'admin.invite.create': '创建链接',
|
||
'admin.invite.createAndCopy': '创建并复制',
|
||
'admin.invite.empty': '尚未创建邀请链接',
|
||
'admin.invite.maxUses': '最大使用次数',
|
||
'admin.invite.expiry': '有效期',
|
||
'admin.invite.uses': '已使用',
|
||
'admin.invite.expiresAt': '过期时间',
|
||
'admin.invite.createdBy': '由',
|
||
'admin.invite.active': '有效',
|
||
'admin.invite.expired': '已过期',
|
||
'admin.invite.usedUp': '已用完',
|
||
'admin.invite.copied': '邀请链接已复制',
|
||
'admin.invite.copyLink': '复制链接',
|
||
'admin.invite.deleted': '邀请链接已删除',
|
||
'admin.invite.createError': '创建链接失败',
|
||
'admin.invite.deleteError': '删除链接失败',
|
||
'admin.tabs.settings': '设置',
|
||
'admin.allowRegistration': '允许注册',
|
||
'admin.allowRegistrationHint': '新用户可以自行注册',
|
||
'admin.authMethods': 'Authentication Methods',
|
||
'admin.passwordLogin': 'Password Login',
|
||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||
'admin.passwordRegistration': 'Password Registration',
|
||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||
'admin.oidcLogin': 'SSO Login',
|
||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||
'admin.requireMfa': '要求双因素身份验证(2FA)',
|
||
'admin.requireMfaHint': '未启用 2FA 的用户必须先完成设置中的配置才能使用应用。',
|
||
'admin.apiKeys': 'API 密钥',
|
||
'admin.apiKeysHint': '可选。启用地点的扩展数据,如照片和天气。',
|
||
'admin.mapsKey': 'Google Maps API 密钥',
|
||
'admin.mapsKeyHint': '用于地点搜索。在 console.cloud.google.com 获取',
|
||
'admin.mapsKeyHintLong': '没有 API 密钥时,使用 OpenStreetMap 搜索地点。有了 Google API 密钥,还可以加载照片、评分和营业时间。在 console.cloud.google.com 获取。',
|
||
'admin.recommended': '推荐',
|
||
'admin.weatherKey': 'OpenWeatherMap API 密钥',
|
||
'admin.weatherKeyHint': '用于天气数据。在 openweathermap.org 免费获取',
|
||
'admin.validateKey': '测试',
|
||
'admin.keyValid': '已连接',
|
||
'admin.keyInvalid': '无效',
|
||
'admin.keySaved': 'API 密钥已保存',
|
||
'admin.oidcTitle': '单点登录 (OIDC)',
|
||
'admin.oidcSubtitle': '允许通过 Google、Apple、Authentik 或 Keycloak 等外部提供商登录。',
|
||
'admin.oidcDisplayName': '显示名称',
|
||
'admin.oidcIssuer': '颁发者 URL',
|
||
'admin.oidcIssuerHint': '提供商的 OpenID Connect 颁发者 URL。如 https://accounts.google.com',
|
||
'admin.oidcSaved': 'OIDC 配置已保存',
|
||
'admin.oidcOnlyMode': '禁用密码登录',
|
||
'admin.oidcOnlyModeHint': '启用后,仅允许 SSO 登录。密码登录和注册将被禁用。',
|
||
|
||
// File Types
|
||
'admin.fileTypes': '允许的文件类型',
|
||
'admin.fileTypesHint': '配置用户可以上传的文件类型。',
|
||
'admin.fileTypesFormat': '以逗号分隔的扩展名(如 jpg,png,pdf,doc)。使用 * 允许所有类型。',
|
||
'admin.fileTypesSaved': '文件类型设置已保存',
|
||
|
||
'admin.placesPhotos.title': '地点照片',
|
||
'admin.placesPhotos.subtitle': '从 Google Places API 获取照片。禁用可节省 API 配额。Wikimedia 照片不受影响。',
|
||
'admin.placesAutocomplete.title': '地点自动补全',
|
||
'admin.placesAutocomplete.subtitle': '使用 Google Places API 提供搜索建议。禁用可节省 API 配额。',
|
||
'admin.placesDetails.title': '地点详情',
|
||
'admin.placesDetails.subtitle': '从 Google Places API 获取地点详细信息(营业时间、评分、网站)。禁用可节省 API 配额。',
|
||
'admin.bagTracking.title': '行李追踪',
|
||
'admin.bagTracking.subtitle': '为打包物品启用重量和行李分配',
|
||
'admin.collab.chat.title': '聊天',
|
||
'admin.collab.chat.subtitle': '实时消息协作',
|
||
'admin.collab.notes.title': '笔记',
|
||
'admin.collab.notes.subtitle': '共享笔记和文档',
|
||
'admin.collab.polls.title': '投票',
|
||
'admin.collab.polls.subtitle': '群组投票和表决',
|
||
'admin.collab.whatsnext.title': '下一步',
|
||
'admin.collab.whatsnext.subtitle': '活动建议和后续步骤',
|
||
'admin.tabs.config': '个性化',
|
||
'admin.tabs.defaults': '用户默认设置',
|
||
'admin.defaultSettings.title': '用户默认设置',
|
||
'admin.defaultSettings.description': '设置实例范围的默认值。未更改设置的用户将看到这些值。用户自己的更改始终优先。',
|
||
'admin.defaultSettings.saved': '默认值已保存',
|
||
'admin.defaultSettings.reset': '重置为内置默认值',
|
||
'admin.defaultSettings.resetToBuiltIn': '重置',
|
||
'admin.tabs.templates': '打包模板',
|
||
'admin.packingTemplates.title': '打包模板',
|
||
'admin.packingTemplates.subtitle': '创建可复用的旅行打包清单',
|
||
'admin.packingTemplates.create': '新建模板',
|
||
'admin.packingTemplates.namePlaceholder': '模板名称(如:海滩度假)',
|
||
'admin.packingTemplates.empty': '尚未创建模板',
|
||
'admin.packingTemplates.items': '物品',
|
||
'admin.packingTemplates.categories': '分类',
|
||
'admin.packingTemplates.itemName': '物品名称',
|
||
'admin.packingTemplates.itemCategory': '分类',
|
||
'admin.packingTemplates.categoryName': '分类名称(如:衣物)',
|
||
'admin.packingTemplates.addCategory': '添加分类',
|
||
'admin.packingTemplates.created': '模板已创建',
|
||
'admin.packingTemplates.deleted': '模板已删除',
|
||
'admin.packingTemplates.loadError': '加载模板失败',
|
||
'admin.packingTemplates.createError': '创建模板失败',
|
||
'admin.packingTemplates.deleteError': '删除模板失败',
|
||
'admin.packingTemplates.saveError': '保存失败',
|
||
|
||
// Addons
|
||
'admin.tabs.addons': '扩展',
|
||
'admin.addons.title': '扩展',
|
||
'admin.addons.subtitle': '启用或禁用功能以自定义你的 TREK 体验。',
|
||
'admin.addons.catalog.memories.name': '照片 (Immich)',
|
||
'admin.addons.catalog.memories.description': '通过 Immich 实例分享旅行照片',
|
||
'admin.addons.catalog.mcp.name': 'MCP',
|
||
'admin.addons.catalog.mcp.description': '用于 AI 助手集成的模型上下文协议',
|
||
'admin.addons.catalog.packing.name': '列表',
|
||
'admin.addons.catalog.packing.description': '行程打包清单与待办任务',
|
||
'admin.addons.catalog.budget.name': '预算',
|
||
'admin.addons.catalog.budget.description': '跟踪支出并规划旅行预算',
|
||
'admin.addons.catalog.documents.name': '文档',
|
||
'admin.addons.catalog.documents.description': '存储和管理旅行文档',
|
||
'admin.addons.catalog.vacay.name': 'Vacay',
|
||
'admin.addons.catalog.vacay.description': '带日历视图的个人假期规划器',
|
||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||
'admin.addons.catalog.atlas.description': '标记已访问国家和旅行统计的世界地图',
|
||
'admin.addons.catalog.collab.name': 'Collab',
|
||
'admin.addons.catalog.collab.description': '旅行规划的实时笔记、投票和聊天',
|
||
'admin.addons.subtitleBefore': '启用或禁用功能以自定义你的 ',
|
||
'admin.addons.subtitleAfter': ' 体验。',
|
||
'admin.addons.enabled': '已启用',
|
||
'admin.addons.disabled': '已禁用',
|
||
'admin.addons.type.trip': '旅行',
|
||
'admin.addons.type.global': '全局',
|
||
'admin.addons.type.integration': '集成',
|
||
'admin.addons.tripHint': '在每次旅行中作为标签页显示',
|
||
'admin.addons.globalHint': '在主导航中作为独立板块显示',
|
||
'admin.addons.integrationHint': '后端服务和 API 集成,无专属页面',
|
||
'admin.addons.toast.updated': '扩展已更新',
|
||
'admin.addons.toast.error': '更新扩展失败',
|
||
'admin.addons.noAddons': '暂无可用扩展',
|
||
// Weather info
|
||
'admin.weather.title': '天气数据',
|
||
'admin.weather.badge': '自 2026 年 3 月 24 日起',
|
||
'admin.weather.description': 'TREK 使用 Open-Meteo 作为天气数据源。Open-Meteo 是免费的开源天气服务——无需 API 密钥。',
|
||
'admin.weather.forecast': '16 天天气预报',
|
||
'admin.weather.forecastDesc': '之前为 5 天 (OpenWeatherMap)',
|
||
'admin.weather.climate': '历史气候数据',
|
||
'admin.weather.climateDesc': '16 天预报之外的日期使用过去 85 年的平均值',
|
||
'admin.weather.requests': '每天 10,000 次请求',
|
||
'admin.weather.requestsDesc': '免费,无需 API 密钥',
|
||
'admin.weather.locationHint': '天气基于每天中第一个有坐标的地点。如果当天没有分配地点,则使用地点列表中的任意地点作为参考。',
|
||
|
||
// MCP Tokens
|
||
'admin.tabs.mcpTokens': 'MCP 访问',
|
||
'admin.mcpTokens.title': 'MCP 访问',
|
||
'admin.mcpTokens.subtitle': '管理所有用户的 OAuth 会话和 API 令牌',
|
||
'admin.mcpTokens.sectionTitle': 'API 令牌',
|
||
'admin.mcpTokens.owner': '所有者',
|
||
'admin.mcpTokens.tokenName': '令牌名称',
|
||
'admin.mcpTokens.created': '创建时间',
|
||
'admin.mcpTokens.lastUsed': '最后使用',
|
||
'admin.mcpTokens.never': '从未',
|
||
'admin.mcpTokens.empty': '尚未创建任何 MCP 令牌',
|
||
'admin.mcpTokens.deleteTitle': '删除令牌',
|
||
'admin.mcpTokens.deleteMessage': '此令牌将立即被撤销。用户将失去通过此令牌的 MCP 访问权限。',
|
||
'admin.mcpTokens.deleteSuccess': '令牌已删除',
|
||
'admin.mcpTokens.deleteError': '删除令牌失败',
|
||
'admin.mcpTokens.loadError': '加载令牌失败',
|
||
'admin.oauthSessions.sectionTitle': 'OAuth 会话',
|
||
'admin.oauthSessions.clientName': '客户端',
|
||
'admin.oauthSessions.owner': '所有者',
|
||
'admin.oauthSessions.scopes': '权限范围',
|
||
'admin.oauthSessions.created': '创建时间',
|
||
'admin.oauthSessions.empty': '暂无活跃的 OAuth 会话',
|
||
'admin.oauthSessions.revokeTitle': '撤销会话',
|
||
'admin.oauthSessions.revokeMessage': '此 OAuth 会话将立即被撤销。客户端将失去 MCP 访问权限。',
|
||
'admin.oauthSessions.revokeSuccess': '会话已撤销',
|
||
'admin.oauthSessions.revokeError': '撤销会话失败',
|
||
'admin.oauthSessions.loadError': '加载 OAuth 会话失败',
|
||
|
||
// GitHub
|
||
'admin.tabs.github': 'GitHub',
|
||
|
||
'admin.audit.subtitle': '安全与管理员操作记录(备份、用户、MFA、设置)。',
|
||
'admin.audit.empty': '暂无审计记录。',
|
||
'admin.audit.refresh': '刷新',
|
||
'admin.audit.loadMore': '加载更多',
|
||
'admin.audit.showing': '已加载 {count} 条 · 共 {total} 条',
|
||
'admin.audit.col.time': '时间',
|
||
'admin.audit.col.user': '用户',
|
||
'admin.audit.col.action': '操作',
|
||
'admin.audit.col.resource': '资源',
|
||
'admin.audit.col.ip': 'IP',
|
||
'admin.audit.col.details': '详情',
|
||
|
||
'admin.github.title': '版本历史',
|
||
'admin.github.subtitle': '{repo} 的最新更新',
|
||
'admin.github.latest': '最新',
|
||
'admin.github.prerelease': '预发布',
|
||
'admin.github.showDetails': '显示详情',
|
||
'admin.github.hideDetails': '隐藏详情',
|
||
'admin.github.loadMore': '加载更多',
|
||
'admin.github.loading': '加载中...',
|
||
'admin.github.support': '帮助我继续开发 TREK',
|
||
'admin.github.error': '加载版本失败',
|
||
'admin.github.by': '作者',
|
||
|
||
'admin.update.available': '有可用更新',
|
||
'admin.update.text': 'TREK {version} 已发布。你当前使用的是 {current}。',
|
||
'admin.update.button': '在 GitHub 查看',
|
||
'admin.update.install': '安装更新',
|
||
'admin.update.confirmTitle': '确定安装更新?',
|
||
'admin.update.confirmText': 'TREK 将从 {current} 更新到 {version}。服务器将自动重启。',
|
||
'admin.update.dataInfo': '你的所有数据(旅行、用户、API 密钥、上传文件、Vacay、Atlas、预算)将被保留。',
|
||
'admin.update.warning': '重启期间应用将短暂不可用。',
|
||
'admin.update.confirm': '立即更新',
|
||
'admin.update.installing': '更新中…',
|
||
'admin.update.success': '更新已安装!服务器正在重启…',
|
||
'admin.update.failed': '更新失败',
|
||
'admin.update.backupHint': '建议在更新前创建备份。',
|
||
'admin.update.backupLink': '前往备份',
|
||
'admin.update.howTo': '如何更新',
|
||
'admin.update.dockerText': '你的 TREK 实例运行在 Docker 中。要更新到 {version},请在服务器上执行以下命令:',
|
||
'admin.update.reloadHint': '请在几秒后刷新页面。',
|
||
|
||
// Vacay addon
|
||
'vacay.subtitle': '规划和管理假期',
|
||
'vacay.settings': '设置',
|
||
'vacay.year': '年份',
|
||
'vacay.addYear': '添加下一年',
|
||
'vacay.addPrevYear': '添加上一年',
|
||
'vacay.removeYear': '移除年份',
|
||
'vacay.removeYearConfirm': '移除 {year}?',
|
||
'vacay.removeYearHint': '该年度所有假期记录和公司假日将被永久删除。',
|
||
'vacay.remove': '移除',
|
||
'vacay.persons': '成员',
|
||
'vacay.noPersons': '暂无成员',
|
||
'vacay.addPerson': '添加成员',
|
||
'vacay.editPerson': '编辑成员',
|
||
'vacay.removePerson': '移除成员',
|
||
'vacay.removePersonConfirm': '移除 {name}?',
|
||
'vacay.removePersonHint': '该成员的所有假期记录将被永久删除。',
|
||
'vacay.personName': '姓名',
|
||
'vacay.personNamePlaceholder': '输入姓名',
|
||
'vacay.color': '颜色',
|
||
'vacay.add': '添加',
|
||
'vacay.legend': '图例',
|
||
'vacay.publicHoliday': '公共假日',
|
||
'vacay.companyHoliday': '公司假日',
|
||
'vacay.weekend': '周末',
|
||
'vacay.modeVacation': '休假',
|
||
'vacay.modeCompany': '公司假日',
|
||
'vacay.entitlement': '年假额度',
|
||
'vacay.entitlementDays': '天',
|
||
'vacay.used': '已用',
|
||
'vacay.remaining': '剩余',
|
||
'vacay.carriedOver': '从 {year} 结转',
|
||
'vacay.blockWeekends': '锁定周末',
|
||
'vacay.blockWeekendsHint': '禁止在周六和周日安排假期',
|
||
'vacay.weekendDays': '周末',
|
||
'vacay.mon': '周一',
|
||
'vacay.tue': '周二',
|
||
'vacay.wed': '周三',
|
||
'vacay.thu': '周四',
|
||
'vacay.fri': '周五',
|
||
'vacay.sat': '周六',
|
||
'vacay.sun': '周日',
|
||
'vacay.publicHolidays': '公共假日',
|
||
'vacay.publicHolidaysHint': '在日历中标记公共假日',
|
||
'vacay.selectCountry': '选择国家',
|
||
'vacay.selectRegion': '选择地区(可选)',
|
||
'vacay.companyHolidays': '公司假日',
|
||
'vacay.companyHolidaysHint': '允许标记公司统一休假日',
|
||
'vacay.companyHolidaysNoDeduct': '公司假日不计入年假天数。',
|
||
'vacay.weekStart': '每周开始于',
|
||
'vacay.weekStartHint': '选择日历周从周一还是周日开始',
|
||
'vacay.carryOver': '结转',
|
||
'vacay.carryOverHint': '自动将剩余年假天数结转到下一年',
|
||
'vacay.sharing': '共享',
|
||
'vacay.sharingHint': '与其他 TREK 用户共享你的假期计划',
|
||
'vacay.owner': '所有者',
|
||
'vacay.shareEmailPlaceholder': 'TREK 用户邮箱',
|
||
'vacay.shareSuccess': '计划共享成功',
|
||
'vacay.shareError': '无法共享计划',
|
||
'vacay.dissolve': '解除合并',
|
||
'vacay.dissolveHint': '重新分离日历。你的记录将被保留。',
|
||
'vacay.dissolveAction': '解除',
|
||
'vacay.dissolved': '日历已分离',
|
||
'vacay.fusedWith': '已合并',
|
||
'vacay.you': '你',
|
||
'vacay.noData': '暂无数据',
|
||
'vacay.changeColor': '更改颜色',
|
||
'vacay.inviteUser': '邀请用户',
|
||
'vacay.inviteHint': '邀请其他 TREK 用户共享合并的假期日历。',
|
||
'vacay.selectUser': '选择用户',
|
||
'vacay.sendInvite': '发送邀请',
|
||
'vacay.inviteSent': '邀请已发送',
|
||
'vacay.inviteError': '无法发送邀请',
|
||
'vacay.pending': '待处理',
|
||
'vacay.noUsersAvailable': '没有可用用户',
|
||
'vacay.accept': '接受',
|
||
'vacay.decline': '拒绝',
|
||
'vacay.acceptFusion': '接受并合并',
|
||
'vacay.inviteTitle': '合并请求',
|
||
'vacay.inviteWantsToFuse': '想要与你共享假期日历。',
|
||
'vacay.fuseInfo1': '你们双方将在一个共享日历中看到所有假期记录。',
|
||
'vacay.fuseInfo2': '双方都可以为对方创建和编辑记录。',
|
||
'vacay.fuseInfo3': '双方都可以删除记录和修改年假额度。',
|
||
'vacay.fuseInfo4': '公共假日和公司假日等设置将共享。',
|
||
'vacay.fuseInfo5': '任何一方都可以随时解除合并。你的记录将被保留。',
|
||
'vacay.addCalendar': '添加日历',
|
||
'vacay.calendarColor': '颜色',
|
||
'vacay.calendarLabel': '标签',
|
||
'vacay.noCalendars': '无日历',
|
||
'nav.myTrips': '我的旅行',
|
||
|
||
// Atlas addon
|
||
'atlas.subtitle': '你的全球旅行足迹',
|
||
'atlas.countries': '国家',
|
||
'atlas.trips': '旅行',
|
||
'atlas.places': '地点',
|
||
'atlas.days': '天',
|
||
'atlas.visitedCountries': '已访问国家',
|
||
'atlas.cities': '城市',
|
||
'atlas.noData': '暂无旅行数据',
|
||
'atlas.noDataHint': '创建旅行并添加地点以查看世界地图',
|
||
'atlas.lastTrip': '上次旅行',
|
||
'atlas.nextTrip': '下次旅行',
|
||
'atlas.daysLeft': '天后出发',
|
||
'atlas.streak': '连续',
|
||
'atlas.year': '年',
|
||
'atlas.years': '年',
|
||
'atlas.yearInRow': '年连续',
|
||
'atlas.yearsInRow': '年连续',
|
||
'atlas.tripIn': '次旅行在',
|
||
'atlas.tripsIn': '次旅行在',
|
||
'atlas.since': '自',
|
||
'atlas.europe': '欧洲',
|
||
'atlas.asia': '亚洲',
|
||
'atlas.northAmerica': '北美洲',
|
||
'atlas.southAmerica': '南美洲',
|
||
'atlas.africa': '非洲',
|
||
'atlas.oceania': '大洋洲',
|
||
'atlas.other': '其他',
|
||
'atlas.firstVisit': '首次旅行',
|
||
'atlas.lastVisitLabel': '最近旅行',
|
||
'atlas.tripSingular': '次旅行',
|
||
'atlas.tripPlural': '次旅行',
|
||
'atlas.placeVisited': '个地点已访问',
|
||
'atlas.placesVisited': '个地点已访问',
|
||
'atlas.statsTab': '统计',
|
||
'atlas.bucketTab': '心愿单',
|
||
'atlas.addBucket': '添加到心愿单',
|
||
'atlas.bucketNamePlaceholder': '地点或目的地...',
|
||
'atlas.bucketNotesPlaceholder': '备注(可选)',
|
||
'atlas.bucketEmpty': '你的心愿单是空的',
|
||
'atlas.bucketEmptyHint': '添加你梦想去的地方',
|
||
'atlas.unmark': '移除',
|
||
'atlas.confirmMark': '将此国家标记为已访问?',
|
||
'atlas.confirmUnmark': '从已访问列表中移除此国家?',
|
||
'atlas.confirmUnmarkRegion': '从已访问列表中移除此地区?',
|
||
'atlas.markVisited': '标记为已访问',
|
||
'atlas.markVisitedHint': '将此国家添加到已访问列表',
|
||
'atlas.markRegionVisitedHint': '将此地区添加到已访问列表',
|
||
'atlas.addToBucket': '添加到心愿单',
|
||
'atlas.addPoi': '添加地点',
|
||
'atlas.searchCountry': '搜索国家...',
|
||
'atlas.month': '月份',
|
||
'atlas.addToBucketHint': '保存为想去的地方',
|
||
'atlas.bucketWhen': '你计划什么时候去?',
|
||
|
||
// Trip Planner
|
||
'trip.tabs.plan': '计划',
|
||
'trip.tabs.reservations': '预订',
|
||
'trip.tabs.reservationsShort': '预订',
|
||
'trip.tabs.packing': '行李清单',
|
||
'trip.tabs.packingShort': '行李',
|
||
'trip.tabs.lists': '列表',
|
||
'trip.tabs.listsShort': '列表',
|
||
'trip.tabs.budget': '预算',
|
||
'trip.tabs.files': '文件',
|
||
'trip.loading': '加载旅行中...',
|
||
'trip.loadingPhotos': '正在加载地点照片...',
|
||
'trip.mobilePlan': '计划',
|
||
'trip.mobilePlaces': '地点',
|
||
'trip.toast.placeUpdated': '地点已更新',
|
||
'trip.toast.placeAdded': '地点已添加',
|
||
'trip.toast.placeDeleted': '地点已删除',
|
||
'trip.toast.selectDay': '请先选择一天',
|
||
'trip.toast.assignedToDay': '地点已分配到当天',
|
||
'trip.toast.reorderError': '排序失败',
|
||
'trip.toast.reservationUpdated': '预订已更新',
|
||
'trip.toast.reservationAdded': '预订已添加',
|
||
'trip.toast.deleted': '已删除',
|
||
'trip.confirm.deletePlace': '确定要删除这个地点吗?',
|
||
|
||
// Day Plan Sidebar
|
||
'dayplan.emptyDay': '当天暂无计划',
|
||
'dayplan.addNote': '添加备注',
|
||
'dayplan.editNote': '编辑备注',
|
||
'dayplan.noteAdd': '添加备注',
|
||
'dayplan.noteEdit': '编辑备注',
|
||
'dayplan.noteTitle': '备注',
|
||
'dayplan.noteSubtitle': '每日备注',
|
||
'dayplan.totalCost': '总费用',
|
||
'dayplan.days': '天',
|
||
'dayplan.dayN': '第 {n} 天',
|
||
'dayplan.calculating': '计算中...',
|
||
'dayplan.route': '路线',
|
||
'dayplan.optimize': '优化',
|
||
'dayplan.optimized': '路线已优化',
|
||
'dayplan.routeError': '路线计算失败',
|
||
'dayplan.toast.needTwoPlaces': '路线优化至少需要两个地点',
|
||
'dayplan.toast.routeOptimized': '路线已优化',
|
||
'dayplan.toast.noGeoPlaces': '未找到有坐标的地点用于路线计算',
|
||
'dayplan.confirmed': '已确认',
|
||
'dayplan.pendingRes': '待确认',
|
||
'dayplan.pdf': 'PDF',
|
||
'dayplan.pdfTooltip': '导出当天计划为 PDF',
|
||
'dayplan.pdfError': 'PDF 导出失败',
|
||
'dayplan.cannotReorderTransport': '有固定时间的预订无法重新排序',
|
||
'dayplan.confirmRemoveTimeTitle': '移除时间?',
|
||
'dayplan.confirmRemoveTimeBody': '此地点有固定时间({time})。移动后将移除时间并允许自由排序。',
|
||
'dayplan.confirmRemoveTimeAction': '移除时间并移动',
|
||
'dayplan.cannotDropOnTimed': '无法将项目放置在有固定时间的条目之间',
|
||
'dayplan.cannotBreakChronology': '这将打乱已计划项目和预订的时间顺序',
|
||
|
||
// Places Sidebar
|
||
'places.addPlace': '添加地点/活动',
|
||
'places.importFile': '导入文件',
|
||
'places.sidebarDrop': '拖放以导入',
|
||
'places.importFileHint': '从 Google My Maps、Google Earth 或 GPS 追踪器等工具导入 .gpx、.kml 或 .kmz 文件。',
|
||
'places.importFileDropHere': '点击选择文件或拖放到此处',
|
||
'places.importFileDropActive': '释放文件以选择',
|
||
'places.importFileUnsupported': '不支持的文件类型,请使用 .gpx、.kml 或 .kmz。',
|
||
'places.importFileTooLarge': '文件过大。最大上传大小为 {maxMb} MB。',
|
||
'places.importFileError': '导入失败',
|
||
'places.importAllSkipped': '所有地点已在行程中。',
|
||
'places.gpxImported': '已从 GPX 导入 {count} 个地点',
|
||
'places.kmlKmzImported': '已从 KMZ/KML 导入 {count} 个地点',
|
||
'places.urlResolved': '已从 URL 导入地点',
|
||
'places.importList': '列表导入',
|
||
'places.kmlKmzSummaryValues': 'Placemarks:{total} • 已导入:{created} • 已跳过:{skipped}',
|
||
'places.importGoogleList': 'Google 列表',
|
||
'places.importNaverList': 'Naver 列表',
|
||
'places.googleListHint': '粘贴共享的 Google Maps 列表链接以导入所有地点。',
|
||
'places.googleListImported': '已从"{list}"导入 {count} 个地点',
|
||
'places.googleListError': 'Google Maps 列表导入失败',
|
||
'places.naverListHint': '粘贴共享的 Naver Maps 列表链接以导入所有地点。',
|
||
'places.naverListImported': '已从"{list}"导入 {count} 个地点',
|
||
'places.naverListError': 'Naver Maps 列表导入失败',
|
||
'places.viewDetails': '查看详情',
|
||
'places.assignToDay': '添加到哪一天?',
|
||
'places.all': '全部',
|
||
'places.unplanned': '未规划',
|
||
'places.search': '搜索地点...',
|
||
'places.allCategories': '所有分类',
|
||
'places.categoriesSelected': '个分类',
|
||
'places.clearFilter': '清除筛选',
|
||
'places.count': '{count} 个地点',
|
||
'places.countSingular': '1 个地点',
|
||
'places.allPlanned': '所有地点已规划',
|
||
'places.noneFound': '未找到地点',
|
||
'places.editPlace': '编辑地点',
|
||
'places.formName': '名称',
|
||
'places.formNamePlaceholder': '如:埃菲尔铁塔',
|
||
'places.formDescription': '描述',
|
||
'places.formDescriptionPlaceholder': '简短描述...',
|
||
'places.formAddress': '地址',
|
||
'places.formAddressPlaceholder': '街道、城市、国家',
|
||
'places.formLat': '纬度(如 48.8566)',
|
||
'places.formLng': '经度(如 2.3522)',
|
||
'places.formCategory': '分类',
|
||
'places.noCategory': '无分类',
|
||
'places.categoryNamePlaceholder': '分类名称',
|
||
'places.formTime': '时间',
|
||
'places.startTime': '开始',
|
||
'places.endTime': '结束',
|
||
'places.endTimeBeforeStart': '结束时间早于开始时间',
|
||
'places.timeCollision': '时间冲突:',
|
||
'places.formWebsite': '网站',
|
||
'places.formNotes': '备注',
|
||
'places.formNotesPlaceholder': '个人备注...',
|
||
'places.formReservation': '预订',
|
||
'places.reservationNotesPlaceholder': '预订备注、确认号...',
|
||
'places.mapsSearchPlaceholder': '搜索地点...',
|
||
'places.mapsSearchError': '地点搜索失败。',
|
||
'places.loadingDetails': '正在加载地点详情…',
|
||
'places.osmHint': '使用 OpenStreetMap 搜索(无照片、营业时间或评分)。在设置中添加 Google API 密钥以获取完整信息。',
|
||
'places.osmActive': '通过 OpenStreetMap 搜索(无照片、评分或营业时间)。在设置中添加 Google API 密钥以获取增强数据。',
|
||
'places.categoryCreateError': '创建分类失败',
|
||
'places.nameRequired': '请输入名称',
|
||
'places.saveError': '保存失败',
|
||
// Place Inspector
|
||
'inspector.opened': '营业中',
|
||
'inspector.closed': '已关闭',
|
||
'inspector.openingHours': '营业时间',
|
||
'inspector.showHours': '显示营业时间',
|
||
'inspector.files': '文件',
|
||
'inspector.filesCount': '{count} 个文件',
|
||
'inspector.removeFromDay': '从当天移除',
|
||
'inspector.remove': '删除',
|
||
'inspector.addToDay': '添加到当天',
|
||
'inspector.confirmedRes': '已确认预订',
|
||
'inspector.pendingRes': '待确认预订',
|
||
'inspector.google': '在 Google Maps 中打开',
|
||
'inspector.website': '打开网站',
|
||
'inspector.addRes': '预订',
|
||
'inspector.editRes': '编辑预订',
|
||
'inspector.participants': '参与者',
|
||
'inspector.trackStats': '轨迹数据',
|
||
|
||
// Reservations
|
||
'reservations.title': '预订',
|
||
'reservations.empty': '暂无预订',
|
||
'reservations.emptyHint': '添加航班、酒店等预订信息',
|
||
'reservations.add': '添加预订',
|
||
'reservations.addManual': '手动添加',
|
||
'reservations.placeHint': '提示:建议从地点直接创建预订,以便与日程计划关联。',
|
||
'reservations.confirmed': '已确认',
|
||
'reservations.pending': '待确认',
|
||
'reservations.summary': '{confirmed} 已确认,{pending} 待确认',
|
||
'reservations.fromPlan': '来自计划',
|
||
'reservations.showFiles': '查看文件',
|
||
'reservations.editTitle': '编辑预订',
|
||
'reservations.status': '状态',
|
||
'reservations.datetime': '日期和时间',
|
||
'reservations.startTime': '开始时间',
|
||
'reservations.endTime': '结束时间',
|
||
'reservations.date': '日期',
|
||
'reservations.time': '时间',
|
||
'reservations.timeAlt': '时间(备选,如 19:30)',
|
||
'reservations.notes': '备注',
|
||
'reservations.notesPlaceholder': '其他备注...',
|
||
'reservations.meta.airline': '航空公司',
|
||
'reservations.meta.flightNumber': '航班号',
|
||
'reservations.meta.from': '出发',
|
||
'reservations.meta.to': '到达',
|
||
'reservations.needsReview': '待确认',
|
||
'reservations.needsReviewHint': '无法自动匹配机场 — 请确认位置。',
|
||
'reservations.searchLocation': '搜索车站、港口、地址...',
|
||
'airport.searchPlaceholder': '机场代码或城市(如 FRA)',
|
||
'map.connections': '连接',
|
||
'map.showConnections': '显示预订路线',
|
||
'map.hideConnections': '隐藏预订路线',
|
||
'settings.bookingLabels': '预订路线标签',
|
||
'settings.bookingLabelsHint': '在地图上显示车站 / 机场名称。关闭时仅显示图标。',
|
||
'reservations.meta.trainNumber': '车次',
|
||
'reservations.meta.platform': '站台',
|
||
'reservations.meta.seat': '座位',
|
||
'reservations.meta.checkIn': '入住',
|
||
'reservations.meta.checkInUntil': '入住截止',
|
||
'reservations.meta.checkOut': '退房',
|
||
'reservations.meta.linkAccommodation': '住宿',
|
||
'reservations.meta.pickAccommodation': '关联住宿',
|
||
'reservations.meta.noAccommodation': '无',
|
||
'reservations.meta.hotelPlace': '住宿',
|
||
'reservations.meta.pickHotel': '选择住宿',
|
||
'reservations.meta.fromDay': '从',
|
||
'reservations.meta.toDay': '到',
|
||
'reservations.meta.selectDay': '选择日期',
|
||
'reservations.type.flight': '航班',
|
||
'reservations.type.hotel': '住宿',
|
||
'reservations.type.restaurant': '餐厅',
|
||
'reservations.type.train': '火车',
|
||
'reservations.type.car': '汽车',
|
||
'reservations.type.cruise': '邮轮',
|
||
'reservations.type.event': '活动',
|
||
'reservations.type.tour': '旅游团',
|
||
'reservations.type.other': '其他',
|
||
'reservations.confirm.delete': '确定要删除预订「{name}」吗?',
|
||
'reservations.confirm.deleteTitle': '删除预订?',
|
||
'reservations.confirm.deleteBody': '"{name}" 将被永久删除。',
|
||
'reservations.toast.updated': '预订已更新',
|
||
'reservations.toast.removed': '预订已删除',
|
||
'reservations.toast.fileUploaded': '文件已上传',
|
||
'reservations.toast.uploadError': '上传失败',
|
||
'reservations.newTitle': '新建预订',
|
||
'reservations.bookingType': '预订类型',
|
||
'reservations.titleLabel': '标题',
|
||
'reservations.titlePlaceholder': '如:汉莎 LH123、阿德隆酒店...',
|
||
'reservations.locationAddress': '地点 / 地址',
|
||
'reservations.locationPlaceholder': '地址、机场、酒店...',
|
||
'reservations.confirmationCode': '预订码',
|
||
'reservations.confirmationPlaceholder': '如:ABC12345',
|
||
'reservations.day': '日期',
|
||
'reservations.noDay': '无日期',
|
||
'reservations.place': '地点',
|
||
'reservations.noPlace': '无地点',
|
||
'reservations.pendingSave': '将被保存…',
|
||
'reservations.uploading': '上传中...',
|
||
'reservations.attachFile': '附加文件',
|
||
'reservations.linkExisting': '关联已有文件',
|
||
'reservations.toast.saveError': '保存失败',
|
||
'reservations.toast.updateError': '更新失败',
|
||
'reservations.toast.deleteError': '删除失败',
|
||
'reservations.confirm.remove': '移除「{name}」的预订?',
|
||
'reservations.linkAssignment': '关联日程分配',
|
||
'reservations.pickAssignment': '从计划中选择一个分配...',
|
||
'reservations.noAssignment': '无关联(独立)',
|
||
'reservations.price': '价格',
|
||
'reservations.budgetCategory': '预算类别',
|
||
'reservations.budgetCategoryPlaceholder': '例:交通、住宿',
|
||
'reservations.budgetCategoryAuto': '自动(按预订类型)',
|
||
'reservations.budgetHint': '保存时将自动创建预算条目。',
|
||
'reservations.departureDate': '出发',
|
||
'reservations.arrivalDate': '到达',
|
||
'reservations.departureTime': '出发时间',
|
||
'reservations.arrivalTime': '到达时间',
|
||
'reservations.pickupDate': '取车',
|
||
'reservations.returnDate': '还车',
|
||
'reservations.pickupTime': '取车时间',
|
||
'reservations.returnTime': '还车时间',
|
||
'reservations.endDate': '结束日期',
|
||
'reservations.meta.departureTimezone': '出发时区',
|
||
'reservations.meta.arrivalTimezone': '到达时区',
|
||
'reservations.span.departure': '出发',
|
||
'reservations.span.arrival': '到达',
|
||
'reservations.span.inTransit': '途中',
|
||
'reservations.span.pickup': '取车',
|
||
'reservations.span.return': '还车',
|
||
'reservations.span.active': '使用中',
|
||
'reservations.span.start': '开始',
|
||
'reservations.span.end': '结束',
|
||
'reservations.span.ongoing': '进行中',
|
||
'reservations.validation.endBeforeStart': '结束日期/时间必须晚于开始日期/时间',
|
||
|
||
// Budget
|
||
'budget.title': '预算',
|
||
'budget.exportCsv': '导出 CSV',
|
||
'budget.emptyTitle': '尚未创建预算',
|
||
'budget.emptyText': '创建分类和条目来规划旅行预算',
|
||
'budget.emptyPlaceholder': '输入分类名称...',
|
||
'budget.createCategory': '创建分类',
|
||
'budget.category': '分类',
|
||
'budget.categoryName': '分类名称',
|
||
'budget.table.name': '名称',
|
||
'budget.table.total': '合计',
|
||
'budget.table.persons': '人数',
|
||
'budget.table.days': '天数',
|
||
'budget.table.perPerson': '人均',
|
||
'budget.table.perDay': '日均',
|
||
'budget.table.perPersonDay': '人日均',
|
||
'budget.table.note': '备注',
|
||
'budget.table.date': '日期',
|
||
'budget.newEntry': '新建条目',
|
||
'budget.defaultEntry': '新建条目',
|
||
'budget.defaultCategory': '新分类',
|
||
'budget.total': '合计',
|
||
'budget.totalBudget': '总预算',
|
||
'budget.byCategory': '按分类',
|
||
'budget.editTooltip': '点击编辑',
|
||
'budget.linkedToReservation': '已关联到预订——请在那里编辑名称',
|
||
'budget.confirm.deleteCategory': '确定删除分类「{name}」及其 {count} 个条目?',
|
||
'budget.deleteCategory': '删除分类',
|
||
'budget.perPerson': '人均',
|
||
'budget.paid': '已支付',
|
||
'budget.open': '未支付',
|
||
'budget.noMembers': '未分配成员',
|
||
'budget.settlement': '结算',
|
||
'budget.settlementInfo': '点击预算项目上的成员头像将其标记为绿色——表示该成员已付款。结算会显示谁欠谁多少。',
|
||
'budget.netBalances': '净余额',
|
||
|
||
// Files
|
||
'files.title': '文件',
|
||
'files.pageTitle': '文件与文档',
|
||
'files.subtitle': '{trip} 的 {count} 个文件',
|
||
'files.downloadPdf': '下载 PDF',
|
||
'files.count': '{count} 个文件',
|
||
'files.countSingular': '1 个文件',
|
||
'files.uploaded': '已上传 {count} 个',
|
||
'files.uploadError': '上传失败',
|
||
'files.dropzone': '将文件拖放到此处',
|
||
'files.dropzoneHint': '或点击浏览',
|
||
'files.allowedTypes': '图片、PDF、DOC、DOCX、XLS、XLSX、TXT、CSV · 最大 50 MB',
|
||
'files.uploading': '上传中...',
|
||
'files.filterAll': '全部',
|
||
'files.filterPdf': 'PDF',
|
||
'files.filterImages': '图片',
|
||
'files.filterDocs': '文档',
|
||
'files.filterCollab': '协作笔记',
|
||
'files.sourceCollab': '来自协作笔记',
|
||
'files.empty': '暂无文件',
|
||
'files.emptyHint': '上传文件以附加到旅行中',
|
||
'files.openTab': '在新标签页中打开',
|
||
'files.confirm.delete': '确定要删除此文件吗?',
|
||
'files.toast.deleted': '文件已删除',
|
||
'files.toast.deleteError': '删除文件失败',
|
||
'files.sourcePlan': '日程计划',
|
||
'files.sourceBooking': '预订',
|
||
'files.attach': '附加',
|
||
'files.pasteHint': '也可以从剪贴板粘贴图片 (Ctrl+V)',
|
||
'files.trash': '回收站',
|
||
'files.trashEmpty': '回收站为空',
|
||
'files.emptyTrash': '清空回收站',
|
||
'files.restore': '恢复',
|
||
'files.star': '收藏',
|
||
'files.unstar': '取消收藏',
|
||
'files.assign': '分配',
|
||
'files.assignTitle': '分配文件',
|
||
'files.assignPlace': '地点',
|
||
'files.assignBooking': '预订',
|
||
'files.unassigned': '未分配',
|
||
'files.unlink': '移除关联',
|
||
'files.toast.trashed': '已移至回收站',
|
||
'files.toast.restored': '文件已恢复',
|
||
'files.toast.trashEmptied': '回收站已清空',
|
||
'files.toast.assigned': '文件已分配',
|
||
'files.toast.assignError': '分配失败',
|
||
'files.toast.restoreError': '恢复失败',
|
||
'files.confirm.permanentDelete': '永久删除此文件?此操作无法撤销。',
|
||
'files.confirm.emptyTrash': '永久删除回收站中的所有文件?此操作无法撤销。',
|
||
'files.noteLabel': '备注',
|
||
'files.notePlaceholder': '添加备注...',
|
||
|
||
// Packing
|
||
'packing.title': '行李清单',
|
||
'packing.empty': '行李清单为空',
|
||
'packing.import': '导入',
|
||
'packing.importTitle': '导入装箱清单',
|
||
'packing.importHint': '每行一个物品。可选用逗号、分号或制表符分隔类别和数量:名称, 类别, 数量',
|
||
'packing.importPlaceholder': '牙刷\n防晒霜, 卫生\nT恤, 衣物, 5\n护照, 证件',
|
||
'packing.importCsv': '加载 CSV/TXT',
|
||
'packing.importAction': '导入 {count}',
|
||
'packing.importSuccess': '已导入 {count} 项',
|
||
'packing.importError': '导入失败',
|
||
'packing.importEmpty': '没有可导入的项目',
|
||
'packing.progress': '已打包 {packed}/{total}({percent}%)',
|
||
'packing.clearChecked': '移除 {count} 个已勾选',
|
||
'packing.clearCheckedShort': '移除 {count} 个',
|
||
'packing.suggestions': '建议',
|
||
'packing.suggestionsTitle': '添加建议',
|
||
'packing.allSuggested': '所有建议已添加',
|
||
'packing.allPacked': '全部打包完成!',
|
||
'packing.addPlaceholder': '添加新物品...',
|
||
'packing.categoryPlaceholder': '分类...',
|
||
'packing.filterAll': '全部',
|
||
'packing.filterOpen': '未完成',
|
||
'packing.filterDone': '已完成',
|
||
'packing.emptyTitle': '行李清单为空',
|
||
'packing.emptyHint': '添加物品或使用建议',
|
||
'packing.emptyFiltered': '没有匹配的物品',
|
||
'packing.menuRename': '重命名',
|
||
'packing.menuCheckAll': '全部勾选',
|
||
'packing.menuUncheckAll': '取消全部勾选',
|
||
'packing.menuDeleteCat': '删除分类',
|
||
'packing.addItem': '添加物品',
|
||
'packing.addItemPlaceholder': '物品名称...',
|
||
'packing.addCategory': '添加分类',
|
||
'packing.newCategoryPlaceholder': '分类名称(如:衣物)',
|
||
'packing.applyTemplate': '应用模板',
|
||
'packing.template': '模板',
|
||
'packing.templateApplied': '已从模板添加 {count} 个物品',
|
||
'packing.templateError': '应用模板失败',
|
||
'packing.saveAsTemplate': '保存为模板',
|
||
'packing.templateName': '模板名称',
|
||
'packing.templateSaved': '行李清单已保存为模板',
|
||
'packing.noMembers': '无成员',
|
||
'packing.bags': '行李',
|
||
'packing.noBag': '未分配',
|
||
'packing.totalWeight': '总重量',
|
||
'packing.bagName': '名称...',
|
||
'packing.addBag': '添加行李',
|
||
'packing.changeCategory': '更改分类',
|
||
'packing.confirm.clearChecked': '确定移除 {count} 个已勾选的物品?',
|
||
'packing.confirm.deleteCat': '确定删除分类「{name}」及其 {count} 个物品?',
|
||
'packing.defaultCategory': '其他',
|
||
'packing.toast.saveError': '保存失败',
|
||
'packing.toast.deleteError': '删除失败',
|
||
'packing.toast.renameError': '重命名失败',
|
||
'packing.toast.addError': '添加失败',
|
||
|
||
// Packing suggestions
|
||
'packing.suggestions.items': [
|
||
{ name: '护照', category: '证件' },
|
||
{ name: '身份证', category: '证件' },
|
||
{ name: '旅行保险', category: '证件' },
|
||
{ name: '机票', category: '证件' },
|
||
{ name: '信用卡', category: '财务' },
|
||
{ name: '现金', category: '财务' },
|
||
{ name: '签证', category: '证件' },
|
||
{ name: 'T恤', category: '衣物' },
|
||
{ name: '裤子', category: '衣物' },
|
||
{ name: '内衣', category: '衣物' },
|
||
{ name: '袜子', category: '衣物' },
|
||
{ name: '外套', category: '衣物' },
|
||
{ name: '睡衣', category: '衣物' },
|
||
{ name: '泳衣', category: '衣物' },
|
||
{ name: '雨衣', category: '衣物' },
|
||
{ name: '舒适的鞋子', category: '衣物' },
|
||
{ name: '牙刷', category: '洗漱用品' },
|
||
{ name: '牙膏', category: '洗漱用品' },
|
||
{ name: '洗发水', category: '洗漱用品' },
|
||
{ name: '除臭剂', category: '洗漱用品' },
|
||
{ name: '防晒霜', category: '洗漱用品' },
|
||
{ name: '剃须刀', category: '洗漱用品' },
|
||
{ name: '充电器', category: '电子产品' },
|
||
{ name: '充电宝', category: '电子产品' },
|
||
{ name: '耳机', category: '电子产品' },
|
||
{ name: '旅行转换插头', category: '电子产品' },
|
||
{ name: '相机', category: '电子产品' },
|
||
{ name: '止痛药', category: '健康' },
|
||
{ name: '创可贴', category: '健康' },
|
||
{ name: '消毒液', category: '健康' },
|
||
],
|
||
|
||
// Members / Sharing
|
||
'members.shareTrip': '分享旅行',
|
||
'members.inviteUser': '邀请用户',
|
||
'members.selectUser': '选择用户…',
|
||
'members.invite': '邀请',
|
||
'members.allHaveAccess': '所有用户均已拥有访问权限。',
|
||
'members.access': '访问权限',
|
||
'members.person': '人',
|
||
'members.persons': '人',
|
||
'members.you': '你',
|
||
'members.owner': '所有者',
|
||
'members.leaveTrip': '退出旅行',
|
||
'members.removeAccess': '移除访问权限',
|
||
'members.confirmLeave': '退出旅行?你将失去访问权限。',
|
||
'members.confirmRemove': '移除该用户的访问权限?',
|
||
'members.loadError': '加载成员失败',
|
||
'members.added': '已添加',
|
||
'members.addError': '添加失败',
|
||
'members.removed': '成员已移除',
|
||
'members.removeError': '移除失败',
|
||
|
||
// Categories (Admin)
|
||
'categories.title': '分类',
|
||
'categories.subtitle': '管理地点分类',
|
||
'categories.new': '新建分类',
|
||
'categories.empty': '暂无分类',
|
||
'categories.namePlaceholder': '分类名称',
|
||
'categories.icon': '图标',
|
||
'categories.color': '颜色',
|
||
'categories.customColor': '选择自定义颜色',
|
||
'categories.preview': '预览',
|
||
'categories.defaultName': '分类',
|
||
'categories.update': '更新',
|
||
'categories.create': '创建',
|
||
'categories.confirm.delete': '删除分类?该分类下的地点不会被删除。',
|
||
'categories.toast.loadError': '加载分类失败',
|
||
'categories.toast.nameRequired': '请输入名称',
|
||
'categories.toast.updated': '分类已更新',
|
||
'categories.toast.created': '分类已创建',
|
||
'categories.toast.saveError': '保存失败',
|
||
'categories.toast.deleted': '分类已删除',
|
||
'categories.toast.deleteError': '删除失败',
|
||
|
||
// Backup (Admin)
|
||
'backup.title': '数据备份',
|
||
'backup.subtitle': '数据库和所有上传文件',
|
||
'backup.refresh': '刷新',
|
||
'backup.upload': '上传备份',
|
||
'backup.uploading': '上传中…',
|
||
'backup.create': '创建备份',
|
||
'backup.creating': '创建中…',
|
||
'backup.empty': '暂无备份',
|
||
'backup.createFirst': '创建第一个备份',
|
||
'backup.download': '下载',
|
||
'backup.restore': '恢复',
|
||
'backup.confirm.restore': '恢复备份「{name}」?\n\n所有当前数据将被备份数据替换。',
|
||
'backup.confirm.uploadRestore': '上传并恢复备份文件「{name}」?\n\n所有当前数据将被覆盖。',
|
||
'backup.confirm.delete': '删除备份「{name}」?',
|
||
'backup.toast.loadError': '加载备份失败',
|
||
'backup.toast.created': '备份创建成功',
|
||
'backup.toast.createError': '创建备份失败',
|
||
'backup.toast.restored': '备份已恢复。页面即将刷新…',
|
||
'backup.toast.restoreError': '恢复失败',
|
||
'backup.toast.uploadError': '上传失败',
|
||
'backup.toast.deleted': '备份已删除',
|
||
'backup.toast.deleteError': '删除失败',
|
||
'backup.toast.downloadError': '下载失败',
|
||
'backup.toast.settingsSaved': '自动备份设置已保存',
|
||
'backup.toast.settingsError': '保存设置失败',
|
||
'backup.auto.title': '自动备份',
|
||
'backup.auto.subtitle': '按计划自动备份',
|
||
'backup.auto.enable': '启用自动备份',
|
||
'backup.auto.enableHint': '将按所选计划自动创建备份',
|
||
'backup.auto.interval': '间隔',
|
||
'backup.auto.hour': '执行时间',
|
||
'backup.auto.hourHint': '服务器本地时间({format} 格式)',
|
||
'backup.auto.dayOfWeek': '星期几',
|
||
'backup.auto.dayOfMonth': '每月几号',
|
||
'backup.auto.dayOfMonthHint': '限 1–28 以兼容所有月份',
|
||
'backup.auto.scheduleSummary': '计划',
|
||
'backup.auto.summaryDaily': '每天 {hour}:00',
|
||
'backup.auto.summaryWeekly': '每{day} {hour}:00',
|
||
'backup.auto.summaryMonthly': '每月 {day} 号 {hour}:00',
|
||
'backup.auto.envLocked': 'Docker',
|
||
'backup.auto.envLockedHint': '自动备份通过 Docker 环境变量配置。要更改设置,请更新 docker-compose.yml 并重启容器。',
|
||
'backup.auto.copyEnv': '复制 Docker 环境变量',
|
||
'backup.auto.envCopied': 'Docker 环境变量已复制到剪贴板',
|
||
'backup.auto.keepLabel': '自动删除旧备份',
|
||
'backup.dow.sunday': '周日',
|
||
'backup.dow.monday': '周一',
|
||
'backup.dow.tuesday': '周二',
|
||
'backup.dow.wednesday': '周三',
|
||
'backup.dow.thursday': '周四',
|
||
'backup.dow.friday': '周五',
|
||
'backup.dow.saturday': '周六',
|
||
'backup.interval.hourly': '每小时',
|
||
'backup.interval.daily': '每天',
|
||
'backup.interval.weekly': '每周',
|
||
'backup.interval.monthly': '每月',
|
||
'backup.keep.1day': '1 天',
|
||
'backup.keep.3days': '3 天',
|
||
'backup.keep.7days': '7 天',
|
||
'backup.keep.14days': '14 天',
|
||
'backup.keep.30days': '30 天',
|
||
'backup.keep.forever': '永久保留',
|
||
|
||
// Photos
|
||
'photos.title': '照片',
|
||
'photos.subtitle': '{trip} 的 {count} 张照片',
|
||
'photos.dropHere': '将照片拖放至此...',
|
||
'photos.dropHereActive': '将照片拖放至此',
|
||
'photos.captionForAll': '标题(所有)',
|
||
'photos.captionPlaceholder': '可选标题...',
|
||
'photos.addCaption': '添加标题...',
|
||
'photos.allDays': '所有天',
|
||
'photos.noPhotos': '暂无照片',
|
||
'photos.uploadHint': '上传你的旅行照片',
|
||
'photos.clickToSelect': '或点击选择',
|
||
'photos.linkPlace': '关联地点',
|
||
'photos.noPlace': '无地点',
|
||
'photos.uploadN': '上传 {n} 张照片',
|
||
'photos.linkDay': '关联天数',
|
||
'photos.noDay': '无天数',
|
||
'photos.dayLabel': '第 {number} 天',
|
||
'photos.photoSelected': '张照片已选择',
|
||
'photos.photosSelected': '张照片已选择',
|
||
'photos.fileTypeHint': 'JPG, PNG, WebP · 最大 10 MB · 最多 30 张照片',
|
||
|
||
// Backup restore modal
|
||
'backup.restoreConfirmTitle': '恢复备份?',
|
||
'backup.restoreWarning': '所有当前数据(旅行、地点、用户、上传文件)将被备份数据永久替换。此操作无法撤销。',
|
||
'backup.restoreTip': '提示:恢复前建议先备份当前状态。',
|
||
'backup.restoreConfirm': '确认恢复',
|
||
|
||
// PDF
|
||
'pdf.travelPlan': '旅行计划',
|
||
'pdf.planned': '已规划',
|
||
'pdf.costLabel': '费用 EUR',
|
||
'pdf.preview': 'PDF 预览',
|
||
'pdf.saveAsPdf': '保存为 PDF',
|
||
|
||
// Planner
|
||
'planner.places': '地点',
|
||
'planner.bookings': '预订',
|
||
'planner.packingList': '行李清单',
|
||
'planner.documents': '文档',
|
||
'planner.dayPlan': '日程计划',
|
||
'planner.reservations': '预订',
|
||
'planner.minTwoPlaces': '至少需要 2 个有坐标的地点',
|
||
'planner.noGeoPlaces': '没有有坐标的地点',
|
||
'planner.routeCalculated': '路线已计算',
|
||
'planner.routeCalcFailed': '无法计算路线',
|
||
'planner.routeError': '路线计算错误',
|
||
'planner.icsExportFailed': 'ICS 导出失败',
|
||
'planner.routeOptimized': '路线已优化',
|
||
'planner.reservationUpdated': '预订已更新',
|
||
'planner.reservationAdded': '预订已添加',
|
||
'planner.confirmDeleteReservation': '删除预订?',
|
||
'planner.reservationDeleted': '预订已删除',
|
||
'planner.days': '天',
|
||
'planner.allPlaces': '所有地点',
|
||
'planner.totalPlaces': '共 {n} 个地点',
|
||
'planner.noDaysPlanned': '尚未规划天数',
|
||
'planner.editTrip': '编辑旅行 \u2192',
|
||
'planner.placeOne': '1 个地点',
|
||
'planner.placeN': '{n} 个地点',
|
||
'planner.addNote': '添加备注',
|
||
'planner.noEntries': '当天无条目',
|
||
'planner.addPlace': '添加地点/活动',
|
||
'planner.addPlaceShort': '+ 添加地点/活动',
|
||
'planner.resPending': '预订待确认 · ',
|
||
'planner.resConfirmed': '预订已确认 · ',
|
||
'planner.notePlaceholder': '备注…',
|
||
'planner.noteTimePlaceholder': '时间(可选)',
|
||
'planner.noteExamplePlaceholder': '如:14:30 从中央车站乘 S3,7 号码头渡轮,午餐休息…',
|
||
'planner.totalCost': '总费用',
|
||
'planner.searchPlaces': '搜索地点…',
|
||
'planner.allCategories': '所有分类',
|
||
'planner.noPlacesFound': '未找到地点',
|
||
'planner.addFirstPlace': '添加第一个地点',
|
||
'planner.noReservations': '暂无预订',
|
||
'planner.addFirstReservation': '添加第一个预订',
|
||
'planner.new': '新建',
|
||
'planner.addToDay': '+ 天',
|
||
'planner.calculating': '计算中…',
|
||
'planner.route': '路线',
|
||
'planner.optimize': '优化',
|
||
'planner.openGoogleMaps': '在 Google Maps 中打开',
|
||
'planner.selectDayHint': '从左侧列表选择一天以查看日程计划',
|
||
'planner.noPlacesForDay': '当天暂无地点',
|
||
'planner.addPlacesLink': '添加地点 \u2192',
|
||
'planner.minTotal': '分钟 合计',
|
||
'planner.noReservation': '无预订',
|
||
'planner.removeFromDay': '从当天移除',
|
||
'planner.addToThisDay': '添加到当天',
|
||
'planner.overview': '概览',
|
||
'planner.noDays': '暂无天数',
|
||
'planner.editTripToAddDays': '编辑旅行以添加天数',
|
||
'planner.dayCount': '{n} 天',
|
||
'planner.clickToUnlock': '点击解锁',
|
||
'planner.keepPosition': '路线优化时保持位置',
|
||
'planner.dayDetails': '日程详情',
|
||
'planner.dayN': '第 {n} 天',
|
||
|
||
// Dashboard Stats
|
||
'stats.countries': '国家',
|
||
'stats.cities': '城市',
|
||
'stats.trips': '旅行',
|
||
'stats.places': '地点',
|
||
'stats.worldProgress': '全球进度',
|
||
'stats.visited': '已访问',
|
||
'stats.remaining': '未访问',
|
||
'stats.visitedCountries': '已访问国家',
|
||
|
||
// Day Detail Panel
|
||
'day.precipProb': '降水概率',
|
||
'day.precipitation': '降水量',
|
||
'day.wind': '风速',
|
||
'day.sunrise': '日出',
|
||
'day.sunset': '日落',
|
||
'day.hourlyForecast': '逐小时预报',
|
||
'day.climateHint': '历史平均值——实际预报在该日期前 16 天内可用。',
|
||
'day.noWeather': '无天气数据。请添加有坐标的地点。',
|
||
'day.overview': '每日概览',
|
||
'day.accommodation': '住宿',
|
||
'day.addAccommodation': '添加住宿',
|
||
'day.hotelDayRange': '应用到天数',
|
||
'day.noPlacesForHotel': '请先在旅行中添加地点',
|
||
'day.allDays': '全部',
|
||
'day.checkIn': '入住',
|
||
'day.checkInUntil': '截止',
|
||
'day.checkOut': '退房',
|
||
'day.confirmation': '确认号',
|
||
'day.editAccommodation': '编辑住宿',
|
||
'day.reservations': '预订',
|
||
|
||
// Memories / Immich
|
||
'memories.title': '照片',
|
||
'memories.notConnected': 'Immich 未连接',
|
||
'memories.notConnectedHint': '在设置中连接您的 Immich 实例以在此查看旅行照片。',
|
||
'memories.notConnectedMultipleHint': '请在设置中连接以下任一照片提供商:{provider_names},以便向此行程添加照片。',
|
||
'memories.noDates': '为旅行添加日期以加载照片。',
|
||
'memories.noPhotos': '未找到照片',
|
||
'memories.noPhotosHint': 'Immich 中未找到此旅行日期范围内的照片。',
|
||
'memories.photosFound': '张照片',
|
||
'memories.fromOthers': '来自他人',
|
||
'memories.sharePhotos': '分享照片',
|
||
'memories.sharing': '分享中',
|
||
'memories.reviewTitle': '审查您的照片',
|
||
'memories.reviewHint': '点击照片以将其从分享中排除。',
|
||
'memories.shareCount': '分享 {count} 张照片',
|
||
'memories.providerUrl': '服务器 URL',
|
||
'memories.providerApiKey': 'API 密钥',
|
||
'memories.providerUsername': '用户名',
|
||
'memories.providerPassword': '密码',
|
||
'memories.providerOTP': 'MFA 验证码(如已启用)',
|
||
'memories.skipSSLVerification': '跳过 SSL 证书验证',
|
||
'memories.providerUrlHintSynology': '在 URL 中包含照片应用路径,例如 https://nas:5001/photo',
|
||
'memories.testConnection': '测试连接',
|
||
'memories.testFirst': '请先测试连接',
|
||
'memories.connected': '已连接',
|
||
'memories.disconnected': '未连接',
|
||
'memories.connectionSuccess': '已连接到 Immich',
|
||
'memories.connectionError': '无法连接到 Immich',
|
||
'memories.saved': '{provider_name} 设置已保存',
|
||
'memories.providerDisconnectedBanner': '您与 {provider_name} 的连接已断开。请在设置中重新连接以查看照片。',
|
||
'memories.saveError': '无法保存 {provider_name} 设置',
|
||
'memories.oldest': '最早优先',
|
||
'memories.newest': '最新优先',
|
||
'memories.allLocations': '所有地点',
|
||
'memories.addPhotos': '添加照片',
|
||
'memories.linkAlbum': '关联相册',
|
||
'memories.selectAlbum': '选择 Immich 相册',
|
||
'memories.selectAlbumMultiple': '选择相册',
|
||
'memories.noAlbums': '未找到相册',
|
||
'memories.syncAlbum': '同步相册',
|
||
'memories.unlinkAlbum': '取消关联',
|
||
'memories.photos': '张照片',
|
||
'memories.selectPhotos': '从 Immich 选择照片',
|
||
'memories.selectPhotosMultiple': '选择照片',
|
||
'memories.selectHint': '点击照片以选择。',
|
||
'memories.selected': '已选择',
|
||
'memories.addSelected': '添加 {count} 张照片',
|
||
'memories.alreadyAdded': '已添加',
|
||
'memories.private': '私密',
|
||
'memories.stopSharing': '停止分享',
|
||
'memories.tripDates': '旅行日期',
|
||
'memories.allPhotos': '所有照片',
|
||
'memories.confirmShareTitle': '与旅行成员分享?',
|
||
'memories.confirmShareHint': '{count} 张照片将对本次旅行的所有成员可见。你可以稍后将单张照片设为私密。',
|
||
'memories.confirmShareButton': '分享照片',
|
||
|
||
// Collab Addon
|
||
'collab.tabs.chat': '聊天',
|
||
'collab.tabs.notes': '笔记',
|
||
'collab.tabs.polls': '投票',
|
||
'collab.whatsNext.title': '接下来',
|
||
'collab.whatsNext.today': '今天',
|
||
'collab.whatsNext.tomorrow': '明天',
|
||
'collab.whatsNext.empty': '暂无活动',
|
||
'collab.whatsNext.until': '至',
|
||
'collab.whatsNext.emptyHint': '有时间安排的活动将显示在此',
|
||
'collab.chat.send': '发送',
|
||
'collab.chat.placeholder': '输入消息...',
|
||
'collab.chat.empty': '开始对话',
|
||
'collab.chat.emptyHint': '消息对所有旅行成员可见',
|
||
'collab.chat.emptyDesc': '与旅伴分享想法、计划和动态',
|
||
'collab.chat.today': '今天',
|
||
'collab.chat.yesterday': '昨天',
|
||
'collab.chat.deletedMessage': '删除了一条消息',
|
||
'collab.chat.reply': '回复',
|
||
'collab.chat.loadMore': '加载更早的消息',
|
||
'collab.chat.justNow': '刚刚',
|
||
'collab.chat.minutesAgo': '{n} 分钟前',
|
||
'collab.chat.hoursAgo': '{n} 小时前',
|
||
'collab.notes.title': '笔记',
|
||
'collab.notes.new': '新建笔记',
|
||
'collab.notes.empty': '暂无笔记',
|
||
'collab.notes.emptyHint': '开始记录想法和计划',
|
||
'collab.notes.all': '全部',
|
||
'collab.notes.titlePlaceholder': '笔记标题',
|
||
'collab.notes.contentPlaceholder': '写点什么...',
|
||
'collab.notes.categoryPlaceholder': '分类',
|
||
'collab.notes.newCategory': '新建分类...',
|
||
'collab.notes.category': '分类',
|
||
'collab.notes.noCategory': '无分类',
|
||
'collab.notes.color': '颜色',
|
||
'collab.notes.save': '保存',
|
||
'collab.notes.cancel': '取消',
|
||
'collab.notes.edit': '编辑',
|
||
'collab.notes.delete': '删除',
|
||
'collab.notes.pin': '置顶',
|
||
'collab.notes.unpin': '取消置顶',
|
||
'collab.notes.daysAgo': '{n} 天前',
|
||
'collab.notes.categorySettings': '管理分类',
|
||
'collab.notes.create': '创建',
|
||
'collab.notes.website': '网站',
|
||
'collab.notes.websitePlaceholder': 'https://...',
|
||
'collab.notes.attachFiles': '附加文件',
|
||
'collab.notes.noCategoriesYet': '暂无分类',
|
||
'collab.notes.emptyDesc': '创建一个笔记开始吧',
|
||
'collab.polls.title': '投票',
|
||
'collab.polls.new': '新建投票',
|
||
'collab.polls.empty': '暂无投票',
|
||
'collab.polls.emptyHint': '向团队提问并一起投票',
|
||
'collab.polls.question': '问题',
|
||
'collab.polls.questionPlaceholder': '我们应该做什么?',
|
||
'collab.polls.addOption': '+ 添加选项',
|
||
'collab.polls.optionPlaceholder': '选项 {n}',
|
||
'collab.polls.create': '创建投票',
|
||
'collab.polls.close': '关闭',
|
||
'collab.polls.closed': '已关闭',
|
||
'collab.polls.votes': '{n} 票',
|
||
'collab.polls.vote': '{n} 票',
|
||
'collab.polls.multipleChoice': '多选',
|
||
'collab.polls.multiChoice': '多选',
|
||
'collab.polls.deadline': '截止时间',
|
||
'collab.polls.option': '选项',
|
||
'collab.polls.options': '选项',
|
||
'collab.polls.delete': '删除',
|
||
'collab.polls.closedSection': '已关闭',
|
||
|
||
// Permissions
|
||
'admin.tabs.permissions': '权限',
|
||
'perm.title': '权限设置',
|
||
'perm.subtitle': '控制谁可以在应用中执行操作',
|
||
'perm.saved': '权限设置已保存',
|
||
'perm.resetDefaults': '恢复默认',
|
||
'perm.customized': '已自定义',
|
||
'perm.level.admin': '仅管理员',
|
||
'perm.level.tripOwner': '旅行所有者',
|
||
'perm.level.tripMember': '旅行成员',
|
||
'perm.level.everybody': '所有人',
|
||
'perm.cat.trip': '旅行管理',
|
||
'perm.cat.members': '成员管理',
|
||
'perm.cat.files': '文件',
|
||
'perm.cat.content': '内容与日程',
|
||
'perm.cat.extras': '预算、行李与协作',
|
||
'perm.action.trip_create': '创建旅行',
|
||
'perm.action.trip_edit': '编辑旅行详情',
|
||
'perm.action.trip_delete': '删除旅行',
|
||
'perm.action.trip_archive': '归档 / 取消归档旅行',
|
||
'perm.action.trip_cover_upload': '上传封面图片',
|
||
'perm.action.member_manage': '添加 / 移除成员',
|
||
'perm.action.file_upload': '上传文件',
|
||
'perm.action.file_edit': '编辑文件元数据',
|
||
'perm.action.file_delete': '删除文件',
|
||
'perm.action.place_edit': '添加 / 编辑 / 删除地点',
|
||
'perm.action.day_edit': '编辑日程、备注与分配',
|
||
'perm.action.reservation_edit': '管理预订',
|
||
'perm.action.budget_edit': '管理预算',
|
||
'perm.action.packing_edit': '管理行李清单',
|
||
'perm.action.collab_edit': '协作(笔记、投票、聊天)',
|
||
'perm.action.share_manage': '管理分享链接',
|
||
'perm.actionHint.trip_create': '谁可以创建新旅行',
|
||
'perm.actionHint.trip_edit': '谁可以更改旅行名称、日期、描述和货币',
|
||
'perm.actionHint.trip_delete': '谁可以永久删除旅行',
|
||
'perm.actionHint.trip_archive': '谁可以归档或取消归档旅行',
|
||
'perm.actionHint.trip_cover_upload': '谁可以上传或更改封面图片',
|
||
'perm.actionHint.member_manage': '谁可以邀请或移除旅行成员',
|
||
'perm.actionHint.file_upload': '谁可以向旅行上传文件',
|
||
'perm.actionHint.file_edit': '谁可以编辑文件描述和链接',
|
||
'perm.actionHint.file_delete': '谁可以将文件移至回收站或永久删除',
|
||
'perm.actionHint.place_edit': '谁可以添加、编辑或删除地点',
|
||
'perm.actionHint.day_edit': '谁可以编辑日程、日程备注和地点分配',
|
||
'perm.actionHint.reservation_edit': '谁可以创建、编辑或删除预订',
|
||
'perm.actionHint.budget_edit': '谁可以创建、编辑或删除预算项目',
|
||
'perm.actionHint.packing_edit': '谁可以管理行李物品和包袋',
|
||
'perm.actionHint.collab_edit': '谁可以创建笔记、投票和发送消息',
|
||
'perm.actionHint.share_manage': '谁可以创建或删除公开分享链接',
|
||
// Undo
|
||
'undo.button': '撤销',
|
||
'undo.tooltip': '撤销:{action}',
|
||
'undo.assignPlace': '地点已分配至某天',
|
||
'undo.removeAssignment': '地点已从某天移除',
|
||
'undo.reorder': '地点已重新排序',
|
||
'undo.optimize': '路线已优化',
|
||
'undo.deletePlace': '地点已删除',
|
||
'undo.moveDay': '地点已移至另一天',
|
||
'undo.lock': '地点锁定已切换',
|
||
'undo.importGpx': 'GPX 导入',
|
||
'undo.importKeyholeMarkup': 'KMZ/KML 导入',
|
||
'undo.importGoogleList': 'Google 地图导入',
|
||
'undo.importNaverList': 'Naver 地图导入',
|
||
|
||
// Notifications
|
||
'notifications.title': '通知',
|
||
'notifications.markAllRead': '全部标为已读',
|
||
'notifications.deleteAll': '全部删除',
|
||
'notifications.showAll': '查看所有通知',
|
||
'notifications.empty': '暂无通知',
|
||
'notifications.emptyDescription': '您已全部查阅!',
|
||
'notifications.all': '全部',
|
||
'notifications.unreadOnly': '未读',
|
||
'notifications.markRead': '标为已读',
|
||
'notifications.markUnread': '标为未读',
|
||
'notifications.delete': '删除',
|
||
'notifications.system': '系统',
|
||
'notifications.synologySessionCleared.title': 'Synology Photos 已断开连接',
|
||
'notifications.synologySessionCleared.text': '您的服务器或账户已更改 — 请前往设置重新测试您的连接。',
|
||
'memories.error.loadAlbums': '加载相册失败',
|
||
'memories.error.linkAlbum': '关联相册失败',
|
||
'memories.error.unlinkAlbum': '取消关联相册失败',
|
||
'memories.error.syncAlbum': '同步相册失败',
|
||
'memories.error.loadPhotos': '加载照片失败',
|
||
'memories.error.addPhotos': '添加照片失败',
|
||
'memories.error.removePhoto': '删除照片失败',
|
||
'memories.error.toggleSharing': '更新共享设置失败',
|
||
'undo.addPlace': '地点已添加',
|
||
'undo.done': '已撤销:{action}',
|
||
'notifications.test.title': '来自 {actor} 的测试通知',
|
||
'notifications.test.text': '这是一条简单的测试通知。',
|
||
'notifications.test.booleanTitle': '{actor} 请求您的审批',
|
||
'notifications.test.booleanText': '测试布尔通知。',
|
||
'notifications.test.accept': '批准',
|
||
'notifications.test.decline': '拒绝',
|
||
'notifications.test.navigateTitle': '查看详情',
|
||
'notifications.test.navigateText': '测试跳转通知。',
|
||
'notifications.test.goThere': '前往',
|
||
'notifications.test.adminTitle': '管理员广播',
|
||
'notifications.test.adminText': '{actor} 向所有管理员发送了测试通知。',
|
||
'notifications.test.tripTitle': '{actor} 在您的行程中发帖',
|
||
'notifications.test.tripText': '行程"{trip}"的测试通知。',
|
||
|
||
// Todo
|
||
'todo.subtab.packing': '行李清单',
|
||
'todo.subtab.todo': '待办事项',
|
||
'todo.completed': '已完成',
|
||
'todo.filter.all': '全部',
|
||
'todo.filter.open': '进行中',
|
||
'todo.filter.done': '已完成',
|
||
'todo.uncategorized': '未分类',
|
||
'todo.namePlaceholder': '任务名称',
|
||
'todo.descriptionPlaceholder': '描述(可选)',
|
||
'todo.unassigned': '未分配',
|
||
'todo.noCategory': '无分类',
|
||
'todo.hasDescription': '有描述',
|
||
'todo.addItem': '新建任务',
|
||
'todo.sidebar.sortBy': '排序方式',
|
||
'todo.priority': '优先级',
|
||
'todo.newCategoryLabel': '新建',
|
||
'budget.categoriesLabel': '类别',
|
||
'todo.newCategory': '分类名称',
|
||
'todo.addCategory': '添加分类',
|
||
'todo.newItem': '新任务',
|
||
'todo.empty': '暂无任务,添加一个任务开始吧!',
|
||
'todo.filter.my': '我的任务',
|
||
'todo.filter.overdue': '已逾期',
|
||
'todo.sidebar.tasks': '任务',
|
||
'todo.sidebar.categories': '分类',
|
||
'todo.detail.title': '任务',
|
||
'todo.detail.description': '描述',
|
||
'todo.detail.category': '分类',
|
||
'todo.detail.dueDate': '截止日期',
|
||
'todo.detail.assignedTo': '分配给',
|
||
'todo.detail.delete': '删除',
|
||
'todo.detail.save': '保存更改',
|
||
'todo.detail.create': '创建任务',
|
||
'todo.detail.priority': '优先级',
|
||
'todo.detail.noPriority': '无',
|
||
'todo.sortByPrio': '优先级',
|
||
|
||
// Notification system (added from feat/notification-system)
|
||
'settings.notifyVersionAvailable': '有新版本可用',
|
||
'settings.notificationPreferences.noChannels': '未配置通知渠道。请联系管理员设置电子邮件或 Webhook 通知。',
|
||
'settings.webhookUrl.label': 'Webhook URL',
|
||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||
'settings.webhookUrl.hint': '输入您的 Discord、Slack 或自定义 Webhook URL 以接收通知。',
|
||
'settings.webhookUrl.saved': 'Webhook URL 已保存',
|
||
'settings.webhookUrl.test': '测试',
|
||
'settings.webhookUrl.testSuccess': '测试 Webhook 发送成功',
|
||
'settings.webhookUrl.testFailed': '测试 Webhook 失败',
|
||
'settings.ntfyUrl.topicLabel': 'Ntfy 主题',
|
||
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
|
||
'settings.ntfyUrl.serverLabel': 'Ntfy 服务器 URL(可选)',
|
||
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
|
||
'settings.ntfyUrl.hint': '输入您的 Ntfy 主题以接收推送通知。将服务器留空以使用管理员配置的默认值。',
|
||
'settings.ntfyUrl.tokenLabel': '访问令牌(可选)',
|
||
'settings.ntfyUrl.tokenHint': '受密码保护的主题需要此项。',
|
||
'settings.ntfyUrl.saved': 'Ntfy 设置已保存',
|
||
'settings.ntfyUrl.test': '测试',
|
||
'settings.ntfyUrl.testSuccess': '测试 Ntfy 通知发送成功',
|
||
'settings.ntfyUrl.testFailed': '测试 Ntfy 通知失败',
|
||
'settings.ntfyUrl.tokenCleared': '访问令牌已清除',
|
||
'settings.notificationPreferences.inapp': 'In-App',
|
||
'settings.notificationPreferences.webhook': 'Webhook',
|
||
'settings.notificationPreferences.email': 'Email',
|
||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||
'admin.notifications.emailPanel.title': 'Email (SMTP)',
|
||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||
'admin.notifications.inappPanel.title': 'In-App',
|
||
'admin.notifications.inappPanel.hint': '应用内通知始终处于活跃状态,无法全局禁用。',
|
||
'admin.notifications.adminWebhookPanel.title': '管理员 Webhook',
|
||
'admin.notifications.adminWebhookPanel.hint': '此 Webhook 专用于管理员通知(如版本更新提醒)。它与用户 Webhook 相互独立,配置 URL 后自动触发。',
|
||
'admin.notifications.adminWebhookPanel.saved': '管理员 Webhook URL 已保存',
|
||
'admin.notifications.adminWebhookPanel.testSuccess': '测试 Webhook 发送成功',
|
||
'admin.notifications.adminWebhookPanel.testFailed': '测试 Webhook 失败',
|
||
'admin.notifications.adminWebhookPanel.alwaysOnHint': '配置 URL 后管理员 Webhook 自动触发',
|
||
'admin.notifications.ntfy': 'Ntfy',
|
||
'admin.ntfy.hint': '允许用户配置自己的 ntfy 主题以接收推送通知。在下方设置默认服务器以预填充用户设置。',
|
||
'admin.notifications.testNtfy': '发送测试 Ntfy',
|
||
'admin.notifications.testNtfySuccess': '测试 Ntfy 发送成功',
|
||
'admin.notifications.testNtfyFailed': '测试 Ntfy 失败',
|
||
'admin.notifications.adminNtfyPanel.title': '管理员 Ntfy',
|
||
'admin.notifications.adminNtfyPanel.hint': '此 Ntfy 主题专用于管理员通知(如版本更新提醒)。它与每用户主题相互独立,配置后始终触发。',
|
||
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy 服务器 URL',
|
||
'admin.notifications.adminNtfyPanel.serverHint': '同时用作用户 ntfy 通知的默认服务器。留空则默认使用 ntfy.sh。用户可在其自己的设置中覆盖此项。',
|
||
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
||
'admin.notifications.adminNtfyPanel.topicLabel': '管理员主题',
|
||
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
|
||
'admin.notifications.adminNtfyPanel.tokenLabel': '访问令牌(可选)',
|
||
'admin.notifications.adminNtfyPanel.tokenCleared': '管理员访问令牌已清除',
|
||
'admin.notifications.adminNtfyPanel.saved': '管理员 Ntfy 设置已保存',
|
||
'admin.notifications.adminNtfyPanel.test': '发送测试 Ntfy',
|
||
'admin.notifications.adminNtfyPanel.testSuccess': '测试 Ntfy 发送成功',
|
||
'admin.notifications.adminNtfyPanel.testFailed': '测试 Ntfy 失败',
|
||
'admin.notifications.adminNtfyPanel.alwaysOnHint': '配置主题后管理员 Ntfy 始终触发',
|
||
'admin.notifications.adminNotificationsHint': '配置哪些渠道发送管理员通知(如版本更新提醒)。设置管理员 Webhook URL 后,Webhook 将自动触发。',
|
||
'admin.notifications.tripReminders.title': '行程提醒',
|
||
'admin.notifications.tripReminders.hint': '在行程开始前发送提醒通知(需要在行程中设置提醒天数)。',
|
||
'admin.notifications.tripReminders.enabled': '行程提醒已启用',
|
||
'admin.notifications.tripReminders.disabled': '行程提醒已禁用',
|
||
'admin.tabs.notifications': '通知',
|
||
'notifications.versionAvailable.title': '有可用更新',
|
||
'notifications.versionAvailable.text': 'TREK {version} 现已可用。',
|
||
'notifications.versionAvailable.button': '查看详情',
|
||
'notif.test.title': '[测试] 通知',
|
||
'notif.test.simple.text': '这是一条简单的测试通知。',
|
||
'notif.test.boolean.text': '您是否接受此测试通知?',
|
||
'notif.test.navigate.text': '点击下方前往控制台。',
|
||
|
||
// Notifications
|
||
'notif.trip_invite.title': '旅行邀请',
|
||
'notif.trip_invite.text': '{actor} 邀请您加入 {trip}',
|
||
'notif.booking_change.title': '预订已更新',
|
||
'notif.booking_change.text': '{actor} 更新了 {trip} 中的预订',
|
||
'notif.trip_reminder.title': '旅行提醒',
|
||
'notif.trip_reminder.text': '您的旅行 {trip} 即将开始!',
|
||
'notif.vacay_invite.title': 'Vacay 融合邀请',
|
||
'notif.vacay_invite.text': '{actor} 邀请您合并假期计划',
|
||
'notif.photos_shared.title': '照片已分享',
|
||
'notif.photos_shared.text': '{actor} 在 {trip} 中分享了 {count} 张照片',
|
||
'notif.collab_message.title': '新消息',
|
||
'notif.collab_message.text': '{actor} 在 {trip} 中发送了消息',
|
||
'notif.packing_tagged.title': '行李分配',
|
||
'notif.packing_tagged.text': '{actor} 将您分配到 {trip} 中的 {category}',
|
||
'notif.version_available.title': '新版本可用',
|
||
'notif.version_available.text': 'TREK {version} 现已可用',
|
||
'notif.action.view_trip': '查看旅行',
|
||
'notif.action.view_collab': '查看消息',
|
||
'notif.action.view_packing': '查看行李',
|
||
'notif.action.view_photos': '查看照片',
|
||
'notif.action.view_vacay': '查看 Vacay',
|
||
'notif.action.view_admin': '前往管理',
|
||
'notif.action.view': '查看',
|
||
'notif.action.accept': '接受',
|
||
'notif.action.decline': '拒绝',
|
||
'notif.generic.title': '通知',
|
||
'notif.generic.text': '您有一条新通知',
|
||
'notif.dev.unknown_event.title': '[DEV] 未知事件',
|
||
'notif.dev.unknown_event.text': '事件类型 "{event}" 未在 EVENT_NOTIFICATION_CONFIG 中注册',
|
||
|
||
// Journey, Dashboard, Nav, DayPlan
|
||
'common.justNow': '刚刚',
|
||
'common.hoursAgo': '{count}小时前',
|
||
'common.daysAgo': '{count}天前',
|
||
'memories.saveRouteNotConfigured': '此提供商未配置保存路由',
|
||
'memories.testRouteNotConfigured': '此提供商未配置测试路由',
|
||
'memories.fillRequiredFields': '请填写所有必填字段',
|
||
'journey.search.placeholder': '搜索旅程…',
|
||
'journey.search.noResults': '没有与"{query}"匹配的旅程',
|
||
'journey.title': '旅程',
|
||
'journey.subtitle': '实时记录你的旅行',
|
||
'journey.new': '新建旅程',
|
||
'journey.create': '创建',
|
||
'journey.titlePlaceholder': '你要去哪里?',
|
||
'journey.empty': '还没有旅程',
|
||
'journey.emptyHint': '开始记录你的下一次旅行',
|
||
'journey.deleted': '旅程已删除',
|
||
'journey.createError': '无法创建旅程',
|
||
'journey.deleteError': '无法删除旅程',
|
||
'journey.deleteConfirmTitle': '删除',
|
||
'journey.deleteConfirmMessage': '删除"{title}"?此操作无法撤销。',
|
||
'journey.deleteConfirmGeneric': '确定要删除吗?',
|
||
'journey.notFound': '未找到旅程',
|
||
'journey.photos': '照片',
|
||
'journey.timelineEmpty': '还没有行程',
|
||
'journey.timelineEmptyHint': '添加一个签到或写一篇日志开始记录',
|
||
'journey.status.draft': '草稿',
|
||
'journey.status.active': '进行中',
|
||
'journey.status.completed': '已完成',
|
||
'journey.status.upcoming': '即将开始',
|
||
'journey.status.archived': '已归档',
|
||
'journey.checkin.add': '签到',
|
||
'journey.checkin.namePlaceholder': '地点名称',
|
||
'journey.checkin.notesPlaceholder': '备注(可选)',
|
||
'journey.checkin.save': '保存',
|
||
'journey.checkin.error': '无法保存签到',
|
||
'journey.entry.add': '日志',
|
||
'journey.entry.edit': '编辑条目',
|
||
'journey.entry.titlePlaceholder': '标题(可选)',
|
||
'journey.entry.bodyPlaceholder': '今天发生了什么?',
|
||
'journey.entry.save': '保存',
|
||
'journey.entry.error': '无法保存条目',
|
||
'journey.photo.add': '照片',
|
||
'journey.photo.uploadError': '上传失败',
|
||
'journey.share.share': '分享',
|
||
'journey.share.public': '公开',
|
||
'journey.share.linkCopied': '公开链接已复制',
|
||
'journey.share.disabled': '已关闭公开分享',
|
||
'journey.editor.titlePlaceholder': '给这个瞬间起个名字...',
|
||
'journey.editor.bodyPlaceholder': '讲述这一天的故事...',
|
||
'journey.editor.placePlaceholder': '地点(可选)',
|
||
'journey.editor.tagsPlaceholder': '标签:隐藏宝藏、最佳美食、值得再去...',
|
||
'journey.visibility.private': '私密',
|
||
'journey.visibility.shared': '共享',
|
||
'journey.visibility.public': '公开',
|
||
'journey.emptyState.title': '你的故事从这里开始',
|
||
'journey.emptyState.subtitle': '在某个地方签到或写下你的第一篇日志',
|
||
'journey.frontpage.subtitle': '将旅行变成永远不会忘记的故事',
|
||
'journey.frontpage.createJourney': '创建旅程',
|
||
'journey.frontpage.activeJourney': '进行中的旅程',
|
||
'journey.frontpage.allJourneys': '所有旅程',
|
||
'journey.frontpage.journeys': '个旅程',
|
||
'journey.frontpage.createNew': '创建新旅程',
|
||
'journey.frontpage.createNewSub': '选择旅行、写故事、分享你的冒险',
|
||
'journey.frontpage.live': '实时',
|
||
'journey.frontpage.synced': '已同步',
|
||
'journey.frontpage.continueWriting': '继续写作',
|
||
'journey.frontpage.updated': '更新于 {time}',
|
||
'journey.frontpage.suggestionLabel': '旅行刚结束',
|
||
'journey.frontpage.suggestionText': '将 <strong>{title}</strong> 变成一段旅程',
|
||
'journey.frontpage.dismiss': '忽略',
|
||
'journey.frontpage.journeyName': '旅程名称',
|
||
'journey.frontpage.namePlaceholder': '例如 东南亚 2026',
|
||
'journey.frontpage.selectTrips': '选择旅行',
|
||
'journey.frontpage.tripsSelected': '个旅行已选择',
|
||
'journey.frontpage.trips': '个旅行',
|
||
'journey.frontpage.placesImported': '个地点将被导入',
|
||
'journey.frontpage.places': '个地点',
|
||
'journey.detail.backToJourney': '返回旅程',
|
||
'journey.detail.syncedWithTrips': '已与旅行同步',
|
||
'journey.detail.addEntry': '添加条目',
|
||
'journey.detail.newEntry': '新建条目',
|
||
'journey.detail.editEntry': '编辑条目',
|
||
'journey.detail.noEntries': '还没有条目',
|
||
'journey.detail.noEntriesHint': '添加一个旅行以生成骨架条目',
|
||
'journey.detail.noPhotos': '还没有照片',
|
||
'journey.detail.noPhotosHint': '上传照片到条目或浏览你的 Immich/Synology 相册',
|
||
'journey.detail.journeyStats': '旅程统计',
|
||
'journey.detail.syncedTrips': '已同步的旅行',
|
||
'journey.detail.noTripsLinked': '尚未关联旅行',
|
||
'journey.detail.contributors': '贡献者',
|
||
'journey.detail.readMore': '阅读更多',
|
||
'journey.detail.prosCons': '优缺点',
|
||
'journey.detail.photos': '照片',
|
||
'journey.detail.day': '第{number}天',
|
||
'journey.detail.places': '个地点',
|
||
'journey.stats.days': '天',
|
||
'journey.stats.cities': '城市',
|
||
'journey.stats.entries': '条目',
|
||
'journey.stats.photos': '照片',
|
||
'journey.stats.places': '地点',
|
||
'journey.skeletons.show': '显示建议',
|
||
'journey.skeletons.hide': '隐藏建议',
|
||
'journey.verdict.lovedIt': '非常喜欢',
|
||
'journey.verdict.couldBeBetter': '有待改进',
|
||
'journey.synced.places': '个地点',
|
||
'journey.synced.synced': '已同步',
|
||
'journey.editor.uploadPhotos': '上传照片',
|
||
'journey.editor.uploading': '上传中...',
|
||
'journey.editor.fromGallery': '从相册',
|
||
'journey.editor.allPhotosAdded': '所有照片已添加',
|
||
'journey.editor.writeStory': '写下你的故事...',
|
||
'journey.editor.prosCons': '优缺点',
|
||
'journey.editor.pros': '优点',
|
||
'journey.editor.cons': '缺点',
|
||
'journey.editor.proPlaceholder': '好的方面...',
|
||
'journey.editor.conPlaceholder': '不好的方面...',
|
||
'journey.editor.addAnother': '再添加一个',
|
||
'journey.editor.date': '日期',
|
||
'journey.editor.location': '地点',
|
||
'journey.editor.searchLocation': '搜索地点...',
|
||
'journey.editor.mood': '心情',
|
||
'journey.editor.weather': '天气',
|
||
'journey.editor.photoFirst': '第1张',
|
||
'journey.editor.makeFirst': '设为第1张',
|
||
'journey.editor.searching': '搜索中...',
|
||
'journey.mood.amazing': '太棒了',
|
||
'journey.mood.good': '不错',
|
||
'journey.mood.neutral': '一般',
|
||
'journey.mood.rough': '糟糕',
|
||
'journey.weather.sunny': '晴天',
|
||
'journey.weather.partly': '多云',
|
||
'journey.weather.cloudy': '阴天',
|
||
'journey.weather.rainy': '雨天',
|
||
'journey.weather.stormy': '暴风雨',
|
||
'journey.weather.cold': '雪天',
|
||
'journey.trips.linkTrip': '关联旅行',
|
||
'journey.trips.searchTrip': '搜索旅行',
|
||
'journey.trips.searchPlaceholder': '旅行名称或目的地...',
|
||
'journey.trips.noTripsAvailable': '没有可用的旅行',
|
||
'journey.trips.link': '关联',
|
||
'journey.trips.tripLinked': '旅行已关联',
|
||
'journey.trips.linkFailed': '关联旅行失败',
|
||
'journey.trips.addTrip': '添加旅行',
|
||
'journey.trips.unlinkTrip': '取消关联旅行',
|
||
'journey.trips.unlinkMessage': '取消关联"{title}"?此旅行中所有已同步的条目和照片将被永久删除。此操作无法撤销。',
|
||
'journey.trips.unlink': '取消关联',
|
||
'journey.trips.tripUnlinked': '旅行已取消关联',
|
||
'journey.trips.unlinkFailed': '取消关联失败',
|
||
'journey.trips.noTripsLinkedSettings': '未关联旅行',
|
||
'journey.contributors.invite': '邀请贡献者',
|
||
'journey.contributors.searchUser': '搜索用户',
|
||
'journey.contributors.searchPlaceholder': '用户名或邮箱...',
|
||
'journey.contributors.noUsers': '未找到用户',
|
||
'journey.contributors.role': '角色',
|
||
'journey.contributors.added': '贡献者已添加',
|
||
'journey.contributors.addFailed': '添加贡献者失败',
|
||
'journey.share.publicShare': '公开分享',
|
||
'journey.share.createLink': '创建分享链接',
|
||
'journey.share.linkCreated': '分享链接已创建',
|
||
'journey.share.createFailed': '创建链接失败',
|
||
'journey.share.copy': '复制',
|
||
'journey.share.copied': '已复制!',
|
||
'journey.share.timeline': '时间线',
|
||
'journey.share.gallery': '图库',
|
||
'journey.share.map': '地图',
|
||
'journey.share.removeLink': '移除分享链接',
|
||
'journey.share.linkDeleted': '分享链接已删除',
|
||
'journey.share.deleteFailed': '删除失败',
|
||
'journey.share.updateFailed': '更新失败',
|
||
|
||
// Journey — Invite
|
||
'journey.invite.role': '角色',
|
||
'journey.invite.viewer': '查看者',
|
||
'journey.invite.editor': '编辑者',
|
||
'journey.invite.invite': '邀请',
|
||
'journey.invite.inviting': '邀请中...',
|
||
'journey.settings.title': '旅程设置',
|
||
'journey.settings.coverImage': '封面图片',
|
||
'journey.settings.changeCover': '更换封面',
|
||
'journey.settings.addCover': '添加封面图片',
|
||
'journey.settings.name': '名称',
|
||
'journey.settings.subtitle': '副标题',
|
||
'journey.settings.subtitlePlaceholder': '例如 泰国、越南和柬埔寨',
|
||
'journey.settings.endJourney': '归档旅程',
|
||
'journey.settings.reopenJourney': '恢复旅程',
|
||
'journey.settings.archived': '旅程已归档',
|
||
'journey.settings.reopened': '旅程已重新开启',
|
||
'journey.settings.endDescription': '隐藏直播标记。您可以随时重新开启。',
|
||
'journey.settings.delete': '删除',
|
||
'journey.settings.deleteJourney': '删除旅程',
|
||
'journey.settings.deleteMessage': '删除"{title}"?所有条目和照片将丢失。',
|
||
'journey.settings.saved': '设置已保存',
|
||
'journey.settings.saveFailed': '保存失败',
|
||
'journey.settings.coverUpdated': '封面已更新',
|
||
'journey.settings.coverFailed': '上传失败',
|
||
'journey.settings.failedToDelete': '删除失败',
|
||
'journey.entries.deleteTitle': '删除条目',
|
||
'journey.photosUploaded': '{count} 张照片已上传',
|
||
'journey.photosAdded': '{count} 张照片已添加',
|
||
'journey.public.notFound': '未找到',
|
||
'journey.public.notFoundMessage': '此旅程不存在或链接已过期。',
|
||
'journey.public.readOnly': '只读 · 公开旅程',
|
||
'journey.public.tagline': '旅行资源与探索工具包',
|
||
'journey.public.sharedVia': '分享自',
|
||
'journey.public.madeWith': '由',
|
||
'journey.pdf.journeyBook': '旅程手册',
|
||
'journey.pdf.madeWith': '由 TREK 制作',
|
||
'journey.pdf.day': '第',
|
||
'journey.pdf.theEnd': '终',
|
||
'journey.pdf.saveAsPdf': '保存为 PDF',
|
||
'journey.pdf.pages': '页',
|
||
'journey.picker.tripPeriod': '旅行时间段',
|
||
'journey.picker.dateRange': '日期范围',
|
||
'journey.picker.allPhotos': '所有照片',
|
||
'journey.picker.albums': '相册',
|
||
'journey.picker.selected': '已选择',
|
||
'journey.picker.addTo': '添加到',
|
||
'journey.picker.newGallery': '新相册',
|
||
'journey.picker.selectAll': '全选',
|
||
'journey.picker.deselectAll': '取消全选',
|
||
'journey.picker.noAlbums': '未找到相册',
|
||
'journey.picker.selectDate': '选择日期',
|
||
'journey.picker.search': '搜索',
|
||
'dashboard.greeting.morning': '早上好,',
|
||
'dashboard.greeting.afternoon': '下午好,',
|
||
'dashboard.greeting.evening': '晚上好,',
|
||
'dashboard.mobile.liveNow': '进行中',
|
||
'dashboard.mobile.tripProgress': '旅行进度',
|
||
'dashboard.mobile.daysLeft': '还剩 {count} 天',
|
||
'dashboard.mobile.places': '地点',
|
||
'dashboard.mobile.buddies': '旅伴',
|
||
'dashboard.mobile.newTrip': '新建旅行',
|
||
'dashboard.mobile.currency': '货币',
|
||
'dashboard.mobile.timezone': '时区',
|
||
'dashboard.mobile.upcomingTrips': '即将到来的旅行',
|
||
'dashboard.mobile.yourTrips': '我的旅行',
|
||
'dashboard.mobile.trips': '个旅行',
|
||
'dashboard.mobile.starts': '出发',
|
||
'dashboard.mobile.duration': '时长',
|
||
'dashboard.mobile.day': '天',
|
||
'dashboard.mobile.days': '天',
|
||
'dashboard.mobile.ongoing': '进行中',
|
||
'dashboard.mobile.startsToday': '今天出发',
|
||
'dashboard.mobile.tomorrow': '明天',
|
||
'dashboard.mobile.inDays': '{count} 天后',
|
||
'dashboard.mobile.inMonths': '{count} 个月后',
|
||
'dashboard.mobile.completed': '已完成',
|
||
'dashboard.mobile.currencyConverter': '汇率转换',
|
||
'nav.profile': '个人资料',
|
||
'nav.bottomSettings': '设置',
|
||
'nav.bottomAdmin': '管理设置',
|
||
'nav.bottomLogout': '退出登录',
|
||
'nav.bottomAdminBadge': '管理员',
|
||
'dayplan.mobile.addPlace': '添加地点',
|
||
'dayplan.mobile.searchPlaces': '搜索地点...',
|
||
'dayplan.mobile.allAssigned': '所有地点已分配',
|
||
'dayplan.mobile.noMatch': '无匹配',
|
||
'dayplan.mobile.createNew': '创建新地点',
|
||
'admin.addons.catalog.journey.name': '旅程',
|
||
'admin.addons.catalog.journey.description': '旅行追踪与旅行日志,包含签到、照片和每日故事',
|
||
// OAuth scope groups
|
||
'oauth.scope.group.trips': '行程',
|
||
'oauth.scope.group.places': '地点',
|
||
'oauth.scope.group.atlas': 'Atlas',
|
||
'oauth.scope.group.packing': '行李',
|
||
'oauth.scope.group.todos': '待办事项',
|
||
'oauth.scope.group.budget': '预算',
|
||
'oauth.scope.group.reservations': '预订',
|
||
'oauth.scope.group.collab': '协作',
|
||
'oauth.scope.group.notifications': '通知',
|
||
'oauth.scope.group.vacay': '假期',
|
||
'oauth.scope.group.geo': 'Geo',
|
||
'oauth.scope.group.weather': '天气',
|
||
|
||
// OAuth scope labels & descriptions
|
||
'oauth.scope.trips:read.label': '查看行程和行程计划',
|
||
'oauth.scope.trips:read.description': '读取行程、天数、每日笔记和成员',
|
||
'oauth.scope.trips:write.label': '编辑行程和行程计划',
|
||
'oauth.scope.trips:write.description': '创建和更新行程、天数、笔记并管理成员',
|
||
'oauth.scope.trips:delete.label': '删除行程',
|
||
'oauth.scope.trips:delete.description': '永久删除整个行程——此操作不可撤销',
|
||
'oauth.scope.trips:share.label': '管理分享链接',
|
||
'oauth.scope.trips:share.description': '创建、更新和撤销行程的公开分享链接',
|
||
'oauth.scope.places:read.label': '查看地点和地图数据',
|
||
'oauth.scope.places:read.description': '读取地点、每日分配、标签和分类',
|
||
'oauth.scope.places:write.label': '管理地点',
|
||
'oauth.scope.places:write.description': '创建、更新和删除地点、分配和标签',
|
||
'oauth.scope.atlas:read.label': '查看 Atlas',
|
||
'oauth.scope.atlas:read.description': '读取已访问国家、地区和心愿清单',
|
||
'oauth.scope.atlas:write.label': '管理 Atlas',
|
||
'oauth.scope.atlas:write.description': '标记已访问国家和地区,管理心愿清单',
|
||
'oauth.scope.packing:read.label': '查看行李清单',
|
||
'oauth.scope.packing:read.description': '读取行李物品、包袋和分类负责人',
|
||
'oauth.scope.packing:write.label': '管理行李清单',
|
||
'oauth.scope.packing:write.description': '添加、更新、删除、勾选和重新排列行李物品和包袋',
|
||
'oauth.scope.todos:read.label': '查看待办清单',
|
||
'oauth.scope.todos:read.description': '读取行程待办事项和分类负责人',
|
||
'oauth.scope.todos:write.label': '管理待办清单',
|
||
'oauth.scope.todos:write.description': '创建、更新、勾选、删除和重新排列待办事项',
|
||
'oauth.scope.budget:read.label': '查看预算',
|
||
'oauth.scope.budget:read.description': '读取预算条目和费用明细',
|
||
'oauth.scope.budget:write.label': '管理预算',
|
||
'oauth.scope.budget:write.description': '创建、更新和删除预算条目',
|
||
'oauth.scope.reservations:read.label': '查看预订',
|
||
'oauth.scope.reservations:read.description': '读取预订和住宿详情',
|
||
'oauth.scope.reservations:write.label': '管理预订',
|
||
'oauth.scope.reservations:write.description': '创建、更新、删除和重新排列预订',
|
||
'oauth.scope.collab:read.label': '查看协作',
|
||
'oauth.scope.collab:read.description': '读取协作笔记、投票和消息',
|
||
'oauth.scope.collab:write.label': '管理协作',
|
||
'oauth.scope.collab:write.description': '创建、更新和删除协作笔记、投票和消息',
|
||
'oauth.scope.notifications:read.label': '查看通知',
|
||
'oauth.scope.notifications:read.description': '读取应用内通知和未读数量',
|
||
'oauth.scope.notifications:write.label': '管理通知',
|
||
'oauth.scope.notifications:write.description': '将通知标记为已读并回复',
|
||
'oauth.scope.vacay:read.label': '查看假期计划',
|
||
'oauth.scope.vacay:read.description': '读取假期计划数据、条目和统计',
|
||
'oauth.scope.vacay:write.label': '管理假期计划',
|
||
'oauth.scope.vacay:write.description': '创建和管理假期条目、节假日和团队计划',
|
||
'oauth.scope.geo:read.label': '地图和地理编码',
|
||
'oauth.scope.geo:read.description': '搜索位置、解析地图 URL 和反向地理编码坐标',
|
||
'oauth.scope.weather:read.label': '天气预报',
|
||
'oauth.scope.weather:read.description': '获取行程地点和日期的天气预报',
|
||
|
||
// System notices
|
||
'system_notice.welcome_v1.title': '欢迎使用 TREK',
|
||
'system_notice.welcome_v1.body': '您的全能旅行规划器。制定行程、与朋友分享旅行,随时保持井然有序——在线或离线均可。',
|
||
'system_notice.welcome_v1.cta_label': '规划行程',
|
||
'system_notice.welcome_v1.hero_alt': '风景优美的旅游目的地与 TREK 界面',
|
||
'system_notice.welcome_v1.highlight_plan': '逐日行程规划',
|
||
'system_notice.welcome_v1.highlight_share': '与旅行伙伴协作',
|
||
'system_notice.welcome_v1.highlight_offline': '移动端支持离线使用',
|
||
'system_notice.dev_test_modal.title': '[Dev] Test notice',
|
||
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.',
|
||
'system_notice.pager.prev': '上一条通知',
|
||
'system_notice.pager.next': '下一条通知',
|
||
'system_notice.pager.counter': '{current} / {total}',
|
||
'system_notice.pager.goto': '转到通知 {n}',
|
||
'system_notice.pager.position': '通知 {current}/{total}',
|
||
// System notices — 3.0.0 upgrade
|
||
'system_notice.v3_photos.title': '3.0 版照片已迁移',
|
||
'system_notice.v3_photos.body': '行程规划器中的**照片**标签已被移除。您的照片安全无虑 — TREK 从未修改您的 Immich 或 Synology 相册。\n\n照片现在位于 **Journey** 插件中。Journey 是可选的 — 如果尚未启用,请联系管理员在 Admin → 插件 中开启。',
|
||
'system_notice.v3_journey.title': '认识 Journey — 旅行日记',
|
||
'system_notice.v3_journey.body': '将您的旅程记录为展示时间线、照片画廊和互动地图的丰富旅行故事。',
|
||
'system_notice.v3_journey.cta_label': '打开 Journey',
|
||
'system_notice.v3_journey.highlight_timeline': '每日时间线与画廊',
|
||
'system_notice.v3_journey.highlight_photos': '从 Immich 或 Synology 导入',
|
||
'system_notice.v3_journey.highlight_share': '公开分享 — 无需登录',
|
||
'system_notice.v3_journey.highlight_export': '导出为 PDF 相册书',
|
||
'system_notice.v3_features.title': '3.0 版更多亮点',
|
||
'system_notice.v3_features.body': '此版本还有一些其他值得了解的新功能。',
|
||
'system_notice.v3_features.highlight_dashboard': '移动优先仪表板重设计',
|
||
'system_notice.v3_features.highlight_offline': '作为 PWA 的完整离线模式',
|
||
'system_notice.v3_features.highlight_search': '地点搜索实时自动补全',
|
||
'system_notice.v3_features.highlight_import': '从 KMZ/KML 文件导入地点',
|
||
|
||
// System notices — MCP OAuth 2.1 upgrade
|
||
'system_notice.v3_mcp.title': 'MCP:OAuth 2.1 升级',
|
||
'system_notice.v3_mcp.body': 'MCP 集成已全面重构。OAuth 2.1 现为推荐的身份验证方式。静态令牌(trek_…)已弃用,将在未来版本中移除。',
|
||
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 推荐(mcp-remote)',
|
||
'system_notice.v3_mcp.highlight_scopes': '24 个细粒度权限范围',
|
||
'system_notice.v3_mcp.highlight_deprecated': '静态 trek_ 令牌已弃用',
|
||
'system_notice.v3_mcp.highlight_tools': '扩展工具集与提示词',
|
||
|
||
// System notices — personal thank you
|
||
'system_notice.v3_thankyou.title': '来自我的一封私人信',
|
||
'system_notice.v3_thankyou.body': '在你继续之前——我想停下来说几句。\n\nTREK 最初只是我为自己的旅行而做的一个业余项目。我从未想过它会成长为 4,000 人信赖的冒险规划工具。每一颗星标、每一个 issue、每一个功能请求——我都会读,它们在全职工作和大学学业之间的深夜里支撑着我继续前行。\n\n我想让你们知道:TREK 将永远开源,永远可自托管,永远属于你们。没有追踪,没有订阅,没有任何附加条件。只是一个热爱旅行的人为同样热爱旅行的你们打造的工具。\n\n特别感谢 [jubnl](https://github.com/jubnl)——你已经成为一位不可思议的合作者。3.0 版本中许多精彩之处都留下了你的印记。感谢你在这个项目还很粗糙的时候就选择了相信它。\n\n也感谢你们每一位——报告了 bug、翻译了文本、向朋友分享了 TREK,或者只是用它规划了一次旅行——**谢谢你们**。你们是这一切存在的原因。\n\n愿我们一起踏上更多的冒险旅程。\n\n— Maurice\n\n---\n\n[加入 Discord 社区](https://discord.gg/7Q6M6jDwzf)\n\n如果 TREK 让你的旅行更美好,一杯[小小的咖啡](https://ko-fi.com/mauriceboe)能让这盏灯一直亮着。',
|
||
}
|
||
|
||
export default zh
|
||
|