Skip to content

DF-830: staged translation config (gt.config.json) - #210

Open
spjtls9 wants to merge 1 commit into
sonyapark-df-828-m2-translate-docs-guides-to-korean-priority-tierfrom
sonyapark-df-830-m3-add-i18njson-translation-config
Open

DF-830: staged translation config (gt.config.json)#210
spjtls9 wants to merge 1 commit into
sonyapark-df-828-m2-translate-docs-guides-to-korean-priority-tierfrom
sonyapark-df-830-m3-add-i18njson-translation-config

Conversation

@spjtls9

@spjtls9 spjtls9 commented Aug 29, 2026

Copy link
Copy Markdown

📚 Part 6 of an 8-PR stack — merge in order

Blocked by: #209 (DF-828) — this PR is branched off it, so review only the diff shown here.
Blocks: #211 (DF-831) and everything after it in the stack.

Do not merge out of order. Each PR is branched off the one above it; merging ahead of its base pulls
in unreviewed commits. As each lands, GitHub retargets the next onto main automatically.

PR Issue Scope
  1 #205 DF-823 Plan & entitlement findings
  2 #206 DF-826 Scope, spec, glossary, validator
  3 #207 DF-827 Engine evaluation
  4 #208 DF-824 Korean navigation tree
  5 #209 DF-828 Pilot Korean translations
▸ 6 #210 DF-830 Staged translation config ← this PR
  7 #211 DF-831 Staged CI workflow
  8 #212 DF-833 Prioritization, playbook, index

Documents in i18n/ cross-reference each other, so relative links to files added later in the stack
resolve once the stack has landed.
The final state is link-checked; every relative link resolves.

Operational sequencing — none of this happens on merge

Merging this stack changes nothing a reader sees. docs.json is untouched, no workflow is installed, and
no ko/ tree exists at the repo root. Turning Korean on is a separate, deliberate sequence:

Step Action Gated on
1 Mintlify dashboard → Settings → Translations — confirm the feature, and whether it exposes glossary control DF-823
2 Run the 12-page bake-off; pick the engine step 1
3 Apply the docs.json languages array; cp i18n/nav/ko.json ./ko.json steps 1–2
4 Bulk-translate docs/ + guides/ into ko/ steps 2–3
5 Native Korean review (~3–5 days) — the step that does not compress step 4
6 Only if General Translation won: move gt.config.json to root, translate.yml to .github/workflows/, set GT_API_KEY + GT_PROJECT_ID steps 2–4
7 Backfill/reconcile, then publish /ko steps 5–6

Steps 3 and 6 are the only ones that change live behaviour. Both are reversible by reverting one file.


Adds: config/gt.config.json, config/README.md

Staged under i18n/config/, not at the repo root. Moving it early fails immediately — it targets a $.navigation.languages path that does not exist until DF-824 is applied.

Note the filename

This is gt.config.json — General Translation's format — not Lingo.dev's i18n.json that the issue title names. DF-827 recommends against Lingo.dev: no heading-anchor pinning, no docs.json nav localization, no OpenAPI support.

⚠️ This PR may need to be closed rather than merged

If Mintlify-native translations win the DF-827 decision, delete this file rather than moving it — there is no config to write. That decision is upstream in this stack and is not settled yet.

Why these settings

Adapted from mintlify/docs' own gt.config.json, since Mintlify localize their documentation with this tool on this exact stack. Retained because they solve the hard problems:

Setting Solves
experimentalAddHeaderAnchorIds: "mintlify" The 710 #fragment links
experimentalLocalizeStaticUrls + docsUrlPattern 2,721 internal links → /ko/...
jsonSchema.composite["$.navigation.languages"] All of DF-824, automatically
generateRedirects Keeps the 881 existing redirects working per locale
experimentalHideDefaultLocale English stays at the repo root, unmoved

Differences from theirs: reference/ and changelogs.mdx excluded per DF-826 scope, snippets/ excluded (verified — only proper nouns), no OpenAPI bucket (theirs is *.openapi.json, ours is openapi/*.yaml), and locales: ["en", "ko"].

Acceptance not met, deliberately

The issue asks that it "runs locally and produces correct ko/ output for a changed page." That needs a General Translation account and the DF-824 config applied. It is step one of the DF-827 bake-off, and the validator is the pass/fail.

Staged under i18n/config/ rather than at the repo root, where it would be live.
Moving it early fails immediately — it targets a $.navigation.languages path
that does not exist until DF-824 is applied.

Note the filename: this is gt.config.json, General Translation's format, not
Lingo.dev's i18n.json. DF-827 recommends against Lingo.dev — no heading-anchor
pinning, no docs.json nav localization, no OpenAPI support. And if
Mintlify-native translations win, this file gets deleted rather than moved:
there is no config to write.

Adapted from mintlify/docs' own gt.config.json, since Mintlify localize their
documentation with this tool on this exact stack. Settings retained because
they solve the hard problems: experimentalAddHeaderAnchorIds pins the 710
fragment links, experimentalLocalizeStaticUrls rewrites 2,721 internal links,
the jsonSchema composite rule does all of DF-824 automatically,
generateRedirects keeps our 881 redirects working per locale, and
experimentalHideDefaultLocale keeps English at the repo root.

Differences from theirs: reference/ and changelogs.mdx excluded per DF-826
scope, snippets/ excluded (verified — only proper nouns), no OpenAPI bucket
(theirs is *.openapi.json, ours is openapi/*.yaml), and locales en + ko.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@spjtls9
spjtls9 requested a review from a team as a code owner August 29, 2026 20:53
@spjtls9
spjtls9 requested review from mmedina3 and removed request for a team August 29, 2026 20:53
@linear-code

linear-code Bot commented Aug 29, 2026

Copy link
Copy Markdown
@greptile-apps

greptile-apps Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 4/5

The missing glossary integration should be fixed before this configuration is activated or merged as the DF-830 deliverable.

The configured translation path processes Wave 1 documentation without supplying the required glossary and protected-term rules, so generated Korean content can violate established terminology requirements.

Files Needing Attention: i18n/config/gt.config.json

Important Files Changed

Filename Overview
i18n/config/gt.config.json Adds the staged GT translation configuration, but omits the required glossary/custom-instructions integration.
i18n/config/README.md Clearly documents the staged state, activation conditions, scope decisions, and fallback plan.

Reviews (1): Last reviewed commit: "DF-830: staged translation config (gt.co..." | Re-trigger Greptile

"_comment": "STAGED — not active. Move to the repo root only after the docs.json languages array exists (see i18n/nav/README.md) and GT is chosen over Mintlify-native translations (see i18n/03-tooling-evaluation.md). Adapted from mintlify/docs' own gt.config.json.",

"defaultLocale": "en",
"locales": ["en", "ko"],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Glossary rules are not wired

When this config runs Korean translation, it processes all Wave 1 MDX without supplying the required glossary and do-not-translate rules, causing reserved Mixpanel terms and other protected terminology to be translated inconsistently or incorrectly.

Source Used: Linear — [M3] Add i18n.json translation config

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant