Skip to content
| Marketplace
Sign in
Visual Studio Code>Visualization>Translate Inline Preview · 多语言翻译New to Visual Studio Code? Get it now.
Translate Inline Preview · 多语言翻译

Translate Inline Preview · 多语言翻译

simon-refine-vsc

|
2 installs
| (0) | Free
Translate inline preview for code comments and documents, with multi-language support (Youdao, Google, Aliyun, Tencent Cloud).
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Translate Inline Preview

在 VS Code 中为中文开发者提供 英文 → 中文 的实时代码注释 / 文档翻译预览。支持多种在线翻译后端,可插拔切换

Translate Inline Preview renders real-time translations of English code comments and documents directly in the editor — above the paragraph (CodeLens) or on hover — with full-text side-by-side comparison panels. Backends are pluggable: Aliyun, Baidu, Google, Youdao, Tencent, DeepL, or any OpenAI-compatible endpoint, chained with automatic failover, retries and circuit breaking via a declarative providers.json.


功能

  • 实时翻译预览:在英文段落(注释、文档、Markdown、YAML 值等)上方或悬停时渲染中文译文
  • 三种查看方式:
    • overhead(默认):段落上方用 CodeLens 显示独立一行的译文,自动内联渲染;
    • hover:悬停时光标所在段落才显示译文,不打断正文;
    • 显式 Webview 对照(按需触发):点击 CodeLens、悬停查看全文 tooltip,或执行 Show Full Translation / Compare View 命令,以侧边 Webview 面板展示完整原文 + 译文(含质量分)
  • 多供应商容错调用链:通过 providers.json 自定义主备 / 重试 / 负载轮询,防止单点 API 异常导致翻译中断
  • 支持的翻译后端:Aliyun、Google、Youdao、Baidu、DeepL、Tencent,以及自定义 OpenAI 兼容 HTTP 引擎
  • 免费额度兜底链:默认阿里云 → 百度 → 腾讯云,额度用尽自动切换其他供应商,无需付费即可持续翻译
  • 扩展能力:L3 翻译记忆库(跨会话复用)、L2.5 精确缓存(导入 / 导出)、项目术语库(术语一致)、用量统计与配额自动停用、批量翻译队列、原文 / 译文 / 质量对照预览

快速开始

  1. 安装插件(.vsix 或通过扩展面板)

  2. 声明供应商与容错链:在工作区 .vscode/providers.json 中配置。命令 Translate Inline Preview: Generate providers.json Template 可一键生成模板,最小配置如下。密钥统一用 ${ENV_VAR} 占位符,不要直接写进文件

    {
      "version": 1,
      "chains": [
        {
          "id": "default",
          "strategy": "failover",
          "providers": [ "aliyun", "baidu", "tencent" ],
          "retry": { "maxAttempts": 2, "baseDelayMs": 300, "maxDelayMs": 5000 },
          "maxRateLimitWaitMs": 8000
        }
      ],
      "providers": [
        { "id": "aliyun", "type": "aliyun", "monthlyCharLimit": 1000000,
          "credentials": { "accessKeyId": "${ALIYUN_ACCESS_KEY_ID}", "accessKeySecret": "${ALIYUN_ACCESS_KEY_SECRET}" } },
        { "id": "baidu", "type": "baidu",
          "credentials": { "appid": "${BAIDU_APP_ID}", "apiKey": "${BAIDU_KEY}" } },
        { "id": "tencent", "type": "tencent",
          "credentials": { "secretId": "${TENCENT_SECRET_ID}", "secretKey": "${TENCENT_SECRET_KEY}" } }
      ]
    }
    

    阿里云优先(免费 100 万字符 / 月),额度耗尽自动 failover 到百度,再到腾讯云兜底,全程无需付费

  3. 设置密钥变量(两种方式任选其一,值均从对应云厂商控制台获取):

    方式 A — 系统环境变量(推荐,所有项目通用):

    # Windows (PowerShell)
    [Environment]::SetEnvironmentVariable("ALIYUN_ACCESS_KEY_ID", "你的阿里云AccessKeyId", "User")
    [Environment]::SetEnvironmentVariable("ALIYUN_ACCESS_KEY_SECRET", "你的阿里云AccessKeySecret", "User")
    [Environment]::SetEnvironmentVariable("BAIDU_APP_ID", "你的百度AppId", "User")
    [Environment]::SetEnvironmentVariable("BAIDU_KEY", "你的百度API Key", "User")
    [Environment]::SetEnvironmentVariable("TENCENT_SECRET_ID", "你的腾讯云SecretId", "User")
    [Environment]::SetEnvironmentVariable("TENCENT_SECRET_KEY", "你的腾讯云SecretKey", "User")
    
    # macOS / Linux
    export ALIYUN_ACCESS_KEY_ID="你的阿里云AccessKeyId"
    export ALIYUN_ACCESS_KEY_SECRET="你的阿里云AccessKeySecret"
    export BAIDU_APP_ID="你的百度AppId"
    export BAIDU_KEY="你的百度API Key"
    export TENCENT_SECRET_ID="你的腾讯云SecretId"
    export TENCENT_SECRET_KEY="你的腾讯云SecretKey"
    

    方式 B — VS Code 设置(仅本机本扩展生效):在 settings.json 中加入

    {
      "translateInlinePreview.ALIYUN_ACCESS_KEY_ID": "你的阿里云AccessKeyId",
      "translateInlinePreview.ALIYUN_ACCESS_KEY_SECRET": "你的阿里云AccessKeySecret",
      "translateInlinePreview.BAIDU_APP_ID": "你的百度AppId",
      "translateInlinePreview.BAIDU_KEY": "你的百度API Key",
      "translateInlinePreview.TENCENT_SECRET_ID": "你的腾讯云SecretId",
      "translateInlinePreview.TENCENT_SECRET_KEY": "你的腾讯云SecretKey"
    }
    

    变量名需与 providers.json 中 ${...} 占位符一一对应(如 ${ALIYUN_ACCESS_KEY_ID} 对应 ALIYUN_ACCESS_KEY_ID)。不要把密钥写进仓库,也不要在 providers.json 里写明文(明文仅 debugAllowPlaintextCredentials 开发开关下允许)

  4. 打开含英文注释 / 文档的文件,译文即按 displayMode(默认 overhead)出现在段落上方,或悬停显示


效果演示

悬停预览(hover 模式)

将 translateInlinePreview.displayMode 设为 hover 后,鼠标悬停在英文段落上即可看到中文译文,不打断正文阅读:

hover 模式示意

全文对照 Webview

点击 CodeLens 或执行 Translate Inline Preview: Show Full Translation 命令,会以模态框 / 侧边 Webview 展示完整原文与译文对照:

webview 全文对照示意


具体示例

示例 1:代码注释 / 文档实时翻译(overhead 模式,默认)

overhead 模式在英文段落 上方 渲染独立一行的 CodeLens 译文,适合需要独占一行对照的场景(代码注释、.md、JSDoc 文档等)。默认即开,也可在 settings.json 中显式配置并调小 codeLensMaxLength:

{
  "translateInlinePreview.displayMode": "overhead",
  "translateInlinePreview.codeLensMaxLength": 80
}

应用后,段落上方会出现一行 CodeLens 译文,超长自动截断为 …,悬停看完整 tooltip,点击打开全文。代码注释与 Markdown 文档表现一致:

// ╭─ 初始化应用上下文并注册所有核心服务|配置文件缺失或格式错误时抛出 ─╮  ← CodeLens 译文(段落上方)
/**
 * Initializes the application context and registers all core services.
 * Throws if the configuration file is missing or malformed.
 */
function bootstrap() { /* ... */ }
╭─ 初始化应用上下文并注册所有核心服务|配置缺失或格式错误时抛出 ─╮  ← CodeLens 译文(段落上方)
# Initializes the application context and registers all core services.
# Throws if the configuration file is missing or malformed.

文档其余正文……

示例 2:免费零成本翻译链路(推荐新手)

在 .vscode/providers.json 中声明容错链(密钥通过 ${ENV_VAR} 占位符提供,详见上文):

{
  "version": 1,
  "chains": [
    {
      "id": "free",
      "strategy": "failover",
      "providers": [
        { "id": "aliyun" },
        { "id": "baidu" },
        { "id": "tencent" }
      ]
    }
  ],
  "providers": [
    { "id": "aliyun", "type": "aliyun", "monthlyCharLimit": 1000000,
      "credentials": { "accessKeyId": "${ALIYUN_ACCESS_KEY_ID}", "accessKeySecret": "${ALIYUN_ACCESS_KEY_SECRET}" } },
    { "id": "baidu", "type": "baidu",
      "credentials": { "appid": "${BAIDU_APP_ID}", "apiKey": "${BAIDU_KEY}" } },
    { "id": "tencent", "type": "tencent",
      "credentials": { "secretId": "${TENCENT_SECRET_ID}", "secretKey": "${TENCENT_SECRET_KEY}" } }
  ]
}
  • 阿里云优先(免费 100 万字符 / 月),额度耗尽自动切换百度 / 腾讯云兜底,翻译不中断
  • Youdao(无需密钥)等其他端点也可作为额外兜底,按需加入链中

腾讯云 TMT(tencent)当前仍是可用后端,需在 providers.json 中声明并通过 ${TENCENT_SECRET_ID} / ${TENCENT_SECRET_KEY} 提供密钥(限流建议 2/3,低于免费版 5/s 硬配额)

调用链路原理

chains: free = failover [ aliyun → baidu → tencent ]
        │
        ├─① 阿里云(主引擎,免费 100 万字符/月,需 ${ALIYUN_ACCESS_KEY_ID} / ${ALIYUN_ACCESS_KEY_SECRET})
        │      ├─ 成功            → 返回译文
        │      └─ 额度耗尽/失败   → 自动进入②
        │
        ├─② 百度(兜底,需 ${BAIDU_APP_ID} / ${BAIDU_KEY})
        │      └─ 成功 → 返回译文
        │
        └─③ 腾讯云(末位兜底,需 ${TENCENT_SECRET_ID} / ${TENCENT_SECRET_KEY})
               └─ 返回译文(或全部失败时才提示)

阿里云免费额度用尽后,Router 会 静默 切换到下一个供应商继续翻译,默认不打扰你。若希望感知切换,将 translateInlinePreview.notifyOnFallback 设为 true:开启后整个会话 仅弹一次 info 提示;若所有供应商均失败,才按 60 秒节流弹出失败告警

示例 3:显式全文对照(Webview,任何模式下可用)

overhead / hover 只渲染片段译文;需要看 完整原文 + 译文(+ 质量分) 时,用显式方式打开 Webview 面板(侧边栏,独立于编辑器、不会被重绘关闭):

  • 点击 overhead 模式下的 CodeLens → 触发 Translate Inline Preview: Show Full Translation;
  • 或执行命令 Translate Inline Preview: Show Full Translation(直接打开译文面板);
  • 或执行 Translate Inline Preview: Compare View (原文/译文/质量) → 打开原文 / 译文 / 质量分三栏对照面板
// ╭─ Initializes the application context and registers all core services ─╮  ← 点击它
/**
 * Initializes the application context and registers all core services.
 * Throws if the configuration file is missing or malformed.
 */
function bootstrap() { /* ... */ }

打开的侧边 Webview(见 效果演示)完整展示原文与译文,长文不截断,便于校对与复制


多供应商容错调用链(Router)

翻译由一个可配置的 Router(借鉴 litellm 思路)按照 providers.json 编排:

  • 调用链策略(strategy):
    • failover:按顺序逐一尝试,遇到成功即返回;
    • round_robin:每次轮换到下一个健康供应商,均匀分摊;
    • weighted:按权重选择(如阿里云 3 / DeepL 2 / 百度 1)
  • 重试与退避:对 timeout / server / network / rate_limit 类错误按指数退避重试;quota / auth 类错误 不重试,直接换供应商或报错
  • 三态熔断:每个供应商有 closed → open → half_open 熔断器,连续 5 次可重试失败后断路 30s,避免对故障供应商持续打流量
  • 速率限制:每个供应商可在 providers.json 中声明 rateLimit: { ratePerSec, burst },Router 据此做令牌桶限流(以 providers.json 为准,不再硬编码)
  • 结构化错误:所有供应商统一抛 TranslationError,由 Router 据此分类决策

providers.json 示例

放在工作区 .vscode/providers.json(可用命令 Translate Inline Preview: Generate providers.json Template 一键生成):

{
  "version": 1,
  "chains": [
    {
      "id": "primary",
      "strategy": "failover",
      "providers": [
        { "id": "aliyun" },
        { "id": "baidu" },
        { "id": "tencent" }
      ],
      "retry": { "maxAttempts": 2, "baseDelayMs": 300, "maxDelayMs": 5000 }
    },
    {
      "id": "balanced",
      "strategy": "weighted",
      "providers": [
        { "id": "aliyun", "weight": 3 },
        { "id": "deepl", "weight": 2 },
        { "id": "baidu", "weight": 1 }
      ],
      "retry": { "maxAttempts": 2 }
    }
  ],
  "providers": [
    {
      "id": "aliyun",
      "type": "aliyun",
      "monthlyCharLimit": 1000000,
      "rateLimit": { "ratePerSec": 5, "burst": 10 }
    },
    {
      "id": "baidu",
      "type": "baidu",
      "monthlyCharLimit": 0,
      "rateLimit": { "ratePerSec": 5, "burst": 10 },
      "credentials": { "appid": "${BAIDU_APP_ID}", "apiKey": "${BAIDU_KEY}" }
    },
    {
      "id": "tencent",
      "type": "tencent",
      "monthlyCharLimit": 0,
      "rateLimit": { "ratePerSec": 5, "burst": 10 },
      "credentials": { "secretId": "${TENCENT_SECRET_ID}", "secretKey": "${TENCENT_SECRET_KEY}" }
    },
    {
      "id": "deepl",
      "type": "deepl",
      "monthlyCharLimit": 500000,
      "credentials": { "authKey": "${DEEPL_AUTH_KEY}" }
    }
  ]
}

修改后 热重载,无需重启扩展。providers.example.json 是提交到仓库的模板,请勿把真实凭据写进它

字段说明

顶层字段 子字段 说明
version — 固定 1
chains[] id / strategy 调用链标识;strategy 为 failover(顺序尝试)/ round_robin(轮换)/ weighted(按 weight 选择)
chains[].providers[] id / weight 链内引用的 provider;weighted 策略下用 weight 设置权重
chains[].retry maxAttempts / baseDelayMs / maxDelayMs 指数退避重试参数
chains[].maxRateLimitWaitMs — 单条翻译累计限流等待上限(默认 8000),超则跳到下一 provider
providers[] id / type provider 标识与类型;type 取值见下表
providers[].monthlyCharLimit — 月度字符额度,0 表示不限(额度耗尽自动停用并降级)
providers[].rateLimit ratePerSec / burst 令牌桶限速,务必低于服务商硬配额
providers[].credentials accessKeyId / apiKey / authKey / secretId / secretKey / appid 等 通过 ${ENV_VAR} 占位符提供;免费端点(google / youdao)无需此字段
providers[].circuitBreaker openWindowMs / halfOpenWaitMs 熔断完全开路时长 / half-open 试探等待时长
providers[].custom protocol / url / headers / requestTemplate / responsePath 仅 type: "openai_compatible" 或 "custom" 使用,自定义请求 / 响应解析

type 支持的枚举(以 src/config/providers-config.ts 的 PROVIDER_TYPES 为准):aliyun / google / youdao / baidu / deepl / tencent / custom / openai_compatible。Azure、Caiyun、Volcengine 等不在此列表中的类型请改用 openai_compatible 自定义实现(见 providers.example.json 的 deepseek / caiyun 示例)


配置项

在 VS Code settings.json 中配置:

配置项 类型 默认值 说明
translateInlinePreview.enabled boolean true 总开关,关闭后不渲染任何译文
translateInlinePreview.displayMode enum overhead hover / overhead(自动内联渲染模式)。显式 Webview 对照与 displayMode 无关,任何模式下都可用(见下)
translateInlinePreview.scopeMode enum global Scope Mode:global(默认)= 全局模式,对所有文件生效(覆盖 Scope 设置);scoped = 仅翻译已加入 Scope 的文件
translateInlinePreview.fileScopes array [] 指定启用预览的文件路径
translateInlinePreview.folderScopes array [] 指定启用预览的文件夹
translateInlinePreview.globScopes array [] Glob 模式(如 "**/*.md")
translateInlinePreview.translateCodeComments boolean true 是否翻译代码注释
translateInlinePreview.translateYamlValues boolean true 是否翻译 YAML key: value 的值部分(键不翻译);便于 agent / rule / skill 等 .codebuddy/** 元数据的英文 name / description 得到翻译
translateInlinePreview.targetLanguage enum zh-CN 目标语言(预设:zh-CN / zh-TW / en / ja / ko / fr / de / es / ru);命令 Translate Inline Preview: Set Target Language 可快速切换;非预设值回退为 zh-CN;与源语言互斥(相同源语言自动回退)
translateInlinePreview.sourceLanguage enum en 源语言(预设同 targetLanguage,不含 auto):zh-CN / zh-TW / en / ja / ko / fr / de / es / ru;用于声明源语种、构建精确缓存命名空间。与目标语言相同(canonical 归一后)自动回退——目标为 en 回退 zh-CN,否则回退 en,状态栏提示冲突;命令 Translate Inline Preview: Set Source Language 可快速切换
translateInlinePreview.protectParallelText boolean true 对照段保护:中文…(English) / 中文 / English 对照只翻译中文侧、英文侧原样保留并跳过质量校验;关闭后对照段英文侧会被整体翻译(旧行为)
translateInlinePreview.maxTranslationLength number 200 单段最大翻译字符数(范围 20–2000)
translateInlinePreview.codeLensMaxLength number 120 overhead 模式 CodeLens 标题最大可见字符数;超长截断为 …
translateInlinePreview.codeLensMaxCount number 500 单次构建 CodeLens 数量上限(范围 10–5000)
translateInlinePreview.qualityThreshold number 0.6 译文质量阈值 [0–1]
translateInlinePreview.enableTranslationMemory boolean true 启用 L3 翻译记忆库
translateInlinePreview.onlyOnline boolean true 仅在线翻译(离线字典已禁用)
translateInlinePreview.notifyOnFallback boolean false 主供应商额度耗尽降级时是否弹一次性提示
translateInlinePreview.fontSize number 0.9 译文装饰文字字号(em,相对编辑器字号)
translateInlinePreview.colorScheme enum readable 装饰配色:subtle / readable / accent / green
translateInlinePreview.debugAllowPlaintextCredentials boolean false ⚠️ 仅开发用:允许 providers.json 中明文凭据(默认关闭)

说明

  • codeLensMaxCount 未在 package.json 的 contributes.configuration 中注册,由代码默认值与 clamp 提供;settings.json 中可手动写入但不带编辑器提示
  • 旧版单供应商密钥配置项(如 aliyunAccessKeyId / baiduAppId / tencentSecretId / deeplAuthKey)已从 package.json 移除;当前统一在 .vscode/providers.json 中声明供应商,密钥通过 ${ENV_VAR} 占位符提供(详见文末「安全说明」)
  • 旧版单供应商选择器 translateInlinePreview.translationProvider 已废弃、无效果(保留仅为向后兼容字段名)。请改用 providers.json 配置容错链

语言与分拣

sourceLanguage / targetLanguage 决定翻译方向,并驱动门卫与分拣:

  • 门卫(Guard):文本脚本与目标语言脚本一致才进入翻译(目标 zh-CN 时仅英文段落),已在目标语言中的同质段直接短路;防御性检查对 source/target 做 canonical 归一后相同时,仍按文本脚本二次判断,避免配置相等却误伤另一语种文本
  • 三段式分拣(segmentTranslatable):mask → translate → restore 三段流水。先保护格式占位符(F,代码块 / URL / 公式等)与术语占位符(G);再识别对照段——中文…(English)(A 型)与 中文 / English(B 型)——用 S 占位符替换,只翻译中文侧、保留英文侧原样;最后还原全部占位符。S / F / G 三层占位符互不串位
  • 互斥回退:sourceLanguage 与 targetLanguage 相同(canonical 归一后)时自动回退——目标为 en 时回退 zh-CN,否则回退 en;Set Source Language 命令的候选列表会隐藏与目标相同的语言,状态栏提示冲突
  • protectParallelText(默认开):对照段保护总开关。关闭后对照段中的英文侧也会被整体翻译(旧行为)

语种矩阵

Provider 支持语种 语对禁令
aliyun 9 全支持(zh-CN / zh-TW / en / ja / ko / fr / de / es / ru) zh-TW 仅与中文互译(14 对禁)
baidu 9 全支持(大模型 API 代码表:zh / cht / en / jp / kor / fra / spa / de / ru) 无
tencent 9 全支持(zh-CN / zh-TW / en / ja / ko / fr / de / es / ru) 无
google 9 全支持 无
youdao 8(无 zh-TW) 非英非中语对(30 对)禁——只支持 en / zh-CN 与 8 语之间互译
deepl 8(无 zh-TW) 无(zh-TW 由语言集合拦截)

被拒语对统一抛 unsupported 错误:不参与重试 / 熔断计数,Router 自动 failover 到链中下一家,不会静默产出错误语种的译文

overhead 模式长译文处理

CodeLens 标题受 VSCode API 限制只能渲染单行,超长时会被视口截断,本插件采用业界通用做法(与 GitLens / i18n CodeLens 一致):

  • 标题截断:超过 translateInlinePreview.codeLensMaxLength 的译文以 … 结尾,保证单行可读;
  • 悬停 tooltip:鼠标悬停显示完整「原文 + 译文」,支持换行;
  • 点击看全文:点击 CodeLens 触发 translateInlinePreview.showFullTranslation,以模态框展示完整原文与译文

overhead 模式(默认)用 CodeLens 在段落上方保留真正的一行,适合需要独占一行的对照场景;hover 模式则在悬停时才显示译文,不打断正文阅读。无论哪种 displayMode,都可以通过点击 CodeLens、悬停看全文 tooltip,或执行 Translate Inline Preview: Show Full Translation / Compare View 命令,显式打开侧边 Webview 面板查看完整原文 + 译文(及质量分)对照——这是第三种按需查看方式,不随 displayMode 关闭


命令

开关与作用范围

  • Translate Inline Preview: Enable / Disable — 总开关:关闭后整个扩展不再渲染任何译文(优先级最高,覆盖一切)
  • Translate Inline Preview: Scope Mode: Global / Scoped — 作用范围开关(对应配置 translateInlinePreview.scopeMode,取值 global / scoped):总开关开启时生效。Scoped = 只翻译已加入 Scope 的文件;Global = 翻译工作区所有文件(覆盖 Scope 设置)
  • Translate Inline Preview: Add Current File to Scope — 将当前文件加入作用范围
  • Translate Inline Preview: Remove Current File from Scope — 将当前文件移出作用范围
  • Translate Inline Preview: Add Current Folder to Scope — 将当前文件夹加入作用范围
  • Translate Inline Preview: Remove Current Folder from Scope — 将当前文件夹移出作用范围
  • Translate Inline Preview: Add Glob Pattern to Scope — 添加通配符作用范围
  • Translate Inline Preview: Remove Glob Pattern from Scope — 移除通配符作用范围
  • Translate Inline Preview: Show Scope Status — 查看当前作用范围配置
  • Translate Inline Preview: Clear All Scopes — 清空所有作用范围

查看与对照

  • Translate Inline Preview: Show Full Translation — 对光标所在(或点击 CodeLens 的)段落打开完整原文 + 译文 Webview 面板
  • Translate Inline Preview: Compare View (原文/译文/质量) — 对光标所在段落打开原文 / 译文 / 质量分对照面板
  • Translate Inline Preview: Batch Translate Document — 以受限并发批量翻译当前文档全部英文段落

配置与模板

  • Translate Inline Preview: Generate providers.json Template — 生成 .vscode/providers.json 起始模板
  • Translate Inline Preview: Open providers.json — 打开(必要时生成)providers.json
  • Translate Inline Preview: Set Target Language — 从预设语言列表(9 种)中选择目标语言并写入全局设置,立即生效
  • Translate Inline Preview: Set Source Language — 从预设语言列表中选择源语言(与目标语言互斥:候选列表隐藏与目标相同的语言,相同则自动回退)
  • Translate Inline Preview: Mark Selection as Untranslated — 将选中文本写入项目术语库(原文→原文),之后该文本不再被翻译

缓存与统计

  • Translate Inline Preview: Clear Translation Memory — 清空本地翻译记忆库(L3)
  • Translate Inline Preview: Clear Precise Cache (L2.5) — 清空精确缓存
  • Translate Inline Preview: Export Precise Cache — 导出精确缓存
  • Translate Inline Preview: Import Precise Cache — 导入精确缓存
  • Translate Inline Preview: Show Usage Stats — 查看各供应商当月字符用量与停用状态
  • Translate Inline Preview: Show Translation Stats — 查看翻译命中率、缓存 / 记忆命中、耗时等运行统计

扩展能力

L3 翻译记忆库

把译过的段落按相似度(n-gram Jaccard ≥ 0.85)存到本地,下次遇到近乎相同的文字直接复用,省去重复联网翻译。可用 translateInlinePreview.enableTranslationMemory 关闭,或用 Translate Inline Preview: Clear Translation Memory 清空

L2.5 精确缓存

对 逐字相同 的原文做内存级缓存(仅限本次会话),命中率比 L3 更高,但不跨会话保留。支持用 Export / Import Precise Cache 命令导出 / 导入

L2.5 与 L3 的关系

两者都是「免联网复用已有译文」的缓存,但层级不同、互补:

  • L2.5 精确缓存(快、短命):要求原文 逐字一致 才命中,存在内存里、只活在当前会话。它最快,但换个会话或重启就清空
  • L3 翻译记忆库(慢一点、长久):按 相似度(Jaccard ≥ 0.85)匹配,存到本地磁盘、跨会话乃至跨项目保留。新会话里第一次遇到相近文字,就靠它免去联网

协作顺序:一段原文进来,先查 L2.5(精确命中就直接返回);未命中再查 L3(相似命中同样复用);都未命中才真正调用翻译,并把结果同时写回 L2.5 与 L3。因此 L2.5 像「手边的便签」,L3 像「归档的笔记本」——前者加速当下,后者沉淀历史

项目术语库

在工作区 .vscode/glossary.json 中登记术语对照,例如 { "source": "Kubernetes", "target": "Kubernetes" }。翻译时会先把术语替换成占位符、译完再还原,避免专业词被机翻改坏

用量统计与配额管控

在 providers.json 里给每个供应商设 monthlyCharLimit。当月累计用量超限时,该供应商会被 自动停用(Router 不再选它)并提示一次,防止意外超额。这是配置级管控,不绑定账号体系

格式保护与质量评分

  • FormatPreserver:翻译前先把代码块、Markdown 围栏 / 链接、HTML 标签、URL、环境变量、@mention、#tag、行内公式 $...$、邮箱、emoji、转义符等用占位符保护起来,译完再还原;万一还原失败也有兜底,避免占位符残留在译文里
  • QualityGate:每条译文都会打分,低于 translateInlinePreview.qualityThreshold 的不展示(对照面板会显示具体分数)。评分会拦截以下几类低质译文:
    • 中文占比不足
    • 原样回显(原文含中文却与译文完全相同)
    • 三明治结构(首尾是原文、中间夹中文)
    • 长度偏差过大(与原文长短比不合理)
    • 纯符号噪声(几乎全是标点 / 符号)
    • 中英文碎片交替(内部频繁穿插)

最佳实践

  1. 新手直接用 providers.json 配置容错链:配好密钥后无需关心额度耗尽,翻译不中断
  2. 按需选择展示模式(默认 overhead):
    • overhead(默认):独占一行 CodeLens,适合文档 / Markdown 对照、需要真正一行译文
    • hover:悬停才显示,适合需要干净正文的场景
  3. 长译文用 overhead + 截断:把 codeLensMaxLength 调到合适值,避免单行过长;用悬停 tooltip 看全文
  4. 密钥安全:密钥通过 providers.json 的 ${ENV_VAR} 占位符提供,仅存于本机 settings.json,不入库。详见文末「安全说明」
  5. 限定作用范围:用 Add / Remove File / Folder / Glob Scope 只对需要的文件启用,减少无关翻译、节省额度
  6. 关注质量阈值:通过 translateInlinePreview.qualityThreshold(默认 0.6)过滤低质量译文,避免噪声
  7. 感知切换:将 translateInlinePreview.notifyOnFallback 设为 true,额度切换时弹一次提示,便于感知兜底生效
  8. 关闭不需要的翻译:translateCodeComments(默认开)/ translateYamlValues(默认开)可按需开关

安全说明

  • 所有云厂商密钥均从 settings.json 读取,仅本机 settings.json,不入库、不硬编码
  • 凭据优先使用 providers.json 的 ${ENV_VAR} 占位符(读环境变量或仅本机 settings.json),明文仅在 debugAllowPlaintextCredentials 开启时允许(默认关闭)
  • 翻译走 HTTPS,文本仅发送至你配置的翻译服务商
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft