feat(i18n): 接入翻译 provider worker
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

Closes #44
This commit is contained in:
2026-08-30 21:13:31 +08:00
parent 7f465523e1
commit f441f1810e
29 changed files with 3815 additions and 130 deletions
+36 -2
View File
@@ -133,9 +133,30 @@ bat i18n publish \
发布只接受当前实现支持的直接 TextAsset 条目;TypeTree 字段和 zip 内 bundle 使用 `parse repack` 的 spec 单独处理。`--force` 不覆盖已有目录,而是生成独立的 `<official-release>-manual-<unix-seconds>` 汉化 release ID;也可以用 `--localized-release-id` 显式指定新 ID。因此强制发布仍保留旧 release 和 rollback 信息。
当前 `i18n run` 是离线工作流:刷新 TextUnit 队列,并可用 `--translation-file` 导出工作台;不会假装调用未接入的外部 provider
当前 `i18n run` 是离线工作流:刷新 TextUnit 队列,并可用 `--translation-file` 导出工作台;真实 provider 由单独的 worker 命令消费 `translation-tasks.sqlite`
provider worker 消费 handoff 后,可以用 `i18n task update` 回写当前 release 的任务状态
运行一次 mock provider worker
```bash
bat i18n worker run \
--output /tmp/bat-resources \
--provider mock \
--worker-concurrency 8
```
`--provider` 支持 `mock``crowdin``mock` 可通过 `--translation-fixture`
读取本地 JSON fixture`crowdin` 从环境变量 `CROWDIN_PROJECT_ID`
`CROWDIN_LANGUAGE_ID``CROWDIN_API_TOKEN` 读取配置。worker 默认并发为 8,
范围 `1..=256`;每个 worker 完成当前任务后立即从 SQLite 队列领取下一项,
不会等待当前一批 worker 全部结束后再重新分配。
可用参数包括 `--worker-max-attempts``--worker-lease-seconds`
`--worker-retry-backoff` / `--worker-retry-backoff-seconds`
`--worker-max-tasks``--worker-id`。worker 支持 `--run-count`
`--watch`,因此可以单次、限定次数或周期执行;`--run-count > 1` 时仍必须
显式指定 `--interval`
外部 provider 或人工流程也可以用 `i18n task update` 回写当前 release 的任务状态:
```bash
bat i18n task update \
@@ -224,11 +245,24 @@ contract`id`、`group`、`action`、`args`、`next_run_unix_seconds`、
`enabled``schedule.list` 额外接受 `id``group``enabled` 过滤,
`schedule.run` 额外接受 `group``force``max_runs`
翻译任务状态可由已鉴权的 dashboard 通过 `GET /admin/translation/tasks`
查询,query 过滤项包括 `offset``limit``task_id``release_id`
`destination``path_pattern``archive_entry``status``worker_status`
`parse_status``format``has_reason``has_failure_reason`。完整 provider
run 交接视图通过 `GET /admin/translation/handoff` 查询。两个查询接口都只转发
Rust `translation.tasks` / `translation.handoff`,不在 Go 侧维护状态。
翻译任务状态也可由已鉴权的 dashboard 通过
`POST /admin/control/translation-task-update` 回写,请求字段为
`task_id``status`,以及可选的 `failure_reason``provider_run_id`
该接口只转发 `translation.task.update`
`POST /admin/control/translation-worker-run` 会触发 Rust 侧
`translation.worker.run`,请求字段为 `provider``fixture_path`
`concurrency``max_attempts``lease_seconds``retry_backoff_seconds`
`max_tasks``worker_id`。bat-api 只做鉴权、JSON 解码和基础范围校验;
任务状态、lease、重试和 provider 结果仍由 Rust 持久化。
`POST /admin/control/translation-proofread` 会把当前汉化 workflow 标记为人工校对中;
该接口只转发 `translation.proofread`,不会改动已发布汉化 release 指针。