Correct 31 French translations from a native-speaker review (#884) - #919
Merged
Conversation
ryanbr
force-pushed
the
l10n/fr-corrections-884
branch
2 times, most recently
from
July 28, 2026 04:11
1ee4aa9 to
104acea
Compare
@NoBrainNoHeadache — a native French speaker, first contribution — reviewed the Apple catalogue's French and attached a corrected file to #884. Applied here as a cherry-pick of exactly the 31 changed fr entries onto current main, not as the wholesale file: their base predated #890 (4 keys would have been deleted) and Xcode's re-extraction had added 209 keys the catalogue deliberately does not carry. What the corrections fix is not polish, it is machine-translation output that was wrong to the point of nonsense: RESTORATIVE SLEEP "POULET RESTORATOIRE" (restorative CHICKEN) one-glance read "lecture d'un verre" (reading of a drinking GLASS) Deep sleep pools HRV "piscines de sommeil" (SWIMMING POOLS of sleep) HOURS OF SLEEP "HORAIRES DE DOUCEE" (not a French word) RECOVERY "RECOUVREMENT" (debt collection — the same error #902 found in Android's catalogue exists here too) Plus consistent terminology: HRV is now VFC (variabilité de la fréquence cardiaque) everywhere instead of the invented VHR/VRH, RHR is FCR, and the strap is "bracelet" rather than "bande"/"sangle". The one change verified against code rather than language: the bare "W" and "M" keys. Every localized use is `case .week` / `case .month` in seven range pickers, so their W→"S" (Semaine) / M→"M" (Mois) is right — and the OLD French had M→"L", someone's guess at Monday→Lundi, so French users saw an L on a Month toggle. A translation fix that is also a UI bug fix. Two integration repairs, both mechanical: - One entry arrived as "%6$lldcalculée": a positional %6$ against an English string with a single argument (String(format:) would reach for a sixth that does not exist — French-only runtime breakage, most likely Xcode's editor numbering around the %% escapes), and a missing space. Now "%lld calculée". - All 31 arrived state=needs_review, which Tools/i18n_audit.py counts as untranslated — a straight merge would have hard-failed the fr focus-locale gate. Flipped to translated after reading all 31 as a French reader. Format specifiers verified preserved on the other 30; serialization confirmed byte-stable (json round-trip) before writing; diff is 31 value lines and nothing else. i18n --ci passes.
ryanbr
force-pushed
the
l10n/fr-corrections-884
branch
from
July 28, 2026 04:18
104acea to
06a0025
Compare
This was referenced Jul 28, 2026
ryanbr
added a commit
that referenced
this pull request
Jul 28, 2026
…884) The Android half of the native-speaker review that landed on Apple in #919. 87 strings in values-fr rewritten; one Apple es string repaired; #920 filed for the 209 translations blocked on extraction — which together close #884. Terminology, matching the contributor's Apple standard: sangle (a harness strap, 70 strings) and bande (8) become bracelet; VHR/VRH become VFC; RECOUVREMENT becomes RÉCUPÉRATION; RHR becomes FCR; the two streaming strings align on Transmission (including fgs_detail_streaming from #902 — my own string, written before the standard existed). This was hand-agreement work, not a sed, in both directions: sangle→bracelet flips feminine to masculine ("La sangle … elle ne captera pas" → "Le bracelet … il ne captera pas", "sangle active"→"bracelet actif", "chargée"→"chargé"), and VHR→VFC flips masculine to feminine ("du VHR"→"de la VFC"). One legitimate "bande" survives, deliberately: "la bande haute" is an HR zone, not a strap — the one string the pattern matched where the old word was right. The sweep also surfaced MT damage beyond terminology in the same 87 strings, fixed in place rather than left half-corrected: "Diffusion des ressources humaines" broadcast HUMAN RESOURCES, for HR (x2) "Il fait feu" the alarm OPENS FIRE, for "it fires" "briquet sur la batterie" a CIGARETTE LIGHTER, for "lighter on battery" "des bûches de sangles" FIREWOOD, for strap logs "Les partitions en direct" SHEET MUSIC, for live scores "données bancaires" BANKING data, for banked data "Lentise le sangle de fond" not French at all "piscines de sommeil profonde" the same swimming-pools string Apple had plus the informal tu forms ("ta sangle", "Lis") brought to the catalogue's vous, "l'histoire"→"l'historique" (the contributor's own #919 fix, same class), and the 5/MG deep-data toggle paragraph rewritten from word salad into French. The Apple es Charge explainer gets its four flat errors fixed ("frecuencia cardíaca restante" = REMAINING heart rate, "de vez en cuando" = from time to time, "es escenario del movimiento", "corrientes crudas" = raw currents); terminology choices there are left for a native es reader, as recorded on #884. Verified: XML parses; zero leftovers of any swept term; format specifiers byte-identical to the default catalogue on every changed string; no unescaped apostrophes; i18n --ci and doc lint pass. Android CI compiles the resources.
ryanbr
added a commit
that referenced
this pull request
Jul 28, 2026
…884) (#921) The Android half of the native-speaker review that landed on Apple in #919. 87 strings in values-fr rewritten; one Apple es string repaired; #920 filed for the 209 translations blocked on extraction — which together close #884. Terminology, matching the contributor's Apple standard: sangle (a harness strap, 70 strings) and bande (8) become bracelet; VHR/VRH become VFC; RECOUVREMENT becomes RÉCUPÉRATION; RHR becomes FCR; the two streaming strings align on Transmission (including fgs_detail_streaming from #902 — my own string, written before the standard existed). This was hand-agreement work, not a sed, in both directions: sangle→bracelet flips feminine to masculine ("La sangle … elle ne captera pas" → "Le bracelet … il ne captera pas", "sangle active"→"bracelet actif", "chargée"→"chargé"), and VHR→VFC flips masculine to feminine ("du VHR"→"de la VFC"). One legitimate "bande" survives, deliberately: "la bande haute" is an HR zone, not a strap — the one string the pattern matched where the old word was right. The sweep also surfaced MT damage beyond terminology in the same 87 strings, fixed in place rather than left half-corrected: "Diffusion des ressources humaines" broadcast HUMAN RESOURCES, for HR (x2) "Il fait feu" the alarm OPENS FIRE, for "it fires" "briquet sur la batterie" a CIGARETTE LIGHTER, for "lighter on battery" "des bûches de sangles" FIREWOOD, for strap logs "Les partitions en direct" SHEET MUSIC, for live scores "données bancaires" BANKING data, for banked data "Lentise le sangle de fond" not French at all "piscines de sommeil profonde" the same swimming-pools string Apple had plus the informal tu forms ("ta sangle", "Lis") brought to the catalogue's vous, "l'histoire"→"l'historique" (the contributor's own #919 fix, same class), and the 5/MG deep-data toggle paragraph rewritten from word salad into French. The Apple es Charge explainer gets its four flat errors fixed ("frecuencia cardíaca restante" = REMAINING heart rate, "de vez en cuando" = from time to time, "es escenario del movimiento", "corrientes crudas" = raw currents); terminology choices there are left for a native es reader, as recorded on #884. Verified: XML parses; zero leftovers of any swept term; format specifiers byte-identical to the default catalogue on every changed string; no unescaped apostrophes; i18n --ci and doc lint pass. Android CI compiles the resources.
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.
Part of #884 — the issue stays open; see the completeness note at the end. @NoBrainNoHeadache — a native French speaker, first contribution — reviewed the catalogue's French and attached a corrected file. This applies it as a cherry-pick of exactly the 31 changed fr entries, not the wholesale file, for two reasons found in review:
What it fixes
Not polish — machine-translation output that was wrong to the point of nonsense:
POULET RESTORATOIRElecture d'un verrepiscines de sommeilHORAIRES DE DOUCEERECOUVREMENTPlus consistent terminology: HRV → VFC everywhere (replacing the invented VHR/VRH), RHR → FCR, strap → bracelet (replacing bande/sangle).
The change verified against code, not language
The bare
"W"/"M"keys. Every localized use iscase .week/case .monthin seven range pickers — so their W→S(Semaine) / M→M(Mois) is correct, and the old French had M→L(someone's Monday→Lundi guess): French users have been seeing an L on a Month toggle. A translation fix that is also a UI bug fix.Two integration repairs, both mechanical
%6$lldcalculée— a positional%6$against an English string with a single argument, soString(format:)reaches for a sixth argument that does not exist. Correction to an earlier revision of this description: the%6$is NOT from the contributor's edit or Xcode's editor — it is onmaintoday, and not only in French: German and Spanish carry the identical broken specifier (pt-PT is already correct). All three are repaired here to%lld(fr also gains its missing space); the es prose around it has separate MT damage (« de vez en cuando » for "from time in zones") noted on French translation updates and corrections for Localizable.xcstrings #884 rather than touched here.state=needs_review, whichTools/i18n_audit.pycounts as untranslated — a straight merge would have hard-failed the fr focus-locale gate. Flipped totranslatedafter reading all 31.Verification
frdiffers from main; no other locale touched.i18n --cipasses.Completeness (added after a scoping re-check)
GRADIENTS DE RECOUVREMENT→GRADIENT DE RÉCUPÉRATION, andPlongez pour lire le VHR("dive to read") →Survolez pour lire la VFC. The two Watch catalogues are clean.sangle×80,bande×6 — and the sangle→bracelet sweep flips grammatical gender, so it needs a careful pass, not a sed.