French Typo
French Typo
Description
French Typo applies French typography rules to your content as it is displayed. Your text stays exactly as you wrote it in the editor — only the rendered output is enriched.
What it does:
- Adds non-breaking spaces before
: ; ! ? %and around« » - Replaces
(c)with©,(r)with®,(tm)/(TM)with™ - Optionally normalizes French ordinals:
1ère1re,3ème3e,n-ièmenième - Works across posts, pages, widgets, menus, comments, RSS, REST, ACF / Meta Box fields, and SEO output (Yoast, Rank Math, SEOPress)
- On multilingual sites, can apply rules to French content only (Polylang and WPML auto-detected)
What it does not do:
- Touch your raw HTML, code blocks, scripts, styles, or
<textarea>content - Modify what’s stored in the database
Settings highlights
- Regular (
) or thin ( ) non-breaking spaces - Enable / disable each content area (title, content, excerpt, widgets, RSS, REST, etc.)
- Language restriction: off (default), auto French, or pick specific locales
Author & Credits
Jason Rouet
* Website: jasonrouet.com
* Email: bonjour@jasonrouet.com
* WordPress.org: profiles.wordpress.org/jaz_on/
You can support this project on Buy Me a Coffee or GitHub Sponsors.
This plugin is a fork of French Typo created by Gilles Marchand (master_shiva), completely rebuilt since March 2024 with the help of Jean-Baptiste Audras. Inspired by TypoFR, Orthotypo, and Consistency.
Installation
- Install through the WordPress plugins screen, or upload to
/wp-content/plugins/french-typo. - Activate the plugin.
- Configure in Settings > French Typo.
Faq
No. The text saved in the database is never altered. French Typo intercepts the output just before display and adds the typography rules there. Deactivate the plugin and your content comes back unchanged.
Regular ( ) is universally supported. Thin ( ) is typographically purer for : ; but may render too narrow or as a missing glyph on older fonts and browsers.
Yes. In Settings > French Typo > Language restriction, choose Auto to apply only to fr_* locales, or Custom to pick specific locales. Polylang and WPML are detected per post; otherwise the site locale is used.
No. Typography is skipped inside <script>, <style>, <pre>, <code> (nested), <textarea>, and embedded CSS (e.g. inline SVG). Gutenberg’s Verse block stays typographic unless it is also a Code block.
No. Only the French forms listed in the description are converted.
No (since 1.2.2). All non-breaking space variants — ,  ,  ,  ,  , and literal U+00A0 / U+202F — are detected and collapsed to a single canonical entity.
Reviews
L'extension indispensable pour le texte
By SeeRealMy (cyrilmailhes) on March 30, 2026
Fini les "?" et les ":" qui finissent orphelins en début de ligne... Et pas seulement... La gestion des espaces insécables et des espaces fines sur le web est généralement mise de côté, et c'est bien domage. Ce plugin (paramétrable) rectifie le tir. Plus besoin d'insérer manuellement dans le code des " " ! MERCI
Just perfect
By chaplin89 on March 17, 2026
Je pensais devoir coder ça moi-même mais tu as fait ça parfaitement. Juste merci 😉
Simple, efficent and very useful ! Thanks
By Béryl de La Grandière (beryldlg) on November 20, 2025
Merci Jason, super initiative, ça manquait !
Je regarde ta todo et j'ai quelques remarques à ajouter
Concernant les abréviations de nombres ordinaux
premier donne bien 1er mais première donne 1re et non 1ère
Deuxième et troisième donnent 2e et 3e dans tous les cas, pas de 2ème ou 3ème
Sinon les numéraux indéfinis s’abrègent en nième nième et xième, ce qui est calqué sur leur prononciation.
Changelog
Full history for all versions: CHANGELOG.md on GitHub.
1.2.3
- Fixed: HTML entities in plain-text titles (e.g.
Foo & Bar) had a narrow no-break space inserted before their trailing;, which downstreamesc_html()then re-encoded into visible&#038 ;(e.g. in Yoast breadcrumbs). Entity protection now runs on any text containing&, not only on text containing tags. (#10)
1.2.2
- Added: Language restriction modes (Disabled / Auto French / Custom) with Polylang and WPML auto-detection, falling back to
get_locale(). (#5) - Added: Reference French translation (
languages/french-typo-fr_FR.po). - Changed: Donate link migrated from Ko-fi to Buy Me a Coffee (
https://buymeacoffee.com/jasonrouet). - Changed: README —
fr.wordpress.orgupgraded to HTTPS. - Fixed: Duplicate non-breaking spaces with Elementor + Advanced Editor Tools — detects every NBSP variant (named/numeric/hex entities, literal U+00A0 / U+202F) and collapses runs into a single canonical NBSP. Idempotent across layered filters (
widget_text+the_content). Thanks to Guy Declercq for the report. (#8)
