feat(registry): full French i18n parity + drift guard + E2E#476
Open
bntvllnt wants to merge 2 commits into
Open
feat(registry): full French i18n parity + drift guard + E2E#476bntvllnt wants to merge 2 commits into
bntvllnt wants to merge 2 commits into
Conversation
|
ntk preview
Built from |
d471f0c to
c47da2a
Compare
Rebased onto main and integrated with the new per-family landing pages (#464) and typography primitives (#465). Takes the registry from ~10% localized to full French parity, drift-guarded and E2E-verified. - next-intl wiring across every route + shared component (home/footer/forms/ header/landing, docs, philosophy, report/request, vs/*, releases, changelog, templates, themes + editor, design, build, components, families) — localized Link everywhere (no locale leak) - docs migrated to per-locale folders <slug>/{en,fr}.mdx with French translations - messages/{en,fr}.json: pages.*/shared.*/families.* namespaces, en/fr key-identical - new families landing pages localized; ComponentCard story-count localized; /ai now redirects to /families/ai so pages.ai retired - scripts/check-i18n.ts (`i18n:check`): message parity + MDX coverage + dead-namespace guard - e2e/i18n.spec.ts: every route x both locales, switcher, hreflang, real-French, fallback - llms-full.txt reads pages via the folder-aware loader - AGENTS.md: i18n architecture, gate, add-a-language recipe Data left English by design: component/family descriptions, family FAQ, design-guide body, demo-fixture previews, some SEO metadata/JSON-LD. Gates: i18n:check green, tsc clean, next build 0 errors, eslint clean, E2E 45/45. Closes #475
c47da2a to
e839dae
Compare
…ded sweep) A stricter multi-line + single-word-aware scan caught chrome an earlier pass missed (single-word button labels like "Copied!"/"Share"): - quick-add: Copy install command / Copied! / Add to v0.dev -> shared.quickAdd.* - share-embed-bar: Share/Embed/Copy link/Link copied!/embed dialog title+desc/ Copy embed code/share dialog title+desc -> shared.shareEmbed.* (platform names X/LinkedIn/Reddit/... kept as brands) - e2e: add /components/button (exercises these + storybook-embed) + /families routes Remaining hardcoded strings are intentional: demo-fixture previews, registry/ family data, SEO metadata + JSON-LD, brand names, literal paths, and the RSS <link> title (feed is English). i18n:check green, tsc clean, eslint clean, next build 0 errors, E2E 47/47.
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.
Closes #475
Takes the registry site from ~10% localized to full French parity. next-intl was correctly wired but barely consumed — most routes served English to
/frdespite complete French translations sitting unused.What changed
scripts/check-i18n.ts+pnpm i18n:check: message-key parity across locales, MDX coverage (every content page × every locale), and no dead/undefined message namespaces.Landing, footer, both forms, header, and all ~20 route pages (components/detail/playground, docs, philosophy, report/request,vs/*,ai, build, releases, changelog, templates, themes, design). Internal links switched to the localized@/i18n/routingLink(no locale leak).<slug>/{en,fr}.mdx) + French translations (diacritic-stripped house style).pages.*namespaces added tomessages/{en,fr}.json, en/fr key-identical.e2e/i18n.spec.ts: every route × both locales (status +<html lang>+ hreflang + console-clean), switcher round-trip, real-French, docs-fallback guard.llms-full.txtfixed to read pages via the folder-aware loader (the docs migration had regressed it; also recovers 4 pages it was silently dropping).Verification
pnpm i18n:checkgreen · tsc clean ·next buildexit 0 (1632 static pages incl. all/fr) · eslint clean on changed files · E2E 36/36 against the production build (switcher stable under--repeat-each=3).Out of scope (data, not UI)
Component descriptions, template/use-case data, the design-guide body, and some metadata/JSON-LD stay English — bulk content translation, tracked separately.
https://claude.ai/code/session_018ktYZpgFmQbM2GrXF8GyBv