diff --git a/AGENTS.md b/AGENTS.md index dafd08a..091d333 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1756,7 +1756,7 @@ similar are internal endpoints/hook names, not credits — leave them.) chain) fails the build if any literal `t('…')` key is missing from `en` OR `es`, or if `en`/`es` drift. Dynamic template keys (`t(\`ns.${x}\`)`) are NOT checked — keep those few in sync by hand. -- **Coverage (2026-10-02, batches 1–3 done):** **~6,460 keys** (EN=ES) and ~230 +- **Coverage (2026-10-04, batches 1–4 done):** **~7,030 keys** (EN=ES) and ~250 files wired. Namespaces: batch 1 — `mapUi`, `spotUi`, `marketUi`, `labUi`; batch 2 — `nav` (header/More/burger labels) + `chromeUi` (footer, toolbar widgets, spot-type labels), `placesUi` (events/shops/tours/food), `socialUi` @@ -1793,13 +1793,29 @@ similar are internal endpoints/hook names, not credits — leave them.) first paint is in-language. **Import from `@/lib/dateFnsI18n`, not `date-fns`.** Number `.toLocaleString()` calls are deliberately left on the runtime default. -- **Still to translate (batch 4):** the **Lab `*_LABELS`/`*_DESCRIPTIONS` maps** - in `src/lib/types.ts` (coach/filmer/editor/photo/builder/artist/graffiti/tattoo/ - trainer/musician/judge/organizer/barber — ~35 maps), `TOUR_SKILL_LEVELS`, the - Sasquatch **static FAQ / local-result chat bodies** and `usePurchasePro` receipt - prose, and remaining **feed-supplied vs app-word** distinctions. `TagCategory` - names/descriptions have keys but no component renders them. Grep a module - before assuming it is translated. +- **Batch 4 (2026-10-04) — done.** Fragment layer `src/i18n/batch4/` + (spread as `batch4En`/`batch4Es` alongside batch 3). + - `labOptions.*` (430 keys) — every Lab `*_LABELS`/`*_DESCRIPTIONS` map in + `src/lib/types.ts` (coach/filmer/editor/photo/builder/artist/graffiti/tattoo/ + trainer/musician/judge/organizer/barber) + `TOUR_SKILL_LEVELS`; **51 shared + key maps appended to `src/lib/labelKeys.ts`**. Consumers: `becomeRoles.tsx`, + `CraftProfileForm` (`SkillSection` gained a `keyMap`), `LabPage`, + `CoachDetailPage`, the five bespoke `/become/*` pages, `TourCard`/ + `TourDetailPage`/`CreateTourPage`/`EventsPage`. Trick names and tool/brand + nouns intentionally stay English. + - `sasquatchChat.*` (83 keys) — the free-tier `STATIC_FAQ` (English matcher → + `sasquatchChat.faq.*` key) and local-result/fallback chat bodies. Live AI is + already language-directed; **prompts stay English**. + - `feesUi.*` (57 keys) — `usePurchasePro` receipt prose/errors and + `PlatformFeePayment` fee/duration tiers (`LabProUpgrade`/`FeaturedEventUpgrade` + were already `labUi`/`placesUi`). + - ✅ **Not translated, deliberately:** LLM system/synthesis prompts and + tool-result instruction strings (model-facing), feed-supplied data (line + names, headsigns, roads, stops, weather condition labels, operator names), + brand/proper nouns, and the separate `src/lib/glossary.ts` trick glossary. + `TagCategory` names/descriptions and `MUSICIAN_ACT_LABELS` have keys but no + rendering consumer. Number `.toLocaleString()` stays on the runtime default. + Grep a module before assuming it is untranslated. - ⚠️ A batch-2 agent dropped the `socialUi.` namespace prefix in ~36 files — the `check:i18n` guard caught all 738 usages. **Always run `node scripts/check-i18n.mjs` (it's in `npm test`) after wiring a file.**