Repository navigation
fix(i18n): the French pack says tu to the user throughout - #413
Merged
Merged
Conversation
fr.js addressed the user with vous in 126 strings and with tu in all
the others that address the user, and no string used both. Sign-in,
the plan, the workout screen and the Coach chat say tu ("Choisis un
nom", "ton plan"); the sync and pairing messages, most of the Coach's
intake and consent lines, the custom exercise sheet and the
missed-workout reminders say vous ("Votre serveur est injoignable",
"D’où partez-vous ?", "Vous me manquez"). The 126 say tu now:
Choisissez → Choisis, votre → ton/ta, vos → tes, vous → tu/te/toi,
les vôtres → les tiens, D’où partez-vous ? → D’où pars-tu ?, avant que
vous les acceptiez → avant que tu les acceptes. Only the register
changes; punctuation and placeholders are untouched.
The server sends the reminders from api/nudge-copy.js, which is
generated from the packs; it is regenerated here with
node scripts/build-nudge-copy.mjs.
Left alone: the example request 'e.g. “swap the squats…”', which is
the user talking to the Coach, and the title «Garde-à-vous, recrue !»,
where garde-à-vous is the drill command. No string uses vous for several people.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
kurktchiev
force-pushed
the
gh/fr-one-register
branch
from
October 7, 2026 17:25
bd59546 to
1180446
Compare
crstnmac
added a commit
to crstnmac/openGym
that referenced
this pull request
Oct 9, 2026
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.
fr.js speaks to the user in two registers. Sign-in, the plan, the workout screen and the Coach chat say tu ("Choisis un nom, puis confirme avec ton appareil.", "Ta routine hebdomadaire", "Demande une révision, ou dis quelque chose au coach…"). The sync and pairing messages, the custom exercise sheet, the missed-workout reminders and most of the Coach's intake and consent lines say vous ("Votre serveur est injoignable", "Créer votre propre exercice", "D’où partez-vous ?", "Vous me manquez"). The intake's goal screen shows both at once: "Quel est votre objectif ?" above "Choisis-en une pour continuer."
I counted strings, not lines. A string says vous if it has vous, votre, vos, vôtres or a second-person plural verb (the -ez and -iez forms). It says tu if it has tu, te/t’, toi, ton, ta, tes, tiens, or a tu imperative with no pronoun ("Choisis une icône", "Le serveur est occupé. Réessaie dans un instant."). I picked those imperatives by hand, because "Note" and "Passe" are nouns as often as verbs. 126 strings address the user with vous, and every other string that addresses the user says tu. No string mixes the two. Four more could go either way ("Copie" for 'Copy', "Remplace les noms traduits par les originaux anglais.") and are in neither group.
This PR moves the 126 to tu. Only the register changes: Choisissez → Choisis, votre → ton/ta, vos → tes, vous → tu/te/toi, les vôtres → les tiens, D’où partez-vous ? → D’où pars-tu ?, avant que vous les acceptiez → avant que tu les acceptes. Word order, punctuation and placeholders are untouched. After the change no string says vous to the user.
The server sends the missed-workout reminders from
api/nudge-copy.js, which is generated from the packs. Its 9 French lines are regenerated here withnode scripts/build-nudge-copy.mjs(inapi/).One string keeps vous. 'e.g. “swap the squats for split squats, and Mondays are short”' ("ex. « remplacez les squats… »") is the user talking to the Coach, and no screen shows it; #415 removes it from every pack. The other four lines the user sends the Coach ('Have a look at my training…', 'Build me a fresh plan…', 'Improve my routine “{0}”.' and the instruction that goes with it) already say tu to the Coach. The title «Garde-à-vous, recrue !» is left alone too, since garde-à-vous there is the drill command.
No string uses vous for several people at once, so nothing needed an exception.
The change was made by Claude, and no native French speaker has checked it.
Tests: the only test that reads these French strings is the api test that checks
api/nudge-copy.jsagainst the packs, and it passes. check-locales.mjs: 17 locales, 1,979 keys each. check-source-strings.mjs --strict: 1,555 strings, all in the packs. pt-br-locale.test.js passes with the fingerprint unchanged. The full frontend and api suites pass on 39bc71e.Of the open PRs that change fr.js, this branch adds a conflict only to #415 (below).
Seven open PRs add French strings that say vous: #373 (26), #314 (14), #371 (5), #312 (2), #441 (2), #222 (1) and #435 (1). Whichever of them lands after this one brings the mix back unless those strings move to tu as well. #165 and #167 added one each, and each now has a commit that moves it to tu.
#415 and this PR conflict in one place in fr.js. That PR deletes the 'e.g. “swap the squats…”' line, and this PR changes the three lines above it ('Replaces your current week…', 'Want something different?', 'Say it in your own words…'). The resolution keeps this PR's three lines and drops the e.g. line. That PR's French consent and intake lines already say tu, so the two agree once both land.
🤖 Generated with Claude Code