搜索全站
插件 8 分钟阅读

Loco Translate 完整教程:后台直接汉化未翻译的插件与主题

不想改代码也能汉化插件?本文讲清 Loco Translate 的完整用法:系统语言目录与自定义目录的区别、后台新建 zh_CN 语言文件的正确位置、Sync 同步与模板匹配、升级后翻译被覆盖的规避办法。

U
UFO_PF 2024-03-23 · 阅读 8 分钟
Lo 插件
阅读提示
本文约 3,143 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:装了个好插件,可惜只有英文

这是国内站长最高频的处境:某个小众但好用的插件没有中文包,或者官方中文包只翻了 60%,剩下的英文混在中文界面里特别别扭。自己下载源码改?下次插件一升级,改动全被覆盖。找翻译平台提交?周期长,还不一定有人接。

Loco Translate 就是为这个场景存在的:它是 WordPress 官方目录里一款免费的翻译文件编辑器,能在后台直接看到插件里所有待翻译的字符串,逐条填中文,保存后自动生成 .mo 并生效,全程不碰 FTP、不改源码。但要真正用稳,必须搞懂”翻译文件该放哪”——这一步做错,轻则升级丢翻译,重则整站后台变成半中半英。

原理分析:三个语言目录,优先级完全不同

WordPress 加载插件翻译时,查找顺序是有讲究的。Loco Translate 把目录分成三类,理解它们的差别就理解了 80% 的坑:

位置 典型路径 特点
系统目录(System) wp-content/languages/plugins/{domain}-zh_CN.mo WordPress 官方语言包、Loco 的”系统”位置;插件升级不会覆盖,优先级最高,推荐
自定义/作者目录(Custom / Author) wp-content/plugins/{plugin}/languages/{domain}-zh_CN.mo 插件作者自带的语言包;插件一升级就可能被覆盖
第三方目录(Third party) wp-content/languages/loco/plugins/{domain}-zh_CN.po Loco 自己管理的目录,实际生效文件仍在系统目录

关键点:Loco Translate 默认会把新建的语言文件写到系统目录。你在后台看到”Custom”位置时,一定要主动改成系统位置再保存,否则翻译跟着插件目录走,升级即丢。

另一件事是 PO 文件的结构。一个条目长这样:

#: includes/class-admin.php:42
msgid "Export Orders"
msgstr "导出订单"

msgid 是源码里的英文原文,msgstr 是你的译文,#: 是它在源码中的位置。Loco 的 Sync(同步) 按钮做的就是:重新扫描源码里的字符串,和 POT 模板比对,把新增的加进来、把源码里已删除的标记为”废弃”。插件升级后第一件事就是点 Sync。

保姆级实操

第一步:安装并确认文件可写

后台”插件 → 安装插件”搜索 Loco Translate 安装启用。进入 Loco Translate → 主页,先做一次自检:

# 若后台提示目录不可写,用 SSH 确认属主与权限
ls -ld wp-content/languages wp-content/languages/plugins
id www-data 2>/dev/null || ps aux | grep -E 'php-fpm|nginx|apache' | head -5

大多数虚拟主机是 PHP 以站点属主身份运行,wp-content/languages 可写就没问题;如果是 root 属主,需要改成 Web 服务用户,或在 Loco 的”设置 → 文件系统访问”里开启写入。

第二步:找到目标插件,新建中文语言文件

进入 Loco Translate → 插件,在列表里点你的插件。此时通常会出现几个按钮:

  • Create template(创建模板):插件没自带 .pot 时点它,Loco 会扫描源码生成 POT;
  • New language file(新建语言文件):点它,语言选 Chinese (China),即 zh_CN;
  • 位置一项,务必选 “System”(系统目录),不要选 Custom。

第三步:逐条翻译并保存

编辑器界面左侧是待翻译条目,右侧输入框填中文。几个实用功能:

  • 顶部筛选器可只看”未翻译”;
  • 勾选 “Fuzzy(模糊)” 的条目表示源码字符串被改过,译文可能不匹配,要重点复查;
  • 填完点 Save,Loco 会同时写 .po 和编译 .mo;

%s、%d、%1$s 这类占位符必须原样保留,数量和顺序都要对。

第四步:验证是否生效

# 确认 mo 文件真的生成了
ls -l wp-content/languages/plugins/ | grep zh_CN

# 切到中文站点语言后,确认 WordPress 读到了它
wp eval "load_plugin_textdomain('your-plugin'); var_dump( is_textdomain_loaded('your-plugin') );"

如果返回 bool(true),说明加载成功;返回 false,先检查文件名是否是 {text-domain}-zh_CN.mo 的格式,text domain 大小写和连字符都要和插件头部一致。

第五步:插件升级后同步

插件更新后回到 Loco Translate → 插件 → 该插件,点 Sync,Loco 会把源码里新增的字符串并入现有语言文件,已翻译的部分不会丢。同步完再补翻新增条目即可。

常见踩坑

  1. 语言文件建在了插件目录里。升级一次全没,最典型的翻车。新建时一定选 System 位置。
  2. 改了半天的翻译没生效。多半是文件名不对,或者是站点语言(设置 → 常规)没切到”简体中文”。也有可能是对象缓存把翻译缓存住了,需要清一次。
  3. 翻译里有 %s 被吃掉。填中文时顺手删掉了占位符,结果前台显示”本次共导出 条”,数字不翼而飞。
  4. JS 构建产物里的字符串翻不到。现代插件用 React 写后台,源码里的 __() 已经编译进 build/index.js,Loco 扫描 PHP 源码扫不到。这类插件需要用 wp_set_script_translations() 机制,或等官方语言包。
  5. 案例:一位站长用 Loco 给一个表单插件做了完整汉化,位置选了默认的 Custom。三个月后插件自动更新,前台表单提示全部变回英文,客户投诉”网站被改坏了”。排查发现 wp-content/plugins/xxx/languages/ 被新版本整目录替换。后来把 .po/.mo 两个文件复制到 wp-content/languages/plugins/ 才彻底解决,之后再没丢过。
  6. 开了自动翻译 API 导致译文质量参差。Loco 支持接第三方翻译 API 批量机翻,但技术术语(如 “hook”、”nonce”)常被译成莫名其妙的词,建议机翻后人工过一遍关键界面。
  7. 把主题和插件搞混。主题翻译在 Loco Translate → 主题 下,路径是 wp-content/languages/themes/,别在插件页里找。

总结

用 Loco Translate 汉化插件,判断标准只有一条:语言文件最终落在 wp-content/languages/plugins/{domain}-zh_CN.mo,而不是插件自己的目录。在此基础上,每次插件升级后点一次 Sync,翻译就能长期存活。对于需要长期维护的站点,建议把 wp-content/languages/ 整个目录纳入备份范围 —— 它才是你所有汉化工作的真正资产。

想从开发侧根治这个问题,可以看 插件国际化与文本域规范;如果你的插件还涉及前台多语言切换,建议配合 WordPress 多语言插件选型 一起规划。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。