Translation status¶
English (README.md) is the source of truth. Everything else here is native human work, and nothing on this page is generated by translating prose automatically — if a machine rewrote a translator's sentences, the translator would stop translating.
scripts/check-translations.py is read-only. It reports drift; a human who reads the language fixes it.
Matrix¶
| Locale | File | Scope | Native reviewer | Translated from | Status | Next action |
|---|---|---|---|---|---|---|
हिंदी (hi) | docs/hi/index.md | full | @Sushanttmishraa — account deleted | 96711bc (2026-08-13) | active | a new native reviewer is wanted; the translation itself is unaffected |
简体中文 (zh-CN) | docs/zh-CN/index.md | partial | needed | 96711bc (2026-08-13) | active | covers install + quickstart only; a native reviewer is wanted |
Русский (ru) | docs/ru/index.md | full | @4nmus | 96711bc (2026-08-13) | active | re-check against English when the README changes materially |
| Deutsch (de) | docs/de/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #176 | | Nederlands (nl) | docs/nl/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #194 | | Tiếng Việt (vi) | docs/vi/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #205 | | Türkçe (tr) | docs/tr/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #203 | | bahasa Indonesia (id) | docs/id/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #179 | | español (es) | docs/es/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #170 | | français (fr) | docs/fr/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #175 | | italiano (it) | docs/it/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #197 | | polski (pl) | docs/pl/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #200 | | português do Brasil (pt-BR) | docs/pt-BR/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #174 | | svenska (sv) | docs/sv/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #201 | | čeština (cs) | docs/cs/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #193 | | ελληνικά (el) | docs/el/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #195 | | українська (uk) | docs/uk/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #204 | | עברית (he) | docs/he/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #196 | | اردو (ur) | docs/ur/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #232 | | العربية (ar) | docs/ar/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #190 | | فارسی (fa) | docs/fa/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #199 | | বাংলা (bn) | docs/bn/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #191 | | தமிழ் (ta) | docs/ta/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #202 | | తెలుగు (te) | docs/te/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #230 | | ไทย (th) | docs/th/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #231 | | 日本語 (ja) | docs/ja/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #177 | | 繁體中文 (zh-TW) | docs/zh-TW/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #192 | | 한국어 (ko) | docs/ko/index.md | partial | needed | 3baacb8 | draft | needs a native reviewer — #198 |
The rows above are machine-assisted drafts, generated by scripts/gen-readme-translation.py from the string table in scripts/translations.py. Each one says so in the reader's own language at the top of the file. Reviewing one is a much smaller job than translating a README from scratch, and it is the single most useful thing a native speaker can do here — correct the prose in the string table and regenerate.
Scope is what the translation claims to cover — full (the whole README) or partial (a named subset). A partial translation is not a defect; an undeclared partial translation is, because a reader cannot tell what is missing.
Status is one of:
| Status | Meaning |
|---|---|
active | reviewed by a native speaker and believed current |
draft | usable but not yet native-reviewed — must show a visible banner saying so |
stale | known to lag English materially; needs a pass before it is trusted |
Sync metadata¶
Every translation carries one HTML comment, directly under the language switcher. It renders as nothing on GitHub and exists so the checker — and the next translator — can answer "which English commit was this translated from?":
<!-- yazses-l10n: locale=ru; source=README.md; source_sha=96711bc; scope=full; status=active; reviewer=@4nmus -->
| Key | Meaning |
|---|---|
locale | BCP-47-ish tag matching the filename (README.<locale>.md) |
source | always README.md — English is the source of truth |
source_sha | the short SHA of the English README this was translated from |
scope | full or partial |
status | active, draft or stale |
reviewer | GitHub handle of the native reviewer, if there is one |
If you are updating a translation¶
- Find what changed in English since your
source_sha:
- Translate the prose that changed. Copy every command, path and URL verbatim — a translated command is the one kind of drift that actively harms a reader, because
yazses диагностикаis not a command that exists. - Update
source_shain your metadata comment to the English commit you just synced to, and update your row in the matrix above. - Run the checker:
It never edits your file. Exit code 1 means it found something for you to look at.
If you are adding a new language¶
Copy README.md to README.<locale>.md, add your language to the switcher line at the top of every README (including the English one), add the metadata comment, and add a row to the matrix. Start at status=draft with a visible banner near the top saying the translation has not been native-reviewed yet; the checker enforces that banner so a reader is never misled about how vetted the text is.
What the checker does not do¶
It cannot read your language. It does not judge translation quality, tone, or whether a sentence still means what the English one means. Those need a human, which is why the reviewer column exists.