为什么 WordPress .org 上的主题插件和 readme.txt 可以自动加载到 GlotPress

我们来讨论个 WordPress 和 glotpress 的技术问题,你来告诉我为什么
WordPress.org 上的主题插件和 readme.txt 可以自动加载到 glotpress
项目中并且进行翻译后自动显示?

这是 WordPress.org
生态系统中一个精心设计的自动化流程。让我解释其工作原理:

自动加载到 GlotPress 的机制

  1. SVN 钩子监听

当插件/主题开发者向 WordPress.org SVN 仓库提交代码时:

  • SVN 服务器配置了 post-commit hooks
  • 这些钩子会触发自动化脚本检测新提交
  1. 自动提取流程

SVN Commit → 触发钩子 → 扫描文件变更

检测到 readme.txt 或代码文件

运行提取工具(类似 wp i18n make-pot)

生成/更新 POT 文件

自动导入到 GlotPress 项目

  1. 核心组件

字符串提取:

  • readme.txt 中的特定字段(Plugin Name, Description, Tags 等)
  • PHP 代码中的 _(), e(), esc_html() 等国际化函数
  • JavaScript 中的 wp.i18n.__() 函数

GlotPress 集成:

  • WordPress.org 使用自定义集成层连接 SVN 和 GlotPress
  • 每个插件/主题自动创建对应的 GlotPress 项目
  • 项目结构:/plugins/plugin-slug/ 和 /themes/theme-slug/
  1. 翻译后自动显示机制

构建语言包:
翻译者在 GlotPress 提交翻译

达到审核阈值(通常需要编辑器批准)

自动触发语言包构建

生成 .po 和 .mo 文件

打包成 ZIP(包含所有翻译域)

部署到 translate.wordpress.org CDN

WordPress 站点自动下载:
// WordPress 核心会定期检查
update_translations()

查询 API:api.wordpress.org/translations/plugins/1.0/

检测可用的新语言包

下载到 wp-content/languages/plugins/

自动加载使用

  1. 关键技术点

API 端点:

自动加载逻辑:
// WordPress 核心在加载插件时
load_plugin_textdomain(‘plugin-slug’, false,
dirname(plugin_basename(FILE)) . ‘/languages’);

// 如果本地不存在翻译文件,会从 CDN 加载
// wp-content/languages/plugins/plugin-slug-zh_CN.mo

更新频率:

  • 语言包构建:翻译批准后几分钟内
  • WordPress 检查更新:每 12 小时(通过 wp-cron)
  • 也可手动触发:仪表板 → 更新
  1. 为什么是自动的?

集成层级:

  1. SVN → GlotPress:post-commit hooks
  2. GlotPress → 语言包:cronjob 构建器
  3. 语言包 → WordPress:核心更新机制

WordPress.org 特权:

  • 这套系统是 WordPress.org 官方基础设施的一部分
  • 使用了内部 API 和直接数据库访问
  • 不是通过公开 API 实现的

如果你想实现类似系统

需要构建以下组件:

  1. 代码仓库钩子 → 检测提交
  2. 字符串提取器 → 解析 POT
  3. GlotPress 集成 → 自动导入/导出
  4. 构建管道 → 生成语言包
  5. 分发 API → 提供给客户端
  6. 客户端更新器 → 自动下载和加载

这是一个完整的 CI/CD + i18n 自动化系统,核心在于 事件驱动的自动化 和
标准化的文件结构。