i18n-jsautotranslate 3.13.12 → 3.14.0
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 +14 -34
- package/index.js +139 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
</h4>
|
|
9
9
|
<h4 align="center">
|
|
10
10
|
简体中文 |
|
|
11
|
-
<a href="http://translate.zvo.cn/
|
|
12
|
-
<a href="http://translate.zvo.cn/
|
|
13
|
-
<a href="http://translate.zvo.cn/
|
|
14
|
-
<a href="http://translate.zvo.cn/
|
|
15
|
-
<a href="http://translate.zvo.cn/
|
|
16
|
-
<a href="http://translate.zvo.cn/
|
|
11
|
+
<a href="http://translate.zvo.cn/index.html?language=chinese_traditional">繁體中文</a> |
|
|
12
|
+
<a href="http://translate.zvo.cn/index.html?language=english">English</a> |
|
|
13
|
+
<a href="http://translate.zvo.cn/index.html?language=japanese">しろうと</a> |
|
|
14
|
+
<a href="http://translate.zvo.cn/index.html?language=russian">Русский язык</a> |
|
|
15
|
+
<a href="http://translate.zvo.cn/index.html?language=german">deutsch</a> |
|
|
16
|
+
<a href="http://translate.zvo.cn/index.html?language=french">Français</a>
|
|
17
17
|
</h4>
|
|
18
18
|
|
|
19
19
|
# 特性说明
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
* **[增加对指定标签的属性进行翻译](http://translate.zvo.cn/231504.html)**,可以增加对指定html标签的某个或某些属性进行翻译。比如element、vue 等框架,有些自定义的标签属性,想让其也正常翻译
|
|
66
66
|
* **[本地语种也进行强制翻译](http://translate.zvo.cn/289574.html)**,切换为中文时,即使本地语种设置的是中文,网页中只要不是中文的元素,都会被翻译为要显示的语种
|
|
67
67
|
* **[自定义通过翻译API进行时的监听事件](http://translate.zvo.cn/379207.html)**,当通过翻译API进行文本翻译时的整个过程进行监听,做一些自定义处理,比如翻译API请求前要做些什么、请求翻译API完成并在DOM渲染完毕后触发些什么。
|
|
68
|
+
* **[启用翻译中的遮罩层](http://translate.zvo.cn/407105.html)**,在进行通过翻译API进行翻译时,相关元素上面显示一层加载中的动画效果,让用户知道这段文本正在进行处理中
|
|
68
69
|
|
|
69
70
|
# 在线体验
|
|
70
71
|
http://res.zvo.cn/translate/demo.html
|
|
@@ -139,6 +140,8 @@ translate.execute();//进行翻译
|
|
|
139
140
|
|
|
140
141
|
[详细使用说明](https://translate.zvo.cn/4041.html) | [Vue2 中使用 translate.js 在线 Demo](https://lruihao.github.io/vue-el-demo/#/translate-js)
|
|
141
142
|
|
|
143
|
+
|
|
144
|
+
|
|
142
145
|
# 谁在使用
|
|
143
146
|
|
|
144
147
|
开源项目:
|
|
@@ -186,20 +189,6 @@ tcdn是translate.js 的高级版本,它的能力是让你原本的网站可以
|
|
|
186
189
|
### 服务器部署
|
|
187
190
|
需要一个干净的服务器,不依赖任何环境的情况下进行的部署,需要你懂点linux命令行, 部署方式参考: [https://translate.zvo.cn/236899.html](https://translate.zvo.cn/236899.html)
|
|
188
191
|
|
|
189
|
-
# 开源仓库目录结构
|
|
190
|
-
* **deploy** - 部署相关,比如shell文件、sql数据库文件等
|
|
191
|
-
* **doc** - 一些文档相关
|
|
192
|
-
* **translate.admin** - [TCDN的管理后台,PC端的WEB管理后台,可以通过此添加翻译的源站、绑定别的域名及设置域名所展现的语言、针对翻译的过程中支持使用JavaScript脚本自定义调优,比如设置哪些不被翻译、设置一些自定义术语库等。并且提供了CDN的基本能力,比如根据URL清除缓存、根据域名清除缓存等。](http://translate.zvo.cn/41163.html)
|
|
193
|
-
* **translate.api** - [翻译开放接口,他不同于 translate service 的点在于 translate service 开放的是文本翻译接口,而 translate api 开放的是html翻译接口,你传入一个网页的url,它返回的是这个网页被翻译之后源码(此特性非常适合对不同语言上SEO优化)](http://translate.zvo.cn/41165.html)
|
|
194
|
-
* **translate.core** - [TCDN的公共模块,无具体功能]
|
|
195
|
-
* **translate.js** - [提供了针对html的分析及翻译能力。在现有的html页面中引入一个js可以快速实现当前页面语种切换的能力。且适配面非常广泛!只要是html的,它都能适配(包含VUE、uniapp等),在很多情况下,它是单独进行使用的,在你的老网站中加入几行js代码即可植入,使其快速具备语种切换能力。](http://translate.zvo.cn/4019.html)
|
|
196
|
-
* **translate.service** - [翻译服务,它对接了 小牛翻译、google翻译、华为云翻译 等翻译服务,如果需要别的翻译服务或者局域网无网环境下部署,也可以快速对接自有翻译接口。它的作用是开放文本翻译接口,将 translate.js中 需要翻译的文本传入,然后将翻译之后的文本输出。提供批量翻译能力(一个翻译请求可以包含数千段需要翻译的文本)。
|
|
197
|
-
并且它开放翻译接口,不止适用于 translate.js,你可以用在任何需要对接翻译接口的地方进行使用。其开放接口,说明参见:http://api.translate.zvo.cn/doc/translate.json.html](http://translate.zvo.cn/41164.html)
|
|
198
|
-
* **translate.user** - [TCDN 对用户开放访问的,当在 translate admin 中添加源站,并绑定域名指向某个语种后,用户访问这个域名时,便会访问进此,有此进行网页翻译的调度、缓存的处理等。当用户第一次访问某个页面时,缓存中没有,会通过 translate api 从源站获取网页源码,然后进行翻译,将翻译之后的html源码在此进行缓存,然后返回给用户浏览器进行显示。 当有用户在此访问这个页面时,便会直接从缓存中取。](http://translate.zvo.cn/41166.html)
|
|
199
|
-
|
|
200
|
-
其中每一个都是可以作为一个单独的项目进行使用,比如 translate.service 便可以作为文本翻译接口进行使用、translate.api 可以作为html文件翻译接口使用、translate.js 可以作为网页端直接嵌入几行js代码就能快速翻译来使用。
|
|
201
|
-
另外像是如果你网站已经配置好,不需要在使用 translate.admin 管理后台,你可以将此停掉,从而降低服务器资源的占用。
|
|
202
|
-
|
|
203
192
|
|
|
204
193
|
# 项目由来
|
|
205
194
|
2021年,translate 翻译服务项目创建,最初为简化Google网页翻译JS进行了封装,可以更简单进行使用,但是因为扩展极其有限,文档也没那么好,于是开始了重构。
|
|
@@ -259,22 +248,13 @@ tcdn是translate.js 的高级版本,它的能力是让你原本的网站可以
|
|
|
259
248
|
如果您在使用过程中遇到任何异常情况,请详细说一下您遇到的问题。如果可以,请写下您的网站,以便我们可以更全面地测试,以便快速找到问题所在
|
|
260
249
|
作者微信:xnx3com(使用交流可加QQ群进行,我看微信很不及时)
|
|
261
250
|
Telegram : [untran](https://t.me/untran)
|
|
262
|
-
交流QQ群:181781514
|
|
263
|
-
交流QQ群:641047127
|
|
264
|
-
交流QQ群:240567964
|
|
265
|
-
|
|
251
|
+
交流QQ群:181781514
|
|
252
|
+
交流QQ群:641047127
|
|
253
|
+
交流QQ群:240567964
|
|
254
|
+
作者邮箱:921153866@qq.com
|
|
266
255
|
微信公众号:wangmarket
|
|
267
256
|
github: [https://github.com/xnx3/translate](https://github.com/xnx3/translate)
|
|
268
|
-
gitee: [https://gitee.com/mail_osc/translate](https://gitee.com/mail_osc/translate)
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
# 寻找合作
|
|
272
|
-
寻找合作伙伴探讨盈利方式 - 以下全自有技术研发
|
|
273
|
-
|
|
274
|
-
1. html源码翻译开放API http://doc.zvo.cn/tcdn/api/doc.html
|
|
275
|
-
2. TCDN全自动网站源码级翻译,适合翻译后语种分别分配域名、进行SEO优化 http://translate.zvo.cn/236896.html
|
|
276
|
-
|
|
277
|
-
联系:17076012262(微信同号) 我们是纯技术团队,欢迎联系,希望能跟你探讨合作盈利商机,我们专心技术,您来拓展商务销售
|
|
257
|
+
gitee: [https://gitee.com/mail_osc/translate](https://gitee.com/mail_osc/translate)
|
|
278
258
|
|
|
279
259
|
|
|
280
260
|
# 商业化声明
|
package/index.js
CHANGED
|
@@ -13,8 +13,8 @@ var translate = {
|
|
|
13
13
|
* 由 npm 脚本自动更新,无需手动修改
|
|
14
14
|
* 格式:major.minor.patch.date
|
|
15
15
|
*/
|
|
16
|
-
// AUTO_VERSION_START
|
|
17
|
-
version: '3.
|
|
16
|
+
// AUTO_VERSION_START
|
|
17
|
+
version: '3.14.0.20250326',
|
|
18
18
|
// AUTO_VERSION_END
|
|
19
19
|
/*
|
|
20
20
|
当前使用的版本,默认使用v2. 可使用 setUseVersion2();
|
|
@@ -895,7 +895,8 @@ var translate = {
|
|
|
895
895
|
translate.listener.addListener();
|
|
896
896
|
}
|
|
897
897
|
|
|
898
|
-
|
|
898
|
+
//执行完过一次,那才能使用
|
|
899
|
+
//if(translate.listener.isExecuteFinish){
|
|
899
900
|
/*if(translate.listener.isStart){
|
|
900
901
|
//已开启了
|
|
901
902
|
return;
|
|
@@ -1427,7 +1428,8 @@ var translate = {
|
|
|
1427
1428
|
|
|
1428
1429
|
//execute() 方法已经被执行过多少次了, 只有execute() 完全执行完,也就是界面渲染完毕后,它才会+1
|
|
1429
1430
|
executeNumber:0,
|
|
1430
|
-
|
|
1431
|
+
|
|
1432
|
+
/*translate.execute() start */
|
|
1431
1433
|
/*
|
|
1432
1434
|
执行翻译操作。翻译的是 nodeQueue 中的
|
|
1433
1435
|
docs 如果传入,那么翻译的只是传入的这个docs的。传入如 [document.getElementById('xxx'),document.getElementById('xxx'),...]
|
|
@@ -2038,18 +2040,21 @@ var translate = {
|
|
|
2038
2040
|
//console.log(data);
|
|
2039
2041
|
//console.log(translateTextArray[data.from]);
|
|
2040
2042
|
if(data.result == 0){
|
|
2041
|
-
translate.translateRequest[uuid][
|
|
2042
|
-
|
|
2043
|
-
|
|
2043
|
+
if(typeof(translate.translateRequest[uuid]) == 'object' && typeof(translate.translateRequest[uuid][data.from]) == 'object'){
|
|
2044
|
+
translate.translateRequest[uuid][data.from]['result'] = 2;
|
|
2045
|
+
translate.translateRequest[uuid][data.from].executeFinish = 1; //1是执行完毕
|
|
2046
|
+
translate.translateRequest[uuid][data.from].stoptime = Math.floor(Date.now() / 1000);
|
|
2047
|
+
}else{
|
|
2048
|
+
console.log('WARINNG!!! translate.translateRequest[uuid][data.from] is not object');
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2044
2051
|
translate.waitingExecute.isAllExecuteFinish(uuid);
|
|
2045
2052
|
console.log('=======ERROR START=======');
|
|
2046
2053
|
console.log(translateTextArray[data.from]);
|
|
2047
2054
|
//console.log(encodeURIComponent(JSON.stringify(translateTextArray[data.from])));
|
|
2048
|
-
|
|
2049
2055
|
console.log('response : '+data.info);
|
|
2050
2056
|
console.log('=======ERROR END =======');
|
|
2051
2057
|
//translate.temp_executeFinishNumber++; //记录执行完的次数
|
|
2052
|
-
|
|
2053
2058
|
return;
|
|
2054
2059
|
}
|
|
2055
2060
|
|
|
@@ -2133,6 +2138,7 @@ var translate = {
|
|
|
2133
2138
|
/*** 翻译end ***/
|
|
2134
2139
|
}
|
|
2135
2140
|
},
|
|
2141
|
+
/*translate.execute() end */
|
|
2136
2142
|
|
|
2137
2143
|
/**
|
|
2138
2144
|
* 翻译请求记录
|
|
@@ -3554,6 +3560,7 @@ var translate = {
|
|
|
3554
3560
|
number 阿拉伯数字
|
|
3555
3561
|
japanese 日语
|
|
3556
3562
|
korean 韩语
|
|
3563
|
+
greek 希腊语
|
|
3557
3564
|
*/
|
|
3558
3565
|
getCharLanguage:function(charstr){
|
|
3559
3566
|
if(charstr == null || typeof(charstr) == 'undefined'){
|
|
@@ -3590,6 +3597,9 @@ var translate = {
|
|
|
3590
3597
|
if(this.korean(charstr)){
|
|
3591
3598
|
return 'korean';
|
|
3592
3599
|
}
|
|
3600
|
+
if(this.greek(charstr)){
|
|
3601
|
+
return 'greek';
|
|
3602
|
+
}
|
|
3593
3603
|
|
|
3594
3604
|
//未识别是什么语种
|
|
3595
3605
|
//console.log('not find is language , char : '+charstr+', unicode: '+charstr.charCodeAt(0).toString(16));
|
|
@@ -3921,6 +3931,16 @@ var translate = {
|
|
|
3921
3931
|
return false;
|
|
3922
3932
|
}
|
|
3923
3933
|
},
|
|
3934
|
+
//是否包含希腊语
|
|
3935
|
+
greek:function(str){
|
|
3936
|
+
const greekRegex = /^[\u0391-\u03A9\u03B1-\u03C9]$/;
|
|
3937
|
+
//判断字符有 БВДЖЗИЙЛМНОПСТУФХЦЧШЩЪЫЬЮЯЇІ
|
|
3938
|
+
if(/^[\u0391-\u03A9\u03B1-\u03C9]$/.test(str)){
|
|
3939
|
+
return true
|
|
3940
|
+
} else {
|
|
3941
|
+
return false;
|
|
3942
|
+
}
|
|
3943
|
+
},
|
|
3924
3944
|
//0-9 阿拉伯数字
|
|
3925
3945
|
number:function(str){
|
|
3926
3946
|
if(/.*[\u0030-\u0039]+.*$/.test(str)){
|
|
@@ -3994,6 +4014,7 @@ var translate = {
|
|
|
3994
4014
|
|
|
3995
4015
|
return maxLang || '';
|
|
3996
4016
|
},
|
|
4017
|
+
/**romanceSentenceAnaly end**/
|
|
3997
4018
|
|
|
3998
4019
|
//是否包含特殊字符,包含,则是true
|
|
3999
4020
|
specialCharacter:function(str){
|
|
@@ -4219,7 +4240,72 @@ var translate = {
|
|
|
4219
4240
|
|
|
4220
4241
|
|
|
4221
4242
|
return false;
|
|
4222
|
-
}
|
|
4243
|
+
},
|
|
4244
|
+
/*
|
|
4245
|
+
文本翻译的替换。
|
|
4246
|
+
|
|
4247
|
+
|
|
4248
|
+
text: 原始文本,翻译的某句或者某个词就在这个文本之中
|
|
4249
|
+
translateOriginal: 翻译的某个词或句,在翻译之前的文本
|
|
4250
|
+
translateResult: 翻译的某个词或句,在翻译之后的文本,翻译结果
|
|
4251
|
+
language: 显示的语种,这里是对应的 translateResult 这个文本的语种。 也就是最终替换之后要显示给用户的语种。比如将中文翻译为英文,这里也就是英文。 这里会根据显示的语种不同,来自主决定是否前后加空格进行分割。 另外这里传入的语种也是 translate.js 的语种标识
|
|
4252
|
+
|
|
4253
|
+
(注意,如果 translateResult 中发现 translateOriginal 的存在,将不进行任何处理,因为没必要了,还会造成死循环。直接将 text 返回)
|
|
4254
|
+
|
|
4255
|
+
使用此方法:
|
|
4256
|
+
var text = '你世好word世界';
|
|
4257
|
+
var translateOriginal = '世';
|
|
4258
|
+
var translateResult = 'shi'; //翻译结果
|
|
4259
|
+
translate.language.textTranslateReplace(text, translateOriginal, translateResult, 'english');
|
|
4260
|
+
|
|
4261
|
+
*/
|
|
4262
|
+
textTranslateReplace:function(text, translateOriginal, translateResult, language){
|
|
4263
|
+
if(translateResult.indexOf(translateOriginal) > -1){
|
|
4264
|
+
return text;
|
|
4265
|
+
}
|
|
4266
|
+
|
|
4267
|
+
|
|
4268
|
+
let replaceResultText = ''+translateResult; //要替换的结果文本(这个文本可能前面有加空格或者后面有加空格的)
|
|
4269
|
+
|
|
4270
|
+
if(translate.language.wordBlankConnector(translate.to)){
|
|
4271
|
+
let originalIndex = text.indexOf(translateOriginal); //翻译之前,翻译的单词在字符串中的其实坐标(0开始)
|
|
4272
|
+
//console.log("originalIndex: "+originalIndex);
|
|
4273
|
+
|
|
4274
|
+
//要先判断后面,不然先判断前面,加了后它的长度就又变了
|
|
4275
|
+
|
|
4276
|
+
//判断它后面是否还有文本
|
|
4277
|
+
if(originalIndex+1 < text.length){
|
|
4278
|
+
let char = text.charAt(originalIndex+translateOriginal.length);
|
|
4279
|
+
//console.log(char);
|
|
4280
|
+
if(!(/\s/.test(char))){
|
|
4281
|
+
//不是空白字符,补充上一个空格,用于将两个单词隔开
|
|
4282
|
+
//text = text.replace(translateOriginal, translateResult+' ');
|
|
4283
|
+
replaceResultText = replaceResultText + ' ';
|
|
4284
|
+
}
|
|
4285
|
+
}
|
|
4286
|
+
|
|
4287
|
+
//判断它前面是否还有文本
|
|
4288
|
+
if(originalIndex > 0){
|
|
4289
|
+
let char = text.charAt(originalIndex-1);
|
|
4290
|
+
//console.log(char);
|
|
4291
|
+
if(!(/\s/.test(char))){
|
|
4292
|
+
//不是空白字符,补充上一个空格,用于将两个单词隔开
|
|
4293
|
+
//text = text.replace(translateOriginal, ' '+translateResult);
|
|
4294
|
+
replaceResultText = ' '+replaceResultText;
|
|
4295
|
+
}
|
|
4296
|
+
}
|
|
4297
|
+
}
|
|
4298
|
+
let resultText = text.replace(translateOriginal, replaceResultText);
|
|
4299
|
+
|
|
4300
|
+
if(resultText.indexOf(translateOriginal) > -1){
|
|
4301
|
+
//还有第二个、第三个单词一样,也要替换
|
|
4302
|
+
//console.log(this);
|
|
4303
|
+
resultText = this.textTranslateReplace(resultText, translateOriginal, translateResult, language);
|
|
4304
|
+
}
|
|
4305
|
+
|
|
4306
|
+
//console.log(resultText);
|
|
4307
|
+
return resultText;
|
|
4308
|
+
}
|
|
4223
4309
|
},
|
|
4224
4310
|
//用户第一次打开网页时,自动判断当前用户所在国家使用的是哪种语言,来自动进行切换为用户所在国家的语种。
|
|
4225
4311
|
//如果使用后,第二次在用,那就优先以用户所选择的为主
|
|
@@ -4421,6 +4507,7 @@ var translate = {
|
|
|
4421
4507
|
objSort:function(obj){
|
|
4422
4508
|
// 获取对象数组的所有 key,并转换为普通数组
|
|
4423
4509
|
var keys = Array.from(Object.keys(obj));
|
|
4510
|
+
//var keys = [].slice.call(Object.keys(obj)); //适配es5
|
|
4424
4511
|
|
|
4425
4512
|
// 对 key 数组进行排序
|
|
4426
4513
|
keys.sort(function(a, b){
|
|
@@ -4790,6 +4877,44 @@ var translate = {
|
|
|
4790
4877
|
|
|
4791
4878
|
//将其转化为 translate.js 的语言id,比如简体中文是 chinese_simplified 、 英语是 english
|
|
4792
4879
|
return '';
|
|
4880
|
+
},
|
|
4881
|
+
/*
|
|
4882
|
+
对输入的文本 text 进行判断,判断它里面是否有url存在。如果有url存在,对其进行截取,将url跟非url进行截取处理。
|
|
4883
|
+
比如传入 “这个示例:https://www.ungm.org/Public/Notice/261001,其他得示例是 http://api.translate.zvo.cn 我呢”
|
|
4884
|
+
那么返回的截取结果为:
|
|
4885
|
+
{
|
|
4886
|
+
"https://www.ungm.org/Public/Notice/261001":"1",
|
|
4887
|
+
"http://api.translate.zvo.cn":"1",
|
|
4888
|
+
",其他得示例是 ":"0",
|
|
4889
|
+
"这个示例:":"0"
|
|
4890
|
+
" 我呢":"0"
|
|
4891
|
+
}
|
|
4892
|
+
其中的key 为截取的文本,value 的值是1或0, 1代表当前key的文本是网址,0则不是网址
|
|
4893
|
+
*/
|
|
4894
|
+
urlSplitByText:function(text){
|
|
4895
|
+
// 匹配 http/https 的 URL 正则表达式(包含常见 URL 符号,排除中文等非 ASCII 字符)
|
|
4896
|
+
const urlRegex = /(https?:\/\/[\w\-._~:\/?#[\]@!$&'()*+;=%]+(?=[\s\u4e00-\u9fa5,。;,!?]|$))/gi;
|
|
4897
|
+
|
|
4898
|
+
// 使用正则表达式分割文本,保留URL
|
|
4899
|
+
const parts = text.split(urlRegex);
|
|
4900
|
+
|
|
4901
|
+
// 结果对象
|
|
4902
|
+
let result = {};
|
|
4903
|
+
|
|
4904
|
+
// 添加非URL部分,并标记为 0
|
|
4905
|
+
for (let i = 0; i < parts.length; i++) {
|
|
4906
|
+
if (i % 2 === 0) {
|
|
4907
|
+
// 非URL部分
|
|
4908
|
+
if (parts[i] !== "") {
|
|
4909
|
+
result[parts[i]] = "0";
|
|
4910
|
+
}
|
|
4911
|
+
} else {
|
|
4912
|
+
// URL部分
|
|
4913
|
+
result[parts[i]] = "1";
|
|
4914
|
+
}
|
|
4915
|
+
}
|
|
4916
|
+
|
|
4917
|
+
return result;
|
|
4793
4918
|
}
|
|
4794
4919
|
},
|
|
4795
4920
|
//机器翻译采用哪种翻译服务
|
|
@@ -5940,6 +6065,7 @@ var translate = {
|
|
|
5940
6065
|
|
|
5941
6066
|
/*
|
|
5942
6067
|
翻译执行的进展相关
|
|
6068
|
+
比如,浏览器本地缓存没有,需要走API接口的文本所在的元素区域,出现 记载中的动画蒙版,给用户以友好的使用提示
|
|
5943
6069
|
*/
|
|
5944
6070
|
progress:{
|
|
5945
6071
|
/*
|
|
@@ -6143,7 +6269,7 @@ var translate = {
|
|
|
6143
6269
|
|
|
6144
6270
|
return kvs;
|
|
6145
6271
|
}
|
|
6146
|
-
|
|
6272
|
+
/*jsObject end*/
|
|
6147
6273
|
|
|
6148
6274
|
|
|
6149
6275
|
}
|
|
@@ -6218,6 +6344,7 @@ var nodeuuid = {
|
|
|
6218
6344
|
}
|
|
6219
6345
|
console.log('------ translate.js ------\nTwo lines of js html automatic translation, page without change, no language configuration file, no API Key, SEO friendly! Open warehouse : https://github.com/xnx3/translate \n两行js实现html全自动翻译。 无需改动页面、无语言配置文件、无API Key、对SEO友好!完全开源,代码仓库:https://gitee.com/mail_osc/translate');
|
|
6220
6346
|
|
|
6347
|
+
/*兼容 AMD、CMD、CommonJS 规范 - start*/
|
|
6221
6348
|
/**
|
|
6222
6349
|
* 兼容 AMD、CMD、CommonJS 规范
|
|
6223
6350
|
* node 环境使用:`npm i i18n-jsautotranslate` 安装包
|
|
@@ -6233,3 +6360,4 @@ console.log('------ translate.js ------\nTwo lines of js html automatic translat
|
|
|
6233
6360
|
})(this, function () {
|
|
6234
6361
|
return translate;
|
|
6235
6362
|
});
|
|
6363
|
+
/*兼容 AMD、CMD、CommonJS 规范 - end*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "i18n-jsautotranslate",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.14.0",
|
|
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
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|