fix(i18n): revert protected-term/code-field mistranslations + Check 7 gate#235
Merged
Conversation
…ck 7 gate
A repo-wide value==key audit across all 22 dict sections (extending the
catalog-only Check 6) surfaced 53 entries translated in some locales but left
English in others. Adversarial localization triage classified them:
- 39 coincidental-correct (French "minutes" == "minutes", Italian "quiz"
loanword, "Video"/"Reset" identical cognates, etc.) — NOT gaps. This
confirms Check 6 was correctly scoped to `catalog` and must NOT be
broadened, or it would false-positive on these legitimate values.
- 7 OBJECTIVE inconsistencies fixed here — a dictionary translating a term it
must keep English:
* it: common.{name,description,trigger} are SKILL.md frontmatter FIELD
NAMES (code identifiers); 11 locales keep them English, it alone
translated them (nome / descrizione / attivazione) — copying those into
real frontmatter would break the user's YAML.
* ko: ui."Anthropic Academy" — a brand name in ko's own _protected map,
shipped as "Anthropic 아카데미".
* ja / zh-CN / zh-TW: claudePlatform."Skills" — the Claude "Skills"
platform feature is registered in each of those locales' _protected
maps, yet was translated (スキル / 技能).
- ~6 judgment calls deferred to native review (Diligence/ko 4D term,
Vision API & SDK word-order in it, Personal/Project, Skills in de/es/fr/ru
where it is NOT protected) — left as-is rather than authored unilaterally.
Add Check 7 to check-dict-coverage.js (already CI-gated): a term registered in
a dict's own _protected map must stay English wherever that term is a section
KEY. Per-locale, so it is false-positive-free — a term protected in ja is not
checked in de. Regenerate the companion plugin's terms.it.json.
All gates green incl. check:plugin; 561 unit; e2e green (pdf-export popup-event
flake retried clean).
heznpc
enabled auto-merge (squash)
June 17, 2026 22:37
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.
A repo-wide
value == keyaudit across all 22 dict sections (extending the catalog-only Check 6) surfaced 53 "mixed" entries — translated in some locales, left English in others. An adversarial localization triage (9 agents, per-entry, with full cross-locale data) classified them.Result
"minutes"=="minutes", Italian"quiz"loanword,"Video"/"Reset"cognates. Confirms Check 6 must staycatalog-scoped — broadening it would false-positive on these.The 7 objective fixes — a dict translating a term it must keep English
it→common.{name, description, trigger}: these are SKILL.md frontmatter field names (code identifiers). 11 locales keep them English;italone translated them (nome/descrizione/attivazione) — copying those into real frontmatter breaks the user's YAML.ko→ui."Anthropic Academy": a brand name in ko's own_protectedmap, shipped as"Anthropic 아카데미".ja/zh-CN/zh-TW→claudePlatform."Skills": the Claude Skills platform feature is registered in each of those locales'_protectedmaps, yet was translated (スキル/技能).New gate — Check 7
check-dict-coverage.js(already CI-gated) now fails if a term registered in a dict's own_protectedmap is translated where that term is a section key. Per-locale, so it's false-positive-free — a term protected injaisn't checked inde. Two test cases added (catches the violation; does not flag per-locale-unprotected translations).Deferred to native review (not authored unilaterally)
These are genuine localization judgment calls where the source framework itself is inconsistent across locales, so forcing a value risks introducing an error:
aiFluency.Diligence/ko— the 4D competency is rendered differently across locales (ja 検証, ru Добросовестность, de Sorgfalt…);koleft English. Needs a native-chosen term.claudeAPI."Vision API"/id,it;mcpIntro."Python SDK"/"TypeScript SDK"/"MCP Inspector"/it— Italian word-order variants, not clearly wrong.common."Personal"/"Project"/id,it— settings-scope words, not in_protected, so ambiguous.claudePlatform."Skills"/de,es,fr,ru— translated, but "Skills" is not protected in those locales, so possibly intentional.claude101."Curriculum"/it— CV-vs-syllabus connotation.Validation
All gates green incl.
check:plugin(regeneratedterms.it.json) · 561 unit · e2e green (onepdf-exportpopup-event flake retried clean — unrelated to dict data).