翻译文件放在 themes/mytheme/languages/zh_CN.mo,后台语言也切成了简体中文,前台按钮还是英文,Loco 里能看到译文却加载不到。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

add_action('after_setup_theme', function () {
    load_theme_textdomain('mytheme', get_template_directory() . '/languages');
});

load_theme_textdomain 的 domain 必须和 .mo 文件名前缀一致,主题用的 domain 是 mytheme,文件却叫 zh_CN.mo,加载时按 mytheme-zh_CN.mo 去找,自然找不到。目录路径也要和第二个参数对上。这一点先确认清楚,后面就不用反复试。

「.mo 文件名不匹配」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

具体做法是,先看主题里 load_theme_textdomain 的 domain 是什么,记下来;把文件重命名为 domain-zh_CN.mo,和 .po 一起放回 languages 目录;在 after_setup_theme 里加载,别等到 init 之后,那时文案已经取过了。

改完照着核一遍,前台按钮文案变成中文,切换语言后两套文案都能正常显示。

作者 9823189