100+
May 19, 2026
November 19, 2025
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:
: ; ! ? % and around « »(c) with ©, (r) with ®, (tm) / (TM) with ™1ère 1re, 3ème 3e, n-ième nièmeWhat it does not do:
<textarea> content ) or thin ( ) non-breaking spacesJason 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.
/wp-content/plugins/french-typo.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.
Full history for all versions: CHANGELOG.md on GitHub.
Foo & Bar) had a narrow no-break space inserted before their trailing ;, which downstream esc_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)get_locale(). (#5)languages/french-typo-fr_FR.po).https://buymeacoffee.com/jasonrouet).fr.wordpress.org upgraded to HTTPS.widget_text + the_content). Thanks to Guy Declercq for the report. (#8)