> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# 功能说明

## 核心特性

### 一次翻译，输出多语种

可以把同一份文件同时翻译成多种语言，适合多语种字幕或国际化项目。例如把英文字幕一次性翻译成中文、日语、德语、法语，导出时按语言分别打包。当前支持 120+ 种语言，持续扩充中。

### 翻译缓存

翻译结果会自动保存在浏览器本地，参数一致时直接命中缓存，不重复消耗 API：

- **持久化**：刷新或关闭浏览器不会丢
- **大容量**：可以保存数百万条记录，不占内存
- **可关闭**：调试 Prompt / 模型时可临时关闭，避免读到旧结果
- **可清理**：在设置面板中一键清空所有缓存
- **命中条件**：源文本 + 源/目标语言 + 服务关键参数（LLM 看 prompt/温度/思考强度，Qwen-MT 看 domains，传统 MT 仅看源文本）完全一致才命中；改温度、改 prompt、切换思考开关、增删术语表词条都会 miss

### 术语表（Glossary）

为人名、专有名词指定固定译法，保证整份文件乃至整个系列的译名一致——追剧字幕里的角色名、技术文档里的产品术语都不会再"一集一个译法"。

**在哪里开启**：翻译设置面板中的「术语表」卡片（仅在所选服务支持时显示），主页面的 API 状态徽章旁也有术语表状态芯片，点击可直达。打开开关后若还没有术语表，会自动新建一个。

**词条管理**：

- 每条词条 = **原文词 → 指定译法**，并绑定一个**目标语言**——同一个词可以为不同目标语言各存一条译法，翻译时只应用当前目标语言的词条
- 点「编辑词条」打开编辑器：行内增删改、搜索过滤、重复词警示，超过 50 条自动分页
- **TSV 批量导入/导出**：每行「原文词 ⇥ 译法」（制表符分隔），可从 Excel / 表格软件直接复制；可选第 3 列填目标语言代码（如 `zh`、`ja`），一个文件即可导入多语言术语
- 支持多套术语表**预设**（如按剧名 / 项目名建库），新建、重命名、删除、随设置导入导出

**如何生效**（多层保障）：

1. **LLM 服务**：只把当前文本实际命中的词条注入系统提示词（不会把几百条术语全塞进每个请求浪费 token）
2. **Qwen-MT**：走官方原生 `translation_options.terms` 参数，模型直接按术语翻译，最可靠
3. **违规重试**：LLM 译文若没有采用指定译法，会自动用加强版指令对违规行单独重译一次，并保留违规更少的版本
4. **译后兜底替换**：任何服务下，译文中残留的原文词都会按词条替换（拉丁词带词边界、CJK 子串匹配、长词优先），确保术语最终一定生效

**支持范围**：所有 LLM 服务 + Qwen-MT。纯 MT 接口（GTX、Google、DeepL(X)、Azure、TranslateGemma、MiLMMT）没有模型内术语通道，不显示术语表卡片。

**匹配规则**：匹配时不区分大小写（`AI` / `ai` 都命中）；术语表数据保存在浏览器本地，不会上传。

### 长文本与并发优化

针对大文档与批量任务做了专门优化：

- **并发控制**：可自定义请求速率，付费 API 跑满额度，免费 API 限流保护不被封
- **大文件支持**：流式分块处理，超大文档不卡顿
- **上下文关联翻译**：字幕与文档翻译会带上下文一起发给 AI，保证剧情/章节连贯
- **失败行单独重试**：批次内出错的行单独标记，整批跑完后重试出错部分，不阻塞整体

### 失败行重发

LLM 偶尔会因格式输出错误、漏行、空响应导致部分内容翻译失败。这种情况下：

- 失败的行会自动**回填原文**——不会留空，保证整份翻译可用
- 结果区顶部出现红色提示，告诉你"N 行失败"
- 点击 **「重试失败行」** 仅对失败的行重新请求，已完成的内容保持不变、不重复扣费
- 也可以一键复制失败原文，粘到其他工具人工处理

**多语言批量场景**：一次翻译成多种语言时，如果某种目标语言整体失败（配额耗尽、模型拒答等），失败的语言代码会聚合到独立面板，可以一键复制粘回"目标语言"字段重试。

> 网络抖动、429 限流、5xx 错误会自动重试；API Key 错、超时、context length 超限、max_tokens 截断不会重试。详见 [FAQ → 翻译失败会自动重试吗](/guide/translation/faq.md#翻译失败会自动重试吗哪些错误不重试)。

### 取消翻译与运行中锁定

翻译进行中，结果区上方是一条**内联进度条**（已处理行数 / 总行数、当前语言、当前文件），右侧就是**取消**按钮：

- 取消**1 秒内落定**，进度条转为「已停止」，不会一走了之
- 已完成的行都已写进缓存，下次点「翻译」直接从断点继续、不重复扣费——**缓存就是断点**
- **运行中设置与输入一律锁定**：语言、Provider、prompt、导出格式、高级项、上传区、源文本框在跑的时候都改不动。整条翻译链跑在你点「翻译」那一刻的快照上：运行中改设置结构上不会对本轮生效（控件却会翻转，界面等于在撒谎），运行中换文件或改源文本则**真的会坏结果**（会清掉正在写的译文产物，或让导出变成"新源文配旧译文"）。想改先取消——代价已经压到近乎为零
- **只读动作不锁**：提取纯文本、复制、导出随时可用

### RTL 语言自动适配

阿拉伯语、希伯来语、波斯语、乌尔都语等从右向左书写的语言，文本框和结果区会自动切换到 RTL 显示，无需额外配置。书写方向是**逐行判定**的：一份中英夹阿拉伯语的文件，每一行各按自己的首个强方向字符排版，不会因为整块被判成 LTR 而让阿拉伯语行的标点跑到错误的一侧。

导出双语 ASS 时，波斯语 fa、乌尔都语 ur、普什图语 ps、达里语 prs、索拉尼库尔德语 ckb、维吾尔语 ug 都已按阿拉伯字母登记，与中文配对时不会被指派成没有阿拉伯字形的中文字体（那会导出一屏豆腐块）；希伯来语单独成一类。ASS 样式抽屉的预览也会按目标文字系统显示对应语种的示例句。

***

## 使用模式

### 批量 vs 单文件

工具会根据上传内容自动切换：

- **批量模式**（默认）：拖入多个文件，自动排队处理，完成后打包下载。
- **单文件模式**：上传单文件或直接粘贴文本，可逐行预览校对、编辑修改。

也可以在高级设置中手动锁定到单文件模式，方便校对。

:::tip 提示
JSON Translate 仅支持单文件模式。
:::

### 一键交换源/目标语言

源语言和目标语言下拉框中间有一个 **⇄** 按钮，点击即可互换。源语言为"自动检测"或开启了多语言模式时按钮会变灰——这两种情况下不能互换。

### 语言选择器

所有目标语言按地理 + 使用人数分组（常用 / 欧洲 / 中东 / 中亚 / 南亚 / 东南亚 / 非洲 / 美洲与大洋洲），便于快速定位。多语言模式还提供 4 个快速预设按钮，一键合并选择：

- **全球 Top 10**：英、中、西、法、日、葡、德、俄、印地、阿拉伯——使用人数最多的 10 种
- **欧洲主流**：法、德、意、西、葡、荷、波等欧洲商用主要语言
- **东亚**：中（简）、中（繁）、日、韩、粤语
- **印度次大陆**：印地、孟加拉、泰米尔、马拉地、古吉拉特等

单语言场景下还会记忆你最近选过的语言（最多 5 个），下次访问时显示在下拉顶部的"最近"分组。移动端自动切换为单列布局。

### API 连接状态

主页面顶部以徽章形式展示当前所选 API 的连接状态：

- **未配置 / 需配置**：URL 或 API Key 还没填
- **已填写**：信息齐全但还没测试
- **测试中** → **✓ 已连接** 或 **连接失败**：测试结果
- **Free API**：免费且不需要配置的服务（GTX / Edge / DeepLX）

点击徽章可以快速跳到 API 设置页。

### 配置预设：API、Prompt、术语表分开管理

工具把 API 配置、Prompt 和术语表拆成三套独立的预设，互不干扰：

- **API 预设**：保存当前服务的 URL、Key、模型、温度等。适合在本地 Ollama、远程网关、付费云端之间切换。
- **Prompt 预设**：保存系统提示词和用户提示词。可以在"严谨术语"和"自由意译"两套提示词之间快速切换，不影响 API 配置。
- **术语表预设**：按剧名 / 项目名维护多套译名词库，详见上文 [术语表](#术语表glossary)。

三类预设都支持新建、加载、重命名、更新和删除，并随设置一同导入导出。

### 翻译后处理

翻译完成后可自动执行简单的字符串清理：

- **字符过滤**：移除字幕里的 `♪ ♫` 等多余符号
- **格式修正**：去掉冗余 HTML 标签

:::tip 提示
该功能仅做简单字符串替换，不支持 `\n`、`\t` 等转义字符。需要复杂处理请用文本分割工具。
:::

### 导出到指定目录

导出默认进浏览器的下载目录。支持 File System Access API 的浏览器（Chrome / Edge）可以在结果区点「**导出目录**」选一个文件夹，此后所有导出直接落进那里；点「**恢复为下载目录**」改回默认。

- 浏览器不允许把「桌面 / 文档 / 下载」这些用户目录本身选为导出目录，请选它们的子文件夹或任意其他文件夹
- Firefox / Safari 没有这个接口，按钮不会出现，导出照旧走默认下载目录

***

## 高级设置

### 设置导入/导出

一键备份所有配置（API 凭据、模型参数、API 预设、Prompt 预设、术语表），生成的 JSON 可跨设备导入，方便团队共享或换电脑迁移。

### 通用翻译选项

- **使用缓存**：默认开启。参数一致时直接读缓存。调试时可临时关闭。
- **重试次数**：请求失败时的最大重试次数。网络不稳或免费接口易限流时可以调高。
- **超时时间**：单次请求超时阈值（秒）。AI 模型慢或长文本多时可以调大。「测试连接」按钮也使用同一阈值——测试不会比正式翻译更严格。
- **最大输出 tokens（仅 Custom OpenAI-compatible）**：可选的输出封顶，主要用于防止本地小模型陷入重复输出循环，建议本地模型设 2048–4096。默认 0（不限制）。响应若被截断（`finish_reason=length`）会标为失败但不会重试。其他云端 LLM 用各自服务端的默认上限，不暴露此控件。
- **翻译后移除字符**：在结果中自动移除指定字符或片段（如字幕里的 `♪`、多余的 `<i>` 标签）。
- **自定义导出文件名**：默认 `{name}.{ext}` —— 单语言导出保持原文件名，干净不啰嗦；一次翻译成多种语言时，若模板里没有 `{lang}`，工具会自动在扩展名前补 `_{lang}`，避免多语言结果互相覆盖。支持占位符 `{name}`（原文件名）、`{lang}`（目标语言）、`{ext}`（扩展名）、`{date}`（本地日历日 YYYY-MM-DD）、`{time}`（HHMMss）。想固定带语言后缀，写成 `{name}_{lang}.{ext}` 即可；也可用 `{name}_{lang}_{date}.{ext}` 这类组合。

### API 参数调优

#### 分块大小

非 LLM 接口（Google / Azure 等）会把长文本切成小块发送。**分块大小**就是每块的字符上限。常见接口的官方限制：

| 接口                   | 单次最大字符  |
| -------------------- | ------- |
| DeepL API            | 128,000 |
| DeepLX Free          | 1,000   |
| Azure Translate      | 10,000  |
| Google Translate Web | 5,000   |
| Google Cloud API     | 30,000  |

> ⚠️ Google Translate 网页版会破坏换行符，因此未启用分块。

#### 延迟（毫秒）

每两次分块请求之间的等待时间。网络较差或用免费 API 时建议加大。例如用 Azure Translate 免费版，建议设到 **5000 ms** 以上。

#### 并发行数

同时翻译的最大行数。**默认值已按服务调好**——免费 API 跑得快，付费 API 默认稳。觉得慢就调大，遇到 429 限流就调小，一般不用动。


各服务默认值（参考）

- GTX (Free)：整批分块翻译（约 5000 字符/块），不走逐行并发
- Edge (Free)：100
- 商用 MT（Google / Azure / DeepL）：20-100
- 云端 LLM（Claude / Gemini / OpenAI / Qwen 等）：20
- Custom 本地 LLM / TranslateGemma / MiLMMT / DeepLX：10

#### 上下文并发数

- **默认值**：3（部分接口为 1）
- **作用**：开启上下文翻译时，每次发给模型的"待翻译目标行数"。每个请求会带上下文一起发。
- **建议**：值越大单次吞吐越高，但模型同时输出多行容易格式错乱；值越小越稳，请求数也多。文档/字幕保持 3，普通文本可调到 5。

#### 上下文行数

AI 翻译时随每批送给模型的"前后文"行数——越大越连贯，但请求也越重。**默认值已调好**，一般不用动。遇到 "context length exceeded" 就调小；想要更好的对话连贯性可适当调大。


各服务默认值（参考）

- 云端 LLM（Claude / Gemini / Nvidia / Azure OpenAI 等）：50
- Custom 本地 LLM：30（14B 以下小模型在长 batch 里容易漏行，所以默认值更小）
早期版本云端 LLM 默认 100，实测过长的上下文反而更容易诱发"模型把上下文里的句子当成待译内容"的串行错位，故下调为 50。
