Skip to content

fix(i18n): revert protected-term/code-field mistranslations + Check 7 gate#235

Merged
heznpc merged 1 commit into
mainfrom
fix/protected-term-dict-consistency
Jun 17, 2026
Merged

fix(i18n): revert protected-term/code-field mistranslations + Check 7 gate#235
heznpc merged 1 commit into
mainfrom
fix/protected-term-dict-consistency

Conversation

@heznpc

@heznpc heznpc commented Jun 17, 2026

Copy link
Copy Markdown
Owner

A repo-wide value == key audit 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

Bucket Count Action
Coincidental-correct 39 None — e.g. French "minutes"=="minutes", Italian "quiz" loanword, "Video"/"Reset" cognates. Confirms Check 6 must stay catalog-scoped — broadening it would false-positive on these.
Objective inconsistency 7 Fixed (below).
Judgment calls ~6 Deferred to native review (below).

The 7 objective fixes — a dict translating a term it must keep English

  • itcommon.{name, description, trigger}: these 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 breaks the user's YAML.
  • koui."Anthropic Academy": a brand name in ko's own _protected map, shipped as "Anthropic 아카데미".
  • ja / zh-CN / zh-TWclaudePlatform."Skills": the Claude Skills platform feature is registered in each of those locales' _protected maps, 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 _protected map is translated where that term is a section key. Per-locale, so it's false-positive-free — a term protected in ja isn't checked in de. 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…); ko left 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 (regenerated terms.it.json) · 561 unit · e2e green (one pdf-export popup-event flake retried clean — unrelated to dict data).

…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
heznpc enabled auto-merge (squash) June 17, 2026 22:37
@heznpc
heznpc merged commit 13f500c into main Jun 17, 2026
9 checks passed
@heznpc
heznpc deleted the fix/protected-term-dict-consistency branch June 17, 2026 22:37
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