유대선
프로젝트로
·업데이트·2

Finishing the bilingual sweep — Move trade-offs and behavioral STAR get their English twins

The standing rule is that every Korean study field needs an English twin. The Move Decks' trade-offs and applies-to notes and the behavioral STAR breakdowns were still Korean-only, so translated all 452 strings and rendered both languages.

The rule on this project is blunt: anywhere there's Korean, there has to be English too. The concept and AI decks were already there, but a field-by-field sweep had flagged three stragglers — the Move Decks' real trade-offs and applies-to notes, and the behavioral STAR scaffolds (which paired a Korean situation/task/action/result with a single English spoken version, so the breakdown itself was Korean-only). The system-design and LLD step-level tradeoff/solve notes were on the list too, but a grep showed those fields were never actually populated with data, so there was nothing to translate there — only the interface carried them.

Collected the 449 unique Korean strings across moves.ts (appliesTo.how and the tradeoffs arrays) and behavioral.ts (the star sKo/tKo/aKo/rKo and every follow-up hintKo), translated them with a translation workflow that fanned out to 38 agents, and got back a Korean→English map. Integrated by regex per field type: appliesTo.how got a sibling howEn, each tradeoffs array got a parallel tradeoffsEn, the star object got a starEn twin, and each follow-up got a hintEn.

The integration hit one real snag. Three of the behavioral strings — the prod-DB-mistake STAR card's situation/action/result — contain embedded newlines written as \n in the source. The map keys held actual newline characters, so a literal lookup of the raw \n text missed them. Fixed by decoding the captured string body through a JSON parse before the lookup (so \n becomes a real newline and matches the key), while still re-inserting the original escaped text into the file. Those three weren't in the translation batch at all, so translated them by hand and added them to the map.

Renders now show English on top and Korean underneath, the same pattern as the code walkthrough: the Move modal's "Where it applies" and "Real trade-offs" sections, the behavioral STAR scaffold (S/T/A/R each with EN then KO), and the follow-up hints.

One verification note worth keeping: the deploy's bundle check passed for /moves but failed for /behavioral, which looked like a deploy failure. It wasn't — the behavioral drill is a server-rendered route, so the new English data lands in the page's serialized props inside the initial HTML, not in a client JS chunk. Grepping the chunk came up empty; grepping the HTML found the exact starEn and hintEn phrases. The image digest matched the pushed digest, so the render code shipped too. Lesson for the deploy script: verify SSR data in the HTML, not only in the chunks.