语言包里 zh_CN 的 po 和 mo 都在,后台插件界面却一个字都没翻译。把文件放进 languages 目录、改权限、清缓存,全都不动。乍看像缓存或者权限的锅,追下去往往不是。
load_plugin_textdomain("abc-sync", false, dirname(plugin_basename(__FILE__)) . "/languages");
// 取值时必须用同一个域:
__("Sync now", "abc-sync");
追下去是这么回事:加载翻译时用的文本域和代码里取值函数的第一个参数不一致,翻译表挂不到对应字符串上。文本域要和插件头部声明、语言文件名前缀三处完全相同。
碰到「插件文本域」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
具体做法是,把插件头部声明的文本域抄下来 替换所有取值函数的第一个参数;语言文件名改成「文本域-zh_CN.mo」这样的格式;加载翻译的调用挂在初始化钩子上 路径用插件目录常量拼。
验收就看一点,后台插件界面切到简体中文后按钮和提示都变成中文,没有残留的英文短句。
