[TOC]
## 当用户点击切换语言时触发
当用户点击切换语言时,立即触发,然后再进行切换语言。
点击切换语言后,实际触发的是 ````translate.changeLanguage('english');```` 这里便是在调用它后,立即触发,触发完成后再执行原本的语言切换。
设置方式:
````
translate.lifecycle.changeLanguage.push(function(to){
});
````
* **to** 翻译为的语种,如 japanese
这里需要注意的是,如果当前是第一次切换语言,那么它会直接将当前原文翻译进行切换,这期间并不会刷新页面;
而切换了一次后,再进行一次切换其他语言时,他会触发刷新页面,这时也就是先触发 ````translate.lifecycle.changeLanguage```` 设置的,然后再刷新页面。 [有关为什么第二次切换语言会刷新页面的解释,可点此查看](4035.html)
## 当执行翻译时触发
当执行 ````translate.execute();```` 之后,它会进行一下操作:
1. 进行一些初始化及检测,如果不达标则直接终止不做任何处理,同时也不会触发任何下面的事件。
1. 进行图片翻译
1. 对要翻译的区域的所有节点进行扫描,识别出需要进行翻译的文本,进行收集分析,加入待翻译的文本队列
1. 对待翻译的文本队列中的翻译文本进行本地浏览器缓存命中处理,如果本地缓存全部命中了,那也就没有后面的网络请求什么事了
1. 对本地浏览器缓存命中之后,没有被缓存命中,未进行翻译的文本,进行通过请求网络接口的方式进行翻译处理,发起网络请求,将要翻译的文本发送到翻译服务进行翻译,等待拿到翻译结果后,进行翻译。(这个会产生 50ms ~ 10s 的时间差,也是造成视觉上翻译速度快慢的最根本原因)
1. 完毕
以下提供的几个针对其生命周期中的某个特定点,提供监控及主动触发你自定义的方法,来做一些事情。
#### 翻译开始
每当触发执行 translate.execute() 时,会先进行当前是否可以正常进行翻译的判定,比如 当前语种是否就已经是翻译之后的语种了是否没必要翻译了等。(这些初始判定可以理解成它的耗时小于1毫秒,几乎没有耗时)
经过初始的判断后,发现允许被翻译,那么在向后执行之前,先触发此。
也就是在进行翻译之前,触发此。
设置方式:
````
translate.lifecycle.execute.start.push(function(data){
console.log(data.uuid);
});
````
* **uuid** translate.nodeQueue[uuid] 这里的唯一标识,每次执行 translate.execute() 时都会创建一个针对此的uuid唯一标识
* **to** 翻译为的语种,如 japanese
**扩展用法 - 当用户打开页面后,第一次触发 translate.execute() 时,进行触发**
````
translate.lifecycle.execute.start.push(function(data){
if(translate.executeNumber === 0){
console.log('这是打开页面后,第一次触发 translate.execute() ,因为translate.executeNumber 记录的是translate.execute() 执行完的次数。');
}
});
````
#### 发起网络请求前
每当触发执行翻译动作 translate.execute() 时,当缓存中未发现,需要请求翻译API进行翻译时,在发送API请求前,触发此
````
translate.lifecycle.execute.translateNetworkBefore.push(function(data){
console.log(data.uuid);
});
````
* **uuid** translate.nodeQueue[uuid] 这里的唯一标识,每次执行 translate.execute() 时都会创建一个针对此的uuid唯一标识
* **from** 来源语种,翻译前的语种,如 english
* **to** 翻译为的语种,如 japanese
* **texts** 要翻译的文本,它是一个数组形态,是要进行通过API翻译接口进行翻译的文本,格式如 ````['你好','世界']````
* **nodes** 要翻译的文本的node集合,也就是有哪些node中的文本参与了 通过API接口进行翻译文本,这里是这些node。 格式如 [node1, node2, ...]
#### 发起网络请求后
每当触发执行翻译动作 translate.execute() 时,当缓存中未发现,需要请求翻译API进行翻译时,在发送API请求后,也就是拿到 API响应、或网络请求失败后,立即触发此
````
translate.lifecycle.execute.translateNetworkAfter.push(function(data){
console.log(data.uuid);
});
````
* **uuid** translate.nodeQueue[uuid] 这里的唯一标识,每次执行 translate.execute() 时都会创建一个针对此的uuid唯一标识
* **from** 来源语种,翻译前的语种,如 english
* **to** 翻译为的语种,如 japanese
* **texts** 要翻译的文本,它是一个数组形态,是要进行通过API翻译接口进行翻译的文本,格式如 ````['你好','世界']````
* **nodes** 要翻译的文本的node集合,也就是有哪些node中的文本参与了 通过API接口进行翻译文本,这里是这些node。 格式如 [node1, node2, ...]
* **result** 本次网络请求的结果, 1成功, 0失败。 网络不通,翻译结果失败(translate.json返回result非1)都是记入0
* **info** 如果result为0,这里是失败信息
**说明**:
1. 不管网络请求是否成功,它都会被触发
1. 不管翻译结果是否成功,它都会被触发
1. 在网络请求完毕后立即触发,不会再有其他时间损耗。也就是它是在网络请求完毕后,渲染UI页之前就会被触发。
#### 翻译完成
translate.execute() 的翻译渲染完毕触发。
这个完毕是指它当触发 translate.execute() 进行翻译后,无论是全部命中了本地缓存,还是有部分要通过翻译接口发起多个网络请求,当拿到结果(缓存中的翻译结果或多个不同的有xx语种翻译的网络请求全部完成,这个完成是包含所有成功跟失败的响应),并完成将翻译结果渲染到页面中进行显示后,触发此
它跟 translateNetworkFinish 的区别是, translateNetworkFinish 仅仅针对有网络请求的才会触发,而 renderFinish 是无论何种情况,只要 translate.execute() 执行完毕都会触发。比如全部命中了浏览器本地缓存,无需发起任何网络翻译请求这种情况时,也会触发。
````
translate.lifecycle.execute.renderFinish.push(function(uuid, to){
});
````
* **uuid** translate.nodeQueue[uuid] 这里的唯一标识,每次执行 translate.execute() 时都会创建一个针对此的uuid唯一标识
* **to** 翻译为的语种,如 japanese
**实际使用场景示例:**
比如,我有一个中文网站,翻译为英文浏览时,要做到完全不显示中文的文字内容,不出现先显示中文然后瞬间在显示英文的情况。
**操作方式:**
首先,在原本中文网站加载后,先用CSS显示一个遮罩层,将原本显示中文的部分遮罩起来,在遮罩层上,用英文显示一个提示信息,比如 ````
loading...
````
然后在 ````translate.execute();```` 的前面,增加一个翻译完成的监控,以便在翻译完成后,来触发将 loading... 给隐藏掉 :
````
translate.lifecycle.execute.renderFinish.push(function(uuid, to){
document.getElementById('load').style.display='none';
});
````
这样就实现了打开网页后,先在页面的中文上面出现个英文提示 loading... 给用户一个友好的提示,当翻译执行完毕后(页面的中文已经改成了英文)将 ````
```` 这个id元素隐藏,将loading... 的提示隐藏,将英文的页面显示出来。
**其实这个示例就仅仅只是一个示例,你如果想要达到完全不显示源语言文字的效果,可以参考 [网页打开时自动隐藏文字,翻译完成后显示译文](549731.html) 这里有现成的功能可以直接拿来达到这个效果。**
#### 执行结束
每当 translate.execute() 执行结束、中止、自检不通过跳出 ... 等,都会触发这个。
注意,不管在 translate.execute() 是否自检通过、不管是否进行了翻译、不管文本翻译API接口是否拿到翻译结果,只要 translate.execute 执行完毕或触发了什么自检不通过不再往下执行,都会触发这个。
这个仅仅只是用于 translate.execute() 从上而下执行完跳出时,进行触发的。
````
translate.lifecycle.execute.finally.push(function(data){
console.log(data.uuid);
});
````
data 参数:
* **uuid** translate.nodeQueue[uuid] 这里的唯一标识,每次执行 translate.execute() 时都会创建一个针对此的uuid唯一标识。如果当前没有进行正常翻译,比如自检失败不在执行跳出了,那这个将会返回空字符串 ''
* **to** 翻译为的语种,如 japanese。 如果当前没有进行正常翻译,比如自检失败不在执行跳出了,那这个将会返回空字符串 ''
* **state** 是何种状态执行结束的。整数型,取值有:
* **1** 当前翻译未完结,新翻译任务已加入等待翻译队列,待上个翻译任务结束后便会执行当前翻译任务
* **3** 没有指定翻译目标语言,不翻译
* **5** 本地语种跟要翻译的目标语种一样,且没有启用本地语种也强制翻译,那么当前不需要执行翻译,退出
* **16** 已经匹配完自定义术语跟离线翻译,但是用户设置了不掉翻译接口进行翻译,不在向后执行通过文本翻译接口进行翻译
* **18** 已经匹配完自定义术语跟离线翻译,此时所有要翻译的文本都已经匹配完了,没有在需要通过文本翻译接口进行翻译的了
* **21** 进行通过文本翻译API进行调用接口翻译时,某个语种的数据校验失败导致退出。 这个情况理论上应该不会出现,预留这个情况,后续将会剔除这个状态
* **25** 已通过文本翻译接口发起所有翻译请求,translate.execute 执行完毕。 (只是发起网络请求,不代表翻译完成,因为这里还没有等着拿到网络请求的响应结果,还处于网络请求的过程中)
* **triggerNumber** translate.execute() 方法已经被触发过多少次了, 只要 translate.execute() 被触发,它就会在触发时立即 +1 (translate.execute() 默认是同一时刻只能执行一次,这个触发是在这个同一时刻执行一次的判定之前进行++ 的,如果这个同一时刻执行一次不通过,还有其他在执行,进入排队执行时,这里也会++ ,当从排队的中顺序排到进行执行时,又会执行++ ) 。 当页面打开第一次触发执行translate.execute(),这里便是 1
**注意** 它触发的可能会非常多,比如如果你启用了 [translate.listener.start();](4067.html) 、 [translate.request.listener.start();](4086.html) ... 等,都会自动触发此 translate.execute()
#### 注意
1. 需要 translate.js v3.18.38.20250925 及更高版本
2. 需要设置在 ````translate.execute()```` 前面
3. 这里的监听仅仅针对网页正常翻译,也就是 ````translate.execute()```` 、 ````translate.changeLanguage(...)```` 、以及设置动态监控网页变化、动态监控网络请求后触发的翻译,会触发这里。
但是像是扩展使用如 [translate.request.translateText(...) 手动调用翻译接口执行翻译操作](4077.html) 这个是会对他生效的,它不会触发以上的监听。
默认网络请求的自定义控制
这里针对 translate.js 自带的默认的一些网络请求进行相关控制
比如页面一打开后, translate.js 会自动进行初始化相关接口请求 /init.json ,获取当前支持的语种列表 language.json ,进行多节点测速的 connectTest.json 等,这些如果不想让他发起这些网络请求,将其设置为空字符串即可,如:
````
translate.request.api.language = '';
translate.request.api.ip = '';
translate.request.api.connectTest = '';
translate.request.api.init = '';
translate.request.api.translate = '';
````
如果哪个不想发起网络请求,便将其设置为空字符便可,这样就不会再发起网络请求了。
## 每个请求的解释
#### translate.request.api.language
获取当前翻译服务所支持的语种,支持翻译哪些语种。 这是一个语种列表。
#### translate.request.api.ip
它是配合 [自动切换为用户所使用的语种](4065.html) 来使用的。
自动切换为用户所使用的语种,首先会根据用户本身浏览器默认语种来自动切换,如果某些很小的情况没有获取到,才会触发通过这个接口,来获取用户所在哪个国家,然后根据哪个国家使用哪个语种比较多,来切换为这个语种。
也就是这个接口它实际使用率是很低的,可能有千分之一的几率。
#### translate.request.api.connectTest
translate.js 的自动测速能力,translate.js 支持介入多个独立的网络节点,当用户打开某个网页时,网页中会自动初始化去各个网络节点测速,采用速度最快的可用的网络节点来接入翻译能力。
#### translate.request.api.init
translate.js 启动后的一些初始化,比如判定当前translate.js 的版本号、当前可用的 translate.service 服务等。
当然,多数时候这个请求是并不会对translate.js的使用产生实质性作用的。
#### translate.request.api.translate
如果你的离线翻译缓存没有命中的话,它还是会发起这个翻译的网络请求进行。但是如果你设置了
````
translate.request.api.translate = '';
````
那么即使有需要进行通过后端翻译服务进行翻译的文本,因为设置不允许使用,所以文本也不会通过网络传输进行翻译。
如果你审查元素,查看网络请求一栏,会发现 /translate.json 请求是根本就没有这个请求的。
## 其他场景示例:进行了网络转发,翻译的请求路径完全变了
比如经过API网关或者Nginx 进行网络转发,请求路径完全变了,比如正常翻译的网络请求是:
````
http://12.12.12.12/translate.json
````
但是你经过网络转发后,它的实际请求URL变成了:
````
http://12.12.12.12/fanyi/trans.php
````
这里,可以看到,路径、文件名完全变了,这样需要进行设置:
````
translate.request.api.host = ['http://12.12.12.12/fanyi/']; //设置请求路径,详细可参考 http://translate.zvo.cn/4068.html
translate.request.api.translate = 'trans.php'; //设置请求的url的文件名
````
## 设置不请求language.json时,默认的切换语言下拉框没了
这种场景多数是在一体机的场景,小型一体机,不会再额外去在一体机本身去部署 translate.service 服务,避免产生大的性能消耗。
但是有网环境下,开发时能正常通过语言切换的select切换语言,但是一体机中设置了不发起 language.json 请求,也就不会再返回支持的语种列表, 界面的select切换语言的入口自然也没了, 但是还需要这个进行切换语言,这是可以通过手动指定当前指定的切换语言的形式,来进行设定,比如这个小型一体机设备需要支持中文、韩语两种语言的切换,那么可以这么设置:
````
translate.request.api.language = [{id: "chinese_simplified", name: "简体中文"},{id: "korean", name: "한국어"}];
````
这样它便可以继续出现有网络环境时所正常看到的 select切换语言 了,不过可切换的语言就只有所设置的简体中文、韩语 这两个。
## 注意
1. 需要 translate.js v3.17.8.20250724 及更高版本
1. 使用时,要放在 translate.execute() 前面
重写语种识别策略
这个语种识别,它的影响范围:
1. 你没有设置本地语种,它自动识别你的本地语种是什么
2. 当启用了 [元素整体翻译能力](4078.html) 后,它自动识别你网页中每个元素的内容是什么语种
3. 当使用 [识别字符串语种及分析 translate.language.recognition('xxx')](4083.html)
比如,一个元素中的文本为:
````
使用场景:Can be used to obtain application user access credentials
````
按照我们的正常方式判定,它会被判定为英语。
但是你需要实现这个需求:
如果页面中出现 中英文共存的场景,统一都认为是中文,当切换翻译为英文时,这种中英文共存的元素都要被翻译为英文。
这时需要修改语种识别的策略,修改方式为:
````
/*
语种识别策略
str 要识别的字符串
data 对于str字符串识别的结果,格式如:
{
languageName: 'english',
languageArray:[
english:[
list[
{beforeText: ' ', afterText: ' ', text: 'hello word'},
{beforeText: ' ', afterText: ' ', text: 'who?'},
],
number:12
],
japanese:[
......
]
]
}
有关这里面具体参数的说明,参考 translate.language.recognition 的说明
languagesSize key:语言名, value:语言字符数
allSize 当前所有发现的语种,加起来的总字符数,也就是 languagesSize 遍历所有的value相加的数
最后,要 return data;
*/
translate.language.recognitionAlgorithm(str, data, languagesSize, allSize){
/*
如果简体中文跟英文一起出现,那么认为当前是简体中文
*/
if(typeof(languagesSize['chinese_simplified']) != 'undefined' && typeof(languagesSize['english']) != 'undefined'){
//设置当前识别结果是简体中文
data.languageName = 'chinese_simplified';
}
return data;
}
````
## 注意
1. 需要 translate.js v3.17.2.20250705 及更高版本
1. 这个是为二次开发考虑,进行扩展开发使用的。正常使用翻译这个是用不到的
1. 使用时,要放在 translate.execute() 前面
获取翻译区域显示的原始文本
获取翻译区域的原始文本,翻译前的文本。 这里会把空白符等过滤掉,只返回纯显示的文本
也就是获取 translate.setDocument(...) 定义的翻译区域中,翻译前,要参与翻译的文本。
其中像是 translate.ignore.tag 这种忽略翻译的标签,这里也不会获取的,这里只是获取实际要参与翻译的文本。
````
var text = translate.language.getTranslateAreaText();
````
## 案例
要对 gitee 中的 readme 区域进行提取文本,以便用来判定readme中出现的中文、英文、各种语种的比例。
比如这个页面:

已经设置了只翻译 readme 的区域 :
````
const dom = document.getElementsByTagName('blob-markdown-renderer')
translate.setDocuments(dom);
````
那么执行此
````
translate.language.getTranslateAreaText();
````
控制台可看到:

## 注意
1. 需要 translate.js v3.17.1.20250705 及更高版本
1. 这个是为二次开发考虑,进行扩展开发使用的。正常使用翻译这个是用不到的
翻译排队执行
当网页中执行 ````translate.execute();```` 时,会触发一次对当前页面的扫描并翻译。
但是为了避免有的开发者图省事以比较暴力的方式,比如弄个循环执行的定时器,每间隔1秒执行一次翻译; 又或者代码调用时有错误使用,导致非常频繁的去执行扫描及翻译的情况。
这种极其频繁的执行 ````translate.execute();```` 会造成以下影响:
1. 极大占用浏览器本身的计算资源,如果你页面非常大,可能会使页面出现稍微卡顿情况。
1. 频繁调用后端的翻译接口,如果使用我们开源的翻译接口,会容易触发流控策略被拦截(我们会以为你在非法使用),禁止你使用。
上面两个中,主要是第二个,一旦触发流控,那用户使用时,访问页面,直观的感受就是,页面的文字不翻译了。为了保护我们的开源后端翻译服务接口,也为了更好的兼容你的各种花样的使用方式,所以默认内置了翻译执行的排队能力。
当你同一时间多次触发 ````translate.execute();```` 时,第一次会立即执行扫描并翻译,第二次时会先看看上一次是否执行完毕,如果还未执行完毕,那么第二次并不会立即触发,而是进入一个队列等待阶段,包括第三次、第四次,都会进入排队阶段。 当第一次的执行完毕后,第二次的才会进行扫描并翻译,完事后,第三次、第四次 才会依次触发执行。
这样极大保护了后端翻译接口,同时也能保障你不会被翻译接口的流量控制策略命中被封禁使用,保障使用的稳定。
但是还有一种情况,你私有部署了 [translate.service](391129.html) 并且你也设置了 [访问控制策略](413975.html) 的并发数很大,比如 1秒 100次,完全不用考虑并发太快的情况,而且也只是你自己用,不用担心别人恶意使用,你完全可以将 translate.js 中这个排队等待的策略禁用,只要执行 ````translate.execute();```` 就立即进行翻译,会更好的提高用户体验。
## 设置方式
````
translate.waitingExecute.use = false;
````
默认是true, 当你设置为false时,则是禁用排队等待的能力,触发````translate.execute();````时会立即进行翻译。即使你同一时间连续触发了三次,也会立即执行三次。
注意,此种能力仅仅只是你私有部署,或者你朋友私有部署后给你用时,你可以禁用排队翻译的能力。不然你很容易触发别人的翻译API的访问控制规则,把你给禁止使用。
## 版本
仅限 v3.16 及以上版本
网络请求数据拦截并翻译
当用户触发ajax请求时,它可以针对ajax请求中的某个参数,进行获取,并进行翻译,将翻译后的文本赋予这个参数,然后再放开请求。
1. 它可以针对 xhr、 fetch 方式的网络请求生效。
1. 它可以针对 get、post 方式的请求生效。
## 使用场景
搜索场景,原本是中文的页面,翻译为英文后,给美国人使用,美国人使用时,进行搜索,输入的是英文,然后点击搜索按钮,发起搜索。
然后此会拦截网络请求,将请求中用户输入的搜索文本的内容提取出来,识别它输入的是中文还是英文,如果不是本地的语种中文,那就将其翻译为中文,然后再赋予此请求的这个参数中,然后再放开这次请求。
这样请求真正到达服务端接口时,服务端接受到的搜索的文本内容实际就是翻译后的中文文本,而不是用户输入的英文文本。
## 使用方式
````
translate.network.rules = [
{
url: /https://www.guanleiming.com/a/b/.html/,
methods: ['GET', 'POST'],
params: ['a','b1']
},
{
url: /https://www.guanleiming.com/c/d/.html/,
methods: ['GET'],
params: ['a','b1']
},
];
translate.network.use(); //启用
````
translate.network.rules 设置的是一个规则数组,每个数组有三个参数:
* **url** js的正则表达式形式,如果网络请求的url (不包含get参数部分)跟此匹配,那便会进行翻译。
注意,这个是正则形式,并不是字符串形式!比如你想匹配 ````http://www.guanleiming.com/a.jsp```` 那你可以在浏览器控制台用这个来测试是否匹配:
````/http://www.guanleiming.com/a.jsp/.test('http://www.guanleiming.com/a.jsp')```` 输出true,那便是证明匹配了。

* **methods** 限制网络请求的方式
* **params** 要翻译的参数名,如果这里面出现的参数名有值,那会判断这个值是否需要翻译(参考下面的 自动进行翻译的触发条件),便会自动进行翻译,并将翻译的值赋予当前网络请求,并放行当前网络请求。
因为 translate.network.rules 这是一个数组形态,凡事符合其中任意一个规则,都会触发拦截翻译。
此设置建议放在 ````translate.execute();````的上面。
## 自动进行翻译的触发条件
1. 当前用户有进行切换语言,比如本地语种设置了简体中文,你当前切换为英文进行浏览时。
2. 请求中某个参数的值,其文本语言跟本地语种不一致,比如本地语种是简体中文,而参数的值的文本是英语。
3. 设置的 translate.network.rules 匹配上
这三种情况都满足时,才会进行拦截并翻译这个指定参数的值
## 版本
需要使用 translate.js v3.15.12.20250603 及更高版本
网络请求自定义附加参数
## 追加请求参数
````
translate.request.appendParams = {
key1:'key1',
key2:'key2'
}
````
所有通过 translate.request.send 进行网络请求的(也就是 translate.js 所发起的所有网络请求),都会追加上这个参数。
效果:

## 追加 header 请求头参数
````
translate.request.appendHeaders = {
key1:'key1',
Aauthorization:'Bearer xxxxxxxxxx'
}
````
## 注意
1. translate.js版本需要 v3.15.13 及更高版本
2. 需要放到 translate.execute(); 的前面
对JS对象及代码进行翻译
[TOC]
可对JavaScript 对象、以及 JavaScript 代码进行翻译。
## 在线体验
http://res.wang.market/translate/jsObjectTranslateDemo/demo.html

## 使用示例
#### 对JavaScript代码进行翻译
````
var str = `
{
"hello":"你好",
"word":"单词",
"你是谁": [
"世界",
"大海"
]
}
`;
translate.js.transString(
str,
'english',
function(obj){
console.log(obj);
},
function(failureInfo){
console.log(failureInfo);
}
);
````
#### 对JavaScript对象进行翻译
````
var obj = {
"hello":"你好",
"word":"单词",
"世界":["世界","大海"]
};
translate.js.transObject(
obj,
'english',
function(obj){
console.log(obj);
},
function(failureInfo){
console.log(failureInfo);
}
);
````
## 注意事项
1. client.edge 模式不支持此能力,必须使用 translate.service 模式
2. translate.js 3.15.2 及更高版本才支持
启用翻译中的遮罩层
在执行翻译时,浏览器本地缓存没有,需要走API接口时,这个API接口会有网络延迟,比如有1、2秒延迟的话,然后等翻译API拿到结果后再显示到网页,对用户来说,他看到的就是先出现原语种一两秒,然后又变成了翻译后的文本。
本能力就是解决这个问题,在翻译的这段时间,会在原语种的元素上面显示一层加载中的动画效果,让用户知道这段文本正在进行处理中。 而不需要走翻译API接口的部分,则不会显示这个加载中的动画效果。
它并不会影响你本身网页的阅读观看,它的作用是给用户一个友好提示,免得让用户感觉是你网页有问题。
## 使用方式
#### 简单使用
增加一行代码,用以标记启用此能力:
````
translate.progress.api.startUITip();
````
#### 高级使用
如果你对翻译中的遮罩层加载中的动画样式美观度不满意,你还可以自定义样式,自定义方式为:
````
translate.progress.style=`
/* CSS部分 */
/* 灰色水平加载动画 */
.translate_api_in_progress {
position: relative;
overflow: hidden; /* 隐藏超出部分的动画 */
}
/* 蒙版层 */
.translate_api_in_progress::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 1); /* 半透明白色遮罩 */
z-index: 2;
}
/* 水平加载条动画 */
.translate_api_in_progress::before {
content: '';
position: absolute;
top: 50%;
left: 0;
width: 100%;
height:100%; /* 细线高度 */
background: linear-gradient(
90deg,
transparent 0%,
#e8e8e8 25%, /* 浅灰色 */
#d0d0d0 50%, /* 中灰色 */
#e8e8e8 75%, /* 浅灰色 */
transparent 100%
);
background-size: 200% 100%;
animation: translate_api_in_progress_horizontal-loader 3.5s linear infinite;
z-index: 3;
transform: translateY(-50%);
}
@keyframes translate_api_in_progress_horizontal-loader {
0% {
background-position: 200% 0;
}
100% {
background-position: -200% 0;
}
}
`;
translate.progress.api.startUITip();
````
你可以更改其中的 ````translate.progress.style```` 的css样式,来自定义当文本翻译中时,文本的css显示效果
## 注意
1. 它要放在 ````translate.execute();```` 的前面
2. 需要 translate.js v3.16 及更高版本才支持
3. 使用大模型翻译的场景,此能力尤其明显。
对某个句子中的某个单词进行翻译替换-文本处理
这个主要是给开发使用的。
1. 它能自动根据你最终的语种不同,根据翻译的单词跟上下文的联系,来判断是否给翻译的单词前、后追加空格等操作。
1. 它可以对句子中,出现多个位置的同一个单词进行全部翻译替换处理。
使用方法为:
````
translate.language.textTranslateReplace(text, translateOriginal, translateResult, 'english');
````
**text**: 原始文本,翻译的某句或者某个词就在这个文本之中
**translateOriginal**: 翻译的某个词或句,在翻译之前的文本
**translateResult**: 翻译的某个词或句,在翻译之后的文本,翻译结果
**language**: 显示的语种,这里是对应的 translateResult 这个文本的语种。 也就是最终替换之后要显示给用户的语种。比如将中文翻译为英文,这里也就是英文。 这里会根据显示的语种不同,来自主决定是否前后加空格进行分割。 另外这里传入的语种也是 translate.js 的语种标识
**方法返回**:将翻译处理好的文本返回。
实际调用使用示例:
````
var text = '你世好word世界';
var translateOriginal = '世';
var translateResult = 'shi'; //翻译结果
translate.language.textTranslateReplace(text, translateOriginal, translateResult, 'english');
````
运行后,如下图:

## 注意
需要 translate.js v3.13.13.20250310 及以上版本
自定义通过翻译API进行时的监听事件
[TOC]
当 translate.execute() 触发执行翻译时,它会先从 [浏览器缓存](4026.html) 中取,如果有则会直接从缓存中将翻译结果拿出来渲染到页面上,以做到瞬间翻译。
但是如果有的在本地没有缓存时,这部分没有缓存的文字将会通过API的方式进行请求翻译接口进行翻译。而这种方式毕竟是网络请求,考虑到网络延迟以及翻译API的执行耗时,这个可能要消耗0.5~2秒的时间才会完成翻译。 这样在用户(使用者)看来,就是页面先显示了原本的语种1秒,然后才会翻译成用户需要的语种。 而本文章则是针对这个过程,来进行自定义监听做一些你想做的事情。
# 两个触发事件
### 1. 请求翻译API之前触发
已经扫描完整个DOM,并且经过了一系列处理,拿到最终要通过翻译API接口进行翻译的文本,进行向API接口发送网络请求之前,触发,触发这个后会立即向翻译API发送网络请求。
````
translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
console.log('这里你可以做一些自己的自定义操作');
});
````
### 2. 请求翻译API完成并在DOM渲染完毕后触发
也就是在也面上被翻译的元素的内容,已经完全被翻译过来(眼睛已经能看到文字被翻译过来)之后,才会触发。
````
translate.listener.execute.renderFinishByApi.push(function(uuid, from, to){
console.log('这里你可以做一些自己的自定义操作');
});
````
# 使用说明
### 1. 参数说明
上面两个事件都是传入了一个自定义方法
````
function(uuid, from, to){
...
}
````
其中有个uuid的参数,可以用这个来取得当前传入到翻译API的文本以及所设计到的DOM节点。
可以这样来取 uuid 对应的相关数据:
````
translate.nodeQueue[uuid]
````
打印出来可以看到:

需要注意的是,当前我执行的是将当前页面翻译为英文的操作。 上图可以看到 list 下有 简体中文、也有英文。
因为我们是要翻译为英文,也就是 上图中 english 的数组部分它只是被扫描出来了,但它并不会实际参与进翻译中去的,也就是在通过翻译API进行翻译的文本中,是不包含 list[english] 这个的。
也就是当前触发我们function 这个方法的翻译元素,实际是:
````
translate.nodeQueue[uuid].list[from]
````
也就是展开其中某个语种,可以看到:

也就是
如果你想获得参与当前翻译的实际的文本,可以从 ````translate.nodeQueue[uuid].list[from][遍历集合].translateText```` 取得;
如果你想获得参与当前翻译的原本DOM中的文本,可以从 ````translate.nodeQueue[uuid].list[from][遍历集合].original```` 取得;
如果你想获得参与当前翻译的node节点,可以从 ````translate.nodeQueue[uuid].list[from][遍历集合].nodes```` 取得;
另外有关uuid的解释: 页面可能会触发多次翻译,每执行一次翻译,就会生成一个uuid,来存储跟当前执行的翻译相关的数据,不至于翻译执行多了使数据产生错乱。
**注意**,请不要直接对 ````translate.nodeQueue```` 的数据进行操作,你只可以读,不可以写。避免造成数据错乱。你想对数据处理,可以读出数据来后自行创建一个变量进行赋予,处理你自己定义的变量。
### 2. 可触发多次
触发可以触发多次,并不是只能触发一次,比如你可以这样写:
````
translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
console.log('111');
});
translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
console.log('222');
});
translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
console.log('333');
});
````
这个 111、222、333 都会被打印出来。至于它的执行顺序,则是跟代码的顺序一样,先打印 111、在打印 222、在打印 333 ,因为你代码的顺序就是这样的,它跟你代码的顺序是保持一致的。
### 3. 根据源语言不通进行多次触发
正常情况下,是根据本地语言不同,进行分别请求翻译的,比如本地中包含中文、英文、俄语三种语种,要翻译为韩语,那么
* 中文->韩语会请求一次api
* 英文->韩语会请求一次APi
* 俄语->韩语会请求一次APi
也就会触发三次
## 使用示例 - 控制按钮显示文字
这个示例的实际场景是,网页中有个按钮 ```````` 当点击按钮后,进行语言切换,翻译为英语,按钮文字发生改变,翻译完后,按钮文字还原。
当用户点击按钮进行翻译时,翻译会触发一个网络请求,进行翻译操作,网络请求可能是0.5秒,也可能是1.5秒,另外翻译时,会将网页中的文本进行按语种进行分类,也就是点击了一个翻译按钮,有可能发起的是这三个网络请求:
1. 简体中文翻译为英文
2. 繁体中文翻译为英文
3. 俄语翻译为英文
这里的需求是,当点击翻译按钮后,发起翻译的网络请求的过程中,并且这三个任何一个还没得到相应结果时,也就是任何一个网络请求的状态还在请求中时, 翻译按钮的文本变为````正在翻译中...```` ,当三个翻译的网络请求都完成时(不管成功还是失败还是接口报错等任何情况), 翻译按钮的文本变为````翻译```` 。
代码为:
````
window.currentTranslateIsProgress = 0; //0是未进行翻译,或已经翻译完成,大于0则是有正在进行的翻译网络请求,数字便是正在进行网络请求的数量。
translate.listener.execute.renderStartByApi.push(function(uuid, from, to){
currentTranslateIsProgress++;
console.log('发起翻译的网络请求,将 '+from+' 翻译为 '+to+', 当前是正在进行中的第'+currentTranslateIsProgress+"个翻译网络请求");
document.getElementById('translateButton').innerHTML='正在翻译中...';
});
translate.listener.execute.renderFinishByApi.push(function(uuid, from, to){
currentTranslateIsProgress--;
console.log('完成翻译的网络请求,将 '+from+' 翻译为 '+to);
if(currentTranslateIsProgress == 0){
document.getElementById('translateButton').innerHTML='翻译';
}
});
````
## 注意
1. 需要 translate.js v3.13.8.20250220 及更高版本才支持此能力
2. 如果翻译时,浏览器本地已经有全部缓存了,不需要在通过翻译API来进行翻译文本了,那么这两个事件是不会触发的。因为他们单纯只是为了监听 翻译API的网络请求及完成的。
本地语种也进行强制翻译
比如,正常情况下,网页设置的本地语种是简体中文, 但是网页中也有一段英文, 我们当翻译时切换为中文观看,也就是要以中文显示 默认的情况下,整个页面是不会被任何翻译的,也就是有的那段英文也不会进行任何翻译,依旧是显示英文。
如果你想切换为中文时,即使本地语种设置的是中文,网页中只要不是中文的元素,都会被翻译为要显示的语种,也就是都会被翻译为中文,那可以这么设置:
````
translate.language.translateLocal = true;
````
## 注意
1. 这行要放到 translate.execute(); 上面
2. 需要 translate.js v3.12.0.20241210 及更高版本才支持
增加对指定标签的属性进行翻译
这里可以增加对指定html标签的某个或某些属性进行翻译。比如element、vue 等框架,有些自定义的标签属性,想让其也正常翻译,可以将其自由加入进来。
方式如:
````
translate.element.tagAttribute['input']=['value'];
````
第一个是tag,第二个是tag的属性。上面这个示例是要翻译 input 的 value 属性。
另外比如要翻译 input 的 value 、 data-value 这两个属性,那么如下:
````
translate.element.tagAttribute['input']=['value','data-value'];
````
有几个要翻译的属性,就写上几个。
同样,有几个要额外翻译的tag,就加上几行就行了。比如还要翻译 img 标签的 data-value 属性:
````
translate.element.tagAttribute['input']=['value','data-value'];
translate.element.tagAttribute['img']=['data-value'];
````
## 扩展用法
比如,我只想对 加了 disabled 属性的 input 标签的 value 进行翻译 ,比如:
````
````
那么设置如下:
````
translate.element.tagAttribute['input']={
attribute:['value','data-value'],
condition:function(element){
if(typeof(element.disabled) != 'undefined' && element.disabled == true){
return true;
}else{
return false;
}
}
};
````
其中, **condition** 便是条件判断,只有当返回的布尔值是true时,才会对上面设置的 attribute 进行翻译,否则并不会对当前设定标签的 attribute 进行任何翻译操作。
function 方法接收的 element 是当前扫描到要进行判断的元素
比如这里是 translate.element.tagAttribute['input'] 那这个 element 参数便是扫描到的具体的 input 元素
可以针对 element 这个当前元素本身来进行判定,来决定是否进行翻译。
如果返回 false,则不对 attribute中设置的 ['value','data-value'] 这两个input 的属性的值进行任何操作
## 注意
* 这行要加在 ````translate.execute();```` 前面
* 需要 translate.js v3.17.9.20250729 及以上版本才支持此设置
重写刷新页面功能
刷新页面,你可以自定义刷新页面的方式,比如在 uniapp 打包生成 apk 时,apk中的刷新页面就不是h5的这个刷新,而是app的刷新方式,就需要自己进行重写这个刷新页面的方法了
````
translate.refreshCurrentPage = function(){
location.reload();
}
````
注意,要在引入 js 文件的下面就重写。另外这个刷新页面主要是跟随切换语言来的,也就是一定要放在切换语言那行代码之前。
注意,要使用 v3.4.1 及更高版本
翻译后再手动对某些元素节点翻译
页面正常加载,在执行完 translate.execute() 后,页面也就翻译完了。
但是有些情况是,页面加载完后,比如随着页面下滑的过程中,可能当前页面是一个数据列表,随着下滑,会进行瀑布流加载,当然瀑布流加载这种ajax动态加载可以提前使用 [translate.request.listener.start();](43170.html) 、 [translate.listener.start();](41552.html) 设置来自动监控网页元素变化来自动触发翻译,这两种它的本质也是监控变化部分的元素节点,将变化的元素节点筛选出来,会形成一个数组形态,如
````
[
node1,
node2,
node3
]
````
然后将这个数组形态传入
````
translate.execute(变动的元素节点的数组);
````
从而进行对变化的元素节点进行增量翻译。
另外一个场景是,如果你想做只对当前屏幕所显示的节点进行翻译,那么就完全可以利用此来进行,首先获取当前屏幕所显示的元素或节点,然后将获取到的数组集合传入进行翻译。 当屏幕滚动时,滚动结束后再获取当前屏幕所显示的元素节点,在用这个方法传入进行翻译。
这里提供一个示例:
````
var eles = [
document.getElementById('a'),
document.getElementById('b'),
document.getElementById('c'),
];
translate.execute(eles);
````
这里传入的 eles 它可以是元素的集合,也可以是节点的集合。
(其实这个得设置跟 [translate.setDocuments(documents);](41548.html) 的原理是相似的)
启用企业级稳定翻译
[TOC]
## 使用方式
````
translate.enterprise.use();
````
这行代码要加到 ````translate.execute();```` 的前面
注意,需要 translate.js v3.2.1.20240327 及以上版本才支持
需赞助后才可使用,企业版本仅针对付费用户开放。费用及联系可看本章末尾处
你需要将你的域名发我,我给你加白名单,你就能正常使用了。
另外,如果你是打包成APP或者别的场景进行使用,并不是通过域名进行访问的,那我们可以给你开通一个key,你通过设置一个key来进行使用,使用方式为:
#### 使用key的方式
````
translate.enterprise.use();
translate.enterprise.key='xxxxxxxxxxx';
translate.execute();
````
就是额外增加了一个key的设置,注意key的设置要在 ````translate.execute();```` 的上面
## 说明
企业级稳定翻译接口,相较开源翻译接口,在稳定性、响应速度上都进行了极大提升
| 项目 | 开源翻译通道 | 企业级翻译通道 |
| ------------ | ------------ | ------------ |
| 服务端缓存层数 | 1层| 2层 |
| 翻译响应速度 | 1.5~5秒 | 0.2~1.5秒 |
| 翻译服务器 | 1台 | >=2台 |
| 网络节点 | 2个 | >=4个 |
| 翻译通道 | [手动设置](43086.html) | 自动匹配最优 |
| 国内缓存节点 | 无 | 有 |
| 每日翻译字符 | [200万](43496.html) | [5000万](43496.html) |
| [作者远程指导](41718.html) | 无 | 有 |
| ...更多待补充 | | |
#### 服务端缓存层数
开源翻译的服务端一切以节省成本为主,只有一层缓存,是浏览器级缓存,如果已经翻译过的文本在进行翻译时,直接从缓存中取出做到瞬间无感知的翻译。
企业级翻译中,除了浏览器缓存之外,还增加了一层服务端缓存方案,针对浏览器缓存未命中的情况下,对请求来的翻译文本会再进行一次缓存匹配,如果命中服务端缓存,则直接从缓存中取出返回响应,而不需要再走机器翻译计算服务。极大提高翻译api的响应速度。打个比方,一个2000字的翻译请求,如果未命中服务端缓存,有机器翻译进行计算翻译,需要500毫秒,而如果有服务端缓存命中缓存,则只需要5毫秒!
#### 翻译响应速度
企业级翻译因加入了内存缓存方案,在翻译本身的响应速度进行了提升;另外增加了网络节点,使就近测速翻译匹配度更高,接口相应速度也更快。
#### 翻译服务器
开源的翻译服务器是单台的,本身存在不稳定情况,只不过这个不稳定情况比较低,比如一天24小时可能有三五分钟的不稳定情况。
这个高可用翻译是用多台服务器做翻译接口的备选分流,稳定系数远高于开源的翻译接口。
#### 网络节点
开源的翻译服务节点是香港、美国 两个节点,基本也全部覆盖了全球网络情况,可以不用担心全球范围内某个区域网络问题导致翻译接口无法使用的情况。
企业级翻译服务网络节点是香港、美国、中国、德国 ,使translate.js 的自动匹配最快网络节点更优质。
#### 翻译通道
开源的翻译服务需要[手动设置翻译通道](43086.html)
企业级翻译服务会优先采用 translate.service 进行翻译,如果translate.service 方式异常,会自动切换到 client.edge 以及其他的翻译通道,保障网站翻译的正常进行
#### 每日翻译字符
每日翻译字符的上限。企业版本如果你达到了上限,可以联系我们提高字符上限。如果提高的幅度太大,成倍数的提高,可能要额外收取一点点费用。
#### 作者远程指导
开源版本您可以自己加QQ群,遇到问题群里沟通,作者也会时不时看一眼问题给解惑。当然你也可以[预约作者进行有偿帮助](41718.html)
企业版本遇到问题,当然首先也是通过QQ群解惑,因为你用上了试了效果才会采纳企业版,使用企业版后,如果遇到一些异常自己处理不了,可以请求作者进行解惑,必要时可以拉远程会议进行投屏等沟通指导
## 开放API
[我们也开放公共api接口,方便您直接请求api接口进行翻译。api接口相关说明可点此查阅](43756.html)
## 赞助费
预计 50~200元/月 ,当下可按照 50/月的标准赞助。
支持微信、支付宝、USDT虚拟币、企业公户转账可开票、等等
#### 注意,以下性质的可以免费联系我们开通企业版通道,不收费用
1. 政务网站
1. 国家认可的公益网站
1. 云计算网站, 比如 [www.zhidianyun.cn](https://www.zhidianyun.cn/) 由衷感谢最开始时指点云的服务器赞助!
1. [如果您是开发者,可以考虑加入我们的生态,为 translate.js 开发各种生态产品、给某个系统的制作翻译插件、vue、uniapp等开发翻译插件](4036.html)
## 联系
微信: 17076012262
Telegram: untran
邮箱:
[email protected]
网页ajax请求触发自动翻译
## 使用方式
````
translate.request.listener.start();
````
本功能是可以监听当前网页中所有的ajax请求,比如正常的 xmlhttprequest 请求以及 fetch 。
当请求结束后,自动触发 ````translate.execute();```` 进行翻译。
注意,这行在 ````translate.execute();```` 前面后面都行
## 场景说明
在某些框架,比如 vue、react 等框架中,它的渲染跟普通的html中使用 ````document.getElemementById('xxx').innerHTML = '';```` 是不大一样的,而且如果出现ajax请求动态渲染页面时,有些朋友碰到过偶尔某个位置会出现漏掉翻译的情况,针对这种情况,特别还是框架各种各样的时候,这种调试是很麻烦的,主要是这个框架还不懂的时候。
但是有一点是,这些基本都是通过ajax请求,拿到结果后渲染页面完成后出现的漏翻译。
## 更多设置
#### ajax请求完毕后等待多长时间自动翻译
ajax请求完毕后,等待多长时间自动翻译,单位是毫秒,设置方式为:
````
translate.request.listener.delayExecuteTime = 500;
````
注意,这行要放在 ````translate.request.listener.start();```` 前面
如果不设置,这里默认是200,也就是ajax请求结束后等待200毫秒再去执行 ````translate.execute()```` ,因为ajax请求后还有渲染页面的过程,这也是这个延迟的作用。你的项目越庞大,渲染速度越慢,这里的数相应的也要调整的越大,因为翻译必须是要在你页面渲染完毕后,执行翻译才能将其翻译过来,如果限制行了翻译,后再进行的渲染,那肯定就翻译不到你动态渲染的部分,也就会造成了漏翻译的情况。
#### 设置自动触发翻译的最小间隔时间
针对ajax请求,两次触发的最小间隔时间,单位是毫秒,这里默认是800毫秒。最小填写时间为 200毫秒
````
translate.request.listener.minIntervalTime = 800;
````
如果某个页面中ajax请求非常多,而且非常频繁,比如1秒就有100个ajax请求,如果要触发100次翻译,那这频率也太恐怖了,会被翻译接口屏蔽的,这也是这个设置的作用,它限定了你 800 (不设置默认是800)毫秒只能触发一次翻译,也就是你800毫秒内不管有多少次请求,都只会触发一次翻译,超过800毫秒后,下一个800毫秒内也是如此,每个800毫秒的时间段最多只会触发一次翻译。
注意,这行要放在 ````translate.request.listener.start();```` 前面
如果不设置,这里默认是 800
#### 设置哪些ajax请求的url会触发自动翻译
自定义是否会被触发的方法判断
返回值 return true; 默认是不管什么url,全部返回true,表示会触发翻译自动执行 translate.execute; ,如果你不想让某个url触发翻译,那么你可以自行在这个方法中用代码进行判断,然后返回false,那么这个url将不会自动触发翻译操作。
````
translate.request.listener.trigger = function(url){
//这里 url 这个参数是当前ajax请求的url,当这个ajax请求完成时才会触发此处
//返回值为boolean 类型,默认是不管什么url,全部返回true,表示会触发翻译自动执行 translate.execute; ,如果你不想让某个url触发翻译,那么你可以自行在这个方法中用代码进行判断,然后返回false,那么这个url将不会自动触发翻译操作。
return true;
}
````
注意,这行要放在 ````translate.request.listener.start();```` 前面
这个如果不设置,默认是:
````
translate.request.listener.trigger = function(url){
return true;
}
````
## 注意
需要 translate.js v3.0.8.20240302 及更高版本
设置只对指定语种进行翻译
翻译网页中的指定语种
````
translate.language.translateLanguagesRange = ['chinese_simplified','english'];
````
可设置多个,翻译时只会翻译在这里面出现的语种,未在里面出现的语种将不会被翻译。
注意,这行要放到 translate.execute(); 上面
## 说明
比如你的网页中,有简体中文、英语 两个语种的文本都有,但是你只想翻译简体中文的文字,英语只是有一些行业术语单词而已,不想被翻译,你可以通过这里进行设置只翻译简体中文
````
translate.language.translateLanguagesRange = ['chinese_simplified'];
````
## 版本
需要 translate.js v3.0.6.20240226 及更高版本
重新绘制 select 语种下拉选择
重新绘制 select 语种下拉选择。比如进行二次开发translate.js,手动进行了设置语种(当前页面语种) ,但是手动改动后的,在select语种选择框中并不会自动进行改变,这是就需要手动重新绘制一下 select语种选择的下拉选择框
````
translate.selectLanguageTag.refreshRender();
````
## 版本要求
需要 translate.js v3.0.5.20240224 及更高版本
## 本篇文档已过时
[最新有关select语种下拉定义的文档请点此查看](41541.html)
识别字符串语种及分析
## 说明
1. 识别字符串整体是什么语种
2. 对字符串进行分析,识别出都有哪些语种,每个语种的字符是什么、每个语种包含的字符数是多少
````
translate.language.recognition('hello,我是一个string文本')
````
它的返回值为:

* **languageName** 是当前字符串是什么语种。它的识别遵循以下规则(按顺序判断):
1. 如果出现多个语种,这个语种包含的字符数,小于识别字符串总字符数 百分之五的,将会把这个语种剔除,下面的判断不会采纳出现百分比小于百分之五的语种。
1. 如果出现英语跟中文、法语、德语等混合的情况,也就是不纯粹英语的情况,那么会以其他语种为准,而不是识别为英语。
2. 如果出现简体中文跟繁体中文混合的情况,那么识别为繁体中文。
3. 除了以上规则外,如果出现了多个语种,那么会识别为出现字符数量最多的语种当做当前句子的语种。
* **languageArray** 对传入字符串进行分析,识别出都有哪些语种,每个语种的字符是什么,每个语种都有多少字符数等。其中:
1. **number**: 当前语种的总字符数
2. **list**: 当前语种识别切割出的集合
## 其他说明
这个是为二次开发考虑,进行扩展开发使用的。正常使用翻译这个是用不到的
## 版本要求
需要 translate.js v3.0.5.20240224 及更高版本
重写一级缓存(;浏览器缓存);
[translate.js 有两级缓存,两级缓存的详细说明可点此查看](41750.html)
其中,一级缓存,也就是浏览器缓存,它存在于浏览器本身,默认使用 LocalStorage 进行的存储。它的实现方式为
````
translate.storage = {
set:function(key,value){
localStorage.setItem(key,value);
},
get:function(key){
return localStorage.getItem(key);
}
}
````
你如果不想使用默认的 localStorage 的缓存,您完全可以对其重写,设置自己想使用的缓存方式,比如
````
````
设置使用的翻译服务 translate.service.use
## 使用方式
````
translate.service.use('client.edge');
````
注意,这行代码要加到 ````translate.execute(); ```` 的前面。
它的值有这几个:
* **translate.service** 2022.12月,随着 v2.0 版本推出 ,(当前如果不设置,默认便是用的这种)
* **client.edge** 2024.2月,随着 v3.0 版本推出 ,此能力上线。由微软直接提供翻译支持,不在依赖翻译服务器。
* **giteeAI** 2025.3月,已完成 DeepSeek、GLM 大模型的稳定使用并在全球龙头企业应用,2025.5月随着qwen3的发布,完成对qwen3的全面对接,2025.7月,跟开源中国联合开发版本完成并发布使用,有开源中国提供算力支持,融入translate.js完成一键接入的深度融合,推出 giteeAI 通道。它不同于上面两个,上面两个是机器翻译,这个是大模型翻译。它提供更好的翻译能力及私有部署后提供毫秒级翻译响应。自giteeAI通道上线后,也就是2025年7月份起,我们强烈推荐采用这个通道,以提供更好的翻译使用体验。 详细可参考: [http://translate.zvo.cn/545867.html](http://translate.zvo.cn/545867.html)
translate.service 正常是translate.js中默认使用的,至于为什么是默认使用它而不是默认使用 client.edge、giteeAI ,主要是考虑到v2版本中已经有数十万网站及应用都已经在使用了,为了完美兼容到几年前的旧版本的translate.js
而 translate.service 又可以私有部署到自己的服务器。普通使用都是使用我们公共的翻译服务,也就是我们自己提前部署好了,您可以直接免费去使用,但是如果您对隐私安全要求极高,数据不允许有一点外泄、又或者内网场景不允许通外网时,那么就需要私有部署 translate.service 服务了,部署到您内网自己的服务器来使用。
## 几种方式的比较
| | client.edge | translate.service 开源公共免费翻译 | translate.service 翻译服务私有部署 |
| ------------ | ------------ | ------------ |
| 翻译通道稳定性 | 比较稳定 | 一般 | 非常稳定 |
| 使用群体 | 大众 | 大众 | 仅自己 |
| 翻译字符日上限 | 无上限 | [200万字符/日](42557.html) | 无上限 |
| 翻译后端API | 不依赖 | 依赖 | 依赖 |
| 是否免费使用 | 免费 | 免费 | 收费 |
| 翻译缓存层数 | [一层缓存-浏览器缓存](4026.html) | [二层缓存](4026.html) | [三层缓存](4026.html) |
| 翻译服务延迟 | 1~5秒的网络+机器翻译延迟 | 命中[服务端缓存](4026.html)<2秒延迟 | 命中[服务端缓存](4026.html)<100毫秒延迟 |
| [元素整体翻译](4078.html) | 默认采用 | 默认不采用 | 默认采用 |
| 支持语种数量 | [73种](https://api.translate.zvo.cn/language_edge.json) | [112~450种](https://api.translate.zvo.cn/language.json) | [112~450种](https://api.translate.zvo.cn/language.json) |
| | | |
| 待补充更多... | ... | ... |
* **翻译通道稳定性** translate.service 公共免费翻译 由于是开源公开免费的,所以使用的非常多,同时为了降低服务器的成本,所以会出现偶尔不稳定情况、以及翻译通道延迟或超时情况,比如一天24小时,会有十几分钟的不稳定情况,而且这个情况会随着使用者越来越多也会表现的稍微加剧。所以我们不推荐你使用 translate.service 公共免费翻译 ,而是采用 client.edge、giteeAI 的模式。这里建议用 giteeAI 的模式,是2025.7月最新推出的。有关giteeAI的详细可参考:[http://translate.zvo.cn/545867.html](http://translate.zvo.cn/545867.html)
giteeAI 这种是部署了翻译集群,包括欧洲、美洲、亚洲等多个洲都有服务器作为翻译点,同时内置了翻译的自动负载,访问者会自动匹配最优翻译节点的通道,根据当地网络环境等自动进行选择最优切换。
* **翻译服务延迟** 是指如果翻译时没有命中浏览器缓存,那么会请求机器翻译接口,将要翻译的文本通过机器翻译接口进行翻译后返回,然后在进行浏览器缓存以及页面翻译。这个请求机器翻译发送跟接收到翻译文本响应的过程,是这里所说的翻译服务的延迟。不过网页基本只要打开翻译过一次了,都会进入浏览器缓存,网页刷新了、切换网页了翻译会极其迅速。
清除历史翻译语种的缓存
## 场景说明
translate.js 在使用时,如果你在网站的A页面中切换为了英文,那么当你从A页面跳转到同一个网站的B页面,只要B页面也存在 ````translate.execute()```` 那么B页面也会自动被翻译为英文。
但是有种场景是,在A页面中点击“切换为英文”,跳转到B页面中时并不想让它自动翻译为英文,只有点击“切换为英文”的按钮才会触发切换,也就是只有用户主动触发时才会翻译,而不需要它自动进行翻译,那么就需要这个了。
## 使用方式
````
translate.language.clearCacheLanguage();
````
将这行代码放在 ````translate.execute()```` 前面。
它会自动清除掉你上个页面所记忆的翻译语种,从而达到切换页面时不会按照上个页面翻译语种自动进行翻译的目的。
## 适用版本
translate.js v3.0.1.20240202 及更高版本
翻译接口响应捕获处理
对 translate.js 请求后端接口的响应进行捕获。使用方式为:
````
//自定义响应的拦截捕获
translate.request.response = function(xhr){
//xhr : XMLHttpRequest 接口请求
console.log('response:');
console.log(xhr);
}
````
## 注意事项
* 此代码要放在 ````translate.execute();```` 前面
* 无论后端翻译接口响应是否成功,都会触发此处。
* 另外当 xhr.readyState==4 的状态时才会触发。
* 此处会在接口请求响应后、且在 translate.js 处理前就会触发
## 支持版本
需要 translate.js v20231108 及以上版本
元素的内容整体翻译能力配置
## 使用方式
#### 方式一:对局部区域进行整体翻译
可以通过指定tag标签名、id、class的方式来设定要进行整体翻译的区域。
可以单独设置其中一个、也可以tag、id、class同时都进行设置,还可以某个设置多个,比如id可以push多个不同的id。
````
//指定tag标签
translate.whole.tag.push('h3');
//指定id
translate.whole.id.push('abc');
//指定 class 属性
translate.whole.class.push('class name');
````
此方式需要 translate.js v2.9.1.20231023 及更高版本才支持此能力。
#### 方式二:对整个页面进行整体翻译
````
translate.whole.enableAll();
````
**注意**
1. 这些设置要放在 ````translate.execute();```` 的前面。
1. 如果设置了 [translate.service.use('client.edge');](43086.html) 默认也会启用整个页面的整体翻译。
1. 此方式需要 translate.js v3.4.2.20240531 及更高版本才支持此能力。
**注意**
1. 如果使用的是 translate.service 的翻译通道,并且启用了 translate.whole.enableAll(); 那么会自动将翻译的英语及英语类的翻译结果进行段落首字母大写处理。
1. 如果使用的是 translate.service 的翻译通道,但是没有启用 translate.whole.enableAll(); 那么会自动将翻译的英语及英语类的翻译结果进行全部字母小写处理,避免出现大小写不规则出现的问题。如果你想让首字母大写,完全可以用CSS的方式来控制首字母大写显示。
## 说明解释
正常的翻译,是对node节点进行文本提取,分析文本包含的语种,对其进行分类整理,只对符合条件的文本进行翻译。比如
````
hello,我是translate.js的说明
````
这段p标签,在[设置了本地语种是简体中文](41551.html),要翻译为英文,这时真正通过后端翻译接口进行翻译的只有
````
我是
的说明
````
这两段文本,而其他的是不会传入后端翻译接口进行翻译的。这也充分保障了翻译效率、极大减小了传输内容的大小、极大降低了后端翻译接口的负载。
正常情况下,这样是很完美的。但是一些特殊情况,比如小说网站,它需要对翻译的内容具有非常好的连贯性、可阅读性,就需要进行指定区域的整体翻译了。
## 使用场景
* 你的网站是跨境电商网站,本身语种是简体中文,要翻译为葡萄牙语显示。其中有一个收货地址字段,这个地址输入是葡萄牙语,但正常翻译情况下,translate.js进行自动识别本地语种时,只支持中英文识别,是不支持葡萄牙语的,这种情况会造成这个收货地址的显示翻译会不准确,以及会造成单词被多次翻译,显示多次造成重复混乱的问题。此种情况就需要设置这个收货地址显示的元素要进行整体翻译了。
* 上述正常翻译支持的本地语种是中文跟英文,其他语种比如日语、葡萄牙语、西班牙语、藏语了等等这些还未支持,针对未支持的语种,便是需要使用此整体翻译能力,来进行翻译了。比如你有个网站为日语的,需要翻译为葡萄牙语,便可以通过整体翻译,指定翻译区域为 body,来进行整体翻译为葡萄牙语。
## 需要知晓
本能力因为没有浏览器层的语种过滤,是直接针对文本进行整体翻译,翻译的文本会相比正常情况下增加很多,会增加我们公共后端翻译服务的压力。而且有的朋友使用时代码方面有时适配的不是很好,会造成循环请求翻译的情况。我们为了保证公共翻译服务的稳定,进行了每个网站每日翻译字符上限两千万字的限制,正常情况下,这个数是远远达不到的!而且即使你达到了,依旧可以联系我们进行说明放开这个限制。这个只是为了避免被不正常使用造成无谓消耗。 [更详细解释可点此查看](42557.html)
手动调用接口进行翻译操作
通过JavaScript调用一个方法,传入翻译文本进行翻译,并获得翻译结果
它会自动获取你当前设置的本地语种、以及当前要显示为何种语种,来进行翻译。
# 使用方式
传入参数可以有多种类型,但是返回的结果都是相同的,以下有几种方式提供参考:
### 方式一:传入一串翻译文本
````
translate.request.translateText('你好,我是翻译的内容', function(data){
//打印翻译结果
console.log(data);
});
````
执行示例:

### 方式二:传入多个翻译文本
````
var texts = ['我是翻译的第一句','我是翻译的第二句','我是翻译的第三句'];
translate.request.translateText(texts, function(data){
//打印翻译结果
console.log(data);
});
````
执行示例:

### 方式三:自定义从什么语言翻译为什么语言
````
var obj = {
from:'chinese_simplified',
to:'english',
texts: ['我是翻译的第一句','我是翻译的第二句','我是翻译的第三句']
}
translate.request.translateText(obj, function(data){
//打印翻译结果
console.log(data);
});
````
执行示例:

注意:
1. 方式三需要 translate.js v3.12.0.20241210 及以上版本才支持
1. from 也就是原文语种,如果你用的是[大模型翻译](391129.html)等可以自动识别原文语种的,这里你直接传入一个固定字符 'auto' 即可。
# 参数说明
* **第一个参数**: 可传入要翻译的文本、以及文本数组、以及json对象。
* **第二个参数**: 翻译完毕后的处理函数。传入如
````function(data){ console.log(data); }````
注意,返回的data.result 为 1,则是翻译成功。 为0则是出错,可通过data.info 得到错误原因。 更详细说明参考: http://api.zvo.cn/translate/service/20230807/translate.json.html
离线翻译及自动生成配置
[TOC]
支持离线翻译能力。
其实它也就是传统 i18n 的能力,有语言配置文件提供翻译结果。
## 使用场景
1. 无网络环境的场景
2. 对翻译速度有极高要求的场景
3. 对翻译的结果有不满意想要手动调整翻译结果的场景
## 使用方式
### 1. 方式一:导出当前页面的离线翻译配置
#### 1.1 代码中开启离线翻译控制面板
加入以下这行代码
````
translate.office.showPanel();
````
至于加在 translate.execute(); 的前面还是后面,这个无所谓
访问这个页面,即可看到如下图,右下角已经显示了一个 导出配置信息 的区域

#### 1.2 导出翻译的配置信息
比如当前页面时简体中文,我离线翻译是针对的繁体中文,步骤如下:
1. 先将当前页面切换为繁体中文
2. 点击右下角的 **导出配置信息** 按钮,即可导出当前简体中文跟繁体中文的翻译配置了。

这里可以看到,简体中文跟翻译结果繁体中文,都是一一对应的,你如果感觉某个的翻译结果不太准确,你可以手动去进行编辑翻译结果。
#### 1.3 关闭翻译控制面板
当所有页面的离线配置信息都提取完毕后,就可以关闭翻译控制面板了,也就是讲第1步中的 ````translate.office.showPanel();```` 注释掉即可。
### 方式二:导出所有页面的离线翻译配置
比如你的管理系统有30个页面,你如果用方式一,那需要执行30次,然后每个页面都设置一次,会比较繁琐。
而这种方式,你可以直接把所有页面的离线翻译,也就是原文跟译文一并导出来,直接设置就完事了。
#### 2.1 代码中开启此能力
````
translate.office.fullExtract.isUse = true;
````
注意,此行设置要加到 ````translate.execute();```` 的前面。
#### 2.2 清空浏览器缓存

如上图,清除 localStorage 中的翻译缓存
#### 2.3 在你的页面中执行翻译
打开你的网页,然后进行翻译。
翻译后,点击其他页面,凡是你想导出离线翻译配置的页面,你都点开一次,让这些页面进行翻译。
多点开几次没事,不必担心重复,他会自动排重。
#### 2.4 导出离线翻译配置
在你浏览器-审核元素,控制台里输入以下代码,执行:
````
translate.office.fullExtract.export('english');
````
执行后,你浏览器会自动下载一个 english.txt 的文件,离线翻译的配置就全部在这个文件里。
这里有个传入值 ,它便是 translate.js 的语言标识。更多语种标识可以参考: https://translate.zvo.cn/260950.html
#### 2.5 关闭此能力
````
//translate.office.fullExtract.isUse = true;
````
将他注释掉,即可。
#### 2.6 版本
所有页面全部导出的能力,限 v3.16 及更高版本才支持。
## 代码中设置离线翻译数据
将第2步中导出的配置信息复制,粘贴到代码中,即可完成离线翻译数据的设置。
需要注意的是,导出的代码一定要加在 translate.execute(); 前面才行。如下所示:
````
//加入离线翻译-切换为繁体中文的配置
translate.office.append('chinese_traditional',`
库=庫
代码=代碼
引入=引入
版本,=版本,
简介:=簡介:
语言切换示例:=語言切換示例:
当前为 =當前為
选择框切换语言:=選擇框切換語言:
国际化,网页自动翻译,同谷歌浏览器自动翻译的效果,适用于网站。=國際化,網頁自動翻譯,同谷歌瀏覽器自動翻譯的效果,適用於網站。
进行翻译=進行翻譯
按钮切换语言:=按鈕切換語言:
如果你网页中有=如果你網頁中有
版本参见:=版本參見:
网页自动翻译,页面无需另行改造,加入两行 =網頁自動翻譯,頁面無需另行改造,加入兩行
即可让你的网页快速具备多国语言切换能力!=即可讓你的網頁快速具備多國語言切換能力!
使用方式:=使用方式:
在页面最底部加入=在頁面最底部加入
注意,要在页面最底部加。如果你在页面顶部加,那下面的是不会被翻译的=注意,要在頁面最底部加。如果你在頁面頂部加,那下面的是不會被翻譯的
请求更新了数据,要对其更新的数据进行翻译时,可直接执行 =請求更新了數據,要對其更新的數據進行翻譯時,可直接執行
js=js
js =js
v1 =v1
v2 =v2
ajax=阿賈克斯
demo=演示
hello, =你好,
v1.html=v1.html
select=選擇
`);
//翻译操作
translate.execute();
````
注意 ````translate.office.append(...)```` 要设置在 ````translate.execute(); ```` 的前面。
## 其他说明
1. 离线翻译的配置 translate.office.append(...) 可以出现多个,出现多个时会进行追加操作,每个都会生效。比如当前页面既要翻译为繁体中文、又要翻译为英文的场景。
1. translate.office.append(...) 其中第一个参数是翻译为什么语种,第二个参数是翻译的内容对照。 = 前面是页面原本的单词或句子,= 后面是翻译为的单词或句子。注意的是 = 前面的不要进行改动,如果你想调整翻译的结果,只需要把 = 后面的翻译结果进行修改即可。
1. 如果您是无网络环境下使用,您还要加入手动切换的入口。比如你网页本身是中文的,离线翻译支持切换为英文、法语,那么切换时肯定需要某个动作进行触发,比如用户点击了 “切换为英文” 的按钮,那么网页才会切换为英文。这个就需要配合 [主动进行语言切换](41549.html) 来一起使用。
1. 使用离线翻译时,如果网页中出现了一些动态文本,比如显示当前时间的,那这个文本是每次查看都是在变动的,显然做不到的离线翻译中去的,那这种的,不在离线翻译配置中的文本,会自动通过翻译接口来获取翻译结果。而且这个过程只是进行增量翻译,也就是只是把离线翻译中没有包含到的词或者句子,才会进行通过接口翻译。而包含在离线翻译配置中的词或者句子,就不会再通过翻译接口来进行了。有效的降低翻译接口数据传输。
1. 离线翻译控制面板的导出弹窗有 [msg.js](https://gitee.com/mail_osc/msg) 提供支持,其提供极其轻量级的消息提示能力。
根据URL传参控制以何种语种显示
````
translate.language.setUrlParamControl();
````
**注意,这行要放到 translate.execute(); 上面**
设置可以根据当前访问url的某个get参数来控制使用哪种语言显示。
比如网页url是 http://translate.zvo.cn/index.html ,当前语种是简体中文,那么可以通过在url后面增加 language 参数指定翻译语种,这里使网页内容以英文形态显示,便是这样访问 http://translate.zvo.cn/index.html?language=english
通过get方式传递了 language 这个参数
另外如果您不想使用language这个参数,还可以自定义参数名,比如使用lang来表示,那么可以这样设置:
````
translate.language.setUrlParamControl('lang');
````
这样设置后便可以通过 lang=xxxx 来控制以何语种显示了,比如 http://translate.zvo.cn/index.html?lang=english
获取当前显示的是什么语种
````
var lang = translate.language.getCurrent();
````
获取当前显示的是什么语种。
比如当前设置的本地语种是简体中文,用户并未切换其他语种,那么这个方法将返回本地当前的语种,也就是等同于 translate.language.getLocal()
如果用户切换为英语进行浏览,那么这个方法将返回翻译的目标语种,也就是 english
获取本地语种
````
translate.language.getLocal();
````
可以使用此来获取当前本地语种。 它是可以手动设置的,详细参见: [translate.language.setLocal('chinese_simplified');](4066.html)
获取本地语种时,首先会判断是否使用了 setLocal(...) 进行了设置,如果有设置,那么返回的将是 setLocal(...) 所设置的值。
如果没有设置,那么会自动获取当前网页所显示的内容文本,判断这个内容文本是什么语种,比如识别到70%字符是俄语,25%是英文,5%是韩语, 那么会自动取这里面识别字符占比最高的,作为当前网页的本地语种,进行返回。
但是有些情况也会根据实际的使用习惯来进行判定,不是绝对的比例大的就一定是使用的,比如 简体中文占比 30%,英语占比 70%,它也依旧是认为简体中文,因为人的习惯上,出现了一定比例的简体中文,他应该是中文、英文都有掌握,且认为使用中文的,不然如果非常熟悉英文,就不应该会出现中文了。 只需知道这回事即可,具体比例什么的不用太过深入研究。
另外 translate.js v3.17.0.20250703 及之后的版本,它获取的范围是跟你使用 ````translate.setDocuments(documents);```` [只翻译指定的元素](4063.html) 有关的,它所判断语种的字符只会从你 translate.setDocuments 设置的区域去取文本进行判定。
如果你没有进行过这个设置,那么会从整个页面的文本中去取,来进行判定。
#### 注意
当前支持设置的本地语种有:
* **chinese_simplified** 简体中文
* **chinese_traditional** 繁体中文
* **english** 英语
* **korean** 韩语
* **japanese** 日语
* **french** 法语
* **italian** 意大利语
* **deutsch** 德语
文档最后更新于 2024.12 月,如果您使用时发现不存在其中,可以 [联系我](4030.html) 说明,也没准是已经支持了但是文档上还未更新过来
鼠标划词翻译
鼠标在网页中选中一段文字,会自动出现对应翻译后的文本
此能力有网友 https://gitee.com/huangguishen 贡献。
## 使用方式
````
translate.language.setDefaultTo('english'); //先设置默认翻译为的什么语言
translate.selectionTranslate.start(); //开启鼠标划词翻译能力
````
**注意,这个就不需要再执行 ````translate.execute();```` 这个方法了,因为执行了这个方法,整个页面就已经被翻译过了,也就没必要再使用鼠标划词翻译了**
## 实际效果

翻译时忽略指定的id
````
translate.ignore.id.push('test'); //翻译时追加上自己想忽略不进行翻译的id的值,凡是在这里面的,都不进行翻译。
````
翻译时追加上自己想忽略不进行翻译的id的值,凡是在这里面的,都不进行翻译。
也就是当前元素以及其子元素都不会被翻译。
如果有多个,添加多行即可。
如果你想查看当前忽略哪些id,可直接执行 ```` console.log(translate.ignore.id); ```` 进行查看
**注意,这行要放到 translate.execute(); 上面**
翻译时忽略指定的class属性
````
translate.ignore.class.push('test'); //翻译时追加上自己想忽略不进行翻译的class name的值,凡是在这里面的,都不进行翻译。
````
翻译时追加上自己想忽略不进行翻译的class标签,凡是在这里面的,都不进行翻译。
也就是当前元素以及其子元素都不会被翻译。
如果有多个,可以加多行即可。
如果你想查看当前忽略哪些class,可直接执行
```` console.log(translate.ignore.class); ````
进行查看
**注意,这行要放到 translate.execute(); 上面**
翻译时忽略指定的tag标签
````
translate.ignore.tag.push('span'); //翻译时追加上自己想忽略不进行翻译的tag标签,凡是在这里面的,都不进行翻译。
````
翻译时追加上自己想忽略不进行翻译的tag标签,凡是在这里面的,都不进行翻译。
也就是当前元素以及其子元素都不会被翻译。
如果你想查看当前忽略哪些tag标签,可直接执行
```` console.log(translate.ignore.tag); ````
进行查看
**注意,这行要放到 translate.execute(); 上面**
设定select切换语言所支持的语种
````
translate.selectLanguageTag.languages = 'english,chinese_simplified,korean';
````
每个语种之间用英文,分割。比如这里设置的是支持英语、简体中文、韩语 的切换。根据后端翻译服务不同,支持的语言也不同。
这里设置后,出现的切换语言的select下拉选择框中出现的语种便是这里所设置的,而不是一下出来百多个了。
具体支持哪些,可通过 http://api.zvo.cn/translate/service/20230807/language.json.html 获取 (如果您私有部署的,接口文档中将请求域名换为您自己私有部署的域名)
**注意,这行要放到 translate.execute(); 上面**
## 本篇文档已过时
[最新有关select语种下拉定义的文档请点此查看](41541.html)
设定是否自动出现 select 切换语言
````
/*
* 是否显示 select选择语言的选择框,true显示; false不显示。默认为true
* 注意,这行要放到 translate.execute(); 上面
*/
translate.selectLanguageTag.show = false;
translate.execute();
````
使用场景,比如如果使用了:
````
切换为英语
````
这种切换方式,那么 select下拉选择的就用不到了,就可以用此方式来不显示。
当然你也可以使用css的方式来控制其不显示。比如:
````
````
## 本篇文档已过时
[最新有关select语种下拉定义的文档请点此查看](41541.html)
翻译时忽略指定的文字不翻译
## 忽略指定的文字不翻译
````
translate.ignore.text.push('你好');
translate.ignore.text.push('世界');
````
翻译时追加上自己想忽略不进行翻译的文字,凡是在这里面的,都不进行翻译。
如果你想查看当前忽略哪些文字不翻译,可直接执行
```` console.log(translate.ignore.text); ````
进行查看
#### 注意
1. 这行要放到 translate.execute(); 上面
2. 仅限 translate.js v3.11.0.20241206 及以上版本才支持此能力
## 通过正则的方式忽略某些文字不翻译
正则的方式可以弥补 ````translate.ignore.text.push```` 只能对固定文本设置的不足,有 https://github.com/wangliangyu 提交本能力的贡献。
使用方式:
````
translate.ignore.setTextRegexs([/请求/g, /[u4a01-u4a05]+/g]);
````
#### 注意
1. 这行要放到 translate.execute(); 上面
2. 仅限 translate.js v3.17.0.20250703 及以上版本才支持此能力
设置默认翻译为的语种
设置第一次使用时,默认以什么语种显示。
比如本地当前语种是简体中文,这里设置为english,那么用户第一次使用时,会自动翻译为english进行显示。如果用户手动切换为其他语种比如韩语,那么就遵循用户手动切换的为主,显示韩语。
使用方式为:
````
translate.language.setDefaultTo('english');
````
#### 注意
* 这行要放到 translate.execute(); 上面
* 加上这行如果测试,要把你浏览器的 localStorage 存储给清空掉
自定义翻译术语
如果你感觉某些翻译不准确,可进行针对性的定义某些词的翻译结果,进行自定义术语库。使用的方法为:
````
translate.nomenclature.append(from, to, properties);
````
传入参数解释:
* **from** 要转换的语种,传入如 chinese_simplified
* **to** 翻译至的目标语种,传入如 english
* **properties** 配置表,格式便是properties的格式,每行一个规则,每个前后用等号分割,等号前是要翻译的词或句子,等号后是自定义的翻译结果。传入如:
````
你好=Hello
世界=ShiJie
````
比如,要自定义 “网市场云建站系统” 、 “国际化” 这两个词由 简体中文 翻译为 英文 的结果,可以这么写:
````
translate.nomenclature.append('chinese_simplified','english',`
网市场云建站系统=wangmarket CMS
国际化=GuoJiHua
`);
````
这个自定义术语库的可以单独用一个js文件来定义,如此定义一次,在类似的项目中有使用,可直接将之前定义的js术语库文件复制来引入即可方便使用。
**注意,这行要放到 translate.execute(); 上面**
## 示例
这里给出一个示例用于参考,链接地址: [https://res.wang.market/translate/doc/demo_nomenclature.html](https://res.wang.market/translate/doc/demo_nomenclature.html)
您可打开后查看页面源代码,即可看到它是如何设置的。
## 注意
* 建议你的版本在 translate.js v3.11.0.20241206 及以上版本
* 还有个能力跟自定义术语类似,[离线翻译能力](4076.html) ,此能力可以对所有翻译结果进行自定义修改。它会自动生成类似于传统的i18n的翻译前后的键值对。
## 不传from参数的场景使用
针对这种场景: 用户做的网站,可能是中文的,也可能是韩语的,这个本地语种并不确定的场景, from 参数没法精确指定,这时
你还可以不设定固定的form参数,而是传入空字符串的方式,来自动适配当前网页语种。
使用示例:
````
translate.nomenclature.append('','english',`
网市场云建站系统=wangmarket CMS
国际化=GuoJiHua
`);
````
可以看到, from 参数传入的是 '' 一个空字符串,这时它将会自动匹配当前本地语种作为from 。
**针对这种from不设定的场景,需要注意几点:**
1. 要确保 ````translate.nomenclature.append```` 是放在 ````