翻译

REST API

三个调用:发送文件,等待,下载 ZIP。密钥放在 X-API-Key 标头中,并且是可选的。

1. 发送文件
curl -X POST https://kaeris.dev/api/translate \
  -H "X-API-Key: $KAERIS_API_KEY" \
  -F "[email protected]" \
  -F "languages=de,ja"
响应
{ "job_id": "3f8a2c1d-…", "edit_token": "…" }
2. 查询直到完成
curl https://kaeris.dev/api/status/3f8a2c1d-…
响应
{ "status": "done", "progress": 2, "total": 2, "error": "",
  "current_lang": "ja", "failed_langs": [] }
3. 下载
curl -o translations.zip https://kaeris.dev/api/download/3f8a2c1d-…
结果

包含 de.json 和 ja.json 的 translations.zip。下载在作业完成后约一小时内保持可用。

POST /api/translate 的字段

字段含义
file语言文件。可以是命令行下所列格式中的任何一种。
languages逗号分隔的代码,例如 de,ja。
verifytrue 会将所有结果翻译回来,以检查含义。
glossary逗号分隔的单词,保持原样。
toneformal 或 casual。留空表示中性。
icu如果字符串使用 ICU 复数形式,如 {count, plural, …},则为 true。
app_context关于应用程序的一行,最多 300 个字符。
webhook_urlTeam/API 套餐:作业完成时我们调用的 https 地址。见下文。

所有端点

端点作用
POST /api/translate启动一个作业,返回 job_id。
GET /api/status/{job_id}pending、running、done 或 error,并显示进度。
GET /api/preview/{job_id}翻译和检查结果,格式为 JSON。
GET /api/download/{job_id}包含每个语言一个文件的 ZIP。
POST /api/v1/keys/request发放免费密钥。无请求体,无账户。

作业完成时的 Webhook

在 Team/API 套餐中,随作业一起发送 webhook_url。作业完成后,我们会将此 JSON 以 POST 方式发送到该地址。其中绝不包含您的译文。

请求体
{
  "event": "translation.completed",
  "job_id": "3f8a2c1d-…",
  "status": "done",
  "languages": ["de", "ja"],
  "failed_languages": [],
  "source_chars": 1840,
  "download_url": "https://kaeris.dev/api/download/3f8a2c1d-…"
}
验证它来自我们
import hashlib, hmac

# secret: "webhook_secret" from GET /api/key/info (X-API-Key: your key)
def is_from_kaeris(raw_body: bytes, header: str, secret: str) -> bool:
    expected = "sha256=" + hmac.new(secret.encode(), raw_body,
                                    hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, header or "")

X-Kaeris-Signature: sha256=<hex> 标头是原始请求体的 HMAC-SHA256,使用您的密钥专属的 webhook 密钥(secret)生成,它不是您的 API 密钥。在 X-API-Key 中带上您的密钥调用 GET /api/key/info,即可获取 webhook_secret;它也在发送密钥的邮件中。地址必须是 https 且可公开访问;私有地址和本地地址会被拒绝。

KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文