Skip to content

feat: campaign narrative translated into all 10 locales, native-reviewed (#238) - #240

Merged
pshenok merged 1 commit into
mainfrom
feat/campaign-narrative-translations
Aug 5, 2026
Merged

feat: campaign narrative translated into all 10 locales, native-reviewed (#238)#240
pshenok merged 1 commit into
mainfrom
feat/campaign-narrative-translations

Conversation

@pshenok

@pshenok pshenok commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Part 2 of #238 (mechanism landed in #239). The 214 narrative+chrome keys now carry real translations in hi, uk, ru, de, fr, it, pt-BR, ko, zh, nep — the campaign's teaching spine finally reads in the player's language.

How it was built

Per-locale pipelines: translator → adversarial native reviewer (prompted as an engineer who plays games, told to refute) → fixes in place. Each language's register was derived from its own file — the ~700 existing keys are the style guide — so the campaign reads like the rest of that locale: hi keeps the Hinglish glossary, uk keeps «ти», ru keeps formal «вы», de keeps its English-tech-term conventions, etc.

The reviewers earned their keep: 126 defects fixed

Exactly the classes a machine translation ships:

  • Meaning inversions: pt-BR "passou longe de" taught the opposite of "far past" in L24's premise; ru and uk independently rendered redundant nodes as "резервные копии" (data backups), rewriting the availability-zone lesson; fr "télécharger" read as download in the upload level; zh literal "快 N 倍" prescriptively means (N+1)× — rewrote into the unambiguous "X 的 N 倍" form so the multipliers match the ms figures beside them
  • Register breaks: a तुम-imperative in hi's आप-register file, "la finanza" in it (reads as the fiscal police, not the finance dept), Lusitanian "vagas" for waves in pt-BR
  • Grammar a native never writes: de transitive "verbluten", ko particles welded to em-dashes, nep ergative mismatches

Register decisions worth knowing

  • hi keeps level titles English ("HELLO, GPU") — its trophies panel already cites them in English; uk/ru/ko/it/fr/pt-BR/zh/nep translate titles to match the same cross-references their achievements already carry in those languages. Both directions are consistency-correct per file.
  • Also bound the three static briefing headers in index.html (Learn/Goals/Bonus) to their campaign_* keys — they were hardcoded EN and survived locale switches.

Verified independently of the agents

  • Scope machine-checked: every changed hunk inside the two #238 blocks, key sets byte-identical (only values differ)
  • 805/805 × 5, eslint 0
  • Browser: hi/uk/ko/en briefings + level list render with zero raw keys, zero console errors (hi L22 screenshot verified — scenario, learn, goals all in register)
  • ru/uk hand-reviewed by the maintainer-side reviewer on top of the agent pass

Out-of-scope finds (filing separately): it.js pre-existing inconsistency — traffic_inference says "INFERENZA" while chapter-5 keys use "INFERENCE", and some it achievement texts cite level titles in EN.

…wed (#238)

Part 2 of #238: the 214 narrative+chrome keys added by #239 as EN
placeholders now carry real translations in hi, uk, ru, de, fr, it,
pt-BR, ko, zh, nep. Built by per-locale translator -> adversarial
native-reviewer pipelines; the register for each language was derived
from its own file (the ~700 existing keys are the style guide), so the
campaign reads like the rest of that locale, not like a bolted-on
translation.

Notable register decisions the pipeline made and documented:
- hi keeps level titles English (HELLO, GPU): the trophies panel
  already cites them in English, and 'Level' is on the file's
  English-terms list — while uk/ru/ko/it/fr/pt-BR/zh/nep translate
  titles to match the SAME cross-references their achievements already
  use in those languages.
- zh rewrote 'N x faster' comparisons into the unambiguous X 的 N 倍
  form — the literal 快 N 倍 prescriptively means (N+1)x and would
  have taught wrong multipliers next to the correct ms figures.
- Devanagari numerals in nep prose, Western figures for $/ms/kW
  everywhere, per each file's existing conventions.

The native reviewers (prompted as engineers who play games, told to
refute) found and fixed 126 defects across the 10 locales — exactly
the classes a machine translation ships: meaning inversions (pt-BR
'passou longe de' taught the OPPOSITE of 'far past'; ru/uk 'резервные
копии' turned the availability-zone lesson into data-backup advice;
fr 'télécharger' read as download in the upload level), broken
grammar (de transitive 'verbluten', ko particles welded to em-dashes,
nep ergative mismatches), and glossary breaks vs each file's own
service cards.

Also bound the three static briefing headers in index.html (Learn /
Goals / Bonus) to the campaign_* keys — they were hardcoded EN and
survived locale switches.

Verification: scope machine-checked (every changed hunk inside the
two #238 blocks, key sets byte-identical, only values differ);
805/805 x5; eslint 0; browser-verified hi/uk/ko/en briefings and
level list with zero raw keys and zero console errors; ru/uk
additionally hand-reviewed.
@pshenok
pshenok merged commit cb37b51 into main Aug 5, 2026
1 check passed
@pshenok
pshenok deleted the feat/campaign-narrative-translations branch August 5, 2026 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant