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": {
         |