fix(i18n): repay pre-existing KO/ES translation debt (FIX-I18N-DEBT-REPAYMENT) - #116
Merged
Conversation
Follow-up to FIX-I18N-DICT-GUARD (PR #115), which explicitly deferred this work. 93 KO / 78 ES empty entries counted at merge; 23 / 8 turned out to be STALE dead keys in CTLD_i18n_en.lua (no longer referenced by src/), left untouched. The 70 live entries per language (same key set for both) are now translated. No ANTHROPIC_API_KEY was available, so translations were produced and written directly rather than via translate_i18n.py - the script itself is untouched, still the documented mechanism for next time. JTAC and %1 [%2] %3. (no translatable content) added to each dictionary's __keep_en block rather than left flagged as stubs forever. pytest tools/build/ 17/17 green; generate_i18n_dicts.ps1 dry-run reports 0 MISSING. Lot: .backlog/FIX-I18N-DEBT-REPAYMENT/.
Reviewer's GuideThis PR repays previously deferred KO/ES i18n translation debt by filling all live empty entries in the Korean and Spanish CTLD dictionaries, marking two non-translatable keys as keep-English, and documenting the work in the changelog and backlog PRD/ticket files, without changing any tooling or executable logic. Flow diagram for KO/ES i18n debt repayment processflowchart TD
start([KO/ES dictionaries contain live empty entries])
manual([Translate live empty entries directly in CTLD_i18n_ko.lua and CTLD_i18n_es.lua])
keepEn(["Add JTAC and %1 [%2] %3. to __keep_en in both dictionaries"])
result([KO/ES dictionaries have zero live empty entries outside __keep_en])
start --> manual --> keepEn --> result
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've left some high level feedback:
- There are still a few KO entries left as empty strings (e.g.
Cannot build %1\n%2...,Drop Blue Smoke,Drop Crate(s)), so it’s worth double‑checking that each of these is genuinely non‑live or intentionally untranslated; if they are dead keys, consider marking them-- STALE:in the EN dict to keep the parser’s view consistent with reality. - Since
%1 [%2] %3.is now both given an explicit value and marked in__keep_en, it might be clearer to add a short comment by that__keep_enentry explaining why it must remain identical to EN so future maintainers don’t try to “fix” it back into a stub.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- There are still a few KO entries left as empty strings (e.g. `Cannot build %1\n%2...`, `Drop Blue Smoke`, `Drop Crate(s)`), so it’s worth double‑checking that each of these is genuinely non‑live or intentionally untranslated; if they are dead keys, consider marking them `-- STALE:` in the EN dict to keep the parser’s view consistent with reality.
- Since `%1 [%2] %3.` is now both given an explicit value and marked in `__keep_en`, it might be clearer to add a short comment by that `__keep_en` entry explaining why it must remain identical to EN so future maintainers don’t try to “fix” it back into a stub.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
This was referenced Aug 10, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
-- STALE:in CTLD_i18n_en.lua - keys no longer referenced by any ctld.tr()/config-YAML call in src/. The shared parser (tools/build/i18n_dict_utils.py) doesn't distinguish a live entry from a commented-out one, so they still counted as raw stubs; translating dead keys would fix no live menu entry, so they were excluded.translate_i18n.py- the script itself is untouched and remains the documented mechanism for next time.JTACand%1 [%2] %3.(no translatable content) added to each dictionary's__keep_enblock rather than left flagged as stubs forever - the existing mechanism already used forCTLD,MLRS, etc.translate_i18n.py,i18n_dict_utils.py,check_i18n_diff.py,i18n-guardCI job all untouched. Translation content only.Test plan
Generated with Claude Code
Summary by Sourcery
Repay the previously deferred Korean and Spanish i18n translation debt for CTLD F10 menus without changing tooling or game logic.
Bug Fixes:
Enhancements:
Documentation:
Tests: