先说结论!
在当前 FinchUI 多语言网站插件与 Z-BlogPHP 的处理流程中,主题自带的 404 页面不会调用第三方机器翻译接口,不会消耗翻译额度。

一、什么情况下会显示主题 404 页面
当访问的网站地址不存在,且服务器将该请求转发给 Z-BlogPHP 的 index.php 处理时,Z-BlogPHP 会进入路由匹配流程。若没有任何路由匹配成功,系统会设置 HTTP 404 状态并渲染当前主题的 template/404.php。
因此,无论不存在的是文章地址、分类地址还是任意伪静态路径,只要最终由 Z-BlogPHP 接管并显示主题 404,都会使用主题的 404 模板。
二、多语言插件在正常页面中的翻译流程
正常页面处理时,插件会在页面开始阶段开启输出缓冲;页面模板、主题和其他插件输出完成后,再在页面结束阶段取得整段 HTML,进行链接改写、语言标记处理和正文机器翻译。
正常页面:
Index_Begin → 开启输出缓冲 → 路由与模板输出 → Index_End → 处理 HTML → 必要时请求翻译接口只有执行到页面结束阶段,插件才会处理 HTML;并且只有非默认语言、非简繁互转、启用了翻译服务且本地缓存未命中的文本,才会请求第三方翻译接口。
三、404 页面为何不会翻译
404 的处理方式与正常页面不同。路由无法匹配后,Z-BlogPHP 会进入错误处理器,加载主题的 404 模板并立即结束本次 PHP 请求。
404 页面:
Index_Begin → 开启输出缓冲 → 路由未匹配 → 输出主题 404 模板 → 结束请求
不会进入:Index_End → HTML 翻译处理 → 翻译接口请求主题 404 模板虽然会输出“页面不存在”“返回首页”等文字,但这些文字不会进入多语言插件的正文翻译处理步骤。PHP 结束请求时只会直接释放已有输出缓冲内容,不会执行插件在正常页面结束阶段注册的翻译处理。
四、FinchUI Store 主题的 404 文案来源
以 FinchUI Store 主题为例,template/404.php 使用的是主题本地语言包变量,例如:
{$language['404title']}
{$language['404loading']}
{$language['404home']}
{$language['404goback']}
{$language['404tips']}这些内容来自主题自身的语言数组,不是通过 DeepL、Google、火山引擎、腾讯云、阿里云、百度、有道等在线翻译接口实时取得,因此本身也不会产生翻译服务费用。
五、需要区分的两类请求
| 请求类型 | 是否执行主题 404 | 是否消耗翻译额度 |
|---|---|---|
| 服务器直接返回静态 404 | 否 | 否。PHP 和插件均不会执行。 |
| Z-BlogPHP 路由未命中,显示主题 404 | 是 | 否。请求在 404 输出后结束,不进入翻译处理。 |
| 404 页面自动跳转或用户点击返回首页后产生的新首页请求 | 不适用 | 首页按正常规则处理;仅缓存未命中的待翻译文本可能请求接口。 |
六、如何自行验证
- 在插件后台清理翻译缓存,并记录翻译服务商后台的用量。
- 连续访问几个不存在的非默认语言地址,例如 /en/not-found-a、/en/not-found-b。
- 检查 zb_users/cache/fui_multilang/en/ 是否新增 JSON 翻译缓存文件。
- 再次检查翻译服务商后台的请求数或字符消耗。
预期结果:仅访问主题 404 页面不会新增正文翻译 JSON 缓存,也不会让翻译服务商用量增长。
注意:如果 404 页面配置了自动返回首页,蜘蛛或访客随后请求首页是一次独立请求。应将首页请求与最初的 404 请求分开统计。





添加客服qq
网友评论