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}}"
+ }
+}