AumCreate

.pot、.po、.mo:WordPress 的语言文件是什么,怎么翻

· 2026年9月23日 对照真实界面核对

主题或插件随包发一个 .pot 文件:里面是所有可翻译的字符串,没有译文。您按自己的语言复制一份成 .po 并填上译文,然后把这个 .po 编译成 .mo,因为 WordPress 运行时读的是 .mo,光有 .po 站上一个字都不会变。

如果您填好的译文没生效,答案几乎总在这一页的最后两节:要么没编译,要么文件名不对。

三个文件,各一句话

  • .pot,模板。主题或插件里所有可翻译的字符串,译文是空的。开发者从源码里生成,您不改它,您复制它。
  • .po,某一种语言。纯文本,每条原文下面是您的译文。您实际干活的就是这个文件。
  • .mo,.po 的编译产物。二进制,不是给人读的。WordPress 加载的是它。

WordPress 6.5 起还有第四种:.l10n.php,加载更快,存在时优先用它,.mo 兜底。您不需要自己生成它:WordPress 会生成,但它能解释您为什么会看到一个自己没放过的文件。

从 .pot 到站上真的生效,四步

  1. 找到 .pot。它一般在插件或主题目录下的 languages/ 里。
  2. 按下一节的命名规则,复制一份改成您那种语言的 .po
  3. 翻里面的条目,在 PO 编辑器里一条条翻,或者批量翻。每一个占位符都要跟原文一模一样。
  4. 把 .po 编译成 .mo,两个文件都放到 WordPress 会找的地方。没装 gettext 的话,浏览器里就能编译

文件大的话,一条条手翻才是要花几天的那一步。PO / POT 翻译工具一次把整个文件翻完、导回同一个格式;它只发字符串,文件不上传。

文件名不是细节,它就是全部

WordPress 是按 {文本域}-{locale}.mo 去找文件的。名字错一个字,这个文件对 WordPress 来说就是不存在:它静默退回英文。不报错、不提示、没有任何线索。这是一份翻好的文件什么都没干的头号原因。

  • 文本域是插件或主题自己的:woocommercetwentytwentyfivemy-cool-plugin。它声明在插件头部,不一定等于文件夹名
  • locale 是 WordPress 的那一套,不是两位语言码。简体中文是 zh_CN、英语 en_US、法语 fr_FR;但日语是 ja、阿拉伯语 ar、芬兰语 fi,一个地区码都没有。
  • 源文件本身已经带了 locale 的(woocommerce-en_US.po),要先把它剪掉再接新的,否则拼出 woocommerce-en_US-zh_CN.mo,谁也匹配不上。

文件放哪儿

两个地方都能用,区别在插件更新的时候。

  • wp-content/languages/plugins/wp-content/languages/themes/用这两个。 WordPress 先查这里,而且插件或主题更新覆盖不到您的文件。
  • 插件或主题自己的 languages/ 目录,也能用,但下次更新会把整个目录换掉,您的译文就没了。

译文看着没问题却不生效,按这个顺序查

  1. 到底有没有 .mo?光一个 .po 什么都不会发生。这条先排掉。
  2. 文件名是不是严格{文本域}-{locale}.mo?文本域去插件头部看,locale 对照 WordPress 自己那张表。
  3. 站点语言是不是真的设成了那种语言(设置 → 常规)?
  4. 文件在不在 wp-content/languages/…?如果只放在插件目录里、而插件更新过,它已经没了。
  5. 还是没有:清对象缓存和页面缓存。翻译每个请求只加载一次,而且缓存得很凶。

占位符:唯一一个不能含糊的地方

显示 %1$s 条,共 %2$s 条 这种字符串里带着 PHP 要往里填的占位符。译文如果丢了一个、或者没用带编号的形式就调换了顺序、或者把 %s 打成了全角的 %s,那不是显示问题,是真实页面上的运行时错误。文件发出去之前先查占位符;好一点的编译工具会替您标出来。

常见问题

我直接传 .po 文件不行吗?
不行。WordPress 读的是 `.mo`(6.5 起还有 `.l10n.php`),从来不读 `.po`。把 `.po` 放进 languages 目录,站上一个字都不会变:这就是它坑住这么多人的原因:什么都没坏、什么都没报,站还是英文的。
我必须装 gettext 或者 Poedit 吗?
编译这一步不用。浏览器里就能把 .po 变成 .mo,什么都不用装:[我们这个是在本地转的](/tools/po-compiler?utm_source=guide&utm_medium=tutorial&utm_campaign=po-files),文件不离开您的电脑。要一条条仔细改的话,桌面版 PO 编辑器仍然更好用。
.pot 里没有的那些字符串怎么办?
它们在源码里就没有被标成可翻译的,所以任何语言文件都够不着它们。那要改主题或插件本身,不是一个语言文件能解决的。而您自己写的内容:页面、商品、文章:又是另一回事,那需要一个多语言插件,不是 .po 文件。
主题翻好了,插件还是英文,为什么?
每个主题和插件都有自己的文本域和自己的语言文件,翻好一个对其他的毫无影响。站点语言如果是 WordPress 支持的,很多插件会自动从 translate.wordpress.org 拿到译文;剩下的缺口通常是商业插件,没有人替您翻过它们。

这篇教程里的插件

AumLang翻译 Elementor、Gutenberg 和 WooCommerce 的内容而不破坏版式,同时把 SEO 那一半做对:每种语言一个 URL、hreflang、canonical、站点地图。插件页面