Locales

French (France) typography rules · fr

Français

French (France) sets primary quotation marks as «…» and secondary quotation marks as “…”, with U+00A0 no-break space inside the marks (secondary: no space inside the marks). A break in a sentence is written with an em dash (U+2014) with a space on each side; no single range convention is verified, so none is substituted. U+00A0 goes before :; U+202F goes before ; ! ?.

Updated · spec 1.12.0

Run polytypo with French (France) rules

Edit the text and polytypo typesets it with the fr locale, in your browser. The code under the form is the call that produces the result.

Runs in your browser. Nothing you paste is sent anywhere.

The call the form above is making, right now

Other locales, and all the options, are in the full playground.

French (France) typography at a glance #

Tagfr
NameFrench (France)
Primary quotes« U+00AB left-pointing double angle quotation mark … » U+00BB right-pointing double angle quotation mark
Secondary quotes“ U+201C left double quotation mark … ” U+201D right double quotation mark
Parenthetical dashspaced em dash
Range dashno dash substitution
Rules with citationsnbsp, quotes, dashes, hyphen
Conformance cases121

Which locale tags resolve to French (France)? #

The locale option is resolved exactly, then by declared alias, then by dropping the region once; anything else throws POLYTYPO_UNKNOWN_LOCALE.

TagHow it resolves
frregistered locale
fr-BEregion removed, then the registered locale

Which quotation marks does French (France) use? #

Primary« U+00AB left-pointing double angle quotation mark … » U+00BB right-pointing double angle quotation mark — U+00A0 no-break space inside the marks
Secondary“ U+201C left double quotation mark … ” U+201D right double quotation mark — no space inside the marks

Elision clitics

Word fragments that stand against an apostrophe at the edge of an inline span; a narrow mark next to one is not paired as a quotation.

Before the apostrophel j m t s c qu jusqu d n lorsqu puisqu quoiqu
After the apostrophenone

quotes

fr-quotes-primary
Il a dit "bonjour".
Il a dit « bonjour ».
fr-quotes-existing-guillemets-ordinary-space
Il a dit « bonjour ».
Il a dit « bonjour ».
fr-quotes-nested
"Il a dit 'oui' hier."
« Il a dit “oui” hier. »

How are apostrophes set in French (France)? #

apostrophe

fr-apostrophe-elision
l'été et l'hiver
l’été et l’hiver
fr-apostrophe-contractions
Aujourd'hui c'est d'accord, n'est-ce pas
Aujourd’hui c’est d’accord, n’est-ce pas
fr-apostrophe-elision-before-guillemet
un mélange d'« urine diluée »
un mélange d’« urine diluée »

Which dashes does French (France) use for breaks and ranges? #

Parenthetical break (dash.parenthetical)an em dash (U+2014) with a space on each side
Between numbers and dates (dash.range)no substitution: the locale has no verified convention, so the rule writes nothing

The dashes rule reads the parenthetical convention. The ranges rule reads the range convention and is off by default.

dashes

fr-dashes-parenthetical-tight-input
Le plan--s'il existe--échoue.
Le plan — s’il existe — échoue.
fr-dashes-parenthetical-spaced-input
Le plan - il existe - échoue.
Le plan — il existe — échoue.

How is the ellipsis set in French (France)? #

An ellipsis keeps its full form after ! and ?; this locale does not abbreviate it there.

ellipsis

fr-ellipsis-three-dots
Attendez... quoi ?
Attendez… quoi ?
fr-ellipsis-mixed-run
Attendez…… quoi
Attendez… quoi
fr-ellipsis-two-dots-after-terminal
Vraiment?..
Vraiment ?…

How are hyphens handled in French (France)? #

The hyphen lists are empty for this locale, so the hyphen rule changes nothing.

Where does French (France) use no-break spaces? #

Characters that take U+00A0 before them (nbsp.beforePunctuation):
Characters that take U+202F before them (nbsp.narrowBeforePunctuation); ! ?
Short words after which the space becomes U+00A0, so the word is not left at the end of a line (nbsp.afterShortWords)none
Multi-token abbreviations whose internal spaces become U+00A0 (nbsp.abbreviations)p. ex.
Units and signs bound to the preceding number with U+00A0 (nbsp.beforeUnits)% ‰ € °C km cm mm kg km/h kWh
Abbreviations bound to the following number with U+00A0 (nbsp.beforeNumber)art. fig. n° N°
Abbreviations bound to the following word with U+00A0 (nbsp.beforeWord)M. MM. Mme Mmes Mlle Mlles
Symbols bound to the following number with U+00A0 (nbsp.afterSymbols)§
Initials (nbsp.initialBinding)single — a lone initial is bound to the following word as well as a chain of initials

spaces

fr-spaces-collapse-run
Bonjour le monde.
Bonjour le monde.
fr-spaces-before-punctuation
Bonjour ! Ça va ?
Bonjour ! Ça va ?
fr-spaces-brackets
a ( b , c ) d
a (b, c) d

nbsp

fr-nbsp-narrow-question
Ça va ?
Ça va ?
fr-nbsp-narrow-exclamation
Bonjour !
Bonjour !
fr-nbsp-narrow-semicolon
Oui ; non
Oui ; non

How are symbols set in French (France)? #

symbols

fr-symbols-copyright
Copyright (c) 2026 Iurii Rogulia
Copyright © 2026 Iurii Rogulia
fr-symbols-multiplication
Une carte 3x5
Une carte 3×5

How does French (France) text behave in text, HTML and Markdown modes? #

Each input is the locale's sample sentence followed by a code run, say("a -- b ..."). text mode sets the whole string as prose, code run included. In html and markdown mode the code run comes back byte for byte; only the prose is set.

text
Elle a dit : "Ce n'est pas la librairie qu'on appelle 'le coin', si ?" ... On a marché - presque 3 km - pour la trouver fermée. Copyright (c) 2026 ; le tirage fait 40x60 cm. say("a -- b ...")
Elle a dit : « Ce n’est pas la librairie qu’on appelle “le coin”, si ? » … On a marché — presque 3 km — pour la trouver fermée. Copyright © 2026 ; le tirage fait 40×60 cm. say(« a — b … »)
html
<p>Elle a dit : "Ce n'est pas la librairie qu'on appelle 'le coin', si ?" ... On a marché - presque 3 km - pour la trouver fermée. Copyright (c) 2026 ; le tirage fait 40x60 cm.</p> <pre><code>say("a -- b ...")</code></pre>
<p>Elle a dit : « Ce n’est pas la librairie qu’on appelle “le coin”, si ? » … On a marché — presque 3 km — pour la trouver fermée. Copyright © 2026 ; le tirage fait 40×60 cm.</p> <pre><code>say("a -- b ...")</code></pre>
markdown
Elle a dit : "Ce n'est pas la librairie qu'on appelle 'le coin', si ?" ... On a marché - presque 3 km - pour la trouver fermée. Copyright (c) 2026 ; le tirage fait 40x60 cm. `say("a -- b ...")`
Elle a dit : « Ce n’est pas la librairie qu’on appelle “le coin”, si ? » … On a marché — presque 3 km — pour la trouver fermée. Copyright © 2026 ; le tirage fait 40×60 cm. `say("a -- b ...")`

How does French (France) differ from French (Canada)? #

fr and fr-CA are separate locales. Fields whose values differ:

Fieldfrfr-CA
nbsp.narrowBeforePunctuation (entries only in one); ! ?—

The same input through both:

input
Elle a dit : "Ce n'est pas la librairie qu'on appelle 'le coin', si ?" ... On a marché - presque 3 km - pour la trouver fermée. Copyright (c) 2026 ; le tirage fait 40x60 cm.
fr
Elle a dit : « Ce n’est pas la librairie qu’on appelle “le coin”, si ? » … On a marché — presque 3 km — pour la trouver fermée. Copyright © 2026 ; le tirage fait 40×60 cm.
fr-CA
Elle a dit : « Ce n’est pas la librairie qu’on appelle “le coin”, si? » … On a marché — presque 3 km — pour la trouver fermée. Copyright © 2026; le tirage fait 40×60 cm.

Which sources define French (France) typography? #

10 citations in spec/locales/fr.json, grouped by the rule each one supports. A citation names the authority; the note records what the source does and does not settle.

dashes

  • Jacques André, Petites leçons de typographie, § 2.2 et tableau 1 (p. 32) : le tiret marquant les incises est le tiret cadratin « — », précédé et suivi d'une espace (« mmm —_mmm … mmm_— mmm ») jacques-andre.fr

    Le même paragraphe signale que « la tendance est d'utiliser à sa place le tiret moyen « – » ». La valeur em-spaced suit la règle citée, pas la tendance ; docs/PLAN.md §7 supposait en-spaced. Aucune valeur de plage n'est vérifiée : les exemples de l'Imprimerie nationale et de Jacques André impriment un trait d'union dans les intervalles de pages (« p. 123-125 »), et l'énumération se fait plutôt « de … à … ». Le schéma a donc reçu la valeur « none » (ne rien substituer), retenue ici tant que le point n'est pas tranché sur le Lexique papier — une citation manquante n'autorise jamais à deviner.

hyphen

  • Jacques André, Petites leçons de typographie, tableau 1 (p. 32), ligne « trait d'union » : la saisie est « mmm-mmm », sans espace ni marque d'insécabilité, alors que le même tableau note explicitement l'insécable pour les ponctuations doubles, les guillemets et les tirets d'incise jacques-andre.fr

    Justification des trois listes vides. Aucune source normative consultée n'impose un trait d'union insécable pour une classe fermée de formes morphologiques françaises ; le § 5.1.3, qui énumère les cas d'insécabilité, ne mentionne aucun trait d'union. Le champ hyphen est donc sans objet en français.

quotes

  • Imprimerie nationale, Lexique des règles typographiques en usage à l'Imprimerie nationale, 3e éd., 2002, entrée « Guillemets » : les guillemets français « … » sont séparés du texte qu'ils encadrent par une espace insécable fr.wikipedia.org

    Le Lexique n'est pas consultable en ligne ; la règle a été vérifiée par recoupement de deux articles de la Wikipédia francophone qui la citent (« Espace fine insécable » : « à l'intérieur des guillemets français […] il est recommandé d'insérer des espaces insécables », attribué au Lexique 2002 ; « Ponctuation », tableau des espacements) et du tableau 1 de Jacques André, qui note une insécable après « « » et avant « » ». Désaccord assumé avec docs/PLAN.md §7, qui annonçait U+202F à l'intérieur des guillemets : la source normative dit espace insécable (U+00A0). L'usage web contemporain, et JoliTypo, emploient souvent U+202F ; le choix retenu ici est celui de la citation, pas celui de l'usage.

  • Jacques André, Petites leçons de typographie, § 2.2 : « en français, les guillemets sont les doubles chevrons « … » et non les (double-)quotes anglaises “…” ni ‘…’ » ; les guillemets anglais “ ” servent de guillemets de second niveau jacques-andre.fr

    Le second niveau est le point le moins solidement établi de ce fichier : l'usage français admet aussi la répétition des chevrons ou les chevrons simples ‹ ›. Les guillemets anglais sont retenus parce qu'ils sont la solution la plus couramment attribuée au Lexique, mais cette ligne mérite d'être revue si la 3e édition papier dit autre chose.

  • Office québécois de la langue française, Banque de dépannage linguistique, « Cas où l'élision est obligatoire » (dernière mise à jour : 2015) : « L'élision ne touche que des mots grammaticaux, habituellement courts, et que les voyelles a, e et i. » L'élision est obligatoire pour le déterminant et le pronom la et le, pour les pronoms je, me, te, se et ce placés devant le verbe, pour si devant il(s), pour que et les conjonctions qui le contiennent, pour jusque, pour la préposition de et pour l'adverbe de négation ne vitrinelinguistique.oqlf.gouv.qc.ca

    Justifie dix des treize entrées de quotes.elisionClitics.before : l (la, le), j (je), m (me), t (te), s (se et si), c (ce), qu (que), jusqu (jusque), d (de), n (ne). Chaque entrée est la plage de lettres maximale à gauche de la marque, d'où jusqu et non qu pour « jusqu'à » : sous une comparaison par plage maximale, une entrée qu ne peut pas apparier « jusqu' ». presqu (presqu'île) et quelqu (quelqu'un) sont volontairement exclus, faute d'attestation dans les articles relus, et l'exclusion est sans coût : dans les deux mots la marque a une lettre de chaque côté. La liste after est vide — la BDL définit l'élision comme l'effacement de la voyelle finale d'un mot, donc la marque suit toujours le mot élidé, et l'enclise française prend le trait d'union (donne-moi, y a-t-il), jamais l'apostrophe. Le cas porté par cette liste est l'élision devant un élément en ligne, l'<em>idée</em> : sans elle, quotes appariait la marque comme une citation et invertissait la paire englobante (issue #53). L'OQLF est l'autorité du Québec : pour fr-CA la citation est directe, pour fr elle tient lieu de substitut, le Lexique de l'Imprimerie nationale et Le Bon Usage n'étant pas consultables en ligne — même lacune que celle déjà signalée ailleurs dans ce fichier. quotes.md §3.2's span-boundary elision veto (spec 1.4.0) reads this list only when the mark's other literal neighbour is modes.md §3.2's inline span boundary, so every entry is matched against the maximal LETTER run on one side of the mark and nothing else. The list is decline-only: the worst it can do is refuse a pairing quotes would otherwise have formed.

  • Office québécois de la langue française, Banque de dépannage linguistique, « Élision de lorsque, puisque et quoique » (2020) : « les conjonctions lorsque, puisque et quoique s'élident obligatoirement devant il(s), elle(s), on, un et une, et aussi devant la préposition en » ; l'élision généralisée devant tout mot commençant par une voyelle ou un h muet « demeure facultative » vitrinelinguistique.oqlf.gouv.qc.ca

    Justifie les trois entrées lorsqu, puisqu, quoiqu. L'élision obligatoire devant il(s), elle(s), on, un, une et en suffit à l'appartenance : la liste étant uniquement restrictive, le caractère facultatif de l'élision généralisée ne change rien. Là encore la plage maximale impose des entrées distinctes : qu n'apparie pas « lorsqu' ». quotes.md §3.2's span-boundary elision veto (spec 1.4.0) reads this list only when the mark's other literal neighbour is modes.md §3.2's inline span boundary, so every entry is matched against the maximal LETTER run on one side of the mark and nothing else. The list is decline-only: the worst it can do is refuse a pairing quotes would otherwise have formed.

nbsp

  • Jacques André, Petites leçons de typographie, éd. du jobet, révision du 1er juin 2025, § 5.1.1 note 21 et § 5.2.3 : l'espace insécable employée devant les ponctuations doubles « c'est la fine des typographes, en première approximation (contre-exemple : l'espace avant le deux-points est en fait une espace normale insécable) » ; « il faut une espace fine insécable avant le point-virgule » jacques-andre.fr

    C'est le point qui tranche la question posée par docs/PLAN.md §7 : « ; », « ! » et « ? » prennent U+202F ; « : » prend U+00A0. La distinction est donc confirmée, et non simplement répétée. Le tableau 1 (p. 32) donne la saisie complète des signes. Recoupé avec l'article « Espace fine insécable » de la Wikipédia francophone, qui attribue la même règle au Lexique des règles typographiques en usage à l'Imprimerie nationale, 3e éd., 2002 (fine devant ; ? !, « sauf devant deux-points, en France »).

  • Jacques André, Petites leçons de typographie, § 2.5 et § 5.1.3 « Autres emplois de l'espace insécable » : espace insécable entre un prénom abrégé et le nom (« N. Bourbaki »), entre une abréviation et le mot qui la suit (« Mme Hugo », « le R.P. Durand »), entre un nombre et ce qu'il quantifie (« 14 francs », « 2 € », « 98 % », « art. 237 ») jacques-andre.fr

    La liste beforeUnits est volontairement courte et exclut les symboles d'une seule lettre (m, g, l, s, A), qui ne peuvent pas être désambiguïsés sans contexte. La liaison « abréviation + mot suivant » (M. Dupont, Mme Hugo) n'est pas exprimable dans ce schéma : afterSymbols lie un symbole à un NOMBRE suivant, pas à un mot ; elle passe par nbsp.initialBinding = "single" (spec 0.6.0 : le champ s'appelait auparavant le booléen bindInitials), qui conserve la liaison sur une seule initiale citée ici (« N. Bourbaki »). Contrairement à "chain" (en-US, de-DE, de-CH, ru — Chicago exige « two or more initials »), "single" ne peut pas distinguer structurellement un prénom abrégé authentique d'une collision de fin de phrase (une initiale isolée suivie d'un mot capitalisé qui commence en fait une nouvelle phrase) ; voir spec/rules/nbsp.md §7.

  • Jacques André, Petites leçons de typographie, § 5.1.3 « Autres emplois de l'espace insécable », liste « Coupure entre les mots » : « entre une abréviation et le mot qui la suit, exemples : “Mme_Hugo, D._Knuth, le R.P._Durand” » ; « entre un nombre et ce qu'il quantifie, par exemple : “14_francs, 2_€, 1_A, t._vii, art._237, fig._3, pages_23 à_25, 98_%” » — le caractère « _ » note l'espace insécable jacques-andre.fr

    Texte relu directement dans le PDF. Cette entrée lève la limitation signalée plus haut dans ce fichier (« la liaison abréviation + mot suivant n'est pas exprimable dans ce schéma ») : le schéma a depuis reçu beforeNumber et beforeWord. beforeNumber ne retient que « art. » et « fig. », cités littéralement devant un nombre ; « t. vii » est suivi d'un chiffre romain et n'a pas été retenu. beforeWord est volontairement réduit à la classe fermée des titres de civilité : la règle citée vaut pour toute abréviation, mais l'énumérer intégralement produirait des faux positifs (« etc. », « p. ex. », « cf. »). « Mme » est cité mot pour mot ; « M., MM., Mmes, Mlle, Mlles » sont les autres membres de la même classe et relèvent donc de la même règle, ce qui reste une inférence de classe et non une citation littérale. Un « M. » qui serait en réalité une initiale de prénom reçoit de toute façon l'espace insécable prescrite au § 5.1.3 pour « N. Bourbaki » : la liaison est correcte dans les deux lectures.

  • Office québécois de la langue française, Banque de dépannage linguistique, « Abréviation de numéro » : « L'abréviation courante du nom numéro est no ou No, avec la lettre o minuscule en exposant » ; « On n'abrège le mot numéro que s'il suit immédiatement le nom qu'il détermine » ; exemple : « C'est le billet no 852410 qui a valu le gros lot à sa détentrice » vitrinelinguistique.oqlf.gouv.qc.ca

    Deux choses distinctes, et il faut les tenir séparées. Ce que la source établit : « n° » est une abréviation, pas un symbole, d'où beforeNumber et non afterSymbols — l'argument est aussi mécanique, un « ° » seul placé dans afterSymbols serait inerte puisque N6 exige que le code point précédent ne soit pas ALNUM, or c'est la lettre « n » (nbsp.md §3.8). Ce que la source n'établit pas : la séquence exacte de code points. L'OQLF prescrit un o minuscule en exposant, un tracé et non un code point, et ne nomme nulle part le signe de degré ni la ligature « numéro » (U+2116). Pour la France, rien : le § 5.1.3 de Jacques André, relu intégralement, ne mentionne ni « numéro » ni « no », et le Lexique de l'Imprimerie nationale est un ouvrage imprimé qui n'a pas pu être consulté. Décision de l'opérateur (18.09.2026) : quand la règle est derrière une source payante, polytypo retient l'usage le plus répandu et l'applique de la même façon partout, l'uniformité primant la conformité au canon, et la décision est signalée comme telle au lieu d'être présentée comme une citation. L'usage le plus répandu est « n » + U+00B0, c'est ce que l'on tape et ce que l'on trouve dans les textes en ligne ; N9 n'ayant aucune tolérance de casse, « n° » et « N° » sont deux entrées. La phrase « on ne sépare pas les numéros par des espacements » de la même page vise les tranches de chiffres à l'intérieur du nombre (« billet no 852410 »), pas l'espace entre l'abréviation et le nombre.

Already using polytypo? Add our badge

Two lines: a script tag and a span. No per-embed network call. Pick a language and a theme, then copy the code into your footer or credits. Embedding notes cover Content Security Policy. Sites with the badge are listed on Sites using polytypo.

<script async src="https://polytypo.dev/badge.js"></script>
<span data-polytypo-lang="en" data-polytypo-theme="light"></span>

Search runs in your browser. Nothing is sent anywhere.