Adds a tenth language to all 1,324 exercises: `instructions.fr` and
`instruction_steps.fr`, plus the schema, README, viewer and setup guide.
Register matches the existing Spanish/Italian/Polish translations —
informal second-person imperative (tutoiement):
en: Lie flat on your back with your knees bent and feet flat on the ground.
fr: Allonge-toi sur le dos, les genoux fléchis et les pieds à plat au sol.
How it was produced
-------------------
The 7,710 English step sentences deduplicate to 4,414 unique strings.
Those were translated (LLM-assisted, glossary-constrained, then audited),
and the per-exercise arrays were rebuilt deterministically by mapping each
English step back through that table. `instructions.fr` is the join of
`instruction_steps.fr`, so the two can never drift.
A fixed glossary pinned the recurring terms — répétitions, position de
départ, haltère/barre, sangle abdominale, omoplates, largeur des épaules —
so terminology is consistent across all 1,324 records rather than varying
sentence by sentence.
Verified
--------
- 1,324 records validate against the updated schema; a record missing `fr`
is now rejected.
- fr step count == en step count in every record (the dataset's existing
invariant across all nine prior languages).
- instructions.fr == ' '.join(instruction_steps.fr) in every record.
- Every pre-existing field is byte-identical; `fr` is purely additive.
- No empty strings, none left in English, no vouvoiement across 7,710 steps.
- index.html embed stays in sync with data/exercises.json; the language
picker renders "Français" and the steps display correctly.
Note for review: these are machine translations, reviewed programmatically
rather than by a native speaker. Happy to adjust any wording.
The schema was added before the Hindi (73b0c68) and Polish/Korean
(118e4bd) instructions landed, so languageMap and languageStepsMap
still only declared en, es, it, tr, ru, zh.
All 1,324 records carry all nine languages and the README documents
nine, but `additionalProperties` let hi/pl/ko through unvalidated and
unrequired — a record silently missing them still passed validation.
Declare all nine in `properties` and `required` for both maps.
Verified: the 1,324 records validate cleanly against the updated
schema, and a record missing hi/pl/ko is now rejected.
Adds data/exercises.schema.json (Draft 2020-12) describing every field,
its type and constraints, so the dataset and community additions can be
validated with any standard JSON Schema validator. Validated against all
1,324 records with zero errors.
Also documents the previously undocumented instruction_steps field and
references the schema from the README.