1. 为什么我又把 Notepad++ 装回来了:Chrome 扩展国际化里的键名规整化痛点
做 Chrome 扩展国际化,最磨人的不是翻译本身,而是_locales目录下那一堆messages.json的键名规整化。Chrome 的 i18n 规范要求键名只能是英文加下划线,不能有空格、不能有大写、不能有连字符。于是Hello World得变成hello_world,Save As PDF得变成save_as_pdf,Can't Connect得变成cant_connect。一个中等规模的扩展,_locales/en/messages.json里动辄两三百个词条,手工改键名改到眼花。
我一开始是在 VS Code 里干的。装了个开源扩展macros-vscode,想录制一套「选中文本 → 转小写 → 空格替换下划线 → 包裹成 JSON 键值对」的宏。结果实测下来,这个扩展只能录制当前标签页的操作,一切换标签就停止录制;更离谱的是,录制一个最小化的字符串替换命令,回放时它会把整个字符串重新打印一遍,根本没法用。VS Code 的宏 API 在这方面确实不全,连替换对话框里的文本都记录不下来。
于是我把目光转回了 Notepad++。Notepad++ 的宏录制是所有免费编辑器里的冠军,没有之一。它基于 Windows 消息机制录制,能记录键盘输入、菜单命令、对话框参数,回放稳定。缺点也有:录制后不方便组合修改,保存到 XML 会转义中文字符串,而且多个 Notepad++ 窗口之间宏不共享,容易丢失。但这些缺点在「批量处理多语言 JSON 词条」这个场景下,可以用一套固定的操作流程绕过去。
这篇文章要交付的就是这套流程:在 Notepad++ 里录制一个「键名规整化 + 生成键值对」的宏,配合快捷键配置,批量处理messages.json里的英文词条;然后用 TaoToken 统一 Key 和 API 通道调用模型辅助翻译,把规整好的键值对批量翻成中文。全程可复制、可验证,不需要装任何付费插件。
适合谁看:正在做 Chrome 扩展国际化、手里有几十到几百个词条要处理、不想一个个手敲键名的开发者。如果你只是偶尔改一两个词条,手工改就行;但如果你要维护中英双语甚至多语言,这套宏 + API 的组合能把重复劳动压到最低。
先说清楚整体思路,避免你跟着做的时候迷失方向。整个流水线分四步:第一步,在 Notepad++ 里录制宏,把Hello World这种原始文案转成"hello_world": { "message": "Hello World" }的 JSON 片段;第二步,把宏绑定到快捷键,批量对多行文案执行;第三步,把规整好的英文词条复制到_locales/en/messages.json,再用 TaoToken 的 API 调用模型生成中文翻译,写入_locales/zh_CN/messages.json;第四步,验证两个 JSON 文件的键名完全一致、JSON 语法合法、扩展加载后界面文案正确切换。
这里有个关键点:宏负责的是「机械的键名规整化和 JSON 包裹」,模型负责的是「语义翻译」。两者分工明确,不要让模型去干键名规整化的活,也不要让宏去猜翻译。我试过让模型直接输出整个messages.json,结果它经常把键名大小写搞错,或者漏掉逗号,反而增加了排错成本。正确的做法是:宏先把结构定死,模型只填message字段的值。
另外提醒一句,Notepad++ 的宏录制对输入法状态敏感。录制时如果输入法是中文状态,回放时可能输入乱码。建议录制前把输入法切到英文,或者直接用 ASCII 字符操作。这个坑我踩过,录了半天的宏回放出来全是问号,排查了半小时才发现是输入法的问题。
2. TaoToken 前置准备:统一 Key 与 API 通道,让翻译词条不再到处找 Key
在讲宏的具体录制步骤之前,先把 TaoToken 这条通道搭好。原因很简单:宏处理完英文词条后,下一步就是批量翻译成中文,而翻译需要调用模型。如果你用官方 API,得分别注册、分别充值、分别管理 Key;如果用 TaoToken,一个 Key 就能覆盖多个模型,Base URL 统一,切换模型只改一个 Model ID 字段。对于「中英双语词条翻译」这种轻量但高频的任务,统一通道能省掉大量切换成本。
TaoToken 是什么?简单说,它是一个统一的模型 API 接入层。你拿到一个 API Key,配置一个 Base URL,就能在同一个接口下调用不同厂商的模型。对于 Chrome 扩展国际化这种场景,你需要的不是某个特定模型,而是一个稳定、便宜、响应快的翻译通道。TaoToken 的 API 地址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 Base URL 使用。
适合谁用:手里有多个模型 Key、懒得分别管理;或者只想用一个 Key 快速跑通翻译流程;或者在做 Agent、Coding Plan 这类需要长期调用模型的场景。对于本篇的宏 + 翻译流水线,你只需要一个能调通的 Key 和一个可用的 Model ID。
具体怎么拿 Key:访问 TaoToken 官网https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,注册后在控制台创建 API Key。控制台地址是https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite,API Keys 管理页面是https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite。创建好 Key 后复制保存,后面配置环境变量和请求头都要用。
这里要强调一个安全习惯:不要把 Key 硬编码在脚本里,更不要提交到 Git。推荐用环境变量。Windows 下可以在 PowerShell 里临时设置:
$env:TAOTOKEN_API_KEY="sk-你的Key"macOS 或 Linux 下:
export TAOTOKEN_API_KEY="sk-你的Key"如果你用的是 Node.js 脚本做批量翻译,可以这样读取:
const apiKey = process.env.TAOTOKEN_API_KEY; if (!apiKey) { throw new Error("TAOTOKEN_API_KEY 未设置"); }Model ID 怎么选?TaoToken 支持多个模型,你可以在模型对话页面https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite先试跑几条翻译,看看哪个模型对「中英技术文案」的翻译质量满意。对于 Chrome 扩展的 UI 文案,建议选响应快、对短文本翻译稳定的模型。具体 Model ID 以控制台或文档里列出的为准,文档地址是https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite。
如果你后续要做更复杂的 Agent 或长期编码任务,可以了解 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite。但本篇的翻译任务用普通 API 调用就够了,不需要上 Coding Plan。
配置好 Key 和 Model ID 后,先用一个最简单的 curl 请求验证通道是否通。这一步很重要,因为后面批量翻译脚本如果报错,你得先排除是 Key 的问题还是脚本的问题。验证请求放在下一节,和宏的配置一起讲,这样你能一次性把环境跑通。
3. 可复制配置:Notepad++ 宏录制步骤、快捷键绑定与 TaoToken 请求片段
这一节是全文的核心,分两部分:Notepad++ 宏的录制与配置,以及 TaoToken 的请求配置。两部分都给出可直接复制的片段。
先说 Notepad++ 宏录制。目标是把下面这种原始文案:
Hello World Save As PDF Can't Connect转换成:
"hello_world": { "message": "Hello World" }, "save_as_pdf": { "message": "Save As PDF" }, "cant_connect": { "message": "Can't Connect" },操作步骤:
第一步,打开 Notepad++,新建一个文件,把原始文案一行一个粘贴进去。确保每行末尾没有多余空格。
第二步,点击菜单「宏」→「开始录制」。此时 Notepad++ 开始记录你的所有键盘和菜单操作。
第三步,把光标放在第一行开头,执行以下操作序列:
- 按
Home键回到行首。 - 按
Shift + End选中整行。 - 按
Ctrl + C复制。 - 按
End键到行尾。 - 按
Enter换行。 - 输入
"(英文双引号)。 - 按
Ctrl + V粘贴刚才复制的内容。 - 选中粘贴进来的内容(
Shift + Home)。 - 按
Ctrl + H打开替换对话框,把空格替换成下划线,把大写转小写。注意:Notepad++ 的替换对话框支持「全部替换」,但宏录制会记录对话框里的参数。这里建议分两步:先替换空格为下划线,再转小写。替换对话框里的「查找模式」选「普通」,「匹配大小写」勾选。 - 替换完成后关闭对话框。
- 在行首输入
",在行尾输入": { "message": "。 - 再按
End,输入" },。
这一套操作录下来,宏里会包含几十条消息记录。实际录制时,你可以简化:先用 Notepad++ 的「编辑」→「转换」→「转小写」和「替换」功能把整列文案批量规整化,再用宏做 JSON 包裹。这样宏本身更短、更稳定。
我实测下来,更稳妥的做法是分两个宏:宏 A 负责「选中行 → 转小写 → 空格替换下划线」,宏 B 负责「包裹 JSON 键值对」。宏 A 可以用 Notepad++ 内置的「转换为小写」和「替换」命令录制,宏 B 用键盘输入录制。两个宏分别绑定快捷键,批量处理时先跑宏 A,再跑宏 B。
录制完成后,点击「宏」→「停止录制」,然后「宏」→「保存当前录制的宏」,给它起个名字,比如chrome_i18n_key_normalize。保存后,在「宏」菜单里能看到它。接着点「宏」→「管理快捷键」,找到你刚保存的宏,绑定一个不冲突的快捷键,比如Ctrl + Alt + 1。注意不要和系统快捷键冲突,Notepad++ 会提示冲突。
宏保存的位置:Notepad++ 的宏默认存在%APPDATA%\Notepad++\shortcuts.xml里。这个文件是 XML 格式,中文字符会被转义成&#xxxx;形式。如果你要手动编辑宏,建议用 Notepad++ 自己打开这个文件,改完保存。但要注意:多个 Notepad++ 窗口之间宏不共享,如果你开了多个实例,只有一个实例能读到最新宏。所以建议只开一个 Notepad++ 窗口做宏处理。
关于宏的持久化,有个坑要提醒:如果你重装了 Notepad++ 或者换了便携版,shortcuts.xml不会自动迁移。建议把配置好的shortcuts.xml备份一份,放到项目仓库的tools/目录下,换机器时直接覆盖。
再说 TaoToken 的请求配置。批量翻译词条,我推荐用 Node.js 脚本,因为 JSON 处理方便。先建一个translate.js,配置如下:
const fs = require("fs"); const path = require("path"); const API_BASE = "https://taotoken.net/api"; const API_KEY = process.env.TAOTOKEN_API_KEY; const MODEL_ID = "你的ModelID"; // 从 TaoToken 控制台或文档获取 async function translateText(text, targetLang = "zh-CN") { const url = `${API_BASE}/v1/chat/completions`; const body = { model: MODEL_ID, messages: [ { role: "system", content: "你是 Chrome 扩展国际化翻译助手。只输出翻译结果,不要解释,不要加引号。" }, { role: "user", content: `把下面的英文翻译成简体中文,保持技术文案的简洁风格:\n${text}` } ], temperature: 0.2 }; const resp = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${API_KEY}` }, body: JSON.stringify(body) }); if (!resp.ok) { const errText = await resp.text(); throw new Error(`请求失败 ${resp.status}: ${errText}`); } const data = await resp.json(); return data.choices[0].message.content.trim(); } module.exports = { translateText };如果你用的是 Python,配置片段如下:
import os import requests API_BASE = "https://taotoken.net/api" API_KEY = os.environ["TAOTOKEN_API_KEY"] MODEL_ID = "你的ModelID" def translate_text(text, target_lang="zh-CN"): url = f"{API_BASE}/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}" } payload = { "model": MODEL_ID, "messages": [ {"role": "system", "content": "你是 Chrome 扩展国际化翻译助手。只输出翻译结果。"}, {"role": "user", "content": f"把下面的英文翻译成简体中文:\n{text}"} ], "temperature": 0.2 } resp = requests.post(url, headers=headers, json=payload, timeout=30) resp.raise_for_status() return resp.json()["choices"][0]["message"]["content"].strip()注意 Base URL 是https://taotoken.net/api,请求路径是/v1/chat/completions。如果你的脚本报 404,先检查 Base URL 有没有多写或少写/v1。TaoToken 的 API 地址不带 UTM 参数,直接写https://taotoken.net/api即可。
配置好脚本后,先别急着批量跑。用一条词条测试:
translateText("Hello World").then(console.log);如果输出「你好,世界」之类的翻译,说明通道通了。如果报 401,检查 Key 是否正确、是否有多余空格。如果报 model not found,检查 Model ID 是否和控制台一致。
4. 验证请求与成功结果:从 messages.json 到扩展加载的完整链路
环境配好后,跑一遍完整链路,确认每个环节都通。这一节给出具体的验证命令和预期结果。
第一步,验证 TaoToken 通道。用 curl 发一个最小请求:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -d '{ "model": "你的ModelID", "messages": [ {"role": "user", "content": "把 Hello World 翻译成简体中文,只输出结果"} ] }'预期返回类似:
{ "choices": [ { "message": { "role": "assistant", "content": "你好,世界" } } ] }如果返回 401,说明 Key 无效或没带上。如果返回 404,说明 Base URL 或路径写错了。如果返回 429,说明触发了限流,降低并发或稍后重试。
第二步,验证 Notepad++ 宏。打开 Notepad++,新建文件,输入三行测试文案:
Hello World Save As PDF Can't Connect选中这三行,按你绑定的宏快捷键。预期结果是每行变成:
"hello_world": { "message": "Hello World" }, "save_as_pdf": { "message": "Save As PDF" }, "cant_connect": { "message": "Can't Connect" },如果宏回放后格式不对,检查录制时是否漏了某个按键,或者输入法状态是否影响了字符输入。Notepad++ 的宏回放是逐条消息执行的,任何一步出错都会导致后续错位。建议先用一行文案测试宏,确认无误后再批量。
第三步,把规整好的英文词条写入_locales/en/messages.json。注意 Chrome 扩展的messages.json结构是:
{ "hello_world": { "message": "Hello World" }, "save_as_pdf": { "message": "Save As PDF" } }宏生成的片段末尾有逗号,最后一个词条要去掉逗号。这个手工检查一下,或者写个脚本自动处理。
第四步,用翻译脚本生成中文词条。写一个build-zh.js:
const fs = require("fs"); const { translateText } = require("./translate"); async function main() { const enPath = "./_locales/en/messages.json"; const zhPath = "./_locales/zh_CN/messages.json"; const en = JSON.parse(fs.readFileSync(enPath, "utf8")); const zh = {}; for (const [key, value] of Object.entries(en)) { const translated = await translateText(value.message); zh[key] = { message: translated }; console.log(`${key}: ${value.message} -> ${translated}`); await new Promise(r => setTimeout(r, 200)); // 避免请求过快 } fs.writeFileSync(zhPath, JSON.stringify(zh, null, 2), "utf8"); console.log("中文词条已写入", zhPath); } main().catch(console.error);运行:
node build-zh.js预期输出每条词条的翻译对照,最后生成_locales/zh_CN/messages.json。打开这个文件,检查键名是否和英文文件完全一致。键名不一致是国际化最常见的错误,Chrome 加载扩展时会直接报错。
第五步,验证扩展加载。打开 Chrome,访问chrome://extensions,开启「开发者模式」,点「加载已解压的扩展程序」,选择你的扩展目录。如果messages.json语法有误,Chrome 会提示具体哪个文件哪一行出错。加载成功后,在扩展的manifest.json里确认default_locale设置正确:
{ "default_locale": "en", "name": "__MSG_ext_name__", "description": "__MSG_ext_desc__" }然后在代码里用chrome.i18n.getMessage("hello_world")获取文案。切换浏览器语言,验证中英文是否正确切换。
第六步,检查 JSON 合法性。可以用 Node.js 快速校验:
node -e "JSON.parse(require('fs').readFileSync('./_locales/en/messages.json','utf8')); console.log('en OK')" node -e "JSON.parse(require('fs').readFileSync('./_locales/zh_CN/messages.json','utf8')); console.log('zh OK')"两个都输出 OK,说明 JSON 语法没问题。如果报错,根据错误信息定位到具体行。
到这里,完整链路就跑通了:Notepad++ 宏规整键名 → 写入英文 JSON → TaoToken 翻译 → 写入中文 JSON → Chrome 加载验证。整个过程除了翻译请求需要网络,其余都是本地操作,可重复、可版本控制。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth 报错对照
这一节把可能遇到的报错集中列出来,对照排查。每个报错给出原因和解决方法。
401 Unauthorized。这是最常见的报错,说明 API Key 无效或没带上。检查三处:环境变量TAOTOKEN_API_KEY是否设置;请求头Authorization: Bearer sk-xxx格式是否正确,注意Bearer后面有一个空格;Key 是否被复制时带了换行或空格。如果用的是 curl,$TAOTOKEN_API_KEY在单引号里不会展开,要用双引号或直接写 Key。建议先用echo $TAOTOKEN_API_KEY确认变量有值。
local proxy failed。这个报错通常出现在你本地配置了代理,但代理不可用或拦截了请求。检查系统代理设置,或者脚本里的HTTP_PROXY/HTTPS_PROXY环境变量。如果你在公司网络下,可能需要走公司代理;如果不需要代理,把相关环境变量清空:
unset HTTP_PROXY unset HTTPS_PROXY然后重新跑请求。注意,TaoToken 的 API 地址是https://taotoken.net/api,确保你的网络能正常访问这个域名。
reading 'choices' of undefined。这个报错说明响应体里没有choices字段,通常是请求失败但脚本没检查resp.ok。在translateText里加上状态码检查:
if (!resp.ok) { const errText = await resp.text(); throw new Error(`请求失败 ${resp.status}: ${errText}`); }这样能看到具体的错误信息,而不是在data.choices[0]处报 undefined。常见原因是 Model ID 写错、请求体格式不对、或者 Base URL 少了/v1。
OAuth 相关报错。如果你用的是某些需要 OAuth 的客户端(比如 Claude Code 或 Codex 的认证流程),可能会遇到 token 过期或 scope 不足的报错。这类报错和 TaoToken 的 API Key 无关,是客户端自身的认证问题。检查客户端的配置文件,比如 Codex 的auth.json,确认 token 是否有效。如果你在配置 Claude Code 接入,需要写全三件套:Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api,Key 填你的 TaoToken Key,Model ID 填控制台里可用的模型。Claude Code 的接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,里面有具体的配置示例。
JSON 解析报错。如果JSON.parse报Unexpected token,说明messages.json里有语法错误。常见原因:最后一个词条多了逗号;键名或值里有未转义的双引号;中文引号被误写成英文引号。用 Notepad++ 打开 JSON 文件,开启「视图」→「显示符号」→「显示所有字符」,检查是否有隐藏字符。也可以用在线 JSON 校验工具,但注意不要上传包含敏感信息的文件。
宏回放结果错位。如果 Notepad++ 宏回放后格式不对,先检查录制时是否切换了输入法。建议录制前把输入法切到英文,或者用纯 ASCII 操作。另外,Notepad++ 的宏对光标位置敏感,回放前确保光标在正确位置。如果宏里包含「替换」对话框操作,确保对话框的默认参数和录制时一致。
Chrome 扩展加载报错 "Invalid locale"。检查_locales目录名是否正确,必须是en、zh_CN这种标准 locale 代码。manifest.json里的default_locale必须和目录名一致。如果messages.json里某个键的值不是对象,也会报错。确保每个键的值都是{ "message": "..." }格式。
翻译结果包含多余引号或解释。模型有时会输出"你好,世界"带引号,或者加一句「翻译结果:」。在 system prompt 里明确要求「只输出翻译结果,不要加引号,不要解释」。如果还是出现,可以在脚本里做后处理:
let result = data.choices[0].message.content.trim(); result = result.replace(/^["']|["']$/g, "");但更好的做法是调低 temperature,并在 prompt 里强调格式。
请求频率过高被限流。批量翻译时,如果词条很多,可能会触发限流。在循环里加await new Promise(r => setTimeout(r, 200)),控制每秒请求数。如果还是被限流,加大间隔到 500ms 或 1s。TaoToken 的限流策略以控制台或文档说明为准。
宏丢失。Notepad++ 的宏存在shortcuts.xml,如果开了多个窗口,只有一个窗口能读到最新宏。建议只开一个窗口做宏处理,并定期备份shortcuts.xml。如果你用的是便携版,配置文件在Notepad++\plugins\config或%APPDATA%\Notepad++下,具体路径看你的安装方式。
6. 把宏和 API 串成流水线:Chrome 扩展国际化的长期维护建议
宏录制和 API 翻译跑通一次不难,难的是长期维护。Chrome 扩展的词条会随着版本迭代不断增加,每次加新功能都要补翻译。如果每次都手工跑一遍宏、手工调 API,效率还是低。这一节给几个把流水线固定下来的建议。
第一,把宏的配置和翻译脚本都放进项目仓库。Notepad++ 的shortcuts.xml可以导出,放到tools/notepadpp/shortcuts.xml;翻译脚本放到tools/translate/下。这样换机器或换人维护时,直接复制配置就能用。注意不要把 API Key 提交到仓库,用.env文件或环境变量。
第二,写一个sync-i18n.js脚本,把「读取英文 JSON → 找出缺失的中文键 → 调用翻译 → 写回中文 JSON」串起来。这样每次加词条,只需要在英文 JSON 里加好,跑一次脚本就能补齐中文。脚本逻辑:
const fs = require("fs"); const { translateText } = require("./translate"); async function sync() { const en = JSON.parse(fs.readFileSync("./_locales/en/messages.json", "utf8")); let zh = {}; if (fs.existsSync("./_locales/zh_CN/messages.json")) { zh = JSON.parse(fs.readFileSync("./_locales/zh_CN/messages.json", "utf8")); } for (const [key, value] of Object.entries(en)) { if (!zh[key]) { console.log(`翻译缺失键: ${key}`); const translated = await translateText(value.message); zh[key] = { message: translated }; await new Promise(r => setTimeout(r, 200)); } } fs.writeFileSync("./_locales/zh_CN/messages.json", JSON.stringify(zh, null, 2), "utf8"); console.log("同步完成"); } sync().catch(console.error);第三,把 JSON 校验加到 CI 或 pre-commit hook 里。每次提交前跑一遍JSON.parse校验,避免语法错误进仓库。可以用husky+lint-staged,或者简单的 npm script:
{ "scripts": { "check-i18n": "node -e \"['en','zh_CN'].forEach(l => JSON.parse(require('fs').readFileSync(`./_locales/${l}/messages.json`,'utf8'))); console.log('i18n OK')\"" } }第四,键名规整化的规则要统一。宏录制的规则是「转小写 + 空格换下划线」,但有些特殊情况需要处理:比如Can't里的撇号,宏替换后可能变成can_t,实际应该是cant。建议在宏之后加一步手工检查,或者写个正则预处理:
function normalizeKey(text) { return text .toLowerCase() .replace(/['’]/g, "") .replace(/[^a-z0-9]+/g, "_") .replace(/^_+|_+$/g, ""); }这个函数比宏更可靠,但宏的优势是可视化、可回放、不依赖脚本环境。两者可以结合:宏做初步规整,脚本做最终校验。
第五,翻译质量要抽查。模型翻译技术文案时,偶尔会把「Save」翻成「保存」还是「存储」拿不准。建议对核心 UI 文案(按钮、菜单、提示)人工过一遍,非核心文案(错误详情、日志)可以信任模型。TaoToken 的模型对话页面可以快速试翻几条,对比不同模型的效果。
第六,版本控制里保留messages.json的 diff。每次翻译更新后,git diff能清楚看到哪些词条变了。如果模型翻译出现明显错误,可以回滚单个词条,不用重跑整个流程。
最后说一个实际经验:Chrome 扩展国际化最耗时的不是翻译,而是键名管理和 JSON 结构维护。宏 + API 的组合能把这两块自动化,但前提是键名规则要稳定。如果键名规则经常变,宏和脚本都要跟着改,反而更麻烦。所以建议在项目初期就把键名规范定下来:全小写、下划线分隔、不用缩写(除非是公认缩写如pdf、url)、不用数字开头。规则定好后,宏录制一次,长期复用。
如果你后续要做更复杂的多语言支持(比如加上日语、韩语),翻译脚本只需要改targetLang参数,宏的部分完全不用动。这就是把「结构处理」和「语义翻译」分开的好处。结构用宏和脚本保证一致性,语义用模型保证效率,两者各司其职。
需要统一 Key 和 API 通道的话,可以从 API Keys 页面创建:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite;接入细节看文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite;想先试翻几条词条,用模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite。