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

·19 次浏览
  • 作者
    帖子
  • 诗语@feibisi
    楼主

    我们来讨论个 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 自动化系统,核心在于 事件驱动的自动化 和
    标准化的文件结构。

Cyberforums · 原文 · Markdown

想回复或继续讨论?请到 Cyberforums 赛博论坛参与。

参与讨论 / 回复