Files
paseo/packages/app/src/i18n/resources/zh-CN.ts
T
Mohamed Boudra e1c769c018 Make password-protected daemons work across local and remote connections (#5393)
* feat(auth): authenticate daemon clients through hello

Give local CLI and desktop clients a per-run credential while remote clients send the host password inside the protocol. Keep relay passwordless admission for this mobile release so existing saved hosts keep working until the follow-up enforcement release.

Move password recovery for saved hosts into host settings and keep pairing credentials in the add flow. Include isolated web QA evidence for both flows.

* fix(auth): preserve Hub bootstrap and local credential expectations

Hub-owned sockets already carry admission; keep their hello handling synchronous through session bootstrap while resolving credentials asynchronously for ordinary sockets. Keep the resolver out of lightweight configuration imports.

Update CLI expectations for same-home credentials, let a rejected connection yield to another usable connection, and clear pairing secrets when add-flow targets change.

* fix(pairing): retain passwords across edits to the same target

Track the last valid pairing host while a URI is edited. This preserves an entered password for whitespace and partial edits but clears it when a different host becomes the target.

* test(auth): align local credential checks across platforms

Expect the CLI to authenticate through the credential in its selected home, and verify POSIX file modes only where Node exposes them.

* feat(app): move host password into a settings row with a modal

The host page rendered an always-visible password form above Name on every
host. Replace it with a Password row under a Security section below
Appearance; tapping it opens a modal with Save and, when a password is saved,
Clear. The connection-error callout keeps its guidance and gains a Set
password button that opens the same modal. Drop the unused
pairing.hostPassword body/reopen/saveError strings.

* chore: remove committed QA screenshots

QA evidence stays out of the repository; the PR body describes it in words.

* feat(app): keep the host password out of the host page

The saved password is connection data, entered only when a host is added. A
Password setting on the host page reads as the daemon's own password, so the
row, modal, and callout button are gone. A rejected host shows the daemon's
reason with guidance to remove the host and add it again with the password.
useHostMutations no longer exposes setHostPassword; relay imports still set it
inside the runtime.

* feat(app): show host connection errors in an error alert

HostConnectionError renders the existing Alert with the connection error as
its title. Auth rejections add the re-add guidance as the description; other
errors show the title only. The Overview and Connections pages share it.

* style(app): soften alert borders to half-opacity accent

* feat(app): size alerts on the button scale

Alert takes a size prop (xs/sm/md/lg, default md) whose geometry lives next to
the button's in control-geometry: one font size for title and description, the
button icon size centered on the first text line, button padding and radius,
and a one-line alert as tall as the button of the same size. Consumers pick
sm among settings rows, cards, panels, and modals, and md when the alert is
the whole page or sheet state.

* style(app): roomier, rounder alerts with a tight title block

Alert sm padding returns to the original 12/16 and every size is at least
borderRadius.xl. Title and description sit a small gap apart with no line
height override. The icon slot carries a zero-width text strut in the alert's
font so the icon centers on the first line for titled, title-only, and
description-only alerts.

* refactor(app): align the alert icon with a centered lead row

Drop the zero-width strut. The icon and the alert's first text (title, else
description) share one row centered on each other; the description and actions
sit below, indented by the icon slot width plus gap so they start at the lead
text's left edge.

* refactor(app): drop the unused Alert icon override
2026-09-26 19:53:43 +02:00

2678 lines
93 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { en, type TranslationResources } from "./en";
import { pluginSettings } from "./plugin-settings";
export const zhCN: TranslationResources = {
paneFind: {
connectionFailure: "无法搜索此聊天。请检查主机连接后重试。",
historyChangedFailure: "搜索期间聊天已更改。请重新搜索。",
revealFailure: "无法显示此匹配项。请重试。",
searching: "搜索中…",
loading: "加载中…",
failed: "失败",
retry: "重试",
title: "查找",
placeholder: "在窗格中查找",
close: "关闭查找",
matches: "查找结果",
previous: "上一个匹配项",
next: "下一个匹配项",
toggleReplace: "切换替换",
replaceWith: "替换为",
replace: "替换",
replaceAll: "全部替换",
noMatches: "无匹配项",
position: "{{current}} / {{total}}",
total: "{{total}} 个匹配项",
},
common: {
back: "返回",
loading: "加载中...",
actions: {
back: "返回",
cancel: "取消",
close: "关闭",
copy: "复制",
copyLine: "复制行",
dismiss: "关闭",
reload: "重新加载",
retry: "重试",
search: "搜索",
select: "选择",
selectAll: "全选",
},
placeholders: {
search: "搜索...",
},
empty: {
noResults: "没有结果",
noOptionsMatchSearch: "没有匹配搜索的选项。",
},
states: {
loading: "加载中...",
starting: "正在开始...",
copied: "已复制",
copiedLabel: "已复制 {{label}}",
downloadComplete: "下载完成",
downloadFailed: "下载失败",
},
errors: {
error: "错误",
unableToSave: "无法保存",
unableToCopy: "无法复制",
nameRequired: "名称必填",
daemonUnavailable: "Daemon 不可用",
daemonClientUnavailable: "Daemon client 不可用",
daemonClientDisconnected: "Daemon client 已断开连接",
noFileFound: "未找到 {{token}} 对应的文件",
unexpectedDictationError: "处理听写时发生意外错误。",
},
connectionStatus: {
online: "在线",
connecting: "正在连接",
offline: "离线",
error: "错误",
idle: "空闲",
},
},
shell: {
menu: {
toggleSidebar: "切换侧边栏",
open: "打开菜单",
close: "关闭菜单",
},
commandCenter: {
placeholder: "搜索命令、文件、工作区和 Agent...",
filePlaceholder: "搜索文件...",
searchingFiles: "正在搜索文件...",
noMatches: "没有匹配项",
actions: "操作",
files: "文件",
workspaces: "工作区",
agents: "Agents",
newAgent: "新建 Agent",
open: "打开{{name}}",
openInSidePane: "在侧边面板中打开{{name}}",
openInFocusedPane: "在当前窗格中打开{{name}}",
addProject: "添加 project",
home: "首页",
groupByProject: "按项目分组",
groupByStatus: "按状态分组",
modelGroupLabel: "模型",
modelSearchKeywords: "切换模型 更改模型 设置模型 选择模型",
thinkingGroupLabel: "思考",
thinkingSearchKeywords: "推理 努力 思考",
modeGroupLabel: "模式",
modeSearchKeywords: "访问 权限 批准 模式",
planModeGroupLabel: "计划模式",
planModeSearchKeywords: "计划 规划 计划模式",
fastModeGroupLabel: "快速",
fastModeSearchKeywords: "快速 速度 低延迟",
settingOn: "开",
settingOff: "关",
},
},
composer: {
placeholders: {
desktop: "给 Agent 发消息,标记 @files,或使用 /commands 和 /skills",
mobile: "发消息,@files,/commands",
fallback: "输入消息...",
terminal: "Prompt",
},
input: {
accessibilityLabel: "给 Agent 发消息...",
terminalAccessibilityLabel: "Terminal prompt",
focusHint: "{{shortcut}} 聚焦",
addAttachment: "添加附件",
interruptAgent: "中断 Agent",
queueMessage: "消息排队",
sendAndInterrupt: "发送并中断",
sendAndSteer: "发送并引导",
sendMessage: "发送消息",
queue: "排队",
send: "发送",
},
cancel: {
cancelingAgent: "正在取消 Agent",
stopAgent: "停止 Agent",
interrupt: "中断",
},
voice: {
enableVoiceMode: "启用语音模式",
voiceMode: "语音模式",
unmuteVoiceMode: "取消静音语音模式",
muteVoiceMode: "静音语音模式",
stopDictation: "停止听写",
startDictation: "开始听写",
unmuteVoice: "取消静音",
muteVoice: "静音",
dictation: "听写",
interruptBeforeVoice: "启动语音模式前请先中断 Agent",
},
attachments: {
addImage: "添加图片",
pasteImage: "粘贴图片",
addFile: "Upload file",
addIssueOrPr: "添加 issue 或 PR",
addIssueOrPr_mr: "添加 issue 或 MR",
dropImagesHere: "将图片拖放到这里",
dropFilesHere: "Drop files here",
editQueuedMessage: "编辑排队消息",
sendQueuedMessageNow: "立即发送排队消息",
openImage: "打开图片附件",
removeImage: "移除图片附件",
removeFile: "Remove file attachment",
openGithub: "打开 {{kind}} {{number}}",
removeGithub: "移除 {{kind}} {{number}}",
element: "元素",
openBrowserElement: "打开浏览器元素附件",
removeBrowserElement: "移除浏览器元素附件",
openReview: "打开 review 附件",
removeReview: "移除 review 附件",
},
errors: {
failedToSend: "发送消息失败",
failedToCreateAgent: "创建 Agent 失败",
noHostSelected: "未选择 Host",
initialPromptRequired: "初始 prompt 必填",
alreadyLoading: "正在加载",
uploadFailed: "Failed to upload file",
noClipboardImage: "当前剪贴板中没有图片。请尝试通过键盘粘贴。",
pasteImageFailed: "无法粘贴图片",
fileTooLarge: "{{fileName}} is too large (max {{size}})",
},
clientCommands: {
archiveAgent: "归档当前 Agent",
freshDraft: "归档此 Agent 并开始新的草稿",
},
github: {
searching: "正在搜索...",
noResults: "没有结果。",
searchPlaceholder: "搜索 issues 和 PRs...",
searchPlaceholder_mr: "搜索 issues 和 MRs...",
title: "附加 issue 或 PR",
title_mr: "附加 issue 或 MR",
},
},
agentControls: {
provider: {
fallback: "Provider",
select: "选择 Agent Provider",
},
thinking: {
title: "Thinking",
unknown: "未知",
extraHigh: "Extra high",
select: "选择 thinking 选项",
selectWithValue: "选择 thinking 选项({{value}})",
},
model: {
unknown: "未知 Model",
},
features: {
title: "Features",
open: "打开 Agent features",
on: "开启",
off: "关闭",
},
mode: {
title: "Mode",
searchPlaceholder: "搜索 modes...",
selectWithValue: "选择 Agent mode({{value}})",
},
hints: {
thinking: "Thinking mode",
model: "切换 Model",
mode: "更改模式",
},
},
agentStream: {
empty: "开始和这个 Agent 对话...",
scrollToBottom: "滚动到底部",
historyLoadFailed: "无法加载智能体历史记录",
messageCapped: "此消息已被截断({{bytes}} 字节)。",
permission: {
rejectedPlan: "已拒绝的计划",
approvedPlan: "已批准的计划",
canceledPlan: "已取消的计划",
plan: "Plan",
required: "需要权限",
deny: "拒绝",
accept: "接受",
implement: "实施",
question: "你想如何继续?",
proposedPlan: "建议计划",
},
},
agentPanel: {
states: {
notFound: "未找到 Agent",
failedToLoad: "加载 Agent 失败",
reconnecting: "正在重新连接主机",
updating: "正在更新消息",
timelineSyncFailed: "无法刷新代理历史记录。",
timelineSyncRetrying: "正在重试…",
archivingTitle: "正在归档 Agent...",
archivingSubtitle: "请稍候,我们正在归档这个 Agent。",
},
unavailable: {
selectedHost: "选中的 Host",
unknownHost: "无法打开此 Agent,因为此设备上未配置 {{serverLabel}}。",
addHost: "请在设置中添加 Host,或打开已配置 server 上的 Agent 后继续。",
preparingSession: "正在准备 {{serverLabel}} 会话...",
connecting: "正在连接 {{serverLabel}}...",
showSoon: "稍后将显示此 Agent。",
showWhenOnline: "Host 在线后将显示此 Agent。",
reconnectingTo: "正在重新连接 {{serverLabel}}...",
showAgainWhenReachable: "Host 可访问后将再次显示此 Agent。",
},
archived: {
callout: "此 Agent 已归档",
unarchive: "取消归档",
},
},
sessions: {
title: "历史",
empty: "还没有会话",
noMatches: "没有匹配的会话",
tooManyMatches: "匹配过多 — 请缩小搜索范围",
hostLoadFailed: "{{host}}:无法加载历史",
searchPlaceholder: "搜索历史",
actions: {
loadMore: "加载更多",
clearSearch: "清除搜索",
},
},
agentList: {
fallbackTitle: "新会话",
dateSections: {
recent: "最近",
today: "今天",
yesterday: "昨天",
thisWeek: "本周",
thisMonth: "本月",
older: "更早",
},
status: {
initializing: "正在启动",
idle: "空闲",
running: "运行中",
error: "错误",
closed: "已关闭",
},
badges: {
archived: "已归档",
pending: "{{count}} 个待处理",
attention: "需要注意",
},
archiveSheet: {
hostOffline: "Host 离线",
runningAgent: "此 Agent 仍在运行。归档会停止该 Agent。",
archive: "归档",
},
},
message: {
diagram: {
diagram: "图表",
zoomIn: "放大",
zoomOut: "缩小",
resetZoom: "重置视图",
fullscreen: "全屏",
viewSource: "查看源码",
viewDiagram: "查看图表",
},
actions: {
copyCode: "复制代码",
copyTurn: "复制回合",
copyMessage: "复制消息",
forkMenu: "分叉消息",
forkInNewTab: "分叉到新标签页",
forkInNewWorkspace: "分叉到新工作区",
forkUnavailable: "请更新主机以使用此功能。",
forkMissingWorkspace: "此 Agent 不在工作区中。",
forkFailed: "分叉聊天失败",
openFile: "打开文件",
copied: "已复制",
},
attachments: {
dismissImage: "关闭图片",
closeImage: "关闭图片",
imageLoadFailed: "无法加载图片",
imageUnavailable: "图片不可用",
imagePreviewUnavailable: "图片预览不可用。",
imagePreviewLoadFailed: "无法加载图片预览。",
review: "审查",
commentsOne: "1 条评论",
commentsMany: "{{count}} 条评论",
textAttachment: "文本附件",
text: "文本",
file: "文件",
},
speak: {
header: "已朗读",
},
activity: {
details: "详情",
},
dictation: {
start: "开始语音听写",
cancel: "取消听写",
retry: "重试听写",
insert: "插入转写",
insertAndSend: "插入转写并发送",
failed: "听写失败:{{error}}",
failedRetry: "听写失败。点按重试。",
},
question: {
submit: "提交",
next: "下一步",
answerPlaceholder: "输入你的回答...",
otherPlaceholder: "其他...",
},
todo: {
title: "任务",
empty: "还没有任务。",
tasksProgress: "{{completed}}/{{total}} 项任务",
activity: {
created: "已创建 {{count}} 项任务",
added: "已添加",
started: "已开始",
completed: "已完成",
},
},
compaction: {
loading: "正在压缩...",
auto: "上下文已自动压缩",
manual: "上下文已手动压缩",
withTokens: "上下文已压缩({{tokens}}K tokens)",
completed: "上下文已压缩",
},
},
importSession: {
chooseHostTitle: en.importSession.chooseHostTitle,
title: "导入会话",
searchPlaceholder: "搜索会话...",
scope: {
host: "{{host}} 上的会话",
workspace: "此 workspace",
},
filters: {
all: "全部",
},
status: {
connectHost: "连接到 Host 以导入会话",
updateHost: "更新 Host 以导入会话。",
noProviders: "没有已启用的可导入 Provider。",
loading: "正在加载最近会话...",
failedProvider: "无法加载 {{provider}} 的会话",
failedImport: "无法导入所选会话。",
},
actions: {
refresh: "刷新会话",
showAll: "显示全部",
loadMore: "加载更多",
},
preview: {
untitledSession: "未命名会话",
noPrompt: "没有 prompt 预览",
},
empty: {
noRecent: "没有可导入的最近会话。",
noMatches: "没有与搜索匹配的会话。",
alreadyImported: "所有最近会话都已导入。",
noProviderSessions: "没有找到 {{provider}} 会话。",
},
row: {
importing: "正在导入...",
},
},
workspace: {
route: {
loading: "正在加载 workspace",
connecting: "正在连接",
hostOffline: "{{hostName}} 已离线",
cannotReachHost: "无法连接 {{hostName}}",
hostStatus: "Host 状态:{{status}}",
needsHostUpgrade: "更新你的 Host 以恢复此 workspace",
manageHost: "管理 Host",
recovery: {
archivedTitle: "Workspace 已归档",
restoreDescription:
"{{workspaceName}} 已归档,其 worktree 已移除。恢复分支 {{branch}} 以重新打开。",
unarchiveDescription: "{{workspaceName}} 已归档。取消归档以重新打开。",
restoreAction: "恢复",
unarchiveAction: "取消归档",
restoringTitle: "正在恢复 workspace",
restoringAction: "正在恢复...",
unavailableTitle: "Workspace 不可用",
checkFailedTitle: "无法检查 workspace",
},
},
hoverCard: {
scriptsAccessibility: "Workspace scripts",
copyPath: "复制路径",
copyBranchName: "复制分支名称",
copied: "已复制",
},
fileActions: {
openFile: "打开文件",
openIn: "在 {{target}} 中打开",
openToSide: "在侧边打开",
copyPath: "复制路径",
copyRelativePath: "复制相对路径",
revealIn: "在 {{target}} 中显示",
download: "下载",
addToChat: "添加到聊天",
moreActions: "更多操作",
newFile: "新建文件",
newFolder: "新建文件夹",
collapseFolder: "折叠文件夹",
rename: "重命名",
duplicate: "复制",
revert: "放弃更改",
delete: "删除",
confirmDelete: {
fileTitle: "删除文件?",
folderTitle: "删除文件夹?",
message: "“{{name}}”将被永久删除。",
confirm: "删除",
cancel: "取消",
},
confirmRevert: {
title: "放弃更改?",
message: "对“{{name}}”的更改将被永久放弃。",
confirm: "放弃",
cancel: "取消",
failed: "放弃更改失败",
},
},
fileExplorer: {
sort: {
name: "名称",
modified: "修改时间",
size: "大小",
},
context: {
size: "大小",
modified: "修改时间",
},
actions: {
back: "返回",
retry: "重试",
refresh: "刷新文件",
refreshing: "正在刷新文件",
hideHiddenFiles: "隐藏隐藏文件",
showHiddenFiles: "显示隐藏文件",
},
empty: {
noFiles: "没有文件",
noVisibleFiles: "没有可见文件",
},
states: {
unavailable: "Workspace 不可用",
loading: "正在加载文件...",
},
errors: {
failedToListDirectory: "列出目录失败",
createFailed: "创建条目失败",
renameFailed: "重命名条目失败",
duplicateFailed: "复制条目失败",
revealFailed: "显示条目失败",
deleteFailed: "删除条目失败",
},
draft: {
filePlaceholder: "文件名",
folderPlaceholder: "文件夹名称",
},
},
setup: {
descriptor: {
label: "Setup",
completed: "Setup 已完成",
failed: "Setup 失败",
workspace: "Workspace setup",
blocked: "设置已阻止",
},
status: {
running: "正在运行",
completed: "已完成",
failed: "失败",
waiting: "正在等待 setup 输出",
blocked: "已阻止",
},
waiting: "正在 setup workspace...",
blocked: {
title: "未运行设置",
description:
"此 PR 来自另一个仓库 {{repository}}。其设置和脚本可能会运行你尚未审查的代码。",
run: "运行设置",
runFailed: "运行工作区设置失败",
},
empty: {
noCommands: "此 workspace 没有运行 setup 命令。",
},
accessibility: {
noCommands: "此 workspace 没有运行 setup 命令",
log: "Workspace setup 日志",
},
log: {
noOutput: "没有输出",
},
},
browser: {
unavailable: {
title: "浏览器仅桌面端可用",
subtitle: "在 Electron 中打开此 workspace 以使用内置浏览器。",
},
session: "浏览器会话 {{browserId}}",
controls: {
back: "后退",
forward: "前进",
stopLoading: "停止加载",
refresh: "刷新",
browserUrl: "浏览器 URL",
enterUrl: "输入 URL",
openDevTools: "打开浏览器开发者工具",
cancelSelector: "取消元素选择器",
annotateElement: "标注元素",
screenshotElement: "截图元素",
screenshotCopied: "已将截图复制到剪贴板",
elementCopied: "已将元素复制到剪贴板",
screenshotFailed: "无法复制截图",
selectorLoading: "请等待页面加载完成",
selectorFailed: "无法启动元素选择器",
},
annotate: {
title: "标注元素",
placeholder: "给智能体关于此元素的留言…",
submit: "附加",
cancel: "取消",
},
devices: {
label: "设备尺寸",
responsive: "自适应",
},
errors: {
failedToLoad: "页面加载失败",
invalidUrl: "浏览器 URL 无效",
unsupportedProtocol: "已阻止不支持的浏览器 URL:{{protocol}}",
},
},
terminal: {
hostDisconnected: "Host 未连接",
updateHost: "请更新主机以使用原生终端渲染器。",
unableToSubscribe: "无法订阅 Terminal",
},
tabs: {
loading: "正在加载...",
modified: "未保存的更改",
loadingAgentTitle: "正在加载 Agent 标题",
fallback: {
newAgent: "新建 Agent",
setup: "Setup",
workspaceSetup: "Workspace setup",
terminal: "Terminal",
browser: "浏览器",
agent: "Agent",
workspace: "Workspace",
},
switcher: {
trigger: "切换标签(已打开 {{count}} 个)",
title: "切换标签",
searchPlaceholder: "搜索标签",
},
menu: {
openFor: "打开 {{label}} 的菜单",
copyResumeCommand: "复制恢复命令",
copyAgentId: "复制 Agent ID",
copyTerminalId: "复制 Terminal ID",
copyFilePath: "Copy file path",
rename: "重命名",
closeAbove: "关闭上方标签",
closeBelow: "关闭下方标签",
closeLeft: "关闭左侧标签",
closeRight: "关闭右侧标签",
closeOthers: "关闭其他标签",
moveToMain: "移至主面板",
reloadAgent: "重新加载 Agent",
reloadAgentTooltip: "重新加载 Agent 以更新 skills、MCPs 或登录状态。",
close: "关闭",
renameTerminal: "重命名 Terminal",
renameAgent: "重命名 Agent",
},
actions: {
newTab: "新建标签页",
newAgent: "新建 Agent",
newTerminal: "新建 Terminal",
preparingTerminal: "正在准备 Terminal 标签",
preparingTerminalTooltip: "正在准备 Terminal...",
newBrowser: "新建浏览器",
maximizePane: "最大化窗格",
restorePane: "还原窗格",
closePane: "关闭窗格",
exitFocusMode: "退出专注模式",
splitRight: "向右拆分窗格",
splitDown: "向下拆分窗格",
changes: "更改",
files: "文件",
pullRequest: "拉取请求",
terminalProfilesMenu: "Terminal profiles",
editTerminalProfiles: "Edit profiles",
},
explorerSidebar: {
open: "打开侧边面板",
close: "关闭侧边面板",
toggle: "切换侧边面板",
changes: "变更",
files: "文件",
},
toasts: {
copyFailed: "复制失败",
agentIdCopiedLabel: "Agent ID",
terminalIdCopiedLabel: "Terminal ID",
resumeCommandCopiedLabel: "恢复命令",
filePathCopiedLabel: "File path",
resumeIdUnavailable: "恢复 ID 不可用",
resumeCommandUnavailable: "恢复命令不可用",
reloadingAgent: "正在重新加载 Agent...",
reloadedAgent: "已重新加载 Agent",
failedToReloadAgent: "重新加载 Agent 失败",
failedToCloseAgent: "关闭 Agent 失败",
},
confirmations: {
unsavedTitle: "未保存的更改",
unsavedMessage: "此标签页有尚未保存的更改。关闭将丢弃草稿。",
closeWithoutSaving: "不保存并关闭",
closePaneTitle: "关闭面板?",
bulkUnsaved: "{{count}} 个标签页有未保存的更改。关闭将丢弃这些草稿。",
close: "关闭",
cancel: "取消",
archive: "归档",
closeTerminalTitle: "关闭 Terminal?",
closeTerminalMessage: "此 Terminal 中任何正在运行的进程都会立即停止。",
archiveRunningAgentTitle: "归档正在运行的 Agent?",
archiveRunningAgentMessage: "此 Agent 仍在运行。归档会停止该 Agent 并关闭标签。",
closeTabsLeftTitle: "关闭左侧标签?",
closeTabsRightTitle: "关闭右侧标签?",
closeOtherTabsTitle: "关闭其他标签?",
bulk: {
all: "这会归档 {{agents}} 个 Agent,关闭 {{terminals}} 个 Terminal,并关闭 {{tabs}} 个标签。已关闭 Terminal 中任何正在运行的进程都会立即停止。",
agentsAndTerminals:
"这会归档 {{agents}} 个 Agent,并关闭 {{terminals}} 个 Terminal。已关闭 Terminal 中任何正在运行的进程都会立即停止。",
terminalsAndTabs:
"这会关闭 {{terminals}} 个 Terminal,并关闭 {{tabs}} 个标签。已关闭 Terminal 中任何正在运行的进程都会立即停止。",
agentsAndTabs: "这会归档 {{agents}} 个 Agent,并关闭 {{tabs}} 个标签。",
terminals:
"这会关闭 {{terminals}} 个 Terminal。已关闭 Terminal 中任何正在运行的进程都会立即停止。",
tabs: "这会关闭 {{tabs}} 个标签。",
agents: "这会归档 {{agents}} 个 Agent。",
},
},
},
header: {
actions: {
workspaceActions: "Workspace 操作",
newAgent: "新建 Agent",
newTerminal: "新建 Terminal",
newBrowser: "新建浏览器标签",
importSession: "导入会话",
copyPath: "复制 workspace 路径",
copyBranchName: "复制分支名称",
showSetup: "显示 setup",
},
toasts: {
workspacePathUnavailable: "Workspace 路径尚不可用",
branchNameUnavailable: "分支名称不可用",
terminalQueued: "正在准备 workspace,Terminal 准备好后会打开...",
workspacePathCopiedLabel: "Workspace 路径",
branchNameCopiedLabel: "分支名称",
},
},
scripts: {
title: "Scripts",
actions: {
chooseUrl: "选择 URL",
copyUrl: "复制 URL",
openService: "查看服务",
restart: "重启",
run: "运行",
stop: "停止",
view: "查看终端",
},
accessibility: {
trigger: "Workspace scripts",
openService: "查看 {{scriptName}} 服务",
viewTerminal: "查看 {{scriptName}} Terminal",
runScript: "运行 {{scriptName}} script",
stopScript: "停止 {{scriptName}}",
restartScript: "重启 {{scriptName}}",
copyUrl: "复制 {{scriptName}} 的 URL",
chooseUrl: "选择 {{scriptName}} 的 URL",
script: "{{scriptName}} script",
},
routes: {
public: "反向代理",
paseo: "Memorable",
direct: "直接地址",
},
states: {
exitCode: "exit {{code}}",
startFailed: "启动 {{scriptName}} 失败",
stopFailed: "停止 {{scriptName}} 失败",
},
},
tree: {
showFolderTree: "显示文件夹树",
hideFolderTree: "隐藏文件夹树",
},
git: {
actions: {
moreOptions: "更多选项",
moreActions: "更多操作",
commit: {
label: "Commit",
pending: "正在 commit...",
success: "已 commit",
},
pull: {
label: "Pull",
pending: "正在 pull...",
success: "已 pull",
},
push: {
label: "Push",
pending: "正在 push...",
success: "已 push",
},
pullAndPush: {
label: "Pull 并 push",
pending: "正在 pull 并 push...",
success: "已 pull 并 push",
},
viewPr: "查看 PR",
createPr: {
label: "创建 PR",
pending: "正在创建 PR...",
success: "PR 已创建",
label_mr: "创建 MR",
pending_mr: "正在创建 MR...",
success_mr: "MR 已创建",
},
mergeBranch: {
label: "本地 merge",
pending: "正在 merge...",
success: "已 merge",
},
mergeFromBase: {
label: "从 {{baseRef}} 更新",
pending: "正在更新...",
success: "已更新",
},
archive: {
label: "归档工作区",
pending: "正在归档...",
success: "已归档",
},
mergePr: {
squash: "Merge PR (squash)",
merge: "Merge PR (merge)",
rebase: "Merge PR (rebase)",
pending: "正在 merge PR...",
success: "PR 已 merge",
squash_mr: "Merge MR (squash)",
merge_mr: "Merge MR (merge)",
rebase_mr: "Merge MR (rebase)",
pending_mr: "正在 merge MR...",
success_mr: "MR 已 merge",
},
viewPr_mr: "查看 MR",
autoMerge: {
enableSquash: "Auto merge (squash)",
enableMerge: "Auto merge (merge)",
enableRebase: "Auto merge (rebase)",
enabled: "Auto-merge 已启用",
enabling: "正在启用 auto-merge...",
disabling: "正在禁用 auto-merge...",
disabled: "Auto-merge 已禁用",
},
unavailable: {
viewPrNoForge: "当前无法查看 {{noun}},因为 {{brand}} 未连接",
pullNoRemote: "此处无法 pull,因为此分支尚未连接到 remote",
pullDirty: "有本地变更时无法 pull,请先 commit 或 stash",
pullUpToDate: "无法 pull,因为此分支已是最新",
pushNoRemote: "此处无法 push,因为此分支尚未连接到 remote",
pushBehind: "暂时无法 push,因为需要先拉取更新的变更",
pushNothing: "无法 push,因为没有新的内容可发送",
pullAndPushNoRemote: "此处无法 pull 并 push,因为此分支尚未连接到 remote",
pullAndPushDirty: "有本地变更时无法 pull 并 push,请先 commit 或 stash",
pullAndPushNoIncoming: "无法 pull 并 push,因为没有需要先 pull 的传入变更",
pullAndPushInSync: "无法 pull 并 push,因为此分支已同步",
pullAndPushNothingToPush: "无法 pull 并 push,因为 pull 之后没有新的内容可发送",
createPrNoForge: "当前无法创建 {{noun}},因为 {{brand}} 未连接",
createPrNoCommits: "无法创建 PR,因为此分支还没有新的 commit",
mergeNoBase: "无法 merge,因为无法确定 base branch",
mergeDirty: "有本地变更时无法 merge,请先 commit 或 stash",
mergeNothing: "无法 merge,因为此分支没有可 merge 的新内容",
updateNoBase: "无法更新,因为无法确定 base branch",
updateDirty: "有本地变更时无法更新,请先 commit 或 stash",
updateCurrent: "无法更新,因为此分支已与 {{baseRef}} 保持最新",
mergePrNoGithub: "当前无法 merge PR,因为 GitHub 未连接",
archiveNotWorktree: "此处无法归档,因为此 workspace 不是作为 Paseo worktree 创建的",
mergePrNoForge: "当前无法 merge {{noun}},因为 {{brand}} 未连接",
mergePrMissing: "无法 merge PR,因为还没有 pull request",
mergePrDraft: "无法 merge PR,因为 pull request 仍是 draft",
mergePrMerged: "无法 merge PR,因为 pull request 已 merge",
mergePrClosed: "无法 merge PR,因为 pull request 已关闭",
mergePrConflicts: "无法 merge PR,因为 pull request 存在冲突",
mergePrQueue: "此处无法 merge PR,因为此 repository 使用 merge queue",
mergePrNotReady: "{{brand}} 报告 {{noun}} 可 merge 后才能 merge {{noun}}",
autoMergeCannotDisable: "Auto-merge 已启用,但此账号无法禁用",
},
toasts: {
failedCommit: "Commit 失败",
failedPull: "Pull 失败",
failedPush: "Push 失败",
failedPullAndPush: "Pull 并 push 失败",
failedCreatePr: "创建 PR 失败",
failedMergePr: "Merge PR 失败",
failedEnableAutoMerge: "启用 auto-merge 失败",
failedDisableAutoMerge: "禁用 auto-merge 失败",
baseRefUnavailable: "Base ref 不可用",
failedMerge: "Merge 失败",
failedMergeFromBase: "从 base merge 失败",
},
archiveWarning: {
title: "归档「{{workspaceName}}」?",
confirm: "归档",
cancel: "取消",
uncommittedChanges: "未 commit 的变更",
uncommittedChangesWithDiff: "未 commit 的变更({{diffStat}})",
addedLine: "新增 {{count}} 行",
addedLines: "新增 {{count}} 行",
deletedLine: "删除 {{count}} 行",
deletedLines: "删除 {{count}} 行",
unpushedCommit: "{{count}} 个未 push 的 commit",
unpushedCommits: "{{count}} 个未 push 的 commit",
},
},
diff: {
openChangesTab: "打开“更改”标签页",
openDiffTab: "打开 Diff 标签页",
closeChangesTab: "关闭“更改”标签页",
jumpToFile: {
title: "跳转到文件",
},
binaryFile: "二进制文件",
tooLarge: "Diff 过大,无法显示",
previewTooLargeTitle: "此 diff 过大,无法预览",
previewTooLargeDescription: "缩小比较范围即可在此预览",
unified: "Unified diff",
split: "Side-by-side diff",
switchToUnified: "切换到统一差异视图",
switchToSplit: "切换到并排差异视图",
options: "Diff 选项",
inlineDiff: "内联 Diff",
hideWhitespace: "隐藏空白差异",
showWhitespace: "显示空白差异",
scrollLongLines: "滚动长行",
wrapLongLines: "自动换行长行",
collapseAllFolders: "折叠所有文件夹",
expandAllFolders: "展开所有文件夹",
collapseAllFiles: "折叠所有文件",
expandAllFiles: "展开所有文件",
refreshing: "正在刷新",
refresh: "刷新",
refreshState: "刷新 git 和 {{brand}} 状态",
failedRefresh: "刷新 git 状态失败。",
seeUncommittedChanges: "查看未 commit 的变更",
seeCommittedChanges: "查看已 commit 的变更",
checkingRepository: "正在检查 repository...",
notRepository: "不是 git repository",
diffMode: "Diff 模式",
uncommitted: "未 commit",
committed: "已 commit",
branchUnknown: "未知",
base: "base",
newFile: "新增",
deletedFile: "已删除",
modifiedFile: "已修改",
commits: {
title: "提交",
countLabel: "{{count}} 个工作区提交",
noneAhead: "尚无领先于 {{baseRef}} 的提交",
fileDiffEmpty: "没有可显示的更改",
fileDiffError: "加载文件差异失败",
loading: "正在加载提交…",
loadError: "加载提交失败",
empty: "暂无提交",
},
},
openInEditor: {
open: "打开",
chooseEditor: "选择编辑器",
openIn: "在 {{target}} 中打开 workspace",
openFileIn: "在 {{target}} 中打开 {{fileName}}",
failedOpen: "打开 workspace 失败",
},
pr: {
actions: {
viewPullRequest: "查看",
openOn: "在 {{brand}} 上打开",
},
checksSummary: {
passedLabel: "通过",
failedLabel: "失败",
runningLabel: "运行中",
passedAccessible: "检查通过",
failedAccessible: "检查失败",
runningAccessible: "检查运行中",
},
sections: {
checks: "Checks",
pipeline: "流水线",
reviews: "Reviews",
},
empty: {
noJobs: "无作业",
loadingPipeline: "正在加载流水线...",
pipelineJobsLoadFailed: "无法加载流水线作业",
allowedToFail: "允许失败",
},
approvals: "{{given}} / {{required}} 批准",
accessibility: {
pullRequest: "Pull request #{{number}}",
pullRequest_mr: "合并请求 !{{number}}",
checkStatus: {
passed: "成功",
failed: "失败",
warning: "警告",
actionRequired: "需要操作",
manual: "手动",
pending: "等待中",
skipped: "已跳过",
cancelled: "已取消",
},
},
states: {
draft: "Draft",
merged: "已 merge",
closed: "已关闭",
open: "Open",
},
activity: {
commented: "已评论",
approved: "已批准",
requestedChanges: "请求修改",
reviewed: "已 review",
},
time: {
justNow: "刚刚",
},
thread: {
discussion: "讨论主题",
},
errors: {
statusLoadFailed: "无法加载 Pull Request 状态",
activityLoadFailed: "无法加载 Pull Request 活动",
},
},
forgeSetup: {
installCli: "安装 {{cli}} CLI 以使用 {{brand}} 功能。",
signIn: "运行 {{command}} 以使用 {{brand}} 功能。",
generic: "在此主机上设置 {{brand}} 以使用其功能。",
},
},
},
workspaceLabels: {
title: "标签",
unlabelled: "无标签",
create: "新建标签",
createConfirm: "创建",
creating: "创建中…",
name: "标签名称",
updateHostUse: "请更新此主机以使用标签。",
errors: { update: "无法更新标签", load: "无法加载标签" },
colors: {
violet: "紫色",
sky: "天蓝色",
emerald: "翠绿色",
orange: "橙色",
pink: "粉色",
indigo: "靛蓝色",
teal: "青绿色",
red: "红色",
amber: "琥珀色",
blue: "蓝色",
},
filter: {
clear: "清除筛选",
},
manage: {
open: "管理标签…",
title: "管理标签",
search: "搜索标签",
empty: "此主机没有标签。",
edit: "编辑标签",
editLabel: "编辑{{name}}",
name: "名称",
color: "颜色",
save: "保存",
delete: "删除",
deleteTitle: "删除{{name}}?",
deleteMessage_one: "这会从此主机的{{count}}个工作区中移除该标签。",
deleteMessage_other: "这会从此主机的{{count}}个工作区中移除该标签。",
offline: "此主机离线。",
updateHost: "请更新此主机以管理标签。",
},
},
changelog: {
title: "新功能",
installed: "已安装",
showMore: "显示更多",
openWebsite: "完整更新日志",
error: {
title: "无法加载更新日志",
description: "请检查网络连接后重试。",
},
},
sidebar: {
display: {
trigger: "显示偏好",
heading: "显示",
grouping: {
label: "分组",
project: "项目",
status: "状态",
labels: "标签",
},
titleSource: {
label: "标题",
title: "标题",
branch: "分支名称",
},
show: {
label: "显示",
branch: "分支",
project: "项目",
host: "主机",
changeRequest: "拉取请求",
checks: "检查",
services: "服务",
labels: "标签",
diff: "差异统计",
timestamp: "最近活动",
},
checks: {
iconAndText: "图标和文字",
icon: "仅图标",
none: "隐藏",
},
hostFilter: {
label: "主机",
all: "所有主机",
},
projectFilter: {
label: "项目",
all: "所有项目",
},
},
filterEmpty: {
title: "没有匹配的工作区",
description: "更改或清除侧边栏筛选以查看工作区。",
clear: "清除筛选",
},
pinned: {
title: "已置顶",
},
host: {
noHost: "没有 Host",
switchTitle: "切换 Host",
searchPlaceholder: "搜索 Hosts...",
},
actions: {
addProject: "添加 project",
newWorkspace: "新建工作区",
hosts: "Hosts",
settings: "设置",
closeSidebar: "关闭侧边栏",
},
help: {
trigger: "帮助与支持",
sectionHelp: "帮助",
diagnostics: "运行诊断",
shortcuts: "键盘快捷键",
reportIssue: "报告问题",
discord: "Discord",
github: "创建 GitHub Issue",
whatsNew: "新功能",
appName: "Paseo",
},
sections: {
sessions: "历史",
search: "搜索",
schedules: "计划",
},
worktreeSetup: {
title: "设置 worktree scripts",
description: "添加 setup 命令,让新的 worktree 自动安装依赖并完成准备。",
openProjectSettings: "打开 project 设置",
},
project: {
actions: {
menu: "Project 操作",
openSettings: "打开 project 设置",
openNewWindow: "在新窗口中打开",
openNewWindowFailed: "无法打开新窗口",
openFolder: "Open in file manager",
openFolderFailed: "Couldn't open folder",
remove: "移除 project",
removing: "正在移除...",
},
confirmations: {
removeTitle: "移除 project?",
removeMessage: "从侧边栏移除「{{projectName}}」?\n\n磁盘上的文件不会被更改。",
removeConfirm: "移除",
cancel: "取消",
},
toasts: {
hostDisconnected: "Host 未连接",
removeFailed: "部分 workspace 移除失败",
updateHostToRemove: "更新 host 以移除 projects。",
},
empty: {
title: "还没有 projects",
description: "添加 project 以开始",
},
},
workspace: {
status: {
serviceRunning: "服务 {{name}} 运行中",
serviceUnhealthy: "服务 {{name}} 异常",
creating: "正在创建...",
},
checks: {
passed: "成功: {{count}}",
failed: "失败: {{count}}",
warning: "警告: {{count}}",
actionRequired: "需要操作: {{count}}",
manual: "手动: {{count}}",
pending: "等待中: {{count}}",
},
actions: {
menu: "Workspace 操作",
newWorkspace: "新建 workspace",
showMore: "显示更多",
showLess: "收起",
createWorkspaceFor: "为 {{projectName}} 新建 workspace",
copyPath: "复制路径",
copyBranchName: "复制分支名称",
rename: "重命名 workspace",
pin: "置顶",
unpin: "取消置顶",
archive: "归档",
archiveWorkspace: "归档工作区",
hideFromSidebar: "从侧边栏隐藏",
archiving: "正在归档...",
hiding: "正在隐藏...",
},
confirmations: {
hideTitle: "隐藏 workspace?",
hideMessage: "从侧边栏隐藏「{{workspaceName}}」?\n\n磁盘上的文件不会被更改。",
hideConfirm: "隐藏",
cancel: "取消",
},
rename: {
title: "重命名 workspace",
submit: "重命名",
invalidBranchName: "无效的分支名称",
},
toasts: {
workspacePathUnavailable: "Workspace 路径不可用",
pathCopied: "路径已复制",
branchNameCopied: "分支名称已复制",
hostDisconnected: "Host 未连接",
hideFailed: "隐藏 workspace 失败",
archiveFailed: "归档工作区失败",
},
},
},
newWorkspace: {
title: "新建 workspace",
create: "创建",
isolation: {
local: "本地",
worktree: "新建 worktree",
label: "隔离",
},
fields: {
project: "项目",
base: "基线",
baseNotApplicable: "不适用",
},
titlePlaceholder: "标题(可选)",
errors: {
hostDisconnected: "Host 未连接",
createWorktreeFailed: "创建 worktree 失败",
composerStateRequired: "Composer 状态必填",
selectModel: "请选择模型",
},
tooltips: {
project: "Choose the project",
host: "Choose the host",
isolation: "Choose the isolation level",
startingRef: "选择起始位置",
launch: "Choose what to launch",
},
refPicker: {
startingRef: "起始 ref",
intoBase: "进入 {{baseRef}}",
searching: "正在搜索...",
noMatchingRefs: "没有匹配的 refs。",
searchPlaceholder: "搜索分支和 PR",
title: "起始位置",
},
launch: {
title: "What to launch",
chat: "Chat",
terminal: "Terminal",
manageProfiles: "Manage profiles",
submit: "Launch",
promptPlaceholder: "Prompt {{name}}",
commandPlaceholder: "Run a command, or leave empty for a blank terminal",
},
},
desktop: {
windowControls: {
minimize: "最小化窗口",
maximize: "最大化窗口",
restore: "还原窗口",
close: "关闭窗口",
},
quitting: {
title: "正在退出 Paseo...",
detail: "正在停止本地 daemon。",
},
daemon: {
lifecycle: en.desktop.daemon.lifecycle,
title: "Daemon",
status: {
title: "状态",
builtInOnly: "这里只显示内置桌面 daemon",
running: "running",
notRunning: "not running",
pid: "PID {{pid}}",
},
management: {
title: "管理内置 daemon",
hint: "让 Paseo 启动和停止内置 daemon",
pauseTitle: "暂停内置 daemon",
pauseMessage:
"这会立即停止内置 daemon。连接到内置 daemon 的运行中 agents 和 terminals 会被停止。",
pauseAndStop: "暂停并停止",
registrationFailed:
"内置 daemon 已启动,但 Paseo 无法保存 localhost 连接。请关闭后重新开启 daemon 管理,或手动添加 localhost。",
pausedStopFailed: "内置 daemon 管理已暂停,但 Paseo 无法停止 daemon。",
updateFailed: "无法更新内置 daemon 管理设置。",
},
keepRunning: {
title: "退出后保持 daemon 运行",
hint: "退出 Paseo 后 daemon 会继续运行",
},
logs: {
title: "日志文件",
modalTitle: "Daemon 日志",
unavailable: "日志路径不可用",
empty: "(日志文件为空)",
copied: "日志路径已复制。",
copyFailed: "无法复制日志路径。",
open: "打开日志",
copyPath: "复制路径",
},
fullStatus: {
title: "完整状态",
modalTitle: "Daemon 状态",
hint: "运行 `paseo daemon status` 并显示输出",
view: "查看状态",
copied: "状态已复制到剪贴板。",
fetchFailed: "获取 daemon 状态失败:{{message}}",
},
advancedSettings: "高级设置",
openAdvancedSettings: "打开 daemon 高级设置",
versionMismatch: "App 和 daemon 版本不匹配。请将两者更新到相同版本,以获得最佳体验。",
loadFailed: "无法加载桌面 daemon 状态。",
},
updates: {
status: {
checking: "正在检查 app 更新...",
installing: "正在安装 app 更新...",
upToDate: "App 已是最新版本。",
upToDateWithLastChecked: "已是最新版本。上次检查时间:{{time}}。",
pending: "更新准备好后会通知你。",
pendingWithLastChecked: "更新准备好后会通知你。上次检查时间:{{time}}。",
pendingWithVersion: "发现更新:{{version}}。正在下载...",
pendingWithVersionAndLastChecked:
"发现更新:{{version}}。正在下载... 上次检查时间:{{time}}。",
availableWithVersion: "更新已就绪:{{version}}",
availableWithVersionAndLastChecked: "更新已就绪:{{version}}。上次检查时间:{{time}}。",
available: "有 app 更新可安装。",
availableWithLastChecked: "有 app 更新可安装。上次检查时间:{{time}}。",
installed: "App 更新已安装。需要重启。",
failed: "App 更新失败。",
idle: "尚未检查更新状态。",
},
installError: "无法安装 desktop app 更新。",
callout: {
installingTitle: "正在安装更新",
failedTitle: "更新失败",
availableTitle: "有可用更新",
genericError: "出了点问题。",
whatsNew: "更新内容",
installingAction: "正在安装...",
installAndRestart: "安装并重启",
installingDescription: "正在安装并重启...",
versionReady: "{{version}} 已准备好安装。",
newVersionReady: "新版本已准备好安装。",
restartWarning: "升级 app 会停止正在运行的 agents,并关闭 terminal 会话。",
},
},
settings: {
loadFailed: "无法加载桌面设置。",
saveFailed: "无法保存桌面设置。",
},
rosetta: {
title: "下载 Apple Silicon 构建",
runningIntel: "你正在 Apple Silicon 上通过 Rosetta 运行 Paseo 的 Intel 构建。",
highCpu: "这会导致较高 CPU 使用率。下载 Apple Silicon 构建即可修复。",
download: "下载",
},
permissions: {
notifications: {
allowed: "系统已允许通知。",
denied: "系统设置中已拒绝通知。",
notGranted: "通知权限尚未授予。",
webOnly: "桌面通知状态仅在 web runtime 中可用。",
supported: "支持桌面通知。",
unsupported: "此平台不支持桌面通知。",
apiUnavailable: "此环境中 Web Notification API 不可用。",
requestsWebOnly: "桌面通知请求仅在 web runtime 中可用。",
requestUnavailable: "Web Notification API requestPermission() 不可用。",
requestFailed: "请求通知权限失败:{{message}}",
unexpectedState: "意外的通知权限状态:{{state}}",
},
microphone: {
webOnly: "桌面麦克风状态仅在 web runtime 中可用。",
navigatorUnavailable: "此环境中 Navigator 不可用。",
granted: "已授予麦克风访问权限。",
denied: "系统设置中已拒绝麦克风访问。",
notGranted: "麦克风权限尚未授予。",
unexpectedState: "意外的麦克风权限状态:{{state}}",
statusApiUnavailable: "此 runtime 中麦克风状态 API 不可用。请使用请求来检查访问权限。",
queryFailed: "查询麦克风状态失败:{{message}}",
captureUnavailable: "此环境中麦克风采集不可用。",
permissionApiUnavailable: "权限状态 API 不可用。请使用请求来检查访问权限。",
requestsWebOnly: "桌面麦克风请求仅在 web runtime 中可用。",
captureApiUnavailable: "此环境中麦克风采集 API 不可用。",
requestDenied: "用户或系统拒绝了麦克风权限。",
noDevice: "未找到麦克风设备。",
requestFailed: "请求麦克风权限失败:{{message}}",
},
empty: {
notifications: "尚未检查通知状态。",
microphone: "尚未检查麦克风状态。",
},
testNotification: {
title: "Paseo 通知测试",
body: "如果你能看到这条通知,说明桌面通知可用。",
notDelivered: "通知未送达。请检查 System Settings > Notifications。",
failed: "发送通知失败。",
},
},
integrations: {
cli: {
statusFailed: "无法检查 CLI 安装状态。",
installFailed: "无法安装 Paseo CLI。",
},
},
},
rootError: {
title: "Paseo 遇到了问题。",
body: "请重试以重新加载应用。如果问题持续发生,请在报告时附上下面的详细信息。",
details: "详情",
},
startup: {
errorTitle: "出现问题",
errorDescription: "本地服务器启动失败。如果持续发生,请在 GitHub 报告问题并附上下方日志。",
logs: {
loading: "正在加载 daemon 日志...",
unavailable: "没有可用的 daemon 日志。",
loadFailed: "无法加载 daemon 日志:{{message}}",
},
},
openProject: {
tiles: {
addProject: {
title: "添加 project",
description: "打开此机器上的文件夹",
},
importSession: {
title: "导入会话",
description: "导入最近的外部 CLI 会话",
},
setupProviders: {
title: "设置 providers",
description: "配置 Claude Code、Codex 等",
},
pairDevice: {
title: "配对设备",
description: "将手机连接到此 daemon",
},
},
},
projectPicker: {
placeholder: "输入以搜索...",
browse: "浏览…",
opening: "正在打开 project...",
searching: "正在搜索...",
empty: "开始输入路径",
errors: {
directory_not_found: "找不到目录。",
open_failed: "无法打开项目。",
},
openPath: "打开路径",
},
branchSwitcher: {
triggerTooltip: "切换工作区分支",
currentBranch: "当前分支:{{branchName}}。按下以切换分支。",
placeholder: "切换分支...",
searchPlaceholder: "筛选分支...",
empty: "没有找到分支。",
title: "切换分支",
uncommittedTitle: "未 commit 的变更",
uncommittedMessage: "你有未 commit 的变更。切换分支前要先 stash 吗?",
stashAndSwitch: "Stash 并切换",
failedToStash: "Stash 变更失败",
failedToSwitch: "切换分支失败",
restoreStashTitle: "恢复 stashed 变更?",
restoreStashMessage: "此分支有上一会话 stashed 的变更。要恢复它们吗?",
restore: "恢复",
later: "稍后",
stashRestored: "Stashed 变更已恢复",
},
agentAutocomplete: {
searchingWorkspace: "正在搜索 workspace...",
loadingCommands: "正在加载 commands...",
noFiles: "没有找到文件或目录",
noCommands: "没有找到 commands",
failedToLoad: "加载失败",
},
loadOlderHistory: {
failed: "无法加载更早历史",
},
imageAttachmentPicker: {
permissionTitle: "需要权限",
permissionMessage: "请允许访问照片图库以附加图片。",
errorTitle: "错误",
failedToSelect: "选择图片失败",
dialogTitle: "附加图片",
dialogFilterName: "图片",
},
workspaceSetup: {
title: "创建 workspace",
errors: {
failedCreateWorktree: "创建 worktree 失败",
failedOpenProject: "打开 project 失败",
selectModel: "请选择模型",
hostDisconnected: "Host 未连接",
pendingRequired: "没有待处理的 workspace setup",
composerStateRequired: "Workspace setup composer 状态必填",
},
},
onboarding: {
title: "欢迎使用 Paseo",
subtitle: "连接你的电脑即可开始",
actions: {
settings: "设置",
},
},
modelSelector: {
title: "选择 provider",
selectModel: "选择模型",
selectedModel: "选择模型({{model}})",
loading: "正在加载...",
loadingShort: "正在加载",
loadingSelector: "正在加载模型选择器...",
error: "错误",
defaultModel: "默认",
profiles: "配置文件",
providers: "提供方",
model: "模型",
editProfiles: "编辑",
editProfilesLabel: "编辑智能体配置文件",
createProfile: "创建配置文件",
createProfileFromModel: "从此模型创建配置文件",
editProfileLabel: "编辑 {{name}}",
editProfilesCount: "编辑配置文件 ({{count}})",
modelCount: "{{count}} 个模型",
modelCountPlural: "{{count}} 个模型",
retry: "重试",
retrying: "正在重试...",
noMatches: "没有匹配的模型",
noMatchesForQuery: "没有与“{{query}}”匹配的模型",
searchAllPlaceholder: "搜索所有模型...",
searchPlaceholder: "搜索模型...",
openProviderSettings: "打开 {{provider}} 设置",
},
providerCatalog: {
title: "添加 provider",
search: "搜索 providers",
noProviders: "未找到 providers",
actions: {
add: "添加",
adding: "正在添加",
installed: "已安装",
cancel: "取消",
installInstructions: "安装说明",
installInstructionsFor: "{{provider}} 安装说明",
},
errors: {
unableToInstall: "无法安装 provider",
},
},
providerSelection: {
defaultModel: "默认",
selectModel: "选择模型",
loading: "正在加载...",
error: "错误",
unavailable: "不可用",
unknownError: "未知错误",
readiness: {
initialPromptRequired: "初始 prompt 必填",
noProviders: "所选 Host 上没有可用的 provider",
modelDefaultsLoading: "模型默认值仍在加载",
noModelAvailable: "所选 provider 没有可用模型",
workspaceDirectoryNotFound: "Workspace 目录未找到",
hostDisconnected: "Host 未连接",
},
},
pairing: {
hostPassword: {
title: "{{host}} 的密码",
label: "主机密码",
},
connectionMethods: {
title: "添加连接",
direct: {
title: "直接连接",
description: "本地网络或 VPN。",
},
remoteSsh: {
title: "远程 SSH",
description: "通过桌面 SSH 客户端连接。",
},
scanQr: {
title: "扫描二维码",
description: "加密 relay 连接。",
},
pasteLink: {
title: "粘贴配对链接",
description: "加密 relay 连接。",
},
},
direct: {
title: "直接连接",
helper: "输入 Paseo server 的地址。",
fields: {
host: "Host",
port: "端口",
password: "密码",
optional: "可选",
useSsl: "使用 SSL",
connectionUri: "连接 URI",
},
advanced: {
label: "高级",
show: "显示高级选项",
hide: "隐藏高级选项",
},
passwordVisibility: {
show: "显示密码",
hide: "隐藏密码",
},
actions: {
cancel: "取消",
connect: "连接",
connecting: "正在连接...",
},
errors: {
hostRequired: "Host 必填",
invalidPort: "端口必须在 1 到 65535 之间",
invalidConnection: "无效连接",
failedTitle: "连接失败",
failedToConnect: "无法连接到 {{endpoint}}。",
noAdditionalDetails: "{{detail}}(未提供更多详情)",
timedOut: "连接超时。请检查 host/port 和网络。",
refused: "连接被拒绝。server 是否正在此地址运行?",
hostNotFound: "未找到 host。请检查主机名后重试。",
hostUnreachable: "Host 不可达。请检查网络和防火墙。",
tlsError: "TLS 错误。只有 daemon 前方有 TLS terminator 时,直接连接才使用 SSL。",
unableToConnect: "无法连接。请检查 host/port,并确认 daemon 可达。",
details: "详情:{{detail}}",
},
},
remoteSsh: {
title: "远程 SSH",
helper: "连接到远程主机上运行的 Paseo 守护进程。",
fields: {
target: "SSH 主机",
},
actions: {
cancel: "取消",
connect: "连接",
connecting: "正在连接...",
},
errors: {
targetRequired: "SSH 主机为必填项",
invalidTarget: "请输入有效的 ssh:// 主机",
failedToConnect: "无法通过 SSH 连接。{{detail}}",
},
},
link: {
title: "粘贴配对链接",
helper: "粘贴来自 server 的配对链接。",
label: "配对链接",
errors: {
required: "请粘贴配对链接(.../#offer=...)",
missingOffer: "链接必须包含 #offer=...",
emptyOffer: "Offer payload 为空",
invalid: "无效的配对链接",
unableToPair: "无法配对 host",
},
alert: {
failedTitle: "配对失败",
},
actions: {
cancel: "取消",
pair: "配对",
pairing: "正在配对...",
},
},
scan: {
title: "扫描二维码",
webUnavailableTitle: "Web 上不可用",
webUnavailableBody: "Web build 不支持二维码扫描。请改用“粘贴链接”。",
backToSettings: "返回设置",
cameraPermissionTitle: "相机权限",
cameraPermissionBody: "允许相机访问,以扫描 daemon 提供的配对二维码。",
grantPermission: "授予权限",
pairing: "正在配对...",
unableToPair: "无法配对 host",
errorTitle: "错误",
},
device: {
loadingOffer: "正在加载配对 offer...",
failedToLoadOffer: "加载配对 offer 失败。",
relayDisabled: "Relay 未启用。启用 relay 后才能配对设备。",
enableTitle: "启用中继?",
enableDescription: "中继让此设备可以从任何地方连接。配对流量采用端到端加密。",
relayDocs: "中继如何工作",
relayDocsAccessibility: "阅读 Paseo 中继的工作原理",
enableRelay: "启用中继",
enablingRelay: "正在启用...",
notNow: "暂不",
directConnectionHint:
"不使用中继时,请通过 TCP、Tailscale 或其他 VPN 直接连接。不会生成二维码。",
updateRequired: "请更新主机,以便从 Paseo Desktop 启用中继。",
unavailable: "配对 offer 不可用。",
hint: "用手机上的 Paseo 扫描此二维码,或复制下方链接。",
securityWarning: "请像保管密码一样保管此配对链接。任何获得此链接的人都可以访问此守护进程。",
qrUnavailable: "二维码不可用。",
qrAccessibility: "配对二维码",
retry: "重试",
copy: "复制",
copied: "已复制",
},
},
realtimeVoice: {
actions: {
mute: "静音 realtime voice",
unmute: "取消静音 realtime voice",
stop: "停止 realtime voice 并中断 turn",
},
},
rewind: {
tooltip: "回退到此消息",
warning: "此操作无法撤销",
actions: {
conversation: "回退对话",
files: "回退文件",
both: "回退对话和文件",
},
errors: {
failed: "回退 agent 失败",
},
},
diffViewer: {
empty: "没有可显示的变更",
},
serviceUrl: {
title: "打开服务 URL",
message: "打开 {{url}}?",
inPaseo: "在 Paseo 中",
externalBrowser: "外部浏览器",
dontAskAgain: "不再询问",
},
downloads: {
requestTokenFailed: "请求下载 token 失败。",
hostUnavailable: "下载 Host 不可用。",
cancelled: "下载已取消。",
failed: "下载文件失败。",
shareFile: "共享文件",
shareFileNamed: "共享 {{fileName}}",
},
menu: {
backdrop: "菜单背景",
},
subagents: {
title: "Subagent",
pillLabelOne: "1 个 subagent",
pillLabelMany: "{{count}} 个 subagent",
pillLabelWorking: "{{count}} 个运行中",
pillLabelFailed: "{{count}} 个失败",
pillLabelNeedsInputOne: "1 个需要输入",
pillLabelNeedsInputMany: "{{count}} 个需要输入",
pillLabelReadyToReview: "{{count}} 个待查看",
detachAction: "分离 {{label}}",
detachTooltip: "分离 subagent",
archiveAction: "归档 {{label}}",
archiveTooltip: "归档 subagent",
archiveFinishedAction: "归档已完成的 subagent",
archiveFinishedRetry: "重试 ({{failed}}/{{total}})",
},
panels: {
draft: {
newAgent: "新建 Agent",
creatingAgent: "正在创建 Agent",
},
file: {
directoryMissing: "未找到 workspace 目录。",
loading: "正在加载文件...",
noPreview: "没有可用预览",
binaryPreviewUnavailable: "二进制预览不可用",
tooLargeToDisplay: "此文件过大,无法显示",
failedToLoad: "加载文件失败",
failedToLoadPreview: "加载文件预览失败",
editor: {
fileSize: "文件大小 {{size}}",
lines: "{{count}} 行",
editorStatus: "编辑器状态 {{status}}",
unsavedChanges: "未保存的更改",
saving: "正在保存...",
saveFailed: "保存失败",
changedOnDisk: "磁盘上的文件已更改",
vimMode: "Vim 模式 {{mode}}",
cursor: "第 {{line}} 行,第 {{column}} 列",
preview: "预览",
source: "源代码",
deletedTitle: "文件已从磁盘删除",
checkFailedTitle: "无法检查磁盘上的文件",
preservedDescription: "打开的副本已保留。",
conflictDescription: "本地内容已保留。请选择要保留的版本。",
overwrite: "覆盖",
reload: "重新加载",
reloadTitle: "从磁盘重新加载?",
reloadMessage: "本地更改将丢失。",
},
},
files: {
label: "文件",
subtitle: "工作区文件",
tooltip: "浏览工作区文件",
chooseFile: "选择文件",
},
pullRequest: {
label: "拉取请求",
subtitle: "拉取请求详情",
emptyTitle: "尚无拉取请求",
emptyDescription: "为此检出创建拉取请求后,可在此处查看其详情。",
},
diff: {
changesLabel: "更改",
diffLabel: "Diff",
changesSubtitle: "工作区差异",
commitSubtitle: "提交差异",
uncommittedSubtitle: "未提交的更改",
baseSubtitle: "与 {{baseRef}} 比较",
directoryMissing: "未找到 workspace 目录。",
empty: "没有更改",
loadError: "加载差异失败",
capabilityMissing: "请更新主机以查看提交差异。",
},
},
toolCallDetails: {
error: "错误",
empty: "没有可用的更多详情",
subAgentActivity: "Sub-agent 活动",
input: "输入",
output: "输出",
},
toolCallGroup: {
editedFiles: {
one: "编辑了 {{count}} 个文件",
other: "编辑了 {{count}} 个文件",
},
commands: {
one: "运行了 {{count}} 个命令",
other: "运行了 {{count}} 个命令",
},
readFiles: {
one: "读取了 {{count}} 个文件",
other: "读取了 {{count}} 个文件",
},
searches: {
one: "搜索了 {{count}} 次",
other: "搜索了 {{count}} 次",
},
otherTools: {
one: "使用了 {{count}} 个其他工具",
other: "使用了 {{count}} 个其他工具",
},
paseoCalls: {
one: "调用了 Paseo {{count}} 次",
other: "调用了 Paseo {{count}} 次",
},
and: "并",
},
renameModal: {
rename: "重命名",
saving: "正在保存...",
},
sidebarCallout: {
dismiss: "关闭",
},
contextWindow: {
title: "上下文窗口",
used: "已使用 {{percentage}}%",
tokens: "{{used}} / {{max}} tokens",
sessionCost: "会话费用 {{cost}}",
accessibility: "上下文窗口已使用 {{percentage}}%",
},
review: {
comment: {
add: "添加 review 评论",
edit: "编辑 review 评论",
delete: "删除 review 评论",
label: "Review 评论",
placeholder: "留下评论",
cancel: "取消",
cancelAccessibility: "取消 review 评论",
save: "评论",
saveAccessibility: "保存 review 评论",
},
},
settings: {
title: "设置",
loading: "正在加载设置...",
groups: {
app: "应用",
host: "主机",
},
hostPicker: {
switchHost: "切换主机",
local: "本机",
},
backToWorkspace: "返回",
addHost: "添加主机",
enableBuiltInDaemon: "启用内置 daemon",
projects: "项目",
projectList: {
hostLoadFailed: "无法从 Host {{hostName}} 加载 projects:{{message}}",
editProject: "编辑 {{projectName}}",
},
groupInfo: "关于 {{title}}",
sections: {
general: "通用",
appearance: "外观",
layout: en.settings.sections.layout,
editor: "编辑器",
shortcuts: "快捷键",
integrations: "集成",
notifications: "通知",
permissions: "权限",
diagnostics: "诊断",
about: "关于",
},
layout: en.settings.layout,
editor: {
title: "编辑器",
vimKeybindings: "Vim 键位",
vimHint: "适用于网页和桌面端的源文件。",
},
notifications: {
title: "通知",
permission: "通知权限",
refreshAccessibility: "刷新通知权限",
playSound: "播放声音",
playSoundHint: "收到桌面通知时播放声音",
test: "测试通知",
testHint: "使用当前设置发送测试通知",
permissionRequired: "测试前请允许访问通知",
send: "发送",
sending: "正在发送...",
sentTitle: "测试通知已发送",
sentDescription: "Paseo 已将通知交给操作系统。",
sendFailedTitle: "无法发送测试通知",
},
hostSections: {
projects: "项目",
connections: "连接",
agents: "Agents",
metadata: "元数据",
workspaces: "Workspaces",
providers: "Providers",
usage: "使用情况",
terminals: "Terminals",
plugins: "插件",
host: "概览",
},
plugins: pluginSettings["zh-CN"],
metadataGeneration: {
title: "元数据生成",
description: "选择 Paseo 用于工作区标题、分支名称、提交消息和拉取请求草稿的模型",
selection: "模型选择",
automatic: "自动",
preferred: "手动",
automaticHint: "Paseo 会选择一个可用的快速模型",
preferredHint: "选择 Paseo 使用的模型",
model: "模型",
fallbackHint: "如果不可用,Paseo 会改用其他可用模型",
docs: "文档",
saveError: "无法更新元数据生成设置",
},
general: {
title: "通用",
browserData: {
title: "浏览器数据",
siteData: "Cookie 和网站数据",
description: "浏览器标签页在 Paseo 中共享登录状态和网站数据。",
clear: "清除浏览器数据",
clearing: "正在清除...",
confirmTitle: "清除浏览器数据?",
confirmMessage: "网站帐号将退出登录,打开的浏览器标签页将重新加载。",
success: "浏览器数据已清除。",
error: "无法清除浏览器数据。",
},
defaultSend: {
label: "默认发送",
descriptions: {
interrupt: "Agent 运行时,Enter 会中断。Command/Ctrl+Enter 会排队。",
steer: "Agent 运行时,Enter 会引导当前回合。Command/Ctrl+Enter 会排队。",
queue: "Agent 运行时,Enter 会排队。Command/Ctrl+Enter 会提交。",
},
options: {
interrupt: "中断",
steer: "引导",
queue: "排队",
},
},
serviceUrls: {
label: "服务 URL",
description: "运行脚本中的 URL 打开位置",
options: {
ask: "询问",
inApp: "在 Paseo 中",
external: "外部浏览器",
},
},
terminalScrollback: {
label: "终端回滚",
description: "内置终端缓冲区保留的行数",
accessibilityLabel: "终端回滚行数",
},
autoExpandReasoning: {
label: "始终展开推理过程",
description: "默认情况下完全展开 AI 的思考和推理过程",
},
toolCallDetail: {
label: "工具调用显示",
description: "工具调用在时间线中的显示方式",
accessibilityLabel: "选择工具调用显示方式({{value}})",
options: {
overview: "摘要",
detailed: "完整详情",
},
},
language: {
label: "语言",
description: "应用语言",
options: {
system: "系统",
ar: "العربية",
en: "English",
es: "Español",
fr: "Français",
ja: "日本語",
ko: "한국어",
ptBR: "Português brasileiro",
ru: "Русский",
zhCN: "简体中文",
},
},
},
diagnostics: {
title: "诊断",
legacyTerminalRenderer: {
label: "使用旧版终端渲染器",
description: "重新打开终端后使用之前的 WebView 终端",
accessibilityLabel: "使用旧版终端渲染器",
},
testAudio: "测试音频",
playTest: "播放测试",
playing: "正在播放...",
playbackFailed: "播放失败:{{message}}",
app: {
title: "App diagnostic",
rowTitle: "App diagnostic",
rowHint: "Collect connection, daemon, provider, desktop, and log details",
run: "Run",
running: "Running diagnostic...",
copyLabel: "diagnostic",
copyAccessibility: "Copy diagnostic",
copyFailed: "Failed to copy diagnostic",
refreshAccessibility: "Refresh diagnostic",
refreshingAccessibility: "Refreshing diagnostic",
progress: {
client: "Client",
desktop: "Desktop",
},
},
},
about: {
title: "关于",
appVersion: "应用版本",
whatsNewHint: "每个版本的发布说明",
thisDevice: "此设备",
connectedHosts: "已连接的 Host",
offline: "离线",
versionDiffers: "版本与此设备不同",
releaseChannel: {
label: "发布通道",
description: "切换到 Beta 可更早获取更新并参与改进",
stable: "Stable",
beta: "Beta",
},
updates: {
label: "应用更新",
readyToInstall: "可安装:{{version}}",
installTitle: "安装桌面版更新",
installMessage: "这会更新此电脑上的 Paseo",
installConfirm: "安装更新",
update: "更新",
updateTo: "更新到 {{version}}",
installing: "正在安装...",
check: "检查",
checking: "正在检查...",
alertTitle: "错误",
alertMessage: "无法打开更新确认对话框。",
},
},
appearance: {
theme: {
title: "主题",
accessibilityLabel: "主题:{{value}}",
options: {
light: "Light",
dark: "Dark",
zinc: "Zinc",
midnight: "Midnight",
claude: "Claude",
ghostty: "Ghostty",
pureBlack: "纯黑",
auto: "系统",
},
},
detailLevel: {
title: "详细程度",
},
chatOutline: {
title: "聊天大纲",
description: "显示用于在提示词之间跳转的大纲",
},
sidebar: {
title: "侧边栏",
description: "选择侧边栏顶部显示的项目及其顺序",
moveUp: "上移",
moveDown: "下移",
},
fonts: {
title: "字体",
systemDefault: "系统默认",
interfaceFont: "界面字体",
interfaceFontHint: "用于整个应用。留空则使用系统默认",
interfaceFontAccessibility: "界面字体族",
interfaceSize: "界面字号",
interfaceSizeHint: "用于导航、控件和标签",
interfaceSizeAccessibility: "界面字体大小",
contentSize: "内容字号",
contentSizeHint: "用于聊天文本和渲染后的 Markdown",
contentSizeAccessibility: "内容字体大小",
codeFont: "代码字体",
codeFontHint: "用于代码、diff 和终端输出。留空则使用系统默认",
codeFontAccessibility: "代码字体族",
codeSize: "代码字号",
codeSizeHint: "用于代码、差异和终端输出",
codeSizeAccessibility: "代码字号",
},
syntax: {
title: "语法",
highlightTheme: "高亮主题",
highlightThemeHint: "代码配色,独立于应用主题",
highlightThemeAccessibility: "高亮主题:{{value}}",
previewAccessibility: "内容排版、语法主题和代码字体的实时预览",
previewContent: "内容和代码预览",
},
},
shortcuts: {
dialogTitle: "快捷键",
searchPlaceholder: "搜索快捷键",
unavailableOnMobile: "键盘快捷键仅在桌面端可用",
capturePrompt: "按下快捷键...",
unassigned: "未设置",
actions: {
menu: "{{name}} 的操作",
done: "完成",
cancel: "取消",
bind: "绑定",
rebind: "重新绑定",
clear: "清除",
reset: "重置为默认",
resetAll: "全部重置",
},
sections: {
general: "通用",
workspaces: "项目和工作区",
tabsPanes: "标签和窗格",
layout: "布局",
agentInput: "Agent 输入",
},
help: {
openProject: "打开项目",
newWorkspace: "新建 workspace",
newWorktree: "新建 worktree",
archiveWorkspace: "归档工作区",
newTab: "新建标签",
closeCurrentTab: "关闭当前标签",
jumpToWorkspace: "跳转到 workspace",
jumpToTab: "跳转到标签",
previousWorkspace: "上一个 workspace",
nextWorkspace: "下一个 workspace",
previousTab: "上一个标签",
nextTab: "下一个标签",
splitPaneRight: "向右拆分窗格",
splitPaneDown: "向下拆分窗格",
focusPaneLeft: "聚焦左侧窗格",
focusPaneRight: "聚焦右侧窗格",
focusPaneUp: "聚焦上方窗格",
focusPaneDown: "聚焦下方窗格",
moveTabLeft: "向左移动标签",
moveTabRight: "向右移动标签",
moveTabUp: "向上移动标签",
moveTabDown: "向下移动标签",
closePane: "关闭窗格",
newTerminal: "新建终端",
searchFiles: "搜索文件",
toggleCommandCenter: "切换命令中心",
showKeyboardShortcuts: "显示键盘快捷键",
toggleLeftSidebar: "切换左侧边栏",
toggleRightSidebar: "切换侧边面板",
toggleBothSidebars: "切换两侧边栏",
toggleSettings: "切换设置",
toggleFocusMode: "切换专注模式",
cycleTheme: "循环切换主题",
focusMessageInput: "聚焦消息输入框",
cycleAgentMode: "循环切换代理模式",
toggleVoiceMode: "切换语音模式",
startStopDictation: "开始/停止听写",
interruptAgent: "中断 Agent",
sendMessage: "发送消息",
queueMessage: "消息排队",
muteUnmuteVoiceMode: "静音/取消静音语音模式",
switchProject: "切换项目",
},
helpNotes: {
showKeyboardShortcuts: "焦点不在文本输入框或终端内时可用。",
},
},
integrations: {
title: "集成",
docs: {
cli: "CLI 文档",
openCli: "打开 CLI 文档",
},
commandLine: {
title: "命令行",
description: "从终端控制 Agent 并运行脚本",
},
actions: {
install: "安装",
installing: "正在安装...",
installed: "已安装",
},
},
permissions: {
title: "权限",
microphone: "麦克风",
refresh: "刷新",
refreshing: "正在刷新...",
refreshAccessibility: "刷新桌面端权限",
actions: {
granted: "已授权",
request: "请求",
requesting: "正在请求...",
},
},
host: {
password: {
guidance: "移除此主机,然后使用此守护进程要求的密码重新添加。",
},
appearance: {
title: "外观",
name: {
label: "名称",
},
color: {
label: "颜色",
accessibilityLabel: "颜色,{{value}}",
options: {
none: "默认",
violet: "紫罗兰",
sky: "天蓝",
emerald: "翠绿",
orange: "橙色",
pink: "粉色",
indigo: "靛蓝",
teal: "青色",
red: "红色",
amber: "琥珀",
blue: "蓝色",
},
},
badge: {
label: "侧边栏徽章",
accessibilityLabel: "侧边栏徽章,{{value}}",
options: {
name: "名称",
icon: "仅图标",
hidden: "隐藏",
},
},
preview: {
workspaceName: "my-workspace",
},
},
notFound: "Host 未找到",
badges: {
relay: "Relay",
local: "本地",
remoteSsh: "远程 SSH",
},
connections: {
title: "连接",
removeTitle: "移除连接",
removeMessage: "移除 {{name}}?此操作无法撤销。",
removeAction: "移除",
removeErrorTitle: "错误",
removeErrorMessage: "无法移除连接",
timeout: "超时",
},
pairDevices: {
title: "配对设备",
rowTitle: "配对设备",
rowHint: "扫描二维码或复制链接,将手机连接到这个 Host",
},
skills: {
...en.settings.host.skills,
sectionTitle: "编排 skills",
title: "编排 skills",
description: "教会 Agent 通过 CLI 编排任务",
updateAvailable: "有更新可用",
updateTitle: "更新 Paseo skills?",
updateFallback: "将内置 skills 同步到你的机器。",
uninstallTitle: "卸载 Paseo skills?",
uninstallMessage: "会从 ~/.agents、~/.claude、~/.codex 移除所有 Paseo 编排 skills。",
choose: "选择 skills",
chooseAll: "全部 skills",
chooseAllHint: "保持安装所有内置 skills,包括以后新增的。",
chooseList: "内置 skills",
chooseEmpty: "此版本未内置 skills。",
removeTitle: "移除取消勾选的 skills?",
removeMessage:
"将从 ~/.agents、~/.claude、~/.codex 中删除 {{skills}}。你在这些 skill 文件夹里添加的内容也会一并删除。",
saveFailed: "无法保存你的 skills 选择。",
statusFailed: "无法检查编排 skills 状态。",
updateFailed: "无法更新编排 skills。",
uninstallFailed: "无法卸载编排 skills。",
saveSelectionFailed: "无法保存编排 skills 的选择。",
actions: {
install: "安装",
installing: "正在安装...",
installed: "已安装",
update: "更新",
working: "处理中...",
remove: "移除",
uninstall: "卸载",
save: "保存",
saving: "正在保存...",
cancel: "取消",
},
operations: {
add: "添加 skill",
update: "更新 skill",
delete: "删除 skill",
},
},
orchestration: {
title: "编排",
unavailable: "连接到这个 Host 以管理编排",
enableTools: {
title: "启用 Paseo tools",
hint: "Agent 将能够管理 worktree、Agent 和计划",
accessibilityLabel: "注入 Paseo tools",
},
systemPrompt: {
title: "System prompt",
hint: "为所有 Agent 添加 system prompt",
sheetTitle: "追加 system prompt",
accessibilityLabel: "追加 system prompt",
placeholder: "始终保持回复简洁。",
edit: "编辑",
reset: "重置",
save: "保存",
saving: "保存中...",
},
},
agents: {
unavailable: "连接到这个 Host 以管理 Agent",
},
workspaces: {
unavailable: "连接到这个 Host 以管理 Workspace",
},
terminalProfiles: {
unavailable: "Connect to this host to manage terminal profiles",
sectionTitle: "Terminal profiles",
editProfile: "Edit profile",
addProfileTitle: "Add terminal profile",
editProfileTitle: "Edit terminal profile",
namePlaceholder: "Claude Code",
commandPlaceholder: "claude",
argsPlaceholder: "--dangerously-skip-permissions",
nameLabel: "Name",
commandLabel: "Command",
argsLabel: "Arguments",
nameRequired: "Name is required",
commandRequired: "Command is required",
argsHint: "Space-separated arguments passed to the command",
saving: "Saving...",
remove: "Remove",
removeConfirmTitle: "Remove profile?",
removeConfirmMessage: 'Remove "{{name}}"?',
moveUp: "Move up",
moveDown: "Move down",
save: "Save",
emptyState: "No profiles yet. Add one to launch terminals with a specific command.",
},
agentProfiles: {
sectionTitle: "Agent 配置",
unavailable: "连接到这个 Host 以管理 Agent 配置",
unsupported: "此 Host 运行的 Daemon 尚不支持 Agent 配置",
emptyState: "还没有配置。添加一个以便使用保存的 Provider 和 Model 启动 Agent。",
addProfileTitle: "添加 Agent 配置",
newProfile: "新建配置",
editProfile: "编辑配置",
editProfileTitle: "编辑 Agent 配置",
nameLabel: "名称",
namePlaceholder: "UI 工作",
iconLabel: "图标",
noIcon: "无",
providerLabel: "Provider",
providerPlaceholder: "选择一个 Provider",
noProviders: "此 Host 上没有可用的 Provider",
modelLabel: "Model",
noModels: "此 Provider 没有可选择的 Model",
modeLabel: "Mode",
noModes: "此 Provider 没有可选择的 Mode",
thinkingLabel: "Thinking",
noThinkingOptions: "此 Model 没有 Thinking 级别",
featuresLabel: "Features",
featureCount: "{{count}} 个 Feature",
featureCountOne: "{{count}} 个 Feature",
notesLabel: "适用场景",
notesPlaceholder: "用于 UI 工作 — 组件、布局和设计 token。",
notesHint: "帮助 Agent 在启动另一个 Agent 时选择此配置。",
save: "保存",
saving: "保存中...",
remove: "移除",
removeConfirmTitle: "移除配置?",
removeConfirmMessage: "移除「{{name}}」?",
moveUp: "上移",
moveDown: "下移",
},
daemon: {
rename: {
editLabel: "编辑标签",
title: "重命名 Host",
placeholder: "我的 Host",
submit: "重命名",
},
restart: {
title: "重启 Daemon",
hint: "重启 Daemon 进程。应用会自动重新连接",
confirm: "重启",
confirmTitle: "重启 {{name}}",
confirmMessage: "这会重启 Daemon。其上运行的 Agent 会继续运行;应用会自动重新连接。",
restarting: "正在重启...",
unableToReconnectTitle: "无法重新连接",
unableToReconnectMessage: "{{name}} 没有重新上线。请确认它已重启。",
unavailableTitle: "Host 不可用",
unavailableMessage: "这个 Host 尚未连接。请等待它上线后再重启。",
offlineTitle: "Host 离线",
offlineMessage: "这个 Host 已离线。Paseo 会自动重连,请等它恢复在线后再重启。",
requestFailedTitle: "错误",
requestFailedMessage: "发送重启请求失败。Paseo 会自动重连,请在 Host 显示在线后重试。",
dialogFailedMessage: "无法打开重启确认对话框。",
},
update: {
desktopManagedHint: "此 Daemon 由 Paseo Desktop 管理。请在 Host 上更新 Paseo Desktop。",
title: "Update daemon",
hint: "Update the daemon to the latest version and restart it",
confirm: "Update",
confirmTitle: "Update {{name}}",
confirmMessage:
"This will update the daemon to the latest version and restart it. Running agents will be briefly interrupted.",
updating: "Updating...",
phaseStarting: "Preparing update...",
phaseDownloading: "Downloading packages...",
phaseInstalling: "Installing...",
phaseComplete: "Update complete, restarting...",
unableToReconnectTitle: "Unable to reconnect",
unableToReconnectMessage:
"{{name}} did not come back online after updating. Please verify the daemon restarted.",
unavailableTitle: "Host unavailable",
unavailableMessage:
"This host is not connected. Wait for it to come online before updating.",
offlineTitle: "Host offline",
offlineMessage: "This host is offline. Wait until it is back online before updating.",
requestFailedTitle: "Update failed",
requestFailedMessage: "Failed to update the daemon: {{error}}",
dialogFailedMessage: "Unable to open the update confirmation dialog.",
},
dangerZone: "危险区域",
remove: {
title: "移除 Host",
localTitle: "移除 localhost 连接",
hint: "从此设备移除这个 Host 及其已保存连接",
localHint: "从此设备移除 localhost,并停止内置 Daemon",
localConfirmTitle: "移除 localhost 连接并停止 Daemon?",
confirmMessage: "移除 {{name}}?这会删除其已保存连接。",
localConfirmMessage:
"这会移除 localhost 连接、关闭内置 Daemon 管理,并停止托管 Daemon。远程 Host 会保持连接。",
errorTitle: "错误",
errorMessage: "无法移除 Host",
localErrorMessage: "无法移除 localhost 连接",
},
},
},
providers: {
title: "Providers",
addProvider: "添加 Provider",
providerDetails: "{{name}} Provider 详情",
enableProvider: "启用 {{name}}",
unavailable: "连接到这个 Host 以查看 Providers",
loading: "正在加载...",
addErrorTitle: "无法添加 Provider",
updateErrorTitle: "无法更新 Provider",
actions: {
menu: "{{name}} actions",
remove: "Remove provider",
removing: "Removing...",
},
remove: {
confirmTitle: "Remove {{name}}?",
confirmMessage: "This deletes the provider entry from config.json. It cannot be undone.",
confirm: "Remove",
errorTitle: "Unable to remove provider",
},
statuses: {
disabled: "已禁用",
loading: "正在加载",
error: "错误",
available: "可用",
notInstalled: "未安装",
},
models: {
one: "1 个 Model",
many: "{{count}} 个 Model",
addModel: "添加 Model",
addCustomTitle: "添加自定义 Model",
modelId: "Model ID",
modelIdPlaceholder: "例如 openai/gpt-5",
add: "添加",
adding: "正在添加...",
failedToSave: "保存 Model 失败",
removeModel: "移除 {{id}}",
searchPlaceholder: "搜索 Models",
loading: "正在加载 Models...",
retry: "重试",
retrying: "正在重试...",
noSearchMatches: "没有匹配搜索的 Model",
noneDetected: "未检测到 Model",
discovered: "已发现",
custom: "自定义 Models",
updated: "已更新 {{time}}",
},
diagnostic: {
title: "诊断",
button: "诊断",
refresh: "刷新",
refreshing: "正在刷新...",
copyLabel: "诊断",
copyAccessibility: "复制诊断",
copyFailed: "复制诊断失败",
refreshAccessibility: "刷新诊断",
refreshingAccessibility: "正在刷新诊断",
running: "正在运行诊断...",
none: "没有可用诊断",
failedToFetch: "获取诊断失败",
unknownError: "未知错误",
},
},
project: {
noEditableTarget: "此项目无法在这个 Host 上编辑。",
backToProjects: "返回 Projects",
edit: {
title: "编辑 Project",
name: "名称",
nameLabel: "Project 名称",
icon: "图标",
chooseImage: "选择图片",
useAutomatic: "使用自动",
imageUrl: "图片或网站 URL",
save: "保存更改",
savedToast: "Project 已更新",
},
readFailures: {
invalidTitle: "无法解析 paseo.json",
invalidDescription: "修复磁盘上的文件,然后重新加载。",
missingTitle: "这个 Host 没有这个 Project",
missingSingleHost: "所选 Host 没有这个 Project 的记录。",
transportTitle: "无法加载 paseo.json",
transportFallback: "Host 没有响应。",
failedTitle: "无法加载 paseo.json",
failedDescription: "重新加载以重试。",
},
worktree: {
title: "Worktree 生命周期 hooks",
info: "为此 Project 创建或清理 worktree 时运行的命令",
docs: "文档",
docsTooltip: "查看命令可用的环境变量和更多细节",
setup: "Setup",
setupAccessibility: "Worktree setup 命令",
uncommittedTitle: "提交 paseo.json 更改",
uncommittedDescription: "新工作树使用所选基础分支中的设置脚本。",
teardown: "Teardown",
teardownAccessibility: "Worktree teardown 命令",
},
scripts: {
title: "Scripts",
info: "可从此 Project 中任意 Agent 启动的长期服务和一次性命令",
empty: "还没有 scripts。",
untitled: "未命名 script",
port: "端口 {{port}}",
menuAccessibility: "打开 script 菜单",
removeTitle: "移除 script?",
removeMessage: "移除 {{name}}?",
removeFallbackName: "这个 script",
name: "名称",
command: "命令",
nameAccessibility: "Script 名称",
commandAccessibility: "Script 命令",
nameRequired: "名称必填",
commandRequired: "命令必填",
newScript: "新建 script",
editScript: "编辑 {{name}}",
runAsService: "作为服务运行",
serviceHint: "Paseo 会监管该进程,并通过 $PASEO_PORT 分配端口",
actions: {
add: "添加 script",
edit: "编辑",
remove: "移除",
},
},
metadata: {
title: "元数据生成",
info: "注入到 Paseo 用来生成元数据的 AI prompts 中的 Project 专属指令,可用于强制执行团队约定,例如分支命名、提交风格或 PR 格式",
branchName: "分支名称",
branchNamePlaceholder: "分支以 feat/ 或 fix/ 开头,个人分支使用 mb/",
commitMessage: "提交消息",
commitMessagePlaceholder: "使用带 scope 的 Conventional Commits",
pullRequest: "Pull requests",
pullRequestPlaceholder: "先写一段摘要,并包含 Test plan 部分",
},
writeFailures: {
staleTitle: "磁盘上的配置已变更",
staleDescription: "保存前请重新加载最新的 paseo.json。",
failedTitle: "无法保存 paseo.json",
failedDescription: "重试,或从磁盘重新加载最新版本。",
},
actions: {
reload: "重新加载",
tryAgain: "重试",
save: "保存",
saved: "Project 已保存",
saving: "正在保存...",
cancel: "取消",
},
},
},
};