- 前端
- 开发者工具
- 插件系统
【免费下载链接】scriptcat
ScriptCat, a browser extension that can execute userscript; 脚本猫,一个可以执行用户脚本的浏览器扩展
ScriptCat(脚本猫)是一个可执行用户脚本的浏览器扩展。为了让en-US(美式英语)界面与文档在产品概念、UI 动作和状态表述上保持一致,并防止后续翻译复制来源中的含糊措辞,仓库在 docs/references/terminology-en-US.md 中建立了一份术语与界面文案规范(Terminology and UI Copy Guidelines)。本文以该规范为主体,结合 src/locales 下的真实 JSON 字符串与 i18n 实现,系统讲解 ScriptCat 的英文文案治理原则、五类术语分类表、推荐词汇与审查清单。读完本文,你将掌握一套可直接套用的英文 UI 文案评审方法论,并能在修改任意 locale 的翻译时定位到对应的术语依据。
一、术语规范在 ScriptCat i18n 体系中的位置
1.1 为什么需要一份英文术语规范
ScriptCat 的国际化使用 i18next 实现(而非chrome.i18n,原因是后者不支持动态切换语言),语言文件位于src/locales/<locale>/目录下,按页面命名空间拆分为多个*.json文件,最终由 src/locales/locales.ts 合并导出。关键机制如下:
en-US是运行时的回退语言(fallbackLng: "en-US"),也是新翻译的模板语言;- 顶层
NS数组(common、popup、script、editor、settings、install、agent、logs、guide、tools、permission、external_access)必须与en-US/下的命名空间文件集合完全一致; - 为满足部分扩展市场要求,
chrome.i18n语言文件另行维护在src/assets/_locales目录。
既然en-US同时承担"模板"与"回退"双重角色,其措辞就必须被刻意校准——含糊或不地道的英文一旦写入en-US,就会被复制到其他 locale。这份术语规范正是为了在文案源头把关而存在。
1.2 规范的适用边界
规范明确说明其使用来源为src/locales/en-US/*.json、README.md与docs/architecture.md,并给出 7 条原则。这些原则界定了"术语修正"的边界:
- 使用简洁的美式英语 UI 文案,直接陈述动作或状态;
- 保持
User Script、Page Script、Background Script、Scheduled Script四种脚本类型的产品区分,不可互相替换; - 禁止仅凭拼写做全局替换——必须确认功能、UI 位置、周边文案,以及该字符串是标签还是句子;
- 面向开发者的术语必须保持技术精确,包括
regular expression、cron expression、watch、storage和元数据标识符; - 不得改动占位符、HTML/React 标签、i18next 插值、URL 或
@match、@exclude、@grant、@connect等标识符; en-US是回退语言与翻译模板,含糊或不地道的英文应被刻意修正,而不是传播到其他 locale;- 下表列出的 key 记录的是当前实际用法或已知审查目标,同一含义的未来字符串同样适用。
从源码结构看,这些原则与 docs/translation.md 中"不要把某个界面文案的修正扩大成该词在所有上下文中的禁用规则"的要求是相互呼应的——术语规范只约束明确的场景,语境敏感项必须逐个核对。
二、A 类:产品与功能术语
A 类术语解决"ScriptCat 的能力和脚本类型该叫什么"的问题。规范要求保留ScriptCat的产品大小写(ScriptCat而非Scriptcat),并严格区分四种脚本类型:
| 概念 | 推荐措辞 | 当前示例 key | 备注 |
|---|---|---|---|
| ScriptCat 浏览器扩展 | ScriptCat extension | welcome_title、ext_update_notification | 保留ScriptCat产品大小写 |
| 通用用户脚本能力 | user script/userscript | create_user_script、script_list_content、README | UI 类型标签用User Script;行文可统一用userscript |
| 普通用户脚本类型 | User Script(当前类别标签Normal Script) | create_user_script、script_list.sidebar.normal_script | 不得与后台/定时脚本合并 |
| Tampermonkey 兼容 | Tampermonkey-compatible userscript/Tampermonkey script | README.md、docs/architecture.md | 仅在讲兼容性时使用 |
| 页面脚本 | Page Script | script_list_enable_content | 指在页面中运行的脚本概念,勿静默替换普通脚本类别标签 |
| 后台脚本 | Background Script | create_background_script、background_script、enable_background.description | ScriptCat 的脚本类型之一,具备后台运行能力 |
| 定时脚本 | Scheduled Script | create_scheduled_script、scheduled_script、scheduled_script_description_title | 用产品术语,不引入crontab script |
| 脚本同步 | Script Sync | script_sync、sync_status、setting_sync_title | 涉及删除时须说明同步的是删除状态还是内容 |
| 脚本订阅 | Subscription | subscribe、subscribe_url、importpage.count_subscribes | Subscribe仅作动词/控制动作;对象用Subscription |
| 脚本市场 | Script Gallery/Script Market | script_gallery、script_list_title | 与目标市场的产品标签保持一致,勿擅自合并名称 |
在源码中可以找到这些规则的直接证据。例如 src/locales/en-US/script.json 中create_user_script为Create User Script、create_scheduled_script为Create Scheduled Script,且normal_script同时以User Script(第 44 行)与Normal Script(第 53 行)两种形式出现——这正是规范中"类别标签待统一"的真实写照;src/locales/en-US/install.json 中的scheduled_script_description_title明确定义了定时脚本的行为:"一旦启用,它会在指定时间自动运行,并可在面板中手动控制"。
三、B 类:UI 动作与状态
B 类术语为控件、标签和状态消息提供首选措辞,核心逻辑是"动词直接用动词、状态用形容词、对象标签用名词":
| 概念 | 推荐措辞 | 当前示例 key | 备注 |
|---|---|---|---|
| 创建 | Create | create_script、create_background_script、create_success_note | 用于创建动作与确认 |
| 保存/另存为 | Save/Save As | save、save_as、save_as_success | 作为标签时首字母大写,行文中用句子大小写 |
| 导入/导出 | Import/Export | import、export、import_file、export_file | 标准数据/文件动作 |
| 安装/更新 | Install/Update | script、update_script、success | 需要消歧时补充对象名 |
| 运行/运行时 | Run/Runtime | run、running、runtime、log_title | 执行日志用Runtime Logs |
| 启用/禁用 | Enable/Disable;状态Enabled/Disabled | enable、disable、updatepage.enabled、updatepage.disabled | 功能启停避免用open/close |
| 设置/配置 | Settings/Configuration | settings、script_setting、editor_config | UI 选项是 settings;配置数据或编辑器配置用 configuration |
| 连接/同步 | Connect/Sync | connect、connection_success、script_sync | 连接状态与数据同步分开 |
| 恢复/重置 | Restore/Reset | restore、restore_default_values、reset | 按"恢复已存/默认内容"或"重置设置"区分 |
| 加载/重新加载 | Loading/Reload | loading、loading_title、click_to_reload | 使用自然的进行时/动作形式 |
| 目录 | Directory | open_directory、open_backup_dir | 适合面向开发者的文件系统功能 |
| 浏览器标签页 | Tab | close_current_tab、close_other_tabs | 不得把浏览器标签页叫tags |
例如 src/locales/en-US/common.json 中save、export、import、enable、disable、reset等动作词与规范一一对应,而delete_success(Delete Successful)正是 E 类审查目标中"标题式片段被用作消息"的实例。这说明规范不是在描述理想状态,而是针对仓库现状给出可执行的修正方向。
四、C 类:语境敏感措辞
C 类术语的特殊之处在于:最佳措辞取决于具体功能或 UI 表面,不能机械全局替换,规范为每项给出了决策规则:
| 概念 | 候选措辞 | 决策规则 | 当前示例 key |
|---|---|---|---|
| 本地/云端 | Local/Cloud | 用于数据来源、目的地与存储位置;对象不明确时加device或storage | local、cloud、source_local_script、tools_backup_content |
| 面板/控制台 | panel/console | ScriptCat UI 控件用panel,开发者工具输出用console | background_script_description、build_success_message |
| 来源 | Source、Install Source、Subscription Source | 命名来源所提供的内容;订阅对象不是动词 | source、importpage.col_source、source_subscribe_link |
| 权限/授权 | Permission、Allow、Grant access | 能力记录用 permission,决策用 allow/deny,解释句用 grant access | permission、duration_once、confirm_script_operation |
| 运行位置/应用 | Applies To、Run Status | 重写Apply To / Run Status前先验证列行为——它可能合并了两个独立概念 | apply_to_run_status、script_list_enable_title |
| 同步删除 | Sync Deletions/Sync Deletion Status | 先确认设置是传播墓碑标记还是立即执行删除 | sync_delete、sync_delete_desc、notification.script_sync_delete |
| 匹配/排除 | Match/Exclude | UI 编辑规则时保持@match、@exclude元数据标识符可见 | website_match、website_exclude、add_match、add_exclude |
其中"同步删除"在源码中有非常清晰的证据链:src/locales/en-US/settings.json 的sync_delete_desc明确写道:启用时脚本被删除会标记删除状态、其他设备检测到该状态后相应删除;禁用时则从本地和云端直接删除,多设备使用时可能引发重复同步问题。这解释了为什么措辞必须区分Sync Deletions(同步删除状态)与立即删除——两种行为语义完全不同。
五、D 类:需要保留的技术术语
D 类术语要求开发者面向的词汇保持技术精确,不得为了"通俗"而稀释其含义:
| 概念 | 用法 | 当前示例 key | 原因 |
|---|---|---|---|
| 正则表达式 | regular expression/ 紧凑标签regex | search_regex | 标准开发者术语 |
| cron 表达式 | cron expression | cron_invalid_expr、error_cron_invalid | 精确标识所接受的调度语法 |
| 表达式 | expression | value_export_expression、cookie_export_expression、expression_format_error | 保留"输入或求值的表达式"的技术含义 |
| 监视文件变化 | Watch File/Stop Watching | watch_file_description、watch_file、stop_watch_file | watch描述开发者工具中持续的文件变化监视 |
| 元数据声明 | declaration | error_metadata_line_duplicated | 对应元数据语法,而非普通重复值 |
| 存储 / Storage API | storage/Storage API | script_storage、storage_api、script_operation_title | 功能与 API 术语 |
| 产品/API 标识符 | 保留ESLint、VSCode、Cookie、GM API、@resource、@require | enable_eslint、vscode_url、permission_cookie、script_resource_tooltip | 名称与元数据标识符必须保持可辨识、准确 |
源码印证:src/locales/en-US/editor.json 中watch_file_description详细说明了 watch 行为——"监视文件变化并自动更新脚本,保持脚本文件路径不变且监视期间不要关闭本页面";error_metadata_line_duplicated(There are duplicate declarations in the metadata.)把"重复声明"与"普通重复值"区分开,正是declaration术语的典型用例。而cron_invalid_expr(Invalid cron expression)与error_cron_invalid(Invalid cron expression: {{expr}})都精确使用了cron expression而非笼统的condition。
六、E 类:文案审查目标
规范强调:建立这份规范本身并不会改变运行时的字符串,下列条目需要在一次有范围(scoped)的英文文案审查中结合 UI 检查来修正。每个目标在src/locales/en-US/*.json中都能找到对应实例:
| 目标 | 当前措辞或问题 | 推荐方向 | 当前示例 key |
|---|---|---|---|
| 订阅作名词 | 对象标签用Subscribe,如Subscribe URL、Install Subscribe | 对象值用Subscription URL、Install Subscription、Update Subscription,复数用Subscriptions | subscribe_url、subscribe、update_subscribe、importpage.count_subscribes、notification.subscribe_update |
| 浏览器标签页 | 全部标签页入口只有All,而相邻条目明确写Normal tabs、Incognito tabs | 若这些值面向浏览器标签页,用All Tabs、Normal Tabs、Incognito Tabs | script_run_env.all、script_run_env.normal-tabs、script_run_env.incognito-tabs |
| 定时脚本命名 | 某状态字符串写crontab scripts,而功能名是Scheduled Script | 统一用scheduled scripts | only_background_scheduled_can_run、scheduled_script |
| 产品大小写 | Scriptcat extension updated与ScriptCat不一致 | 保留ScriptCat大小写 | ext_update_notification |
| 标题式片段作消息 | 许多成功/错误消息使用名词式形式,如Delete Successful、Update Successful、Dump success saved | 通知类用自然结果消息,如Deleted successfully、Updated successfully、Export successful;标签大小写另计 | delete_success、update_success、export_success、success |
| 交互指引 | 链接用tap或Click me,部分说明文字语法不通 | 用一致的桌面 UI 措辞,如Click to learn how to enable it,说明用完整句子 | develop_mode_guide、allow_user_script_guide、lower_version_browser_guide、blacklist_placeholder、link_import_placeholder |
| 浏览器专属后台行为 | 后台运行文案要求用户退出Chrome,但 ScriptCat 支持多浏览器 | 确认实现行为后,除非设置是 Chrome 专属,否则用the browser | enable_background.description |
以第一个目标为例,源码中的证据非常典型:src/locales/en-US/script.json 第 11 行subscribe_url确实是Subscribe URL,src/locales/en-US/install.json 第 5 行update_subscribe是Update Subscribe、第 160 行count_subscribes是{{count}} subscriptions——名词对象混用动词的现象一目了然。横向对比其他 locale(如 src/locales/zh-CN/script.json 的订阅地址、src/locales/de-DE/script.json 的Abonnement-URL)也能看出,多数语言已按"名词对象"处理,en-US的修正不会造成语义断层。
浏览器标签页目标的证据同样直接:script_run_env.all为All,而script_run_env.normal-tabs为Normal tabs、script_run_env.incognito-tabs为Incognito tabs(见 src/locales/en-US/settings.json 第 98-103 行),三个同层级入口的大小写与词形不一致。
七、推荐词汇对照表
对于对应语境下的新en-US字符串,规范给出了一张"推荐 vs 避免"的速查表:
| 推荐 | 除非特定语境需要,否则避免 |
|---|---|
ScriptCat | Scriptcat |
User Script、Page Script、Background Script、Scheduled Script | 用Normal Script或crontab script作为未经证实的替换类型 |
对象用Subscription,动作用Subscribe | 把Subscribe用作名词 |
产品选项用Settings,配置数据用Configuration | 无空间限制时在面向用户的文案中使用Config |
浏览器标签页用Tab | 用Tag指浏览器标签页 |
regular expression/regex | 在接受 regex 语法时使用含糊的condition |
Storage API | 改名后的 API 术语 |
@require、@resource、@match、@exclude、@grant、@connect | 被翻译或拼错的元数据标识符 |
这张表是日常写文案时的第一参考:先看概念落在哪一行,再决定用词;遇到表外情况再回到 A-E 分类中按决策规则判断。
八、AI 与贡献者的工作检查清单
规范的最后一节是一份面向 AI 任务与人类贡献者的 7 步检查清单,适用于"新增或编辑英文文案"的全部场景:
- 确认目标 locale 是
en-US,查阅本指南及相邻的既有 UI 字符串; - 同一 ScriptCat 概念使用同一产品/功能术语,不要因措辞相近而合并脚本类型;
- 对语境敏感术语,先核对实际行为、控件类型与周边文本再修改;
- 保留技术术语、产品大小写、元数据标识符、标签、插值值与 URL;
- 将
en-US视为其他 locale 的来源文案:不引入别扭语法、名词/动词歧义或未翻译的类型区分; - 只通过有范围的变更处理审查目标,并同时检查相关通知、tooltip 与标签;
- 交付前搜索新编辑的英文文本,检查脚本类型命名不一致、
Subscribe用作名词、浏览器标签页被叫成 tags、标识符被修改等问题。
这套清单与 docs/translation.md 中的"完成前检查清单"(确认 locale、使用自然表达、保留插值与标识符、运行pnpm run check:i18n)形成双重保障:前者管措辞质量,后者管 key 完整性。
九、与机械检查的配合:规范管措辞,脚本管完整性
值得强调的是,术语规范并不取代自动化检查。scripts/check-i18n.mjs(通过pnpm run check:i18n运行,并随pnpm lint/pnpm lint:ci自动执行)能静态验证:
- 每个 locale 目录都在 src/locales/locales.ts 中注册,
NS数组与en-US/命名空间文件集合一致; - 每个 locale 的
*.jsonkey 与en-US(模板/回退语言)一一对应,缺失或多出都会报错; - 每个 locale 都存在对应的
docs/references/terminology-<locale>.md,缺失即检查失败; - 每个 locale 都有对应的
src/assets/_locales/<chrome-locale>/messages.json与editorLangs条目。
但正如 docs/translation.md 所强调:脚本只能证明 key 存在与对齐,无法判断措辞是否准确、是否符合术语规范——这恰恰是本文所述的terminology-en-US.md的职责所在。而 src/locales/i18n-usage.test.ts 仅扫描src/pages与src/app/service/service_worker中的t()/i18n.t()调用并按zh-CNresources 校验 key 存在性,同样不涉及译文质量。因此,术语规范的执行依赖"人 + AI 审阅"这一环:修改任何 locale 的翻译前,先读 docs/translation.md,再读对应语言的terminology-<locale>.md,最后用机械检查兜底。
结语
ScriptCat 的 terminology-en-US.md 是一份"小而完整"的文案治理模板:七条原则划定边界,五类表格覆盖产品术语、动作状态、语境敏感词、技术保留词与现存缺陷,推荐词汇表提供即查即用的决策依据,7 步检查清单保证 AI 与人类贡献者按同一标准交付。无论你是要为 ScriptCat 提交英文文案修正,还是在自己的多语言项目中建立术语规范,都可以直接复用这套结构——先定义"什么不能动"(元数据标识符、插值、产品大小写),再定义"什么该怎么说"(动作动词化、对象名词化、类型不合并),最后用有范围的审查与自动化检查收口。
- 前端
- 开发者工具
- 插件系统
【免费下载链接】scriptcat
ScriptCat, a browser extension that can execute userscript; 脚本猫,一个可以执行用户脚本的浏览器扩展
相关推荐
ScriptCat 土耳其语(tr-TR)界面术语规范:一份可直接落地的本地化术语指南
ScriptCat 土耳其语(tr TR)界面术语规范:一份可直接落地的本地化术语指南 本篇技术指南围绕 ScriptCat 开源仓库中的土耳其语术语规范文档(
前端开发者工具插件系统Druid SQL 解析器 Feature Gate 命名规范化重构:LexerFeature / ParserFeature 命名契约设计与实践
Druid SQL 解析器 Feature Gate 命名规范化重构:LexerFeature / ParserFeature 命名契约设计与实践 导读 本文基
前端开发者工具插件系统12 分钟实测:OpCore-Simplify 一键生成可启动的 OpenCore EFI
12 分钟实测:OpCore Simplify 一键生成可启动的 OpenCore EFI 上周我用它给一台 2018 年的老笔记本(8 代 i5、UHD 62
前端开发者工具插件系统
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考