我们来讨论个 WordPress 和 glotpress 的技术问题,你来告诉我为什么
WordPress.org 上的主题插件和 readme.txt 可以自动加载到 glotpress
项目中并且进行翻译后自动显示?
这是 WordPress.org
生态系统中一个精心设计的自动化流程。让我解释其工作原理:
自动加载到 GlotPress 的机制
- SVN 钩子监听
当插件/主题开发者向 WordPress.org SVN 仓库提交代码时:
- SVN 服务器配置了 post-commit hooks
- 这些钩子会触发自动化脚本检测新提交
- 自动提取流程
SVN Commit → 触发钩子 → 扫描文件变更
↓
检测到 readme.txt 或代码文件
↓
运行提取工具(类似 wp i18n make-pot)
↓
生成/更新 POT 文件
↓
自动导入到 GlotPress 项目
- 核心组件
字符串提取:
- 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/
- 翻译后自动显示机制
构建语言包:
翻译者在 GlotPress 提交翻译
↓
达到审核阈值(通常需要编辑器批准)
↓
自动触发语言包构建
↓
生成 .po 和 .mo 文件
↓
打包成 ZIP(包含所有翻译域)
↓
部署到 translate.wordpress.org CDN
WordPress 站点自动下载:
// WordPress 核心会定期检查
update_translations()
↓
查询 API:api.wordpress.org/translations/plugins/1.0/
↓
检测可用的新语言包
↓
下载到 wp-content/languages/plugins/
↓
自动加载使用
- 关键技术点
API 端点:
- https://api.wordpress.org/translations/plugins/1.0/?slug={plugin-slug}&v
ersion={version} - 返回该插件所有可用语言包的元数据
自动加载逻辑:
// 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)
- 也可手动触发:仪表板 → 更新
- 为什么是自动的?
集成层级:
- SVN → GlotPress:post-commit hooks
- GlotPress → 语言包:cronjob 构建器
- 语言包 → WordPress:核心更新机制
WordPress.org 特权:
- 这套系统是 WordPress.org 官方基础设施的一部分
- 使用了内部 API 和直接数据库访问
- 不是通过公开 API 实现的
如果你想实现类似系统
需要构建以下组件:
- 代码仓库钩子 → 检测提交
- 字符串提取器 → 解析 POT
- GlotPress 集成 → 自动导入/导出
- 构建管道 → 生成语言包
- 分发 API → 提供给客户端
- 客户端更新器 → 自动下载和加载
这是一个完整的 CI/CD + i18n 自动化系统,核心在于 事件驱动的自动化 和
标准化的文件结构。