Skip to content

i18n: translation pipeline (all languages) - #19015

Merged
wackerow merged 30 commits into
devfrom
intl/pending-dev
Aug 10, 2026
Merged

i18n: translation pipeline (all languages)#19015
wackerow merged 30 commits into
devfrom
intl/pending-dev

Conversation

@wackerow

@wackerow wackerow commented Aug 7, 2026

Copy link
Copy Markdown
Member

Automated Translations

This PR contains translations managed by the intl pipeline.
Each run appends a summary below.


Run: 2026-08-07 07:23:55 UTC

  • Languages: ar, bn, cs, de, es, fr, hi, id, it, ja, ko, mr, pl, pt-br, ru, sw, ta, te, tr, uk, ur, vi, zh-tw, zh
  • Files: 312 (240 MD, 72 JSON)
  • Mode: auto
  • View workflow run

5 task(s) failed:

  • public/content/developers/docs/consensus-mechanisms/pos/index.md (fr): Gemini returned no content (finishReason=RECITATION). This file/language combination may be triggering content filters.
  • public/content/developers/docs/smart-contracts/testing/index.md (es): Gemini returned no content (finishReason=RECITATION). This file/language combination may be triggering content filters.
  • public/content/whitepaper/index.md (pt-br): Gemini returned no content (finishReason=RECITATION). This file/language combination may be triggering content filters.
  • public/content/whitepaper/index.md (zh): Output validation failed after 3 attempts: Suspiciously short: 389 chars vs 1571 English chars
  • public/content/whitepaper/index.md (zh-tw): Output validation failed after 3 attempts: Suspiciously short: 387 chars vs 1571 English chars

Rerun the failed combinations:

gh workflow run "Intl Pipeline" -f target_path="public/content/developers/docs/consensus-mechanisms/pos/index.md" -f target_languages="fr"
gh workflow run "Intl Pipeline" -f target_path="public/content/developers/docs/smart-contracts/testing/index.md" -f target_languages="es"
gh workflow run "Intl Pipeline" -f target_path="public/content/whitepaper/index.md" -f target_languages="pt-br"
gh workflow run "Intl Pipeline" -f target_path="public/content/whitepaper/index.md" -f target_languages="zh"
gh workflow run "Intl Pipeline" -f target_path="public/content/whitepaper/index.md" -f target_languages="zh-tw"

wackerow and others added 26 commits August 7, 2026 00:22
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
@wackerow
wackerow requested a review from pettinarip as a code owner August 7, 2026 07:23
@netlify

netlify Bot commented Aug 7, 2026

Copy link
Copy Markdown

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 585282e
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/6a7a5f1f8cfd120008d5bb66
😎 Deploy Preview https://deploy-preview-19015.ethereum.it
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 60 (🟢 up 1 from production)
Accessibility: 95 (no change from production)
Best Practices: 100 (🟢 up 1 from production)
SEO: 98 (no change from production)
PWA: 60 (no change from production)
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added content 🖋️ This involves copy additions or edits translation 🌍 This is related to our Translation Program labels Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

🔎 First-pass review — ✅ Looks mergeable

Routine intl pipeline output: 608 files across .manifests/** and public/content/translations/** for 24 non-English locales, targeting dev from intl/pending-dev — the correct intl/pending-{base} orchestration branch. No red flags: base branch is right, and the changes are pipeline-generated (not hand-edits to non-English files against a moving English source), so translation quality is owned by the pipeline + its review process, not this pass.

The 5 failed task combos noted in the description (3× Gemini RECITATION content-filter hits on fr/es/pt-br, plus suspiciously-short zh/zh-tw whitepaper output) are informational — they do not block the 312 successfully translated files, and the body already includes rerun commands for them.

Analysis
  • Lane: translation (paths are the truth — all .manifests/** + public/content/translations/**, non-en locales).
  • Base branch: devintl/pending-dev — matches the documented orchestration model. ✅
  • Checked: correct target base, no wrong-branch edits, no hand-propagation of English changes. Did not score translation quality (pipeline owns that).
  • Non-blocking: consider re-running the 5 failed file/language combos before or after merge per the commands in the PR body.
  • Labels: translation 🌍 already applied (correct type). Added needs review 👀 for maintainer routing.

Generated by PR Reviewer (team) for #19015 · 61.9 AIC · ⌖ 7.54 AIC · ⊞ 5.2K ·

myelinated-wackerow and others added 3 commits August 10, 2026 10:47
Fixes found by deterministic sweeps and 24 per-language review agents against PR 19015.

Build-breaker: `<p>` collapsed to `<p></p>` in zero-knowledge-proofs for bn/hi/ko/mr/ta/te/tr/ur, orphaning the following `</p>` and failing the MDX compile. This was the red Netlify deploy.

Fleet-wide repairs, all 24 locales:

- energy-consumption: the closing `>` of two source autolinks moved ahead of the file extension, producing `>).pdf>)` - 48 dead links and visible junk text. PR-introduced.
- roadmap/glamsterdam: the incremental merge deleted the whole `{#will-my-smart-contracts-change}` FAQ section. Restored verbatim from the pre-PR blob, with the anchor English carries.
- roadmap/glamsterdam: of the six changes in English commit 0e42e1a, four propagated and two prose clauses did not - the alert still read H2 2026 instead of Q4 2026, and the network-resilience intro still claimed "democratize liquidity" instead of the current stakers clause. Both replaced with per-locale lines.
- roadmap/glamsterdam: removed the leftover `# Title {#glamsterdam}` h1 that English dropped in the h1-to-frontmatter.title migration. Both layouts render frontmatter.title, so these locales were printing the page title twice. No inbound links to the anchor.
- Restored the `<QuizWidget>` component (and `<Divider />` where English has one) at the end of eight pages. The quiz strings were already fully translated in every locale, so only the component line was missing and the quizzes rendered nowhere outside English.
- Removed 13 ghost duplicate blocks in glamsterdam for ar/es/fr/pt-br/ru/tr/vi.

Glossary and semantic fixes, corrected toward the ETHGlossary term the locale already used elsewhere:

- cs: `gas` rendered as the literal `plyn` in 42 sites across five files, while cs common.json had it right. Unrelated Czech words and the literal natural-gas line left untouched.
- sw: `client` rendered `mteja` (customer) in 31 sites where the glossary mandates `kiteja`, with noun-class concord.
- bn: two corrupted words that destroyed a negation - transactions claimed view/pure calls do require gas, payments garbled "no regulatory bureaucracy".
- The "actor" polyseme resolved to a film performer in bn/hi/mr/ur; mr `miners` rendered as `khanij` (mineral); pl `receipt` as a till receipt; fr `creneau` reverted to `slot`; es untranslated `banks` and `Merge`; es/it `gatekeeper` collapsed onto `intermediario`; ko/zh-tw sense errors; ta cross-script contamination (a Bengali word inside Tamil prose).
- Restored nine dropped internal links in cs/pl/sw/vi transactions and ru bridges.

Verified: 200/200 markdown compile clean, 72/72 JSON valid with full key parity, href and anchor sets match English, and scoped production builds pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Adds four patterns to the review knowledge base and the per-language record for all 24 locales.

- 49: a JSX component added to an English page is never propagated to any locale. `<QuizWidget>` was missing from 192 files while the quiz strings were fully translated everywhere. Detect by diffing per-component counts against English; repair by hand is safe since the block needs no translation.
- 50: the angle-bracket autolink corruption in pattern 3 also appears as a moved `>` rather than a dropped one. A naive regex finds nothing because the URL itself contains parens; grep for the `>).ext>)` tell instead. The MDX compiler does not flag it, so it ships silently.
- 51: one English commit can propagate its structural edits and silently drop its prose edits. Four of six changes landed in all 24 locales while two single-clause prose edits did not, so "the big restructure came through" is not evidence the small edits did. Also records that repair choice hinges on the stale line count, not the pattern, and that resuming a finished per-language agent for one exact line is cheaper than a mode=full re-run.
- 52: balanced `<strong>` count mismatches in SOV and RTL locales are correct, not defects. The discriminator is direction: more than English and balanced is legitimate word-order redistribution, fewer is a real dropped emphasis. 26 false positives avoided this run.

Also records the PR 19015 summary (fleet average 8.4 pre-fix, per-locale scores, what each locale needed) and notes that the leftover h1 still affects community/grants, contributing/adding-videos and whitepaper outside this PR's scope.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>

@myelinated-wackerow myelinated-wackerow left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Translation Quality Review

PR: #19015
Branch HEAD: 7b18724724
Languages: all 24
Files reviewed: 200 markdown + 72 JSON
Date: 2026-08-10
Fixes: Critical fixes applied and committed to this branch (8387c4aced)

The Netlify build was red on arrival. Root cause: <p> collapsed to <p></p> in zero-knowledge-proofs/index.md in 8 locales, orphaning the following </p>. Fixed; 200/200 markdown now compile clean and scoped production builds pass.

Deterministic sweeps ran before the review fleet and found every structural defect; none was surfaced first by an agent. The 24 per-language agents then supplied the judgment layer and the per-locale replacement prose.

Fleet-wide defects fixed (all 24 locales)

Defect Scope Introduced by this PR
<p></p> MDX build-breaker 8 locales yes
>).pdf>) autolink corruption, 48 dead source links 24 locales yes
{#will-my-smart-contracts-change} FAQ section deleted by the incremental merge 24 locales yes
Stale H2 2026 (English says Q4) and stale "democratize liquidity" clause 24 locales yes
<QuizWidget> / <Divider /> never propagated 192 files, 8 pages pipeline gap
Leftover # Title {#glamsterdam} h1 rendering the page title twice 24 locales pre-existing
Ghost duplicate blocks 13 blocks, 7 locales pre-existing

Of the six changes in English commit 0e42e1a2ee, four propagated to all 24 locales and two single-clause prose edits did not, so a clean structural diff was not evidence the small edits landed.

The <QuizWidget> gap is worth a pipeline fix: the quiz strings were already fully translated in every locale, so only the component invocation was missing and those quizzes rendered nowhere outside English.

Scores

Language Score Notes
ru 9.6 cleanest of the fleet; only a dropped root link
zh 9.4 zero 智慧合约 regressions
bn 9.1 two corrupted words had destroyed negations
fr 9.0 créneau reverted to slot; bare L1/L2 nav strings
zh-tw 9.0 zero 智慧合約 regressions; fee_recipient direction inverted
hi 8.9 actor polyseme
pl 8.8 receipt as a till receipt
pt-br 8.8 h1 duplication, stale clauses
id 8.7 glossary compound in common.json
it 8.7 layer 2 (L2) casing; gatekeeper collapse
ko 8.7 exposure flattened to "invest"
tr 8.6 three competing stablecoin forms
mr 8.5 miners rendered as "mineral"
ja 8.4 glossary-covered brands left in Latin
te 8.4 Geth left Latin; nav label vs page title
uk 8.4 two headings collapsed onto one rendering
vi 8.4 dropped fork links; exposure sense
de 8.3 Yellowpaper; du/Sie split
es 7.7 untranslated banks/Merge; gatekeeper collapse
ur 7.5 glossary-AVOID لین دین; actor polyseme
cs 7.4 gas as literal plyn in 42 sites
ta 7.4 cross-script contamination; shared key; trade-offs
ar 7.2 glossary root; brand transliterations
sw 6.2 client as "customer" in 31 sites

Fleet average 8.4 (pre-fix).

Glossary and semantic fixes applied (103 replacements)

Every fix corrects toward the ETHGlossary term the locale already used elsewhere, with a cross-file disagreement inside this PR as corroboration.

  • cs gas rendered as literal plyn in 42 sites across five files, while common.json had it right. ETHGlossary's own cs note mandates the loanword. Unrelated Czech words (plynulejší, plynout) and the literal natural-gas flaring line left untouched.
  • sw client (software) rendered mteja (customer) in 31 sites where the glossary mandates kiteja; two files got it right in one line and wrong in the next. Fixed with noun-class concord.
  • bn two corrupted words that destroyed a negation: transactions claimed view/pure calls do require gas; payments garbled "no regulatory bureaucracy".
  • actor polyseme resolved to a film performer in bn/hi/mr/ur.
  • mr miners rendered खनिज (mineral), producing "minerals must use computing hardware".
  • pl receipt as paragon (till receipt) in both receipts_root rows.
  • fr slot reverted from the glossary form créneau; bare L1/L2 in two nav strings.
  • es untranslated banks and Merge; es/it gatekeeper collapsed onto intermediario (middleman).
  • ko exposure flattened to "invest"; zh-tw fee_recipient described as the payer.
  • ta a Bengali word inside Tamil prose (cross-script contamination).
  • te/ar/mr zero-knowledge proof nav labels disagreeing with their own page titles.
  • Nine dropped internal links restored in cs/pl/sw/vi transactions and ru bridges.
Deliberately left for a native-speaker pass

These are agent-flagged criticals I did not fix, because the correction is LLM-authored prose in a script I cannot verify and hand-patching non-Latin content risks silent Unicode-composition drift.

  • ja / ar / ur ETHGlossary-covered brand names left in Latin in learn-quizzes.json and page-what-is-ethereum.json (Optimism, Arbitrum, Aave, MakerDAO, Facebook, Twitter, Geth, ZK-STARK), while the same files transliterate other brands correctly.
  • ur the glossary-AVOID form لین دین for "transaction fee" in 4 sites; وٹالک بوٹیرن vs the corpus-standard spelling.
  • ta shared key using விசை where the bare glossary entry is திறவுகோல்; trade-offs using the swap sense.
  • hi non-trusted setup rendered with the "untrustworthy" reading that ETHGlossary's trustless note warns against.
  • tr the stale sabit para form still in 6 sites of payments.
  • de du/Sie split across learn-quizzes.json categories; es tú/usted split across the file set.
Confirmed clean, and false positives worth not re-reporting

Clean fleet-wide: JSON validity 72/72, full key parity, ICU placeholders, rich-text tag sets, zero HTML-PLACEHOLDER leaks, no untranslated English prose chunks (vi's historical failure mode absent), no ticker or domain typos, no transliterated domains, no PoW/PoS or validator/miner inversions.

Not defects, do not flag next time: 26 <strong> count mismatches in SOV and RTL locales are legitimate word-order redistributions of a bolded verb+object, rendered through t.rich which accepts repeated tags. The discriminator is direction, not count.

Still outstanding outside this PR's scope: the same leftover h1 affects community/grants, contributing/adding-videos and whitepaper in 51 further files.

Knowledge base updated in 7b18724724 with four new patterns (component propagation gap, the moved-> autolink variant, structural-vs-prose partial propagation, and the SOV <strong> false positive) plus the per-language record for all 24 locales.

-- Opus 5

Removes the leading `# Ethereum grants {#ethereum-grants}` from all 24 translated `community/grants/index.md`. English dropped it in the h1-to-frontmatter.title migration (d9f62fb) and the locales kept it, so those pages rendered the title twice.

Preconditions verified before touching anything: all 24 manifests are current against English (`hasEnglishChanged` returns false), and the pages are otherwise fully translated - heading counts, anchor sets and internal link sets all match English exactly once the stray h1 is removed, with no untranslated English prose.

Note the anchor is not load-bearing here: English no longer contains `#ethereum-grants` either, so the one inbound deep link (`community/events/organizing/index.md`) was already dead on the English site. This change makes the locales consistent with English rather than introducing a break.

Left alone deliberately, both fail the same preconditions:

- `contributing/adding-videos` (24 locales): manifests are current but the translations are missing the `{#step-4}` heading and the `/stories/` link. The stray h1 masks the loss by keeping the heading count at 14, so this needs a real section repair, not an h1 strip.
- `whitepaper` (pt-br, zh, zh-tw): no manifest exists at that path for these three locales, and they are also missing `{#long-term-supply-growth-rate-percent}` and the `/` link.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>

@myelinated-wackerow myelinated-wackerow left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follow-up to the review above, now at 585282e2fd.

Removed the leftover # Ethereum grants {#ethereum-grants} h1 from all 24 translated community/grants/index.md. English dropped it in the h1-to-frontmatter.title migration and the locales kept it, so those pages were rendering the title twice.

Checked before touching it: all 24 manifests are current against English, and heading counts, anchor sets and internal link sets match English exactly once the stray h1 is gone. The anchor is not load-bearing - English no longer has it either, so the single inbound deep link was already dead on the English side.

Two sibling pages were deliberately left alone because they fail the same check: contributing/adding-videos (24 locales are missing the {#step-4} heading and the /stories/ link) and whitepaper (pt-br/zh/zh-tw have no manifest at that path). Both need a real repair rather than an h1 strip.

Pipeline gap behind the missing quiz components is now tracked in #19031.

-- Opus 5

@wackerow
wackerow merged commit e2b1a7c into dev Aug 10, 2026
15 of 16 checks passed
@wackerow
wackerow deleted the intl/pending-dev branch August 10, 2026 23:35
@claude claude Bot mentioned this pull request Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

content 🖋️ This involves copy additions or edits needs review 👀 translation 🌍 This is related to our Translation Program

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants