WordPress未识别自定义文章类型_x()函数翻译问题排查
排查WordPress自定义文章类型_x函数翻译不生效的问题
我来帮你解决这个_x函数翻译失效的问题,结合你的代码和Poedit的使用场景,大概率是上下文参数匹配或者Poedit配置的问题,咱们一步步排查:
1. 确认Poedit中_x字符串的上下文完全匹配
_x函数的核心是第二个参数(上下文),WordPress会通过「文本内容+上下文+文本域」的组合来匹配翻译。你的代码里:
_x( 'Projects', 'post type general name', 'maria' )
这里的上下文是post type general name,你需要打开Poedit,找到这条翻译条目,检查「上下文」列的内容是否和代码里的第二个参数完全一致——包括空格、拼写、大小写都不能错。比如如果Poedit里上下文写成了post-type-general-name或者少了空格,WordPress就找不到对应的翻译,只能显示原文。
2. 确保Poedit正确抓取带上下文的_x字符串
有时候Poedit默认的解析规则没正确识别_x的上下文,你需要检查解析器设置:
- 打开Poedit,进入「编辑 > 首选项 > 解析器」
- 找到PHP解析器,查看其关键字列表里是否有
_x:1,2c(这个规则告诉Poedit:抓取_x的第1个参数作为翻译文本,第2个参数作为上下文) - 如果没有这个规则,点击「添加」,关键字填
_x:1,2c,保存后重新扫描主题文件,确保所有带上下文的_x字符串都被正确导入。
3. 验证翻译文件的命名与加载
WordPress对翻译文件的命名和加载路径有严格要求:
- 翻译文件命名必须是
文本域-语言代码.mo,比如你的文本域是maria,德语(德国)的文件应该是maria-de_DE.mo(注意是de_DE,不是de) - 把.mo文件放在主题的
languages目录下,同时确保主题在functions.php里正确加载翻译:function maria_load_textdomain() { load_theme_textdomain( 'maria', get_template_directory() . '/languages' ); } add_action( 'after_setup_theme', 'maria_load_textdomain' ); - 检查WordPress后台「设置 > 常规」里的站点语言是否设置为
Deutsch (Deutschland)(对应语言代码de_DE),语言代码不匹配的话翻译也不会生效。
4. 检查文本域的一致性
确保所有_x函数的第三个参数(文本域)都是'maria',同时Poedit项目设置里的「文本域」也设置为maria——文本域是大小写敏感的,必须和代码里完全一致。
5. 清除缓存
最后别忘了清除缓存:
- 如果用了WordPress缓存插件,比如WP Rocket、W3 Total Cache,先清除插件缓存
- 浏览器按
Ctrl+F5强制刷新,避免旧的缓存内容干扰显示
按照上面的步骤排查,尤其是前两点(上下文匹配和Poedit解析规则),应该就能解决_x函数翻译不生效的问题了。
内容的提问来源于stack exchange,提问作者wandervogel
相关产品推荐
相关产品推荐

