插件提供三个翻译入口,底层是同一套逻辑,区别只在由谁触发、什么时候触发。
手动:页面翻译页的按钮
最可控的方式。选定语言和页面,点「AI 翻译」,结果立刻回填到界面上,可以逐条看、逐条改。内容不多、或者想先看看译文质量再决定策略时,用这个。
同一页上还有「全部翻译」,会把当前语言下所有待翻译页面排队处理,带进度和停止按钮。适合初次上线时批量预热。
后台自动:管理员开着后台就在跑
在翻译设置里打开「后台自动翻译」后,只要有管理员打开着任意一个后台页面,浏览器就会按设定的心跳间隔(最小 15 秒)来领一个待翻译页面交给服务端处理,不需要一直守在「页面翻译」界面。
要理解它的边界:这依赖浏览器保持打开,关掉后台就停;站点没有常驻队列进程,也不依赖 WP-Cron。上一次还没处理完时不会重复发起。
访客实时:谁来看就翻谁
打开「实时翻译」后,访客打开译文页面时,插件会把这一页尚未入库的条目补翻出来,结果直接入库,下一位访客就不用再等。
旁边的「译文占比达到 __% 才输出译文页面」是配套的保护:占比 = 该页已有译文条数 ÷ 提取到的条数。默认 100,意思是整页翻完才输出译文,达不到就照常显示原文,避免半中半外的页面被搜索引擎收录。
代价是首个访客要等 AI 返回,页面会明显变慢。内容量大的站点建议先用「全部翻译」预热,再开这个开关兜住新增内容。
三个入口共用一把锁
不管从哪个入口进来,任务都要先抢同一把单进程锁。多个管理员同时在线、或者有人正在手动翻译时,其余请求直接空转返回,不会出现两个进程翻同一批内容、把额度烧两遍的情况。
还有一个容易被忽略的行为:客户端断开不会中断翻译。PHP 默认在浏览器断开后就把脚本掐掉,而一次翻译往往要等 AI 几十秒。访客嫌慢关掉页面、管理员切走标签页都很常见,token 已经花出去了,结果却没入库就等于白烧。所以插件在进入长任务前会显式声明忽略客户端中断,断开归断开,这一轮照样跑完、照样入库。