• 私有化部署

    [TOC] ## 私有部署优势 * **翻译质量**:你可以使用更大尺寸的模型,比如qwen3-32B、hunyua-mt 等,让翻译语句更通顺,拥有极高的阅读体验。 * **极速响应**:可启用 内存缓存 来极大提高文本翻译API的响应速度,百毫秒的响应,提升使用体验。 * **用量限制**:可针对某个域名(或者开通API接口的key)来设定它的 用量限制 ,如果你是网络公司,你可以以套餐的形式卖给使用用户。 * **管理接口**:可以通过开放的 管理API接口 ,来实时获取当前有哪些域名(或 key)在使用、翻译的字符数有多少、等等。 * **数据隐私**:接口请求、缓存数据等完全都在自己的服务器上,数据隐私无需担忧。 * **并发控制**:可自由定义每秒的并发请求上限,以及调用大模型进行翻译时请求线程池的线程上限,以极大缩减接口等待的耗时。另还可以通过管理接口实时获取当前请求线程池的并发数等 [更多能力可点此查看](https://gitee.com/mail_osc/translate/blob/master/doc/translate.service/ability.md) ## 部署 #### 服务器规格 * **CPU**:1核 * **架构**:x86_64 (也就是 Intel 的CPU ) * **内存**:1G * **操作系统**: 1. CentOS 7.4 (这个版本没有可选 7.6 、7.2 等,7.x 系列的都可以) 1. openEulor 20 (如果没有 20 版本那就选 22 版本) 1. RockyLinux 8 1. EulerOS 2.0 * **系统盘**:默认的系统盘就行。无需数据盘 * **弹性公网IP**:按流量计费(带宽大小10MB。如果你只是你自己用,翻译的量不大,你完全可以选1MB带宽) * **所在区域**: 服务器所在区域最好选海外,比如美国、新加坡等,最好不要选中国大陆及香港服务器。(如果你的翻译服务也私有部署,区域无任何限制。) * 其他的未注明的,都按照怎么省钱怎么来选即可。 ##### 备注 这里会有多个型号,比如什么s3、s6、t6的,你就选最便宜的就行。(一般t6是最便宜的,选它就行)。另外有什么轻量级了啥的,就选价格便宜的轻量级服务器。 安全组:要开放22、80这两个端口。如果你想自定义端口号,可以部署完后 [单独设置端口号](398202.html) #### 前提 一定要干净的服务器,不要装乱七八糟的宝塔了、什么面板了、乱七八糟的东西!!! #### 1. 一键部署 执行以下shell命令进行一键部署。 ```` yum -y install wget && wget https://gitee.com/mail_osc/translate/raw/master/deploy/service.sh -O ~/install.sh && chmod -R 777 ~/install.sh && sh ~/install.sh ```` #### 2. 使用测试 直接访问你的服务器 ip,即可看到一个引导安装的提示,按照提示进行即可完成整个安装。 安装完后,可以随便选个语种切换一下试试。 (如果你是无网络环境下的部署,可私有部署大模型等方式来完成纯局域网的使用,这个是收费服务,具体可联系我们 [http://translate.zvo.cn/4030.html](4030.html)) ## 使用 #### 快速使用 在网页最末尾, ```````` 之前,加入以下代码,一般在页面的最底部就出现了选择语言的 select 切换标签,你可以点击切换语言试试切换效果 ```` ```` 如此,翻译请求接口就会走您自己服务器了。有关这个手动指定翻译接口的详细说明,可参考: http://translate.zvo.cn/4068.html 另外 https://res.wang.market/translate/translate.js 这个js文件你可以自己下载下来放到你自己项目里使用,它没有任何别的依赖,是标准的原生 JavaScript #### 原理说明 它是直接扫描你网页的dom元素进行自动分析识别,然后将文本集中化进行翻译。也就是你要讲这个 translate.execute(); 这行要放在最底部,就是因为上面的渲染完了在执行它,可以直接触发整个页面的翻译。 另外它提供三四十个微调指令,比如[切换语言select选择框的自定义及美化](https://translate.zvo.cn/4056.html)、[自动识别并切换为用户所使用的语种](https://translate.zvo.cn/4065.html)、 [图片翻译](https://translate.zvo.cn/4055.html)、[自定义术语](https://translate.zvo.cn/4070.html)、[只翻译哪些元素](https://translate.zvo.cn/4063.html)、[哪些元素不被翻译](https://translate.zvo.cn/4061.html)、[网页中有ajax请求时请求完毕自动触发翻译](https://translate.zvo.cn/4086.html)、[网页中dom发生改动后自动触发翻译](https://translate.zvo.cn/4067.html) …… 等等,只要你想的,它都能支持你做到!如果做不到,你可以反馈我,我给你扩展上让它能做到。 ## 扩展 [你可以自由切换翻译通道为智谱AI、DeepSeek、小牛翻译、华为云翻译、……](391752.html) [付费企业版本,开启内存缓存、频率控制、字符统计、域名白名单等能力](391753.html) ## 文本翻译API 请求 URL :http://你的服务器 ip/translate.json 请求方式 :POST 请求参数 : * **to** 将文本翻译为什么语种。可传入如 english 更多语种可访问 http://你服务器的 ip/language.json 就能看到 * **text** 需要翻译的语言。格式如 ["你好","世界"] 它是 json 数组格式,支持一次翻译多个不同的文本,每个文本可以分别是不同的语言。 响应示例 : ```` {"result":1,"info":"success","to":"english","text":["Hello","World"]} ```` 注意,header 头的 Content-Type 要么不设置,如果设置的话值是 application/x-www-form-urlencoded **curl 翻译示例:** 为了方便理解上面的 API 接口使用,这里给出了一个 curl 请求的示例,另外这个示例你也可以直接复制就能运行使用,看到效果 ```` curl --request POST --url https://api.translate.zvo.cn/translate.json --header 'content-type: application/x-www-form-urlencoded' --data to=english --data 'text=["你好,世界","让我们探索星辰大海"]' ```` 你可以将其中的请求url换成你自己的服务器ip进行测试。 ## 注意 这里部署的是http访问的,如果你网站是https的,可能ajax请求时会被拦,这时你就要自己给translate.service配置上https访问了,配置的方式比如 开通个CDN了、或者想办法弄个nginx进行中专,在nginx上配置https 等等。
  • domain.json 配置

    [TOC] 可以理解为域名白名单,它的作用有: 1. 别人想使用你私有部署的 translate.service 提供的文本翻译API,你可以卖给他,给他开一个key,设置一个限制。 1. 某个网站使用了 translate.js ,他网站想使用你私有部署的 translate.service 服务,你可以将他网站的域名加入进来,给他设一个上限。 ## 使用说明 开源免费版本部署的 translate.service 它是没有什么鉴权的,也就是任何人都能访问到。 而 domain.json 则是付费版本才有的能力(如果你是免费版本,没有配置授权码,即使你修改了 domain.json 的内容,也不会起作用的) #### 第一步 /mnt/service/config.properties 配置文件增加一行设置: ```` public.dayMaxSize=10000 ```` 这个意思是, translate.service 服务,也就是它的 /translate.json 开放API接口,如果是陌生人进行使用,也就是没出现在 domain.json 配置中的网站域名使用,它每日允许使用的最大上限就只能翻译10000字符。 如果你不想给陌生人使用,那就把它设置为 0 即可。 这样只要不是出现在 domain.json 中的,将无法使用它提供的翻译能力。 注意,默认是没有这个配置的,也就是默认不配置的情况下, 1. 如果你是未付费授权的用户,使用的是开源免费版本,那么它是不会有什么限制的,即使你配置了 public.dayMaxSize 它也不会生效的。 1. 如果你是付费授权用户,已配置了授权码,那么这里默认是 100 ,就是为了避免你忘记配置此处,被别人给恶意利用了。 #### 第二步 假设网站 english.zvo.cn 使用了 translate.js ,他吧翻译通道配置成了你私有部署的 translate.service ,那么他网站进行使用语言切换的时候,会使用你私有部署的 translate.service 来进行提供翻译服务。 比如你要设置他的网站 english.zvo.cn 这个域名: 1. 每日最大允许使用的翻译字符数是 5000000 1. 可以使用内存来作为缓存,最大缓存翻译结果的文字 100000000 个字符 那么就可以增加这么一个配置: ```` { "dayMaxSize": 5000000, "domain": "english.zvo.cn", "maxCacheFileSize": 0, "maxCacheMemorySize": 100000000 } ```` 解释: * **domain** : 域名。 * 示例里是 http://english.zvo.cn/ 这个网站,但是如果网站是 http://english.zvo.cn:8080/ 它携带了一个端口号,那么这里配置的域名依旧是 english.zvo.cn 不用管端口号,这个域名的任何端口号都可以使用。 * 但是如果配置的是 english.zvo.cn, 而你网站访问 www.zvo.cn 那是不匹配,用不了的。 * 像是测试期间ip访问的,比如 http://192.168.31.95:8080/xx.html 这种的,那这里配置 192.168.31.95 即可。 * 如果你给人开放文本翻译API,这里你可以自己生成一个随机字符串作为key填写进去,比如填写 2c5105911c1340fda538a066b6c86b 那你把这个给人家,人家就能用这个作为key,来调用你的文本翻译API接口来进行使用了。 * 需要注意的是key只能是英文数字的组合,不能有除了英文数字之外的其他字符!有关API接口的使用可以参考: https://translate.zvo.cn/4040.html 只不过把这里面的请求域名换成了你自己部署translate.service 的ip就可以了。 * **dayMaxSize** : 每日的最大翻译字符数的上限,超过这个上限将无法使用。 * **maxCacheMemorySize** : 可使用内存进行缓存的最大字符数。这里缓存的字符数是按照翻译之后的字符数来计算的,并不是翻译前的文本字符数。内存缓存中的翻译结果如果超过这个字符数,将不会再存储新的翻译结果。如果设置为0,则是不启用。 其中 dayMaxSize、maxCacheMemorySize、maxCacheFileSize 这几个数值,最大允许填写的上限是 9223372036854775807 完整的 /mnt/service/domain.json 配置如下所示: ```` [ { "dayMaxSize": 50000, "domain": "localhost", "maxCacheFileSize": 50000, "maxCacheMemorySize": 100 }, { "dayMaxSize": 3000, "domain": "abc.zvo.cn", "maxCacheFileSize": 50000, "maxCacheMemorySize": 54545 }, { "dayMaxSize": 100, "domain": "192.168.31.95", "maxCacheFileSize": 50000, "maxCacheMemorySize": 54545 } , { "dayMaxSize": 3000, "domain": "unknow", "maxCacheFileSize": 50000, "maxCacheMemorySize": 54545 } ] ```` 它是一个json数组的格式,可以配置多个域名规则。 ## 生效 * v3.14.23.20250426 及更早的版本,将另外它配置后无需重启 translate.service ,配置完成,将在1分钟后自动生效。 * v3.14.23.20250426 之后的新版本,不会自动生效,需要重启 translate.service 才会生效。 推荐采用 /admin/domain/set.json 进行设置并实时生效。 ## 高级说明 v3.14.23.20250426 之后的新版本,可以针对每个 域名/key 进行设置其使用哪个通道。 在domain的某项里,增加: ```` "serviceChannelConfig":{ "name":"leimingyun", "domain":"http://27.12.12.12:80" } ```` 其中: * **name** 是通道名字。这个是固定的必须有的,表示翻译服务使用的是哪个通道,通道名字。 比如值有 google、glm、leimingyun、deepSeek、giteeAI、huawei、niutrans、libreTranslate ... 等等 * 其他参数便是这个通道的其他配置参数。 完整示例: ```` { "dayMaxSize": 100, "domain": "192.168.31.95", "maxCacheFileSize": 50000, "maxCacheMemorySize": 54545, "serviceChannelConfig":{ "name":"leimingyun", "domain":"http://27.12.12.12:80" } } ```` ## 根据翻译接口的响应头来判定是否缓存命中及字符使用 [首先,translate.js - translate.service 整个系统有三级缓存,这三级缓存不太了解的,可以先点此查看一下,大概有个了解。](4026.html) 查看方式:审核元素,然后随便翻译一下,找到 translate.json 的请求,如下图所示 ![](//cdn.weiunity.com/site/7464/news/a3f87532ad4f40b1a1de62c0c46cb360.png) * **day_current_size** 是今天这个网站已经使用的翻译字符数 * **day_max_size** 是当前的字符限制上限,你这个域名每天能翻译多少字符 当你配置了domain.json 后,不确定是否生效,可以通过这里来进行验证。 #### 当前翻译接口是否命中文件缓存 ![](https://translate.zvo.cn/fileupload/2025/07/02/06021528d77445c89f678f7f0d3ea86d.png) * **day_current_size** 响应头中出现 filecachehit:true 则表示当前翻译请求已命中文件缓存。 当 text 的内容被翻译过一次后,就会将其加入文件缓存(磁盘IO),当同样的 text 内容在进行翻译时,目标语言一致的情况下,它会直接从文件缓存中取出,进行响应。 当命中文件缓存时,服务器的性能使用是非常低的,它将不再进行预处理、分词、内存处理、各种处理等,直接进行返回。所以它的响应时间也是极快,一般几十毫秒(如果是几百毫秒可能是因为使用了代理,因网络中转产生了时间消耗) #### 怎么判断当前翻译接口是否有命中内存缓存 ![](https://translate.zvo.cn/fileupload/2025/07/02/5d3279ffe8d0423cbe0e17c613400863.png) 响应标头中: * **memorycachehitsnumber** 当前命中的内存缓存的翻译文本条数。 注意,它并不是完全跟你传入要翻译的 text 要翻译的json数组一样,比如你 text 中传入的json数组是有三项,也就是三条翻译的文本,传入 translate.json 接口后,翻译服务会自动对其进行预处理、分词、等一系列操作,有可能预处理完毕后,经过拆分,它可能变成了5条要翻译的文本(也有可能经过预处理,发现有的是不需要进行翻译的,可能变成了2条要进行翻译的文本)。 然后将预处理之后的5条文本,再进行内存缓存的命中(如果启用了内存缓存),比如这里命中了4条,那这里的数字就是4。 这时你会发现,你text实际才传入了3条,它确命中了4条,是因为这个原因。 一般情况下,你实际传入的text的条数,跟预处理后实际要进行翻译的条数,是差不多的,不会相差太多,也就是并不会产生倍数的差距。 另外,有这个参数,并且值大于0,也代表当前请求已经命中了内存缓存。 * **memorycachehitssize** 当前命中内存缓存的字符数。 同memorycachehitsnumber这个参数一样,它也是先经过预处理后,在进行的缓存命中,也就是预处理之后的要翻译的字符数,一定是小于等于 text 本身传入的字符数的。 响应头中有这个参数,并且值大于0,也代表当前请求已经命中了内存缓存。
  • 配置翻译通道

    后端翻译的通道,其实就是文本翻译采用哪一方提供文本翻译能力。 ## 第一步,将原本的翻译通道注释掉 首先,找到配置文件 /mnt/service/config.properties 编辑它,找到 ```` translate.service.leimingyun.domain=http://api.translate.zvo.cn ```` 这个,将它注释掉 ,这个为了快速部署体验,默认内置的是我们自己的文本翻译通道。所以你如果要切换其他的翻译通道,需要将我们这个先注释掉。 ## 第二步,配置你想对接的翻译通道 * [GiteeAI](452196.html) * [MTranServer](452200.html) * [小牛翻译](452204.html) * [translate.js 我们的文本翻译](452207.html) * [华为云 文本翻译服务](452208.html) * [谷歌翻译](452209.html) * [openai](452211.html) * [ollama](496159.html) * [leimingyun标准翻译接口](472680.html) ## 大模型额外可配置 #### 多线程能力 大模型翻译,还可以给其配置多线程,来进行大幅提升翻译速度。 配置方式为,额外增加配置项: ```` translate.service.thread.number=5 ```` 如果不加这个,默认不开启多线程加速能力,仅仅使用单个线程进行的。 比如火山引擎的,可以配置上 200 ,那就是翻译时同时启用200个线程一起,耗时降低 200 倍! 用个示例来理解一下: 比如这里配置的线程数是100,要翻译100段文本,每段需要消耗0.2秒,那么翻译完100段,一共需要消耗 1 x 0.2 = 0.2 秒;如果翻译150段文本,超出了配置的线程数100,那时间段就是分两块,第一块100,第二块50;两块相当于消耗了两次0.2秒,也就是 2 x 0.2 = 0.4秒 而不开多线程能力,翻译100段文本,需要消耗 100 x 0.2 = 20秒 **注意** 1. 这个线程数需要通道源头本身的支持情况决定,比如华为云可能并发数只支持10,那你就不能配置超过10,不然大于这个数人家就直接给你报错阻止你使用了。 1. 这个仅大模型的通道才有这个能力,因为大模型翻译的耗时会比较长,所以增加多线程并行的能力。 1. 这个能力需要[企业付费版本](391753.html)才有 1. 这个能力当前(2025.3.7日)还未发版,还在进一步优化。目前只私下分发给合作企业。如果你需要可以私下找我 #### 翻译精确度 ```` # 翻译精确度。 # 取值为1~100 ,数值越大说明对翻译精准度要求越高。 # 注意,设置的数值越高,对精确度要求越高, translate.service.set.repair.service 介入的也就越多,同样 translate.service.set.repair.service 的tokens消耗也就越大。 # 如果不设置,默认是普通的翻译质量 50 # 如果你想翻译质量非常高,一般最大设置80就可以,(它是到不了100的,比如 你好 翻译为 hello 它的分值可能也就是 97 ) translate.service.set.repair.accuracy=70 ```` #### 是否启用大模型进行翻译结果的语义检测 ```` # 是否启用大模型进行翻译结果的语义检测?以验证原文跟译文是否匹配 # 比如 qwen3 对这个支持就不好,就可以不启用 # 比如 glm、gemma3、deepSeek 对这个支持就好,就可以启用 # 不设置默认是1, 1是启用,0是不启用 translate.service.set.useSemanticsModelApi=0 ```` 注意,此能力需要 translate.service v3.15.2.20250507 及更高版本才支持 ## 第三步,重启 配置好后,需要重启服务,执行重启命令 : ```` /mnt/service/start.sh ```` 即可完成启动。然后直接访问ip,打开页面后,审核元素,清空你的localStorate 的缓存数据, 你随便翻译一下,看看能否正常翻译,能正常翻译,则表示翻译通道已正常配置无误。 ## 其他说明 翻译通道的配置,在 config.properties 中都是以 translate.service. 为开头的。
  • 企业版跟开源免费版的区别

    | 功能 | 开源免费版 | 企业付费版 | | ------------ | ------------ | ------------ | | 开放通用的翻译API接口 | | ✓ | | 多线程并发提速 | | ✓ | | 文件缓存 | ✓ | ✓ | | 内存缓存 | | ✓ | | 频率控制 | | ✓ | | 翻译字符统计 | | ✓ | | 陌生者使用的每日翻译上限 | | ✓ | | 域名白名单 | | ✓ | | 文本翻译接口 - key | | ✓ | | 管理后台 | | ✓ | | [查看更多](https://gitee.com/mail_osc/translate/blob/master/doc/translate.service/ability.md) | |   | translate.service 它提供将大模型或其他机器翻译转化为标准文本翻译接口,可能第一感觉,错误的理解为,它只是去询问大模型,然后以接口的形式暴露出来。如果要进行稳定的翻译输出,这是远远不够的! 这里进行详细罗列了它做了哪方面的优化: https://gitee.com/mail_osc/translate/blob/master/doc/translate.service/ability.md ## 企业版获取方式 #### 方式一:付费购买 * **2000元的**:你可以单独支付费用进行购买,授权费用两千元,第二年起每年有1000元的使用费。 这个的翻译使用的是内置的跟开源中国联合定制的giteeAI的 qwen3、hunyuan-mt 大模型进行翻译。(注意,大模型的tokens具体使用多少还要根据使用的量支付使用token的费用,虽然这个费用很低,但也是一笔费用,请悉知。) * **7000元的**:这个是可以私有部署的,开放标准openai接口,支持你在无网络环境下,私有部署大模型、机器翻译、... 等,然后接入。 授权费用七千元,第二年起每年有1000元的使用费。 支持对公账户转账及开普通电子发票。 #### 方式二:参与贡献 如果你是开发人员,我们建议你参与我们 translate.js 的完善及周边帮助,打个比方: 1. 完善 translate.js 的某个功能 1. 承接我们的一些开发任务(html、js、css、java 等等任何一种熟悉都行) 1. 基于它给某个开源框架做适配 1. 开发一些第三方插件,比如 React等插件 1. 你技术不行,那你还可以给发推文提高曝光 凡是你符合以上某条,都可以跟我们聊,对项目有贡献且达标,我们会对你开放。 #### 我的联系方式 联系我: [https://translate.zvo.cn/4030.html](4030.html) ## 企业版配置方式 企业版本需要配置一个授权码,修改 /mnt/service/config.properties 文件,增加: ```` authorize=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ```` 配置完后,进行重启translate.service 服务 ```` sh /mnt/service/start.sh ```` 即可生效。 不进行这个授权码配置, 默认就是开源免费版本的。 ## 能力说明 #### 开放通用的翻译API接口 它给你开放http请求的标准API接口,你可以通过API接口来传入相关文本,指定要翻译为什么语种,进行翻译。 它支持多段文本翻译。比如一次翻译1000句不同语言、不同行业的文本。 有关这个API接口相关,可参考 https://translate.zvo.cn/4040.html (注意,不同的[翻译通道](391752.html)支持的语种的数量也不同) #### 文件缓存 通过翻译接口进行翻译时,对传入的多个翻译内容及目标语言,将其结果以文件形式进行整体缓存, 如果下次同样的多个翻译内容及目标语言,会直接从缓存的文件中取出返回,降低对内存级缓存的消耗、CPU的计算、后端翻译服务的成本消耗。 此能力结合HDD大容量磁盘,针对静态网站这种固定的静态页面,基本全部是命中缓存状态,可以极大降低服务器性能的使用、以及后端翻译服务的成本。降低幅度可能能超过 99.9% #### 翻译通道-大模型 可以使用 DeepSeek V3、glm、Qwen3、... 等大模型进行翻译 ## 企业版多出的能力 #### 多线程并发提速 如果你使用的是大模型进行翻译,凡是响应超过2s的,都可以以及有必要采用多线程并发处理能力来极大提高翻译速度,降低翻译的耗时,提高用户体验。 有关这个的使用配置可参考: https://translate.zvo.cn/391752.html #### 内存缓存 拥有对翻译结果进行内存缓存的能力,翻译时如果没有命中文件式缓存,可以继续从内存缓存中进行逐行命中,可以极大降低翻译通道的消耗。 它的能力是当文件翻译没有命中时,才会通过内存缓存来进行逐行命中。 **使用方式:** /mnt/service/config.properties 文件增加配置: ```` # 内存缓存,默认不设置是不启用。 true为启用 cache.memory.use=true ```` 另外你还可以通过配合 [/mnt/service/domain.json](391130.html) 的设置来自由设定哪个网站分配多大的内存缓存。 #### 频率控制 可以对翻译接口的访问频次进行控制,比如同一个终端2秒内,对同一个目标语种的翻译,最大只允许通行三次,超过将被拦截。[详细说明及配置方式可点此查阅](413975.html) #### 翻译字符统计 对翻译的字符数进行统计。 比如你如果配合 translate.js 一起使用,它可以记录最近7天,每个域名对应的翻译字符数的使用情况。 它还可以统计每个域名的内存缓存占用大小、磁盘缓存占用大小 #### 陌生者使用的每日翻译上限 陌网站(陌生人)每日使用你translate.service的最大翻译字数,也就是通过 translate.json 接口翻译的字符数。 注意这是字符的个数。比如“你好”是两个字符,“hello” 是五个字符,它统计的是翻译结果的字符。 这里配置后,将会对域名进行限制,凡是未出现在 [domain.json 配置](391130.html)中的域名,它的日上限就是这么多。它的目的是为了避免你的接口被人恶意利用。 **使用方式:** /mnt/service/config.properties 文件增加配置: ```` public.dayMaxSize=100 ```` 企业版如果没有配置这里,那这个默认是100, 也就是陌生网站每日最大能使用的每日翻译上限是100个字符,超过这个用量后将无法继续使用。 这里如果设置为0,则是不允许陌生人访问,必须是出现在 domain.json 中的域名或key才能访问使用。 它基本是配合 [/mnt/service/domain.json](391130.html) 来一起使用的,以做到陌生网站一天最大使用多少翻译字符上限,而有合作或交费用的网站则开放这个上限到多少。 #### 域名白名单 开源免费版本中 /translate.json 对任何网站使用translate.js是没有任何请求限制的,而付费版本你可以指定某些域名的方式来进行使用控制。 它相当于域名的白名单,加入白名单的域名,才能正常使用。 加入白名单的域名,你可以设置这个域名: 1. 使用内存缓存时,最大只能占用多大的内存,超过这个大小后将不会再对新的翻译结果进行缓存 2. 使用磁盘缓存时,最大只能占用多大的磁盘空间,超过这个大小后将不会再对新的翻译结果进行缓存 3. 设置每天最大的翻译字符数(凡是通过 /translate.json 接口响应的都计入),当这天的字符数超过后将无法在进行翻译 具体有关配置说明,可以参考 [domain.json 的设置](391130.html) #### 文本翻译接口 - key 开源免费版本中 /translate.json 是没有任何请求限制的,而付费版本你可以生成key的方式来进行使用控制。 你可以生成多个key,每个key给他设置每天最大的翻译字符数,当这天的字符数超过后将无法在进行翻译,以避免你的翻译接口被人恶意利用。 具体有关配置说明,可以参考 [domain.json 的设置](391130.html) #### 管理后台 开放管理的API,你可以通过此进行添加、修改文本翻译的key、域名白名单、查看统计数据、域名及某天的使用两个统计、缓存占用大小等等。
  • 一键更新到最新版本

    登录你部署 translate.service 的服务器,登录后直接运行以下命令即可完成更新 ```` wget https://gitee.com/mail_osc/translate/raw/master/deploy/service_upgrade.sh -O ~/upgrade.sh && chmod -R 777 ~/upgrade.sh && sh ~/upgrade.sh ```` 更新完后会自动启动 translate.service 服务
  • 大模型翻译并发线程数配置

    大模型翻译,还可以给其配置多线程,来进行大幅提升翻译速度。 配置方式为,在 /mnt/service/config.properties 中额外增加配置项: ```` translate.service.thread.number=5 ```` 如果不加这个,默认不开启多线程加速能力,仅仅使用单个线程进行的。 比如火山引擎的,可以配置上 200 ,那就是翻译时同时启用200个线程一起,耗时降低 200 倍! 用个示例来理解一下: 比如这里配置的线程数是100,要翻译100段文本,每段需要消耗0.2秒,那么翻译完100段,一共需要消耗 1 x 0.2 = 0.2 秒;如果翻译150段文本,超出了配置的线程数100,那时间段就是分两块,第一块100,第二块50;两块相当于消耗了两次0.2秒,也就是 2 x 0.2 = 0.4秒 而不开多线程能力,翻译100段文本,需要消耗 100 x 0.2 = 20秒 **注意** 1. 这个线程数需要通道源头本身的支持情况决定,比如华为云可能并发数只支持10,那你就不能配置超过10,不然大于这个数人家就直接给你报错阻止你使用了。 1. 这个仅大模型的通道才有这个能力,因为大模型翻译的耗时会比较长,所以增加多线程并行的能力。 1. 这个能力需要[企业付费版本](391753.html)才有 1. 这个能力当前(2025.3.7日)还未发版,还在进一步优化。目前只私下分发给合作企业。如果你需要可以私下找我
  • 大模型翻译的单次翻译字符上限设置

    配置方式为,在 /mnt/service/config.properties 中额外增加配置项: ```` translate.service.set.requestMaxSize=1 ```` 通过大模型的翻译通道进行翻译文本时,翻译通道每次请求最多允许传入多少要翻译的文字(单纯就是长度,比如 “你好”长度是2, “hello” 长度是5) 不设置时默认为0,表示不限制。 比如设置为3,实际翻译接口传入了4段要翻译的文本,第一段是2个字符,第二段是4个字符,第三段是7个字符,第四段是5个字符 那会将其拆分为4次请求,向翻译通道发起4次http请求。 因为第一段2个字符+第二段4个字符相加是6个字符已经超过了设置的3,所以第一段跟第二段这两个也都是分两次的,而第三段、第四段也比3大,也都是每段作为一次请求,所以是4次请求。 如果设置为6,那上面的4段文本就会拆分为 三次请求,第一段跟第二段 是一次, 第三段是一次、第四段是一次。 如果设置为15,那上面的4段文本就会拆分为 2次请求,第一段、第二段、第三段 这三段是一次, 第四段是一次。 如果设置为1,那么肯定每段文本都会大于等于1,也就是每段都是一次请求,一共4段,共4次请求。 ### 注意 使用大模型的通道才有这个设置,值越小,大模型翻译的结果越精准不易出错。 如果不太懂,这里就默认设置为1即可。
  • 更改默认的80端口号

    translate.service 服务端的默认端口号是80端口,你可以通过设置 ````/mnt/service/config.properties```` 来设置端口号 比如,要设置端口为81端口,那么 ````/mnt/service/config.properties```` 中配置: ```` server.port=81 ```` 设置完成后,重启服务: ```` sh /mnt/service/start.sh ```` 就可以直接访问测试了。 如果测试不通,检查一下你服务器的防火墙、以及云服务器控制台的安全组,是否开放了这个端口。 比如采用 ```` curl 127.0.0.1:81 ```` 这样能访问通的话,就是端口已经设置成功,但是被防火墙或者安全组给拦截了。
  • 配置备用翻译通道

    ````/mnt/service/config.properties ```` 配置文件中,进行配置的翻译通道 ````translate.service.xxx```` 这是常规的翻译服务通道,也就是 translate.service 正常使用的翻译通道。 但是当常规翻译服务异常时,比如 网络请求异常、翻译服务欠费、等等各种意外使你的常规翻译服务无法正常提供翻译能力时,可以自动切换到备用翻译服务。 另外当使用大模型作为翻译服务时,考虑到大模型具有不确定性,所以备用通道也能在翻译异常时,提供一层保障。 备用翻译服务的配置方式,也是配置到 ````/mnt/service/config.properties ```` 配置文件中,增加配置: ```` translate.service.standby.service=leimingyun ```` 它默认对使用者每日提供50万翻译字符。 这基本是都足够了的。 如果你想获得更多,可 [联系我们](4030.html) ### 更多配置 ```` translate.service.standby.config={"key":"xxxxxxxxxxxxxx"} ```` 比如,针对 leimingyun 这个翻译通道,要放开日上限的限制,可以额外配置 key 参数
  • 配置大模型修复翻译精准度的通道

    当使用大(小)模型提供翻译能力时,系统自带翻译精准度检测机制,如果翻译的结果精确度不足,如果启用了修复通道,会在判断精确度不足时,自动启用修复通道来介入。 ## 注意 注意,此能力只对大模型翻译有效,传统机器翻译则不会使用此能力。 ## 配置方式 /mnt/service/config.properties 配置文件中,增加以下配置: ```` # 翻译精确度。 # 取值为1~100 ,数值越大说明对翻译精准度要求越高。 # 注意,设置的数值越高,对精确度要求越高, translate.service.set.repair.service 介入的也就越多,同样 translate.service.set.repair.service 的tokens消耗也就越大。 # 如果不设置,默认是普通的翻译质量 50 translate.service.set.repair.accuracy=90 # 用于修复精准度的翻译服务通道,比如采用 giteeAI (模力方舟)的通道 translate.service.set.repair.service=giteeAI # 用于修复翻译结果的模型。JSON格式。 # model 参数:使用的是哪个大模型 # 其实它还可以设置 key 等参数,但是 translate.service.set.repair.service 它跟当前使用的 translate.service.giteeAI 通道是同一个,所以其他相同的 key 直接复用 translate.service.giteeAI.key 的,就不用单独设置了 # accuracy 参数:翻译精确度,意思同 translate.service.set.repair.accuracy ,只不过这个是专门针对的 repair 修复模型的翻译结果的。 如果修复模型的配置 translate.service.set.repair.config 没有配置这个 accuracy ,那么这里的 accuracy 默认就是等于 translate.service.set.repair.accuracy translate.service.set.repair.config={"model":"Qwen3-235B-A22B","key":"A-BCIOXDIBS40D3EKLV5ILKCPWE4YUT5CXXXX", "accuracy":"0"} ```` 注意,以上配置,是本身 translate.service 使用的就是giteeAI的翻译通道,已经配置了 ````translate.service.giteeAI.key````等参数,所以 translate.service.set.repair.config 就单纯只是配置一下model就行了,其他的key等直接继承 translate.service.giteeAI.xxx 的。````translate.service.set.repair.config````它的完整配置如下: ```` translate.service.set.repair.config={"model":"Qwen3-235B-A22B","key":"A-BCIOXDIBS40D3EKLV5ILKCPWE4YUT5CXXXX", "accuracy":"0"} ```` #### 修复通道采用 DeepSeek 的示例 这里使用火山引擎的 DeepSeek 服务: ```` # 用于修复精准度的翻译服务通道,采用 DeepSeek 的通道 translate.service.set.repair.service=deepSeek # 用于修复翻译结果的模型。JSON格式。 translate.service.set.repair.config={"url":"https://ark.cn-beijing.volces.com/api/v3/chat/completions","model":"deepseek-v3-241226","key":"QM8jrVl98lTluLhzCaO4i9PFv-caRk6U7kDL-H6CIyApytMG69jOadaasO2GnduQak8fGI7dtpmasM98Qh3yS1"} ```` 其中 ````translate.service.set.repair.service=deepSeek```` 这个是固定的,不管你使用火山引擎的还是华为云的还是其他云的。 ````translate.service.set.repair.config```` 这个是有变动的,根据不同云厂商参数不同进行相关的配置。 上面配置的火山引擎的相关参数,如果你翻译通道使用的是火山引擎DeepSeek的话,发现他们的配置键值对是一样的。 火山引擎翻译通道的配置可以参考: https://translate.zvo.cn/396726.html
  • 配置翻译API接口的流量控制

    针对 translate.json 文本翻译API接口的请求次数控制,避免某个终端过快的调用翻译能力。比如 translate.js 使用时js写错导致循环掉接口等 它可以对翻译接口的访问频次进行控制。 ## 配置方式 比如对同一个终端(或浏览器)2秒内,对同一个目标语种的翻译,最大只允许通行三次,超过将被拦截。 配置文件 /mnt/service/config.properties 中,增加以下配置: ```` # # 流控策略 # 如果购买企业版本,则流控策略生效。 未购买企业版的将无流控策略,即使配置了也无效 # 流控策略是只针对 translate.json 这一个翻译接口的 # # translate.json 这个接口的时间周期,这里设置2秒,这里的单位是毫秒。不设置默认是2000 request.control.translateJson.number.cycleTime=2000 # 时间周期内最大允许请求次数,不设置默认是2 request.control.translateJson.number.maxRequests=3 ```` **注意** 如果你不想启用此能力,不对翻译接口进行任何使用频率的限制,可以设置 : ```` request.control.translateJson.number.cycleTime=0 ```` 即可。需要 translate.service v3.16.10.20250702 及以上版本
  • 配置多翻译通道支持的语种分流策略

    ## 场景: 使用的 glm (智谱AI的大模型) 作为翻译通道,但是大模型进行的翻译支支持三十来个语种,语种有点少。 [leimingyun 的翻译通道](https://translate.zvo.cn/260950.html) 支持百多个,主流的基本都覆盖了。 那么,需要glm翻译通道支持的常见翻译语种,像是英文、法语的,glm 通道支持的,则有 glm 通道提供翻译接入,而 glm通道不支持的语种,比如 繁体中文等,则有 leimingyun 翻译通道进行翻译。 ## 实现 #### 1. 设置主翻译通道 这里将glm配置为主通道,也就是 ```` translate.service.glm.key=xxxxxxxxxxx translate.service.glm.model=GLM-4-Flash translate.service.thread.number=100 ```` 设置的翻译通道 #### 2. 设置备用翻译通道 将 leimingyun 翻译通道配置为备用通道,也就是 ```` translate.service.standby.service=leimingyun translate.service.standby.config={"domain":"http://12.12.12.12:80"} ```` 有关备用翻译通道的详细说明,可以参考: [http://translate.zvo.cn/404947.html](http://translate.zvo.cn/404947.html) #### 3. 进行指定语种分流策略 然后增加配置进行指定,指定英文、法语 的glm支持的语种走glm,不支持的走leimingyun通道 ```` # # 主翻译通道支持的语种 # # 这里出现的语种,要翻译接口 form、to 都匹配,才会触发 # 如果不匹配,则自动转到 translate.service.standby.service 备用翻译通道来进行 # from 中的第一个是auto,代表的是不传入from参数有翻译通道自己来识别语种时,默认就是 auto translate.service.set.mainService.from=["auto","icelandic","hungarian","dutch","japanese","arabic","deutsch","filipino","english","bengali","portuguese","romanian","french","czech","swedish","greek","spanish","russian","italian","thai","vietnamese","korean","chinese_simplified","finnish","turkish","hindi","bulgarian","polish","kazakh"] translate.service.set.mainService.to=["icelandic","hungarian","dutch","japanese","arabic","deutsch","filipino","english","bengali","portuguese","romanian","french","czech","swedish","greek","spanish","russian","italian","thai","vietnamese","korean","chinese_simplified","finnish","turkish","hindi","bulgarian","polish","kazakh"] # 指定 language.json 返回的语种列表是使用哪个翻译通道的, # 示例中主通道用的是 glm, 备用通道用的是 leimingyun ,这里的值要么设置为 glm,要么设置为leimingyun ,默认不设置则是主翻译通道,也就是 glm translate.service.set.language.service=leimingyun ```` ## 测试 访问 /language.json 即可看到效果 通过 /translate.json 翻译一个繁体中文试试,看是否走了备用通道成功进行翻译
  • 翻译文本分割

    使用大模型进行翻译时,对翻译的文本会有以下担忧: 1. 单次翻译的文本内容过长,会造成极大的延迟等待,影响用户体验 2. 如果文本中包含一些特殊字符符号,容易使翻译结果只返回文本的翻译结果,而特殊符号会被大模型删除(特别是小模型) 3. 文本过长及包含特殊符号,会导致大模型理解及指令遵循出现异常,翻译结果出现失误。 针对以上问题,可以通过配置自由对文本进行分割,将长句子分割为数个短句子或单词,然后分别对分割后的进行翻译。翻译好后再进行组合。 ## 配置方式 ```` # 对翻译的内容进行分割的字符,比如 "你好?是的" 会分割为 "你好?" "是的" 两个翻译文本 # 参数设置说明: # string 要进行分割的字符,比如 ? # translate 进行分割的字符是否参与翻译。 比如问号,叹号这种语气词,加上会能影响语义的,就要设置为true; 而像是换行符这种并不影响语义的,那就设置为false。 设置为false后使翻译的文本更少,翻译的效果更好。 # 比如 "你好?是的" # 设置为true时,会分割为 "你好?" "是的" 两个翻译文本,进行分别翻译。 翻译完组合后,结果为 "hello? yes" # 设置为false时,会分割为 "你好" "是的" 两个翻译文本,进行分别翻译。并且 "你好" 翻译完成后,再追加上 "?" 这个文本,并组合为 "hello?" 作为它的翻译结果。 也就是翻译结果为 "hello? yes" text.split=[{"string":"u005cu006e","translate":false,"remark":"n"},{"string":"u005cu0074","translate":false,"remark":"t"},{"string":"u005cu0072","translate":false,"remark":"r"},{"string":"uff1f","translate":true,"remark":"?"},{"string":"u3002","translate":true,"remark":"。"},{"string":"uff1b","translate":false,"remark":";"},{"string":"uff01","translate":true,"remark":"!"},{"string":"uff1a","translate":false,"remark":":"},{"string":"[","translate":false,"remark":"["},{"string":"]","translate":false,"remark":"]"},{"string":"|","translate":false,"remark":"|"},{"string":"_","translate":false,"remark":"_"},{"string":"*","translate":false,"remark":"*"}] # 如果进行翻译的文本被拆分了,是否打印出拆分的日志。 true:显示日志。 默认不设置则是false。 此处是方便对 text.split 定义的进行调试查看使用 text.split.debug=true ```` 如果默认不配置 text.split 参数,那么它的默认值为: ```` [{"string":"u005cu006e","translate":false,"remark":"n"},{"string":"u005cu0074","translate":false,"remark":"t"},{"string":"u005cu0072","translate":false,"remark":"r"},{"string":"uff1f","translate":true,"remark":"?"},{"string":"u3002","translate":true,"remark":"。"},{"string":"uff1b","translate":false,"remark":";"},{"string":"uff01","translate":true,"remark":"!"}] ```` ## 日志查看 开启 ````text.split.debug=true```` 后,如果句子中包含了 text.split 的分割字符,那么分割后会自动打印分割日志到 /mnt/service/translate.service.log 日志文件,如下图: ![](https://translate.zvo.cn/fileupload/2025/05/28/9896c4fa77ba49ba93fd3ba0e6591e80.png)
  • 配置数据库

    内置 H2 数据库,默认是启用的,而且它也不需要你额外安装、配置啥,它都是全自动的。 它的作用是进行内存缓存的文本的模糊搜索、修改,如果不启用内存缓存的情况下它是不会介入的。 比如“你好”,翻译为 "Hello",但是你不想要这个结果,你想翻译成 “hi”,就可以通过管理API来模糊搜索原文 “好”,他会搜到跟你好有关的翻译原文本跟译文对照表,你可以将其中你不满意的译文进行手动修改。 其中的模糊搜索能力,便是有 H2 数据库提供的。 如果你本身项目中数据量极其庞大,并且请求并发非常高,也用不到服务端的翻译内容的手动调整修改,你完全可以关闭 H2 数据库的使用,进一步提高系统的响应速度。 ### 配置方式 修改 config.properties ```` # 是否启用 H2 数据库 # true: 启用,默认不设置便是true # false: 禁用,将不会存在任何跟数据库有关的交互 database.use=false ````
  • 运行日志

    你可以从服务器中查看相关日志情况。 日志存放于 ````/mnt/service/logs/```` 目录下 ## 文本翻译日志 giteeAI_yyyy-MM-dd.log 是调用大模型进行文本翻译的日志 比如: giteeAI_2025-05-17.log yyyy-MM-dd 是当前的年月日,它按照日期每天都会创建一个日志文件。 它记录了你所有文本翻译的原文、译文、进行时间、翻译结果审查得分、是否启用了修复机制 等 它每行都是一个文本翻译记录。 示例: ```` {"time":"00:40:59","originalText":"按钮切换语言:","resultText":"Button switch language:","to":"english","useTime":583,"score":96} {"time":"00:40:59","originalText":"语言切换示例:","resultText":"Language Switching Example:","to":"english","useTime":482,"score":96} {"time":"00:40:59","originalText":"你好","resultText":"Hello","to":"english","useTime":546,"score":96} ```` * **time** 发生时间 * **originalText** 翻译的原文 * **resultText** 翻译的译文 * **to** 翻译为什么语种 * **score** 对译文进行校验后的打分。 1~100 分,分数越高表示翻译越精准 * **useTime** 当前使用大模型翻译的耗时,单位是毫秒 ## 系统运行日志 translate.service.log 是系统运行日志,它存放 translate.service 本身的运行情况的日志 ## 访问请求日志 request_yyyy-MM-dd.log 是进行翻译请求(/translate.json)的请求日志。 它并不是你访问后它就会立即产生日志,而是它有一个日志缓冲,比如当日志达到几百条、或者距离上次将其保存到日志文件超过 2 分钟,它才会进行将日志信息打包写入到日志文件中。 这里列出其中两条示例: ```` {"method":"translate.json","size":4,"ip":"192.168.31.95","domain":"192.168.31.95","memoryCacheHitsSize":5,"time":"2025-03-19 10:22:56","memoryCacheHitsNumber":1,"to":"english"} {"fileCache":"1845bbcbd9e600fab184b346d82042a9_english.txt","method":"translate.json","size":4,"ip":"192.168.31.95","domain":"192.168.31.95","time":"2025-03-19 10:26:56","to":"english"} ```` * **method** 当前请求的是哪个接口。比如 translate.json 则是请求的文本翻译 API 接口; language.json 则是请求的获取当前所支持的语言列表接口 * **fileCache** 针对 translate.json 翻译接口的请求,如果有命中文件缓存,则有这个参数,其值是 文件缓存的名字,它是在 /mnt/service/cache/ 内的 * **originalSize** 针对 translate.json 翻译接口的请求,记录当前翻译的字符数(原文的字符数,非译文) * **size** 针对 translate.json 翻译接口的请求,记录当前翻译的字符数(译文的字符数,非原文) * **ip** 请求来源的 ip * **domain** 针对 translate.json 翻译接口的请求,如果是网站使用了 translate.js ,那这个则是这个网站的域名(它是自动获取到的) * **time** 触发的时间 * **useTime** 接口执行耗时,单位是毫秒 * **to** 针对 translate.json 翻译接口的请求,翻译为什么语种 * **key** 针对 translate.json 翻译接口的请求,如果是你给对方通过 domain.json 配置设置的文本翻译 key,那这个就是记录的 key。 * **memoryCacheHitsNumber** 针对 translate.json 翻译接口的请求,如果有命中内存缓存,这里是记录命中内存缓存的条数(translate.json 支持同时翻译多条) * **memoryCacheHitsSize** 针对 translate.json 翻译接口的请求,如果有命中内存缓存,这里是记录命中内存缓存的字符数(译文的字符数,非原文)