i18n FR sweep: members areas (per-area, audit-in-context, auto-merge)
Seen in 1 project by 1 person
About
Continue translating remaining hardcoded English in the web app's user-facing chrome to FR (+ EN keys when missing), proactively scanning area-by-area, applying the audit-in-context rule from memory (audit-in-context-before-commit).
Per-area procedure
- Pick an unswept area. Priority order: OptionDefinitionEditor interior (when "+ Nouvelle définition" opens) + OptionDefinitionForm + PropertySchemaEditor; option detail page (members /app/options/[id]); DayView; project page chrome; DuplicateModal interior; admin pages (admin/* — lower priority). Skip apps/web/app/app/(protected)/projects/[projectId]/settings/page.tsx (other-session WIP).
- Render in FR: log in as [email protected]/test1234 via Playwright on this box's dev server (http://$(tailscale ip -4):50101); navigate to the area; dump
document.body.innerText; grep for English chrome. ALSO grep the area's source files for hardcoded English (regex like>[A-Z][a-zA-Z ]+<,aria-label="[A-Z],title="[A-Z],placeholder="[A-Z]). - Translate: add EN+FR keys to packages/shared/src/i18n/locales/{en,fr}/common.json; wire
useTranslations+t(). ICU rules: escape FR apostrophes as''inside select/plural branches; make every select branch multi-word (e.g.other {Public collections}notother {Public}) so the naive i18n:check placeholder regex doesn't false-flag mismatches. - AUDIT IN CONTEXT (memory rule — CRITICAL): screenshot the WHOLE section/page, check sibling consistency (label style, alignment, terminology, density, ordering). If your fix is correct in isolation but inconsistent with siblings (e.g. one field uses uppercase LABEL_STYLE while its sibling uses an inline label), refactor (often: add a
showLabel/compactprop to the shared primitive) and re-screenshot. Don't ship "fixed in isolation, broken in context". - Verify:
pnpm i18n:check(parity, 0 TODO); webtsc --noEmitclean; fullpnpm --filter web testgreen (wrap copy-asserting tests in @/test-utils/intl-render or update assertions). - Commit per area with descriptive message ending
Closes pickism/dev/<slug>.Auto-merge eligible (no excluded paths in translations) → FF-merge to develop, push, cleanup. Loop to next area.
Hard exclude
- supabase/migrations/, apps/web/middleware.ts, app/api/auth/, packages/shared/src/auth/**, payment code, any RLS policy SQL.
- option_definitions table + createOptionDefinition / updateOptionDefinition code — the coordinator is implementing locale tracking there in parallel. Don't touch those files.
Loop until
- No more visible English in unswept members areas, OR
- Three consecutive areas yield no translations needed, OR
- You hit a real blocker (record in a comment + exit cleanly).
Links
No links shared yet.
Listed in
Bookmarked in
Not in any public bookmark categories yet.