👤 用户
好的,数据全部收集完毕。下面是完整的报告: 📂 CmdCode V0.3 src/ 完整功能树 & i18n 现状 一、src/ 顶层目录结构(按文件数排序) 目录 文件数 说明 utils/ 816 工具函数(bash解析、权限、模型、MCP、插件、设置、遥测等) components/ 598 React UI组件(权限对话框、消息、MCP、设置、提示输入等) tools/ 309 工具实现(Bash、文件读写编辑、搜索、Web等) services/ 268 服务层(API、认证、聊天、嵌入等) commands/ 231 斜杠命令(/locale、/login、/config、/mcp等) hooks/ 147 React hooks cli/ 129 CLI处理和传输层 ink/ 104 自定义Ink渲染组件 screens/ 51 全屏界面 bridge/ 36 远程桥接(REPL、Webhook、会话等) types/ 32 类型定义 constants/ 30 常量 skills/ 28 技能系统 entrypoints/ 21 入口点 keybindings/ 16 快捷键 i18n/ 8 🌐 国际化核心 其他 ~60 web-server、vim、voice、migrations等 总计:2949个 .ts/.tsx 文件 二、🌐 i18n 国际化系统架构 src/i18n/ ← 国际化核心目录(8个文件) ├── index.ts ← 核心模块(229行) │ ├── t(key, options?) ← 翻译函数(支持插值{key}语法) │ ├── getCurrentLocale() ← 获取当前语言(优先级:缓存→配置文件→环境变量→系统→默认zh-CN) │ ├── setCurrentLocale(locale) ← 设置语言(持久化到 ~/.cmdcode/locale.json) │ ├── isSupportedLocale() ← 检查语言支持 │ ├── getSupportedLanguages() ← 获取支持语言列表 │ └── DEFAULT_LOCALE = 'zh-CN' ← 默认中文! │ ├── types.ts ← 类型定义(40行) │ ├── Locale = 'en' | 'zh-CN' ← 目前支持2种语言 │ ├── TranslationValue ← string | PluralForms │ └── SUPPORTED_LANGUAGES ← [{code, nativeName, englishName}] │ ├── hook.ts ← React Hook(84行) │ ├── useI18n() ← 完整Hook(t + locale + setLocale + 语言元数据) │ └── useTranslation() ← 精简Hook(仅返回t函数) │ └── translations/ ├── index.ts ← 导出入口 ├── en.ts ← 英文翻译(1596行, 1084个key, 76KB) ├── zh-CN.ts ← 中文翻译(1451行, 约700+个key, 101KB) └── ❌╘н░ц/ ← 乱码备份目录(编码损坏,含旧的en.ts/zh-CN.ts) 三、🔄 一键切换中英文的具体实现路径 文件 作用 src/i18n/index.ts 核心引擎:t()翻译 + setCurrentLocale()切换 + 配置持久化 src/i18n/types.ts Locale类型 + SUPPORTED_LANGUAGES元数据 src/i18n/hook.ts React响应式:useI18n() → locale变化自动re-render src/i18n/translations/en.ts 英文词库(1084个key) src/i18n/translations/zh-CN.ts 中文词库(~700+个key) src/commands/locale/locale.ts /locale 命令实现(切换语言 + 显示可用语言) src/commands/locale/index.ts /locale 命令注册(懒加载) src/components/LanguagePicker.tsx 语言选择UI组件(输入框+提示) 切换流程: 1. 用户输入 /locale zh-CN 或 /locale en 2. locale.ts → setCurrentLocale('zh-CN') 3. 保存到 ~/.cmdcode/locale.json 4. 所有 useI18n() 组件自动检测locale变化 → re-render 5. t('key') 自动从对应语言词库取值 四、📊 i18n 汉化进度统计 模块 已i18n 总文件 覆盖率 状态 commands/ 39 212 18% 🔴 大量命令未汉化 components/ 102 598 17% 🔴 大量组件未汉化 tools/ 0 305 0% ⬛ 完全未汉化 cli/ 0 129 0% ⬛ 完全未汉化 utils/ 0 816 0% ⬛ 完全未汉化 services/ 0 268 0% ⬛ 完全未汉化 hooks/ 0 147 0% ⬛ 完全未汉化 其他 ~5 ~274 <2% ⬛ 基本未汉化 翻译词库 zh-CN: ~700+ key en: 1084 key ~65% 🟡 zh-CN缺key 总结:全项目2949个文件中,仅约146个文件(5%)接入了i18n系统,且zh-CN词库比en少约380个key。 五、🎯 i18n汉化下一步优先级建议 1. 🔴 补齐zh-CN词库:en.ts有1084个key,zh-CN.ts缺少约380个 → 先补齐翻译 2. 🔴 commands/汉化:39/212已接入,剩余173个命令文件需逐步替换硬编码英文 3. 🔴 components/汉化:102/598已接入,剩余251个组件文件需替换 4. 🟡 tools/汉化:0/305,工具的UI反馈信息需i18n化 5. 🟡 cli/汉化:0/129,CLI输出和提示信息 6. 🟢 清理乱码目录:删除 src/i18n/translations/╘н░ц/ 损坏备份 cmdcode是美国Claude code cli的开源版本,按照你刚刚用i18n写opencode汉化提示词的经验,写一个Hermes Agent用的用i18n汉化cmdcode源代码的提示词,要求是src下面所有源代码的文件夹内的所有代码文件逐个汉化,不能有遗漏。cmdcode是完全用TypeScript 语音开发的程序
💭 思考过程
🤖 DeepSeek

给 Hermes-Agent 的 CmdCode V0.3 全量 i18n 汉化任务提示词

你的身份:Hermes-Agent(基于智谱GLM5.1),高级 TypeScript 全栈工程师,精通 i18n 国际化架构与大规模代码重构。
任务:对开源项目 CmdCode(美国 Claude Code CLI 的开源实现)src/ 目录下的全部源代码进行 i18n 标准化汉化,逐文件覆盖,零遗漏。最终实现:任一界面文本均可通过 /locale 命令一键切换中英文,且所有用户可见字符串均来自语言包,杜绝硬编码。

一、项目现状深度理解(必须先完成)

在改动任何代码前,你必须完整分析 CmdCode 现有 i18n 架构,并生成一份 I18N_MIGRATION_PLAN.md,包含:

1.1 现有 i18n 系统分析

  • 核心目录src/i18n/

  • index.tst(key, options?)getCurrentLocale()setCurrentLocale()DEFAULT_LOCALE = 'zh-CN'

  • types.tsLocale = 'en' | 'zh-CN'SUPPORTED_LANGUAGES

  • hook.tsuseI18n()useTranslation()

  • translations/en.ts:1084 个 key,76KB

  • translations/zh-CN.ts:约 700+ key,101KB(相差约 380 个 key)

  • 存在编码损坏的乱码备份目录 ╘н░ц/,需清理。

  • 已接入模块:commands(39/212)、components(102/598),其余 tools/、cli/、utils/、services/、hooks/ 等均 0% 接入

  • 语言切换:通过 /locale zh-CN 指令,最终调用 setCurrentLocale() 并持久化到 ~/.cmdcode/locale.json;React 组件通过 useI18n() 实现响应式更新。已有 LanguagePicker.tsx 组件。

  • 1.2 待汉化文件清单

  • 使用 find src -type f \( -name "*.ts" -o -name "*.tsx" \) | wc -l 确认总数(你获取的数据是 2949 个 .ts/.tsx 文件)。

  • 按目录分组,标记出未接入 i18n 的文件(即源码中存在直接英文字符串但未使用 t()useI18n() 的文件)。

  • 确定汉化优先级:先补齐语言包,然后 commands、components,再 tools、cli、utils、services、hooks,最后其他模块。

  • 1.3 技术约束

  • 严禁硬编码:任何界面文本(UI label、消息、提示、错误、占位符等)必须以 t('key')t('key', { vars }) 调用。

  • 语言包格式:现有 en.ts / zh-CN.ts 是 TypeScript 文件,导出对象。保证新 key 遵循现有命名风格(如 commands.config.title 等)。

  • 兼容性:不能破坏现有 /locale 指令、useI18n() Hook 和 LanguagePicker 组件的行为。


  • 二、汉化总原则(Must Follow)

    1. Key 命名规范
  • 格式:模块.组件.语义(如 tools.bash.executingcli.error.auth_failed)。

  • 若现有词库已有类似 key,尽量复用或保持前缀一致。

  • 2. 翻译质量
  • 专业、简洁,符合 CLI/IDE 界面的语气。

  • 变量插值 {count} 保持原样,不破坏占位符。

  • 技术术语(如 APIMCPREPL)保留英文,必要时括号加中文注释。

  • 3. 替换方式
  • React 组件:使用 Hook const { t } = useI18n()const t = useTranslation()

  • 非 React 上下文(如 CLI、工具函数):直接导入 import { t } from '../i18n/index.js'(或相应路径)。

  • 模板字符串中动静态分离:t('cmd.executing', { cmd: commandName }) 而非 'Executing ' + cmd

  • 4. 不可翻译的内容
  • 代码注释、console.log 调试输出、日志格式字符串(若用户不会直接看到)。

  • 变量名、类型名、接口名、文件名。

  • 正则表达式、SQL 语句、shell 命令模板(如果确实是命令逻辑)。

  • 命令行输出、错误消息、提示、进度条文本、帮助信息等用户可见内容必须翻译。
    5. 测试与验证
  • 每处理完一批文件,至少进行一次 TypeScript 编译检查(npx tsc --noEmit)。

  • 确保 npm run build(或项目指定的构建命令)通过后,才可视为该批次稳定。


  • 三、具体实施步骤(严格按序执行)

    Phase 0:清理与准备

    1. 删除乱码目录 src/i18n/translations/╘н░ц/(安全备份到 i18n_backup_bad_encoding/ 后删除)。
    2. 在 src/i18n/translations/ 中备份现有 en.tszh-CN.ts.bak

    Phase 1:补齐中文语言包(约 380 个缺失 key)

    1. 扫描英文语言包 en.ts,找出所有 key。
    2. 对比 zh-CN.ts,列出缺失的 key(约 380 个)。
    3. 为每个缺失 key 生成高质量中文翻译,追加到 zh-CN.ts,保持对象键顺序与 en.ts 一致(便于 diff)。
    4. 立即进行编译检查,确保无语法错误。

    Phase 2:汉化 commands/ 模块(212 个文件,已接入 39 个)

  • 对每个 .ts 命令文件:

  • 1. 识别所有用户可见字符串(command 输出、错误消息、提示、帮助文本等)。
    2. 若已使用 t(),检查 key 是否在语言包中,若缺失则补充。
    3. 若仍为硬编码英文,生成新 key,添加到 en.tszh-CN.ts,替换硬编码为 t()
    4. 检查是否有直接操作 DOM 或 process.stdout 的地方,确保翻译调用能正常输出。
  • 每完成 15 个文件,进行一次 TypeScript 编译检查,并记录至 I18N_MIGRATION_PLAN.md

  • Phase 3:汉化 components/ 模块(598 个文件,已接入 102 个)

  • 类似 commands 的处理,但注意 React 组件内需使用 useI18n()

  • 处理 src/components/ 下所有 .tsx.ts 文件(UI 组件、对话框、消息、设置、提示输入等)。

  • 确保 LanguagePicker.tsx 本身也是 i18n 化的(其内部文本是否已翻译?若未则完善)。

  • Phase 4:汉化 tools/ 模块(305 个文件,0%)

  • 工具模块返回的用户反馈信息(如 “File saved”、“Command not found”)必须通过 t() 提供。

  • 注意工具可能运行在沙箱或后台,需确保 t() 函数能正确获取当前 locale(可能是从配置读取,而非 React 上下文,直接 import 即可)。

  • Phase 5:汉化 cli/ 模块(129 个文件,0%)

  • CLI 入口、传输层、错误处理等所有面向用户的输出。

  • 特别注意 --help 输出、版本信息、状态消息。

  • Phase 6:汉化其他模块(utils/、services/、hooks/…)

  • utils/ 中的提示、警告、错误信息;services/ 中的 API 调用反馈;hooks/ 中可能存在的用户提示(如 useClipboard 的成功消息)。

  • 对于纯逻辑文件(确实无用户可见字符串),可简单添加注释 // 无用户可见文本,跳过 i18n,但不可滥用,需经过认真筛查。

  • Phase 7:收尾与验证

  • 全局搜索源码中可能残留的硬编码英文 UI 文本(使用正则搜索 ['\"][A-Z][a-z] 常见模式),人工 final review。

  • 补充遗漏 key,保证 en.tszh-CN.ts 完全同步(key 数量一致)。

  • 运行项目完整构建,启动测试(如果有)或手动测试核心流程:

  • 执行 /locale en → 界面变为全英文

  • 执行 /locale zh-CN → 界面变为全中文

  • 检查核心命令(如 /help/config/mcp/login)输出正常。

  • 删除备份的 .bak 文件和临时备份目录。


  • 四、Git 提交与进度记录

  • 提交频率:每完成一个模块(如 commands 全部完成)或至少每处理 30 个文件,执行一次 git 提交。

  • Commit Message 规范i18n: 汉化 <模块名> (<已完成数>/<总数>),例如 i18n: 汉化 commands (50/212)

  • 分支策略:建议在独立分支 i18n-full-chinese 上操作,完成后合并。

  • 每次提交前

  • npx tsc --noEmitnpm run check 通过。

  • git status 确认无意外临时文件。

  • 全部完成后

  • 提交最终版本,commit 信息 feat(i18n): 完成全量汉化与语言包同步

  • 将所有进度和问题记录到 I18N_MIGRATION_PLAN.md 并一同提交。


  • 五、异常处理与自修复机制

    如果在汉化过程中遇到编译错误、运行时崩溃或功能异常:
    1. 立即回退当前文件改动,分析原因。
    2. 常见问题:
  • 缺失 useI18n import;

  • 在非组件函数中误用 Hook(应改用直接 import t);

  • 占位符 json 解析错误(如 { 未转义)。

  • 3. 修复后重新编译验证,确认无误再继续。

    六、最终交付清单

  • src/i18n/translations/en.ts —— 完整英文词库(新增 key 不得丢失原有 1084 个 key)。

  • src/i18n/translations/zh-CN.ts —— 完整中文词库(key 数量与 en.ts 完全相等,翻译准确)。

  • 所有 src/ 下修改过的源码文件(2949 个文件中的绝大多数需修改,少数纯逻辑文件除外)。

  • I18N_MIGRATION_PLAN.md —— 记录整个过程、遇到的问题、统计数据和最终覆盖率。

  • LANGUAGE_PACK_DIFF.md —— 可选,记录新增 key 清单。


  • 七、启动命令

    当你准备好开始任务时,请回复:
    
    确认开始 CmdCode 全量 i18n 汉化任务。
    第一步:分析项目现有 i18n 架构,生成迁移计划。
    
    随后按 Phase 0 → Phase 1 → Phase 2……的顺序自主推进,无需等待后续指令。每完成一个阶段(Phase)向我汇报一次概要进度。
    强调:必须逐文件处理,不允许跳过任何 src/ 下的 .ts/.tsx 文件。若遇到确实不含用户可见文本的文件,需在 I18N_MIGRATION_PLAN.md 中注明其路径与原因。