Add French (fr) exercise instructions#44
Open
umutcakirai wants to merge 2 commits into
Open
Conversation
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 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.
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.
Adds a tenth language — French (
fr) — to all 1,324 exercises:instructions.frandinstruction_steps.fr, plus the JSON Schema, README,index.htmlviewer andsetup.html.Register
The dataset's existing translations all use the informal second-person imperative. French follows suit (tutoiement, not vouvoiement):
enesitplfrHow 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 each exercise's
instruction_steps.frwas rebuilt deterministically by mapping its English steps back through that table.instructions.fris the join ofinstruction_steps.fr, so the two cannot drift apart.A fixed glossary pinned the recurring terminology so it stays consistent across all 1,324 records instead of varying sentence to sentence:
repetitions→ répétitions ·starting position→ position de départ ·dumbbell→ haltère ·barbell→ barre ·your core→ sangle abdominale ·shoulder blades→ omoplates ·shoulder-width apart→ écartés à la largeur des épaulesTerm-fidelity audit over the translated corpus:
repetitions88/88,starting position562/562,dumbbell530/530,shoulder blades107/107,kettlebell127/127,bench299/299,your core213/213,shoulder-width apart398/398.Verified
fr→ rejected by schemalen(instruction_steps.fr) == len(instruction_steps.en)instructions.fr == ' '.join(instruction_steps.fr)frpurely additive)frstrings / left in Englishindex.htmlembed still equalsdata/exercises.jsonThe step-count parity check is the dataset's own invariant — it already holds for all nine existing languages, so
frhad to hold it too.The viewer was loaded in a browser: the language picker renders Français as the tenth tab and the steps display correctly, no console errors.
Note on the schema
This branch is stacked on #43 (which adds the already-shipped
hi/pl/koto the schema's language maps), so the schema here declares all ten languages. If #43 merges first this rebases cleanly; if this merges first, #43 becomes redundant and can be closed.Caveat
These are machine translations, reviewed programmatically rather than by a native speaker. The terminology and register are consistent and the invariants hold, but I'd welcome a native-speaker pass on the wording — happy to adjust anything.