domain.json 配置
可以理解为域名白名单,它的作用有:
- 别人想使用你私有部署的 translate.service 提供的文本翻译API,你可以卖给他,给他开一个key,设置一个限制。
- 某个网站使用了 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 中的,将无法使用它提供的翻译能力。
注意,默认是没有这个配置的,也就是默认不配置的情况下,
- 如果你是未付费授权的用户,使用的是开源免费版本,那么它是不会有什么限制的,即使你配置了 public.dayMaxSize 它也不会生效的。
- 如果你是付费授权用户,已配置了授权码,那么这里默认是 100 ,就是为了避免你忘记配置此处,被别人给恶意利用了。
第二步
假设网站 english.zvo.cn 使用了 translate.js ,他吧翻译通道配置成了你私有部署的 translate.service ,那么他网站进行使用语言切换的时候,会使用你私有部署的 translate.service 来进行提供翻译服务。
比如你要设置他的网站 english.zvo.cn 这个域名:
- 每日最大允许使用的翻译字符数是 5000000
- 可以使用内存来作为缓存,最大缓存翻译结果的文字 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 整个系统有三级缓存,这三级缓存不太了解的,可以先点此查看一下,大概有个了解。
查看方式:审核元素,然后随便翻译一下,找到 translate.json 的请求,如下图所示
- day_current_size 是今天这个网站已经使用的翻译字符数
- day_max_size 是当前的字符限制上限,你这个域名每天能翻译多少字符
当你配置了domain.json 后,不确定是否生效,可以通过这里来进行验证。
当前翻译接口是否命中文件缓存
- day_current_size 响应头中出现 filecachehit:true 则表示当前翻译请求已命中文件缓存。
当 text 的内容被翻译过一次后,就会将其加入文件缓存(磁盘IO),当同样的 text 内容在进行翻译时,目标语言一致的情况下,它会直接从文件缓存中取出,进行响应。
当命中文件缓存时,服务器的性能使用是非常低的,它将不再进行预处理、分词、内存处理、各种处理等,直接进行返回。所以它的响应时间也是极快,一般几十毫秒(如果是几百毫秒可能是因为使用了代理,因网络中转产生了时间消耗)
怎么判断当前翻译接口是否有命中内存缓存
响应标头中:
- memorycachehitsnumber 当前命中的内存缓存的翻译文本条数。
注意,它并不是完全跟你传入要翻译的 text 要翻译的json数组一样,比如你 text 中传入的json数组是有三项,也就是三条翻译的文本,传入 translate.json 接口后,翻译服务会自动对其进行预处理、分词、等一系列操作,有可能预处理完毕后,经过拆分,它可能变成了5条要翻译的文本(也有可能经过预处理,发现有的是不需要进行翻译的,可能变成了2条要进行翻译的文本)。
然后将预处理之后的5条文本,再进行内存缓存的命中(如果启用了内存缓存),比如这里命中了4条,那这里的数字就是4。 这时你会发现,你text实际才传入了3条,它确命中了4条,是因为这个原因。
一般情况下,你实际传入的text的条数,跟预处理后实际要进行翻译的条数,是差不多的,不会相差太多,也就是并不会产生倍数的差距。
另外,有这个参数,并且值大于0,也代表当前请求已经命中了内存缓存。 - memorycachehitssize 当前命中内存缓存的字符数。
同memorycachehitsnumber这个参数一样,它也是先经过预处理后,在进行的缓存命中,也就是预处理之后的要翻译的字符数,一定是小于等于 text 本身传入的字符数的。
响应头中有这个参数,并且值大于0,也代表当前请求已经命中了内存缓存。