diff --git a/apps/desktop/src/shared/constants/i18n.ts b/apps/desktop/src/shared/constants/i18n.ts index 5f4ebbde38..7bba625854 100644 --- a/apps/desktop/src/shared/constants/i18n.ts +++ b/apps/desktop/src/shared/constants/i18n.ts @@ -3,11 +3,12 @@ * Available languages and display labels */ -export type SupportedLanguage = 'en' | 'fr'; +export type SupportedLanguage = 'en' | 'fr' | 'zh'; export const AVAILABLE_LANGUAGES = [ { value: 'en' as const, label: 'English', nativeLabel: 'English' }, - { value: 'fr' as const, label: 'French', nativeLabel: 'Français' } + { value: 'fr' as const, label: 'French', nativeLabel: 'Français' }, + { value: 'zh' as const, label: 'Chinese', nativeLabel: '中文' } ] as const; export const DEFAULT_LANGUAGE: SupportedLanguage = 'en'; diff --git a/apps/desktop/src/shared/i18n/index.ts b/apps/desktop/src/shared/i18n/index.ts index 095b0b1188..9d1e5d6a02 100644 --- a/apps/desktop/src/shared/i18n/index.ts +++ b/apps/desktop/src/shared/i18n/index.ts @@ -27,6 +27,19 @@ import frTaskReview from './locales/fr/taskReview.json'; import frTerminal from './locales/fr/terminal.json'; import frErrors from './locales/fr/errors.json'; +// Import Chinese translation resources +import zhCommon from './locales/zh/common.json'; +import zhNavigation from './locales/zh/navigation.json'; +import zhSettings from './locales/zh/settings.json'; +import zhTasks from './locales/zh/tasks.json'; +import zhWelcome from './locales/zh/welcome.json'; +import zhOnboarding from './locales/zh/onboarding.json'; +import zhDialogs from './locales/zh/dialogs.json'; +import zhGitlab from './locales/zh/gitlab.json'; +import zhTaskReview from './locales/zh/taskReview.json'; +import zhTerminal from './locales/zh/terminal.json'; +import zhErrors from './locales/zh/errors.json'; + export const defaultNS = 'common'; export const resources = { @@ -55,6 +68,19 @@ export const resources = { taskReview: frTaskReview, terminal: frTerminal, errors: frErrors + }, + zh: { + common: zhCommon, + navigation: zhNavigation, + settings: zhSettings, + tasks: zhTasks, + welcome: zhWelcome, + onboarding: zhOnboarding, + dialogs: zhDialogs, + gitlab: zhGitlab, + taskReview: zhTaskReview, + terminal: zhTerminal, + errors: zhErrors } } as const; diff --git a/apps/desktop/src/shared/i18n/locales/zh/common.json b/apps/desktop/src/shared/i18n/locales/zh/common.json new file mode 100644 index 0000000000..d44bcc185a --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/common.json @@ -0,0 +1,958 @@ +{ + "competitorAnalysis": { + "addCompetitor": "添加竞争对手", + "manualBadge": "手动", + "noCompetitorsYet": "尚未添加竞争对手", + "addCompetitorToStart": "添加竞争对手以开始", + "analysisResults": "竞争对手分析结果", + "analysisDescription": "分析了 {{count}} 个竞争对手以识别市场差距和机会", + "visit": "访问", + "identifiedPainPoints": "已识别的痛点 ({{count}})", + "noPainPointsIdentified": "未识别到痛点", + "source": "来源:", + "frequency": "频率:", + "opportunity": "机会:", + "marketInsightsSummary": "市场洞察摘要", + "topPainPoints": "主要痛点:", + "differentiatorOpportunities": "差异化机会:", + "marketTrends": "市场趋势:" + }, + "projectTab": { + "settings": "项目设置", + "showArchived": "显示已归档", + "hideArchived": "隐藏已归档", + "showArchivedTasks": "显示已归档任务", + "hideArchivedTasks": "隐藏已归档任务", + "closeTab": "关闭标签页", + "closeTabAriaLabel": "关闭标签页(从应用中移除项目)", + "addProjectAriaLabel": "添加项目" + }, + "accessibility": { + "deleteFeatureAriaLabel": "删除功能", + "archiveFeatureAriaLabel": "归档功能", + "closeFeatureDetailsAriaLabel": "关闭功能详情", + "regenerateRoadmapAriaLabel": "重新生成路线图", + "repositoryOwnerAriaLabel": "仓库所有者", + "repositoryVisibilityAriaLabel": "仓库可见性", + "opensInNewWindow": "在新窗口中打开", + "visitExternalLink": "访问 {{name}}(在新窗口中打开)", + "upgradeSubscriptionAriaLabel": "升级订阅(在新窗口中打开)", + "learnMoreAriaLabel": "了解更多(在新窗口中打开)", + "toggleFolder": "切换 {{name}} 文件夹", + "expandFolder": "展开 {{name}} 文件夹", + "collapseFolder": "折叠 {{name}} 文件夹", + "newConversationAriaLabel": "新对话", + "saveEditAriaLabel": "保存", + "cancelEditAriaLabel": "取消", + "moreOptionsAriaLabel": "更多选项", + "closePanelAriaLabel": "关闭面板", + "openOnGitHubAriaLabel": "在 GitHub 上打开(在新窗口中打开)", + "openOnGitLabAriaLabel": "在 GitLab 上打开(在新窗口中打开)", + "toggleShowArchivedAriaLabel": "切换显示已归档任务", + "clearSelectionAriaLabel": "清除选择", + "selectAllAriaLabel": "全选", + "showDismissedAriaLabel": "显示已忽略", + "hideDismissedAriaLabel": "隐藏已忽略", + "configureAriaLabel": "配置", + "addMoreAriaLabel": "添加更多", + "dismissAllAriaLabel": "忽略所有创意", + "regenerateIdeasAriaLabel": "重新生成创意", + "dismissAriaLabel": "忽略", + "browseFilesAriaLabel": "浏览文件", + "renameAriaLabel": "重命名", + "deleteAriaLabel": "删除", + "refreshAriaLabel": "刷新", + "expandAriaLabel": "展开", + "collapseAriaLabel": "折叠", + "selectIdeaAriaLabel": "选择创意:{{title}}", + "convertToTaskAriaLabel": "转换为任务", + "goToTaskAriaLabel": "转到任务", + "reAuthenticateProfileAriaLabel": "重新验证个人资料", + "hideTokenEntryAriaLabel": "隐藏令牌输入", + "enterTokenManuallyAriaLabel": "手动输入令牌", + "renameProfileAriaLabel": "重命名个人资料", + "deleteProfileAriaLabel": "删除个人资料" + }, + "buttons": { + "save": "保存", + "cancel": "取消", + "skip": "跳过", + "next": "下一步", + "back": "返回", + "close": "关闭", + "initialize": "初始化", + "delete": "删除", + "confirm": "确认", + "retry": "重试", + "create": "创建", + "createPR": "创建 PR", + "openPR": "打开 PR", + "open": "打开", + "start": "开始", + "stop": "停止", + "refresh": "刷新", + "refreshing": "刷新中...", + "merge": "合并", + "discard": "放弃", + "switch": "切换", + "add": "添加", + "apply": "应用", + "gotIt": "知道了", + "continue": "继续", + "saving": "保存中...", + "deleting": "删除中..." + }, + "actions": { + "save": "保存", + "apply": "应用", + "delete": "删除", + "settings": "设置" + }, + "os": { + "windows": "Windows", + "macos": "macOS", + "linux": "Linux", + "unknown": "您的操作系统" + }, + "labels": { + "loading": "加载中...", + "error": "错误", + "success": "成功", + "initializing": "初始化中...", + "saving": "保存中...", + "creating": "创建中...", + "noData": "无数据", + "optional": "可选", + "required": "必填", + "dismiss": "忽略", + "important": "重要", + "orphaned": "(孤立的)" + }, + "selection": { + "select": "选择", + "done": "完成", + "selected": "已选择 {{count}} 项", + "selectAll": "全选", + "clearSelection": "清除选择", + "deleteSelected": "删除已选", + "archiveSelected": "归档已选", + "selectedOfTotal": "已选 {{selected}}/{{total}}" + }, + "time": { + "justNow": "刚刚", + "minutesAgo": "{{count}} 分钟前", + "hoursAgo": "{{count}} 小时前", + "daysAgo": "{{count}} 天前" + }, + "errors": { + "generic": "发生错误", + "unknownError": "发生未知错误", + "operationFailed": "操作失败", + "networkError": "网络错误", + "notFound": "未找到", + "unauthorized": "未授权", + "bulkDeletePartialFailure": "部分工作树无法删除:", + "taskNotFoundForWorktree": "未找到任务对应的工作树:{{specName}}", + "failedToDeleteTaskWorktree": "删除任务工作树失败:{{specName}}", + "terminalWorktreeNotFound": "未找到终端工作树:{{name}}", + "failedToDeleteTerminalWorktree": "删除终端工作树失败:{{name}}" + }, + "worktrees": { + "deleteSuccess": "工作树 '{{branch}}' 已成功删除", + "bulkDeleteSuccess": "已成功删除 {{count}} 个工作树", + "bulkDeleteSuccess_plural": "已成功删除 {{count}} 个工作树" + }, + "notification": { + "accountSwitched": "账户已切换", + "swapFrom": "从", + "swapTo": "切换到", + "swapReason": "({{reason}} 切换)" + }, + "rateLimit": { + "title": "速率限制", + "resetsAt": "{{time}} 后重置", + "hitLimit": "{{source}} 达到使用限制", + "clickToManage": "点击管理 →", + "modalTitle": "Claude Code 使用限制已达到", + "modalDescription": "您已达到本期 Claude Code 使用限制。", + "profile": "个人资料:{{name}}", + "autoSwitching": "自动切换到 {{name}}", + "autoSwitchingDescription": "Claude 将自动使用您的其他账户重新启动", + "resetsTime": "{{time}} 后重置", + "usageRestored": "您的使用量将在此时恢复", + "switchAccount": "切换 Claude 账户", + "useAnotherAccount": "使用其他账户", + "recommended": "推荐:{{name}} 有更多可用容量。", + "otherSubscriptions": "您已配置其他 Claude 订阅。切换以继续工作:", + "selectAccount": "选择账户...", + "switching": "切换中...", + "addNewAccount": "添加新账户...", + "addAnotherSubscription": "添加另一个 Claude 订阅,以便在达到速率限制时自动切换。", + "addAnotherAccount": "添加其他账户:", + "connectAccount": "连接 Claude 账户:", + "accountNamePlaceholder": "账户名称(例如:工作、个人)", + "willOpenLogin": "这将打开 Claude 登录以验证新账户。", + "autoSwitchOnRateLimit": "达到速率限制时自动切换", + "upgradeTitle": "升级以获取更多用量", + "upgradeDescription": "升级您的 Claude 订阅以获得更高的使用限制。", + "upgradeSubscription": "升级订阅", + "sources": { + "changelog": "更新日志", + "task": "任务", + "roadmap": "路线图", + "ideation": "创意", + "titleGenerator": "标题生成器", + "claude": "Claude" + }, + "toast": { + "authenticating": "正在验证 \"{{profileName}}\"", + "checkTerminal": "查看侧边栏中的代理终端部分以完成 OAuth 登录。", + "authStartFailed": "启动验证失败", + "addProfileFailed": "添加个人资料失败", + "tryAgain": "请重试。" + }, + "sdk": { + "title": "Claude Code 速率限制", + "interrupted": "{{source}} 因使用限制而中断。", + "proactiveSwap": "✓ 主动切换", + "reactiveSwap": "⚡ 被动切换", + "proactiveSwapDesc": "在达到速率限制前自动从 {{from}} 切换到 {{to}}。", + "reactiveSwapDesc": "在 {{from}} 达到速率限制。自动切换到 {{to}} 并重新启动。", + "continueWithoutInterruption": "您的工作持续未中断。", + "rateLimitReached": "达到速率限制", + "operationStopped": "操作已停止,因为 {{account}} 达到了使用限制。", + "switchBelow": "在下方切换到其他账户以继续。", + "addAccountToContinue": "在上方添加另一个 Claude 账户以继续工作,或等待限制重置。", + "upgradeToProButton": "升级到 Pro 以获取更高限制", + "resetsLabel": "{{time}} 后重置", + "weeklyLimit": "每周限制 - 约一周后重置", + "sessionLimit": "会话限制 - 几小时后重置", + "switchAccountRetry": "切换账户并重试", + "retrying": "重试中...", + "retry": "重试", + "autoSwitchRetryLabel": "自动切换并在速率限制时重试", + "add": "添加", + "whatHappened": "发生了什么:", + "whatHappenedDesc": "{{source}} 操作已停止,因为您的 Claude 账户({{account}})达到了使用限制。", + "switchRetryOrAdd": "您可以切换到其他账户并重试,或在上方添加更多账户。", + "addOrWait": "在上方添加另一个 Claude 账户以继续工作,或等待限制重置。", + "close": "关闭" + } + }, + "prReview": { + "reviewing": "审核中", + "reviewed": "已审核", + "approved": "已批准", + "changesRequested": "已请求更改", + "commented": "已评论", + "readyForFollowup": "准备跟进", + "readyToMerge": "准备合并", + "pendingPost": "待发布", + "posted": "已发布", + "notReviewed": "未审核", + "allStatuses": "所有状态", + "allContributors": "所有贡献者", + "searchPlaceholder": "搜索 PR...", + "contributors": "贡献者", + "contributorsSelected": "贡献者({{count}})", + "status": "状态", + "filters": "筛选", + "clearFilters": "清除", + "clearSearch": "清除搜索", + "searchContributors": "搜索贡献者...", + "selectedCount": "已选 {{count}} 项", + "noResultsFound": "未找到结果", + "reset": "重置", + "sort": { + "label": "排序", + "newest": "最新", + "oldest": "最旧", + "largest": "最大" + }, + "pullRequests": "拉取请求", + "open": "打开", + "selectPRToView": "选择拉取请求以查看详情", + "loadingPRs": "加载拉取请求中...", + "noOpenPRs": "没有打开的拉取请求", + "notConnected": "GitHub 未连接", + "connectPrompt": "连接您的 GitHub 账户以查看和审核拉取请求。", + "openSettings": "打开设置", + "runAIReview": "运行 AI 审核", + "reviewStarted": "审核已开始", + "analysisInProgress": "AI 分析进行中...", + "analysisComplete": "分析完成({{count}} 项发现)", + "findingsPostedToGitHub": "发现已发布到 GitHub", + "newCommits": "{{count}} 个新提交", + "newCommit": "{{count}} 个新提交", + "runFollowup": "运行跟进", + "aiReviewInProgress": "AI 审核进行中", + "waitingForChanges": "等待更改", + "reviewComplete": "审核完成", + "reviewStatus": "审核状态", + "files": "文件", + "filesChanged": "{{count}} 个文件已更改", + "clickToViewFiles": "点击查看已更改文件", + "loadingFiles": "加载文件...", + "noFilesAvailable": "文件列表不可用", + "posting": "发布中...", + "postingApproval": "发布批准中...", + "postFindings": "发布 {{count}} 项发现", + "postFindings_plural": "发布 {{count}} 项发现", + "approve": "批准", + "merge": "合并", + "mergeViaGitHub": "通过 GitHub CLI 合并。如果分支保护规则要求额外审核或检查,可能失败。", + "autoApprovePR": "批准 PR", + "suggestions": "{{count}} 条建议", + "postedFindings": "已发布 {{count}} 项发现", + "postedFindings_plural": "已发布 {{count}} 项发现", + "resolved": "{{count}} 已解决", + "resolved_plural": "{{count}} 已解决", + "stillOpen": "{{count}} 仍打开", + "stillOpen_plural": "{{count}} 仍打开", + "newIssue": "{{count}} 个新问题", + "newIssue_plural": "{{count}} 个新问题", + "reviewFailed": "审核失败", + "externalReviewDetected": "检测到外部审核", + "reviewStartedExternally": "此审核从其他会话启动", + "description": "描述", + "noDescription": "未提供描述。", + "followupReviewDetails": "跟进审核详情", + "aiAnalysisResults": "AI 分析结果", + "cancel": "取消", + "previousReview": "之前的审核({{count}} 项发现)", + "findingsPosted": "已发布 {{count}} 项", + "followupInProgress": "跟进分析进行中...", + "severity": { + "critical": "阻止级", + "high": "必需", + "medium": "推荐", + "low": "建议", + "criticalDesc": "必须修复", + "highDesc": "应该修复", + "mediumDesc": "提高质量", + "lowDesc": "考虑" + }, + "category": { + "security": "安全", + "logic": "逻辑", + "quality": "质量", + "performance": "性能", + "style": "风格", + "documentation": "文档", + "testing": "测试", + "other": "其他" + }, + "state": { + "open": "打开", + "closed": "关闭", + "merged": "已合并" + }, + "selectCriticalHigh": "选择阻止/必需({{count}})", + "selectAll": "全选", + "clear": "清除", + "noIssuesFound": "未发现问题!代码看起来不错。", + "allFindingsPosted": "所有发现已发布到 GitHub", + "findingsPostedCount": "{{count}} 项发现已发布到 GitHub", + "findingsPostedCount_plural": "{{count}} 项发现已发布到 GitHub", + "selectedOfTotal": "已选 {{selected}}/{{total}}", + "suggestedFix": "建议修复:", + "runAIReviewDesc": "运行 AI 审核以分析此 PR", + "newCommitsSinceFollowup": "自跟进以来有 {{count}} 个新提交。运行另一次跟进审核。", + "newCommitsSinceFollowup_plural": "自跟进以来有 {{count}} 个新提交。运行另一次跟进审核。", + "allIssuesResolved": "所有 {{count}} 个问题已解决。此 PR 可以合并。", + "allIssuesResolved_plural": "所有 {{count}} 个问题已解决。此 PR 可以合并。", + "nonBlockingSuggestions": "{{resolved}} 已解决。{{suggestions}} 条非阻止建议仍存在。", + "nonBlockingSuggestions_plural": "{{resolved}} 已解决。{{suggestions}} 条非阻止建议仍存在。", + "blockingIssues": "阻止性问题", + "blockingIssuesDesc": "{{resolved}} 已解决,{{unresolved}} 个阻止性问题仍打开。", + "blockingIssuesDesc_plural": "{{resolved}} 已解决,{{unresolved}} 个阻止性问题仍打开。", + "newCommitsSinceReview": "自审核以来有 {{count}} 个新提交。运行跟进以检查问题是否已解决。", + "newCommitsSinceReview_plural": "自审核以来有 {{count}} 个新提交。运行跟进以检查问题是否已解决。", + "noBlockingIssues": "未发现阻止性问题。此 PR 可以合并。", + "findingsPostedWaiting": "已发布 {{count}} 项发现。等待贡献者解决问题。", + "findingsPostedWaiting_plural": "已发布 {{count}} 项发现。等待贡献者解决问题。", + "findingsPostedNoBlockers": "已发布 {{count}} 项发现。没有剩余阻止性问题。", + "findingsPostedNoBlockers_plural": "已发布 {{count}} 项发现。没有剩余阻止性问题。", + "needsAttention": "需要关注", + "findingsNeedPosting": "{{count}} 项发现需要发布到 GitHub。", + "findingsNeedPosting_plural": "{{count}} 项发现需要发布到 GitHub。", + "findingsFoundSelectPost": "发现 {{count}} 项。选择并发布到 GitHub。", + "findingsFoundSelectPost_plural": "发现 {{count}} 项。选择并发布到 GitHub。", + "reviewLogs": "审核日志", + "followup": "跟进", + "initial": "初始", + "rerunFollowup": "重新运行跟进审核", + "retryReview": "重试审核", + "rerunReview": "重新运行审核", + "updateBranch": "更新分支", + "updatingBranch": "更新中...", + "branchUpdated": "分支已更新", + "branchUpdateFailed": "更新分支失败", + "allPRsLoaded": "所有 PR 已加载", + "maxPRsShown": "显示前 100 个 PR", + "loadMore": "加载更多", + "loadingMore": "加载中...", + "workflowsAwaitingApproval": "{{count}} 个工作流等待批准", + "workflowsAwaitingApproval_plural": "{{count}} 个工作流等待批准", + "blockedByWorkflows": "被阻止", + "workflowsAwaitingDescription": "此 PR 来自 fork,需要在工作流批准后才能运行 CI 检查。继续前请批准工作流。", + "viewOnGitHub": "查看", + "approveWorkflow": "批准", + "approveAllWorkflows": "批准所有工作流", + "postCleanReview": "发布清洁审核", + "postingCleanReview": "发布中...", + "cleanReviewPosted": "清洁审核已发布", + "cleanReviewMessageTitle": "## ✅ Aperant PR 审核 - 通过", + "cleanReviewMessageStatus": "**状态:** 所有代码都很好", + "cleanReviewMessageFooter": "*此自动审核未发现问题。由 Aperant 生成。*", + "failedPostCleanReview": "发布清洁审核失败", + "viewErrorDetails": "查看详情", + "hideErrorDetails": "隐藏详情", + "postBlockedStatus": "发布状态", + "postingBlockedStatus": "发布中...", + "blockedStatusPosted": "状态已发布到 PR", + "blockedStatusMessageTitle": "## 🤖 Aperant PR 审核", + "blockedStatusMessageFooter": "*此审核发现必须解决的阻止性问题。由 Aperant 生成。*", + "failedPostBlockedStatus": "发布阻止状态失败", + "branchSynced": "分支已同步(来自基础分支的 {{count}} 个提交)", + "branchSynced_plural": "分支已同步(来自基础分支的 {{count}} 个提交)", + "newCommitsOverlap": "{{count}} 个新提交({{files}} 个发现文件被修改)", + "newCommitsOverlap_plural": "{{count}} 个新提交({{files}} 个发现文件被修改)", + "newCommitsNoOverlap": "{{count}} 个新提交(与发现无重叠)", + "newCommitsNoOverlap_plural": "{{count}} 个新提交(与发现无重叠)", + "verifyChanges": "验证更改", + "verifyAnyway": "验证", + "runFollowupAnyway": "即使没有文件重叠也运行跟进验证", + "disputed": "有争议", + "disputedByValidator": "被验证器争议({{count}})", + "crossValidatedBy": "被 {{count}} 个代理确认", + "disputedSectionHint": "这些发现由专业人员报告,但被验证器争议。您仍可以选择并发布它们。", + "logs": { + "agentActivity": "代理活动", + "showMore": "显示另外 {{count}} 项", + "hideMore": "隐藏另外 {{count}} 项" + } + }, + "downloads": { + "toggleExpand": "切换下载详情", + "downloading": "正在下载 {{count}} 个模型", + "downloading_plural": "正在下载 {{count}} 个模型", + "complete": "{{count}} 下载完成", + "complete_plural": "{{count}} 下载完成", + "failed": "{{count}} 下载失败", + "failed_plural": "{{count}} 下载失败", + "clearAll": "清除所有已完成下载", + "done": "完成", + "failedLabel": "失败", + "starting": "启动中..." + }, + "insights": { + "suggestedTask": "建议任务", + "creating": "创建中...", + "taskCreated": "任务已创建", + "createTask": "创建任务", + "chatHistory": "聊天历史", + "archive": "归档", + "unarchive": "取消归档", + "archiveSelected": "归档已选", + "showArchived": "显示已归档", + "hideArchived": "隐藏已归档", + "bulkDeleteTitle": "删除对话", + "bulkDeleteDescription": "您确定要删除 {{count}} 个对话吗?此操作无法撤销。", + "bulkDeleteConfirm": "删除 {{count}} 个对话", + "noConversations": "没有对话", + "archived": "已归档", + "conversationsToDelete": "要删除的对话", + "archiveConfirmDescription": "您确定要归档所选对话吗?", + "archiveConfirmTitle": "归档对话", + "archiveConfirmButton": "归档 {{count}} 个对话", + "deleteTitle": "删除对话", + "deleteDescription": "您确定要删除此对话吗?此操作无法撤销。", + "selectMode": "选择", + "exitSelectMode": "完成", + "today": "今天", + "yesterday": "昨天", + "daysAgo": "{{count}} 天前", + "messageCount": "{{count}} 条消息", + "messageCount_other": "{{count}} 条消息", + "images": { + "pasteHint": "粘贴图片或截图", + "dropHint": "拖放图片到这里", + "screenshotButton": "附加截图", + "removeImage": "移除图片", + "imageCount": "已附加 {{count}} 张图片", + "imageCount_plural": "已附加 {{count}} 张图片", + "maxImagesReached": "已达到最大图片数量", + "invalidType": "无效的文件类型。请使用 PNG、JPEG、GIF 或 WebP。", + "processFailed": "处理图片失败", + "dragOver": "拖放图片以附加", + "analysisUnsupported": "注意:图片分析尚不支持。图片已存储供参考,但无法被模型分析。", + "screenshotTooLarge": "截图太大({{size}}MB)。最大大小为 {{max}}MB。考虑捕获更小的区域。", + "notAnalyzed": "图片已存储供参考,但未被模型分析。" + } + }, + "ideation": { + "converting": "转换中...", + "convertToTask": "转换为自动构建任务", + "dismissIdea": "忽略创意", + "description": "描述", + "rationale": "理由", + "goToTask": "转到任务", + "conversionFailed": "转换失败", + "conversionFailedDescription": "将创意转换为任务失败", + "conversionError": "转换错误", + "conversionErrorDescription": "转换创意时发生错误" + }, + "issues": { + "loadingMore": "加载更多...", + "scrollForMore": "滚动加载更多", + "allLoaded": "所有问题已加载" + }, + "usage": { + "dataUnavailable": "使用数据不可用", + "dataUnavailableDescription": "此提供商的用量监控端点不可用或不支持。", + "activeAccount": "活跃账户", + "usageAlert": "用量警报", + "accountExceedsThreshold": "账户用量超过 90% 阈值", + "authentication": "身份验证", + "authenticationAriaLabel": "身份验证:{{provider}}", + "authenticationDetails": "身份验证详情", + "apiProfile": "API 个人资料", + "apiKey": "API 密钥", + "oauth": "OAuth", + "codex": "Codex", + "codexSubscription": "Codex 订阅", + "claudeCode": "Claude Code", + "claudeCodeSubscription": "Claude Code 订阅", + "subscription": "订阅", + "provider": "提供商", + "providerAnthropic": "Anthropic", + "providerZai": "Z.AI", + "providerZhipu": "ZHIPU AI", + "crossProvider": "跨提供商", + "crossProviderConfig": "跨提供商", + "crossProviderUsage": "跨提供商用量", + "crossProviderActive": "跨提供商活跃", + "providerOpenRouter": "OpenRouter", + "providerUnknown": "未知", + "providerOpenAI": "OpenAI", + "providerGoogle": "Google AI", + "providerMistral": "Mistral", + "providerGroq": "Groq", + "providerXai": "xAI", + "providerBedrock": "AWS Bedrock", + "providerAzure": "Azure OpenAI", + "providerOllama": "Ollama", + "providerCustomEndpoint": "自定义端点", + "billingSubscription": "订阅", + "billingPayPerUse": "按量付费", + "unlimited": "无限", + "unlimitedApiKey": "无限(API 密钥)", + "noUsageMonitoring": "此提供商的用量监控不可用", + "subscriptionBadge": "订阅", + "subscriptionLimitsApply": "适用速率限制", + "subscriptionMonitoringComingSoon": "此订阅账户有速率限制,但此提供商的用量监控尚未可用。", + "queuePosition": "队列位置", + "inUse": "使用中", + "noAccount": "无账户", + "noAccountDescription": "在设置中添加账户以开始", + "accountName": "账户", + "profile": "个人资料", + "id": "ID", + "created": "已创建", + "apiEndpoint": "API 端点", + "sessionQuota": "会话配额", + "notAvailable": "不可用", + "usageStatusAriaLabel": "用量状态", + "usageBreakdown": "用量明细", + "used": "已使用", + "loading": "加载中...", + "sessionDefault": "会话", + "weeklyDefault": "每周", + "resetsInHours": "{{hours}} 小时 {{minutes}} 分钟后重置", + "resetsInDays": "{{days}} 天 {{hours}} 小时后重置", + "window5Hour": "5 小时窗口", + "window7Day": "7 天窗口", + "window5HoursQuota": "5 小时配额", + "windowMonthlyToolsQuota": "每月工具配额", + "otherAccounts": "其他账户", + "next": "下一个", + "weeklyLimitReached": "达到每周限制", + "sessionLimitReached": "达到会话限制", + "notAuthenticated": "未验证", + "needsReauth": "需要重新验证", + "reauthRequired": "需要重新验证", + "reauthRequiredDescription": "您的会话已过期。重新验证以查看用量并继续使用此账户。", + "reauthButton": "重新验证", + "clickToOpenSettings": "点击打开设置 →", + "sessionShort": "5 小时会话用量", + "weeklyShort": "7 天每周用量", + "swap": "切换" + }, + "oauth": { + "enterCode": "手动代码输入(备用)", + "enterCodeDescription": "仅在浏览器未自动重定向时才需要此对话框。如果验证已在浏览器中完成,您可以关闭此对话框。", + "fallbackNote": "仅在浏览器中看到\"将此粘贴到 Claude Code\"页面时使用。", + "step1": "在浏览器中完成授权", + "step2": "如果看到代码页面,请复制显示的代码", + "step3": "在下方粘贴代码并点击提交", + "codeLabel": "授权代码", + "codePlaceholder": "在此粘贴您的代码(仅在需要时)...", + "codeHint": "代码是一个长字符串,仅在自动重定向失败时显示", + "submit": "提交", + "submitting": "提交中...", + "codeSubmitted": "代码已提交", + "codeSubmittedDescription": "验证应该很快完成。请检查终端以确认。", + "codeSubmitFailed": "提交代码失败", + "codeSubmitFailedDescription": "请重试或将代码手动复制到终端。", + "authenticateTitle": "使用 Claude 验证", + "authenticateDescription": "Aperant 需要 Claude AI 验证以启用 AI 功能,如路线图生成、任务自动化和创意。", + "authenticateTerminalInfo": "这将打开一个带有 Claude CLI 的终端,您可以在其中进行验证。您的凭据被安全存储,有效期为 1 年。", + "completeAuthTitle": "完成验证", + "terminalOpened": "终端窗口已打开,其中包含 Claude CLI。", + "completeStepsTitle": "在终端中完成这些步骤:", + "stepTypeLogin": "输入 /login 并按回车", + "stepBrowserOpen": "您的浏览器将打开以进行 Claude 验证", + "stepCompleteOAuth": "在浏览器中完成 OAuth 流程", + "stepReturnAndVerify": "返回此处并点击 验证验证", + "verifyAuth": "验证验证", + "verifyingAuth": "验证中...", + "checkingCredentials": "正在检查您的 Claude 凭据。", + "successTitle": "验证成功!", + "connectedAs": "已连接为 {{email}}", + "credentialsSaved": "您的 Claude 凭据已保存", + "canUseFeatures": "您现在可以使用所有 Aperant AI 功能", + "authFailed": "验证失败", + "skipForNow": "暂时跳过", + "manualTokenEntry": "手动令牌输入", + "tokenCommandHint": "运行 claude setup-token 获取您的令牌", + "emailOptionalPlaceholder": "邮箱(可选,用于显示)", + "saveToken": "保存令牌", + "accountNamePlaceholder": "账户名称(例如:工作、个人)", + "hasAuthenticatedAccount": "您至少有一个已验证的 Claude 账户。您可以继续下一步。", + "authNotDetected": "未检测到验证。请先在终端中完成 /login。", + "noProfileSelected": "未选择要验证的个人资料", + "alerts": { + "profileCreatedAuthFailed": "个人资料已创建,但启动验证失败:{{error}}", + "authPrepareFailed": "准备验证失败:{{error}}", + "authStartFailedMessage": "启动验证失败。请重试。" + }, + "badges": { + "default": "默认", + "active": "活跃", + "authenticated": "已验证", + "needsAuth": "需要验证" + }, + "buttons": { + "authenticate": "验证", + "setActive": "设为活跃", + "back": "返回", + "skip": "跳过", + "continue": "继续" + }, + "toast": { + "tokenSaved": "令牌已保存", + "tokenSavedDescription": "您的 Claude 令牌已安全保存。", + "tokenSaveFailed": "保存令牌失败", + "addProfileFailed": "添加个人资料失败", + "tryAgain": "请重试。" + }, + "configureTitle": "配置 Claude 账户", + "addAccountsDesc": "添加并验证您的 Claude 账户以使用 AI 功能。", + "multiAccountInfo": "您可以添加多个 Claude 账户。活跃账户将用于 AI 功能。您可以随时切换账户。", + "keychainTitle": "安全存储", + "keychainDescription": "您的身份验证令牌使用系统密钥链加密存储。您可能会看到 macOS 的密码提示 - 点击\"始终允许\"以避免再次看到。", + "noAccountsYet": "尚未添加账户。在下方添加您的第一个 Claude 账户。" + }, + "authTerminal": { + "failedToCreate": "创建终端失败", + "unknownError": "未知错误", + "instructionTitle": "Claude 验证", + "step1": "按回车开始验证", + "step2": "在浏览器中完成验证", + "step3": "返回此处 - 验证将自动检测", + "authFailed": "验证失败", + "connecting": "连接中...", + "authenticate": "验证:{{profileName}}", + "authenticatedAs": "已验证为 {{email}}", + "authenticated": "已验证!", + "authError": "验证错误", + "successMessage": "验证成功!正在关闭..." + }, + "profileCreated": { + "title": "个人资料 \"{{profileName}}\" 已创建。", + "instructions": "验证此个人资料:", + "step1": "转到设置 > 集成", + "step2": "在 Claude 账户部分找到该个人资料", + "step3": "点击\"验证\"完成登录", + "footer": "完成验证后该账户将可用。" + }, + "roadmap": { + "taskCompleted": "已完成", + "taskDeleted": "已删除", + "taskArchived": "已归档", + "showMoreFeatures": "显示另外 {{count}} 个功能", + "showMoreFeatures_plural": "显示另外 {{count}} 个功能", + "showLessFeatures": "显示更少", + "archiveFeature": "归档", + "archiveFeatureConfirmTitle": "归档功能?", + "archiveFeatureConfirmDescription": "这将从您的路线图中移除\"{{title}}\"。", + "goToTask": "转到任务", + "convertToTask": "转换为自动构建任务", + "build": "构建", + "task": "任务", + "viewTask": "查看任务" + }, + "roadmapGeneration": { + "progress": "进度", + "elapsed": "已用时间:{{time}}", + "stillWorking": "仍在工作...", + "stopping": "停止中...", + "stop": "停止", + "stopTooltip": "停止生成", + "phases": { + "analyzing": { + "label": "分析中", + "description": "正在分析项目结构和代码库..." + }, + "discovering": { + "label": "发现中", + "description": "正在发现目标受众和用户需求..." + }, + "generating": { + "label": "生成中", + "description": "正在生成功能路线图..." + }, + "complete": { + "label": "完成", + "description": "路线图生成完成!" + }, + "error": { + "label": "错误", + "description": "生成失败" + } + }, + "steps": { + "analyze": "分析", + "discover": "发现", + "generate": "生成" + } + }, + "auth": { + "failure": { + "title": "需要身份验证", + "profileLabel": "个人资料", + "unknownProfile": "未知个人资料", + "tokenExpired": "您的身份验证令牌已过期。", + "tokenInvalid": "您的身份验证令牌无效。", + "tokenMissing": "未找到身份验证令牌。", + "authFailed": "验证失败。", + "description": "请重新验证您的 Claude 个人资料以继续使用 Aperant。", + "taskAffected": "受影响的任务", + "technicalDetails": "技术详情", + "goToSettings": "转到设置" + } + }, + "git": { + "branchGroups": { + "local": "本地分支", + "remote": "远程分支" + }, + "branchType": { + "local": "本地", + "remote": "远程" + } + }, + "githubErrors": { + "rateLimitTitle": "达到 GitHub 速率限制", + "authTitle": "需要 GitHub 身份验证", + "permissionTitle": "GitHub 权限被拒绝", + "notFoundTitle": "未找到 GitHub 资源", + "networkTitle": "GitHub 连接错误", + "unknownTitle": "GitHub 错误", + "rateLimitMessage": "达到 GitHub API 速率限制。请稍后再试。", + "rateLimitMessageMinutes": "达到 GitHub API 速率限制。请等待 {{minutes}} 分钟后再试。", + "rateLimitMessageHours": "达到 GitHub API 速率限制。限制约在 {{hours}} 小时后重置。", + "authMessage": "GitHub 验证失败。请在设置中检查您的 GitHub 令牌并重试。", + "permissionMessage": "GitHub 权限被拒绝。您的令牌可能没有所需的访问权限。请在设置中检查您的令牌权限。", + "permissionMessageScopes": "GitHub 权限被拒绝。您的令牌缺少所需的作用域:{{scopes}}。请在设置中更新您的 GitHub 令牌。", + "notFoundMessage": "未找到请求的 GitHub 资源。请验证仓库是否存在以及您是否有访问权限。", + "networkMessage": "无法连接到 GitHub。请检查您的互联网连接并重试。", + "unknownMessage": "与 GitHub 通信时发生意外错误。请重试。", + "resetsIn": "{{time}} 后重置", + "countdownHoursMinutes": "{{hours}} 小时 {{minutes}} 分钟", + "countdownMinutesSeconds": "{{minutes}} 分钟 {{seconds}} 秒", + "rateLimitExpired": "速率限制已重置。您现在可以重试。", + "requiredScopes": "所需作用域" + }, + "roadmapProgress": { + "elapsedTime": "已用时间", + "lastActivity": "最后活动", + "staleWarning": "已有一段时间没有活动", + "staleWarningTooltip": "此任务已有 {{minutes}} 分钟没有活动", + "phases": { + "analyzing": { + "label": "分析中", + "description": "正在分析项目结构和代码库..." + }, + "discovering": { + "label": "发现中", + "description": "正在发现目标受众和用户需求..." + }, + "generating": { + "label": "生成中", + "description": "正在生成功能路线图..." + }, + "complete": { + "label": "完成", + "description": "路线图生成完成!" + }, + "error": { + "label": "错误", + "description": "生成失败" + } + }, + "steps": { + "analyze": "分析", + "discover": "发现", + "generate": "生成" + }, + "processing": "处理中", + "processActiveTooltip": "流程正在运行", + "stopGeneration": "停止生成", + "stopping": "停止中...", + "progress": "进度", + "lastActivityPrefix": "最后活动", + "lastProgressUpdateTooltip": "收到最后进度更新" + }, + "memory": { + "types": { + "gotcha": "陷阱", + "decision": "决策", + "preference": "偏好", + "pattern": "模式", + "requirement": "需求", + "error_pattern": "错误模式", + "module_insight": "模块洞察", + "prefetch_pattern": "预取模式", + "work_state": "工作状态", + "causal_dependency": "因果依赖", + "task_calibration": "任务校准", + "e2e_observation": "端到端观察", + "dead_end": "死胡同", + "work_unit_outcome": "工作单元结果", + "workflow_recipe": "工作流配方", + "context_cost": "上下文成本" + }, + "filters": { + "all": "全部", + "patterns": "模式", + "errors": "错误和陷阱", + "decisions": "决策", + "insights": "代码洞察", + "calibration": "校准" + }, + "badges": { + "needsReview": "需要审核", + "verified": "已验证", + "pinned": "已固定", + "confidence": "置信度" + }, + "sources": { + "agent_explicit": "代理", + "observer_inferred": "观察器", + "qa_auto": "QA", + "mcp_auto": "MCP", + "commit_auto": "提交", + "user_taught": "用户" + }, + "health": { + "totalMemories": "总记忆数", + "avgConfidence": "平均置信度", + "verified": "已验证" + }, + "info": { + "database": "数据库", + "path": "路径", + "embedding": "嵌入", + "memories": "记忆" + }, + "status": { + "title": "记忆状态", + "connected": "已连接", + "notAvailable": "不可用", + "notConfigured": "记忆系统未配置", + "enableInSettings": "要启用记忆,请在项目设置中配置。" + }, + "search": { + "title": "搜索记忆", + "placeholder": "搜索记忆...", + "resultsCount": "找到 {{count}} 个结果", + "resultsCount_plural": "找到 {{count}} 个结果" + }, + "browser": { + "title": "记忆浏览器", + "countOf": "{{total}} 中的 {{filtered}} 个记忆" + }, + "empty": "还没有记忆。记忆会在代理处理任务时自动创建。", + "emptyFilter": "没有记忆匹配所选筛选器。", + "showAll": "显示所有记忆", + "expand": "展开", + "collapse": "折叠", + "sections": { + "whatWorked": "有效的做法", + "whatFailed": "失败的尝试", + "approach": "方法", + "recommendations": "建议", + "patterns": "模式", + "gotchas": "陷阱", + "changedFiles": "已更改文件", + "fileInsights": "文件洞察", + "subtasksCompleted": "已完成的子任务", + "relatedFiles": "相关文件", + "tags": "标签", + "approachTried": "尝试过的方法", + "whyItFailed": "为什么失败", + "alternativeUsed": "使用的替代方案", + "steps": "步骤" + }, + "actions": { + "verify": "验证", + "pin": "固定", + "unpin": "取消固定", + "deprecate": "移除" + } + }, + "context": { + "tabs": { + "projectIndex": "项目索引", + "memories": "记忆" + } + }, + "prStatus": { + "ci": { + "success": "CI 通过", + "pending": "CI 待定", + "failure": "CI 失败", + "successTooltip": "所有 CI 检查都已通过", + "pendingTooltip": "CI 检查仍在运行", + "failureTooltip": "一个或多个 CI 检查失败" + }, + "review": { + "approved": "已批准", + "changesRequested": "已请求更改", + "pending": "审核待定", + "approvedTooltip": "此 PR 已获批准", + "changesRequestedTooltip": "此 PR 上已请求更改", + "pendingTooltip": "等待审核" + }, + "merge": { + "ready": "准备合并", + "blocked": "合并被阻止", + "conflict": "有冲突", + "readyTooltip": "此 PR 准备合并", + "blockedTooltip": "由于阻止条件,此 PR 无法合并", + "conflictTooltip": "此 PR 有需要解决的合并冲突" + } + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/dialogs.json b/apps/desktop/src/shared/i18n/locales/zh/dialogs.json new file mode 100644 index 0000000000..01a1c4b7b7 --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/dialogs.json @@ -0,0 +1,239 @@ +{ + "initialize": { + "title": "初始化 Aperant", + "description": "此项目未初始化 Aperant。您想现在设置吗?", + "willDo": "这将:", + "createFolder": "在您的项目中创建 .auto-claude 文件夹", + "copyFramework": "复制 Aperant 框架文件", + "setupSpecs": "为您的任务设置 specs 目录", + "sourcePathNotConfigured": "未配置源路径", + "sourcePathNotConfiguredDescription": "请在应用设置中设置 Aperant 源路径,然后再初始化。", + "initFailed": "初始化失败", + "initFailedDescription": "初始化 Aperant 失败。请重试。" + }, + "gitSetup": { + "title": "需要 Git 仓库", + "description": "Aperant 使用 git 在隔离的工作空间中安全地构建功能", + "notGitRepo": "此文件夹不是 git 仓库", + "noCommits": "Git 仓库没有提交", + "needsInit": "需要先初始化 git,然后 Aperant 才能管理您的代码。", + "needsCommit": "Aperant 创建工作树至少需要一个提交。", + "willSetup": "我们将为您设置 git:", + "initRepo": "初始化新的 git 仓库", + "createCommit": "使用当前文件创建初始提交", + "manual": "更喜欢手动操作?", + "settingUp": "正在设置 Git", + "initializingRepo": "正在初始化 git 仓库并创建初始提交...", + "success": "Git 已初始化", + "readyToUse": "您的项目现在可以与 Aperant 一起使用了!" + }, + "githubSetup": { + "connectTitle": "连接到 GitHub", + "connectDescription": "Aperant 需要 GitHub 来管理您的代码分支并保持任务最新。", + "claudeTitle": "连接到 Claude AI", + "claudeDescription": "Aperant 使用 Claude AI 来实现智能功能,如路线图生成、任务自动化和创意。", + "aiProviderTitle": "连接到 AI", + "aiProviderDescription": "添加 AI 提供商账户以为路线图生成、任务自动化和创意等功能提供支持。", + "aiProviderReady": "您已配置至少一个 AI 提供商。您可以继续下一步。", + "skipForNow": "暂时跳过", + "continue": "继续", + "selectRepo": "选择仓库", + "repoDescription": "Aperant 将使用此仓库来管理任务分支并保持您的代码最新。", + "selectBranch": "选择基础分支", + "branchDescription": "选择 Aperant 用作创建任务分支基础的分支。", + "whyBranch": "为什么要选择分支?", + "branchExplanation": "Aperant 为每个任务创建隔离的工作空间。选择正确的基础分支可确保您的任务从主开发线的最新代码开始。", + "ready": "Aperant 已准备好使用!您现在可以创建将自动基于 {{branchName}} 分支的任务。", + "createRepoAriaLabel": "在 GitHub 上创建新仓库", + "linkRepoAriaLabel": "链接到现有仓库", + "goBackAriaLabel": "返回仓库选择", + "selectOwnerAriaLabel": "选择 {{owner}} 作为仓库所有者", + "selectOrgAriaLabel": "选择 {{org}} 作为仓库所有者", + "selectVisibilityAriaLabel": "将仓库可见性设置为 {{visibility}}" + }, + "worktrees": { + "title": "工作树", + "description": "管理您的 Aperant 任务的隔离工作空间", + "empty": "无工作树", + "emptyDescription": "工作树会在 Aperant 构建功能时自动创建。它们为每个任务提供隔离的工作空间。", + "merge": "合并工作树", + "mergeDescription": "将更改从此工作树合并到基础分支。", + "delete": "删除工作树?", + "deleteDescription": "这将永久删除工作树及其所有未提交的更改。此操作无法撤销。", + "bulkDeleteTitle": "删除 {{count}} 个工作树?", + "bulkDeleteDescription": "这将永久删除所选工作树及其所有未提交的更改。此操作无法撤销。", + "deleting": "删除中...", + "deleteSelected": "删除所选" + }, + "worktreeCleanup": { + "title": "完成任务", + "hasWorktree": "任务 \"{{taskTitle}}\" 仍有隔离的工作空间(工作树)。", + "willDelete": "要将此任务标记为完成,工作树及其关联的分支将被删除。", + "warning": "在继续之前,请确保已合并或保存了您要保留的任何更改。", + "confirm": "删除工作树并完成", + "completing": "完成中...", + "retry": "重试", + "errorTitle": "清理失败", + "errorDescription": "清理工作树失败。请重试。" + }, + "update": { + "title": "Aperant", + "projectInitialized": "项目已初始化。" + }, + "addFeature": { + "title": "添加功能", + "description": "为您的路线图添加新功能。提供有关您想要构建的内容及其如何适应产品策略的详细信息。", + "featureTitle": "功能标题", + "featureTitlePlaceholder": "例如用户身份验证、深色模式支持", + "featureDescription": "描述", + "featureDescriptionPlaceholder": "描述此功能的用途及其对用户的重要性。", + "rationale": "理由", + "optional": "可选", + "rationalePlaceholder": "解释为什么应该构建此功能以及它如何适应产品愿景。", + "phase": "阶段", + "selectPhase": "选择阶段", + "priority": "优先级", + "selectPriority": "选择优先级", + "complexity": "复杂性", + "selectComplexity": "选择复杂性", + "impact": "影响", + "selectImpact": "选择影响", + "lowComplexity": "低", + "mediumComplexity": "中", + "highComplexity": "高", + "lowImpact": "低影响", + "mediumImpact": "中影响", + "highImpact": "高影响", + "titleRequired": "标题是必填项", + "descriptionRequired": "描述是必填项", + "phaseRequired": "请选择一个阶段", + "cancel": "取消", + "adding": "添加中...", + "addFeature": "添加功能", + "failedToAdd": "添加功能失败。请重试。" + }, + "addProject": { + "title": "添加项目", + "description": "选择您想要添加项目的方式", + "openExisting": "打开现有文件夹", + "openExistingDescription": "浏览到您计算机上的现有项目", + "createNew": "创建新项目", + "createNewDescription": "使用新项目文件夹重新开始", + "createNewTitle": "创建新项目", + "createNewSubtitle": "设置新的项目文件夹", + "projectName": "项目名称", + "projectNamePlaceholder": "my-awesome-project", + "projectNameHelp": "这将是文件夹名称。使用小写和连字符。", + "location": "位置", + "locationPlaceholder": "选择文件夹...", + "willCreate": "将创建:", + "browse": "浏览", + "initGit": "初始化 git 仓库", + "back": "返回", + "creating": "创建中...", + "createProject": "创建项目", + "nameRequired": "请输入项目名称", + "locationRequired": "请选择一个位置", + "failedToOpen": "打开项目失败", + "failedToCreate": "创建项目失败", + "openExistingAriaLabel": "打开现有项目文件夹", + "createNewAriaLabel": "创建新项目" + }, + "customModel": { + "title": "自定义模型配置", + "description": "配置此聊天会话的模型和思维级别。", + "model": "模型", + "thinkingLevel": "思维级别", + "cancel": "取消", + "apply": "应用" + }, + "removeProject": { + "title": "移除项目?", + "description": "这将从应用中移除\"{{projectName}}\"。您的文件将保留在磁盘上,您可以稍后重新添加项目。", + "cancel": "取消", + "remove": "移除", + "error": "移除项目失败" + }, + "appUpdate": { + "title": "有可用应用更新", + "description": "新版本的 Aperant 已准备好下载", + "newVersion": "新版本", + "released": "发布于", + "downloading": "下载中...", + "downloadUpdate": "下载更新", + "installAndRestart": "安装并重启", + "installLater": "稍后安装", + "remindMeLater": "稍后提醒我", + "updateDownloaded": "更新已成功下载!点击安装以重启并应用更新。", + "downloadError": "下载更新失败", + "claudeCodeChangelog": "查看 Claude Code 更新日志", + "claudeCodeChangelogAriaLabel": "查看 Claude Code 更新日志(在新窗口中打开)", + "readOnlyVolumeTitle": "无法从磁盘映像安装", + "readOnlyVolumeDescription": "请将 Aperant 移动到应用程序文件夹,然后再更新。" + }, + "addCompetitor": { + "title": "添加竞争对手", + "description": "添加您已知的竞争对手进行分析...", + "competitorName": "竞争对手名称", + "competitorNamePlaceholder": "例如 Slack、Notion、Figma", + "competitorUrl": "网站 URL", + "competitorUrlPlaceholder": "例如 https://example.com", + "competitorDescription": "描述", + "competitorDescriptionPlaceholder": "简要描述此竞争对手做什么...", + "relevance": "相关性", + "selectRelevance": "选择相关性", + "highRelevance": "高 - 直接竞争对手", + "mediumRelevance": "中 - 部分重叠", + "lowRelevance": "低 - 间接", + "nameRequired": "竞争对手名称是必填项", + "urlRequired": "网站 URL 是必填项", + "invalidUrl": "请输入有效的 URL", + "optional": "可选", + "cancel": "取消", + "adding": "添加中...", + "addCompetitor": "添加竞争对手", + "failedToAdd": "添加竞争对手失败" + }, + "competitorAnalysis": { + "title": "启用竞争对手分析?", + "description": "通过竞争对手产品的洞察增强您的路线图", + "whatItDoes": "竞争对手分析的作用:", + "identifiesCompetitors": "根据您的项目类型识别 3-5 个主要竞争对手", + "searchesAppStores": "搜索应用商店、论坛和社交媒体以获取用户反馈和痛点", + "suggestsFeatures": "建议解决竞争对手产品差距的功能", + "webSearchesTitle": "将执行网络搜索", + "webSearchesDescription": "此功能将执行网络搜索以收集竞争对手信息。您的项目名称和类型将用于搜索查询。不会共享任何代码或敏感数据。", + "optionalInfo": "如果您愿意,可以生成果程图而不进行竞争对手分析。路线图仍将基于您的项目结构和最佳实践。", + "skipAnalysis": "不,进行分析", + "enableAnalysis": "是,启用分析", + "knowYourCompetitors": "已经知道您的竞争对手?", + "addThemDirectly": "直接添加它们以提高分析准确性", + "addKnownCompetitors": "添加已知竞争对手", + "addKnownCompetitorsDescription": "手动添加您已知的竞争对手到现有分析中。", + "competitorsAdded": "已添加 {{count}} 个" + }, + "existingCompetitorAnalysis": { + "title": "竞争对手分析选项", + "description": "此项目有来自 {{date}} 的现有竞争对手分析", + "recently": "最近", + "useExistingTitle": "使用现有分析", + "recommended": "(推荐)", + "useExistingDescription": "重用您已有的竞争对手洞察。更快且无需额外的网络搜索。", + "runNewTitle": "运行新分析", + "runNewDescription": "执行新的网络搜索以获取最新的竞争对手信息。需要更长时间。", + "skipTitle": "跳过竞争对手分析", + "skipDescription": "在不进行任何竞争对手洞察的情况下生成路线图。", + "cancel": "取消" + }, + "versionWarning": { + "title": "需要操作", + "subtitle": "版本 2.7.5 更新", + "description": "由于此版本的身份验证更改,您需要重新验证您的 Claude 个人资料。", + "instructions": "重新验证:", + "step1": "转到设置", + "step2": "导航到应用设置 > 集成", + "step3": "点击您个人资料上的「重新验证」", + "gotIt": "知道了", + "goToSettings": "转到设置" + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/errors.json b/apps/desktop/src/shared/i18n/locales/zh/errors.json new file mode 100644 index 0000000000..9c66f4259b --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/errors.json @@ -0,0 +1,9 @@ +{ + "task": { + "parseImplementationPlan": "解析 {{specId}} 的 implementation_plan.json 失败:{{error}}", + "jsonError": { + "titleSuffix": "(JSON 错误)", + "description": "⚠️ JSON 解析错误:{{error}}\n\nimplementation_plan.json 文件格式不正确。运行后端自动修复或手动修复文件。" + } + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/gitlab.json b/apps/desktop/src/shared/i18n/locales/zh/gitlab.json new file mode 100644 index 0000000000..119f42f4bc --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/gitlab.json @@ -0,0 +1,208 @@ +{ + "title": "GitLab 问题", + "states": { + "opened": "打开", + "closed": "关闭" + }, + "complexity": { + "simple": "简单", + "standard": "标准", + "complex": "复杂" + }, + "header": { + "open": "打开", + "searchPlaceholder": "搜索问题..." + }, + "filters": { + "opened": "打开", + "closed": "关闭", + "all": "全部" + }, + "empty": { + "noMatch": "没有匹配您搜索的问题", + "selectIssue": "选择一个问题以查看详情" + }, + "notConnected": { + "title": "GitLab 未连接", + "description": "在项目设置中配置您的 GitLab 令牌和项目以同步问题。", + "openSettings": "打开设置" + }, + "detail": { + "notes": "备注", + "viewTask": "查看任务", + "createTask": "创建任务", + "taskLinked": "任务已链接", + "taskId": "任务 ID", + "description": "描述", + "noDescription": "未提供描述。", + "assignees": "受理人", + "milestone": "里程碑" + }, + "investigation": { + "title": "从问题创建任务", + "issuePrefix": "问题", + "description": "从此 GitLab 问题创建一个任务。任务将添加到您看板的待办列中。", + "selectNotes": "选择要包含的备注", + "deselectAll": "取消全选", + "selectAll": "全选", + "willInclude": "任务将包含:", + "includeTitle": "问题标题和描述", + "includeLink": "链接回 GitLab 问题", + "includeLabels": "问题的标签和元数据", + "noNotes": "无备注(此问题没有备注)", + "failedToLoadNotes": "加载备注失败", + "taskCreated": "任务已创建!请在您的看板中查看。", + "creating": "创建中...", + "cancel": "取消", + "done": "完成", + "close": "关闭" + }, + "settings": { + "enableIssues": "启用 GitLab 问题", + "enableIssuesDescription": "从 GitLab 同步问题并自动创建任务", + "instance": "GitLab 实例", + "instanceDescription": "使用 https://gitlab.com 或您的自托管实例 URL", + "connectedVia": "通过 GitLab CLI 连接", + "authenticatedAs": "验证身份为", + "useDifferentToken": "使用不同的令牌", + "authentication": "GitLab 身份验证", + "useManualToken": "使用手动令牌", + "authenticating": "正在使用 glab CLI 进行验证...", + "browserWindow": "浏览器窗口应该为您打开以供登录。", + "personalAccessToken": "个人访问令牌", + "useOAuth": "改用 OAuth", + "tokenScope": "创建具有以下作用域的令牌", + "scopeApi": "api", + "scopeFrom": "作用域来自", + "gitlabSettings": "GitLab 设置", + "project": "项目", + "enterManually": "手动输入", + "loadingProjects": "加载项目中...", + "selectProject": "选择项目...", + "searchProjects": "搜索项目...", + "noMatchingProjects": "没有匹配的项目", + "noProjectsFound": "未找到项目", + "selected": "已选择", + "projectFormat": "格式:", + "projectFormatExample": "(例如 gitlab-org/gitlab)", + "connectionStatus": "连接状态", + "checking": "检查中...", + "connectedTo": "已连接到", + "notConnected": "未连接", + "issuesAvailable": "可用问题", + "issuesAvailableDescription": "从侧边栏访问 GitLab 问题以查看、调查和从问题创建任务。", + "defaultBranch": "默认分支", + "defaultBranchDescription": "创建任务工作树的基础分支", + "loadingBranches": "加载分支中...", + "autoDetect": "自动检测(main/master)", + "searchBranches": "搜索分支...", + "noMatchingBranches": "没有匹配的分支", + "noBranchesFound": "未找到分支", + "branchFromNote": "所有新任务都将从以下分支分支", + "autoSyncOnLoad": "加载时自动同步", + "autoSyncDescription": "项目加载时自动获取问题", + "cli": { + "required": "需要 GitLab CLI", + "notInstalled": "GitLab CLI(glab)需要用于 OAuth 身份验证。安装它以使用\u201C使用 OAuth\u201D选项。", + "installButton": "安装 glab", + "installing": "安装中...", + "installSuccess": "安装已在您的终端中启动。完成它并点击刷新。", + "refresh": "刷新", + "learnMore": "了解更多", + "installed": "GitLab CLI 已安装:" + } + }, + "mergeRequests": { + "title": "GitLab 合并请求", + "newMR": "新建合并请求", + "selectMR": "选择一个合并请求以查看详情", + "states": { + "opened": "打开", + "closed": "关闭", + "merged": "已合并", + "locked": "已锁定" + }, + "filters": { + "opened": "打开", + "closed": "关闭", + "merged": "已合并", + "all": "全部" + } + }, + "mrReview": { + "runReview": "运行 AI 审核", + "reviewing": "审核中...", + "followupReview": "跟进审核", + "newCommits": "个新提交", + "newCommitsPlural": "个新提交", + "cancel": "取消", + "postFindings": "发布发现", + "posting": "发布中...", + "postedTo": "已发布到 GitLab", + "approve": "批准", + "approving": "批准中...", + "merge": "合并 MR", + "merging": "合并中...", + "aiReviewResult": "AI 审核结果", + "followupReviewResult": "跟进审核", + "description": "描述", + "noDescription": "未提供描述。", + "labels": "标签", + "status": { + "notReviewed": "未审核", + "notReviewedDesc": "运行 AI 审核以分析此 MR", + "reviewComplete": "审核完成", + "reviewCompleteDesc": "发现项。选择并发布到 GitLab。", + "waitingForChanges": "等待更改", + "waitingForChangesDesc": "发现项已发布。等待贡献者解决问题。", + "readyToMerge": "准备合并", + "readyToMergeDesc": "未发现阻止性问题。此 MR 可以合并。", + "needsAttention": "需要关注", + "needsAttentionDesc": "发现项需要发布到 GitLab。", + "readyForFollowup": "准备跟进", + "readyForFollowupDesc": "自审核以来。运行跟进以检查问题是否已解决。", + "blockingIssues": "阻止性问题", + "blockingIssuesDesc": "个阻止性问题仍打开。" + }, + "overallStatus": { + "approve": "批准", + "requestChanges": "请求更改", + "comment": "评论" + }, + "resolution": { + "resolved": "已解决", + "stillOpen": "仍打开", + "newIssue": "个新问题", + "newIssues": "个新问题" + } + }, + "findings": { + "summary": "已选择", + "selectCriticalHigh": "选择阻止/必需", + "selectAll": "全选", + "clear": "清除", + "noIssues": "未发现问题!代码看起来不错。", + "suggestedFix": "建议修复:", + "posted": "已发布", + "severity": { + "critical": "阻止级", + "criticalDesc": "必须修复", + "high": "必需", + "highDesc": "应该修复", + "medium": "推荐", + "mediumDesc": "提高质量", + "low": "建议", + "lowDesc": "考虑" + }, + "category": { + "security": "安全", + "quality": "质量", + "style": "风格", + "test": "测试", + "docs": "文档", + "pattern": "模式", + "performance": "性能", + "logic": "逻辑" + } + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/navigation.json b/apps/desktop/src/shared/i18n/locales/zh/navigation.json new file mode 100644 index 0000000000..8539e70660 --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/navigation.json @@ -0,0 +1,87 @@ +{ + "sections": { + "project": "项目", + "tools": "工具" + }, + "items": { + "kanban": "看板", + "terminals": "代理终端", + "insights": "洞察", + "roadmap": "路线图", + "ideation": "创意", + "changelog": "更新日志", + "context": "上下文", + "githubIssues": "GitHub 问题", + "githubPRs": "GitHub PR", + "gitlabIssues": "GitLab 问题", + "gitlabMRs": "GitLab MR", + "worktrees": "工作树", + "agentTools": "MCP 概览" + }, + "actions": { + "settings": "设置", + "help": "帮助与反馈", + "newTask": "新建任务", + "collapseSidebar": "折叠侧边栏", + "expandSidebar": "展开侧边栏", + "sponsor": "赞助我们" + }, + "tooltips": { + "settings": "应用设置", + "help": "帮助与反馈" + }, + "messages": { + "initializeToCreateTasks": "初始化 Aperant 以创建任务" + }, + "updateBanner": { + "title": "有可用更新", + "version": "版本 {{version}} 已就绪", + "updateAndRestart": "更新并重启", + "installAndRestart": "安装并重启", + "downloading": "下载中...", + "dismiss": "忽略", + "downloadError": "下载更新失败", + "readOnlyVolumeWarning": "移动到应用程序文件夹以更新" + }, + "claudeCode": { + "checking": "正在检查 Claude Code...", + "upToDate": "Claude Code 是最新版本", + "updateAvailable": "Claude Code 有可用更新", + "notInstalled": "Claude Code 未安装", + "error": "检查 Claude Code 时出错", + "installed": "已安装", + "outdated": "有可用更新", + "missing": "未安装", + "current": "当前", + "latest": "最新", + "path": "路径", + "lastChecked": "上次检查", + "learnMore": "了解更多关于 Claude Code", + "learnMoreAriaLabel": "了解更多关于 Claude Code(在新窗口中打开)", + "viewChangelog": "查看 Claude Code 更新日志", + "viewChangelogAriaLabel": "查看 Claude Code 更新日志(在新窗口中打开)", + "updateWarningTitle": "更新 Claude Code?", + "updateWarningDescription": "更新将关闭所有正在运行的 Claude Code 会话。任何未保存的工作可能会丢失。在继续之前请确保保存您的工作。", + "updateWarningTerminalNote": "终端窗口将打开以运行安装命令。请等待安装完成后再继续。", + "updateAnyway": "打开终端并更新", + "switchVersion": "切换版本", + "selectVersion": "选择版本", + "loadingVersions": "加载版本中...", + "failedToLoadVersions": "加载版本失败", + "installingVersion": "正在安装版本 {{version}}...", + "rollbackWarningTitle": "切换到版本 {{version}}?", + "rollbackWarningDescription": "切换版本将关闭所有正在运行的 Claude Code 会话。任何未保存的工作可能会丢失。在继续之前请确保保存您的工作。", + "rollbackWarningTerminalNote": "终端窗口将打开以运行安装命令。请等待安装完成后再继续。", + "switchAnyway": "打开终端并切换", + "currentVersion": "当前", + "switchInstallation": "切换安装", + "selectInstallation": "选择安装", + "loadingInstallations": "加载安装中...", + "failedToLoadInstallations": "加载安装失败", + "activeInstallation": "活跃", + "pathChangeWarningTitle": "切换 CLI 安装?", + "pathChangeWarningDescription": "切换 CLI 安装将使用不同的 Claude Code 二进制文件。任何正在运行的会话将继续使用之前的安装直到重启。", + "switchInstallationConfirm": "切换", + "versionUnknown": "版本未知" + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/onboarding.json b/apps/desktop/src/shared/i18n/locales/zh/onboarding.json new file mode 100644 index 0000000000..9409cb4cad --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/onboarding.json @@ -0,0 +1,261 @@ +{ + "wizard": { + "title": "设置向导", + "description": "通过几个简单的步骤配置您的 Aperant 环境", + "helpText": "此向导将帮助您仅通过几个步骤设置您的环境。您可以配置您的 Claude OAuth 令牌、设置记忆功能并创建您的第一个任务。" + }, + "welcome": { + "title": "欢迎使用 Aperant", + "subtitle": "使用 AI 驱动的代理自主构建软件", + "getStarted": "开始", + "skip": "跳过设置", + "features": { + "aiPowered": { + "title": "AI 驱动的开发", + "description": "使用 Claude Code 代理生成代码和构建功能" + }, + "specDriven": { + "title": "规格驱动的工作流", + "description": "用清晰的规格定义任务,让 Aperant 处理实施" + }, + "memory": { + "title": "记忆和上下文", + "description": "使用 Graphiti 实现跨会话的持久记忆" + }, + "parallel": { + "title": "并行执行", + "description": "并行运行多个代理以加快开发周期" + } + } + }, + "oauth": { + "title": "Claude 身份验证", + "description": "连接您的 Claude 账户以启用 AI 功能", + "configureTitle": "配置 Claude 身份验证", + "addAccountsDesc": "添加您的 Claude 账户以启用 AI 功能", + "multiAccountInfo": "添加多个 Claude 订阅,以便在达到速率限制时自动在它们之间切换。", + "noAccountsYet": "尚未配置账户", + "badges": { + "default": "默认", + "active": "活跃", + "authenticated": "已验证", + "needsAuth": "需要验证" + }, + "buttons": { + "authenticate": "验证", + "setActive": "设为活跃", + "rename": "重命名", + "delete": "删除", + "add": "添加", + "adding": "添加中...", + "showToken": "显示令牌", + "hideToken": "隐藏令牌", + "copyToken": "复制令牌", + "back": "返回", + "continue": "继续", + "skip": "跳过" + }, + "labels": { + "accountName": "账户名称", + "namePlaceholder": "个人资料名称(例如:工作、个人)", + "tokenLabel": "OAuth 令牌", + "tokenPlaceholder": "在此输入令牌", + "tokenHint": "粘贴完成 OAuth 登录后在终端中显示的令牌。" + }, + "keychainTitle": "安全存储", + "keychainDescription": "您的令牌使用系统密钥链加密存储。您可能会看到 macOS 的密码提示 - 点击\u201C始终允许\u201D以避免再次看到。", + "toast": { + "authSuccess": "个人资料验证成功", + "authSuccessWithEmail": "账户:{{email}}", + "authSuccessGeneric": "验证完成。您现在可以使用此个人资料。", + "authStartFailed": "启动验证失败", + "addProfileFailed": "添加个人资料失败", + "tokenSaved": "令牌已保存", + "tokenSavedDescription": "您的令牌已成功保存。", + "tokenSaveFailed": "保存令牌失败", + "tryAgain": "请重试。" + }, + "alerts": { + "profileCreatedAuthFailed": "个人资料已创建但准备验证失败:{{error}}", + "authPrepareFailed": "准备验证失败:{{error}}", + "authStartFailedMessage": "启动验证失败。请重试。" + } + }, + "memory": { + "title": "记忆", + "description": "为代理配置持久化跨会话记忆", + "contextDescription": "Aperant 记忆帮助跨编码会话记住上下文", + "enableMemory": "启用记忆", + "enableMemoryDescription": "使用嵌入式数据库的持久化跨会话记忆", + "memoryDisabledInfo": "记忆已禁用。会话洞察将仅存储在本地文件中。启用记忆以获得具有语义搜索的持久化跨会话上下文。", + "embeddingProvider": "嵌入提供商", + "embeddingProviderDescription": "语义搜索的提供商(可选 - 关键字搜索无需嵌入)", + "selectEmbeddingModel": "选择嵌入模型", + "openaiApiKey": "OpenAI API 密钥", + "openaiApiKeyDescription": "OpenAI 嵌入所需", + "openaiGetKey": "获取您的密钥", + "voyageApiKey": "Voyage AI API 密钥", + "voyageApiKeyDescription": "Voyage AI 嵌入所需", + "voyageEmbeddingModel": "嵌入模型", + "googleApiKey": "Google AI API 密钥", + "googleApiKeyDescription": "Google AI 嵌入所需", + "azureConfig": "Azure OpenAI 配置", + "azureApiKey": "API 密钥", + "azureBaseUrl": "基础 URL", + "azureEmbeddingDeployment": "嵌入部署名称", + "memoryInfo": "记忆存储关于您的代码库的发现、模式和洞察,以便未来的会话在已加载的上下文中开始。", + "learnMore": "了解更多关于记忆", + "back": "返回", + "skip": "跳过", + "saving": "保存中...", + "saveAndContinue": "保存并继续", + "providers": { + "ollama": "Ollama(本地 - 免费)", + "openai": "OpenAI", + "voyage": "Voyage AI", + "google": "Google AI", + "azure": "Azure OpenAI" + }, + "ollamaConfig": "Ollama 配置", + "checking": "检查中...", + "connected": "已连接", + "notRunning": "未运行", + "baseUrl": "基础 URL", + "embeddingModel": "嵌入模型", + "embeddingDim": "嵌入维度", + "embeddingDimDescription": "Ollama 嵌入所需(例如 nomic-embed-text 的 768)", + "modelRecommendation": "推荐:qwen3-embedding:4b(平衡)、:8b(质量)、:0.6b(快速)" + }, + "completion": { + "title": "您已一切就绪!", + "subtitle": "Aperant 已准备好帮助您构建出色的软件", + "setupComplete": "设置完成", + "setupCompleteDescription": "您的环境已配置完毕。您可以立即开始创建任务或按自己的节奏探索应用程序。", + "whatsNext": "接下来是什么?", + "createTask": { + "title": "创建任务", + "description": "通过创建您的第一个任务来了解 Aperant 的运作。", + "action": "打开任务创建器" + }, + "customizeSettings": { + "title": "自定义设置", + "description": "微调您的偏好、配置集成或重新运行此向导。", + "action": "打开设置" + }, + "exploreDocs": { + "title": "探索文档", + "description": "了解更多关于高级功能、最佳实践和故障排除的信息。" + }, + "finish": "完成并开始构建", + "rerunHint": "您可以随时从设置 > 应用中重新运行此向导" + }, + "steps": { + "welcome": "欢迎", + "accounts": "账户", + "devtools": "开发工具", + "privacy": "隐私", + "memory": "记忆", + "done": "完成" + }, + "privacy": { + "title": "帮助改进 Aperant", + "subtitle": "匿名错误报告帮助我们更快地修复错误", + "whatWeCollect": { + "title": "我们收集的内容", + "crashReports": "崩溃报告和错误堆栈跟踪", + "errorMessages": "错误消息(文件路径已匿名化)", + "appVersion": "应用版本和平台信息" + }, + "whatWeNeverCollect": { + "title": "我们从不收集的内容", + "code": "您的代码或项目文件", + "filenames": "完整文件路径(用户名已屏蔽)", + "apiKeys": "API 密钥或令牌", + "personalData": "个人信息或使用数据" + }, + "toggle": { + "label": "发送匿名错误报告", + "description": "帮助我们识别和修复问题" + } + }, + "claudeCode": { + "title": "Claude Code CLI", + "description": "安装或更新 Claude Code CLI 以启用 AI 驱动的功能", + "detecting": "正在检查 Claude Code 安装...", + "info": { + "title": "什么是 Claude Code?", + "description": "Claude Code 是 Anthropic 的官方 CLI,为 Aperant 的 AI 功能提供支持。它提供安全身份验证和对 Claude 模型的直接访问。" + }, + "status": { + "installed": "已安装", + "outdated": "有可用更新", + "notFound": "未安装" + }, + "version": { + "current": "当前版本", + "latest": "最新版本" + }, + "install": { + "button": "安装 Claude Code", + "updating": "更新 Claude Code", + "inProgress": "安装中...", + "success": "安装命令已发送到终端。请在那里完成安装。", + "instructions": "安装程序将在您的终端中打开。按照提示完成安装。" + }, + "learnMore": "了解更多关于 Claude Code" + }, + "devtools": { + "title": "开发者工具", + "description": "选择您喜欢的 IDE、终端和 CLI 以使用 Aperant 工作树", + "detecting": "正在检测已安装工具...", + "detectAgain": "重新检测", + "whyConfigure": "为什么要配置这些?", + "whyConfigureDescription": "当 Aperant 在隔离的工作树中构建功能时,您可以直接在您喜欢的 IDE 或终端中打开它们以测试和审核更改。", + "ide": { + "label": "首选 IDE", + "description": "Aperant 将在此编辑器中打开工作树", + "customPath": "自定义 IDE 路径" + }, + "terminal": { + "label": "首选终端", + "description": "Aperant 将在此处打开终端会话", + "customPath": "自定义终端路径" + }, + "cli": { + "label": "首选 CLI", + "description": "用于 AI 驱动终端会话的 CLI 工具", + "customPath": "自定义 CLI 路径" + }, + "detectedSummary": "在您的系统上检测到:", + "noToolsDetected": "未检测到其他工具(将使用 VS Code 和系统终端)", + "custom": "自定义...", + "saveAndContinue": "保存并继续" + }, + "accounts": { + "title": "添加您的 AI 账户", + "description": "连接您的 AI 提供商账户。您可以稍后在设置中添加更多。", + "buttons": { + "back": "返回", + "continue": "继续", + "skip": "暂时跳过" + } + }, + "ollama": { + "notInstalled": { + "title": "Ollama 未安装", + "description": "Ollama 提供免费的本地嵌入模型用于语义搜索。点击安装以启用此功能。", + "installSuccess": "安装已在您的终端中启动。在那里完成安装,然后点击重试。", + "installButton": "安装 Ollama", + "installing": "安装中...", + "retry": "重试", + "learnMore": "了解更多", + "fallbackNote": "即使没有 Ollama,记忆仍会使用关键字搜索工作。" + }, + "notRunning": { + "title": "Ollama 未运行", + "description": "Ollama 已安装但未运行。启动 Ollama 以使用本地嵌入模型。", + "retry": "重试", + "fallbackNote": "即使没有嵌入,记忆仍会使用关键字搜索工作。" + } + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/settings.json b/apps/desktop/src/shared/i18n/locales/zh/settings.json new file mode 100644 index 0000000000..64f46870cb --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/settings.json @@ -0,0 +1,1188 @@ +{ + "title": "设置", + "tabs": { + "app": "应用设置", + "project": "项目设置" + }, + "sections": { + "appearance": { + "title": "外观", + "description": "自定义 Aperant 的外观" + }, + "display": { + "title": "显示", + "description": "调整 UI 元素的大小" + }, + "language": { + "title": "语言", + "description": "选择您的首选语言" + }, + "devtools": { + "title": "开发者工具", + "description": "IDE 和终端偏好" + }, + "agent": { + "title": "代理设置", + "description": "默认模型和框架" + }, + "paths": { + "title": "路径", + "description": "CLI 工具和框架路径" + }, + "accounts": { + "title": "账户", + "description": "Claude 账户和 API 端点" + }, + "updates": { + "title": "更新", + "description": "Aperant 更新" + }, + "notifications": { + "title": "通知", + "description": "警报偏好" + }, + "debug": { + "title": "调试和日志", + "description": "故障排除工具" + }, + "terminal-fonts": { + "title": "终端字体", + "description": "自定义终端字体外观" + } + }, + "apiProfiles": { + "title": "API 个人资料", + "description": "配置自定义 Anthropic 兼容 API 端点", + "addButton": "添加个人资料", + "presets": { + "anthropic": "Anthropic", + "openrouter": "OpenRouter", + "groq": "Groq", + "zaiGlobal": "z.AI(全球)", + "zaiChina": "z.AI(中国)" + }, + "fields": { + "name": "名称", + "preset": "预设", + "baseUrl": "基础 URL", + "apiKey": "API 密钥" + }, + "placeholders": { + "name": "我的自定义 API", + "preset": "选择提供商预设", + "baseUrl": "https://api.anthropic.com", + "apiKey": "sk-ant-..." + }, + "hints": { + "preset": "预设会填充基础 URL;您仍需要粘贴您的 API 密钥。", + "baseUrl": "示例:https://api.anthropic.com 或 http://localhost:8080" + }, + "validation": { + "nameRequired": "名称是必填项", + "baseUrlRequired": "基础 URL 是必填项", + "baseUrlInvalid": "无效的 URL 格式(必须是 http:// 或 https://)", + "apiKeyRequired": "API 密钥是必填项", + "apiKeyInvalid": "无效的 API 密钥格式" + }, + "actions": { + "save": "保存个人资料", + "saving": "保存中...", + "cancel": "取消", + "changeKey": "更改", + "cancelKeyChange": "取消" + }, + "testConnection": { + "label": "测试连接", + "testing": "测试中...", + "success": "连接成功", + "failure": "连接失败" + }, + "models": { + "title": "可选:模型名称映射", + "description": "从您的 API 提供商选择模型。留空以使用默认值。", + "defaultLabel": "默认模型(可选)", + "haikuLabel": "Haiku 模型(可选)", + "sonnetLabel": "Sonnet 模型(可选)", + "opusLabel": "Opus 模型(可选)", + "defaultPlaceholder": "例如 claude-sonnet-4-6", + "haikuPlaceholder": "例如 claude-haiku-4-5-20251001", + "sonnetPlaceholder": "例如 claude-sonnet-4-6", + "opusPlaceholder": "例如 claude-opus-4-6", + "opus1mPlaceholder": "例如 claude-opus-4-6(1M 上下文)" + }, + "empty": { + "title": "未配置 API 个人资料", + "description": "创建个人资料以配置用于构建的自定义 API 端点。", + "action": "创建第一个个人资料" + }, + "switchToOauth": { + "label": "切换到 OAuth", + "loading": "切换中..." + }, + "activeBadge": "活跃", + "customModels": "自定义模型:{{models}}", + "setActive": { + "label": "设为活跃", + "loading": "设置中..." + }, + "tooltips": { + "edit": "编辑个人资料", + "deleteActive": "删除前先切换到 OAuth", + "deleteInactive": "删除个人资料" + }, + "deleteAriaLabel": "删除个人资料 {{name}}", + "toast": { + "create": { + "title": "个人资料已创建", + "description": "\"{{name}}\" 已成功添加。" + }, + "update": { + "title": "个人资料已更新", + "description": "\"{{name}}\" 已成功更新。" + }, + "delete": { + "title": "个人资料已删除", + "description": "\"{{name}}\" 已移除。", + "errorTitle": "删除个人资料失败", + "errorFallback": "删除个人资料时发生错误。" + }, + "switch": { + "oauthTitle": "已切换到 OAuth", + "oauthDescription": "现在使用 OAuth 身份验证", + "profileTitle": "个人资料已激活", + "profileDescription": "现在使用 {{name}}", + "errorTitle": "切换身份验证失败", + "errorFallback": "切换身份验证方法时发生错误。" + } + }, + "dialog": { + "createTitle": "添加 API 个人资料", + "editTitle": "编辑个人资料", + "description": "配置用于构建的自定义 Anthropic 兼容 API 端点。", + "deleteTitle": "删除个人资料?", + "deleteDescription": "您确定要删除 \"{{name}}\" 吗?此操作无法撤销。", + "cancel": "取消", + "delete": "删除", + "deleting": "删除中..." + } + }, + "modelSelect": { + "placeholder": "选择模型或手动输入", + "placeholderManual": "输入模型名称(例如 claude-sonnet-4-6)", + "searchPlaceholder": "搜索模型...", + "noResults": "没有模型匹配您的搜索", + "discoveryNotAvailable": "模型发现不可用。手动输入模型名称。", + "ollamaLoading": "正在加载 Ollama 模型...", + "ollamaNoModels": "未安装 Ollama 模型", + "ollamaNoModelsHint": "在代理设置 > Ollama 选项卡中安装模型", + "apiKeyOnly": "API 密钥" + }, + "language": { + "label": "界面语言", + "description": "选择应用程序界面的语言" + }, + "scale": { + "presets": "缩放预设", + "presetsDescription": "常见偏好的快速缩放选项", + "fineTune": "微调缩放", + "fineTuneDescription": "以 5% 的增量从 75% 调整到 200%", + "default": "默认", + "comfortable": "舒适", + "large": "大" + }, + "logOrder": { + "label": "日志顺序", + "description": "选择在任务详情视图中显示日志的方式", + "chronological": "按时间顺序(最旧优先)", + "reverseChronological": "按时间倒序(最新优先)" + }, + "gpuAcceleration": { + "label": "GPU 加速", + "description": "使用 WebGL 进行终端渲染(实验性,更多终端时更快)", + "auto": "自动(支持时使用 WebGL)", + "on": "始终开启", + "off": "关闭(默认)", + "helperText": "更改仅适用于新终端" + }, + "general": { + "otherAgentSettings": "其他代理设置", + "otherAgentSettingsDescription": "其他代理配置选项", + "agentFramework": "代理框架", + "agentFrameworkDescription": "用于自主任务的编码框架", + "agentFrameworkAutoClaude": "Aperant", + "aiTerminalNaming": "AI 终端命名", + "aiTerminalNamingDescription": "基于命令自动命名终端(使用 AI 命名模型)", + "featureModelSettings": "功能模型设置", + "featureModelSettingsDescription": "用于洞察、创意和路线图功能和 AI 终端的模型和思维级别", + "model": "模型", + "thinkingLevel": "思维级别", + "paths": "路径", + "pathsDescription": "配置可执行文件和框架路径", + "pythonPath": "Python 路径", + "pythonPathDescription": "Python 可执行文件的路径(留空以自动检测)", + "pythonPathPlaceholder": "python3(默认)", + "gitPath": "Git 路径", + "gitPathDescription": "Git 可执行文件的路径(留空以自动检测)", + "gitPathPlaceholder": "git(默认)", + "githubCLIPath": "GitHub CLI 路径", + "githubCLIPathDescription": "GitHub CLI(gh)可执行文件的路径(留空以自动检测)", + "githubCLIPathPlaceholder": "gh(默认)", + "gitlabCLIPath": "GitLab CLI 路径", + "gitlabCLIPathDescription": "GitLab CLI(glab)可执行文件的路径(留空以自动检测)", + "gitlabCLIPathPlaceholder": "glab(默认)", + "claudePath": "Claude CLI 路径", + "claudePathDescription": "Claude CLI 可执行文件的路径(留空以自动检测)", + "claudePathPlaceholder": "claude(默认)", + "detectedPath": "自动检测", + "detectedVersion": "版本", + "detectedSource": "来源", + "sourceUserConfig": "用户配置", + "sourceVenv": "虚拟环境", + "sourceHomebrew": "Homebrew", + "sourceNvm": "NVM", + "sourceSystemPath": "系统 PATH", + "sourceBundled": "捆绑", + "sourceFallback": "备用", + "notDetected": "未检测到", + "autoClaudePath": "Aperant 路径", + "autoClaudePathDescription": "项目中 auto-claude 目录的相对路径", + "autoClaudePathPlaceholder": "auto-claude(默认)", + "autoNameTerminals": "自动命名终端", + "autoNameTerminalsDescription": "使用 AI 根据终端的活动为终端标签生成描述性名称" + }, + "theme": { + "title": "外观", + "description": "自定义 Aperant 的外观", + "mode": "模式", + "modeDescription": "选择浅色和深色主题", + "light": "浅色", + "dark": "深色", + "system": "系统", + "colorTheme": "颜色主题", + "colorThemeDescription": "选择您的首选调色板" + }, + "devtools": { + "title": "开发者工具", + "description": "配置您的首选 IDE、终端和终端字体设置", + "detecting": "正在检测已安装工具...", + "detectAgain": "重新检测", + "tabTools": "工具", + "tabTerminalFonts": "终端字体", + "ide": { + "label": "首选 IDE", + "description": "Aperant 将在此编辑器中打开工作树", + "placeholder": "选择 IDE...", + "customPath": "自定义 IDE 路径", + "customPathPlaceholder": "/path/to/your/ide" + }, + "terminal": { + "label": "首选终端", + "description": "Aperant 将在此处打开终端会话", + "placeholder": "选择终端...", + "customPath": "自定义终端路径", + "customPathPlaceholder": "/path/to/your/terminal" + }, + "cli": { + "label": "首选 CLI", + "description": "用于 AI 驱动终端会话的 CLI 工具", + "placeholder": "选择 CLI...", + "customPath": "自定义 CLI 路径", + "customPathPlaceholder": "/path/to/your/cli" + }, + "detected": "已检测", + "notInstalled": "未安装", + "detectedSummary": "在您的系统上检测到:", + "noToolsDetected": "未检测到其他工具(将使用 VS Code 和系统终端)", + "autoNameClaude": { + "label": "自动命名 Claude 终端", + "description": "使用 AI 根据您的第一条消息为 Claude 终端生成描述性名称" + }, + "yoloMode": { + "label": "YOLO 模式", + "description": "使用 --dangerously-skip-permissions 标志启动 Claude,绕过所有安全提示。极其谨慎地使用。", + "warning": "此模式会绕过 Claude 的权限系统。仅在您完全信任正在执行的代码时启用。" + } + }, + "updates": { + "title": "更新", + "description": "管理 Aperant 更新", + "appUpdateReady": "应用更新已就绪", + "newVersion": "新版本", + "released": "发布于", + "downloading": "下载中...", + "updateDownloaded": "更新已下载!点击安装以重启并应用更新。", + "installAndRestart": "安装并重启", + "downloadUpdate": "下载更新", + "version": "版本", + "loading": "加载中...", + "checkingForUpdates": "正在检查更新...", + "newVersionAvailable": "有新版本可用:", + "latestVersion": "您正在运行最新版本。", + "viewRelease": "在 GitHub 上查看完整发布", + "unableToCheck": "无法检查更新", + "checkForUpdates": "检查更新", + "autoUpdateProjects": "自动更新项目", + "autoUpdateProjectsDescription": "当有新版本可用时自动更新项目中的 Aperant", + "betaUpdates": "Beta 更新", + "betaUpdatesDescription": "接收带有新功能的预发布 beta 版本(可能不太稳定)", + "stableDowngradeAvailable": "稳定版本可用", + "stableDowngradeDescription": "您当前使用的是 beta 版本。由于您已禁用 beta 更新,因此可以切换到最新的稳定版本。", + "stableVersion": "稳定版本", + "downloadStableVersion": "下载稳定版本", + "readOnlyVolumeTitle": "无法从磁盘映像安装", + "readOnlyVolumeDescription": "Aperant 正从只读磁盘映像(DMG)运行。请将应用拖到应用程序文件夹中,然后从那里重新启动以安装更新。", + "downloadError": "下载更新失败" + }, + "notifications": { + "title": "通知", + "description": "配置默认通知偏好", + "onTaskComplete": "任务完成时", + "onTaskCompleteDescription": "当任务成功完成时通知", + "onTaskFailed": "任务失败时", + "onTaskFailedDescription": "当任务遇到错误时通知", + "onReviewNeeded": "需要审核时", + "onReviewNeededDescription": "当 QA 需要您的审核时通知", + "sound": "声音", + "soundDescription": "通知时播放声音" + }, + "actions": { + "save": "保存设置", + "rerunWizard": "重新运行向导", + "rerunWizardDescription": "再次启动设置向导" + }, + "projectSections": { + "general": { + "title": "常规", + "description": "自动构建和代理配置", + "useClaudeMd": "使用 CLAUDE.md", + "useClaudeMdDescription": "在代理上下文中包含 CLAUDE.md 指令" + }, + "claude": { + "title": "Claude 验证", + "description": "Claude 身份验证" + }, + "linear": { + "title": "Linear", + "description": "Linear 集成", + "integrationTitle": "Linear 集成", + "integrationDescription": "连接到 Linear 进行问题跟踪和任务导入", + "syncDescription": "与 Linear 同步以进行问题跟踪" + }, + "github": { + "title": "GitHub", + "description": "GitHub 问题同步", + "integrationTitle": "GitHub 集成", + "integrationDescription": "连接到 GitHub 进行问题跟踪", + "syncDescription": "与 GitHub 问题同步", + "defaultBranch": { + "label": "默认分支", + "description": "创建任务工作树的基础分支", + "autoDetect": "自动检测(main/master)", + "searchPlaceholder": "搜索分支...", + "noBranchesFound": "未找到分支", + "selectedBranchHelp": "所有新任务都将从 {{branch}} 分支" + }, + "pushNewBranches": { + "label": "自动推送新分支", + "description": "自动将新任务和工作树分支推送到 GitHub 并设置上游跟踪" + } + }, + "gitlab": { + "title": "GitLab", + "description": "GitLab 问题同步", + "integrationTitle": "GitLab 集成", + "integrationDescription": "连接到 GitLab 进行问题跟踪", + "syncDescription": "与 GitLab 问题同步" + }, + "memory": { + "title": "记忆", + "description": "Graphiti 记忆后端", + "integrationTitle": "记忆", + "integrationDescription": "配置用于代理的持久化跨会话记忆", + "syncDescription": "配置持久化记忆" + } + }, + "agentProfile": { + "label": "代理个人资料", + "title": "默认代理个人资料", + "sectionDescription": "选择模型和思维级别的预设配置", + "profilesInfo": "代理个人资料为 Claude 模型和思维级别提供预设配置。创建新任务时,这些设置将作为默认值使用。您始终可以在任务创建向导中覆盖它们。", + "custom": "自定义", + "customConfiguration": "自定义配置", + "customDescription": "选择模型和思维级别", + "phaseConfiguration": "阶段配置", + "phaseConfigurationDescription": "自定义每个阶段的模型和思维级别", + "clickToCustomize": "点击自定义", + "model": "模型", + "thinking": "思维", + "thinkingLevel": "思维级别", + "selectModel": "选择模型", + "selectThinkingLevel": "选择思维级别", + "perPhaseOptimization": "(每阶段优化)", + "resetToDefaults": "重置为默认值", + "resetToProfileDefaults": "重置为 {{profile}} 默认值", + "customized": "已自定义", + "ollamaNotConfigured": "在下方选择模型", + "phaseConfigNote": "这些设置将在使用此个人资料创建新任务时作为默认值使用。您可以在任务创建向导中为每个任务覆盖它们。", + "adaptiveThinking": { + "badge": "自适应", + "tooltip": "Opus 使用自适应思维 - 它在思维级别设置的预算范围内动态决定思考多少。" + }, + "reasoning": { + "adaptive": "自适应", + "budget": "预算", + "reasoning": "推理", + "thinking": "思维", + "noThinking": "(无思维)", + "toggle": { + "off": "关闭", + "on": "开启" + }, + "badgeTooltip": { + "adaptive_effort": "在预算范围内动态决定思考多少", + "thinking_tokens": "具有可配置令牌分配 的基于预算的思维", + "reasoning_effort": "推理努力级别(低/中/高)", + "thinking_toggle": "思维开关", + "none": "不支持扩展思维" + } + }, + "phases": { + "spec": { + "label": "规格创建", + "description": "发现、需求和上下文收集" + }, + "planning": { + "label": "规划", + "description": "实施规划和架构" + }, + "coding": { + "label": "编码", + "description": "实际代码实现" + }, + "qa": { + "label": "QA 审核", + "description": "质量保证和验证" + } + }, + "providerOverrides": { + "title": "提供商模型映射", + "description": "自定义每个提供商对每个简写的使用模型", + "defaultMapping": "默认", + "yourOverride": "您的覆盖", + "shorthand": "简写", + "useDefault": "使用默认", + "resetAll": "重置全部", + "noConnectedProviders": "未连接提供商。在账户设置中添加账户以配置模型映射。", + "equivalentNote": "当非 Anthropic 提供商处于活跃状态时,这些映射决定每个阶段使用哪个模型。" + }, + "providerTabs": { + "moreProviders": "更多", + "noProviders": "未连接提供商。在账户设置中添加账户以配置提供商特定的代理设置。", + "configureFor": "为 {{provider}} 配置代理设置", + "crossProvider": "跨提供商", + "crossProviderDisabledTooltip": "连接两个或更多提供商账户以启用跨提供商功能", + "needsSetup": "需要设置" + }, + "crossProviderTab": { + "title": "跨提供商配置", + "description": "为每个管道阶段分配不同的提供商和模型以获得最大灵活性。", + "activateInfo": "在此配置活跃时创建的任务将使用跨提供商设置。", + "featureModelsTitle": "功能模型", + "featureModelsDescription": "为非管道功能(洞察、创意等)配置模型" + }, + "customProfile": { + "name": "自定义(跨提供商)", + "description": "为每个阶段混合不同的提供商和模型", + "phaseAssignment": "为每个阶段分配提供商和模型" + }, + "ollamaModels": { + "title": "Ollama 模型", + "description": "管理用于 AI 代理任务的本地安装模型", + "installed": "已安装模型", + "installedCount": "{{count}} 个模型", + "noModels": "未安装 LLM 模型", + "recommended": "推荐用于编码", + "recommendedDescription": "为代码生成和推理优化的流行模型", + "download": "下载", + "downloading": "下载中...", + "refresh": "刷新", + "loading": "加载模型中...", + "ollamaNotAvailable": "在账户设置中连接 Ollama 以管理模型" + } + }, + "workspace": { + "roles": { + "backend": "后端", + "frontend": "前端", + "mobile": "移动", + "shared": "共享", + "apiGateway": "API 网关", + "worker": "Worker", + "other": "其他" + } + }, + "integrations": { + "title": "集成", + "description": "管理 Claude 账户和 API 密钥", + "claudeAccounts": "Claude 账户", + "claudeAccountsDescription": "添加多个 Claude 订阅,以便在达到速率限制时自动在它们之间切换。", + "claudeAccountsWarning": "进行身份验证时,请确保在浏览器中登录了正确的 Claude 账户。每个个人资料应使用不同的订阅。", + "noAccountsYet": "尚未配置账户", + "default": "默认", + "active": "活跃", + "authenticated": "已验证", + "needsAuth": "需要验证", + "authenticate": "验证", + "authenticating": "验证中...", + "setActive": "设为活跃", + "manualTokenEntry": "手动令牌输入", + "runSetupToken": "运行 claude 并输入 /login 进行验证", + "tokenPlaceholder": "sk-ant-oat01-...", + "emailPlaceholder": "邮箱(可选,用于显示)", + "saveToken": "保存令牌", + "accountNamePlaceholder": "账户名称(例如:工作、个人)", + "autoSwitching": "自动账户切换", + "autoSwitchingDescription": "自动在 Claude 账户之间切换以避免中断。配置主动监控以便在达到限制前切换。", + "enableAutoSwitching": "启用自动切换", + "masterSwitch": "所有自动交换功能的主开关", + "proactiveMonitoring": "主动监控", + "proactiveDescription": "定期检查用量并在达到限制前切换", + "checkUsageEvery": "检查用量的频率", + "seconds15": "15 秒", + "seconds30": "30 秒(推荐)", + "minute1": "1 分钟", + "disabled": "禁用", + "sessionThreshold": "会话用量阈值", + "sessionThresholdDescription": "当会话用量达到此级别时切换(推荐:95%)", + "weeklyThreshold": "每周用量阈值", + "weeklyThresholdDescription": "当每周用量达到此级别时切换(推荐:99%)", + "reactiveRecovery": "被动恢复", + "reactiveDescription": "在意外达到速率限制时自动交换", + "autoSwitchOnAuthFailure": "验证失败时自动切换", + "autoSwitchOnAuthFailureDescription": "当验证失败时自动切换到另一个已验证的账户", + "apiKeys": "API 密钥", + "apiKeysInfo": "在此设置的密钥作为默认值使用。单个项目可以在其设置中覆盖这些。", + "openaiKey": "OpenAI API 密钥", + "openaiKeyDescription": "Graphiti 记忆后端所需(嵌入)", + "toast": { + "authSuccess": "个人资料已验证", + "authSuccessWithEmail": "已连接为 {{email}}", + "authSuccessGeneric": "验证完成。您现在可以使用此个人资料。", + "authStartFailed": "验证失败", + "addProfileFailed": "添加个人资料失败", + "loadProfilesFailed": "加载个人资料失败", + "deleteProfileFailed": "删除个人资料失败", + "renameProfileFailed": "重命名个人资料失败", + "setActiveProfileFailed": "设置活跃个人资料失败", + "profileCreatedAuthFailed": "个人资料已创建 - 需要验证", + "profileCreatedAuthFailedDescription": "个人资料已添加但无法启动验证。点击登录按钮进行验证。", + "tokenSaved": "令牌已保存", + "tokenSavedDescription": "您的令牌已成功保存。", + "tokenSaveFailed": "保存令牌失败", + "settingsUpdateFailed": "更新设置失败", + "tryAgain": "请重试。", + "terminalCreationFailed": "创建验证终端失败", + "terminalCreationFailedDescription": "无法启动验证过程。{{error}}", + "maxTerminalsReached": "达到最大终端数", + "maxTerminalsReachedDescription": "请关闭一些终端再试。您最多可以打开 12 个终端。", + "terminalError": "终端错误", + "terminalErrorDescription": "创建终端失败:{{error}}", + "authProcessFailed": "验证过程启动失败", + "authProcessFailedDescription": "无法创建验证终端。请重试或检查日志以获取更多详情。" + }, + "alerts": { + "profileCreatedAuthFailed": "个人资料已创建但准备验证失败:{{error}}", + "authPrepareFailed": "准备验证失败:{{error}}", + "authStartFailedMessage": "启动验证失败。请重试。" + } + }, + "accounts": { + "title": "账户", + "description": "管理 Claude 账户和 API 端点", + "tabs": { + "claudeCode": "Claude Code", + "customEndpoints": "自定义端点" + }, + "claudeCode": { + "description": "添加多个 Claude 订阅,以便在达到速率限制时自动在它们之间切换。", + "noAccountsYet": "尚未配置账户", + "default": "默认", + "active": "活跃", + "authenticated": "已验证", + "needsAuth": "需要验证", + "authenticate": "验证", + "authenticating": "验证中...", + "setActive": "设为活跃", + "manualTokenEntry": "手动令牌输入", + "runSetupToken": "运行 claude 并输入 /login 进行验证", + "tokenPlaceholder": "sk-ant-oat01-...", + "emailPlaceholder": "邮箱(可选,用于显示)", + "saveToken": "保存令牌", + "accountNamePlaceholder": "账户名称(例如:工作、个人)" + }, + "customEndpoints": { + "description": "配置自定义 Anthropic 兼容 API 端点", + "addButton": "添加个人资料", + "activeBadge": "活跃", + "customModels": "自定义模型:{{models}}", + "setActive": { + "label": "设为活跃", + "loading": "设置中..." + }, + "switchToOauth": { + "label": "使用 Claude Code", + "loading": "切换中..." + }, + "tooltips": { + "edit": "编辑个人资料", + "deleteActive": "无法删除活跃个人资料", + "deleteInactive": "删除个人资料" + }, + "empty": { + "title": "无自定义端点", + "description": "配置自定义 Anthropic 兼容 API 端点以使用替代提供商。", + "action": "添加个人资料" + }, + "dialog": { + "deleteTitle": "删除个人资料", + "deleteDescription": "您确定要删除 \"{{name}}\" 吗?此操作无法撤销。", + "cancel": "取消", + "delete": "删除", + "deleting": "删除中..." + } + }, + "autoSwitching": { + "title": "自动账户切换", + "description": "自动在账户之间切换以避免中断。配置主动监控以便在达到限制前切换。", + "enableAutoSwitching": "启用自动切换", + "masterSwitch": "所有自动交换功能的主开关", + "proactiveMonitoring": "主动监控", + "proactiveDescription": "定期检查用量并在达到限制前切换", + "sessionThreshold": "会话用量阈值", + "sessionThresholdDescription": "当会话用量达到此级别时切换(推荐:95%)", + "weeklyThreshold": "每周用量阈值", + "weeklyThresholdDescription": "当每周用量达到此级别时切换(推荐:99%)", + "reactiveRecovery": "被动恢复", + "reactiveDescription": "在意外达到速率限制时自动交换", + "autoSwitchOnAuthFailure": "验证失败时自动切换", + "autoSwitchOnAuthFailureDescription": "当验证失败时自动切换到另一个已验证的账户" + }, + "priority": { + "title": "账户优先级顺序", + "description": "拖动以重新排序。系统将按顺序切换到下一个可用账户。", + "tabs": { + "default": "默认", + "crossProvider": "跨提供商" + }, + "crossProviderDescription": "此优先级顺序在跨提供商模式活跃时使用。当多个账户共享一个提供商时,系统会根据此顺序选择最佳可用账户。", + "setActive": "设为活跃", + "setActiveTooltip": "设为主要账户", + "noAccounts": "未配置账户。上方添加账户以设置优先级。", + "noEmail": "无邮箱", + "active": "活跃", + "inUse": "使用中", + "next": "下一个", + "unlimited": "无限", + "unavailable": "不可用", + "typeOAuth": "OAuth", + "typeAPI": "API", + "payPerUse": "按量付费", + "needsAuth": "未验证", + "duplicateUsage": "重复用量模式", + "duplicateUsageHint": "这些 OAuth 个人资料共享匹配的用量值。如果这是意外的,请验证每个个人资料是否关联了不同的账户。", + "needsReauth": "需要重新验证", + "needsReauthHint": "此个人资料的刷新令牌无效。点击重新验证。", + "sessionUsage": "会话用量(5 小时窗口)", + "weeklyUsage": "每周用量(7 天窗口)", + "oauthSection": "Claude 账户(首先循环)", + "apiSection": "备用端点(当所有账户用尽时)", + "tipTitle": "优先级如何工作", + "tipDescription": "Claude 账户包含在您的订阅中,将首先循环使用。API 端点按请求收费,当所有 Claude 账户达到限制时用作备用。", + "status": { + "healthy": "健康", + "moderate": "中等", + "highUsage": "高用量", + "nearLimit": "接近限制", + "rateLimited": "达到速率限制" + } + }, + "toast": { + "loadProfilesFailed": "加载个人资料失败", + "addProfileFailed": "添加个人资料失败", + "deleteProfileFailed": "删除个人资料失败", + "renameProfileFailed": "重命名个人资料失败", + "setActiveProfileFailed": "设置活跃个人资料失败", + "tokenSaved": "令牌已保存", + "tokenSavedDescription": "您的令牌已成功保存。", + "tokenSaveFailed": "保存令牌失败", + "settingsUpdateFailed": "更新设置失败", + "tryAgain": "请重试。" + }, + "alerts": { + "profileCreatedAuthFailed": "个人资料已创建但准备验证失败:{{error}}", + "authPrepareFailed": "准备验证失败:{{error}}", + "authStartFailedMessage": "启动验证失败。请重试。" + } + }, + "providers": { + "card": { + "oauth": "OAuth", + "codex": "Codex", + "codexSubscription": "Codex 订阅", + "claudeCode": "Claude Code", + "claudeCodeSubscription": "Claude Code 订阅", + "zaiCodingPlan": "编码计划", + "zaiUsageBased": "按量付费", + "zaiCodingPlanSubscription": "Z.AI 编码计划", + "apiKey": "API 密钥", + "active": "活跃", + "setDefault": "设为活跃", + "edit": "编辑账户", + "reauth": "重新验证", + "delete": "删除账户", + "showKey": "显示 API 密钥", + "hideKey": "隐藏 API 密钥", + "oauthAccount": "OAuth 账户", + "oauthLinked": "已链接账户", + "noEndpoint": "无端点", + "customModels": "已配置 {{count}} 个模型" + }, + "section": { + "envDetected": "来自环境", + "envCredentialDetected": "从 {{envVar}} 环境变量检测到凭据", + "noAccounts": "未配置账户", + "addOAuth": "添加 OAuth 账户", + "addClaudeCode": "添加 Claude Code 账户", + "addCodexSubscription": "添加 Codex 订阅", + "addCodingPlan": "添加编码计划", + "addUsageBased": "添加按量付费 API 密钥", + "addApiKey": "添加 API 密钥", + "addEndpoint": "添加端点" + }, + "dialog": { + "addTitle": "添加账户", + "editTitle": "编辑账户", + "deleteTitle": "删除账户?", + "deleteDescription": "您确定要删除此账户吗?此操作无法撤销。", + "cancel": "取消", + "close": "关闭", + "delete": "删除", + "deleting": "删除中...", + "save": "保存更改", + "add": "添加账户", + "optional": "(可选)", + "oauthDescription": "使用 OAuth 身份验证连接", + "apiKeyDescription": "添加您的 API 密钥和配置", + "zaiCodingPlanDescription": "添加您的 Z.AI 编码计划 API 密钥以将 GLM 模型与您的订阅一起使用", + "zaiUsageBasedDescription": "添加您的 Z.AI 按量付费 API 密钥以按需访问 GLM 模型", + "codexOAuthDescription": "使用您的 ChatGPT Plus 或 Pro 订阅登录以使用 Codex 模型", + "codexAuthenticating": "正在浏览器中打开 OpenAI 登录...", + "codexWaiting": "等待浏览器验证...", + "codexSuccess": "已使用 OpenAI Codex 验证", + "codexError": "OpenAI 验证失败:{{error}}", + "codexAuthenticate": "使用 OpenAI 验证", + "codexReauthenticate": "使用 OpenAI 重新验证", + "oauthInstructions": "要添加 OAuth 账户,请使用上方 Claude Code 选项卡中的 Claude Code 身份验证流程。OAuth 账户链接到您的 Claude.ai 订阅。", + "oauthAuthenticate": "使用 Anthropic 验证", + "oauthReauthenticate": "使用 Anthropic 重新验证", + "oauthAuthenticating": "正在打开浏览器...", + "oauthWaiting": "等待授权...", + "oauthSuccess": "已验证为 {{email}}", + "oauthError": "验证失败:{{error}}", + "oauthFallback": "使用终端(备用)", + "oauthFallbackDescription": "如果浏览器登录不起作用,请使用嵌入式终端", + "oauthNameRequired": "验证前输入账户名称", + "modelsDescription": "添加此端点可用的模型 ID。这些将显示在模型选择器中。", + "fields": { + "name": "账户名称", + "apiKey": "API 密钥", + "baseUrl": "基础 URL", + "region": "AWS 区域", + "models": "模型" + }, + "placeholders": { + "name": "我的账户", + "apiKey": "sk-...", + "baseUrl": "https://...", + "modelId": "模型 ID(例如 llama-3.1-70b)", + "modelLabel": "显示名称" + }, + "toast": { + "added": "账户已添加", + "updated": "账户已更新", + "error": "保存账户失败", + "duplicateEmail": "此邮箱已注册为 \"{{existingName}}\"", + "createProfileFailed": "创建个人资料失败", + "authPrepareFailed": "准备终端失败", + "unexpectedError": "意外错误" + } + }, + "toast": { + "deleted": "账户已删除", + "deleteFailed": "删除账户失败", + "reauthStarted": "正在打开验证...", + "reauthSuccess": "重新验证成功", + "reauthFailed": "重新验证失败" + }, + "categories": { + "popular": "热门", + "infrastructure": "基础设施", + "local": "本地和自定义" + }, + "ollama": { + "connection": { + "checking": "正在检查 Ollama 连接...", + "connected": "已连接", + "connectedDescription": "Ollama 正在运行并可以使用", + "modelsAvailable": "已安装 {{count}} 个 LLM 模型", + "noModels": "尚未安装 LLM 模型", + "customUrl": "自定义 URL", + "customUrlPlaceholder": "http://localhost:11434", + "notInstalled": "Ollama 未安装", + "notInstalledDescription": "安装 Ollama 以在本地运行开源 AI 模型", + "notRunning": "Ollama 未运行", + "notRunningDescription": "启动 Ollama 服务以连接", + "install": "安装 Ollama", + "retry": "重试", + "learnMore": "了解更多", + "autoConnected": "已自动连接为本地提供商", + "startCommand": "在终端中运行 'ollama serve'" + } + } + }, + "debug": { + "title": "调试和日志", + "description": "访问故障排除的日志和调试信息", + "errorReporting": { + "label": "匿名错误报告", + "description": "发送崩溃报告以帮助改进 Aperant。不会收集任何个人数据或代码。" + }, + "openLogsFolder": "打开日志文件夹", + "copyDebugInfo": "复制调试信息", + "copied": "已复制!", + "loadInfo": "加载调试信息", + "systemInfo": "系统信息", + "logsLocation": "日志位置", + "recentErrors": "最近错误", + "noRecentErrors": "没有最近错误", + "helpTitle": "报告问题", + "helpText": "报告错误时,点击「复制调试信息」以获取帮助我们诊断问题的系统信息和最近错误。" + }, + "projectSettings": { + "noProjectSelected": { + "title": "未选择项目", + "description": "从侧边栏选择一个项目以配置其设置。" + } + }, + "mcp": { + "title": "MCP 服务器概览", + "titleWithProject": "{{projectName}} 的 MCP 服务器概览", + "description": "配置此项目中代理可用的 MCP 服务器", + "descriptionNoProject": "选择一个项目以配置 MCP 服务器", + "serversEnabled": "已启用 {{count}} 个服务器", + "configuration": "MCP 服务器配置", + "configurationHint": "禁用的服务器会减少上下文使用和启动时间", + "noProjectSelected": "未选择项目", + "noProjectSelectedDescription": "从下拉列表中选择项目以查看和配置 MCP 服务器。", + "projectNotInitialized": "项目未初始化", + "projectNotInitializedDescription": "初始化此项目的 Aperant 以配置 MCP 服务器。", + "browserAutomation": "浏览器自动化(仅限 QA 代理)", + "alwaysEnabled": "始终启用", + "addServer": "添加服务器", + "addMcpTo": "将 MCP 添加到 {{agent}}", + "addMcpDescription": "选择一个 MCP 服务器以添加到此代理", + "allMcpsAdded": "所有可用的 MCP 服务器已添加", + "added": "已添加", + "removed": "已移除", + "remove": "移除", + "restore": "恢复", + "noMcpServers": "无 MCP 服务器", + "cannotRemove": "无法移除(必需)", + "servers": { + "context7": { + "name": "Context7", + "description": "库文档查找" + }, + "graphiti": { + "name": "Graphiti 记忆", + "description": "跨会话上下文的知识图谱", + "notConfigured": "需要记忆配置(参见记忆设置)" + }, + "linear": { + "name": "Linear", + "description": "项目管理集成", + "notConfigured": "需要 Linear 集成(参见 Linear 设置)" + }, + "electron": { + "name": "Electron", + "description": "通过 Chrome DevTools 进行桌面应用自动化" + }, + "puppeteer": { + "name": "Puppeteer", + "description": "用于测试的 Web 浏览器自动化" + }, + "autoClaude": { + "name": "Aperant 工具", + "description": "构建进度跟踪" + } + }, + "customServers": "自定义服务器", + "addCustomServer": "添加自定义服务器", + "editCustomServer": "编辑自定义服务器", + "customServerDescription": "添加基于命令或 HTTP 的 MCP 服务器", + "serverType": "服务器类型", + "typeCommand": "命令(npx/npm)", + "typeHttp": "HTTP", + "serverName": "名称", + "serverNamePlaceholder": "我的 MCP 服务器", + "serverDescription": "描述", + "serverDescriptionPlaceholder": "此服务器的用途", + "command": "命令", + "args": "参数", + "argsHint": "空格分隔的参数", + "url": "URL", + "headers": "标头", + "headerName": "标头名称", + "headerValue": "标头值", + "noCustomServers": "未配置自定义服务器。添加一个以与您的代理一起使用。", + "errorNameRequired": "服务器名称是必填项", + "errorIdExists": "具有此 ID 的服务器已存在", + "errorCommandRequired": "基于命令的服务器需要命令", + "errorUrlRequired": "基于 HTTP 的服务器需要 URL", + "testConnection": "测试", + "testing": "测试中...", + "authToken": "身份验证令牌", + "authTokenPlaceholder": "在此粘贴您的 API 令牌或个人访问令牌", + "authTokenHint": "用作授权标头中的 Bearer 令牌", + "advancedHeaders": "附加标头", + "status": { + "healthy": "服务器正在响应", + "unhealthy": "服务器未响应", + "needsAuth": "需要身份验证", + "checking": "检查中...", + "unknown": "状态未知" + }, + "hints": { + "github": "这看起来像是一个 GitHub MCP 服务器。您需要一个具有适当作用域的个人访问令牌。", + "createGithubPat": "创建 GitHub PAT", + "google": "这看起来像是一个 Google API。您需要一个 OAuth 令牌或 API 密钥。", + "createGoogleToken": "创建 Google 凭据", + "anthropic": "这看起来像是一个 Anthropic API。您需要一个 API 密钥。", + "createAnthropicKey": "创建 Anthropic API 密钥", + "openai": "这看起来像是一个 OpenAI API。您需要一个 API 密钥。", + "createOpenaiKey": "创建 OpenAI API 密钥" + } + }, + "terminalFonts": { + "title": "终端字体", + "description": "自定义终端字体外观和行为", + "configActions": "配置:", + "export": "导出 JSON", + "import": "导入 JSON", + "copy": "复制到剪贴板", + "fontConfig": { + "title": "字体配置", + "description": "自定义字体系列、大小、粗细、行高和字母间距", + "fontFamily": "字体系列", + "fontFamilyDescription": "终端文本的主要等宽字体", + "selectFont": "选择字体...", + "searchFont": "搜索字体...", + "noFonts": "未找到字体", + "fontChain": "字体链:", + "fontSize": "字体大小", + "fontSizeDescription": "像素为单位的基础字体大小(10-24px)", + "decreaseFontSize": "将字体大小减少 {{step}}px", + "increaseFontSize": "将字体大小增加 {{step}}px", + "pixels": "像素", + "fontWeight": "字体粗细", + "fontWeightDescription": "字体粗细从 100(细)到 900(黑),以 100 为步长", + "commonWeights": "常用:400(正常)、600(半粗)、700(粗)", + "decreaseFontWeight": "将字体粗细减少 {{step}}", + "increaseFontWeight": "将字体粗细增加 {{step}}", + "lineHeight": "行高", + "lineHeightDescription": "作为字体大小倍数的行高(1.0-2.0)", + "letterSpacing": "字母间距", + "letterSpacingDescription": "字符之间的水平间距(-2 到 5px)" + }, + "cursorConfig": { + "title": "光标配置", + "description": "自定义光标样式、闪烁行为和强调色", + "cursorStyle": "光标样式", + "cursorStyleDescription": "选择终端光标的外观", + "selectStyle": "选择光标样式...", + "currentStyle": "当前:", + "styleBlock": "方块", + "styleBlockDescription": "完整方块光标", + "styleUnderline": "下划线", + "styleUnderlineDescription": "下划线光标", + "styleBar": "竖条", + "styleBarDescription": "竖条光标", + "cursorBlink": "光标闪烁", + "cursorBlinkDescription": "启用或禁用光标闪烁动画", + "blinkStatus": "状态:", + "enabled": "启用", + "disabled": "禁用", + "cursorAccentColor": "光标强调色", + "cursorAccentColorDescription": "选择终端光标的颜色", + "cursorColorLabel": "光标强调色", + "cursorColorDescription": "当前颜色:{{color}}", + "pickColor": "点击选择颜色", + "resetColor": "重置为黑色", + "reset": "重置", + "preview": "预览:" + }, + "performanceConfig": { + "title": "性能设置", + "description": "调整回滚限制和其他性能相关设置", + "presets": "快速预设", + "presetsDescription": "不同用例的常见回滚限制", + "scrollback": "回滚限制", + "scrollbackDescription": "在终端历史中保留的最大行数", + "scrollbackPresets": "快速预设", + "presetMinimal": "最小", + "presetMinimalDescription": "最小历史(1K 行)", + "presetStandard": "标准", + "presetStandardDescription": "标准历史(10K 行)", + "presetExtended": "扩展", + "presetExtendedDescription": "扩展历史(50K 行)", + "presetMaximum": "最大", + "presetMaximumDescription": "最大历史(100K 行)", + "decreaseScrollback": "将回滚减少 {{step}}", + "increaseScrollback": "将回滚增加 {{step}}", + "lines": "行", + "kValue": "{{value}}K", + "scrollbackValue": "{{value}} 行" + }, + "presets": { + "title": "快速预设", + "description": "应用预配置的终端字体设置或保存您自己的设置", + "builtin": "内置预设", + "builtinDescription": "点击以应用预配置的预设", + "vscode": "Consolas 14px,方块光标", + "vscodeName": "VS Code", + "intellij": "JetBrains Mono 13px,方块光标", + "intellijName": "IntelliJ IDEA", + "macos": "SF Mono 13px,方块光标", + "macosName": "macOS 终端", + "ubuntu": "Ubuntu Mono 13px,方块光标", + "ubuntuName": "Ubuntu 终端", + "reset": "重置为默认值", + "resetDescription": "为您的操作系统恢复默认设置", + "resetToOS": "重置为 {{os}} 默认值", + "resetButton": "重置为 OS 默认值", + "custom": "自定义预设", + "customDescription": "将当前配置保存为自定义预设", + "presetNamePlaceholder": "预设名称...", + "savePreset": "将当前配置保存为预设", + "applyPreset": "应用此预设", + "deletePreset": "删除此预设", + "noCustomPresets": "尚无自定义预设。保存当前配置以开始。", + "duplicateName": "具有此名称的预设已存在", + "saved": "预设 \"{{name}}\" 已保存", + "deleted": "预设 \"{{name}}\" 已删除", + "unknownFont": "未知", + "applyFailed": "应用预设 \"{{name}}\" 失败", + "presetNameLabel": "预设名称", + "summary": "{{font}},{{size}}px,{{cursor}} 光标" + }, + "preview": { + "title": "实时预览", + "description": "实时预览您的终端设置(300ms 内更新)", + "ariaLabel": "终端字体预览", + "infoText": "此预览在任何更改的 300ms 内更新,以显示您的设置在实际终端中的外观。" + }, + "importExport": { + "exportSuccess": "设置导出成功", + "exportFailed": "导出设置失败", + "importSuccess": "设置导入成功", + "importFailed": "导入设置失败:无效的 JSON 格式", + "importFailedRange": "导入设置失败:值超出有效范围", + "copySuccess": "设置已复制到剪贴板", + "copyFailed": "复制到剪贴板失败", + "fileTooLarge": "导入文件太大(最大 10KB)", + "readError": "读取文件失败" + }, + "slider": { + "decrease": "将 {{label}} 减少 {{step}}", + "increase": "将 {{label}} 增加 {{step}}", + "currentValue": "当前值:{{value}}" + } + }, + "agents": { + "pr_template_filler": { + "label": "PR 模板填充器", + "description": "AI 从代码更改中填充 GitHub PR 模板" + } + }, + "provider": { + "title": "AI 提供商", + "description": "配置您的 AI 提供商和模型偏好", + "selection": { + "label": "提供商", + "description": "选择用于代理任务的 AI 提供商", + "anthropic": "Anthropic", + "openai": "OpenAI", + "ollama": "Ollama(本地)", + "openrouter": "OpenRouter" + }, + "apiKey": { + "label": "API 密钥", + "description": "所选提供商的 API 密钥", + "placeholder": "输入您的 API 密钥", + "anthropicPlaceholder": "sk-ant-...", + "openaiPlaceholder": "sk-...", + "openrouterPlaceholder": "sk-or-...", + "validation": { + "required": "此提供商的 API 密钥是必填项", + "invalid": "无效的 API 密钥格式" + } + }, + "ollama": { + "endpointUrl": "Ollama 端点 URL", + "endpointDescription": "您的 Ollama 实例正在运行的 URL", + "endpointPlaceholder": "http://localhost:11434", + "validation": { + "urlRequired": "Ollama 需要端点 URL", + "urlInvalid": "无效的 URL 格式(必须是 http:// 或 https://)" + } + }, + "phaseModels": { + "title": "每阶段模型偏好", + "description": "为每个管道阶段配置要使用的模型", + "spec": { + "label": "规格创建模型", + "description": "用于发现、需求和上下文收集的模型" + }, + "planning": { + "label": "规划模型", + "description": "用于实施规划和架构的模型" + }, + "coding": { + "label": "编码模型", + "description": "用于代码实现的模型" + }, + "qa": { + "label": "QA 审核模型", + "description": "用于质量保证和验证的模型" + }, + "placeholder": "选择一个模型", + "useDefault": "使用默认模型" + }, + "testConnection": { + "label": "测试连接", + "testing": "测试中...", + "success": "连接成功", + "failure": "连接失败" + }, + "toast": { + "saved": { + "title": "提供商设置已保存", + "description": "您的 AI 提供商配置已更新。" + }, + "error": { + "title": "保存提供商设置失败", + "description": "保存您的提供商配置时发生错误。" + } + } + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/taskReview.json b/apps/desktop/src/shared/i18n/locales/zh/taskReview.json new file mode 100644 index 0000000000..0418bb6fe2 --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/taskReview.json @@ -0,0 +1,162 @@ +{ + "terminal": { + "openTerminal": "打开终端", + "openInbuilt": "在内置终端中打开", + "openExternal": "在外部终端中打开" + }, + "merge": { + "branchHasNewCommits": "{{branch}} 分支有 {{count}} 个新提交。", + "branchHasNewCommits_other": "{{branch}} 分支有 {{count}} 个新提交。", + "branchHasNewCommitsSinceWorktree": "此工作树创建以来,{{branch}} 分支有 {{count}} 个新提交。", + "branchHasNewCommitsSinceWorktree_other": "此工作树创建以来,{{branch}} 分支有 {{count}} 个新提交。", + "filesNeedMerging": "{{count}} 个文件需要合并。", + "filesNeedMerging_other": "{{count}} 个文件需要合并。", + "filesNeedIntelligentMerging": "{{count}} 个文件需要智能合并:", + "filesNeedIntelligentMerging_other": "{{count}} 个文件需要智能合并:", + "branchHasNewCommitsSinceBuild": "{{branch}} 分支自此构建开始有 {{count}} 个新提交。", + "branchHasNewCommitsSinceBuild_other": "{{branch}} 分支自此构建开始有 {{count}} 个新提交。", + "filesNeedAIMergeDueToRenames": "{{count}} 个文件由于 {{renameCount}} 个文件重命名需要 AI 合并。", + "filesNeedAIMergeDueToRenames_other": "{{count}} 个文件由于 {{renameCount}} 个文件重命名需要 AI 合并。", + "filesNeedAIMergeDueToRenamesPlural": "{{count}} 个文件由于 {{renameCount}} 个文件重命名需要 AI 合并。", + "filesNeedAIMergeDueToRenamesPlural_other": "{{count}} 个文件由于 {{renameCount}} 个文件重命名需要 AI 合并。", + "fileRenamesDetected": "检测到 {{count}} 个文件重命名 - AI 将处理合并。", + "fileRenamesDetected_other": "检测到 {{count}} 个文件重命名 - AI 将处理合并。", + "filesRenamedOrMoved": "文件可能被重命名或移动 - AI 将处理合并。", + "alreadyMergedTitle": "更改已存在于您的分支中", + "alreadyMergedDescription": "这些更改似乎已存在于您当前的分支中。您可以安全地将此任务标记为完成。", + "alreadyMergedTooltip": "任务的更改已存在于您的分支中。标记为完成将清理工作树而不进行合并。", + "matchingFiles": "匹配的文件", + "supersededTitle": "更改已被取代", + "supersededDescription": "您当前的分支有此更改的更新版本。考虑放弃此任务或查看比较。", + "supersededCompareTooltip": "查看详细比较以了解当前分支与此任务的更改有何不同。", + "supersededDiscardTooltip": "移除此任务的工作树,因为不再需要这些更改。", + "status": { + "branchDiverged": "分支已分离", + "aiWillResolve": "AI 将解决", + "filesRenamed": "文件已重命名", + "branchBehind": "分支落后", + "readyToMerge": "准备合并", + "files": "文件", + "file": "文件", + "conflict": "冲突", + "conflicts": "冲突", + "details": "详情", + "refresh": "刷新", + "stageOnly": "仅暂存(在 IDE 中审核后再提交)", + "discardBuild": "放弃构建" + }, + "buttons": { + "stageWithAIMerge": "使用 AI 合并暂存", + "mergeWithAI": "使用 AI 合并", + "stageTo": "暂存到 {{branch}}", + "mergeTo": "合并到 {{branch}}", + "resolving": "解决中...", + "staging": "暂存中...", + "merging": "合并中...", + "completing": "完成中..." + }, + "actions": { + "markAsDone": "标记为完成", + "discardTask": "放弃任务", + "viewComparison": "查看比较" + } + }, + "pr": { + "title": "创建拉取请求", + "description": "推送分支并为\u201C{{taskTitle}}\u201D创建拉取请求", + "errors": { + "unknown": "创建拉取请求时发生未知错误", + "invalidBranchName": "分支名称包含无效字符。仅使用字母、数字、连字符(-)、下划线(_)和正斜杠(/)。", + "emptyTitle": "拉取请求标题不能为空。" + }, + "success": { + "created": "拉取请求创建成功!", + "alreadyExists": "此分支已存在拉取请求" + }, + "actions": { + "retry": "重试", + "creating": "创建 PR 中...", + "create": "创建拉取请求" + }, + "labels": { + "sourceBranch": "源分支", + "targetBranch": "目标分支", + "commits": "提交", + "changes": "更改", + "prTitle": "PR 标题(可选)", + "draftPR": "创建为草稿 PR", + "unknown": "未知" + }, + "hints": { + "targetBranch": "留空以使用默认分支", + "prTitle": "留空以使用任务标题" + } + }, + "mergeProgress": { + "stages": { + "analyzing": "分析更改", + "detectingConflicts": "检测冲突", + "resolving": "解决冲突", + "validating": "验证合并", + "complete": "合并完成", + "error": "合并失败", + "stalled": "合并停滞" + }, + "conflictCounter": "找到 {{found}},已解决 {{resolved}}", + "currentFile": "当前文件", + "viewLogs": "查看日志", + "hideLogs": "隐藏日志", + "logTypes": { + "info": "信息", + "warning": "警告", + "error": "错误", + "conflict": "冲突", + "resolution": "解决" + }, + "completionMessage": "所有更改已成功合并。", + "errorMessage": "合并过程中发生错误。" + }, + "stagedSuccess": { + "title": "更改已成功暂存", + "aiCommitMessage": "AI 生成的提交消息", + "copied": "已复制!", + "copy": "复制", + "editHint": "根据需要编辑,然后复制并配合", + "nextSteps": "后续步骤:", + "reviewChanges": "使用以下命令审核暂存的更改", + "commitWhenReady": "准备好后提交:", + "pushToRemote": "满意后推送到远程", + "cleaningUp": "清理中...", + "markingDone": "标记完成中...", + "resetting": "重置中...", + "deleteWorktreeAndMarkDone": "删除工作树并标记完成", + "markDoneOnly": "仅标记完成", + "markAsDone": "标记为完成", + "reviewAgain": "重新审核", + "commitMessagePlaceholder": "提交消息...", + "worktreeExplanation": "\u201C删除工作树并标记完成\u201D清理隔离的工作空间。\u201C仅标记完成\u201D保留它以供参考。", + "errors": { + "failedToDeleteWorktree": "删除工作树失败", + "worktreeDeletedButStatusFailed": "工作树已删除但更新任务状态失败:{{error}}", + "failedToMarkAsDone": "标记为完成失败", + "failedToResetStagedState": "重置暂存状态失败" + } + }, + "bulkPR": { + "title": "创建拉取请求", + "description": "为 {{count}} 个所选任务创建拉取请求", + "creating": "正在创建 PR {{current}}/{{total}}...", + "creatingPR": "创建 PR {{current}}/{{total}}", + "resultsDescription": "{{success}} 成功,{{failed}} 失败", + "tasksToProcess": "要处理的任务", + "targetBranchHint": "留空以使用每个任务的默认分支。这将应用于所有 PR。", + "createAll": "创建 {{count}} 个 PR", + "completed": "已完成", + "succeeded": "成功", + "failed": "失败", + "skipped": "跳过", + "alreadyExisted": "已存在", + "noWorktree": "未找到此任务的工作树", + "resultsDescriptionWithSkipped": "{{success}} 成功,{{skipped}} 跳过,{{failed}} 失败" + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/tasks.json b/apps/desktop/src/shared/i18n/locales/zh/tasks.json new file mode 100644 index 0000000000..a37e03383a --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/tasks.json @@ -0,0 +1,357 @@ +{ + "refreshTasks": "刷新任务", + "status": { + "backlog": "待办", + "queue": "队列", + "todo": "待办", + "in_progress": "进行中", + "review": "审核", + "prCreated": "PR 已创建", + "complete": "完成", + "archived": "已归档" + }, + "actions": { + "start": "开始", + "stop": "停止", + "recover": "恢复", + "resume": "恢复", + "archive": "归档", + "delete": "删除", + "view": "查看详情", + "viewPR": "查看 PR", + "moveTo": "移动到", + "taskActions": "任务操作", + "selectTask": "选择任务:{{title}}" + }, + "labels": { + "running": "运行中", + "aiReview": "AI 审核", + "needsReview": "需要审核", + "pending": "待定", + "stuck": "卡住", + "incomplete": "未完成", + "recovering": "恢复中...", + "needsRecovery": "需要恢复", + "needsResume": "需要恢复" + }, + "reviewReason": { + "completed": "已完成", + "hasErrors": "有错误", + "qaIssues": "QA 问题", + "approvePlan": "批准计划", + "stopped": "已停止" + }, + "tooltips": { + "archiveTask": "归档任务", + "archiveAllDone": "归档所有已完成的任务", + "viewPR": "在浏览器中打开拉取请求" + }, + "creation": { + "title": "创建新任务", + "description": "描述您想要构建的内容", + "placeholder": "描述您的任务..." + }, + "empty": { + "title": "尚无任务", + "description": "创建您的第一个任务以开始" + }, + "columns": { + "backlog": "规划", + "queue": "队列", + "in_progress": "进行中", + "ai_review": "AI 审核", + "human_review": "人工审核", + "done": "完成", + "pr_created": "PR 已创建", + "error": "错误" + }, + "kanban": { + "emptyBacklog": "无计划任务", + "emptyBacklogHint": "添加任务以开始", + "emptyQueue": "队列为空", + "emptyQueueHint": "当并行任务限制达到时,任务将在此等待", + "emptyInProgress": "无运行任务", + "emptyInProgressHint": "从规划开始一个任务", + "emptyAiReview": "无审核任务", + "emptyAiReviewHint": "AI 将审核已完成的任务", + "emptyHumanReview": "无待审核任务", + "emptyHumanReviewHint": "任务在此等待您的批准", + "emptyDone": "无已完成任务", + "emptyDoneHint": "已批准的任务显示在这里", + "emptyDefault": "无任务", + "dropHere": "拖放到这里", + "showArchived": "显示已归档", + "addTaskAriaLabel": "添加新任务到待办", + "queueAllAriaLabel": "将所有任务移至队列", + "closeTaskDetailsAriaLabel": "关闭任务详情", + "editTask": "编辑任务", + "cannotEditWhileRunning": "任务运行期间无法编辑", + "worktreeCleanupTitle": "工作树清理", + "worktreeCleanupStaged": "此任务已暂存并有工作树。您想清理工作树吗?", + "worktreeCleanupNotStaged": "此任务有包含未合并更改的工作树。删除工作树以标记为完成,或取消以首先审核更改。", + "keepWorktree": "保留工作树", + "deleteWorktree": "删除工作树并标记完成", + "refreshTasks": "刷新任务", + "queueSettings": "队列设置", + "orderSaveFailedTitle": "重新排序未保存", + "orderSaveFailedDescription": "您的任务顺序更改已应用但无法保存到存储。刷新后将丢失。", + "selectAll": "全选", + "deselectAll": "取消全选", + "selectedCount": "已选 {{count}} 项", + "selectedCountOne": "已选 {{count}} 个任务", + "selectedCountOther": "已选 {{count}} 个任务", + "createPRs": "创建 PR", + "deleteSelected": "删除", + "deleteConfirmTitle": "删除所选任务", + "deleteConfirmDescription": "您确定要永久删除这些任务吗?", + "deleteWarning": "此操作无法撤销。所有任务文件,包括规格、实施计划和任何生成的代码都将从项目中永久删除。", + "tasksToDelete": "要删除的任务", + "deleteConfirmButton": "删除 {{count}} 个任务", + "deleteSuccess": "成功删除 {{count}} 个任务", + "deleteError": "部分任务删除失败", + "clearSelection": "清除选择", + "collapseColumn": "折叠列", + "expandColumn": "展开列", + "resizeColumn": "调整列宽", + "lockColumn": "锁定列宽", + "unlockColumn": "解锁列宽", + "columnLocked": "列宽已锁定", + "expandAll": "展开所有列" + }, + "queue": { + "limitReached": "已达到并行任务限制({{current}}/{{max}})。任务已移至队列。", + "movedToQueue": "任务已移至队列。", + "autoPromoted": "任务已从队列自动提升到进行中。", + "capacityAvailable": "进行中有 {{count}} 个可用槽位。", + "queueAll": "全部加入队列", + "queueAllSuccess": "已将 {{count}} 个任务移至队列。", + "settings": { + "title": "队列设置", + "description": "配置\u201C进行中\u201D看板上可并行运行的最大任务数", + "maxParallelLabel": "最大并行任务数", + "minValueError": "必须至少为 1", + "maxValueError": "不能超过 10", + "hint": "当达到此限制时,新任务将在移至\u201C进行中\u201D之前在队列中等待", + "saved": "队列设置已保存", + "saveFailed": "保存队列设置失败", + "retry": "请重试" + } + }, + "execution": { + "phases": { + "idle": "空闲", + "planning": "规划", + "coding": "编码", + "rate_limit_paused": "速率限制暂停", + "auth_failure_paused": "需要验证", + "reviewing": "审核", + "fixing": "修复", + "complete": "完成", + "failed": "失败" + }, + "labels": { + "interrupted": "已中断", + "progress": "进度", + "entry": "条目", + "entries": "条目" + }, + "shortPhases": { + "plan": "计划", + "code": "编码", + "qa": "QA" + } + }, + "files": { + "title": "文件", + "tab": "文件", + "noSpecPath": "无规格文件可用", + "noFiles": "未找到文件", + "loading": "加载文件...", + "loadingContent": "加载内容...", + "errorLoading": "加载文件失败", + "errorLoadingContent": "加载文件内容失败", + "retry": "重试", + "selectFile": "选择一个文件以查看其内容", + "openInIDE": "在 IDE 中打开" + }, + "metadata": { + "fastMode": "快速", + "severity": "严重性", + "pullRequest": "拉取请求", + "showMore": "显示更多", + "showLess": "显示更少" + }, + "images": { + "removeImageAriaLabel": "移除图片 {{filename}}", + "pasteHint": "提示:直接使用 {{shortcut}} 粘贴截图以添加参考图片。" + }, + "imagePreview": { + "close": "关闭预览", + "unavailable": "图片不可用", + "description": "{{filename}} 的预览", + "doubleClickHint": "双击以放大", + "lowResolution": "低分辨率预览" + }, + "notifications": { + "backgroundTaskTitle": "任务在后台继续", + "backgroundTaskDescription": "任务仍在运行。您可以重新打开此对话框以监控进度。" + }, + "wizard": { + "createTitle": "创建新任务", + "createDescription": "描述您想要构建的内容。AI 将分析您的请求并创建详细规格。", + "descriptionPlaceholder": "描述您想要实现的功能、错误修复或改进。尽可能具体地说明需求、约束和预期行为。输入 @ 以引用文件。", + "draftRestored": "草稿已恢复", + "startFresh": "重新开始", + "hideFiles": "隐藏文件", + "browseFiles": "浏览文件", + "creating": "创建中...", + "createTask": "创建任务", + "worktreeNotice": { + "title": "隔离的工作空间", + "description": "此任务在隔离的 git 工作树中运行。在您选择合并之前,您的 main 分支保持安全。" + }, + "gitOptions": { + "title": "Git 选项(可选)", + "baseBranchLabel": "基础分支(可选)", + "useProjectDefault": "使用项目默认值", + "useProjectDefaultWithBranch": "使用项目默认值({{branch}})", + "searchBranches": "搜索分支...", + "noBranchesFound": "未找到分支", + "helpText": "覆盖此任务的工作树将从中分支的分支。留空以使用项目的配置默认分支。", + "pushNewBranchesLabel": "自动推送新分支", + "pushNewBranchesDescription": "将此任务分支发布到 GitHub 并自动设置上游跟踪。禁用以保持本地唯一。", + "useWorktreeLabel": "使用隔离的工作空间(推荐)", + "useWorktreeDescription": "在单独的 git 工作树中创建更改,以便在合并之前进行安全审核。禁用以直接在您的项目中构建(更快但风险更大)。" + }, + "errors": { + "createFailed": "创建任务失败。请重试。", + "startFailed": "启动任务失败" + } + }, + "feedback": { + "dragDropHint": "拖放图片或粘贴截图", + "imageAdded": "图片添加成功", + "maxImagesError": "最多允许 {{count}} 张图片", + "invalidTypeError": "无效的图片类型。允许:{{types}}", + "removeImage": "移除图片", + "processingError": "处理图片失败" + }, + "review": { + "mergeTooltip": "将更改从任务的工作树分支合并回您的基础分支。AI 将解决任何冲突。然后您可以选择保留或移除工作树。" + }, + "edit": { + "title": "编辑任务", + "description": "更新任务详情,包括标题、描述、分类、图片和设置。更改将保存到规格文件。", + "saveChanges": "保存更改", + "errors": { + "updateFailed": "更新任务失败。请重试。" + } + }, + "form": { + "description": "描述", + "descriptionPlaceholder": "描述您想要实现的功能、错误修复或改进。尽可能具体地说明需求、约束和预期行为。", + "imageAddedSuccess": "图片添加成功!", + "taskTitle": "任务标题", + "titlePlaceholder": "留空以从描述自动生成", + "titleHelpText": "如果留空,将自动生成简短描述性标题。", + "classificationOptional": "分类(可选)", + "requireReviewLabel": "编码前需要人工审核", + "requireReviewDescription": "启用后,系统将提示您审核规格和实施计划,然后再开始编码阶段。这允许您批准、请求更改或提供反馈。", + "fastModeLabel": "快速模式", + "fastModeDescription": "相同的 Opus 4.6 模型,输出更快。每令牌成本更高。", + "fastModeNotice": "需要您的 Claude 订阅启用\u201C额外使用\u201D。", + "errors": { + "descriptionRequired": "请提供描述", + "maxImagesReached": "最多允许 5 张图片", + "invalidImageType": "无效的图片类型。允许:PNG、JPEG、GIF、WebP", + "processPasteFailed": "处理粘贴的图片失败", + "processDropFailed": "处理拖放的图片失败" + }, + "classification": { + "category": "类别", + "selectCategory": "选择类别", + "priority": "优先级", + "selectPriority": "选择优先级", + "complexity": "复杂性", + "selectComplexity": "选择复杂性", + "impact": "影响", + "selectImpact": "选择影响", + "helpText": "这些标签有助于组织和优先处理任务。它们是可选的,但对筛选很有用。", + "values": { + "category": { + "feature": "功能", + "bug_fix": "错误修复", + "refactoring": "重构", + "documentation": "文档", + "security": "安全" + }, + "priority": { + "low": "低", + "medium": "中", + "high": "高", + "urgent": "紧急" + }, + "complexity": { + "trivial": "微不足道", + "small": "小", + "medium": "中", + "large": "大", + "complex": "复杂" + }, + "impact": { + "low": "低影响", + "medium": "中影响", + "high": "高影响", + "critical": "关键影响" + } + } + } + }, + "subtasks": { + "untitled": "无标题子任务", + "expandAll": "展开全部", + "collapseAll": "折叠全部" + }, + "bulkPR": { + "selectAllInColumn": "选择列中的所有任务", + "deselectAllInColumn": "取消选择列中的所有任务", + "selectionMode": "选择模式活跃", + "exitSelectionMode": "退出选择模式", + "noTasksToSelect": "没有可选择的任务", + "confirmBulkAction": "确认对 {{count}} 个任务的批量操作", + "processingTasks": "处理所选任务..." + }, + "screenshot": { + "title": "捕获截图", + "description": "选择屏幕或窗口以捕获为参考图片", + "capture": "捕获", + "capturing": "捕获中...", + "noSources": "未找到屏幕或窗口", + "errors": { + "getSources": "获取截图源失败", + "fetchSources": "获取截图源失败", + "capture": "捕获截图失败", + "captureFailed": "捕获截图失败" + }, + "devMode": { + "title": "截图捕获不可用", + "description": "由于系统权限限制,屏幕捕获在开发模式下不可用。", + "hint": "使用外部截图工具并使用 {{shortcut}} 直接粘贴到任务描述中。" + } + }, + "deleteDialog": { + "title": "删除任务", + "confirmMessage": "您确定要删除", + "destructiveWarning": "此操作无法撤销。所有任务文件,包括规格、实施计划和任何生成的代码都将永久删除。", + "checkingChanges": "检查未提交的更改...", + "uncommittedChanges": "此任务的工作树有 {{count}} 个未提交的文件", + "uncommittedChangesHint": "这些更改尚未提交或合并。删除此任务将永久丢弃工作树中的所有未提交工作。", + "cancel": "取消", + "deletePermanently": "永久删除", + "deleting": "删除中..." + }, + "referenceImages": { + "title": "参考图片(可选)", + "description": "添加屏幕截图或设计等视觉参考,以帮助 AI 理解您的需求。" + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/terminal.json b/apps/desktop/src/shared/i18n/locales/zh/terminal.json new file mode 100644 index 0000000000..456a0c26dc --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/terminal.json @@ -0,0 +1,58 @@ +{ + "expand": { + "expand": "展开终端", + "collapse": "折叠终端" + }, + "resume": { + "pending": "可恢复", + "pendingTooltip": "点击以恢复之前的 Claude 会话", + "resumeAllSessions": "恢复全部" + }, + "auth": { + "terminalTitle": "验证:{{profileName}}", + "maxTerminalsReached": "无法打开验证终端:已达到最大终端数。请先关闭一个终端。" + }, + "swap": { + "inProgress": "正在切换个人资料...", + "resumingSession": "正在恢复 Claude 会话...", + "sessionResumed": "会话已在新的个人资料下恢复", + "resumeFailed": "无法恢复会话。您可以开始一个新的会话。", + "noSession": "个人资料已切换。没有要恢复的活跃会话。", + "migrationFailed": "个人资料已切换,但会话迁移失败。开始新的终端。" + }, + "worktree": { + "create": "工作树", + "createNew": "新建工作树", + "existing": "终端工作树", + "taskWorktrees": "任务工作树", + "otherWorktrees": "其他", + "createTitle": "创建终端工作树", + "createDescription": "为此终端创建一个隔离的工作空间。所有工作将在工作树目录中进行。", + "name": "工作树名称", + "namePlaceholder": "my-feature", + "nameRequired": "工作树名称是必填项", + "nameInvalid": "名称必须以字母或数字开头和结尾", + "nameHelp": "小写字母、数字、连字符和下划线(空格变为连字符)", + "associateTask": "关联到任务", + "selectTask": "选择任务...", + "noTask": "无任务(独立工作树)", + "createBranch": "创建 Git 分支", + "branchHelp": "创建分支:{{branch}}", + "baseBranch": "基础分支", + "selectBaseBranch": "选择基础分支...", + "searchBranch": "搜索分支...", + "noBranchFound": "未找到分支", + "useProjectDefault": "使用项目默认值({{branch}})", + "baseBranchHelp": "创建工作树的分支", + "openInIDE": "在 IDE 中打开", + "maxReached": "已达到 12 个终端工作树的最大数量", + "alreadyExists": "此名称的工作树已存在", + "searchPlaceholder": "搜索工作树...", + "noResults": "未找到工作树", + "deleteTitle": "删除工作树?", + "deleteDescription": "这将永久删除工作树及其分支。任何未提交的更改都将丢失。", + "detached": "(分离的)", + "remotePushFailed": "远程跟踪未设置", + "remotePushFailedDescription": "工作树已创建,但无法将分支推送到远程。您可能需要手动运行 git push -u。" + } +} diff --git a/apps/desktop/src/shared/i18n/locales/zh/welcome.json b/apps/desktop/src/shared/i18n/locales/zh/welcome.json new file mode 100644 index 0000000000..9f6223fa8d --- /dev/null +++ b/apps/desktop/src/shared/i18n/locales/zh/welcome.json @@ -0,0 +1,17 @@ +{ + "hero": { + "title": "欢迎使用 Aperant", + "subtitle": "使用 AI 驱动的代理自主构建软件" + }, + "actions": { + "newProject": "新建项目", + "openProject": "打开项目" + }, + "recentProjects": { + "title": "最近的项目", + "empty": "尚无项目", + "emptyDescription": "创建新项目或打开现有项目以开始", + "openFolder": "打开文件夹", + "openProjectAriaLabel": "打开项目 {{name}}" + } +}