Skip to content

Translate the documentation into French - #31

Merged
helmihyo merged 10 commits into
mainfrom
feat/i18n-french
Aug 4, 2026
Merged

Translate the documentation into French#31
helmihyo merged 10 commits into
mainfrom
feat/i18n-french

Conversation

@helmihyo

@helmihyo helmihyo commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Adds French as a third language. All 21 pages translated.

Read this before reviewing

Nobody who reads French has read this. That was decided rather than overlooked: the question was raised before any page was translated, and the answer was to publish without a French reviewer. Flagging it here so it is visible to whoever merges, not buried in a chat log.

What that means in practice: everything below is a mechanical check. None of it can tell you whether a sentence says the right thing. The pages carry fuse ratings, voltages, current limits, polarity instructions and ABYC references — a mistranslated "must" or an inverted polarity would pass every check in this PR.

Terminology

Fixed up front in solutions/translation/french-glossary.md, before any page was translated — the order that kept terms from drifting in Finnish.

carrier boardcarte porteuse, which is a deliberate divergence from Finnish. Finnish uses emolevy (literally motherboard), chosen for familiarity over accuracy; French takes the accurate term. The glossary records this as a decision so nobody "harmonises" the two languages later, and notes the practical consequence: the Finnish glossary tells translators to spell out the CM5/board relationship in passages where emolevy would invert it, and French does not need that warning.

Two rules the Finnish glossary does not cover, because they are specific to French: the address form is the vouvoiement imperative, and French typography needs a narrow no-break space before ; : ! ? and guillemets for quotations.

The machinery earned its keep

This is the first language added since #30, and it behaved as intended on first real use: French built and fell back to English from the first commit, and the status report listed all 21 pages as missing with the stamp each would need.

Anchors: 20 broke, four more than the Finnish pass. In French the daemon and REST API headings also change slug, where the Finnish ones happened to coincide with English by luck. Without check_anchors.py these would have shipped — mkdocs build --strict reports nothing. All 2925 anchors in the built site now resolve.

Verified

  • uv run mkdocs build --strict passes
  • 2925 anchors resolve across all three languages
  • 2570 local resource references resolve; per-page image counts on French pages match the English originals exactly, on every page
  • Structure compared page by page: headings, list items, numbered steps, images, admonitions, table rows and code fences match on all 21 pairs
  • Code fences byte-identical — no command, config snippet or terminal output drifted
  • No numeric value invented: no number appears only in the French text. Numbers appearing only in English are English repeating a term where French uses a reference — 3.3V rail … from the 3.3V rail becomes la ligne 3,3 V … cette ligne, and one NMEA 2000 of thirteen is carried by a pronoun. Both checked by hand.
  • All 21 pages stamped and reporting current

🤖 Generated with Claude Code

helmihyo and others added 9 commits August 4, 2026 13:10
Sets up French as a third language and fixes its terminology before any
page is translated, the order that kept terms from drifting in Finnish.

Nothing is translated yet: fallback_to_default means every French URL
serves the English page, and the status report lists all 21 as missing
with the stamp each will need.

Two French-specific rules the Finnish glossary does not cover: the
address form is the vouvoiement imperative, and French typography needs
a narrow no-break space before ; : ! ? and guillemets for quotations.

carrier board is translated as "carte mère" on the same reasoning Matti
applied to "emolevy" — familiarity over literal accuracy — and carries
the same warning about inverting the CM5/board relationship.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
French takes the accurate term where Finnish took the familiar one.
Recorded as a deliberate divergence rather than left to look like an
inconsistency, so nobody harmonises the two languages later.

One consequence worth having written down: the Finnish glossary warns
translators to spell out the CM5/board relationship in passages where
"emolevy" would invert it. French does not need that warning, because
"carte porteuse" already says what the board is.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Twelve of 21 pages. None of these link into other pages, so they stand
alone and the remaining nine can land separately.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
System Operation, the technical reference interfaces page and the
Ubuntu guide. 15 of 21.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
16 of 21.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
18 of 21.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
19 of 21.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
20 of 21.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The last page, plus the anchor pass and stamps for all 21.

Translating the remaining pages broke 20 anchors — four more than the
Finnish pass, because in French the daemon and REST API headings also
change slug where the Finnish ones happened to coincide with English.
All 2925 anchors in the built site now resolve.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@helmihyo

helmihyo commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator Author

Self-review

I wrote this branch and I do not read French, so this is a mechanical pass. It cannot tell you whether a sentence says the right thing — the limitation already stated in the description stands.

One real defect, found by testing a claim I made rather than re-reading it.

This PR adds a typography rule and breaks it 334 times

french-glossary.md, added in this same PR, says:

Narrow no-break space before ; : ! ? and inside « »

The 21 translated pages contain 334 plain spaces before those characters and zero narrow or non-breaking ones. Every Symptômes :, every deux modes : le mode solo. The rule and its violation land in the same change.

It is not cosmetic. A plain space before a colon lets the line break in front of it, which is exactly the "sloppy-looking translated page" the glossary warns about — and it is the first thing a French reader notices.

One thing worth deciding rather than assuming, since I wrote the rule too: U+202F (narrow no-break) is typographically correct but renders inconsistently across fonts. U+00A0 (ordinary no-break) is universally supported and is what most French technical documentation uses in practice. I would fix to U+00A0 and amend the glossary to say so, rather than chase the narrower character. Either is a scripted change over the same 334 sites; leaving them plain is the one option I would argue against.

Everything else I could check is clean

  • No carte mère anywhere — not in the pages, mkdocs.yml or the glossary. The divergence from Finnish is applied consistently.
  • Guillemets are used in prose (29). The 68 straight quotes are !!! type "Title" markdown syntax, which requires them; the remaining 12 are inside code fences. No straight quotes in French prose.
  • Footnotes survived[^ssh] and [^rs422] are present with both reference and definition.
  • ## CAN FD / NMEA 2000 and ## RS-485 (NMEA 0183) kept their English form, so links to them resolve without rewriting. That is the glossary's protocol-names rule doing useful work, not luck.
  • No en/ or fr/ segment leaked into any in-page path.
  • Two bare !!! note admonitions left bare, so admonition_translations supplies the French title rather than the page hard-coding it.

Still unverified

The French prose itself. No one who reads French has looked at it, by decision. Everything above is structure and characters.

🤖 Generated with Claude Code

This branch added the rule and then broke it 334 times: every French
page used an ordinary space before ; : ! ?, and none used a no-break
one. An ordinary space lets the line break in front of the punctuation,
which is the first thing a French reader notices — and exactly the
"sloppy-looking translated page" the glossary warns about.

U+00A0 rather than the typographically precise U+202F: the narrow form
renders inconsistently across fonts, while U+00A0 is universally
supported and is what French technical documentation uses. The glossary
now says so rather than describing the stricter rule nothing followed.

Code fences and inline code were protected, so no command or config
snippet changed. Heading slugs are unaffected — the slugifier treats
U+00A0 as whitespace — and all 2925 anchors still resolve.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@helmihyo
helmihyo merged commit 3d2ee45 into main Aug 4, 2026
1 check passed
@helmihyo
helmihyo deleted the feat/i18n-french branch August 4, 2026 11:42
helmihyo added a commit that referenced this pull request Aug 4, 2026
This branch added the rule and then half-applied it: all 28 quotations
opened with „ (U+201E) and closed with a straight ASCII quote instead of
“ (U+201C). A low opening quote paired with a vertical closing one looks
broken to any German reader.

Same failure as the French spacing rule on #31 — a typography rule
written in one file and not followed in the others.

The replacement is scoped, not blind: straight quotes also carry meaning
as markdown syntax in `!!! type "Titel"` and inside code fences. Only the
quote closing a „ pair changed; 34 admonition titles and every code
fence are untouched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant