把 Claude Code 自动生成的英文会话标题改成中文,并保留原英文:
安全更新 OpenClaw(Safely update OpenClaw)
这个项目优先通过 Claude Code 的 UserPromptSubmit / SessionStart hook 设置 sessionTitle,并保留旧版 Stop hook 兼容:每轮回复结束后可继续修正 transcript 里的 aiTitle 字段。不会上传会话内容,也不会调用外部翻译服务。
- 保留原英文标题,方便还原和搜索
- 新版 Claude Code 可在提交提示词后更快设置中文标题
- 恢复会话时可从 transcript 尝试恢复中文标题
- 只处理
~/.claude/projects下当前会话的 transcript - 已经含中文的标题会自动跳过
- 无 npm 依赖,只需要本机有
node - 安装脚本会先备份
~/.claude/settings.json
在仓库目录打开 PowerShell:
Set-ExecutionPolicy -Scope Process Bypass
.\install.ps1安装完成后,重启 Claude Code 或重新打开会话。
Set-ExecutionPolicy -Scope Process Bypass
.\uninstall.ps1卸载只移除 settings.json 里的 hook 配置,默认保留脚本文件。需要一起删除脚本:
.\uninstall.ps1 -RemoveScript安装脚本会把 hooks/translate-ai-title.js 复制到:
~/.claude/hooks/claude-title-cn/translate-ai-title.js
然后向 ~/.claude/settings.json 添加类似配置:
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node \"<HOME>/.claude/hooks/claude-title-cn/translate-ai-title.js\"",
"timeout": 10,
"statusMessage": "Localize Claude title"
}
]
}
],
"SessionStart": [
{
"matcher": "startup|resume",
"hooks": [
{
"type": "command",
"command": "node \"<HOME>/.claude/hooks/claude-title-cn/translate-ai-title.js\"",
"timeout": 10,
"statusMessage": "Restore localized Claude title"
}
]
}
],
"Stop": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "node \"<HOME>/.claude/hooks/claude-title-cn/translate-ai-title.js\"",
"timeout": 10,
"statusMessage": "Localize Claude title (legacy)"
}
]
}
]
}
}Claude Code 收到提示词或生成标题后,hook 会把标题转换成:
中文标题(Original English Title)
新版主路径会尽量在 UserPromptSubmit 阶段直接设置标题;如果当前 Claude Code 版本仍依赖旧流程,Stop 兼容逻辑会在当前回合结束后再把英文标题改成中文。
npm test或直接检查脚本语法:
node --check .\hooks\translate-ai-title.js打开 hooks/translate-ai-title.js,修改:
EXACT_CN:精确标题映射VERBS:开头动词映射PHRASES:常见短语映射
建议不要把私人会话标题、项目路径、账号信息提交到公开仓库。
脚本只会在满足以下条件时写入文件:
- hook 事件是
Stop - Claude Code 传入了
transcript_path transcript_path位于~/.claude/projects下
UserPromptSubmit / SessionStart 只向 stdout 返回 Claude Code 支持的 JSON 输出,不写入本地文件。
MIT