> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siliconflow.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# translate.js

> 更新日期：2025年5月19日

## 简介

[translate.js](https://gitee.com/mail_osc/translate) 是面向前端开发者的 AI i18n
专注于多语言切换能力，两行 js 实现 html 全自动翻译，百多语种一键切换，无需改动页面、无语言配置文件、支持[几十个微调扩展指令](https://gitee.com/mail_osc/translate)，满足你的一切个性化需求、对 SEO 友好。
采用 MIT 协议进行开源: [GitHub](https://github.com/xnx3/translate) | [Gitee](https://gitee.com/mail_osc/translate) ，完全免费开放并允许商业使用。

本文将详细介绍依靠 [硅基流动](https://cloud.siliconflow.cn/i/64MyJQtM) 提供的 API 服务，让你的网站支持上百语种切换。

<Frame>
  <img src="https://mintcdn.com/siliconflow-37161621/UqUJOFStcdxx_EUK/images/usercases/translate-js/html_demo.gif?s=f85fe4386ef7364e03eaff7156965557" width="800" height="348" data-path="images/usercases/translate-js/html_demo.gif" />
</Frame>

## 模型优化

提到翻译，可能你第一时间想到的这种情景：输入框输入一段文字，后面跟上一句 ： 帮我翻译为 xxx 语言 ，它并不是这样的。

大模型有比传统机器翻译更好的译文质量，但稳定可靠的结果输出是线上场景是必须要具备的，它对大(小)模型在文本翻译领域的实际应用场景应用使用进行了深度调优及多重自检修复，以达到稳定可用的能力。展开聊聊见 [这里](https://e.gitee.com/leimingyun/doc/share/6d69716d52be98f0/?sub_id=14253611#%E6%A8%A1%E5%9E%8B%E4%BC%98%E5%8C%96)。

简单来说，就是可以通过 [SiliconFlow](https://cloud.siliconflow.cn/i/64MyJQtM) ，来对各种不规则的句子、多语种混合的句子、前后各种不通顺的句子进行翻译，进行翻译，质量比传统文本翻译的阅读通顺度跟高，同时还能达到传统文本翻译的极速响应。

## 快速使用

您无需做任何前提准备，各种注册等，只需加入几行 js 就能完成

### 代码

只需在你原本的 html**底部**增加以下代码，即可完成接入

```
<script src="https://cdn.staticfile.net/translate.js/3.15.6/translate.min.js"></script>
<script>
translate.service.use('siliconflow'); //设置采用硅基流动的翻译通道
translate.execute(); //触发翻译
</script>
```

### 说明

只需要 js 加入 `translate.service.use('siliconflow');` 即可使用 [硅基流动](https://cloud.siliconflow.cn/i/64MyJQtM) 免费的 qwen3-8b 模型来进行翻译，我们已对硅基流动进行了深度集成，所以你无需其他任何设置。

translate.js由 [指点云](https://www.zhidianyun.cn/?i125cc1) 提供服务器赞助支持，将大模型转化为文本翻译 API 并开放给 translate.js 进行使用，亚、欧、美洲等都有网络节点以支持全球范围的网络使用畅通。
如果您接入时遇到困难，可[点此反馈求助](https://gitee.com/mail_osc/translate/issues)，或加 QQ 群（1034085260）向作者求助。

### 微调指令

translate.js 有极其丰富的扩展指令，让你可以对它进行各种精准控制，满足各种难缠客户的各种脑洞要求。（如果满足不了，可通过上方 QQ 群提出来我们加） 比如：
[切换语言select选择框的位置、CSS美化、是否出现、显示的语种等](https://translate.zvo.cn/41541.html)、[设置默认翻译为什么语种进行显示](http://translate.zvo.cn/4071.html)、[自定义翻译术语](http://translate.zvo.cn/41555.html)、[翻译完后自动触发执行](http://translate.zvo.cn/4069.html)、[指定私有部署的翻译服务接口](http://translate.zvo.cn/4068.html)、[监控页面动态渲染的文本进行自动翻译](http://translate.zvo.cn/4067.html)、[自动切换为用户所使用的语种](http://translate.zvo.cn/4065.html)、[用js控制主动进行语言切换](http://translate.zvo.cn/4064.html)、[只翻译指定的元素](http://translate.zvo.cn/4063.html)、[翻译时忽略指定的元素](http://translate.zvo.cn/4061.html)、[翻译时忽略指定的文字不翻译](http://translate.zvo.cn/283381.html)、[对网页中图片进行翻译](http://translate.zvo.cn/4055.html)、[鼠标划词翻译](http://translate.zvo.cn/4072.html)、[网页ajax请求触发自动翻译](http://translate.zvo.cn/4086.html)、[设置只对指定语种进行翻译](http://translate.zvo.cn/4085.html)、[对指定标签的属性进行翻译](http://translate.zvo.cn/231504.html) ……

更多指令及其说明可 [点此查看](https://gitee.com/mail_osc/translate).

## 使用 SiliconFlow 实现私有部署

您可以注册 [SiliconFlow](https://cloud.siliconflow.cn/i/64MyJQtM)  自己的账号，然后私有部署此服务，来进行更多设定，极大提升使用体验。

### 优势

* **翻译质量**：你可以对接 [硅基流动](https://cloud.siliconflow.cn/i/64MyJQtM) 更大尺寸的模型，比如 qwen3-32B，让翻译语句更通顺，拥有极高的阅读体验。
* **极速响应**：可开启 [内存缓存](https://translate.zvo.cn/391130.html) 来极大提高文本翻译 API 的响应速度
* **用量限制**：可针对某个域名（或者开通 API 接口的 key）来设定它的 [用量限制](https://translate.zvo.cn/391130.html) ，如果你是网络公司，你可以以套餐的形式卖给使用用户。
* **管理接口**：可以通过开放的 [管理 API 接口](https://doc.zvo.cn/translate.service/20250312/admin.getCache.json.html) ，来实时获取当前有哪些域名(或 key)在使用、翻译的字符数有多少、等等。
* **数据隐私**：接口请求、缓存数据等完全都在自己的服务器上，数据隐私无需担忧。
* **并发控制**：可自由定义每秒的[并发请求上限](https://translate.zvo.cn/413975.html)，以及调用大模型进行翻译时[请求线程池](https://translate.zvo.cn/391753.html)的线程上限，以极大缩减接口等待的耗时。另还可以通过管理接口实时获取当前请求线程池的并发数等

### 部署

#### 1. 服务器规格

* **CPU** ：1 核
* **架构** ：x86\_64 （也就是 Intel 的 CPU ）
* **内存** ：1G
* **操作系统** ：
  1. CentOS 7.4 (这个版本没有可选 7.6 、7.2 等，7.x 系列的都可以)
  2. openEulor 20 (如果没有 20 版本那就选 22 版本)
* **系统盘** ：默认的系统盘即可，无需数据盘
* **弹性公网 IP** ：按流量计费（带宽大小 10MB。如果是个人使用，翻译的量不大，完全可以选 1MB 带宽）
* **所在区域** : 选国内，这样请求硅基流动接口就会更快。

  其他没提到的，都按照便宜的来即可。

#### 2. 一键部署

执行以下 shell 命令进行一键部署：

```
yum -y install wget && wget https://raw.githubusercontent.com/xnx3/translate/refs/heads/master/deploy/service.sh -O ~/install.sh && chmod -R 777 ~/install.sh && sh ~/install.sh
```

#### 3. 获取 API 密钥

1. 进入 [硅基流动](https://cloud.siliconflow.cn/i/64MyJQtM) 注册账号
2. 在控制台的左侧，找到 **账户管理** 下的 **API 密钥** ，点开，去新建一个即可。

<Frame>
  <img src="https://mintcdn.com/siliconflow-37161621/UqUJOFStcdxx_EUK/images/usercases/translate-js/1.webp?fit=max&auto=format&n=UqUJOFStcdxx_EUK&q=85&s=e5c34f3c3f48a4d4ab7af5ccf0748df5" width="1195" height="746" data-path="images/usercases/translate-js/1.webp" />
</Frame>

#### 4. 配置 API 密钥

首先，找到配置文件 /mnt/service/config.properties 编辑它，找到

```
translate.service.leimingyun.domain=http://api.translate.zvo.cn
```

这个，将它注释掉（这个是默认体验的），然后增加以下配置：

```
# 这个url固定填写，无需改动
translate.service.openai.url=https://api.siliconflow.cn/v1/chat/completions
# 使用哪个大模型。比如你这里可以填写 Qwen/Qwen3-32B ， 具体模型可以通过 https://cloud.siliconflow.cn/models 获得
translate.service.openai.model=Qwen/Qwen3-32B
#  硅基流动的 API 密钥，你上一步获取到的，填到这里
translate.service.openai.key=sk-kqpnpfhlikgacrmdab2946d28eb00ede7acd9b3axfiIadf4P81
# 进行大模型API调用线程池的程数。不懂可设置100即可。此参数的具体说明可参考 http://translate.zvo.cn/396728.html
translate.service.thread.number=100
```

当然，还有更多的配置方式可以解锁更高的能力，这些刚部署初期你可以忽略，熟悉了可以研究：

* [翻译精准度效验及自动修复](https://translate.zvo.cn/411064.html)
* [配置多翻译通道支持的语种分流策略](https://translate.zvo.cn/426176.html)
* [配置翻译API接口的流量控制](https://translate.zvo.cn/413975.html)
* [配置备用翻译通道](https://translate.zvo.cn/404947.html)
* ...

#### 5. 重启项目

操作完毕后，重启 translate.service 服务，执行重启命令 :

```
/mnt/service/start.sh
```

#### 6. 访问测试

直接访问你的服务器 ip，即可看到效果：

<Frame>
  <img src="https://mintcdn.com/siliconflow-37161621/UqUJOFStcdxx_EUK/images/usercases/translate-js/2.webp?fit=max&auto=format&n=UqUJOFStcdxx_EUK&q=85&s=0f760b545c9c4966a9d918abbc19aae3" width="341" height="185" data-path="images/usercases/translate-js/2.webp" />
</Frame>

随便选个语种切换一下试试，切换后“你好，世界”能被翻译，说明已接入成功，可以正常使用了。

### 使用

#### 文本翻译 API 接口

它以 [硅基流动](https://cloud.siliconflow.cn/i/64MyJQtM)  平台的大模型算力作为基础支撑，通过 [translate.service](https://gitee.com/mail_osc/translate) 作为中间调度。
你完全不需要去了解 大模型 是什么以及怎么使用，给你暴露出标准的API翻译接口进行使用。

**请求 URL** ：[http://你的服务器 ip/translate.json](http://api.zvo.cn/translate/service/20230807/translate.json.html)
**请求方式** ：POST
**请求方式** ：POST
**请求参数** ：

* **to** 将文本翻译为什么语种。可传入如 english 更多语种可访问 [http://你服务器的 ip/language.json](http://api.zvo.cn/translate/service/20230807/language.json.html) 就能看到
* **text** 需要翻译的语言。格式如 `["你好","世界"]` 它是 json 数组格式，支持一次翻译多个不同的文本，每个文本可以分别是不同的语言。
  **响应示例** ：
  `{"result":1,"info":"success","to":"english","text":["Hello","World"]}`

注意，header 头的 Content-Type 要么不设置，如果设置的话值是 application/x-www-form-urlencoded

**curl 翻译示例：**

为了方便理解上面的 API 接口使用，这里给出了一个 curl 请求的示例，另外这个示例你也可以直接复制就能运行使用，看到效果

```
curl --request POST \
  --url https://siliconflow.zvo.cn/translate.json \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data to=english \
  --data 'text=["你好，世界","让我们探索星辰大海"]'
```

它是开放的，你不需要再去买高额的文本翻译了，硅基流动给你提供免费的，翻译通顺度还更高！
[可点此查看有关文本翻译API接口的详细文档](http://api.zvo.cn/translate/service/20230807/translate.json.html)

#### 网页多语言切换

使用方式为，在网页最末尾，html 结束之前，加入以下代码，一般在页面的最底部就出现了选择语言的 select 切换标签，你可以点击切换语言试试切换效果

```
<script src="https://cdn.staticfile.net/translate.js/3.15.6/translate.min.js"></script>
<script>
translate.service.use('translate.service'); //设置采用私有部署的翻译通道，相关说明参考 https://translate.zvo.cn/4081.html
translate.request.api.host='http://121.121.121.121/'; //将这里面的ip地址换成你服务器的ip，注意开头，及结尾还有个 / 别拉下
translate.execute();//进行翻译 
</script>
```

如此，翻译请求接口就会走您自己服务器了。有关这个手动指定翻译接口的详细说明，可参考： [http://translate.zvo.cn/4068.html](https://gitee.com/link?target=http%3A%2F%2Ftranslate.zvo.cn%2F4068.html)

另外 translate.js 这个 js 文件你可以自己下载下来放到你自己项目里使用，它没有任何别的依赖，是标准的原生 JavaScript 。而且 translate.js 是完全开源的，你可以从 [https://raw.githubusercontent.com/xnx3/translate/refs/heads/master/translate.js/translate.js](https://gitee.com/link?target=https%3A%2F%2Fraw.githubusercontent.com%2Fxnx3%2Ftranslate%2Frefs%2Fheads%2Fmaster%2Ftranslate.js%2Ftranslate.js) 下载最新的 js，放到你项目里进行使用。

他的原理是直接扫描你网页的 dom 元素进行自动分析识别，然后将文本集中化进行翻译。也就是你要讲这个 translate.execute(); 这行要放在最底部，就是因为上面的渲染完了在执行它，可以直接触发整个页面的翻译。

### 日志查看

你可以从服务器中查看相关日志情况。
日志存放于 /mnt/service/logs/ 目录下

#### 文本翻译日志

openai\_yyyy-MM-dd.log 是硅基流动通过openai接口调用大模型进行文本翻译的日志

比如： `openai_2025-05-17.log`
yyyy-MM-dd 是当前的年月日，它按照日期每天都会创建一个日志文件。
它记录了你所有文本翻译的原文、译文、进行时间、翻译结果审查得分、是否启用了修复机制 等
它每行都是一个文本翻译记录。
示例：

```
{"time":"00:40:59","originalText":"按钮切换语言:","resultText":"Button switch language:","to":"english","useTime":583,"score":96}
{"time":"00:40:59","originalText":"语言切换示例：","resultText":"Language Switching Example:","to":"english","useTime":482,"score":96}
{"time":"00:40:59","originalText":"你好","resultText":"Hello","to":"english","useTime":546,"score":96}
```

* **time** 发生时间
* **originalText** 翻译的原文
* **resultText** 翻译的译文
* **to** 翻译为什么语种
* **score** 对译文进行校验后的打分。 1\~100 分，分数越高表示翻译越精准
* **useTime** 当前使用[SiliconFlow](https://cloud.siliconflow.cn/i/64MyJQtM)翻译的耗时，单位是毫秒

#### 系统运行日志

translate.service.log 是系统运行日志，它存放 translate.service 本身的运行情况的日志

#### 访问请求日志

request\_yyyy-MM-dd.log 是进行翻译请求（/translate.json）的请求日志。\
它并不是你访问后它就会立即产生日志，而是它有一个日志缓冲，比如当日志达到几百条、或者距离上次将其保存到日志文件超过 2 分钟，它才会进行将日志信息打包写入到日志文件中。
这里列出其中两条示例：

```
{"method":"translate.json","size":4,"ip":"192.168.31.95","domain":"192.168.31.95","memoryCacheHitsSize":5,"time":"2025-03-19 10:22:56","memoryCacheHitsNumber":1,"to":"english"}
{"fileCache":"1845bbcbd9e600fab184b346d82042a9_english.txt","method":"translate.json","size":4,"ip":"192.168.31.95","domain":"192.168.31.95","time":"2025-03-19 10:26:56","to":"english"}
```

* **method** 当前请求的是哪个接口。比如 translate.json 则是请求的文本翻译 API 接口； language.json 则是请求的获取当前所支持的语言列表接口
* **fileCache** 针对 translate.json 翻译接口的请求，如果有命中文件缓存，则有这个参数，其值是 文件缓存的名字，它是在 `/mnt/service/cache/` 内的
* **originalSize** 针对 translate.json 翻译接口的请求，记录当前翻译的字符数（原文的字符数，非译文）
* **size** 针对 translate.json 翻译接口的请求，记录当前翻译的字符数（译文的字符数，非原文）
* **ip** 请求来源的 ip
* **domain** 针对 translate.json 翻译接口的请求，如果是网站使用了 translate.js ，那这个则是这个网站的域名（它是自动获取到的）
* **time** 触发的时间
* **to** 针对 translate.json 翻译接口的请求，翻译为什么语种
* **key** 针对 translate.json 翻译接口的请求，如果是你给对方通过 domain.json 配置设置的文本翻译 key，那这个就是记录的 key。
* **memoryCacheHitsNumber** 针对 translate.json 翻译接口的请求，如果有命中内存缓存，这里是记录命中内存缓存的条数（translate.json 支持同时翻译多条）
* **memoryCacheHitsSize** 针对 translate.json 翻译接口的请求，如果有命中内存缓存，这里是记录命中内存缓存的字符数（译文的字符数，非原文）
