如何将翻译结果推送到在线协作平台供校对

解读

面试官真正想考察的是“在 Grunt 体系里,如何把构建产物(翻译结果)自动、安全、可追溯地同步到远程协作平台,并触发校对流程”。
国内主流场景通常对接语雀、飞书多维表格、腾讯文档、钉钉群文件、石墨文档、企业微信微盘等 SaaS,或自托管的Git 私有仓库、MinIO、阿里云 OSS、腾讯云 COS
答题时要体现三点:

  1. 产物标准化(目录、命名、版本号、校验和)
  2. 鉴权与传输安全(HTTPS、STS 临时密钥、Webhook 签名)
  3. 触发校对(PR / 评论 / 飞书机器人 / 钉钉群机器人)
    同时需兼顾国内网络环境(GitHub 不稳定、公司内网需代理)和合规要求(代码、翻译数据不出境)。

知识点

  • grunt-contrib-copy / grunt-zip:把翻译结果(JSON、PO、XLIFF、Markdown)打成版本化压缩包
  • grunt-http-upload / grunt-ssh-deploy:基于 HTTP Put 或 SCP 直传国内 OSS/COS,支持 STS 临时凭证
  • grunt-git-commit / grunt-git-push:将结果推到内网 GitLab/Gitea 仓库,通过 Merge Request 触发校对
  • grunt-exec:调用语雀 OpenAPI(curl)创建知识库文档,自动@校对人员
  • grunt-dingtalk-webhook / grunt-feishu-bot:上传完成后发送 Markdown 卡片,附带「一键校对」跳转链接
  • grunt-json-timestamp:在产物中注入构建时间、Git commit、CI 序号,保证可追溯
  • 并发与重试:使用 grunt-concurrent 和 grunt-retry 解决国内弱网丢包
  • 缓存与增量:grunt-newer 只推送变更的语种文件,节省流量
  • 合规:敏感词过滤(grunt-text-replace 对接内部敏感词服务),确保翻译内容先审后传

答案

  1. 产物准备
    在 Gruntfile 中配置 grunt-contrib-copydist/locales/ 下的 *.json{lang}/{namespace}.json 结构拷贝到 .tmp/i18n/;再用 grunt-zip 打时间戳包 i18n_20250618_1430.zip,并在包内放置 checksum.txt(sha256)。

  2. 鉴权与上传
    采用阿里云 OSS 分片上传方案:

    • grunt.initConfig 里注册 grunt-aliyun-oss 任务,使用公司 STS 服务换取 AccessKeyId/Secret/Token,过期时间 15 min,避免明文写密钥
    • 配置 bucket: my-corp-i18nregion: oss-cn-shanghaisecure: true,走内网 Endpoint 节省流量
    • 上传路径 i18n/{project}/{branch}/i18n_20250618_1430.zip,并设置 HTTP 头 Content-Disposition: attachment 防止浏览器直接预览
  3. 触发校对
    上传成功后,利用 grunt-exec 调用语雀 OpenAPI:

    curl -X POST https://www.yuque.com/api/v2/repos/my-corp/i18n/docs \
         -H "X-Auth-Token: ${YUQUE_TOKEN}" \
         -d '{"title": "待校对 i18n_20250618_1430", "public": 0, "slug": "i18n_20250618_1430"}'
    

    返回的 id 再拼接 @校对组 用户 ID,发送飞书群机器人卡片:

    {
      "msg_type": "post",
      "content": {
        "post": {
          "zh_cn": {
            "title": "新的翻译包已推送",
            "content": [[{"tag": "a", "text": "立即校对", "href": "https://www.yuque.com/my-corp/i18n/i18n_20250618_1430"}]]
          }
        }
      }
    }
    
  4. 完整任务链

    grunt.registerTask('i18n:deliver', [
      'clean:tmp',
      'copy:i18n',
      'zip:i18n',
      'checksum',
      'aliyun_oss:upload',
      'exec:yuqueCreate',
      'feishuBot:notify'
    ]);
    

    在 CI(如 GitLab Runner 或 Jenkins,部署于公司内网)里执行 grunt i18n:deliver,全程零人工干预。

  5. 回滚与审计
    若校对不通过,可在语雀文档评论 /reject,GitLab CI 监听语雀 Webhook,自动打回滚标签,回退到上一版本 ZIP;所有操作日志写入 logs/i18n-deliver.log,保留 90 天备审。

拓展思考

  • 多环境隔离:测试环境走 oss-cn-shanghai-internal,生产环境走 oss-cn-beijing-financial(金融合规区),通过 grunt-env 区分
  • 增量 diff:利用 grunt-xlsx 把新旧 JSON 转成 Excel 高亮差异,再上传到石墨文档,方便译员快速定位
  • 双向同步:校对完成后,语雀文档导出 Excel → grunt-excel-to-json → 自动提 PR 回项目,形成闭环
  • 性能优化:ZIP 前用 grunt-brotli 预压缩,OSS 上传时带上 Content-Encoding: br,减少 30% 流量
  • 安全加固:将 YUQUE_TOKENOSS_STS_ROLE_ARN 存入公司 Vault,通过 grunt-vault 动态拉取,避免落盘
  • 监控告警:上传失败或飞书机器人返回非 200 时,触发 grunt-sentry 上报异常,绑定值周译员电话,5 min 内响应