.pot、.po、.mo:WordPress 语言文件的作用与翻译方法
· 2026年10月18日 更新· 2026年9月23日 对照实际界面核对
主题或插件随附一个 .pot 文件,其中包含所有可翻译的字符串,但没有译文。将其复制为目标语言的 .po 文件并填写译文,再把 .po 编译成 .mo。WordPress 运行时读取的是 .mo;只有 .po 文件时,网站上的文字不会有任何变化。
译文完成后未在网站上生效,常见原因是没有编译,或文件名不正确。这两项在本页最后几节说明。
三种文件
- .pot:模板。包含主题或插件中所有可翻译的字符串,译文为空。由开发者从源码生成,使用时复制,不直接修改。
- .po:某一种语言的译文。纯文本,每条原文下方是对应译文。翻译工作在这个文件中进行。
- .mo:.po 的编译结果。二进制格式,不供人阅读。WordPress 加载的是这个文件。
WordPress 6.5 起还有第四种格式:.l10n.php。它加载更快,存在时优先使用,.mo 作为备用。该文件无需手动生成,WordPress 会自动生成,因此语言目录中可能出现未手动添加的文件。
翻译 .pot 文件的步骤
- 找到 .pot 文件。它通常位于插件或主题目录下的
languages/中。 - 按下一节的命名规则,将其复制为目标语言的
.po文件。 - 翻译其中的条目,可在 PO 编辑器中逐条翻译,也可批量翻译。每个占位符都必须与原文完全一致。
- 将 .po 编译成 .mo,并把两个文件放到 WordPress 读取的位置。未安装 gettext 时,可使用免费的浏览器编译工具。
文件较大时,PO / POT 翻译工具可一次翻译整个文件,并导出为相同格式。工具只发送字符串,不上传文件。
文件命名
WordPress 按 {文本域}-{locale}.mo 查找文件。文件名只要有一个字符不同,WordPress 就不会加载该文件,并直接回退到英文,不显示任何错误或提示。这是译文完成后不生效的最常见原因。
- 文本域由插件或主题自身定义,例如
woocommerce、twentytwentyfive、my-cool-plugin。它声明在插件头部,不一定与文件夹名相同。 - locale 使用 WordPress 的区域代码,而不是两位语言码。简体中文为
zh_CN、英语为en_US、法语为fr_FR;日语为ja、阿拉伯语为ar、芬兰语为fi,不带地区码。 - 源文件名已包含 locale 时(如
woocommerce-en_US.po),需先去掉原有 locale 再添加新的,否则会得到woocommerce-en_US-zh_CN.mo,无法匹配任何语言。
文件存放位置
WordPress 会从两个位置加载译文,两者在插件或主题更新时的表现不同。
wp-content/languages/plugins/和wp-content/languages/themes/:推荐使用。 WordPress 优先读取这里,插件或主题更新不会覆盖其中的文件。- 插件或主题自身的
languages/目录:同样会被读取,但下次更新会替换整个目录,译文随之丢失。
译文未生效的排查顺序
- 确认存在
.mo文件。只有.po文件不会产生任何效果。 - 确认文件名严格符合
{文本域}-{locale}.mo。文本域以插件头部为准,locale 以 WordPress 的区域代码列表为准。 - 确认站点语言已在 设置 → 常规 中设为该语言。
- 确认文件位于
wp-content/languages/…。只放在插件目录中的文件,会在插件更新时被删除。 - 仍未生效时,清除对象缓存和页面缓存。译文在每个请求中只加载一次,并会被缓存。
占位符
显示 %1$s 条,共 %2$s 条 这类字符串包含由 PHP 填入数值的占位符。译文中缺少占位符、未使用编号形式就调换顺序,或把 %s 写成全角的 %s,都不是显示问题,而是页面上的运行时错误。部署文件前应检查占位符;带有占位符检查的编译工具会标出这类错误。
常见问题
- 可以只上传 .po 文件吗?
- 不可以。WordPress 读取的是 `.mo`(6.5 起还包括 `.l10n.php`),不读取 `.po`。把 `.po` 放进 languages 目录不会产生任何效果,不会有错误提示,网站仍显示英文。
- 是否必须安装 gettext 或 Poedit?
- 编译这一步不需要。浏览器工具无需安装任何软件即可将 .po 转换为 .mo。[AumCreate 的 PO 编译工具](/tools/po-compiler?utm_source=guide&utm_medium=tutorial&utm_campaign=po-files)在浏览器本地运行,文件不会上传。需要逐条细致修改时,桌面版 PO 编辑器更为合适。
- .pot 中没有的字符串如何处理?
- 这些字符串在源码中没有被标记为可翻译,任何语言文件都无法翻译它们,需要修改主题或插件本身。页面、商品、文章等站点内容,则需使用多语言插件翻译,而不是 .po 文件。
- 主题已翻译,插件仍显示英文,原因是什么?
- 每个主题和插件都有各自的文本域和语言文件,翻译其中一个不会影响其他。对于 WordPress 支持的语言,很多插件会自动从 translate.wordpress.org 获取译文;商业插件通常不在此范围内。
这篇教程里的插件
AumLang翻译支持的 Elementor、Gutenberg 和 WooCommerce 内容,并提供独立语言 URL、hreflang、分语言 canonical 设置和多语言 Sitemap 支持。插件页面 →