Translating the docs
This page is for translators, and for anyone whose English edit changes a
paragraph that has a translation. The site is published in English and
Simplified Chinese; the Chinese pages are at /zh_CN/ and the sidebar
switches between them.
The pages are written in English and translated with Sphinx’s gettext workflow, so a translation is attached to each paragraph of source text rather than to a whole file. Any string without a translation falls back to English, so the site always builds complete.
make docs-gettext # extract one catalog template per page
make docs-translate DOCS_LANG=zh_CN # create or update that language's catalogs
# edit docs/developer/locale/zh_CN/LC_MESSAGES/*.po -- fill in msgstr
make docs-lang DOCS_LANG=zh_CN # build that language alone and read it
make docs-verify # what CI runs: the full site plus checks
A catalog entry pairs the English source with its translation:
msgid "Cloud Agent runs coding agents against a user's repository inside retained sandbox containers."
msgstr "Cloud Agent 在保留的沙箱容器中,针对用户的仓库运行编码 agent。"
The English text is the lookup key, so editing a paragraph invalidates its
translation automatically: the page falls back to English for that paragraph
instead of serving a translation that no longer matches what the code does.
That is the reason to use catalogs rather than parallel .zh-CN.md files,
which drift silently.
Commit the .po files. docs/gettext/ and compiled .mo files are generated
and ignored.
When you change an English page
Run make docs-translate and translate the entries it adds or marks
#, fuzzy, then delete the #, fuzzy line and any obsolete #~ entries.
make docs-verify fails until every English string has a current
translation. If you cannot translate a change yourself, say so in the pull
request; a reviewer who can will add it.
Chinese style
Write the Chinese an experienced colleague would write to explain the page, not a sentence-by-sentence rendering of the English. Read the whole section first, work out what it is telling the reader, and then say that in Chinese. A reader should not be able to tell which language the page was written in.
Keep every fact. Natural is not looser: a condition, a number, a default, an order of steps or a warning in the English stays in the Chinese, with the same strength. Do not add explanations the English does not give.
Rebuild long sentences. English hangs conditions and details off a noun in relative clauses; Chinese states the condition first and then the result, and splits a long sentence into short ones. A string of 的 in front of a noun is the usual sign that a clause should become its own sentence.
Drop the pronouns and filler English needs. Most it, its and they disappear in Chinese or become the noun they stand for. Leave out 进行, 一个 in front of every noun, 能够 and 从而 unless they carry meaning. Prefer the active voice; use 被 only when the passive is the point.
Translate the meaning, not the word. That exact host is 这台主机, not 那台确切的主机; runs agents against a repository is 处理仓库; buys inference is 调用模型. When an English idiom has no direct Chinese equivalent, say plainly what it means.
Talk to the reader. Address the reader as 你 in instructions, and use 请 sparingly. Spell out what to do in the order they will do it.
Stiff |
Natural |
|---|---|
Cloud Agent 在保留的沙箱容器中针对用户的仓库运行编码 agent。 |
Cloud Agent 让编码 agent 在保留的沙箱容器里处理用户的仓库。 |
编排器会等待,直到那台确切的主机仍报告 |
编排器会一直等到这台主机报告 |
授权部署就绪检查只接受这一台被命名的排空主机。 |
这样部署的就绪检查只会放行这一台正在排空的主机。 |
Chinese traps
The first three are silent: the build stays green and the page is wrong. The
structural check in make docs-verify catches them.
Keep code, link targets and markup exactly. Inline code, URLs, link targets, anchors, environment variable names and command lines stay as they are. Translate a link’s text, never its target. The check compares the inline code literals and link targets of each translated page with the English one.
A heading that starts with a number is dropped. MyST reads 1. as a list
marker, the structure no longer matches the source, and Sphinx emits the
English heading. Escape the period: msgstr "1\. 申请一个节点".
Emphasis next to Chinese punctuation. A closing ** preceded by a Chinese
full stop and followed by a Chinese character is not recognised, so
**术语。**后文 shows literal asterisks. Put the punctuation outside the bold:
**术语**。后文. The same applies when bold text starts or ends with code or a
quotation mark: **`AGENT_TIMEOUT_S`**的默认值 breaks, so add a space,
**`AGENT_TIMEOUT_S`** 的默认值.
A stale .mo masks your edits. Sphinx skips recompiling when the .mo is
newer than its .po. Before checking a build, run
find docs/developer/locale -name '*.mo' -delete.
Chinese terminology
Use the same Chinese for a term on every page. Product and component names, UI labels shown in bold, API fields, states and command names stay in English.
English |
Chinese |
|---|---|
control plane |
控制平面 |
host, execution host |
主机、执行主机 |
sandbox, sandbox group |
沙箱、沙箱组 |
retained sandbox |
保留沙箱 |
conversation, chat |
对话 |
task |
任务 |
turn |
轮次(一轮) |
follow-up |
后续消息 |
workspace |
工作区 |
snapshot |
快照 |
publish, publication |
发布 |
checkpoint |
检查点 |
archive |
归档 |
enroll, enrollment |
注册 |
heartbeat |
心跳 |
lease |
租约 |
claim |
认领 |
drain |
排空 |
fence |
栅栏 |
adopt (an issuer or existing data) |
认定 |
take over, takeover |
接管 |
checkout (noun / verb) |
本地仓库、仓库副本 / 检出 |
stack |
一套服务、环境 |
provider |
服务商 |
inference grant |
推理授权 |
credential |
凭据 |
token |
令牌 |
relay, tunnel |
中继、隧道 |
bridge |
网桥 |
resolver |
解析器 |
owner |
所有者 |
member |
成员 |
operator |
运维人员 |
administrator |
管理员 |
deployment |
部署 |
distribution |
发行版 |
migration |
迁移 |
native session |
原生会话 |
gateway |
网关(HybridInference Gateway) |
runner, Sandbox Manager, Fork, Kata, MCP, attempt, residency, execution profile |
runner、Sandbox Manager、Fork、Kata、MCP、attempt、residency、execution profile |