1. Comment Translate 突然罢工:从报错到定位的真实排查现场
VSCODE 里的 Comment Translate 插件,是很多人写多语言项目时的顺手工具。它能在你选中一段注释或字符串后,直接悬浮显示译文,配合 vue-i18n、i18next 这类方案,翻译文案的效率能提升不少。但它的工作方式有个前提:插件本身不内置翻译引擎,而是把文本发给某个翻译服务商的 API,再把返回结果渲染出来。所以一旦「突然翻译不了」,问题往往不在插件界面,而在它背后那条请求链路。
我这次遇到的场景很典型:项目里用了 vue-i18n,注释和 key 都需要中英对照,Comment Translate 之前一直正常,某天开始选中文本后悬浮窗只显示原文,或者干脆弹一个请求失败的提示。第一反应是插件坏了,卸载重装,没用。第二反应是网络问题,但浏览器能正常打开网页,说明基础网络是通的。真正的问题藏在「插件用哪个 endpoint、走哪条通道、Key 是否还有效」这三件事上。
这篇记录就按我实际的排查顺序走一遍:先看插件报错长什么样,再确认请求到底发去了哪里,然后把 API endpoint 换到 TaoToken 的统一通道,给出可复制的 settings.json 片段,最后用一次真实请求验证翻译恢复。如果你也卡在「插件突然不翻译」这一步,可以照着往下走。核心检索词先摆出来:VSCODE Comment Translate 插件翻译不了,通常是翻译服务 endpoint 不可达或鉴权失效,改到稳定 API 通道即可恢复。
需要先说明一点:Comment Translate 支持多种翻译源,Google、Baidu、Bing、DeepL 等都在列表里。不同源的 endpoint、鉴权方式、可用性都不一样。社区里常见的「换成 Baidu 就好了」,本质是换了一条能走通的通道,而不是插件本身被修复了。理解这一点,后面的配置才不会白改。
2. 把 TaoToken 作为统一 API 通道接进来
在动手改配置前,先把「为什么用 TaoToken」讲清楚。Comment Translate 这类插件对翻译 API 的要求其实很朴素:endpoint 稳定可达、鉴权简单、返回格式标准。TaoToken 提供的是统一的 API 通道,一个 Key 可以走多家模型能力,endpoint 固定,返回结构统一,省去了在插件里分别配置不同厂商参数的麻烦。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,API 基址是 https://taotoken.net/api ,注意 API 地址不带查询参数。
对 Comment Translate 来说,我们关心的是三件套:Base URL、API Key、Model ID。这三样凑齐,插件才知道「把文本发到哪、用什么身份、调哪个模型」。很多人翻译不了,就是因为其中一项对不上:要么 endpoint 还是旧的、要么 Key 过期、要么模型名写错导致返回体里没有 choices 字段。
先拿 Key。进入控制台创建 API Key,路径是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面新建一个,复制出来保存好。这个 Key 就是后面填进 settings.json 的凭证。如果你还没决定用哪个模型,可以先去模型对话页面试一下,地址是 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,选一个响应快的模型,把它的 Model ID 记下来。
这里有个容易踩的坑:Comment Translate 的「翻译源」下拉里如果没有直接叫 TaoToken 的选项,不要慌。它的通用 HTTP / 自定义 API 模式允许你手填 endpoint 和参数。我们要做的就是把 TaoToken 的 Base URL 和 Key 填进这个自定义模式,让它按 OpenAI 兼容格式发请求。这也是为什么下面给的配置片段是 JSON 结构,而不是在图形界面里点几下就完事——手写配置更可控,出问题也好排查。
注意:API Key 属于敏感凭证,不要提交到 Git 仓库,也不要贴到公开 issue 里。建议放在 VSCODE 的用户级 settings.json,而不是项目级配置。
3. 可复制的 settings.json 配置片段
下面这段配置可以直接粘进 VSCODE 的用户 settings.json。打开方式:Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入 Open User Settings (JSON),回车。然后把下面内容合并进去,注意不要覆盖你已有的其他配置。
{ "commentTranslate.source": "custom", "commentTranslate.customSource": { "name": "TaoToken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "你的ModelID", "requestFormat": "openai", "headers": { "Content-Type": "application/json", "Authorization": "Bearer sk-你的TaoToken密钥" }, "bodyTemplate": { "model": "你的ModelID", "messages": [ { "role": "user", "content": "Translate the following text into Chinese, only output the translation:\n{{text}}" } ], "temperature": 0.2 }, "responsePath": "choices[0].message.content" }, "commentTranslate.targetLanguage": "zh-CN" }几个字段逐个解释。baseUrl固定写https://taotoken.net/api,不要加尾斜杠,也不要带 UTM 参数,否则拼接出来的请求路径会变成/api//v1/...这种畸形地址,直接 404。apiKey和headers.Authorization里的 Key 要一致,Bearer 后面有一个空格,这个空格漏了会返回 401。model填你在模型对话页面选定的 Model ID,大小写要和平台显示的一致。
bodyTemplate是请求体模板,{{text}}是插件替换选中文本的占位符。responsePath告诉插件从返回 JSON 的哪个位置取译文,OpenAI 兼容格式就是choices[0].message.content。如果你看到报错里出现reading 'choices'或Cannot read properties of undefined,八成是 responsePath 和实际返回结构对不上,或者请求根本没成功、返回的是错误对象。
commentTranslate.source设为custom表示走自定义源。有些版本的插件字段名可能是commentTranslate.customSourceConfig或需要在图形设置里先启用自定义源,具体以你安装版本的 schema 为准。改完保存,VSCODE 一般会提示重载窗口,点一下重载,或者手动执行 Developer: Reload Window。
提示:如果你同时用 Cline、Codex 这类工具,它们的配置里也会出现 Base URL + Key + Model ID 三件套。TaoToken 的 Base URL 都是
https://taotoken.net/api,Key 可以复用同一个,Model ID 按各工具要求填。保持三件套一致,能省掉很多「这个工具能通、那个工具不通」的困惑。
4. 验证请求:重启插件后确认翻译恢复
配置写完,别急着下结论,按步骤验证一遍。第一步,重载 VSCODE 窗口,让插件重新读取 settings.json。第二步,打开一个带注释的文件,选中一段英文注释,右键选择 Comment Translate 的翻译命令,或者直接看悬浮提示。第三步,观察结果:如果悬浮窗显示中文译文,说明链路通了;如果还是原文或报错,进入下一步排查。
想更确定一点,可以打开 VSCODE 的输出面板,在右下角下拉里选 Comment Translate,看它打印的请求日志。正常情况你会看到请求发往https://taotoken.net/api/...,返回 200,然后解析出译文。如果看到 401,是 Key 问题;看到 404,是 baseUrl 拼接问题;看到超时,是网络到 endpoint 的可达性问题。
我实测下来,改完配置重载窗口后,选中// fetch user profile from server这类注释,悬浮窗能稳定返回中文。为了确认不是缓存,我特意换了一段没翻译过的文本,同样正常返回。这一步很关键:用新文本验证,才能排除「插件显示的是旧缓存」这种假象。
如果你想让验证更工程化,可以用 curl 直接打一次 API,确认 Key 和 endpoint 本身没问题:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "Translate into Chinese: hello world"}], "temperature": 0.2 }'返回体里如果有choices[0].message.content且内容是中文,说明 API 侧完全正常,问题就只剩插件配置。反过来,如果 curl 就失败,那先解决 Key 或 endpoint 问题,再回头看插件。这个「先 API 后插件」的顺序,能帮你快速切分故障域,不至于在插件设置里反复瞎改。
5. 本篇常见错排查:401、local proxy failed、reading choices
排查过程中我整理了几类高频报错,对照着看能省不少时间。
第一类,401 Unauthorized。原因通常是 Key 写错、Key 已删除、或者 Authorization 头格式不对。检查三点:Key 是否完整复制(没有多余空格)、Bearer 后是否有空格、settings.json 里 apiKey 和 headers 里的 Key 是否一致。改完记得重载窗口,插件不会热更新配置。
第二类,local proxy failed 或连接被拒绝。这类报错说明请求根本没发到 TaoToken,而是被本地某个代理设置拦截了。检查 VSCODE 的http.proxy设置,以及系统环境变量里的 HTTP_PROXY / HTTPS_PROXY。如果这些指向了一个已经关闭的本地端口,请求就会失败。把代理清空,或者确认代理可用,再重试。
第三类,Cannot read properties of undefined (reading 'choices')。这是返回体里没有 choices 字段。可能是 responsePath 写错,也可能是请求返回了错误对象(比如 401 的 JSON 里没有 choices)。先看输出面板的原始返回,确认是成功响应还是错误响应,再决定改 responsePath 还是改鉴权。
第四类,OAuth 相关报错。有些翻译源走 OAuth 流程,token 过期后会报鉴权失败。如果你用的是自定义源 + API Key,一般不会遇到;但如果插件里还残留着某个 OAuth 源的配置,可能干扰。把 source 明确设为 custom,避免它去走 OAuth。
第五类,翻译结果为空或只返回原文。这通常是 prompt 模板的问题。{{text}}占位符没被替换,或者模板里要求「只输出译文」但模型返回了多余解释。把 temperature 调低到 0.2 左右,prompt 写清楚「only output the translation」,能明显改善。
注意:如果报错里出现
reading 'choices'且伴随 401,优先解决鉴权,不要先去改 responsePath。错误响应里本来就没有 choices,改路径是治标不治本。
把这几类对照一遍,基本能覆盖 Comment Translate 翻译不了的绝大多数情况。核心逻辑始终是:先确认请求发出去了没有,再确认鉴权对不对,最后确认返回结构解析对不对。
6. 长期使用建议与接入入口
排查完之后,如果你打算长期用 Comment Translate 配合多语言项目,有几个习惯值得养成。把配置放在用户级 settings.json,换项目不用重配;Key 定期在控制台轮换,降低泄露风险;Model ID 选响应快的,翻译这种短文本任务不需要最强模型,速度和稳定性更重要。
如果你还想把这套 API 通道用到编码场景,比如让 Agent 帮你批量处理 i18n 文件,可以了解 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各工具的配置示例。API Key 管理还是回到 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。需要快速试模型就上模型对话页。把 endpoint 统一到https://taotoken.net/api,Key 和 Model ID 对齐,Comment Translate 这类插件的「突然不翻译」问题,基本都能在一次配置里解决。