diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ef12458..89823b83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -242,6 +242,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- **Chinese UI copy reads like Chinese** (#980). Half-width `?` and `,` in the + hard-reset confirmation, the passphrase, Finder and server naming used two + words each, and three quote/dash styles were mixed; these are now one each, + and the most literal translations (file errors, update and version-mismatch + dialogs, SSH prompts) are rewritten. The fork error that pointed to + "Settings → Agents" — a page that is called Integrations — now names it + correctly in every language and in the `tty7` CLI. - **Return runs the top row after a search that found nothing.** Backspacing from a query with no results to one with some — or opening the search already filtered, as the New Tab menu's *Other Shells…* row does — left no row selected, so Return did nothing until an arrow key was diff --git a/README.zh-CN.md b/README.zh-CN.md index 64e9429b..6ceb6bbd 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -28,7 +28,7 @@ ## 为什么 -真正持有 shell 和 pane 的是后台常驻的 server,不是窗口。下面这些几乎都是这一个决定的结果。 +shell 和窗格由后台常驻的 server 持有,而不是窗口。下面这些特性几乎都源自这一设计。 - **性能**:吞吐是 Alacritty、Ghostty、Kitty 的两倍左右([基准测试](#基准测试)) - **会话常驻**:退出应用或重启机器后,shell 和已支持的 agent 会话继续运行,不需要 tmux @@ -53,7 +53,7 @@ macOS、Windows、Linux 的原生构建都在 [**Releases**](https://github.com/ |---|---| | **Agent 感知** | 逐 pane 识别 20 个 CLI agent · 状态点 · 通知 · 分支 + diff · 需要输入时托盘图标提醒 · 重启后续上会话 · 侧边栏按仓库分组 | | **CLI + Skills** | 安装包自带 `tty7` CLI · [agent skill](skills/tty7/SKILL.md) · `run` 转发命令输出并原样返回退出码 · `split` · `send` · `wait --until free` · `capture` | -| **编辑器级输入** | 从历史推出影子建议 · Tab 补全附带说明 · 语法高亮 · 多行编辑 · 点击定位光标 · ⌃ R 模糊搜索历史 | +| **编辑器级输入** | 基于历史的内联补全建议 · Tab 补全附带说明 · 语法高亮 · 多行编辑 · 点击定位光标 · ⌃ R 模糊搜索历史 | | **窗口** | 标签页与分屏 · ⌘ P 随处搜索 · ⌘ F 回滚搜索 · ⌘ J 侧栏列出进程树和监听端口 · 13 套主题,也能写自己的 YAML 或导入 iTerm2 配色 · 输入法 | | **Shell 集成** | pane 启动时自动注入,不用你装什么 · 提示符边界 · 工作目录 · 退出码 · 命令跑完发通知 · 覆盖 zsh、bash、fish、PowerShell、WSL 和远程 pane | | **远程工作区** | 远端的文件、仓库、改动、diff、worktree、标签页和 pane · 从任意客户端重连,接着离开时的位置继续 | diff --git a/crates/tty7-cli/src/commands.rs b/crates/tty7-cli/src/commands.rs index 45198d3f..68da3d2a 100644 --- a/crates/tty7-cli/src/commands.rs +++ b/crates/tty7-cli/src/commands.rs @@ -1899,7 +1899,7 @@ fn agents_human( for diagnostic in diagnostics { let state = diagnostic.gap.describe(); human.push_str(&format!( - "{} is running, but its tty7 agent-status hooks are {state}. Open Settings → Agents to {} the hooks, then start a new {} session.\n", + "{} is running, but its tty7 agent-status hooks are {state}. Open Settings → Integrations to {} the hooks, then start a new {} session.\n", diagnostic.agent.display_name(), diagnostic.gap.action(), diagnostic.agent.display_name(), @@ -2071,7 +2071,7 @@ fn hooks_summary(hooks: &[(HookAgent, HooksState)]) -> String { summary.push_str(&format!("; {missing} not installed")); } if installed.is_empty() || !outdated.is_empty() { - summary.push_str(" (Settings → Agents)"); + summary.push_str(" (Settings → Integrations)"); } summary } @@ -4734,7 +4734,7 @@ mod tests { r.human ); assert!( - r.human.contains("Settings → Agents"), + r.human.contains("Settings → Integrations"), "say where the fix is: {}", r.human ); diff --git a/src/ui/i18n/en.rs b/src/ui/i18n/en.rs index c5a75c16..119e361a 100644 --- a/src/ui/i18n/en.rs +++ b/src/ui/i18n/en.rs @@ -1722,7 +1722,7 @@ pub fn translate_en(key: L10nKey) -> &'static str { L10nKey::AppForkNoCommand => "tty7 has no fork command for {name}", L10nKey::AppForkLocalOnly => "{name} sessions can only be forked from a local pane", L10nKey::AppForkNoSessionId => { - "tty7 hasn't seen a {name} session id in this pane — install its hooks in Settings → Agents" + "tty7 hasn't seen a {name} session id in this pane — install its hooks in Settings → Integrations" } L10nKey::AppForkSessionIdNotToken => "{name}'s session id isn't a plain token", L10nKey::AppForkMidTurn => "{name} is mid-turn — the fork won't include the turn in flight", diff --git a/src/ui/i18n/ja.rs b/src/ui/i18n/ja.rs index f3eb1699..f76adc4b 100644 --- a/src/ui/i18n/ja.rs +++ b/src/ui/i18n/ja.rs @@ -1765,7 +1765,7 @@ pub fn translate_ja(key: L10nKey) -> Option<&'static str> { "{name} のセッションはローカルペインからしかフォークできません" } L10nKey::AppForkNoSessionId => { - "tty7 はこのペインで {name} のセッション ID を確認できていません — 設定 → エージェントでフックをインストールしてください" + "tty7 はこのペインで {name} のセッション ID を確認できていません — 設定 → 連携でフックをインストールしてください" } L10nKey::AppForkSessionIdNotToken => { "{name} のセッション ID はプレーンなトークンではありません" diff --git a/src/ui/i18n/zh.rs b/src/ui/i18n/zh.rs index 6728b028..0356e4c2 100644 --- a/src/ui/i18n/zh.rs +++ b/src/ui/i18n/zh.rs @@ -27,13 +27,13 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsShortcutsHintTmux => { "tmux 预设:窗格与标签页操作使用前缀键。点击快捷键即可修改;Esc 取消,⌫ 清除。" } - L10nKey::SettingsShortcutConflict => "{keys} 已被「{action}」使用,替换后将从那里移除。", + L10nKey::SettingsShortcutConflict => "{keys} 已被“{action}”使用,替换后将从那里移除。", L10nKey::SettingsReplace => "替换", - L10nKey::SettingsNoActionsMatch => "没有与「{query}」匹配的操作", + L10nKey::SettingsNoActionsMatch => "没有与“{query}”匹配的操作", L10nKey::SettingsSearchShortcuts => "搜索操作或按键", L10nKey::SettingsHostsDesc => "最近使用的主机。搜索可找到任意已保存的主机。", L10nKey::SettingsAddHost => "添加主机", - L10nKey::SettingsNoHostsMatch => "没有与「{query}」匹配的主机", + L10nKey::SettingsNoHostsMatch => "没有与“{query}”匹配的主机", L10nKey::SettingsHostsFromFiles => "{count} 台主机,来自 {files} 个来源", L10nKey::SettingsMoreHosts => "还有 {count} 台主机", L10nKey::SettingsShowRecentOnly => "只显示最近", @@ -58,7 +58,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsMachineRemoteDesc => "通过当前与 {name} 的连接安装。", L10nKey::SettingsAgentsInstalledSummary => "已安装 {count} / {total}", L10nKey::SettingsNoAgentsInstalled => "这台机器上还没有安装 Agent 钩子。", - L10nKey::SettingsNoAgentsMatch => "没有与「{query}」匹配的 Agent", + L10nKey::SettingsNoAgentsMatch => "没有与“{query}”匹配的 Agent", L10nKey::SettingsMoreAgents => "还有 {count} 个可用 Agent", L10nKey::SettingsShowInstalledOnly => "只显示已安装", L10nKey::SettingsWorking => "处理中…", @@ -221,7 +221,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { "模糊半透明窗口背后的内容。需要合成器支持——KDE Plasma 可以;GNOME 和裸 X11 下窗口只会变透明。" } } - L10nKey::SettingsBlurAutoDesc => "模糊窗口背后的内容,仅限「自动」材质。", + L10nKey::SettingsBlurAutoDesc => "模糊窗口背后的内容,仅限“自动”材质。", L10nKey::SettingsBackdrop => "背景材质", L10nKey::SettingsBackdropDesc => "半透明窗口背后的原生背景材质。", L10nKey::SettingsSearchBackdropKeywords => { @@ -376,18 +376,14 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsTestConnection => "测试", L10nKey::SettingsTestRunning => "正在测试连接…", L10nKey::SettingsTestReached => "已连接并通过认证,用时 {time}。", - L10nKey::SettingsTestNeedsPassword => "已连到服务器 —— 它要求输入密码,点连接后再输入。", - L10nKey::SettingsTestNeedsPassphrase => { - "已连到服务器 —— 私钥要求输入口令,点连接后再输入。" - } + L10nKey::SettingsTestNeedsPassword => "已连到服务器:它要求输入密码,点连接后再输入。", + L10nKey::SettingsTestNeedsPassphrase => "已连到服务器:私钥要求输入口令,点连接后再输入。", L10nKey::SettingsTestNeedsInteractive => { - "已连到服务器 —— 它要求交互式验证(如 2FA),点连接后再作答。" - } - L10nKey::SettingsTestNeedsHostKey => { - "已连到服务器 —— 它的主机密钥还没被接受,先连一次确认。" + "已连到服务器:它要求交互式验证(如 2FA),点连接后再作答。" } + L10nKey::SettingsTestNeedsHostKey => "已连到服务器:它的主机密钥还没被接受,先连一次确认。", L10nKey::SettingsTestHostKeyChanged => { - "已连到服务器 —— 它的主机密钥和上次不一样了,先连一次核对这次变更。" + "已连到服务器:它的主机密钥和上次不一样了,先连一次核对这次变更。" } L10nKey::SettingsTestFailed => "没连上:{reason}", L10nKey::SettingsProxyPortInvalid => "端口必须在 1-65535 之间——只写主机则使用默认端口。", @@ -426,7 +422,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsLoginScriptsDesc => "shell 打开后发送的命令,每行一个。", L10nKey::SettingsSkipBanner => "跳过横幅", L10nKey::SettingsSkipBannerDesc => "抑制服务器登录横幅。", - L10nKey::SettingsDefaultFollowsDefaults => "默认跟随默认设置,当前为 {value}。", + L10nKey::SettingsDefaultFollowsDefaults => "沿用全局默认设置(当前为 {value})。", L10nKey::SettingsValueOn => "开", L10nKey::SettingsValueOff => "关", L10nKey::SettingsDefault => "默认", @@ -481,14 +477,12 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsOpenFilesSystem => "默认应用", L10nKey::SettingsOpenFilesCommand => "自定义命令", L10nKey::SettingsOpenFilesModeDesc => { - "{modifier}+点击 文件链接时用什么打开。只有内置编辑器能跳到指定行、打开远程文件。" + "{modifier}+点击文件链接时的打开方式。只有内置编辑器能跳到指定行、打开远程文件。" } - L10nKey::LinkFileNotUnder => "{path} —— {dir} 下没有这个文件", - L10nKey::LinkFileNoDirectory => { - "{path} —— 这个窗格没有报告自己在哪个目录,相对路径无从算起" - } - L10nKey::LinkFileMissing => "{path} —— 这个路径下什么也没有", - L10nKey::LinkDirOutsideTree => "{path} —— 它在另一台机器上,也不在文件面板打开的任何目录里", + L10nKey::LinkFileNotUnder => "{path}:{dir} 下没有这个文件", + L10nKey::LinkFileNoDirectory => "{path}:当前窗格未上报工作目录,无法解析相对路径", + L10nKey::LinkFileMissing => "{path}:路径不存在", + L10nKey::LinkDirOutsideTree => "{path}:它在另一台机器上,也不在文件面板打开的任何目录里", L10nKey::OpenFilesWith => "打开文件方式", L10nKey::SettingsOpenFilesWithDesc => "可用 {path}、{line}、{column},留空用默认应用。", L10nKey::SettingsBellModeOff => "关", @@ -502,7 +496,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { "在输入行上提供选择、撤销和菜单。关闭后交还给 ZLE、readline 或 fish。" } L10nKey::SettingsNeedsPromptEditor => { - "需要提示符编辑器:它关闭时,这个按键本就归 shell 所有。" + "依赖提示符编辑器:关闭提示符编辑器时,此按键由 shell 处理。" } L10nKey::SettingsTabCompletion => "Tab 补全", L10nKey::SettingsTabCompletionDesc => "Tab 打开 tty7 的补全菜单,关闭后交给 shell。", @@ -577,7 +571,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsDiffPreviewFromCounts => "从侧栏计数打开 diff 预览", L10nKey::SettingsDiffPreviewFromCountsDesc => "点击行上的 +N −N 打开 diff。", L10nKey::SettingsSshTabTitle => "SSH 标签页标题", - L10nKey::SettingsSshTabTitleDesc => "SSH 标签页以什么命名。", + L10nKey::SettingsSshTabTitleDesc => "SSH 标签页标题的命名方式。", L10nKey::SettingsSshTabTitleDynamic => "动态", L10nKey::SettingsSshTabTitleProfileName => "配置名称", L10nKey::SettingsSshTabTitleHostname => "主机名", @@ -638,7 +632,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsUpdateDownloadingPercent => "正在下载更新… {percent}%,共 {size}", L10nKey::SettingsUpdateDownloadingBytes => "正在下载更新… 已下载 {received}", L10nKey::SettingsUpdateVerifying => "正在校验下载的更新…", - L10nKey::SettingsUpdateInstalling => "正在通过更新重新启动…", + L10nKey::SettingsUpdateInstalling => "正在重启以应用更新…", L10nKey::SettingsUpdateCheckNow => "立即检查", L10nKey::SettingsUpdateCancel => "取消下载", L10nKey::SettingsUpdateRetry => "重试", @@ -667,7 +661,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { "tty7 {version} 已发布,你现在是 {current}。安装会重启应用和 tty7 server:窗格里的进程会被结束,标签页和布局以全新的 shell 恢复。" } L10nKey::UpdateDialogDetailManual => "tty7 {version} 已发布,你现在是 {current}。{hint}", - L10nKey::UpdateDialogCannotSelfUpdate => "这份安装无法自行更新。", + L10nKey::UpdateDialogCannotSelfUpdate => "当前安装方式不支持自动更新。", L10nKey::UpdateDialogLater => "以后再说", L10nKey::UpdateDialogNextLaunch => "下次启动时安装", L10nKey::UpdateDialogNeedsElevation => { @@ -677,7 +671,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SettingsUpdatePrepareFailed => "更新失败:{error}", L10nKey::SettingsUpdateLaunchFailed => "无法启动安装程序:{error}", L10nKey::SettingsUpdateUnsupportedMacos => { - "当前副本不在可写的 tty7.app 包里,无法自我替换。请把 tty7 移到“应用程序”,或打开发布页面更新。" + "当前应用不在可写的 tty7.app 包内,无法自动更新。请把 tty7 移到“应用程序”,或打开发布页面更新。" } L10nKey::SettingsUpdateUnsupportedLinux => { "发布版本中没有适用于该架构的 Linux 包。请自行从源码构建,或使用包管理器。" @@ -1059,17 +1053,17 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::FileDropTooDeep => "文件夹嵌套超过 {n} 层。", L10nKey::FileDropTooLarge => "超过 {limit} MB,请改用 SFTP 传输。", L10nKey::FileDropNoWorkingName => "旁边找不到可用的临时名称,无法先复制再替换。", - L10nKey::FileDropLeftAside => "新副本没能就位,原来的东西现在在同一目录下叫“{name}”。", + L10nKey::FileDropLeftAside => "未能完成替换,原有项目已在同一目录下重命名为“{name}”。", L10nKey::FileDropReplaceTitle => "替换“{name}”?", L10nKey::FileDropReplaceManyTitle => "替换 {n} 个项目?", - L10nKey::FileDropReplaceBody => "这个目录下已经有同名的东西了,替换后无法撤销。", + L10nKey::FileDropReplaceBody => "当前目录下已存在同名项目,替换后无法撤销。", L10nKey::FileDropReplace => "替换", L10nKey::FileDropFailed => "无法复制 {name}", L10nKey::FileDropFailedMany => "无法复制 {name},另有 {n} 个也失败了", L10nKey::SshPromptNewKey => "新 {fingerprint}", L10nKey::SshPromptOldKey => "旧 {old_fingerprint}", L10nKey::SshPromptHostKeyNewAlgorithm => { - "你已经通过一把 {previous_algorithm} 密钥认识这台主机。这是一把新的 {algorithm} 密钥,并不是用来替换那一把的。" + "此前已记录这台主机的 {previous_algorithm} 密钥。这是一把新的 {algorithm} 密钥,不会替换原有密钥。" } L10nKey::SshPromptTypeYesToOverride => "输入 yes 才能启用“覆盖”。", L10nKey::EditorCantOpen => "无法打开 {path}:{e}", @@ -1117,7 +1111,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::PanelAgentWorking => "进行中", L10nKey::PanelAgentWaiting => "等待中", L10nKey::PanelAgentDone => "已完成", - L10nKey::PanelRevealInFinder => "在 Finder 中显示", + L10nKey::PanelRevealInFinder => "在访达中显示", L10nKey::PanelOpenFolder => "打开文件夹", L10nKey::PanelOpenInBrowser => "在浏览器中打开", L10nKey::ScmGroupMerge => "合并冲突", @@ -1145,7 +1139,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::ScmTimeMonths => "{n}个月", L10nKey::ScmTimeYears => "{n}年", L10nKey::ScmResetHardConfirm => { - "把分支重置到这个提交?之后的提交会从分支上消失,未提交的更改会被丢弃。" + "把分支重置到这个提交?之后的提交会从分支上消失,未提交的更改会被丢弃。" } L10nKey::ScmReset => "重置", L10nKey::ScmChipStaged => "已暂存", @@ -1158,7 +1152,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::ScmDiscardConfirm => "放弃对 {path} 的更改?此操作无法撤销。", L10nKey::ScmOpenConflict => "解决冲突", L10nKey::ScmMarkResolved => "标记为已解决", - L10nKey::ScmUnrepresentablePath => "该路径不是合法的 UTF-8,无法传给 git —— 仅可查看。", + L10nKey::ScmUnrepresentablePath => "该路径不是合法的 UTF-8,无法传给 git,仅可查看。", L10nKey::ScmPublishBranch => "发布分支", L10nKey::ScmDetached => "游离头指针", L10nKey::ScmPushDetached => "HEAD 游离——请先切换到一个分支再推送", @@ -1204,7 +1198,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { "放弃所有未暂存的改动和未跟踪的文件?已暂存的改动会保留。此操作无法撤销。" } L10nKey::ScmAmendConfirm => { - "修补上一次提交?它会被一个新提交取代,已经拿到旧提交的人需要自行处理。" + "修补上一次提交?它会被一个新提交取代,已经获取旧提交的协作者需要自行同步。" } L10nKey::ScmOpMerge => "合并中", L10nKey::ScmOpRebase => "变基中", @@ -1335,7 +1329,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::RemoteInstallBytes => "字节", L10nKey::RemoteMismatchTitle => "更新“{machine}”上的 tty7 server?", L10nKey::RemoteMismatchDetail => { - "{machine} 上跑的是 server {running},此客户端({wanted})不认它的协议。匹配的 server 已经装好了,但你的会话在正在跑的那个上面。\n\n{replace_server}\u{2003}换成 {wanted},并结束它托管的所有会话。\n{cancel}\u{2003}保持 {machine} 现状。此窗口不会连接。" + "{machine} 上正在运行的 server({running})与此客户端({wanted})的协议不兼容。匹配的 server 已经安装,但你的会话仍在当前运行的 server 上。\n\n{replace_server}\u{2003}换成 {wanted},并结束它托管的所有会话。\n{cancel}\u{2003}保持 {machine} 现状。此窗口不会连接。" } L10nKey::RemoteMismatchReplaceServer => "更新 server", L10nKey::RemoteMismatchDowngradeServer => "替换 server", @@ -1352,17 +1346,17 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::RemoteDaemonStartFailed => "无法启动 tty7 本地 server:{error}", L10nKey::RemoteDaemonUnreachable => "无法连接到 tty7 本地 server:{error}", L10nKey::RemoteDaemonTooOld => { - "本机的 tty7 守护进程版本较旧,无法重启 {machine} 上的 server。请退出 tty7(这会停止守护进程)再打开,然后重试。" + "本机的 tty7 本地 server 版本较旧,无法重启 {machine} 上的 server。请退出 tty7(这会停止本地 server)再打开,然后重试。" } L10nKey::RemoteProfileMissing => "该已保存的 SSH 主机配置已不存在", L10nKey::RemoteAliasMissing => "“{alias}”已不再位于 ~/.ssh/config 中", L10nKey::RemoteWslNoSsh => "WSL 工作区没有 SSH 连接", L10nKey::RemoteLocalStdioNoSsh => "本地 --stdio 工作区没有 SSH 连接", - L10nKey::RemoteHostNotTty7 => "{machine} 已响应,但并非作为 tty7 server:{error}", + L10nKey::RemoteHostNotTty7 => "{machine} 已响应,但它不是 tty7 server:{error}", L10nKey::RemoteWorkspaceListFailed => "已连接到 {machine},但其工作区列表获取失败:{error}", L10nKey::RemoteServerRestartFailed => "无法重启 {machine} 上的 tty7 server:{error}", L10nKey::RemoteNoRouteToHost => "tty7 已无法到达 {machine}", - L10nKey::RemoteMachineTreeUnexpectedReply => "server 用 {reply} 回复了机器树请求", + L10nKey::RemoteMachineTreeUnexpectedReply => "获取机器树时收到意外响应:{reply}", L10nKey::RemoteMismatchVersionFromExe => "{version}(来自 {exe})", L10nKey::AppNoRunningCodingAgent => { "未找到运行中的编码 agent——请先在某个窗格中启动一个(claude、codex 等)。" @@ -1377,9 +1371,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SwitcherDisconnect => "断开连接", L10nKey::SwitcherEditHost => "编辑主机…", L10nKey::SwitcherSaveAsHost => "保存为 SSH 主机…", - L10nKey::SshSaveDroppedJumpHost => { - "跳板机没有带过来 —— 主机配置的跳板必须是另一个已保存的主机。" - } + L10nKey::SshSaveDroppedJumpHost => "未导入跳板机设置:跳板机必须是另一个已保存的主机。", L10nKey::SwitcherOpenInNewWindow => "在新窗口中打开", L10nKey::SwitcherRename => "重命名…", L10nKey::SwitcherPickAWorkspace => "选一个工作区查看它的标签页。", @@ -1406,7 +1398,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SwitcherFormCreateHint => "Enter 创建 · Esc 返回", L10nKey::SwitcherFormPickHint => "↑↓ 选择 · Enter 确定 · Esc 收起", L10nKey::SshPromptPasswordFor => "{user}@{host} 的密码", - L10nKey::SshPromptPassphraseFor => "{key_path} 的密码短语", + L10nKey::SshPromptPassphraseFor => "{key_path} 的口令", L10nKey::SshPromptTwoFactor => "双因素认证", L10nKey::SshPromptUnknownHost => "未知主机 {host}", L10nKey::SshPromptHostKeyChanged => "主机密钥已更改——可能存在中间人攻击", @@ -1416,13 +1408,13 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::SshPromptSubmit => "提交", L10nKey::HostOpsError => "{context}:{error}", L10nKey::IoDenied => "没有权限。", - L10nKey::IoGone => "它已经不在了。", + L10nKey::IoGone => "文件或目录已不存在。", L10nKey::IoNoSpace => "磁盘没有空间了。", - L10nKey::IoReadOnly => "那个位置是只读的。", - L10nKey::IoBusy => "有别的程序正占着它。", + L10nKey::IoReadOnly => "目标位置是只读的。", + L10nKey::IoBusy => "它正被其他程序占用。", L10nKey::IoTimedOut => "对方没有在规定时间内响应。", L10nKey::TreeWindowOpenedEmpty => { - "tty7 server 没有交出这个窗口的标签页,所以窗口是空的。什么都没丢,它一响应就会回来。如果一直不回来,在命令面板里执行「重启 tty7 server」。" + "tty7 server 尚未返回这个窗口的标签页,所以窗口暂时是空的。会话没有丢失,server 响应后会自动恢复;如果长时间没有恢复,请在命令面板中执行“重启 tty7 server”。" } L10nKey::CmdGroupTabsPanes => "标签页与窗格", L10nKey::CmdGroupWorkspaces => "工作区", @@ -1558,16 +1550,16 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::AppRestartServerTitle => "重启 tty7 server?", L10nKey::AppRestartServerFailed => "无法重启 tty7 server:{error}", L10nKey::AppRestartServerMismatchDetail => { - "tty7 server 用协议 {protocol}(构建 v{build}),此应用用 {ours},标签页取不出来。\n\n退出:什么都不变,tty7 server 和 shell 继续运行。\n重启:标签页带全新 shell 回来,现在跑着的东西会被杀掉。" + "tty7 server 的协议为 {protocol}(构建 v{build}),此应用为 {ours},无法获取标签页。\n\n退出:什么都不变,tty7 server 和 shell 继续运行。\n重启:标签页会以全新的 shell 恢复,当前运行的程序会被终止。" } L10nKey::AppRestartServerDialectDetail => { - "tty7 server 用 control 方言 v{dialect}(构建 v{build}),此应用用 v{ours},每个窗口都开成空的。\n\n退出:什么都不变,tty7 server 和 shell 继续运行。\n重启:标签页带全新 shell 回来,现在跑着的东西会被杀掉。" + "tty7 server 的控制协议版本为 v{dialect}(构建 v{build}),此应用为 v{ours},版本不匹配,每个窗口都会打开为空。\n\n退出:什么都不变,tty7 server 和 shell 继续运行。\n重启:标签页会以全新的 shell 恢复,当前运行的程序会被终止。" } L10nKey::AppRestartServerDialectNewerDetail => { - "tty7 server 用 control 方言 v{dialect}(构建 v{build}),此应用用 v{ours},每个窗口都开成空的。\n\n退出并装上更新的构建:真正的解法,shell 全都还在。\n重启:标签页带全新 shell 回来,现在跑着的东西会被杀掉。" + "tty7 server 的控制协议版本为 v{dialect}(构建 v{build}),此应用为 v{ours},版本不匹配,每个窗口都会打开为空。\n\n退出并安装更新的版本(推荐):所有 shell 都会保留。\n重启:标签页会以全新的 shell 恢复,当前运行的程序会被终止。" } L10nKey::AppRestartServerOldDetail => { - "tty7 server 早于版本握手,此应用无从得知它说的是什么。\n\n退出:什么都不变,tty7 server 和 shell 继续运行。\n重启:标签页带全新 shell 回来,现在跑着的东西会被杀掉。" + "当前运行的 tty7 server 版本过旧,不支持版本握手,此应用无法判断它的协议版本。\n\n退出:什么都不变,tty7 server 和 shell 继续运行。\n重启:标签页会以全新的 shell 恢复,当前运行的程序会被终止。" } L10nKey::AppRestart => "重启", L10nKey::AppRestartServerNoServer => { @@ -1599,8 +1591,8 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::AppReopenTabFailed => "无法重新打开标签页:没有启动终端", L10nKey::AppOpenTerminalFailed => "无法打开终端:{error}", L10nKey::AppTabsNotRestored => "上次的 {count} 个标签页没能重新打开", - L10nKey::AppFullscreenEntered => "已进入全屏 —— 按 {key} 退出", - L10nKey::AppFullscreenEnteredNoKey => "已进入全屏 —— 窗口按钮在退出前会一直隐藏", + L10nKey::AppFullscreenEntered => "已进入全屏,按 {key} 退出", + L10nKey::AppFullscreenEnteredNoKey => "已进入全屏,窗口按钮在退出前会一直隐藏", L10nKey::LaunchWorkspacesLeftRunning => { "只恢复了这个窗口——还有 {count} 个工作区在后台运行,可从侧边栏重新打开。" } @@ -1615,9 +1607,9 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::AppForkNoCommand => "tty7 没有用于 {name} 的 fork 命令", L10nKey::AppForkLocalOnly => "{name} 会话只能从本地窗格 fork", L10nKey::AppForkNoSessionId => { - "tty7 尚未在此窗格中看到 {name} 的会话 ID——请在设置 → Agents 中安装其 hook" + "tty7 尚未在此窗格中看到 {name} 的会话 ID,请在“设置 → 集成”中安装其 hook" } - L10nKey::AppForkSessionIdNotToken => "{name} 的会话 ID 不是普通令牌", + L10nKey::AppForkSessionIdNotToken => "{name} 的会话 ID 格式异常(不是单个连续字符串)", L10nKey::AppForkMidTurn => "{name} 正在处理中——fork 不会包含进行中的这一轮", L10nKey::AppTabNoWorkingDirectory => "此标签页还没有工作目录", L10nKey::AppNothingSelected => "未选择任何内容——请先选择一些终端输出。", @@ -1668,7 +1660,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::AppAgentHooksHomeDirUnresolved => "无法解析主目录", L10nKey::AppAgentHooksInstalled => "已安装", L10nKey::AppAgentHooksInstalledEnableCodexThere => { - "已安装 —— 需要在那台机器上运行一次 `codex features enable hooks`" + "已安装,还需要在那台机器上运行一次 `codex features enable hooks`" } L10nKey::AppAgentHooksInstalledCodexEnableFailed => { "已安装,但无法运行 `codex features enable hooks`({error})—— 请手动运行一次" @@ -1716,10 +1708,10 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { "tty7 已更新。server 可原地替换,shell 不受影响;只有内置 SSH 的窗格会断开。" } L10nKey::AppRestartServerBodyInPlace => { - "tty7 server 会原地把自己换成当前这个版本:shell 继续运行,窗口稍后自动连回去。用 tty7 内置 SSH 客户端的窗格除外——那些连接会断开,需要重新打开。" + "tty7 server 会原地更新到当前版本:shell 继续运行,窗口稍后自动重连。用 tty7 内置 SSH 客户端的窗格除外——那些连接会断开,需要重新打开。" } L10nKey::PaneRestoredScreenBanner => { - "已恢复的画面 —— 下面是新的 shell,上面的内容都已不在运行" + "已恢复的画面:下面是新的 shell,上面的内容都已不在运行" } L10nKey::SettingsPerPaneHistory => "各窗格使用独立命令历史", L10nKey::SettingsPerPaneHistoryDescription => "↑ 只翻本窗格的历史,仅限 bash 和 zsh。", @@ -1837,7 +1829,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::TabTooltipHideSidebar => "隐藏侧栏", L10nKey::TabTooltipHideDetailPanel => "隐藏详情面板", L10nKey::TabTooltipShowDetailPanel => "显示详情面板", - L10nKey::TabTooltipZoomed => "窗格已缩放 — 其他窗格已隐藏", + L10nKey::TabTooltipZoomed => "窗格已缩放,其他窗格已隐藏", L10nKey::TabMenuLocalShells => "本地", L10nKey::TabMenuAddHost => "添加 SSH 主机…", L10nKey::TabMenuAllHosts => "所有 SSH 主机…", @@ -1870,7 +1862,7 @@ pub fn translate_zh(key: L10nKey) -> Option<&'static str> { L10nKey::TabContextMarkUnread => "标记为未读", L10nKey::TabContextHibernate => "休眠", L10nKey::TabContextWake => "唤醒", - L10nKey::TabTooltipAsleep => "已休眠 — 选中即可唤醒", + L10nKey::TabTooltipAsleep => "已休眠,选中即可唤醒", L10nKey::TabWakeFailed => "无法唤醒标签页:其中的窗格都无法启动", }) }