Files
CodePilot/src/i18n/zh.ts
T
7418andClaude Opus 4.6 113e15e2f4 feat: Discord bridge adapter — 完整实现 Discord 作为第三个桥接渠道
新增文件:
- discord-adapter.ts: 基于 discord.js v14 的适配器,支持 DM/频道消息、
  按钮交互、流式预览(edit-based)、@提及过滤(兼容角色 mention)、
  图片附件下载、!→/ 命令归一化、消息去重、typing indicator
- markdown/discord.ts: Discord 2000 字符分段,代码块围栏自动平衡
- API routes: settings CRUD(Token 掩码)+ verify(Discord REST 验证)
- DiscordBridgeSection.tsx: 设置 UI(凭据、授权、服务器策略、配置指南含 ID 获取方法)
- discord-bridge.test.ts: 22 项单元测试(chunking/auth/command/HTML 转换)

修改文件:
- bridge-manager.ts: Discord 分段投递 + channel-aware stream config
  (Discord 默认 1500ms/40chars/1900max vs Telegram 700ms/20/3900)
- BridgeLayout/BridgeSection: Discord 渠道开关和侧栏入口
- bridge/settings/route.ts: 新增 14 个 Discord 设置键
- next.config.ts: serverExternalPackages 添加 discord.js/zlib-sync
- i18n: 中英文完整翻译(30+ keys)
- docs/handover/bridge-system.md: Discord 架构文档

依赖:discord.js ^14.18.0, zlib-sync ^0.1.9

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:32:46 +08:00

627 lines
32 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TranslationKey } from './en';
const zh: Record<TranslationKey, string> = {
// ── Navigation ──────────────────────────────────────────────
'nav.chats': '对话',
'nav.extensions': '扩展',
'nav.settings': '设置',
'nav.autoApproveOn': '自动批准已开启',
'nav.lightMode': '浅色模式',
'nav.darkMode': '深色模式',
'nav.toggleTheme': '切换主题',
'nav.bridge': '桥接',
// ── Chat list panel ─────────────────────────────────────────
'chatList.justNow': '刚刚',
'chatList.minutesAgo': '{n}分钟',
'chatList.hoursAgo': '{n}小时',
'chatList.daysAgo': '{n}天',
'chatList.newConversation': '新对话',
'chatList.delete': '删除',
'chatList.searchSessions': '搜索会话...',
'chatList.noSessions': '暂无会话',
'chatList.importFromCli': '从 Claude Code 导入',
'chatList.addProjectFolder': '添加项目文件夹',
'chatList.threads': '对话列表',
// ── Message list ────────────────────────────────────────────
'messageList.claudeChat': 'CodePilot 对话',
'messageList.emptyDescription': '开始与 CodePilot 对话。提问、获取代码帮助或探索想法。',
'messageList.loadEarlier': '加载更早的消息',
'messageList.loading': '加载中...',
// ── Message input ───────────────────────────────────────────
'messageInput.attachFiles': '附加文件',
'messageInput.helpDesc': '显示可用命令和提示',
'messageInput.clearDesc': '清除对话历史',
'messageInput.costDesc': '显示 Token 用量统计',
'messageInput.compactDesc': '压缩对话上下文',
'messageInput.doctorDesc': '诊断项目健康状况',
'messageInput.initDesc': '初始化项目 CLAUDE.md',
'messageInput.reviewDesc': '审查代码质量',
'messageInput.terminalSetupDesc': '配置终端设置',
'messageInput.memoryDesc': '编辑项目记忆文件',
'messageInput.modeCode': '代码',
'messageInput.modePlan': '计划',
'messageInput.aiSuggested': 'AI 推荐',
// ── Streaming message ───────────────────────────────────────
'streaming.thinking': '思考中...',
'streaming.allowForSession': '本次会话允许',
'streaming.allowed': '已允许',
'streaming.denied': '已拒绝',
// ── Chat view / session page ────────────────────────────────
'chat.newConversation': '新对话',
// ── Settings: General ───────────────────────────────────────
'settings.title': '设置',
'settings.description': '管理 CodePilot 和 Claude CLI 设置',
'settings.general': '通用',
'settings.providers': '服务商',
'settings.claudeCli': 'Claude CLI',
'settings.codepilot': 'CodePilot',
'settings.version': '版本 {version}',
'settings.checkForUpdates': '检查更新',
'settings.checking': '检查中...',
'settings.updateAvailable': '有新版本:v{version}',
'settings.viewRelease': '查看发布',
'settings.latestVersion': '已是最新版本。',
'settings.autoApproveTitle': '自动批准所有操作',
'settings.autoApproveDesc': '跳过所有权限检查并自动批准每个工具操作。这很危险,仅应用于受信任的任务。',
'settings.autoApproveWarning': '所有工具操作将在无确认的情况下自动批准。请谨慎使用。',
'settings.autoApproveDialogTitle': '启用自动批准所有操作?',
'settings.autoApproveDialogDesc': '这将绕过所有权限检查。Claude 将能够在不征求您确认的情况下执行任何工具操作,包括:',
'settings.autoApproveShellCommands': '运行任意 Shell 命令',
'settings.autoApproveFileOps': '读取、写入和删除文件',
'settings.autoApproveNetwork': '发起网络请求',
'settings.autoApproveTrustWarning': '仅在您完全信任当前任务时才启用此选项。此设置适用于所有新的聊天会话。',
'settings.cancel': '取消',
'settings.enableAutoApprove': '启用自动批准',
'settings.language': '语言',
'settings.languageDesc': '选择界面显示语言',
'settings.usage': '用量统计',
// ── Settings: Usage Stats ───────────────────────────────────
'usage.totalTokens': '总 Token',
'usage.totalCost': '总费用',
'usage.sessions': '会话数',
'usage.cacheHitRate': '缓存命中率',
'usage.input': '输入',
'usage.output': '输出',
'usage.cached': '已缓存',
'usage.dailyChart': '每日 Token 用量',
'usage.loading': '加载中...',
'usage.loadError': '加载用量数据失败',
'usage.noData': '暂无用量数据',
'usage.noDataHint': '开始对话后即可在此查看统计信息。',
// ── Settings: CLI ───────────────────────────────────────────
'cli.permissions': '权限',
'cli.permissionsDesc': '配置 Claude CLI 的权限设置',
'cli.envVars': '环境变量',
'cli.envVarsDesc': '传递给 Claude 的环境变量',
'cli.form': '表单',
'cli.json': 'JSON',
'cli.save': '保存',
'cli.format': '格式化',
'cli.reset': '重置',
'cli.settingsSaved': '设置已保存',
'cli.confirmSaveTitle': '确认保存',
'cli.confirmSaveDesc': '这将覆盖您当前的 ~/.claude/settings.json 文件。确定要继续吗?',
// ── Settings: Providers ─────────────────────────────────────
'provider.addProvider': '添加服务商',
'provider.editProvider': '编辑服务商',
'provider.deleteProvider': '删除服务商',
'provider.deleteConfirm': '确定要删除"{name}"吗?此操作无法撤销。',
'provider.deleting': '删除中...',
'provider.delete': '删除',
'provider.noProviders': '未配置服务商',
'provider.addToStart': '添加服务商以开始使用',
'provider.quickPresets': '快速预设',
'provider.customProviders': '自定义服务商',
'provider.active': '活跃',
'provider.configured': '已配置',
'provider.name': '名称',
'provider.providerType': '服务商类型',
'provider.apiKey': 'API 密钥',
'provider.baseUrl': '基础 URL',
'provider.modelName': '模型名称',
'provider.advancedOptions': '高级选项',
'provider.extraEnvVars': '额外环境变量',
'provider.notes': '备注',
'provider.notesPlaceholder': '关于此服务商的可选备注...',
'provider.saving': '保存中...',
'provider.update': '更新',
'provider.envDetected': '从环境变量检测到',
'provider.default': '默认',
'provider.setDefault': '设为默认',
'provider.environment': '环境变量',
'provider.connectedProviders': '已连接的提供商',
'provider.noConnected': '尚未连接任何提供商',
'provider.connect': '连接',
'provider.disconnect': '断开连接',
'provider.disconnecting': '断开中...',
'provider.disconnectProvider': '断开提供商',
'provider.disconnectConfirm': '确定要断开"{name}"吗?此操作无法撤销。',
'provider.ccSwitchHint': '通过类似 cc switch 等工具添加的 Claude Code 配置可能无法被 CodePilot 读取,建议在此处重新添加。',
'provider.addProviderSection': '添加提供商',
'provider.addProviderDesc': '选择要连接的提供商。大多数预设只需填写 API 密钥。',
// ── Right panel / Files ─────────────────────────────────────
'panel.files': '文件',
'panel.tasks': '任务',
'panel.openPanel': '打开面板',
'panel.closePanel': '关闭面板',
// ── File tree ───────────────────────────────────────────────
'fileTree.filterFiles': '筛选文件...',
'fileTree.refresh': '刷新',
'fileTree.noFiles': '未找到文件',
'fileTree.selectFolder': '选择项目文件夹以查看文件',
// ── File preview ────────────────────────────────────────────
'filePreview.backToTree': '返回文件树',
'filePreview.lines': '{count} 行',
'filePreview.copyPath': '复制路径',
'filePreview.failedToLoad': '加载文件失败',
// ── Doc preview ─────────────────────────────────────────────
'docPreview.htmlPreview': 'HTML 预览',
// ── Extensions page ─────────────────────────────────────────
'extensions.title': '扩展',
'extensions.skills': '技能',
'extensions.mcpServers': 'MCP 服务器',
// ── Skills ──────────────────────────────────────────────────
'skills.noSelected': '未选择技能',
'skills.selectOrCreate': '从列表中选择一个技能或创建新技能',
'skills.newSkill': '新建技能',
'skills.loadingSkills': '加载技能中...',
'skills.noSkillsFound': '未找到技能',
'skills.searchSkills': '搜索技能...',
'skills.createSkill': '创建技能',
'skills.nameRequired': '名称为必填项',
'skills.nameInvalid': '名称只能包含字母、数字、连字符和下划线',
'skills.skillName': '技能名称',
'skills.scope': '作用域',
'skills.global': '全局',
'skills.project': '项目',
'skills.template': '模板',
'skills.blank': '空白',
'skills.commitHelper': '提交助手',
'skills.codeReviewer': '代码审查',
'skills.saved': '已保存',
'skills.save': '保存',
'skills.edit': '编辑',
'skills.preview': '预览',
'skills.splitView': '分屏视图',
'skills.deleteConfirm': '再次点击以确认',
'skills.placeholder': '用 Markdown 编写技能提示词...',
'skills.mySkills': '我的技能',
'skills.marketplace': '技能市场',
'skills.marketplaceSearch': '搜索 Skills.sh...',
'skills.install': '安装',
'skills.installed': '已安装',
'skills.installing': '安装中...',
'skills.uninstall': '卸载',
'skills.installs': '次安装',
'skills.source': '来源',
'skills.installedAt': '安装时间',
'skills.installSuccess': '安装完成',
'skills.installFailed': '安装失败',
'skills.searchNoResults': '未找到技能',
'skills.marketplaceError': '加载技能市场失败',
'skills.marketplaceHint': '浏览技能市场',
'skills.marketplaceHintDesc': '搜索并安装来自 Skills.sh 的社区技能',
'skills.noReadme': '暂无技能描述',
// ── MCP ─────────────────────────────────────────────────────
'mcp.addServer': '添加服务器',
'mcp.loadingServers': '加载 MCP 服务器中...',
'mcp.serverConfig': 'MCP 服务器配置',
'mcp.noServers': '未配置 MCP 服务器',
'mcp.noServersDesc': '添加 MCP 服务器以扩展 Claude 的能力',
'mcp.arguments': '参数:',
'mcp.environment': '环境变量:',
'mcp.listTab': '列表',
'mcp.jsonTab': 'JSON 配置',
'mcp.editServer': '编辑服务器',
'mcp.serverName': '服务器名称',
'mcp.serverType': '服务器类型',
'mcp.command': '命令',
'mcp.argsLabel': '参数(每行一个)',
'mcp.url': 'URL',
'mcp.headers': '请求头(JSON)',
'mcp.envVars': '环境变量(JSON)',
'mcp.formTab': '表单',
'mcp.jsonEditTab': 'JSON',
'mcp.saveChanges': '保存更改',
// ── Folder picker ───────────────────────────────────────────
'folderPicker.title': '选择项目文件夹',
'folderPicker.loading': '加载中...',
'folderPicker.noSubdirs': '无子目录',
'folderPicker.cancel': '取消',
'folderPicker.select': '选择此文件夹',
// ── Import session dialog ───────────────────────────────────
'import.title': '从 Claude CLI 导入会话',
'import.searchSessions': '搜索会话...',
'import.noSessions': '未找到会话',
'import.import': '导入',
'import.importing': '导入中...',
'import.justNow': '刚刚',
'import.minutesAgo': '{n}分钟前',
'import.hoursAgo': '{n}小时前',
'import.daysAgo': '{n}天前',
'import.messages': '{n} 条消息',
'import.messagesPlural': '{n} 条消息',
// ── Connection status ───────────────────────────────────────
'connection.notInstalled': 'Claude Code 未安装',
'connection.installed': 'Claude Code 已安装',
'connection.version': '版本:{version}',
'connection.installPrompt': '要使用 Claude Code 功能,您需要安装 Claude Code CLI。',
'connection.runCommand': '在终端中运行以下命令:',
'connection.installAuto': '自动安装 Claude Code',
'connection.refresh': '刷新',
'connection.installClaude': '安装 Claude Code',
'connection.connected': '已连接',
'connection.disconnected': '未连接',
'connection.checking': '检测中',
// ── Install wizard ──────────────────────────────────────────
'install.title': '安装 Claude Code',
'install.checkingPrereqs': '检查前置条件...',
'install.alreadyInstalled': 'Claude Code 已安装',
'install.readyToInstall': '准备安装',
'install.installing': '正在安装 Claude Code...',
'install.complete': '安装完成',
'install.failed': '安装失败',
'install.copyLogs': '复制日志',
'install.copied': '已复制',
'install.install': '安装',
'install.cancel': '取消',
'install.retry': '重试',
'install.done': '完成',
'install.recheck': '重新检测',
'install.copy': '复制',
'install.homebrewRequired': '需要先安装 Homebrew',
'install.homebrewDescription': 'Homebrew 是 macOS 的包管理器,安装 Node.js 需要它。',
'install.homebrewSteps': '请按以下步骤操作:',
'install.homebrewStep1': '打开终端(Terminal)',
'install.homebrewStep2': '粘贴上面的命令并按回车',
'install.homebrewStep3': '按提示完成安装',
'install.homebrewStep4': '回到这里点击"重新检测"',
// ── Task list ───────────────────────────────────────────────
'tasks.all': '全部',
'tasks.active': '进行中',
'tasks.done': '已完成',
'tasks.addPlaceholder': '添加任务...',
'tasks.addTask': '添加任务',
'tasks.loading': '加载任务中...',
'tasks.noTasks': '暂无任务',
'tasks.noMatching': '无匹配任务',
// ── Tool call block ─────────────────────────────────────────
'tool.running': '运行中',
'tool.success': '成功',
'tool.error': '错误',
// ── Common ──────────────────────────────────────────────────
'common.cancel': '取消',
'common.save': '保存',
'common.delete': '删除',
'common.loading': '加载中...',
'common.close': '关闭',
'common.enabled': '已启用',
'common.disabled': '已禁用',
// ── Error boundary ────────────────────────────────────────
'error.title': '出错了',
'error.description': '发生了意外错误。您可以重试或重新加载应用。',
'error.showDetails': '显示详情',
'error.hideDetails': '隐藏详情',
'error.tryAgain': '重试',
'error.reloadApp': '重新加载',
// ── Update ─────────────────────────────────────────────────
'update.newVersionAvailable': '有新版本可用',
'update.downloading': '下载中',
'update.restartToUpdate': '重启以更新',
'update.restartNow': '立即重启',
'update.readyToInstall': 'CodePilot v{version} 已就绪 — 重启以完成更新',
'update.installUpdate': '下载并安装',
'update.later': '稍后',
// ── Image Generation ──────────────────────────────────────
'imageGen.toggle': '图片生成',
'imageGen.toggleLabel': 'Image Agent',
'imageGen.toggleTooltip': '切换 Image Agent — AI 自动分析意图,支持单张和批量生图',
'imageGen.generating': '正在生成图片...',
'imageGen.params': '生成参数',
'imageGen.aspectRatio': '画面比例',
'imageGen.resolution': '分辨率',
'imageGen.generate': '生成',
'imageGen.regenerate': '重新生成',
'imageGen.download': '下载',
'imageGen.prompt': '提示词',
'imageGen.model': '模型',
'imageGen.noApiKey': '请先在设置 > 服务商中配置 Gemini API Key',
'imageGen.error': '图片生成失败',
'imageGen.success': '图片生成成功',
'imageGen.referenceImages': '参考图片',
'imageGen.uploadReference': '上传参考图片',
'imageGen.resetChat': '重置对话',
'imageGen.multiTurnHint': '你可以描述需要的修改来调整生成的图片',
'imageGen.settings': '生成设置',
'imageGen.generated': '生成的图片',
'imageGen.confirmTitle': '图片生成',
'imageGen.editPrompt': '编辑提示词',
'imageGen.generateButton': '生成',
'imageGen.retryButton': '重试',
'imageGen.generatingStatus': '正在生成...',
'imageGen.stopButton': '停止',
// ── Batch Image Generation ─────────────────────────────────
'batchImageGen.toggle': '批量生图',
'batchImageGen.toggleTooltip': '切换批量图片生成模式',
'batchImageGen.entryTitle': '批量图片生成',
'batchImageGen.stylePrompt': '风格提示词',
'batchImageGen.stylePromptPlaceholder': '描述所有图片的视觉风格...',
'batchImageGen.uploadDocs': '上传文档',
'batchImageGen.uploadDocsHint': '上传文本/Markdown 文件作为内容来源',
'batchImageGen.count': '图片数量',
'batchImageGen.countAuto': '自动',
'batchImageGen.aspectRatioStrategy': '画面比例',
'batchImageGen.resolution': '分辨率',
'batchImageGen.generatePlan': '生成计划',
'batchImageGen.planning': '规划中...',
'batchImageGen.planPreviewTitle': '生成计划',
'batchImageGen.planSummary': '计划摘要',
'batchImageGen.editPrompt': '编辑提示词',
'batchImageGen.addItem': '添加项目',
'batchImageGen.removeItem': '删除',
'batchImageGen.regeneratePlan': '重新生成计划',
'batchImageGen.confirmAndExecute': '确认并执行',
'batchImageGen.executing': '执行中...',
'batchImageGen.totalProgress': '进度',
'batchImageGen.itemPending': '等待中',
'batchImageGen.itemProcessing': '生成中...',
'batchImageGen.itemCompleted': '完成',
'batchImageGen.itemFailed': '失败',
'batchImageGen.retryFailed': '重试失败项',
'batchImageGen.retryItem': '重试',
'batchImageGen.pause': '暂停',
'batchImageGen.resume': '继续',
'batchImageGen.cancel': '取消',
'batchImageGen.syncToChat': '同步到对话',
'batchImageGen.syncComplete': '已同步到对话',
'batchImageGen.syncMode': '同步模式',
'batchImageGen.syncManual': '手动',
'batchImageGen.syncAutoBatch': '自动批量',
'batchImageGen.completed': '批量生成完成',
'batchImageGen.completedStats': '已生成 {completed}/{total} 张图片',
'batchImageGen.noProvider': '请先在设置中配置文本生成服务商',
'batchImageGen.tags': '标签',
'batchImageGen.sourceRefs': '来源',
'batchImageGen.prompt': '提示词',
'batchImageGen.aspectRatio': '比例',
'batchImageGen.imageSize': '尺寸',
// ── Gallery ─────────────────────────────────────────────────
'gallery.title': '素材库',
'gallery.empty': '暂无生成的图片',
'gallery.emptyHint': '在对话中生成图片后即可在此查看。',
'gallery.filterByTag': '按标签筛选',
'gallery.dateFrom': '开始日期',
'gallery.dateTo': '结束日期',
'gallery.sortNewest': '最新优先',
'gallery.sortOldest': '最早优先',
'gallery.newestFirst': '最新优先',
'gallery.oldestFirst': '最早优先',
'gallery.filters': '筛选',
'gallery.clearFilters': '清除筛选',
'gallery.loadMore': '加载更多',
'gallery.openChat': '打开对话',
'gallery.delete': '删除',
'gallery.confirmDelete': '确认删除?',
'gallery.deleteConfirm': '确定删除这张图片?此操作无法撤销。',
'gallery.tags': '标签',
'gallery.addTag': '添加标签',
'gallery.newTag': '新标签名称',
'gallery.newTagPlaceholder': '新标签名称...',
'gallery.cancel': '取消',
'gallery.removeTag': '移除标签',
'gallery.noTags': '暂无标签',
'gallery.generatedAt': '生成时间',
'gallery.viewDetails': '查看详情',
'gallery.imageDetail': '图片详情',
'gallery.prompt': '提示词',
'gallery.download': '下载',
'gallery.favorites': '收藏',
'gallery.favoritesOnly': '只看收藏',
'gallery.addToFavorites': '添加到收藏',
'gallery.removeFromFavorites': '取消收藏',
// ── Provider: Gemini Image ──────────────────────────────────
'provider.chatProviders': '聊天服务商',
'provider.mediaProviders': '媒体服务商',
'provider.geminiImageDesc': 'Nano Banana Pro — Google Gemini AI 图片生成',
// ── CLI dynamic field labels ──────────────────────────────
'cli.loadingSettings': '加载设置中...',
'cli.field.skipDangerousModePermissionPrompt': '跳过危险模式权限提示',
'cli.field.verbose': '详细日志',
'cli.field.theme': '主题',
'cli.formatError': '无法格式化:无效的 JSON',
// ── Split screen ─────────────────────────────────────────────
'split.splitScreen': '分屏',
'split.closeSplit': '关闭分屏',
'split.splitGroup': '分屏',
'chatList.splitScreen': '分屏',
// ── Telegram (Bridge) ──────────────────────────────────────
'telegram.credentials': 'Bot 凭据',
'telegram.credentialsDesc': '输入您的 Telegram Bot Token 和 Chat ID',
'telegram.botToken': 'Bot Token',
'telegram.chatId': 'Chat ID',
'telegram.chatIdHint': '先向您的 Bot 发送 /start,然后点击「自动检测」填入 Chat ID',
'telegram.detectChatId': '自动检测',
'telegram.chatIdDetected': '检测到 Chat ID:{id}({name})',
'telegram.chatIdDetectFailed': '无法检测 Chat ID。请先向 Bot 发送 /start,然后重试。',
'telegram.verify': '测试连接',
'telegram.verified': '连接验证成功',
'telegram.verifiedAs': '已连接为 @{name}',
'telegram.verifyFailed': '连接失败',
'telegram.enterTokenFirst': '请先输入 Bot Token',
'telegram.setupGuide': '设置指南',
'telegram.step1': '打开 Telegram 搜索 @BotFather',
'telegram.step2': '发送 /newbot 并按提示创建 Bot',
'telegram.step3': '复制 Bot Token 并粘贴到上方',
'telegram.step4': '点击「测试连接」验证 Token 是否有效',
'telegram.step5': '向您的 Bot 发送 /start,然后点击 Chat ID 旁的「自动检测」按钮',
'telegram.step6': '点击「保存」存储凭据',
// ── Feishu (Bridge) ──────────────────────────────────────
'feishu.credentials': '应用凭据',
'feishu.credentialsDesc': '输入您的飞书 App ID 和 App Secret',
'feishu.appId': 'App ID',
'feishu.appSecret': 'App Secret',
'feishu.domain': '平台',
'feishu.domainFeishu': '飞书 (feishu.cn)',
'feishu.domainLark': 'Lark (larksuite.com)',
'feishu.domainHint': '中国大陆选择飞书,海外选择 Lark',
'feishu.verify': '测试连接',
'feishu.verified': '连接验证成功',
'feishu.verifiedAs': '已连接为 {name}',
'feishu.verifyFailed': '连接失败',
'feishu.enterCredentialsFirst': '请先输入 App ID 和 App Secret',
'feishu.allowedUsers': '允许的用户',
'feishu.allowedUsersDesc': '允许使用桥接的 open_id 或 chat_id,逗号分隔',
'feishu.allowedUsersHint': '留空则允许所有用户',
'feishu.groupSettings': '群聊设置',
'feishu.groupSettingsDesc': '控制机器人在群聊中的响应方式',
'feishu.groupPolicy': '群聊策略',
'feishu.groupPolicyOpen': '开放 — 响应所有群消息',
'feishu.groupPolicyAllowlist': '白名单 — 仅指定群组',
'feishu.groupPolicyDisabled': '禁用 — 忽略所有群消息',
'feishu.groupAllowFrom': '允许的群组',
'feishu.groupAllowFromHint': '允许的群组 chat_id,逗号分隔',
'feishu.requireMention': '需要 @提及',
'feishu.requireMentionDesc': '群聊中仅在 @机器人时响应',
'feishu.setupGuide': '设置指南',
'feishu.step1': '前往飞书开放平台 (open.feishu.cn) 创建自建应用',
'feishu.step2': '在应用功能中启用「机器人」能力',
'feishu.step3': '在凭证页面复制 App ID 和 App Secret',
'feishu.step4': '添加事件订阅:im.message.receive_v1',
'feishu.step5': '发布应用版本并在管理后台审批通过',
'feishu.step6': '将凭据粘贴到上方,点击「测试连接」验证',
// ── Settings: Remote Bridge ────────────────────────────────
'settings.bridge': '远程桥接',
'bridge.title': '远程桥接',
'bridge.description': '通过 Telegram、飞书等外部渠道控制 Claude',
'bridge.enabled': '启用远程桥接',
'bridge.enabledDesc': '允许外部消息渠道与 Claude 交互',
'bridge.activeHint': '桥接已激活。外部渠道可以向 Claude 发送任务。',
'bridge.status': '桥接状态',
'bridge.statusConnected': '已连接',
'bridge.statusDisconnected': '未连接',
'bridge.statusStarting': '启动中...',
'bridge.statusStopping': '停止中...',
'bridge.activeBindings': '{count} 个活跃绑定',
'bridge.noBindings': '无活跃绑定',
'bridge.channels': '渠道',
'bridge.channelsDesc': '启用或禁用各消息渠道',
'bridge.telegramChannel': 'Telegram',
'bridge.telegramChannelDesc': '通过 Telegram Bot 接收和回复消息',
'bridge.bindings': '活跃会话',
'bridge.bindingsDesc': '来自外部渠道的当前会话绑定',
'bridge.bindingChat': '对话',
'bridge.bindingChannel': '渠道',
'bridge.bindingCreated': '创建时间',
'bridge.bindingStatus': '状态',
'bridge.noActiveBindings': '无活跃会话绑定',
'bridge.defaults': '默认设置',
'bridge.defaultsDesc': '桥接发起会话的默认设置',
'bridge.defaultWorkDir': '工作目录',
'bridge.defaultWorkDirHint': '桥接会话的默认项目文件夹',
'bridge.defaultModel': '模型',
'bridge.defaultModelHint': '桥接会话的默认模型',
'bridge.browse': '浏览',
'bridge.start': '启动桥接',
'bridge.stop': '停止桥接',
'bridge.starting': '启动中...',
'bridge.stopping': '停止中...',
'bridge.autoStart': '自动启动桥接',
'bridge.autoStartDesc': '应用启动时自动启动桥接',
'bridge.adapterRunning': '运行中',
'bridge.adapterStopped': '已停止',
'bridge.adapterLastMessage': '最近消息',
'bridge.adapterLastError': '最近错误',
'bridge.adapters': '适配器状态',
'bridge.adaptersDesc': '各渠道适配器的实时状态',
'bridge.telegramSettings': 'Telegram 设置',
'bridge.telegramSettingsDesc': '配置桥接使用的 Telegram Bot 凭据',
'bridge.allowedUsers': '允许的用户',
'bridge.allowedUsersDesc': '允许使用桥接的 Telegram 用户 ID,逗号分隔',
'bridge.allowedUsersHint': '留空则仅允许上方配置的 Chat ID',
'bridge.feishuChannel': '飞书',
'bridge.feishuChannelDesc': '通过飞书机器人接收和回复消息',
'bridge.feishuSettings': '飞书设置',
'bridge.feishuSettingsDesc': '配置桥接使用的飞书应用凭据',
'bridge.discordChannel': 'Discord',
'bridge.discordChannelDesc': '通过 Discord Bot 接收和回复消息',
'bridge.discordSettings': 'Discord 设置',
'bridge.discordSettingsDesc': '配置桥接使用的 Discord Bot 凭据',
// ── Settings: Discord Bridge ─────────────────────────────────
'discord.credentials': 'Bot 凭据',
'discord.credentialsDesc': '输入您的 Discord Bot Token',
'discord.botToken': 'Bot Token',
'discord.verify': '测试连接',
'discord.verified': '连接验证成功',
'discord.verifiedAs': '已连接为 {name}',
'discord.verifyFailed': '连接失败',
'discord.enterTokenFirst': '请先输入 Bot Token',
'discord.allowedUsers': '授权设置',
'discord.allowedUsersDesc': '控制哪些用户和频道可以与 Bot 交互',
'discord.allowedUserIds': '允许的用户 ID',
'discord.allowedUsersHint': 'Discord 用户 ID,多个用逗号分隔。用户和频道均为空时拒绝所有请求。',
'discord.allowedChannelIds': '允许的频道 ID',
'discord.allowedChannelsHint': '允许的 Discord 频道 ID,多个用逗号分隔。',
'discord.guildSettings': '服务器和群组设置',
'discord.guildSettingsDesc': '控制 Bot 在 Discord 服务器中的响应方式',
'discord.allowedGuilds': '允许的服务器 (Guild) ID',
'discord.allowedGuildsHint': '服务器 ID,多个用逗号分隔。留空则允许所有服务器。',
'discord.groupPolicy': '服务器消息策略',
'discord.groupPolicyOpen': '开放 — 响应所有服务器频道消息',
'discord.groupPolicyDisabled': '禁用 — 忽略所有服务器消息(仅私信)',
'discord.requireMention': '需要 @提及',
'discord.requireMentionDesc': '服务器中仅在 @机器人时响应',
'discord.streamPreview': '流式预览',
'discord.streamPreviewDesc': '通过编辑消息实时显示响应预览',
'discord.setupGuide': '配置指南',
'discord.setupBotTitle': '创建 Discord Bot',
'discord.step1': '前往 Discord 开发者门户 (discord.com/developers),点击「New Application」创建应用',
'discord.step2': '进入左侧「Bot」页面,点击「Add Bot」创建机器人',
'discord.step3': '向下滚动到「Privileged Gateway Intents」,开启「MESSAGE CONTENT INTENT」开关',
'discord.step4': '点击「Reset Token」复制 Bot Token,粘贴到上方「Bot 凭据」中保存',
'discord.step5': '前往「OAuth2 → URL Generator」,Scopes 勾选「bot」,Bot Permissions 勾选「Send Messages」和「Read Message History」',
'discord.step6': '复制生成的邀请链接,在浏览器中打开,将 Bot 邀请到你的服务器',
'discord.step7': '回到上方点击「测试连接」,确认显示 Bot 名称即配置成功',
'discord.setupIdTitle': '获取 ID(需开启开发者模式)',
'discord.stepDevMode': '打开 Discord 客户端 →「用户设置」→「高级」→ 开启「开发者模式」',
'discord.stepUserId': '获取用户 ID:右键点击自己的头像或用户名 →「复制用户 ID」',
'discord.stepChannelId': '获取频道 ID:右键点击左侧频道名称 →「复制频道 ID」',
'discord.stepGuildId': '获取服务器 ID:右键点击左上角服务器名称 →「复制服务器 ID」',
};
export default zh;