i18n-jsautotranslate 3.11.11 → 3.12.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -18
- package/{translate.js/translate.js → index.js} +129 -22
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ http://res.zvo.cn/translate/demo.html
|
|
|
57
57
|
在网页最末尾, ````</html>```` 之前,加入以下代码,一般在页面的最底部就出现了选择语言的 select 切换标签。 其实就这么简单:
|
|
58
58
|
|
|
59
59
|
````
|
|
60
|
-
<script src="https://cdn.staticfile.net/translate.js/3.
|
|
60
|
+
<script src="https://cdn.staticfile.net/translate.js/3.12.0/translate.js"></script>
|
|
61
61
|
<script>
|
|
62
62
|
translate.language.setLocal('chinese_simplified'); //设置本地语种(当前网页的语种)。如果不设置,默认自动识别当前网页显示文字的语种。 可填写如 'english'、'chinese_simplified' 等,具体参见文档下方关于此的说明。
|
|
63
63
|
translate.service.use('client.edge'); //设置机器翻译服务通道,直接客户端本身,不依赖服务端 。相关说明参考 http://translate.zvo.cn/43086.html
|
|
@@ -104,6 +104,9 @@ translate.execute();//进行翻译
|
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
# 使用示例
|
|
107
|
+
|
|
108
|
+
## 在浏览器使用
|
|
109
|
+
|
|
107
110
|
**普通网站中点击某个语言进行切换**
|
|
108
111
|
如下图所示,网站中的某个位置要有几种语言切换
|
|
109
112
|

|
|
@@ -118,7 +121,7 @@ translate.execute();//进行翻译
|
|
|
118
121
|
</ul>
|
|
119
122
|
|
|
120
123
|
<!-- 引入多语言切换的js -->
|
|
121
|
-
<script src="https://cdn.staticfile.net/translate.js/3.
|
|
124
|
+
<script src="https://cdn.staticfile.net/translate.js/3.12.0/translate.js"></script>
|
|
122
125
|
<script>
|
|
123
126
|
translate.selectLanguageTag.show = false; //不出现的select的选择语言
|
|
124
127
|
translate.service.use('client.edge'); //设置机器翻译服务通道
|
|
@@ -126,32 +129,51 @@ translate.execute();//进行翻译
|
|
|
126
129
|
</script>
|
|
127
130
|
````
|
|
128
131
|
|
|
132
|
+
## 在 NPM 中使用
|
|
133
|
+
|
|
134
|
+
1. Install
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
npm i i18n-jsautotranslate
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
2. Import
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
import translate from 'i18n-jsautotranslate'
|
|
144
|
+
/* Or */
|
|
145
|
+
const translate = require("i18n-jsautotranslate")
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
[Vue2 中使用 translate.js 在线 Demo](https://lruihao.github.io/vue-el-demo/#/translate-js)
|
|
149
|
+
|
|
129
150
|
# 谁在使用
|
|
130
151
|
截止 2023.7 月份时,本项目的后端免费翻译服务的请求量就已经达到了 1.5亿次/月 的规模,并且还在非常快速的持续增大,包括一些城投集团像是长沙城投、以及一些政府单位像是环境保障局、企业国际化经营服务平台、海外矿业产业联合、国际潮青联谊年会、人力资源和社会保障局、政务服务网、海外的一些平台如futrom智能住宅、bitheime全球区块链等等都在广泛使用。
|
|
131
152
|
这里给出两个使用比较好的网站作为实际示例参考:
|
|
132
153
|
|
|
133
154
|
* [**RICE中国大米展**](https://www.cnrice.com.cn)
|
|
134
|
-
* [
|
|
135
|
-
* [**第十一届国际潮青联谊年会组委会**](https://ityc.org.cn)
|
|
155
|
+
* [**第十一届国际潮青联谊年会组委会**](http://ityc.org.cn)
|
|
136
156
|
|
|
137
157
|
另外,很多开源框架及产品也都已将此翻译能力接入了自身系统,赋予自身系统多语言切换能力。
|
|
138
158
|
|
|
139
159
|
|
|
140
160
|
## 这些开源产品已内置本功能
|
|
141
|
-
* [
|
|
142
|
-
* [
|
|
143
|
-
* [
|
|
144
|
-
* [
|
|
145
|
-
* [
|
|
146
|
-
* [
|
|
147
|
-
* [
|
|
148
|
-
* [
|
|
149
|
-
* [
|
|
150
|
-
* [
|
|
151
|
-
* [
|
|
152
|
-
* [
|
|
161
|
+
* [管伊佳ERP](https://gitee.com/jishenghua/JSH_ERP) 国产开源ERP系统关注度第一,专注进销存、生产、总账
|
|
162
|
+
* [FixIt](https://github.com/hugo-fixit/cmpt-translate) 一款简洁、优雅且先进的Hugo 博客主题
|
|
163
|
+
* [Z-Blog](https://app.zblogcn.com/?id=49226) 易用的博客程序,功能丰富,模板多样,助轻松搭建个性博客。
|
|
164
|
+
* [Discuz](https://addon.dismall.com/plugins/domi_translate.html) 知名论坛系统,功能强大,插件众多,打造活跃互动的网络社区。
|
|
165
|
+
* [Pear Admin Layui](https://gitee.com/pear-admin/Pear-Admin-Layui/tree/i18n/) Pear Admin Layui 是基于 Layui 的后台管理模板,简洁美观,实用高效。
|
|
166
|
+
* [kefu.js](https://gitee.com/mail_osc/kefu.js) 开源js聊天界面插件,方便快捷,助力网站沟通服务。
|
|
167
|
+
* [Layui](https://gitee.com/mail_osc/translate_layui) 简洁好用的前端框架,组件丰富,上手容易,广受开发者青睐。
|
|
168
|
+
* [wangmarket CMS](http://cms.zvo.cn) 开源的SAAS云建站系统,可私有部署,可通过后台任意开通多个网站,每个网站独立管理
|
|
169
|
+
* [易优CMS](https://www.eyoucms.com/mall/plus/29751.html) 功能强大的内容管理系统,操作简便,模板随心选。
|
|
170
|
+
* [迅睿CMS](https://www.xunruicms.com/shop/1285.html) 一款功能完善的内容管理系统,性能卓越,易于使用。
|
|
171
|
+
* [chanyue-cms](https://gitee.com/yanyutao0402/chanyue-cms) 基于Node、Express、MySQL、Vue3研发的高质量实用型CMS系统
|
|
172
|
+
* [phpok cms](https://gitee.com/phpok/phpok) 极其自由的企业站程序,支持各种自定义配置。
|
|
173
|
+
* [RPCMS](https://app.rpcms.cn/app/149.html) 轻量型php内容管理系统,小型、轻量,但功能丰富,可扩展性强。
|
|
174
|
+
* [Masuit.MyBlogs](https://gitee.com/masuit/Masuit.MyBlogs) 高性能高安全性低占用的个人博客系统
|
|
153
175
|
...
|
|
154
|
-
如果您有开源项目,比如文档、cms、UI
|
|
176
|
+
如果您有开源项目,比如文档、cms、UI 框架、后台管理框架、等等,需要采用此进行多语言切换,欢迎喊我,无偿提供全程接入讨论及遇到的问题跟随优化,希望我们的开源项目能互相产生作用一起越来越好。如果你的项目在这个列表中没有,欢迎联系我说明,我给加入进去
|
|
155
177
|
|
|
156
178
|
|
|
157
179
|
# 哪些能力
|
|
@@ -164,6 +186,15 @@ translate.execute();//进行翻译
|
|
|
164
186
|
翻译是基于您现有的网站内容,不需要重新建设多语种网站,只需要解析域名到您私有部署的服务器,就可以完成全站翻译。
|
|
165
187
|
详细参见 [TCDN](http://translate.zvo.cn/41159.html)
|
|
166
188
|
|
|
189
|
+
# TCDN部署
|
|
190
|
+
tcdn是translate.js 的高级版本,它的能力是让你原本的网站可以用不同的域名访问到不同的语种。而不同的语种,都可以被收录!它可以免费部署到服务器进行使用。注意,它需要使用个1核2G的服务器进行部署的。
|
|
191
|
+
部署方式有两种:
|
|
192
|
+
### 宝塔部署
|
|
193
|
+
首选需要你的宝塔面板需要 9.3.0 及以上版本。 不然你在下一步部署时,是搜索不到我们 TCDN 这个服务的。
|
|
194
|
+
如果你没有安装宝塔面板,可以先去安装宝塔面板: [https://www.bt.cn/new/download.html?r=dk_tcdn](https://www.bt.cn/new/download.html?r=dk_tcdn)
|
|
195
|
+
详细部署步骤可参考: [https://translate.zvo.cn/302663.html](https://translate.zvo.cn/302663.html)
|
|
196
|
+
### 服务器部署
|
|
197
|
+
需要一个干净的服务器,不依赖任何环境的情况下进行的部署,需要你懂点linux命令行, 部署方式参考: [https://translate.zvo.cn/236899.html](https://translate.zvo.cn/236899.html)
|
|
167
198
|
|
|
168
199
|
# 开源仓库目录结构
|
|
169
200
|
* **deploy** - 部署相关,比如shell文件、sql数据库文件等
|
|
@@ -195,7 +226,6 @@ translate.execute();//进行翻译
|
|
|
195
226
|
|
|
196
227
|
# 优秀开源项目及社区推荐
|
|
197
228
|
[Featbit](https://github.com/featbit/featbit) 一个100%开源的 Feature flags / Feature Management 平台工具
|
|
198
|
-
[LinkWeChat](https://gitee.com/LinkWeChat/link-wechat) LinkWeChat 是基于企业微信的开源 SCRM 系统,是企业私域流量管理与营销的综合解决方案。
|
|
199
229
|
[IoTSharp](https://gitee.com/IoTSharp) IoTSharp 是一个 基于.Net Core 开源的物联网基础平台, 支持 HTTP、MQTT 、CoAp 协议
|
|
200
230
|
[流之云](https://gitee.com/ntdgg) 信息化、数字化服务提供商
|
|
201
231
|
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
var translate = {
|
|
9
9
|
/**
|
|
10
10
|
* 当前的版本
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
* 由 npm 脚本自动更新,无需手动修改
|
|
12
|
+
* 格式:major.minor.patch.date
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
|
-
version: '3.
|
|
14
|
+
// AUTO_VERSION_START
|
|
15
|
+
version: '3.12.5.20250111',
|
|
16
16
|
// AUTO_VERSION_END
|
|
17
17
|
/*
|
|
18
18
|
当前使用的版本,默认使用v2. 可使用 setUseVersion2();
|
|
@@ -148,7 +148,12 @@ var translate = {
|
|
|
148
148
|
|
|
149
149
|
//判断translate 的id是否存在,不存在就创建一个
|
|
150
150
|
if(document.getElementById(translate.selectLanguageTag.documentId) == null){
|
|
151
|
-
var
|
|
151
|
+
var findBody = document.getElementsByTagName('body');
|
|
152
|
+
if(findBody.length == 0){
|
|
153
|
+
console.log('body tag not find, translate.selectLanguageTag.render() is not show Select Language');
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
var body_trans = findBody[0];
|
|
152
157
|
var div = document.createElement("div"); //创建一个script标签
|
|
153
158
|
div.id=translate.selectLanguageTag.documentId;
|
|
154
159
|
body_trans.appendChild(div);
|
|
@@ -564,6 +569,7 @@ var translate = {
|
|
|
564
569
|
return translate.nomenclature.data;
|
|
565
570
|
},
|
|
566
571
|
//对传入的str字符进行替换,将其中的自定义术语提前进行替换,然后将替换后的结果返回
|
|
572
|
+
//v3.11 后此方法已废弃,不再使用
|
|
567
573
|
dispose:function(str){
|
|
568
574
|
if(str == null || str.length == 0){
|
|
569
575
|
return str;
|
|
@@ -1284,9 +1290,15 @@ var translate = {
|
|
|
1284
1290
|
|
|
1285
1291
|
//判断本地语种跟要翻译的目标语种是否一样,如果是一样,那就不需要进行任何翻译
|
|
1286
1292
|
if(translate.to == translate.language.getLocal()){
|
|
1287
|
-
|
|
1293
|
+
if(translate.language.translateLocal){
|
|
1294
|
+
//这是自定义设置的允许翻译本地语种中,跟本地语种不一致的语言进行翻译
|
|
1295
|
+
|
|
1296
|
+
}else{
|
|
1297
|
+
return;
|
|
1298
|
+
}
|
|
1288
1299
|
}
|
|
1289
1300
|
|
|
1301
|
+
|
|
1290
1302
|
/********** 翻译进行 */
|
|
1291
1303
|
|
|
1292
1304
|
//先进行图片的翻译替换,毕竟图片还有加载的过程
|
|
@@ -1938,12 +1950,15 @@ var translate = {
|
|
|
1938
1950
|
//替换渲染
|
|
1939
1951
|
if(typeof(originalText) != 'undefined' && originalText.length > 0){
|
|
1940
1952
|
if(typeof(node[attribute]) != 'undefined'){
|
|
1941
|
-
|
|
1953
|
+
//这种是主流框架,像是vue、element、react 都是用这种 DOM Property 的方式,更快
|
|
1942
1954
|
node[attribute] = node[attribute].replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText));
|
|
1943
1955
|
}
|
|
1944
|
-
|
|
1956
|
+
|
|
1957
|
+
//这种 Html Attribute 方式 是 v3.12 版本之前一直使用的方式,速度上要慢于 上面的,为了向前兼容不至于升级出问题,后面可能会优化掉
|
|
1958
|
+
var htmlAttributeValue = node.getAttribute(attribute);
|
|
1959
|
+
if(htmlAttributeValue != null && typeof(htmlAttributeValue) != 'undefined'){
|
|
1945
1960
|
//这个才是在v3.9.2 后要用的,上面的留着只是为了适配以前的
|
|
1946
|
-
node.setAttribute(attribute,
|
|
1961
|
+
node.setAttribute(attribute, htmlAttributeValue.replace(new RegExp(translate.util.regExp.pattern(originalText),'g'), translate.util.regExp.resultText(resultText)));
|
|
1947
1962
|
}
|
|
1948
1963
|
}
|
|
1949
1964
|
return result;
|
|
@@ -2130,12 +2145,33 @@ var translate = {
|
|
|
2130
2145
|
for(var attributeName_index in translate.element.tagAttribute[nodeNameLowerCase]){
|
|
2131
2146
|
|
|
2132
2147
|
var attributeName = translate.element.tagAttribute[nodeNameLowerCase][attributeName_index];
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2148
|
+
//console.log(attributeName);
|
|
2149
|
+
//console.log(node.getAttribute(attributeName));
|
|
2150
|
+
|
|
2151
|
+
/*
|
|
2152
|
+
* 默认是 HtmlAtrribute 也就是 HTML特性。取值有两个:
|
|
2153
|
+
* HTMLAtrribute : HTML特性
|
|
2154
|
+
* DOMProperty : DOM属性
|
|
2155
|
+
*/
|
|
2156
|
+
var DOMPropOrHTMLAttr = 'HTMLAtrribute';
|
|
2157
|
+
var attributeValue = node.getAttribute(attributeName);
|
|
2158
|
+
if(typeof(attributeValue) == 'undefined' || attributeValue == null){
|
|
2159
|
+
//vue、element、react 中的一些动态赋值,比如 element 中的 el-select 选中后赋予显示出来的文本,getAttribute 就取不到,因为是改动的 DOM属性,所以要用这种方式才能取出来
|
|
2160
|
+
attributeValue = node[attributeName];
|
|
2161
|
+
DOMPropOrHTMLAttr = 'DOMProperty';
|
|
2136
2162
|
}
|
|
2163
|
+
if(typeof(attributeValue) == 'undefined' || attributeValue == null){
|
|
2164
|
+
//这个tag标签没有这个属性,忽略
|
|
2165
|
+
continue;
|
|
2166
|
+
}
|
|
2167
|
+
|
|
2168
|
+
//if(typeof(node.getAttribute(attributeName)) == 'undefined' && typeof(node[attributeName]) == 'undefined'){
|
|
2169
|
+
// //这个tag标签没有这个 attribute,忽略
|
|
2170
|
+
// continue
|
|
2171
|
+
//}
|
|
2172
|
+
|
|
2137
2173
|
//加入翻译
|
|
2138
|
-
translate.addNodeToQueue(uuid, node,
|
|
2174
|
+
translate.addNodeToQueue(uuid, node, attributeValue, attributeName);
|
|
2139
2175
|
}
|
|
2140
2176
|
|
|
2141
2177
|
}
|
|
@@ -2158,7 +2194,6 @@ var translate = {
|
|
|
2158
2194
|
if(node == null || typeof(node) == 'undefined'){
|
|
2159
2195
|
return;
|
|
2160
2196
|
}
|
|
2161
|
-
//console.log(node)
|
|
2162
2197
|
if(node.parentNode == null){
|
|
2163
2198
|
return;
|
|
2164
2199
|
}
|
|
@@ -2215,6 +2250,7 @@ var translate = {
|
|
|
2215
2250
|
//console.log('addNodeToQueue -- '+nodeAnaly['node']+', text:' + nodeAnaly['text']);
|
|
2216
2251
|
translate.addNodeToQueue(uuid, nodeAnaly['node'], nodeAnaly['text']);
|
|
2217
2252
|
}
|
|
2253
|
+
|
|
2218
2254
|
//console.log(nodeAnaly);
|
|
2219
2255
|
/*
|
|
2220
2256
|
//console.log(node.nodeName+', type:'+node.nodeType+', '+node.nodeValue);
|
|
@@ -2546,7 +2582,7 @@ var translate = {
|
|
|
2546
2582
|
//获取当前是什么语种
|
|
2547
2583
|
//var langs = translate.language.get(text);
|
|
2548
2584
|
var textRecognition = translate.language.recognition(text);
|
|
2549
|
-
langs = textRecognition.languageArray;
|
|
2585
|
+
var langs = textRecognition.languageArray;
|
|
2550
2586
|
//console.log('langs');
|
|
2551
2587
|
//console.log(langs);
|
|
2552
2588
|
|
|
@@ -2854,6 +2890,14 @@ var translate = {
|
|
|
2854
2890
|
|
|
2855
2891
|
//当前本地语种,本地语言,默认是简体中文。设置请使用 translate.language.setLocal(...)。不可直接使用,使用需用 getLocal()
|
|
2856
2892
|
local:'',
|
|
2893
|
+
|
|
2894
|
+
/*
|
|
2895
|
+
* v3.12增加, 是否会翻译本地语种,默认是false,不会翻译。
|
|
2896
|
+
* 比如当前设置的本地语种是简体中文, 但是网页中也有一段英文, 如果设置了translate.to 为中文,也就是要以中文显示 默认是false的情况下,整个页面是不会被任何翻译的,也就是有的那段英文也不会进行任何翻译,依旧是显示英文。
|
|
2897
|
+
* 如果这里设置为 true, 则英文也会被翻译,只要不是中文的,都会被翻译为要显示的语种,也就是都会被翻译为中文。
|
|
2898
|
+
*/
|
|
2899
|
+
translateLocal:false,
|
|
2900
|
+
|
|
2857
2901
|
/*
|
|
2858
2902
|
翻译语种范围
|
|
2859
2903
|
比如传入 ['chinese_simplified','chinese_traditional','english'] 则表示仅对网页中的简体中文、繁体中文、英文 进行翻译,而网页中出现的其他的像是法语、韩语则不会进行翻译
|
|
@@ -4294,11 +4338,16 @@ var translate = {
|
|
|
4294
4338
|
|
|
4295
4339
|
*/
|
|
4296
4340
|
name:'translate.service',
|
|
4341
|
+
|
|
4297
4342
|
/*
|
|
4298
4343
|
其实就是设置 translate.service.name
|
|
4299
|
-
|
|
4344
|
+
|
|
4300
4345
|
*/
|
|
4301
4346
|
use: function(serviceName){
|
|
4347
|
+
if(translate.enterprise.isUse == true){
|
|
4348
|
+
console.log('您已启用了企业级翻译通道 translate.enterprise.use(); (文档:https://translate.zvo.cn/4087.html) , 所以您设置的 translate.service.use(\''+serviceName+'\'); (文档:https://translate.zvo.cn/4081.html) 将失效不起作用,有企业级翻译通道全部接管。');
|
|
4349
|
+
return;
|
|
4350
|
+
}
|
|
4302
4351
|
if(typeof(serviceName) == 'string' && serviceName == 'client.edge'){
|
|
4303
4352
|
translate.service.name = serviceName;
|
|
4304
4353
|
|
|
@@ -4768,6 +4817,9 @@ var translate = {
|
|
|
4768
4817
|
}
|
|
4769
4818
|
//加入浏览器默认语种 v3.6.1 增加,以便更好的进行自动切换语种
|
|
4770
4819
|
data.browserDefaultLanguage = translate.util.browserDefaultLanguage();
|
|
4820
|
+
if(typeof(translate.enterprise.key) != 'undefined' && typeof(translate.enterprise.key) == 'string' && translate.enterprise.key.length > 0){
|
|
4821
|
+
data.key = translate.enterprise.key;
|
|
4822
|
+
}
|
|
4771
4823
|
|
|
4772
4824
|
if(typeof(data) == 'string'){
|
|
4773
4825
|
params = data; //payload 方式
|
|
@@ -4884,16 +4936,63 @@ var translate = {
|
|
|
4884
4936
|
//打印翻译结果
|
|
4885
4937
|
console.log(data);
|
|
4886
4938
|
});
|
|
4939
|
+
|
|
4940
|
+
使用案例三:
|
|
4941
|
+
var obj = {
|
|
4942
|
+
from:'chinese_simplified',
|
|
4943
|
+
to:'english',
|
|
4944
|
+
texts: ['我是翻译的第一句','我是翻译的第二句','我是翻译的第三句']
|
|
4945
|
+
}
|
|
4946
|
+
translate.request.translateText(obj, function(data){
|
|
4947
|
+
//打印翻译结果
|
|
4948
|
+
console.log(data);
|
|
4949
|
+
});
|
|
4887
4950
|
*/
|
|
4888
|
-
translateText:function(
|
|
4889
|
-
|
|
4890
|
-
|
|
4951
|
+
translateText:function(obj, func){
|
|
4952
|
+
var texts = new Array();
|
|
4953
|
+
var from = translate.language.getLocal();
|
|
4954
|
+
var to = translate.language.getCurrent();
|
|
4955
|
+
|
|
4956
|
+
if(typeof(obj) == 'string'){
|
|
4957
|
+
//案例一的场景,传入单个字符串
|
|
4958
|
+
texts[0] = [obj];
|
|
4959
|
+
}else{
|
|
4960
|
+
//不是字符串了,而是对象了,判断是案例二还是案例三
|
|
4961
|
+
|
|
4962
|
+
var type = Object.prototype.toString.call(obj);
|
|
4963
|
+
//console.log(type);
|
|
4964
|
+
if(type == '[object Array]'){
|
|
4965
|
+
//案例二
|
|
4966
|
+
texts = obj;
|
|
4967
|
+
}else if(type == '[object Object]'){
|
|
4968
|
+
//案例三
|
|
4969
|
+
if(typeof(obj.texts) == 'undefined'){
|
|
4970
|
+
console.log('translate.request.translateText 传入的值类型异常,因为你没有传入 obj.texts 要翻译的具体文本! 请查阅文档: https://translate.zvo.cn/4077.html');
|
|
4971
|
+
}
|
|
4972
|
+
if(typeof(obj.texts) == 'string'){
|
|
4973
|
+
//单个字符串
|
|
4974
|
+
texts = [obj.texts];
|
|
4975
|
+
}else{
|
|
4976
|
+
//多个字符串,数组形态
|
|
4977
|
+
texts = obj.texts;
|
|
4978
|
+
}
|
|
4979
|
+
if(typeof(obj.from) == 'string' && obj.from.length > 0){
|
|
4980
|
+
from = obj.from;
|
|
4981
|
+
}
|
|
4982
|
+
if(typeof(obj.to) == 'string' && obj.to.length > 0){
|
|
4983
|
+
to = obj.to;
|
|
4984
|
+
}
|
|
4985
|
+
}else{
|
|
4986
|
+
console.log('translate.request.translateText 传入的值类型错误,请查阅文档: https://translate.zvo.cn/4077.html');
|
|
4987
|
+
return;
|
|
4988
|
+
}
|
|
4891
4989
|
}
|
|
4990
|
+
|
|
4892
4991
|
|
|
4893
4992
|
var url = translate.request.api.translate;
|
|
4894
4993
|
var data = {
|
|
4895
|
-
from:
|
|
4896
|
-
to:
|
|
4994
|
+
from:from,
|
|
4995
|
+
to: to,
|
|
4897
4996
|
text:encodeURIComponent(JSON.stringify(texts))
|
|
4898
4997
|
};
|
|
4899
4998
|
//console.log(data);
|
|
@@ -5294,6 +5393,12 @@ var translate = {
|
|
|
5294
5393
|
//主节点额外权重降低,更追求响应速度
|
|
5295
5394
|
translate.request.speedDetectionControl.hostMasterNodeCutTime = 300;
|
|
5296
5395
|
translate.request.api.host=['https://america-enterprise-api-translate.zvo.cn/','https://beijing.enterprise.api.translate.zvo.cn/','https://deutsch.enterprise.api.translate.zvo.cn/', 'https://america.api.translate.zvo.cn:666/', 'https://api.translate.zvo.cn:666/', 'https://api.translate.zvo.cn:888/'];
|
|
5396
|
+
|
|
5397
|
+
if(translate.service.name == 'client.edge'){
|
|
5398
|
+
translate.service.name = 'translate.service';
|
|
5399
|
+
console.log('您已启用了企业级翻译通道 translate.enterprise.use(); (文档:https://translate.zvo.cn/4087.html) , 所以您设置的 translate.service.use(\'client.edge\'); (文档:https://translate.zvo.cn/4081.html) 将失效不起作用,有企业级翻译通道全部接管。');
|
|
5400
|
+
return;
|
|
5401
|
+
}
|
|
5297
5402
|
},
|
|
5298
5403
|
/*
|
|
5299
5404
|
自动适配翻译服务通道,如果当前所有网络节点均不可用,会自动切换到 edge.client 进行使用
|
|
@@ -5311,7 +5416,9 @@ var translate = {
|
|
|
5311
5416
|
translate.service.name = 'client.edge';
|
|
5312
5417
|
}
|
|
5313
5418
|
}
|
|
5314
|
-
}
|
|
5419
|
+
},
|
|
5420
|
+
/* 企业级翻译通道的key, v3.12.3.20250107 增加,针对打包成APP的场景 */
|
|
5421
|
+
key:'',
|
|
5315
5422
|
},
|
|
5316
5423
|
|
|
5317
5424
|
/*
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "i18n-jsautotranslate",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.5",
|
|
4
4
|
"description": "Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly!",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"version": "node dev/update-version.js",
|
|
8
8
|
"postversion": "git push && git push --tags"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"i18n-translatejs"
|
|
14
14
|
],
|
|
15
15
|
"files": [
|
|
16
|
-
"
|
|
16
|
+
"index.js"
|
|
17
17
|
],
|
|
18
18
|
"homepage": "https://github.com/xnx3/translate#readme",
|
|
19
19
|
"bugs": {
|