{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Cecil - Configuration",
  "home_page_url": "https://cecil.app/fr/documentation/configuration/",
  "feed_url": "https://cecil.app/fr/documentation/configuration/feed.json",
  "description": "Configurez votre site avec le fichier cecil.yml.",
  "icon": "https://cecil.app/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "favicon": "https://cecil.app/thumbnails/64x/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "language": "fr",
  "items": [
    {
      "id": "https://cecil.app/fr/documentation/configuration/site/",
      "url": "https://cecil.app/fr/documentation/configuration/site/",
      "title": "Options du site",
      "summary": "title, baseurl, menus, taxonomies, theme, date, metatags, debug, etc.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Options du site\ntitle\nTitre principal du site.\ntitle: \"&lt;site title&gt;\"\nbaseline\nDescription courte (~ 20 caractères).\nbaseline: \"&lt;baseline&gt;\"\nbaseurl\nURL de base.\nbaseurl: &lt;url&gt;\nExemple :\nbaseurl: http:\/\/localhost:8000\/\nbaseurl doit se terminer par un slash final (\/).\ncanonicalurl\nSi la valeur est true, la fonction url() renverra l’URL absolue (false par défaut).\ncanonicalurl: &lt;true|false&gt; # false by default\ndescription\nDescription du site (~ 250 caractères).\ndescription: \"&lt;description&gt;\"\nmenus\nLes menus sont utilisés pour créer des liens de navigation dans les templates.\nUn menu est composé d’un identifiant unique et des propriétés des entrées (nom, URL, poids).\nmenus:\n  &lt;name&gt;:\n    - id: &lt;unique-id&gt;   # unique identifier (required)\n      name: \"&lt;name&gt;\"    # name displayed in templates\n      url: &lt;url&gt;        # relative or absolute URL\n      weight: &lt;integer&gt; # integer value used to sort entries (lighter first)\nExemple :\nmenus:\n  main:\n    - id: about\n      name: \"About\"\n      url: \/about\/\n      weight: 1\n  footer:\n    - id: author\n      name: The author\n      url: https:\/\/arnaudligny.fr\n      weight: 99\nUn menu main est créé automatiquement avec l’entrée de la page d’accueil et toutes les entrées de sections (Voir la gestion du contenu).\nUne page peut être ajoutée à un menu en définissant la variable menu dans son front matter.\nSurcharger une entrée\nUne entrée de menu de page peut être surchargée : utilisez l’ID de la page comme id.\nExemple :\nmenus:\n  main:\n    - id: index\n      name: \"My amazing homepage!\"\n      weight: 1\nDésactiver une entrée\nUne entrée de menu peut être désactivée avec enabled: false.\nExemple :\nmenus:\n  main:\n    - id: about\n      enabled: false\ntaxonomies\nListe des vocabulaires, associant une valeur au pluriel à une valeur au singulier.\ntaxonomies:\n  &lt;plural&gt;: &lt;singular&gt;\nExemple :\ntaxonomies:\n  categories: category\n  tags: tag\nVous pouvez ensuite utiliser ces vocabulaires dans le front matter de votre contenu.\nDepuis la version 8.37.0, les vocabulaires par défaut category et tag ont été supprimés. Vous devez les définir dans le fichier de configuration si vous souhaitez les utiliser.\nUn vocabulaire peut être désactivé avec la valeur spéciale disabled. Exemple : tags: disabled.\ntheme\nThème à utiliser, ou liste de thèmes.\ntheme: &lt;theme&gt; # theme name\n# or\ntheme:\n  - &lt;theme1&gt; # theme name\n  - &lt;theme2&gt;\nLe premier thème surcharge les suivants, et ainsi de suite.\nExemples :\ntheme: hyde\ntheme:\n  - serviceworker\n  - hyde\nVoir les thèmes sur GitHub ou la section thèmes du site.\ndate\nFormat de date et fuseau horaire.\ndate:\n  format: &lt;format&gt;     # date format (optional, `F j, Y` by default)\n  timezone: &lt;timezone&gt; # date timezone (optional, local time zone by default)\n\nformat : spécificateur de format de date PHP\ntimezone : voir les fuseaux horaires\n\nExemple :\ndate:\n  format: 'j F, Y'\n  timezone: 'Europe\/Paris'\nmetatags\nLes metatags sont des aides SEO et réseaux sociaux qui peuvent être injectées automatiquement dans le &lt;head&gt;, via le template partials\/metatags.html.twig.\nCe template ajoute les balises meta suivantes :\n\nTitre de page + titre du site, ou titre du site + baseline du site\nDescription de la page\/du site\nMots-clés de la page\/du site\nAuteur de la page\/du site\nDirectives des robots des moteurs de recherche (robots)\nLiens de favicon\nLiens de navigation (premier, précédent, suivant, dernier)\nURL canonique\nLiens alternatifs (ex. : flux RSS, autres langues)\nLiens rel=me\nOpen Graph\nIdentifiant de profil Facebook\nTwitter\/X Card\nFediverse tag\nDublin Core\nStructured data (JSON-LD)\n\noptions metatags\nCecil utilise le front matter de la page pour alimenter les meta tags, avec repli sur les options du site si nécessaire.\ntitle: \"Page\/Site title\"              # used by title meta\ndescription: \"Page\/Site description\"  # used by description meta\ntags: [tag1, tag2]                    # used by keywords meta\nkeywords: [keyword1, keyword2]        # obsolete\nauthor:                               # used by author meta\n  name: &lt;name&gt;                          # author name\n  url: &lt;url&gt;                            # author URL\n  email: &lt;email&gt;                        # author email\nimage: image.jpg                      # used by Open Graph and social networks cards\ncanonical:                            # used to override the generated canonical URL\n  url: &lt;URL&gt;                            # absolute URL\n  title: \"&lt;URL title&gt;\"                  # optional canonical title\nsocial:                               # used by social networks meta\n  twitter:                              # used by Twitter\/X Card\n    url: &lt;URL&gt;                            # used for `rel=me` link\n    site: username                        # site username\n    creator: username                     # page author username\n  mastodon:                             # used by Mastodon meta\n    url: &lt;URL&gt;                            # used for `rel=me` link\n    creator: handle                       # page author account\n  facebook:                             # used by Facebook meta\n    url: &lt;URL&gt;                            # used for `rel=me` link\n    id: 123456789                         # Facebook profile ID\n    username: username                    # page author username\nSi besoin, title et image peuvent être surchargés :\n{{ include('partials\/metatags.html.twig', {title: 'Custom title', image: og_image}) }}\nconfiguration metatags\nmetatags:\n  title:                   # title options\n    divider: \" &amp;middot; \"    # string between page title and site title\n    only: false              # displays page title only (`false` by default)\n    pagination:              # pagination options\n      shownumber: true         # displays page number in title (`true` by default)\n      label: \"Page %s\"         # how to display page number (`Page %s` by default)\n  robots: \"index,follow\"   # web crawlers directives (`index,follow` by default)\n  favicon:                 # favicon options\n    enabled: true            # includes favicon (`true` by default)\n    image: favicon.png       # path to favicon image\n    sizes:                   # sizes by device\n      - \"icon\": [32, 57, 76, 96, 128, 192, 228]  # web browsers\n      - \"shortcut icon\": [196]                   # Android\n      - \"apple-touch-icon\": [120, 152, 180]      # iOS\n  navigation: true         # includes previous and next links (`true` by default)\n  image: true              # includes image (`true` by default)\n  og: true                 # includes Open Graph meta tags (`true` by default)\n  articles: \"blog\"         # articles' section (`blog` by default)\n  twitter: true            # includes Twitter\/X Card meta tags (`true` by default)\n  mastodon: true           # includes Mastodon meta tags (`true` by default)\n  dc: false                # includes Dublin Core meta tags (`false` by default)\n  data: false              # includes JSON-LD structured data (`false` by default)\ndebug\nActive le mode debug, utilisé pour afficher des informations de débogage comme des journaux très verbeux, le dump Twig, le profileur Twig, le sourcemap SCSS, etc.\ndebug: true\nIl existe deux autres façons d’activer le mode debug :\n\nExécuter une commande avec l’option -vvv\nDéfinir la variable d’environnement CECIL_DEBUG à true\n\n",
      "content_html": "<h1>Options du site</h1>\n<h2 id=\"title\">title</h2>\n<p>Titre principal du site.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"&lt;site title&gt;\"</span></code></pre>\n<h2 id=\"baseline\">baseline</h2>\n<p>Description courte (~ 20 caractères).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">baseline:</span> <span class=\"hljs-string\">\"&lt;baseline&gt;\"</span></code></pre>\n<h2 id=\"baseurl\">baseurl</h2>\n<p>URL de base.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">baseurl:</span> <span class=\"hljs-string\">&lt;url&gt;</span></code></pre>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">baseurl:</span> <span class=\"hljs-string\">http://localhost:8000/</span></code></pre>\n<aside class=\"note note-important\"><p><code translate=\"no\">baseurl</code> doit se terminer par un slash final (<code translate=\"no\">/</code>).</p></aside>\n<h2 id=\"canonicalurl\">canonicalurl</h2>\n<p>Si la valeur est <code translate=\"no\">true</code>, la fonction <a href=\"../templates/reference/1-functions.fr.md#url\"><code translate=\"no\">url()</code></a> renverra l’URL absolue (<code translate=\"no\">false</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">canonicalurl:</span> <span class=\"hljs-string\">&lt;true|false&gt;</span> <span class=\"hljs-comment\"># false by default</span></code></pre>\n<h2 id=\"description\">description</h2>\n<p>Description du site (~ 250 caractères).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">description:</span> <span class=\"hljs-string\">\"&lt;description&gt;\"</span></code></pre>\n<h2 id=\"menus\">menus</h2>\n<p>Les menus sont utilisés pour créer des <a href=\"../templates/2-variables.fr.md#site-menus\">liens de navigation dans les templates</a>.</p>\n<p>Un menu est composé d’un identifiant unique et des propriétés des entrées (nom, URL, poids).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-string\">&lt;name&gt;:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">&lt;unique-id&gt;</span>   <span class=\"hljs-comment\"># unique identifier (required)</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"&lt;name&gt;\"</span>    <span class=\"hljs-comment\"># name displayed in templates</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;url&gt;</span>        <span class=\"hljs-comment\"># relative or absolute URL</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-string\">&lt;integer&gt;</span> <span class=\"hljs-comment\"># integer value used to sort entries (lighter first)</span></code></pre>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">about</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"About\"</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">/about/</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">1</span>\n  <span class=\"hljs-attr\">footer:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">author</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">The</span> <span class=\"hljs-string\">author</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">https://arnaudligny.fr</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">99</span></code></pre>\n<aside class=\"note note-info\"><p>Un menu <code translate=\"no\">main</code> est créé automatiquement avec l’entrée de la page d’accueil et toutes les entrées de sections (<a href=\"../content/index.fr.md\">Voir la gestion du contenu</a>).</p></aside>\n<aside class=\"note note-tip\"><p>Une page peut être ajoutée à un menu en définissant la variable <a href=\"../content/2-front-matter.fr.md#menu\"><code translate=\"no\">menu</code></a> dans son front matter.</p></aside>\n<h3 id=\"surcharger-une-entree\">Surcharger une entrée</h3>\n<p>Une entrée de menu de page peut être surchargée : utilisez l’ID de la page comme <code translate=\"no\">id</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">index</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"My amazing homepage!\"</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">1</span></code></pre>\n<h3 id=\"desactiver-une-entree\">Désactiver une entrée</h3>\n<p>Une entrée de menu peut être désactivée avec <code translate=\"no\">enabled: false</code>.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">about</span>\n      <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<h2 id=\"taxonomies\">taxonomies</h2>\n<p>Liste des vocabulaires, associant une valeur au pluriel à une valeur au singulier.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">taxonomies:</span>\n  <span class=\"hljs-string\">&lt;plural&gt;:</span> <span class=\"hljs-string\">&lt;singular&gt;</span></code></pre>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">taxonomies:</span>\n  <span class=\"hljs-attr\">categories:</span> <span class=\"hljs-string\">category</span>\n  <span class=\"hljs-attr\">tags:</span> <span class=\"hljs-string\">tag</span></code></pre>\n<p>Vous pouvez ensuite utiliser ces vocabulaires dans le <a href=\"../content/2-front-matter.fr.md#taxonomie\">front matter</a> de votre contenu.</p>\n<aside class=\"note note-warning\"><p>Depuis la <ins>version 8.37.0</ins>, les vocabulaires par défaut <code translate=\"no\">category</code> et <code translate=\"no\">tag</code> ont été supprimés. Vous devez les définir dans le fichier de configuration si vous souhaitez les utiliser.</p></aside>\n<aside class=\"note note-tip\"><p>Un vocabulaire peut être désactivé avec la valeur spéciale <code translate=\"no\">disabled</code>. Exemple : <code translate=\"no\">tags: disabled</code>.</p></aside>\n<h2 id=\"theme\">theme</h2>\n<p>Thème à utiliser, ou liste de thèmes.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">theme:</span> <span class=\"hljs-string\">&lt;theme&gt;</span> <span class=\"hljs-comment\"># theme name</span>\n<span class=\"hljs-comment\"># or</span>\n<span class=\"hljs-attr\">theme:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&lt;theme1&gt;</span> <span class=\"hljs-comment\"># theme name</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&lt;theme2&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>Le premier thème surcharge les suivants, et ainsi de suite.</p></aside>\n<p><em>Exemples :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">theme:</span> <span class=\"hljs-string\">hyde</span></code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">theme:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">serviceworker</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">hyde</span></code></pre>\n<aside class=\"note note-info\"><p>Voir les <a href=\"https://github.com/Cecilapp?q=theme#org-repositories\" target=\"_blank\" rel=\"noopener noreferrer\">thèmes sur GitHub</a> ou la <a href=\"https://cecil.app/themes/\">section thèmes</a> du site.</p></aside>\n<h2 id=\"date\">date</h2>\n<p>Format de date et fuseau horaire.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">date:</span>\n  <span class=\"hljs-attr\">format:</span> <span class=\"hljs-string\">&lt;format&gt;</span>     <span class=\"hljs-comment\"># date format (optional, `F j, Y` by default)</span>\n  <span class=\"hljs-attr\">timezone:</span> <span class=\"hljs-string\">&lt;timezone&gt;</span> <span class=\"hljs-comment\"># date timezone (optional, local time zone by default)</span></code></pre>\n<ul>\n<li><code translate=\"no\">format</code> : spécificateur de format de <a href=\"https://php.net/date\" target=\"_blank\" rel=\"noopener noreferrer\">date PHP</a></li>\n<li><code translate=\"no\">timezone</code> : voir les <a href=\"https://php.net/timezones\" target=\"_blank\" rel=\"noopener noreferrer\">fuseaux horaires</a></li>\n</ul>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">date:</span>\n  <span class=\"hljs-attr\">format:</span> <span class=\"hljs-string\">'j F, Y'</span>\n  <span class=\"hljs-attr\">timezone:</span> <span class=\"hljs-string\">'Europe/Paris'</span></code></pre>\n<h2 id=\"metatags\">metatags</h2>\n<p>Les <em>metatags</em> sont des aides SEO et réseaux sociaux qui peuvent être injectées automatiquement dans le <code translate=\"no\">&lt;head&gt;</code>, via le template <a href=\"https://github.com/Cecilapp/Cecil/blob/main/resources/layouts/partials/metatags.html.twig\" target=\"_blank\" rel=\"noopener noreferrer\"><code translate=\"no\">partials/metatags.html.twig</code></a>.</p>\n<p>Ce template ajoute les balises meta suivantes :</p>\n<ul>\n<li>Titre de page + titre du site, ou titre du site + baseline du site</li>\n<li>Description de la page/du site</li>\n<li>Mots-clés de la page/du site</li>\n<li>Auteur de la page/du site</li>\n<li>Directives des robots des moteurs de recherche (<em>robots</em>)</li>\n<li>Liens de favicon</li>\n<li>Liens de navigation (premier, précédent, suivant, dernier)</li>\n<li>URL canonique</li>\n<li>Liens alternatifs (ex. : flux RSS, autres langues)</li>\n<li>Liens <a href=\"https://developer.mozilla.org/docs/Web/HTML/Reference/Attributes/rel/me\" target=\"_blank\" rel=\"noopener noreferrer\"><code translate=\"no\">rel=me</code></a></li>\n<li><a href=\"https://ogp.me\" target=\"_blank\" rel=\"noopener noreferrer\">Open Graph</a></li>\n<li>Identifiant de profil Facebook</li>\n<li><a href=\"https://developer.x.com/docs/x-for-websites/cards/guides/getting-started\" target=\"_blank\" rel=\"noopener noreferrer\">Twitter/X Card</a></li>\n<li><a href=\"https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/\" target=\"_blank\" rel=\"noopener noreferrer\">Fediverse tag</a></li>\n<li><a href=\"https://www.dublincore.org/specifications/dublin-core/dcmi-terms/\" target=\"_blank\" rel=\"noopener noreferrer\">Dublin Core</a></li>\n<li><a href=\"https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data\" target=\"_blank\" rel=\"noopener noreferrer\">Structured data</a> (JSON-LD)</li>\n</ul>\n<h3 id=\"options-metatags\">options metatags</h3>\n<p>Cecil utilise le front matter de la page pour alimenter les meta tags, avec repli sur les options du site si nécessaire.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"Page/Site title\"</span>              <span class=\"hljs-comment\"># used by title meta</span>\n<span class=\"hljs-attr\">description:</span> <span class=\"hljs-string\">\"Page/Site description\"</span>  <span class=\"hljs-comment\"># used by description meta</span>\n<span class=\"hljs-attr\">tags:</span> <span class=\"hljs-string\">[tag1,</span> <span class=\"hljs-string\">tag2]</span>                    <span class=\"hljs-comment\"># used by keywords meta</span>\n<span class=\"hljs-attr\">keywords:</span> <span class=\"hljs-string\">[keyword1,</span> <span class=\"hljs-string\">keyword2]</span>        <span class=\"hljs-comment\"># obsolete</span>\n<span class=\"hljs-attr\">author:</span>                               <span class=\"hljs-comment\"># used by author meta</span>\n  <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">&lt;name&gt;</span>                          <span class=\"hljs-comment\"># author name</span>\n  <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;url&gt;</span>                            <span class=\"hljs-comment\"># author URL</span>\n  <span class=\"hljs-attr\">email:</span> <span class=\"hljs-string\">&lt;email&gt;</span>                        <span class=\"hljs-comment\"># author email</span>\n<span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">image.jpg</span>                      <span class=\"hljs-comment\"># used by Open Graph and social networks cards</span>\n<span class=\"hljs-attr\">canonical:</span>                            <span class=\"hljs-comment\"># used to override the generated canonical URL</span>\n  <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># absolute URL</span>\n  <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"&lt;URL title&gt;\"</span>                  <span class=\"hljs-comment\"># optional canonical title</span>\n<span class=\"hljs-attr\">social:</span>                               <span class=\"hljs-comment\"># used by social networks meta</span>\n  <span class=\"hljs-attr\">twitter:</span>                              <span class=\"hljs-comment\"># used by Twitter/X Card</span>\n    <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># used for `rel=me` link</span>\n    <span class=\"hljs-attr\">site:</span> <span class=\"hljs-string\">username</span>                        <span class=\"hljs-comment\"># site username</span>\n    <span class=\"hljs-attr\">creator:</span> <span class=\"hljs-string\">username</span>                     <span class=\"hljs-comment\"># page author username</span>\n  <span class=\"hljs-attr\">mastodon:</span>                             <span class=\"hljs-comment\"># used by Mastodon meta</span>\n    <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># used for `rel=me` link</span>\n    <span class=\"hljs-attr\">creator:</span> <span class=\"hljs-string\">handle</span>                       <span class=\"hljs-comment\"># page author account</span>\n  <span class=\"hljs-attr\">facebook:</span>                             <span class=\"hljs-comment\"># used by Facebook meta</span>\n    <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># used for `rel=me` link</span>\n    <span class=\"hljs-attr\">id:</span> <span class=\"hljs-number\">123456789</span>                         <span class=\"hljs-comment\"># Facebook profile ID</span>\n    <span class=\"hljs-attr\">username:</span> <span class=\"hljs-string\">username</span>                    <span class=\"hljs-comment\"># page author username</span></code></pre>\n<aside class=\"note note-tip\"><p>Si besoin, <code translate=\"no\">title</code> et <code translate=\"no\">image</code> peuvent être surchargés :</p>\n<pre><code class=\"language-twig hljs twig\" translate=\"no\"><span class=\"hljs-template-variable\">{{ <span class=\"hljs-name\">include</span><span class=\"hljs-params\">('partials/metatags.html.twig', {title: 'Custom title', image: og_image})</span> }}</span></code></pre></aside>\n<h3 id=\"configuration-metatags\">configuration metatags</h3>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">metatags:</span>\n  <span class=\"hljs-attr\">title:</span>                   <span class=\"hljs-comment\"># title options</span>\n    <span class=\"hljs-attr\">divider:</span> <span class=\"hljs-string\">\" &amp;middot; \"</span>    <span class=\"hljs-comment\"># string between page title and site title</span>\n    <span class=\"hljs-attr\">only:</span> <span class=\"hljs-literal\">false</span>              <span class=\"hljs-comment\"># displays page title only (`false` by default)</span>\n    <span class=\"hljs-attr\">pagination:</span>              <span class=\"hljs-comment\"># pagination options</span>\n      <span class=\"hljs-attr\">shownumber:</span> <span class=\"hljs-literal\">true</span>         <span class=\"hljs-comment\"># displays page number in title (`true` by default)</span>\n      <span class=\"hljs-attr\">label:</span> <span class=\"hljs-string\">\"Page %s\"</span>         <span class=\"hljs-comment\"># how to display page number (`Page %s` by default)</span>\n  <span class=\"hljs-attr\">robots:</span> <span class=\"hljs-string\">\"index,follow\"</span>   <span class=\"hljs-comment\"># web crawlers directives (`index,follow` by default)</span>\n  <span class=\"hljs-attr\">favicon:</span>                 <span class=\"hljs-comment\"># favicon options</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>            <span class=\"hljs-comment\"># includes favicon (`true` by default)</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">favicon.png</span>       <span class=\"hljs-comment\"># path to favicon image</span>\n    <span class=\"hljs-attr\">sizes:</span>                   <span class=\"hljs-comment\"># sizes by device</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">\"icon\":</span> <span class=\"hljs-string\">[32,</span> <span class=\"hljs-number\">57</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">76</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">96</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">128</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">192</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">228</span><span class=\"hljs-string\">]</span>  <span class=\"hljs-comment\"># web browsers</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">\"shortcut icon\":</span> <span class=\"hljs-string\">[196]</span>                   <span class=\"hljs-comment\"># Android</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">\"apple-touch-icon\":</span> <span class=\"hljs-string\">[120,</span> <span class=\"hljs-number\">152</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">180</span><span class=\"hljs-string\">]</span>      <span class=\"hljs-comment\"># iOS</span>\n  <span class=\"hljs-attr\">navigation:</span> <span class=\"hljs-literal\">true</span>         <span class=\"hljs-comment\"># includes previous and next links (`true` by default)</span>\n  <span class=\"hljs-attr\">image:</span> <span class=\"hljs-literal\">true</span>              <span class=\"hljs-comment\"># includes image (`true` by default)</span>\n  <span class=\"hljs-attr\">og:</span> <span class=\"hljs-literal\">true</span>                 <span class=\"hljs-comment\"># includes Open Graph meta tags (`true` by default)</span>\n  <span class=\"hljs-attr\">articles:</span> <span class=\"hljs-string\">\"blog\"</span>         <span class=\"hljs-comment\"># articles' section (`blog` by default)</span>\n  <span class=\"hljs-attr\">twitter:</span> <span class=\"hljs-literal\">true</span>            <span class=\"hljs-comment\"># includes Twitter/X Card meta tags (`true` by default)</span>\n  <span class=\"hljs-attr\">mastodon:</span> <span class=\"hljs-literal\">true</span>           <span class=\"hljs-comment\"># includes Mastodon meta tags (`true` by default)</span>\n  <span class=\"hljs-attr\">dc:</span> <span class=\"hljs-literal\">false</span>                <span class=\"hljs-comment\"># includes Dublin Core meta tags (`false` by default)</span>\n  <span class=\"hljs-attr\">data:</span> <span class=\"hljs-literal\">false</span>              <span class=\"hljs-comment\"># includes JSON-LD structured data (`false` by default)</span></code></pre>\n<h2 id=\"debug\">debug</h2>\n<p>Active le <em>mode debug</em>, utilisé pour afficher des informations de débogage comme des journaux très verbeux, le dump Twig, le profileur Twig, le sourcemap SCSS, etc.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">debug:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<p>Il existe deux autres façons d’activer le <em>mode debug</em> :</p>\n<ol>\n<li>Exécuter une commande avec l’option <code translate=\"no\">-vvv</code></li>\n<li>Définir la variable d’environnement <code translate=\"no\">CECIL_DEBUG</code> à <code translate=\"no\">true</code></li>\n</ol>\n<hr>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/langues/",
      "url": "https://cecil.app/fr/documentation/configuration/langues/",
      "title": "Langues",
      "summary": "Langue principale et langues supplémentaires d’un site multilingue.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Langues\nlanguage\nLangue principale, définie par son code.\nlanguage: &lt;code&gt; # unique code (`en` by default)\nPar défaut, seuls les chemins des pages des autres langues sont préfixés par leur code de langue, mais vous pouvez préfixer le chemin des pages de la langue principale avec l’option suivante :\n#language: &lt;code&gt;\nlanguage:\n  code: &lt;code&gt;\n  prefix: true\nQuand prefix est défini à true, un alias est automatiquement créé pour la page d’accueil afin de rediriger de \/ vers \/&lt;code&gt;\/.\nlanguages\nOptions des langues disponibles, utilisées pour la localisation des pages et des templates.\nlanguages:\n  - code: &lt;code&gt;          # unique code (e.g.: `en`, `fr`, 'en-US', `fr-CA`)\n    name: &lt;name&gt;          # human readable name (e.g.: `Français`)\n    locale: &lt;locale&gt;      # locale code (`language_COUNTRY`, e.g.: `en_US`, `fr_FR`, `fr_CA`)\n    enabled: &lt;true|false&gt; # enabled or not (`true` by default)\nExemple :\nlanguage: en\nlanguages:\n  - code: en\n    name: English\n    locale: en_US\n  - code: fr\n    name: Français\n    locale: fr_FR\nUne liste des codes de locale est disponible si nécessaire.\nLocaliser\nPour localiser des options de configuration, vous devez les stocker sous la clé config de la langue.\nExemple :\ntitle: \"Cecil in english\"\nlanguages:\n  - code: en\n    name: English\n    locale: en_US\n  - code: fr\n    name: Français\n    locale: fr_FR\n    config:\n      title: \"Cecil en français\"\nDans les templates, vous pouvez accéder à une option avec {{ site.&lt;option&gt; }}, par exemple {{ site.title }}.\nSi une option n’est pas disponible dans la langue actuelle (ex. : fr), elle revient à la valeur globale (ex. : en).",
      "content_html": "<h1>Langues</h1>\n<h2 id=\"language\">language</h2>\n<p>Langue principale, définie par son code.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">&lt;code&gt;</span> <span class=\"hljs-comment\"># unique code (`en` by default)</span></code></pre>\n<p>Par défaut, seuls les chemins des pages des autres <a href=\"#languages\">langues</a> sont préfixés par leur code de langue, mais vous pouvez préfixer le chemin des pages de la langue principale avec l’option suivante :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-comment\">#language: &lt;code&gt;</span>\n<span class=\"hljs-attr\">language:</span>\n  <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">&lt;code&gt;</span>\n  <span class=\"hljs-attr\">prefix:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<aside class=\"note note-info\"><p>Quand <code translate=\"no\">prefix</code> est défini à <code translate=\"no\">true</code>, un alias est automatiquement créé pour la page d’accueil afin de rediriger de <code translate=\"no\">/</code> vers <code translate=\"no\">/&lt;code&gt;/</code>.</p></aside>\n<h2 id=\"languages\">languages</h2>\n<p>Options des langues disponibles, utilisées pour la localisation des <a href=\"../content/4-multilingual.fr.md\">pages</a> et des <a href=\"../templates/5-localization.fr.md\">templates</a>.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">&lt;code&gt;</span>          <span class=\"hljs-comment\"># unique code (e.g.: `en`, `fr`, 'en-US', `fr-CA`)</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">&lt;name&gt;</span>          <span class=\"hljs-comment\"># human readable name (e.g.: `Français`)</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">&lt;locale&gt;</span>      <span class=\"hljs-comment\"># locale code (`language_COUNTRY`, e.g.: `en_US`, `fr_FR`, `fr_CA`)</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-string\">&lt;true|false&gt;</span> <span class=\"hljs-comment\"># enabled or not (`true` by default)</span></code></pre>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">en</span>\n<span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">en</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">English</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">en_US</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">fr</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">Français</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">fr_FR</span></code></pre>\n<aside class=\"note note-info\"><p>Une <a href=\"3-locale-codes.fr.md\">liste des codes de locale</a> est disponible si nécessaire.</p></aside>\n<h3 id=\"localiser\">Localiser</h3>\n<p>Pour localiser des options de configuration, vous devez les stocker sous la clé <code translate=\"no\">config</code> de la langue.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"Cecil in english\"</span>\n<span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">en</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">English</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">en_US</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">fr</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">Français</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">fr_FR</span>\n    <span class=\"hljs-attr\">config:</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"Cecil en français\"</span></code></pre>\n<aside class=\"note note-info\"><p>Dans les <a href=\"../templates/index.fr.md\">templates</a>, vous pouvez accéder à une option avec <code translate=\"no\">{{ site.&lt;option&gt; }}</code>, par exemple <code translate=\"no\">{{ site.title }}</code>.<br>\nSi une option n’est pas disponible dans la langue actuelle (ex. : <code translate=\"no\">fr</code>), elle revient à la valeur globale (ex. : <code translate=\"no\">en</code>).</p></aside>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/pages/",
      "url": "https://cecil.app/fr/documentation/configuration/pages/",
      "title": "Pages",
      "summary": "Dossier des pages, tri, pagination, chemins, corps, pages virtuelles, générateurs, etc.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Pages\npages.dir\nRépertoire source des pages (pages par défaut).\npages:\n  dir: pages\npages.ext\nExtensions des fichiers de pages.\npages:\n  ext: [md, markdown, mdown, mkdn, mkd, text, txt]\npages.exclude\nRépertoires, chemins et noms de fichiers à exclure (accepte les glob, les chaînes et les expressions régulières).\npages:\n  exclude: ['vendor', 'node_modules', '*.scss', '\/\\.bck$\/']\npages.prefix.separator\nListe des caractères utilisés comme séparateur entre un préfixe de nom de fichier (date ou weight) et le slug.\npages:\n  prefix:\n    separator: ['-', '_']\npages.sortby\nMéthode de tri par défaut des collections.\npages:\n  sortby: date # `date`, `updated`, `title` ou `weight`\n  # ou\n  sortby:\n    variable: date    # `date`, `updated`, `title` ou `weight`\n    desc_title: false # tri par titre décroissant\n    reverse: false    # inverse l’ordre de tri\npages.pagination\nLa pagination est disponible pour les pages de liste (type homepage, section ou term).\npages:\n  pagination:\n    max: 5     # nombre maximum d’entrées par page\n    path: page # chemin de la page paginée\nDésactiver la pagination\nLa pagination peut être désactivée :\npages:\n  pagination: false\npages.paths\nApplique un path personnalisé à toutes les pages d’une section.\npages:\n  paths:\n    - section: &lt;section’s ID&gt;\n      path: &lt;path of pages&gt;\nEmplacements des variables de chemin\n\n:year\n:month\n:day\n:section\n:slug\n\nExemple :\npages:\n  paths:\n    - section: Blog\n      path: :section\/:year\/:month\/:day\/:slug # ex. : \/blog\/2020\/12\/01\/my-post\/\n# localized\nlanguages:\n  - code: fr\n    name: Français\n    locale: fr_FR\n    config:\n      pages:\n        paths:\n          - section: Blog\n            path: blogue\/:year\/:month\/:day\/:slug # ex. : \/blogue\/2020\/12\/01\/mon-billet\/\npages.frontmatter\nFormat du front matter des pages (yaml par défaut, accepte aussi ini, toml et json).\npages:\n  frontmatter: yaml\npages.body\nOptions du corps des pages.\nPour savoir comment ces options influencent votre contenu, voir la documentation Contenu &gt; Markdown.\npages.body.toc\nEn-têtes utilisés pour construire la table des matières ([h2, h3] par défaut).\npages:\n  body:\n    toc: [h2, h3]\npages.body.highlight\nActive la coloration syntaxique du code (true par défaut).\npages:\n  body:\n    highlight: false # définissez à false pour désactiver la coloration syntaxique\npages.body.images\nOptions de gestion des images.\npages:\n  body:\n    images:\n      formats: []       # ajoute des formats d’image alternatifs comme `source` (ex. `[avif, webp]`, tableau vide par défaut)\n      resize: 0         # redimensionne toutes les images à &lt;width&gt; (en pixels, `0` pour désactiver)\n      responsive: false # ajoute des variantes responsives à l’attribut `srcset` (`false` par défaut)\n      lazy: true        # ajoute l’attribut `loading=\"lazy\"` (`true` par défaut)\n      decoding: true    # ajoute l’attribut `decoding=\"async\"` (`true` par défaut)\n      caption: false    # place l’image dans un élément &lt;figure&gt; et ajoute une &lt;figcaption&gt; contenant le titre (`false` par défaut)\n      placeholder: ''   # remplit l’arrière-plan de &lt;img&gt; avant le chargement ('color' ou 'lqip', vide par défaut)\n      class: ''         # définit une classe par défaut sur chaque image (vide par défaut)\n      dark_suffix: ''   # suffixe de l’image variante sombre (ex. `.dark`), désactivé par défaut\n      mobile_suffix: '' # suffixe de l’image variante mobile (ex. `.mobile`), désactivé par défaut\n      mobile_media_query: '(max-width: 767px)' # media query de la `&lt;source&gt;` de la variante mobile\n      remote:           # traitement des images distantes (mettre à `false` pour désactiver)\n        fallback:         # chemin de l’image de secours, stockée dans le répertoire assets (vide par défaut)\nDepuis la version 8.41.0, l’option pages.body.images.resize sert à redimensionner les images à une largeur précise, et non plus à activer la fonctionnalité de redimensionnement (activée systématiquement).\nLes options globales, comme les largeurs et tailles des images responsives, sont configurables dans la section assets.images.\nLes images distantes sont téléchargées et converties en Assets pour être manipulées. Vous pouvez désactiver ce comportement en définissant l’option pages.body.images.remote.enabled à false.\nLorsque dark_suffix est défini (par ex. dark_suffix: .dark), Cecil cherche automatiquement une variante sombre de chaque image (par ex. photo.dark.jpg à côté de photo.jpg). Si elle est trouvée, l’image est entourée d’un élément &lt;picture&gt; avec une balise &lt;source media=\"(prefers-color-scheme: dark)\"&gt; pour un basculement automatique clair\/sombre. Cela fonctionne avec formats et responsive.\nDe la même manière, lorsque mobile_suffix est défini (par ex. mobile_suffix: .mobile), Cecil cherche une variante mobile de chaque image (par ex. photo.mobile.jpg à côté de photo.jpg) et ajoute une balise &lt;source&gt; avec la media query mobile_media_query ((max-width: 767px) par défaut). Si dark_suffix est également défini, la variante sombre de l’image mobile (par ex. photo.mobile.dark.jpg) est utilisée sur mobile en mode sombre. Les sources mobiles sont placées avant les sources sombres, afin que la variante mobile soit prioritaire.\npages.body.links\nOptions de gestion des liens.\npages:\n  body:\n    links:\n      embed:\n        enabled: false     # transforme les liens en contenu embarqué si possible (`false` par défaut)\n        video: [mp4, webm] # extensions des fichiers vidéo\n        audio: [mp3]       # extensions des fichiers audio\n      external:\n        blank: false     # si `true`, ouvre le lien externe dans un nouvel onglet\n        noopener: true   # si `true`, ajoute `noopener` à l’attribut `rel`\n        noreferrer: true # si `true`, ajoute `noreferrer` à l’attribut `rel`\n        nofollow: false  # si `true`, ajoute `nofollow` à l’attribut `rel`\npages.body.excerpt\nOptions de gestion des extraits.\npages:\n  body:\n    excerpt:\n      separator: excerpt|break # chaîne utilisée comme séparateur (`excerpt|break` par défaut)\n      capture: before          # partie à capturer, `before` ou `after` le séparateur (`before` par défaut)\npages.virtual\nLes pages virtuelles sont la meilleure façon de créer des pages sans contenu (front matter uniquement).\nElles consistent en une liste de pages avec un path et quelques variables de front matter.\nExemple :\npages:\n  virtual:\n    - path: code\n      redirect: https:\/\/github.com\/ArnaudLigny\npages.default\nLes pages par défaut sont des pages créées automatiquement par Cecil (à partir de modèles intégrés) :\npages:\n  default:\n    index:\n      path: ''\n      title: Accueil\n      published: true\n    404:\n      path: 404\n      title: Page introuvable\n      layout: 404\n      uglyurl: true\n      published: true\n      excluded: true\n    robots:\n      path: robots\n      title: Robots.txt\n      layout: robots\n      output: txt\n      published: true\n      excluded: true\n      multilingual: false\n    sitemap:\n      path: sitemap\n      title: Plan de site XML\n      layout: sitemap\n      output: xml\n      changefreq: monthly\n      priority: 0.5\n      published: true\n      excluded: true\n      multilingual: false\n    xsl\/atom:\n      path: xsl\/atom\n      layout: feed\n      output: xsl\n      uglyurl: true\n      published: true\n      excluded: true\n    xsl\/rss:\n      path: xsl\/rss\n      layout: feed\n      output: xsl\n      uglyurl: true\n      published: false\n      excluded: true\nLa structure est presque identique à celle de pages.virtual, à l’exception de la clé nommée.\nChaque page peut être :\n\ndésactivée : published: false\nexclue des pages de liste : excluded: true\nexclue de la localisation : multilingual: false\n\nDepuis la version 8.68.0, vous pouvez surcharger la page robots.txt par défaut en créant une page avec le même path :\npages\/robots.md\n---\nlayout: robots\noutput: txt\n---\nUser-agent: AI-bot\nDisallow: \/\npages.generators\nLes générateurs servent à Cecil pour créer des pages supplémentaires (par ex. sitemap, flux, pagination, etc.) à partir de pages existantes, ou à partir d’autres sources comme le fichier de configuration ou des sources externes.\nVoici la liste des générateurs fournis par Cecil, dans un ordre défini :\npages:\n  generators:\n    10: 'Cecil\\Generator\\DefaultPages'\n    20: 'Cecil\\Generator\\VirtualPages'\n    30: 'Cecil\\Generator\\ExternalBody'\n    40: 'Cecil\\Generator\\Section'\n    50: 'Cecil\\Generator\\Taxonomy'\n    60: 'Cecil\\Generator\\Homepage'\n    70: 'Cecil\\Generator\\Pagination'\n    80: 'Cecil\\Generator\\Alias'\n    90: 'Cecil\\Generator\\Redirect'\nVous pouvez étendre Cecil avec un générateur de pages.\npages.subsets\nLes sous-ensembles servent à rendre une partie de la collection de pages, selon un chemin, une langue ou un format de sortie spécifique, avec la commande :\ncecil build --render-subset=&lt;name&gt;\npages:\n  subsets:\n    &lt;name&gt;:\n      path: &lt;path&gt; # chemin glob ou chaîne (ex. `blog\/*`, `blog`)\n      language: &lt;language&gt; # code de langue (ex. `en`, `fr`)\n      output: &lt;output&gt; # format de sortie (ex. `html`, `atom`)\nExemple :\npages:\n  subsets:\n    blog_en:\n      path: blog\n      language: en\n      output: html\n    search_index:\n      path: '*'\n      output: json\n",
      "content_html": "<h1>Pages</h1>\n<h2 id=\"pages-dir\">pages.dir</h2>\n<p>Répertoire source des pages (<code translate=\"no\">pages</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">pages</span></code></pre>\n<h2 id=\"pages-ext\">pages.ext</h2>\n<p>Extensions des fichiers de pages.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[md,</span> <span class=\"hljs-string\">markdown,</span> <span class=\"hljs-string\">mdown,</span> <span class=\"hljs-string\">mkdn,</span> <span class=\"hljs-string\">mkd,</span> <span class=\"hljs-string\">text,</span> <span class=\"hljs-string\">txt]</span></code></pre>\n<h2 id=\"pages-exclude\">pages.exclude</h2>\n<p>Répertoires, chemins et noms de fichiers à exclure (accepte les glob, les chaînes et les expressions régulières).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['vendor',</span> <span class=\"hljs-string\">'node_modules'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'/\\.bck$/'</span><span class=\"hljs-string\">]</span></code></pre>\n<h2 id=\"pages-prefix-separator\">pages.prefix.separator</h2>\n<p>Liste des caractères utilisés comme séparateur entre un préfixe de nom de fichier (<code translate=\"no\">date</code> ou <code translate=\"no\">weight</code>) et le slug.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">prefix:</span>\n    <span class=\"hljs-attr\">separator:</span> <span class=\"hljs-string\">['-',</span> <span class=\"hljs-string\">'_'</span><span class=\"hljs-string\">]</span></code></pre>\n<h2 id=\"pages-sortby\">pages.sortby</h2>\n<p>Méthode de tri par défaut des collections.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">sortby:</span> <span class=\"hljs-string\">date</span> <span class=\"hljs-comment\"># `date`, `updated`, `title` ou `weight`</span>\n  <span class=\"hljs-comment\"># ou</span>\n  <span class=\"hljs-attr\">sortby:</span>\n    <span class=\"hljs-attr\">variable:</span> <span class=\"hljs-string\">date</span>    <span class=\"hljs-comment\"># `date`, `updated`, `title` ou `weight`</span>\n    <span class=\"hljs-attr\">desc_title:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># tri par titre décroissant</span>\n    <span class=\"hljs-attr\">reverse:</span> <span class=\"hljs-literal\">false</span>    <span class=\"hljs-comment\"># inverse l’ordre de tri</span></code></pre>\n<h2 id=\"pages-pagination\">pages.pagination</h2>\n<p>La pagination est disponible pour les pages de liste (<em>type</em> <code translate=\"no\">homepage</code>, <code translate=\"no\">section</code> ou <code translate=\"no\">term</code>).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">pagination:</span>\n    <span class=\"hljs-attr\">max:</span> <span class=\"hljs-number\">5</span>     <span class=\"hljs-comment\"># nombre maximum d’entrées par page</span>\n    <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">page</span> <span class=\"hljs-comment\"># chemin de la page paginée</span></code></pre>\n<h3 id=\"desactiver-la-pagination\">Désactiver la pagination</h3>\n<p>La pagination peut être désactivée :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">pagination:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<h2 id=\"pages-paths\">pages.paths</h2>\n<p>Applique un <a href=\"../content/2-front-matter.fr.md#variables-predefinies\"><code translate=\"no\">path</code></a> personnalisé à toutes les pages d’une <strong><em>section</em></strong>.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">paths:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">&lt;section’s</span> <span class=\"hljs-string\">ID&gt;</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">&lt;path</span> <span class=\"hljs-string\">of</span> <span class=\"hljs-string\">pages&gt;</span></code></pre>\n<h3 id=\"emplacements-des-variables-de-chemin\">Emplacements des variables de chemin</h3>\n<ul>\n<li><code translate=\"no\">:year</code></li>\n<li><code translate=\"no\">:month</code></li>\n<li><code translate=\"no\">:day</code></li>\n<li><code translate=\"no\">:section</code></li>\n<li><code translate=\"no\">:slug</code></li>\n</ul>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">paths:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">Blog</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">:section/:year/:month/:day/:slug</span> <span class=\"hljs-comment\"># ex. : /blog/2020/12/01/my-post/</span>\n<span class=\"hljs-comment\"># localized</span>\n<span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">fr</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">Français</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">fr_FR</span>\n    <span class=\"hljs-attr\">config:</span>\n      <span class=\"hljs-attr\">pages:</span>\n        <span class=\"hljs-attr\">paths:</span>\n          <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">Blog</span>\n            <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">blogue/:year/:month/:day/:slug</span> <span class=\"hljs-comment\"># ex. : /blogue/2020/12/01/mon-billet/</span></code></pre>\n<h2 id=\"pages-frontmatter\">pages.frontmatter</h2>\n<p>Format du front matter des pages (<code translate=\"no\">yaml</code> par défaut, accepte aussi <code translate=\"no\">ini</code>, <code translate=\"no\">toml</code> et <code translate=\"no\">json</code>).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">frontmatter:</span> <span class=\"hljs-string\">yaml</span></code></pre>\n<h2 id=\"pages-body\">pages.body</h2>\n<p>Options du corps des pages.</p>\n<aside class=\"note note-info\"><p>Pour savoir comment ces options influencent votre contenu, voir la documentation <em><a href=\"../content/3-markdown.fr.md\">Contenu &gt; Markdown</a></em>.</p></aside>\n<h3 id=\"pages-body-toc\">pages.body.toc</h3>\n<p>En-têtes utilisés pour construire la table des matières (<code translate=\"no\">[h2, h3]</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">toc:</span> <span class=\"hljs-string\">[h2,</span> <span class=\"hljs-string\">h3]</span></code></pre>\n<h3 id=\"pages-body-highlight\">pages.body.highlight</h3>\n<p>Active la coloration syntaxique du code (<code translate=\"no\">true</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">highlight:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># définissez à false pour désactiver la coloration syntaxique</span></code></pre>\n<h3 id=\"pages-body-images\">pages.body.images</h3>\n<p>Options de gestion des images.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">images:</span>\n      <span class=\"hljs-attr\">formats:</span> <span class=\"hljs-string\">[]</span>       <span class=\"hljs-comment\"># ajoute des formats d’image alternatifs comme `source` (ex. `[avif, webp]`, tableau vide par défaut)</span>\n      <span class=\"hljs-attr\">resize:</span> <span class=\"hljs-number\">0</span>         <span class=\"hljs-comment\"># redimensionne toutes les images à &lt;width&gt; (en pixels, `0` pour désactiver)</span>\n      <span class=\"hljs-attr\">responsive:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># ajoute des variantes responsives à l’attribut `srcset` (`false` par défaut)</span>\n      <span class=\"hljs-attr\">lazy:</span> <span class=\"hljs-literal\">true</span>        <span class=\"hljs-comment\"># ajoute l’attribut `loading=\"lazy\"` (`true` par défaut)</span>\n      <span class=\"hljs-attr\">decoding:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># ajoute l’attribut `decoding=\"async\"` (`true` par défaut)</span>\n      <span class=\"hljs-attr\">caption:</span> <span class=\"hljs-literal\">false</span>    <span class=\"hljs-comment\"># place l’image dans un élément &lt;figure&gt; et ajoute une &lt;figcaption&gt; contenant le titre (`false` par défaut)</span>\n      <span class=\"hljs-attr\">placeholder:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># remplit l’arrière-plan de &lt;img&gt; avant le chargement ('color' ou 'lqip', vide par défaut)</span>\n      <span class=\"hljs-attr\">class:</span> <span class=\"hljs-string\">''</span>         <span class=\"hljs-comment\"># définit une classe par défaut sur chaque image (vide par défaut)</span>\n      <span class=\"hljs-attr\">dark_suffix:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># suffixe de l’image variante sombre (ex. `.dark`), désactivé par défaut</span>\n      <span class=\"hljs-attr\">mobile_suffix:</span> <span class=\"hljs-string\">''</span> <span class=\"hljs-comment\"># suffixe de l’image variante mobile (ex. `.mobile`), désactivé par défaut</span>\n      <span class=\"hljs-attr\">mobile_media_query:</span> <span class=\"hljs-string\">'(max-width: 767px)'</span> <span class=\"hljs-comment\"># media query de la `&lt;source&gt;` de la variante mobile</span>\n      <span class=\"hljs-attr\">remote:</span>           <span class=\"hljs-comment\"># traitement des images distantes (mettre à `false` pour désactiver)</span>\n        <span class=\"hljs-attr\">fallback:</span>         <span class=\"hljs-comment\"># chemin de l’image de secours, stockée dans le répertoire assets (vide par défaut)</span></code></pre>\n<aside class=\"note note-warning\"><p>Depuis la version <ins>8.41.0</ins>, l’option <code translate=\"no\">pages.body.images.resize</code> sert à redimensionner les images à une largeur précise, et non plus à activer la fonctionnalité de redimensionnement (activée systématiquement).</p></aside>\n<aside class=\"note note-important\"><p>Les options globales, comme les largeurs et tailles des images responsives, sont configurables dans la section <a href=\"6-assets.fr.md#assets-images\"><code translate=\"no\">assets.images</code></a>.</p></aside>\n<aside class=\"note note-info\"><p>Les images distantes sont téléchargées et converties en <em>Assets</em> pour être manipulées. Vous pouvez désactiver ce comportement en définissant l’option <code translate=\"no\">pages.body.images.remote.enabled</code> à <code translate=\"no\">false</code>.</p></aside>\n<aside class=\"note note-tip\"><p>Lorsque <code translate=\"no\">dark_suffix</code> est défini (par ex. <code translate=\"no\">dark_suffix: .dark</code>), Cecil cherche automatiquement une variante sombre de chaque image (par ex. <code translate=\"no\">photo.dark.jpg</code> à côté de <code translate=\"no\">photo.jpg</code>). Si elle est trouvée, l’image est entourée d’un élément <code translate=\"no\">&lt;picture&gt;</code> avec une balise <code translate=\"no\">&lt;source media=\"(prefers-color-scheme: dark)\"&gt;</code> pour un basculement automatique clair/sombre. Cela fonctionne avec <code translate=\"no\">formats</code> et <code translate=\"no\">responsive</code>.</p>\n<p>De la même manière, lorsque <code translate=\"no\">mobile_suffix</code> est défini (par ex. <code translate=\"no\">mobile_suffix: .mobile</code>), Cecil cherche une variante mobile de chaque image (par ex. <code translate=\"no\">photo.mobile.jpg</code> à côté de <code translate=\"no\">photo.jpg</code>) et ajoute une balise <code translate=\"no\">&lt;source&gt;</code> avec la media query <code translate=\"no\">mobile_media_query</code> (<code translate=\"no\">(max-width: 767px)</code> par défaut). Si <code translate=\"no\">dark_suffix</code> est également défini, la variante sombre de l’image mobile (par ex. <code translate=\"no\">photo.mobile.dark.jpg</code>) est utilisée sur mobile en mode sombre. Les sources mobiles sont placées avant les sources sombres, afin que la variante mobile soit prioritaire.</p></aside>\n<h3 id=\"pages-body-links\">pages.body.links</h3>\n<p>Options de gestion des liens.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">links:</span>\n      <span class=\"hljs-attr\">embed:</span>\n        <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># transforme les liens en contenu embarqué si possible (`false` par défaut)</span>\n        <span class=\"hljs-attr\">video:</span> <span class=\"hljs-string\">[mp4,</span> <span class=\"hljs-string\">webm]</span> <span class=\"hljs-comment\"># extensions des fichiers vidéo</span>\n        <span class=\"hljs-attr\">audio:</span> <span class=\"hljs-string\">[mp3]</span>       <span class=\"hljs-comment\"># extensions des fichiers audio</span>\n      <span class=\"hljs-attr\">external:</span>\n        <span class=\"hljs-attr\">blank:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># si `true`, ouvre le lien externe dans un nouvel onglet</span>\n        <span class=\"hljs-attr\">noopener:</span> <span class=\"hljs-literal\">true</span>   <span class=\"hljs-comment\"># si `true`, ajoute `noopener` à l’attribut `rel`</span>\n        <span class=\"hljs-attr\">noreferrer:</span> <span class=\"hljs-literal\">true</span> <span class=\"hljs-comment\"># si `true`, ajoute `noreferrer` à l’attribut `rel`</span>\n        <span class=\"hljs-attr\">nofollow:</span> <span class=\"hljs-literal\">false</span>  <span class=\"hljs-comment\"># si `true`, ajoute `nofollow` à l’attribut `rel`</span></code></pre>\n<h3 id=\"pages-body-excerpt\">pages.body.excerpt</h3>\n<p>Options de gestion des extraits.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">excerpt:</span>\n      <span class=\"hljs-attr\">separator:</span> <span class=\"hljs-string\">excerpt|break</span> <span class=\"hljs-comment\"># chaîne utilisée comme séparateur (`excerpt|break` par défaut)</span>\n      <span class=\"hljs-attr\">capture:</span> <span class=\"hljs-string\">before</span>          <span class=\"hljs-comment\"># partie à capturer, `before` ou `after` le séparateur (`before` par défaut)</span></code></pre>\n<h2 id=\"pages-virtual\">pages.virtual</h2>\n<p>Les pages virtuelles sont la meilleure façon de créer des pages sans contenu (<strong>front matter uniquement</strong>).</p>\n<p>Elles consistent en une liste de pages avec un <code translate=\"no\">path</code> et quelques variables de front matter.</p>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">virtual:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">code</span>\n      <span class=\"hljs-attr\">redirect:</span> <span class=\"hljs-string\">https://github.com/ArnaudLigny</span></code></pre>\n<h2 id=\"pages-default\">pages.default</h2>\n<p>Les pages par défaut sont des pages créées automatiquement par Cecil (à partir de modèles intégrés) :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">default:</span>\n    <span class=\"hljs-attr\">index:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">''</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Accueil</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n    <span class=\"hljs-attr\">404:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-number\">404</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Page</span> <span class=\"hljs-string\">introuvable</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-number\">404</span>\n      <span class=\"hljs-attr\">uglyurl:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n    <span class=\"hljs-attr\">robots:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">robots</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Robots.txt</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">robots</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">txt</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">multilingual:</span> <span class=\"hljs-literal\">false</span>\n    <span class=\"hljs-attr\">sitemap:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">sitemap</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Plan</span> <span class=\"hljs-string\">de</span> <span class=\"hljs-string\">site</span> <span class=\"hljs-string\">XML</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">sitemap</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">xml</span>\n      <span class=\"hljs-attr\">changefreq:</span> <span class=\"hljs-string\">monthly</span>\n      <span class=\"hljs-attr\">priority:</span> <span class=\"hljs-number\">0.5</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">multilingual:</span> <span class=\"hljs-literal\">false</span>\n    <span class=\"hljs-attr\">xsl/atom:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">xsl/atom</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">feed</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">xsl</span>\n      <span class=\"hljs-attr\">uglyurl:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n    <span class=\"hljs-attr\">xsl/rss:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">xsl/rss</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">feed</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">xsl</span>\n      <span class=\"hljs-attr\">uglyurl:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">false</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<aside class=\"note note-info\"><p>La structure est presque identique à celle de <a href=\"#pages-virtual\"><code translate=\"no\">pages.virtual</code></a>, à l’exception de la clé nommée.</p></aside>\n<p>Chaque page peut être :</p>\n<ol>\n<li>désactivée : <code translate=\"no\">published: false</code></li>\n<li>exclue des pages de liste : <code translate=\"no\">excluded: true</code></li>\n<li>exclue de la localisation : <code translate=\"no\">multilingual: false</code></li>\n</ol>\n<aside class=\"note note-tip\"><p>Depuis la version 8.68.0, vous pouvez surcharger la page <code translate=\"no\">robots.txt</code> par défaut en créant une page avec le même <code translate=\"no\">path</code> :</p>\n<p><em>pages/robots.md</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">robots</span>\n<span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">txt</span>\n<span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">User-agent:</span> <span class=\"hljs-string\">AI-bot</span>\n<span class=\"hljs-attr\">Disallow:</span> <span class=\"hljs-string\">/</span></code></pre></aside>\n<h2 id=\"pages-generators\">pages.generators</h2>\n<p>Les générateurs servent à Cecil pour créer des pages supplémentaires (par ex. sitemap, flux, pagination, etc.) à partir de pages existantes, ou à partir d’autres sources comme le fichier de configuration ou des sources externes.</p>\n<p>Voici la liste des générateurs fournis par Cecil, dans un ordre défini :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">generators:</span>\n    <span class=\"hljs-attr\">10:</span> <span class=\"hljs-string\">'Cecil\\Generator\\DefaultPages'</span>\n    <span class=\"hljs-attr\">20:</span> <span class=\"hljs-string\">'Cecil\\Generator\\VirtualPages'</span>\n    <span class=\"hljs-attr\">30:</span> <span class=\"hljs-string\">'Cecil\\Generator\\ExternalBody'</span>\n    <span class=\"hljs-attr\">40:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Section'</span>\n    <span class=\"hljs-attr\">50:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Taxonomy'</span>\n    <span class=\"hljs-attr\">60:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Homepage'</span>\n    <span class=\"hljs-attr\">70:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Pagination'</span>\n    <span class=\"hljs-attr\">80:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Alias'</span>\n    <span class=\"hljs-attr\">90:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Redirect'</span></code></pre>\n<aside class=\"note note-tip\"><p>Vous pouvez étendre Cecil avec un <a href=\"../developers/1-extend.fr.md#generateur-de-pages\">générateur de pages</a>.</p></aside>\n<h2 id=\"pages-subsets\">pages.subsets</h2>\n<p>Les sous-ensembles servent à rendre une partie de la collection de pages, selon un chemin, une langue ou un format de sortie spécifique, avec la commande :</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">cecil build --render-subset=&lt;name&gt;</code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">subsets:</span>\n    <span class=\"hljs-string\">&lt;name&gt;:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">&lt;path&gt;</span> <span class=\"hljs-comment\"># chemin glob ou chaîne (ex. `blog/*`, `blog`)</span>\n      <span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">&lt;language&gt;</span> <span class=\"hljs-comment\"># code de langue (ex. `en`, `fr`)</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">&lt;output&gt;</span> <span class=\"hljs-comment\"># format de sortie (ex. `html`, `atom`)</span></code></pre>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">subsets:</span>\n    <span class=\"hljs-attr\">blog_en:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">blog</span>\n      <span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">en</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">html</span>\n    <span class=\"hljs-attr\">search_index:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">'*'</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">json</span></code></pre>\n<hr>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/donnees-et-statiques/",
      "url": "https://cecil.app/fr/documentation/configuration/donnees-et-statiques/",
      "title": "Données et fichiers statiques",
      "summary": "Options des fichiers de données et des fichiers statiques.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Données et fichiers statiques\nDonnées\nEmplacement des fichiers de données et types d’extensions pris en charge.\nFormats pris en charge : YAML, JSON, XML et CSV.\ndata.dir\nRépertoire source des données (data par défaut).\ndata:\n  dir: data\ndata.ext\nTableau des extensions de fichiers.\ndata:\n  ext: [yaml, yml, json, xml, csv]\ndata.load\nActive la collection site.data (true par défaut).\ndata:\n  load: true\n\nFichiers statiques\nGestion des fichiers statiques copiés (PDF, polices, etc.).\nVous devez placer les fichiers d’assets, utilisés par asset(), dans le répertoire assets afin d’éviter des copies de fichiers inutiles.\nstatic.dir\nRépertoire source des fichiers statiques (static par défaut).\nstatic:\n  dir: static\nstatic.target\nRépertoire vers lequel les fichiers statiques sont copiés (root par défaut).\nstatic:\n  target: ''\nstatic.exclude\nListe des fichiers exclus. Accepte les glob, les chaînes et les expressions régulières.\nstatic:\n  exclude: ['sass', 'scss', '*.scss', 'package*.json', 'node_modules']\nSi vous utilisez Bootstrap Icons, vous pouvez exclure node_modules sauf node_modules\/bootstrap-icons avec une expression régulière :\nexclude: ['sass', 'scss', '*.scss', 'package*.json', '#node_modules\/(?!bootstrap-icons)#']\nstatic.load\nActive la collection site.static (false par défaut).\nstatic:\n  load: false\nstatic.mounts\nPermet de copier des fichiers ou répertoires spécifiques vers une destination spécifique.\nstatic:\n  mounts: []\nexemple de static\nstatic:\n  dir: docs\n  target: docs\n  exclude: ['sass', '*.scss', '\/\\.bck$\/']\n  load: true\n  mounts:\n    - source\/path\/file.ext: dest\/path\/file.ext\n    - node_modules\/bootstrap-icons\/font\/fonts: fonts",
      "content_html": "<h1>Données et fichiers statiques</h1>\n<h2 id=\"donnees\">Données</h2>\n<p>Emplacement des fichiers de données et types d’extensions pris en charge.</p>\n<p>Formats pris en charge : YAML, JSON, XML et CSV.</p>\n<h3 id=\"data-dir\">data.dir</h3>\n<p>Répertoire source des données (<code translate=\"no\">data</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">data:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">data</span></code></pre>\n<h3 id=\"data-ext\">data.ext</h3>\n<p>Tableau des extensions de fichiers.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">data:</span>\n  <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[yaml,</span> <span class=\"hljs-string\">yml,</span> <span class=\"hljs-string\">json,</span> <span class=\"hljs-string\">xml,</span> <span class=\"hljs-string\">csv]</span></code></pre>\n<h3 id=\"data-load\">data.load</h3>\n<p>Active la collection <code translate=\"no\">site.data</code> (<code translate=\"no\">true</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">data:</span>\n  <span class=\"hljs-attr\">load:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<hr>\n<h2 id=\"fichiers-statiques\">Fichiers statiques</h2>\n<p>Gestion des fichiers statiques copiés (PDF, polices, etc.).</p>\n<aside class=\"note note-important\"><p>Vous devez placer les fichiers d’assets, utilisés par <a href=\"../assets/index.fr.md#asset\"><code translate=\"no\">asset()</code></a>, dans le <a href=\"6-assets.fr.md#assets-dir\"><code translate=\"no\">répertoire assets</code></a> afin d’éviter des copies de fichiers inutiles.</p></aside>\n<h3 id=\"static-dir\">static.dir</h3>\n<p>Répertoire source des fichiers statiques (<code translate=\"no\">static</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">static</span></code></pre>\n<h3 id=\"static-target\">static.target</h3>\n<p>Répertoire vers lequel les fichiers statiques sont copiés (<code translate=\"no\">root</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">target:</span> <span class=\"hljs-string\">''</span></code></pre>\n<h3 id=\"static-exclude\">static.exclude</h3>\n<p>Liste des fichiers exclus. Accepte les glob, les chaînes et les expressions régulières.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['sass',</span> <span class=\"hljs-string\">'scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'package*.json'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'node_modules'</span><span class=\"hljs-string\">]</span></code></pre>\n<aside class=\"note note-tip\"><p>Si vous utilisez <a href=\"https://icons.getbootstrap.com\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap Icons</a>, vous pouvez exclure <code translate=\"no\">node_modules</code> sauf <code translate=\"no\">node_modules/bootstrap-icons</code> avec une expression régulière :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['sass',</span> <span class=\"hljs-string\">'scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'package*.json'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'#node_modules/(?!bootstrap-icons)#'</span><span class=\"hljs-string\">]</span></code></pre></aside>\n<h3 id=\"static-load\">static.load</h3>\n<p>Active la collection <code translate=\"no\">site.static</code> (<code translate=\"no\">false</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">load:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<h3 id=\"static-mounts\">static.mounts</h3>\n<p>Permet de copier des fichiers ou répertoires spécifiques vers une destination spécifique.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">mounts:</span> <span class=\"hljs-string\">[]</span></code></pre>\n<h3 id=\"exemple-de-static\">exemple de static</h3>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">docs</span>\n  <span class=\"hljs-attr\">target:</span> <span class=\"hljs-string\">docs</span>\n  <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['sass',</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'/\\.bck$/'</span><span class=\"hljs-string\">]</span>\n  <span class=\"hljs-attr\">load:</span> <span class=\"hljs-literal\">true</span>\n  <span class=\"hljs-attr\">mounts:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">source/path/file.ext:</span> <span class=\"hljs-string\">dest/path/file.ext</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">node_modules/bootstrap-icons/font/fonts:</span> <span class=\"hljs-string\">fonts</span></code></pre>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/assets/",
      "url": "https://cecil.app/fr/documentation/configuration/assets/",
      "title": "Assets",
      "summary": "Dossier des assets, compilation, minification, images et CDN.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Assets\nGestion des ressources (images, fichiers CSS et JS).\nassets.dir\nRépertoire source des ressources (assets par défaut).\nassets:\n  dir: assets\nassets.target\nRépertoire où les fichiers de ressources distants et redimensionnés sont enregistrés (root par défaut).\nassets:\n  target: ''\nassets.fingerprint\nActive le fingerprinting (cache busting) pour les fichiers de ressources (true par défaut).\nassets:\n  fingerprint: true\nassets.compile\nActive la compilation des fichiers Sass (true par défaut). Voir la documentation de scssphp pour les détails des options.\nassets:\n  compile:\n    style: expanded      # style de compilation (`expanded` ou `compressed`, `expanded` par défaut)\n    import: [sass, scss] # liste des chemins importés (`[sass, scss, node_modules]` par défaut)\n    sourcemap: false     # active les sourcemaps en mode debug (`false` par défaut)\n    variables: []        # liste de variables préconfigurées (vide par défaut)\nsourcemap sert à déboguer la compilation SCSS (mode debug requis).\nassets.minify\nActive la minification CSS et JS (true par défaut).\nassets:\n  minify: true\nassets.images\nGestion des images.\nassets:\n  images:\n    optimize: false # active l’optimisation d’images avec JpegOptim, Optipng, Pngquant 2, SVGO 1, Gifsicle, cwebp, avifenc (`false` par défaut)\n    quality: 75     # qualité d’image pour `optimize` et `resize` (`75` par défaut)\n    responsive:\n      widths: [480, 640, 768, 1024, 1366, 1600, 1920] # largeurs d’image pour l’attribut `srcset`\n      sizes:\n        default: '100vw' # attribut `sizes` par défaut (`100vw` par défaut)\nassets.images.cdn\nL’URL des ressources image peut être facilement remplacée par une url de CDN fournie.\nassets:\n  images:\n    cdn:\n      enabled: false  # active Image CDN (`false` par défaut)\n      canonical: true # `image_url` est canonique (au lieu d’un chemin relatif) (`true` par défaut)\n      remote: true    # prend aussi en charge les images non locales (`true` par défaut)\n      account: 'xxxx' # compte du fournisseur\n      url: 'https:\/\/provider.tld\/%account%\/%image_url%?w=%width%&amp;q=%quality%&amp;format=%format%'\nurl est un modèle qui contient des variables :\n\n%account% remplacé par l’option assets.images.cdn.account\n%image_url% remplacé par l’URL canonique de l’image ou par path\n%width% remplacé par la largeur de l’image\n%quality% remplacé par l’option assets.images.quality\n%format% remplacé par le format de l’image\n\nVoir les fournisseurs CDN.\nassets.remote.useragent\nUser agent utilisé pour télécharger les ressources distantes.\nassets:\n  remote:\n    useragent:\n      default: &lt;string&gt; # user agent par défaut\n      useragent1: &lt;string&gt;\n      useragent2: &lt;string&gt;",
      "content_html": "<h1>Assets</h1>\n<p>Gestion des ressources (images, fichiers CSS et JS).</p>\n<h2 id=\"assets-dir\">assets.dir</h2>\n<p>Répertoire source des ressources (<code translate=\"no\">assets</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">assets</span></code></pre>\n<h2 id=\"assets-target\">assets.target</h2>\n<p>Répertoire où les fichiers de ressources distants et redimensionnés sont enregistrés (<code translate=\"no\">root</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">target:</span> <span class=\"hljs-string\">''</span></code></pre>\n<h2 id=\"assets-fingerprint\">assets.fingerprint</h2>\n<p>Active le fingerprinting (cache busting) pour les fichiers de ressources (<code translate=\"no\">true</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">fingerprint:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<h2 id=\"assets-compile\">assets.compile</h2>\n<p>Active la compilation des fichiers <a href=\"https://sass-lang.com\" target=\"_blank\" rel=\"noopener noreferrer\">Sass</a> (<code translate=\"no\">true</code> par défaut). Voir la <a href=\"https://scssphp.github.io/scssphp/docs/#output-formatting\" target=\"_blank\" rel=\"noopener noreferrer\">documentation de scssphp</a> pour les détails des options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">compile:</span>\n    <span class=\"hljs-attr\">style:</span> <span class=\"hljs-string\">expanded</span>      <span class=\"hljs-comment\"># style de compilation (`expanded` ou `compressed`, `expanded` par défaut)</span>\n    <span class=\"hljs-attr\">import:</span> <span class=\"hljs-string\">[sass,</span> <span class=\"hljs-string\">scss]</span> <span class=\"hljs-comment\"># liste des chemins importés (`[sass, scss, node_modules]` par défaut)</span>\n    <span class=\"hljs-attr\">sourcemap:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># active les sourcemaps en mode debug (`false` par défaut)</span>\n    <span class=\"hljs-attr\">variables:</span> <span class=\"hljs-string\">[]</span>        <span class=\"hljs-comment\"># liste de variables préconfigurées (vide par défaut)</span></code></pre>\n<aside class=\"note note-info\"><p><code translate=\"no\">sourcemap</code> sert à déboguer la compilation SCSS (<a href=\"1-site.fr.md#debug\">mode debug</a> requis).</p></aside>\n<h2 id=\"assets-minify\">assets.minify</h2>\n<p>Active la minification CSS et JS (<code translate=\"no\">true</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">minify:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<h2 id=\"assets-images\">assets.images</h2>\n<p>Gestion des images.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">optimize:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># active l’optimisation d’images avec JpegOptim, Optipng, Pngquant 2, SVGO 1, Gifsicle, cwebp, avifenc (`false` par défaut)</span>\n    <span class=\"hljs-attr\">quality:</span> <span class=\"hljs-number\">75</span>     <span class=\"hljs-comment\"># qualité d’image pour `optimize` et `resize` (`75` par défaut)</span>\n    <span class=\"hljs-attr\">responsive:</span>\n      <span class=\"hljs-attr\">widths:</span> <span class=\"hljs-string\">[480,</span> <span class=\"hljs-number\">640</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">768</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1024</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1366</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1600</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1920</span><span class=\"hljs-string\">]</span> <span class=\"hljs-comment\"># largeurs d’image pour l’attribut `srcset`</span>\n      <span class=\"hljs-attr\">sizes:</span>\n        <span class=\"hljs-attr\">default:</span> <span class=\"hljs-string\">'100vw'</span> <span class=\"hljs-comment\"># attribut `sizes` par défaut (`100vw` par défaut)</span></code></pre>\n<h2 id=\"assets-images-cdn\">assets.images.cdn</h2>\n<p>L’URL des ressources image peut être facilement remplacée par une <code translate=\"no\">url</code> de CDN fournie.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">cdn:</span>\n      <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span>  <span class=\"hljs-comment\"># active Image CDN (`false` par défaut)</span>\n      <span class=\"hljs-attr\">canonical:</span> <span class=\"hljs-literal\">true</span> <span class=\"hljs-comment\"># `image_url` est canonique (au lieu d’un chemin relatif) (`true` par défaut)</span>\n      <span class=\"hljs-attr\">remote:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># prend aussi en charge les images non locales (`true` par défaut)</span>\n      <span class=\"hljs-attr\">account:</span> <span class=\"hljs-string\">'xxxx'</span> <span class=\"hljs-comment\"># compte du fournisseur</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">'https://provider.tld/%account%/%image_url%?w=%width%&amp;q=%quality%&amp;format=%format%'</span></code></pre>\n<p><code translate=\"no\">url</code> est un modèle qui contient des variables :</p>\n<ul>\n<li><code translate=\"no\">%account%</code> remplacé par l’option <code translate=\"no\">assets.images.cdn.account</code></li>\n<li><code translate=\"no\">%image_url%</code> remplacé par l’URL canonique de l’image ou par <code translate=\"no\">path</code></li>\n<li><code translate=\"no\">%width%</code> remplacé par la largeur de l’image</li>\n<li><code translate=\"no\">%quality%</code> remplacé par l’option <code translate=\"no\">assets.images.quality</code></li>\n<li><code translate=\"no\">%format%</code> remplacé par le format de l’image</li>\n</ul>\n<p>Voir les <a href=\"../assets/3-cdn-providers.fr.md\"><strong>fournisseurs CDN</strong></a>.</p>\n<h2 id=\"assets-remote-useragent\">assets.remote.useragent</h2>\n<p>User agent utilisé pour télécharger les ressources distantes.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">remote:</span>\n    <span class=\"hljs-attr\">useragent:</span>\n      <span class=\"hljs-attr\">default:</span> <span class=\"hljs-string\">&lt;string&gt;</span> <span class=\"hljs-comment\"># user agent par défaut</span>\n      <span class=\"hljs-attr\">useragent1:</span> <span class=\"hljs-string\">&lt;string&gt;</span>\n      <span class=\"hljs-attr\">useragent2:</span> <span class=\"hljs-string\">&lt;string&gt;</span></code></pre>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/layouts/",
      "url": "https://cecil.app/fr/documentation/configuration/layouts/",
      "title": "Layouts",
      "summary": "Dossier des templates, échappement, images, traductions et composants.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Layouts\nOptions des templates.\nlayouts.dir\nRépertoire source des templates (layouts par défaut).\nlayouts:\n  dir: layouts\nlayouts.autoescape\nSurcharge l’option Twig autoescape (false par défaut).\nSi la valeur est null, Cecil applique une stratégie basée sur l’extension du nom de template :\n\n*.js.twig -&gt; js\n*.css.twig -&gt; css\n*.html.twig et *.twig -&gt; html\ntoute autre extension -&gt; false\n\nlayouts:\n  autoescape: false  # désactive l’échappement automatique (par défaut)\n  #autoescape: null  # utilise la stratégie automatique Cecil selon l’extension du template\n  #autoescape: html\n  #autoescape: js\nlayouts.images\nOptions de gestion des images.\nlayouts:\n  images:\n    formats: []       # utilisé par la fonction `html` : ajoute des formats d’image alternatifs comme `source` (ex. `[avif, webp]`, tableau vide par défaut)\n    responsive: false # utilisé par la fonction `html` : ajoute des images responsives ('width' ou 'density', `false` par défaut)\n    placeholder: ''   # utilisé par la fonction `html` : remplit l’arrière-plan de l’image avant son chargement (`color` ou `lqip`, désactivé par défaut)\n    dark_suffix: ''   # suffixe de l’image variante sombre (ex. `.dark`), désactivé par défaut\n    mobile_suffix: '' # suffixe de l’image variante mobile (ex. `.mobile`), désactivé par défaut\n    mobile_media_query: '(max-width: 767px)' # media query de la `&lt;source&gt;` de la variante mobile\nlayouts.translations\nOptions de gestion des traductions.\nlayouts:\n  translations:\n    dir: translations # répertoire source des traductions (`translations` par défaut)\n    formats:          # formats de traduction pris en charge\n      yaml:\n        loader: Symfony\\Component\\Translation\\Loader\\YamlFileLoader\n        ext: [yml, yaml]\n      mo:\n        loader: Symfony\\Component\\Translation\\Loader\\MoFileLoader\n        ext: [mo]\nChaque format de traduction définit :\n\nloader : classe du chargeur de traduction Symfony\next : une ou plusieurs extensions de fichier associées à ce format\n\nlayouts.components\nOptions des composants de template.\nlayouts:\n  components:\n    dir: components # répertoire source des composants (`components` par défaut)\n    ext: twig       # extension des fichiers de composants (`twig` par défaut)\nlayouts.sections\nAssocie une section aux layouts d’une autre section : le nom associé est utilisé à la place de &lt;section&gt; par les règles de recherche de la section et de ses pages.\nlayouts:\n  sections:\n    news: blog # la section « news » est rendue avec `blog\/list.html.twig` et ses pages avec `blog\/page.html.twig`\nUne sous-section se replie déjà sur les layouts de ses sections parentes : aucune association n’est nécessaire pour cela.\n",
      "content_html": "<h1>Layouts</h1>\n<p>Options des templates.</p>\n<h2 id=\"layouts-dir\">layouts.dir</h2>\n<p>Répertoire source des templates (<code translate=\"no\">layouts</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">layouts</span></code></pre>\n<h2 id=\"layouts-autoescape\">layouts.autoescape</h2>\n<p>Surcharge l’option Twig <code translate=\"no\">autoescape</code> (<code translate=\"no\">false</code> par défaut).</p>\n<p>Si la valeur est <code translate=\"no\">null</code>, Cecil applique une stratégie basée sur l’extension du nom de template :</p>\n<ul>\n<li><code translate=\"no\">*.js.twig</code> -&gt; <code translate=\"no\">js</code></li>\n<li><code translate=\"no\">*.css.twig</code> -&gt; <code translate=\"no\">css</code></li>\n<li><code translate=\"no\">*.html.twig</code> et <code translate=\"no\">*.twig</code> -&gt; <code translate=\"no\">html</code></li>\n<li>toute autre extension -&gt; <code translate=\"no\">false</code></li>\n</ul>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">autoescape:</span> <span class=\"hljs-literal\">false</span>  <span class=\"hljs-comment\"># désactive l’échappement automatique (par défaut)</span>\n  <span class=\"hljs-comment\">#autoescape: null  # utilise la stratégie automatique Cecil selon l’extension du template</span>\n  <span class=\"hljs-comment\">#autoescape: html</span>\n  <span class=\"hljs-comment\">#autoescape: js</span></code></pre>\n<h2 id=\"layouts-images\">layouts.images</h2>\n<p>Options de gestion des images.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">formats:</span> <span class=\"hljs-string\">[]</span>       <span class=\"hljs-comment\"># utilisé par la fonction `html` : ajoute des formats d’image alternatifs comme `source` (ex. `[avif, webp]`, tableau vide par défaut)</span>\n    <span class=\"hljs-attr\">responsive:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># utilisé par la fonction `html` : ajoute des images responsives ('width' ou 'density', `false` par défaut)</span>\n    <span class=\"hljs-attr\">placeholder:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># utilisé par la fonction `html` : remplit l’arrière-plan de l’image avant son chargement (`color` ou `lqip`, désactivé par défaut)</span>\n    <span class=\"hljs-attr\">dark_suffix:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># suffixe de l’image variante sombre (ex. `.dark`), désactivé par défaut</span>\n    <span class=\"hljs-attr\">mobile_suffix:</span> <span class=\"hljs-string\">''</span> <span class=\"hljs-comment\"># suffixe de l’image variante mobile (ex. `.mobile`), désactivé par défaut</span>\n    <span class=\"hljs-attr\">mobile_media_query:</span> <span class=\"hljs-string\">'(max-width: 767px)'</span> <span class=\"hljs-comment\"># media query de la `&lt;source&gt;` de la variante mobile</span></code></pre>\n<h2 id=\"layouts-translations\">layouts.translations</h2>\n<p>Options de gestion des traductions.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">translations:</span>\n    <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">translations</span> <span class=\"hljs-comment\"># répertoire source des traductions (`translations` par défaut)</span>\n    <span class=\"hljs-attr\">formats:</span>          <span class=\"hljs-comment\"># formats de traduction pris en charge</span>\n      <span class=\"hljs-attr\">yaml:</span>\n        <span class=\"hljs-attr\">loader:</span> <span class=\"hljs-string\">Symfony\\Component\\Translation\\Loader\\YamlFileLoader</span>\n        <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[yml,</span> <span class=\"hljs-string\">yaml]</span>\n      <span class=\"hljs-attr\">mo:</span>\n        <span class=\"hljs-attr\">loader:</span> <span class=\"hljs-string\">Symfony\\Component\\Translation\\Loader\\MoFileLoader</span>\n        <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[mo]</span></code></pre>\n<p>Chaque format de traduction définit :</p>\n<ul>\n<li><code translate=\"no\">loader</code> : classe du chargeur de traduction Symfony</li>\n<li><code translate=\"no\">ext</code> : une ou plusieurs extensions de fichier associées à ce format</li>\n</ul>\n<h2 id=\"layouts-components\">layouts.components</h2>\n<p>Options des <a href=\"../templates/4-components.fr.md\">composants de template</a>.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">components:</span>\n    <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">components</span> <span class=\"hljs-comment\"># répertoire source des composants (`components` par défaut)</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">twig</span>       <span class=\"hljs-comment\"># extension des fichiers de composants (`twig` par défaut)</span></code></pre>\n<h2 id=\"layouts-sections\">layouts.sections</h2>\n<p>Associe une section aux layouts d’une autre section : le nom associé est utilisé à la place de <code translate=\"no\">&lt;section&gt;</code> par les <a href=\"../templates/1-lookup-rules.fr.md#regles-de-recherche\">règles de recherche</a> de la section et de ses pages.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">sections:</span>\n    <span class=\"hljs-attr\">news:</span> <span class=\"hljs-string\">blog</span> <span class=\"hljs-comment\"># la section « news » est rendue avec `blog/list.html.twig` et ses pages avec `blog/page.html.twig`</span></code></pre>\n<aside class=\"note note-tip\"><p>Une <a href=\"../content/1-pages.fr.md#sous-section\">sous-section</a> se replie déjà sur les layouts de ses sections parentes : aucune association n’est nécessaire pour cela.</p></aside>\n<hr>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/sortie/",
      "url": "https://cecil.app/fr/documentation/configuration/sortie/",
      "title": "Sortie",
      "summary": "Dossier de sortie, formats et post-traitement.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Sortie\nDéfinit où et dans quel format les pages sont rendues.\noutput.dir\nRépertoire où les fichiers de pages rendues sont enregistrés (_site par défaut).\noutput:\n  dir: _site\noutput.formats\nListe de définition des formats de sortie, utilisés pour rendre les pages (par ex. HTML, Atom, RSS, JSON, XML, etc.).\noutput:\n  formats:\n    - name: &lt;name&gt;            # nom du format, par ex. `html` (requis)\n      mediatype: &lt;media type&gt; # type MIME, ex. `text\/html` (facultatif)\n      subpath: &lt;sub path&gt;     # sous-chemin, ex. `amp` dans `path\/amp\/index.html` (facultatif)\n      filename: &lt;file name&gt;   # nom du fichier, ex. `index` dans `path\/index.html` (facultatif)\n      extension: &lt;extension&gt;  # extension du fichier, ex. `html` dans `path\/index.html` (requis)\n      exclude: [&lt;variable&gt;]   # n’applique pas ce format aux pages identifiées par les variables listées, ex. `[redirect, paginated]` (facultatif)\nCes formats sont utilisés dans la configuration output.pagetypeformats et dans la variable de page output.\nFormats par défaut\nCecil fournit quelques formats par défaut, qui peuvent être surchargés dans le fichier de configuration : html (par défaut), atom, rss, json, xml, txt, amp, js, webmanifest, xsl, jsonfeed, iframe, oembed.\noutput.pagetypeformats\nIl n’est pas nécessaire de définir la variable output pour chaque page, car Cecil applique automatiquement les formats définis pour chaque type de page (homepage, page, section, vocabulary et term).\noutput:\n  pagetypeformats:\n    page: [&lt;format&gt;]\n    homepage: [&lt;format&gt;]\n    section: [&lt;format&gt;]\n    vocabulary: [&lt;format&gt;]\n    term: [&lt;format&gt;]\nPlusieurs formats peuvent être définis pour un même type de page. Par exemple, le type de page section peut être rendu automatiquement en HTML et Atom :\noutput:\n  pagetypeformats:\n    section: [html, atom]\nPour rendre une page, Cecil recherche un template nommé &lt;layout&gt;.&lt;format&gt;.twig (ex. page.html.twig).\nexemple de output\noutput:\n  dir: _site\n  formats:\n    - name: html\n      mediatype: text\/html\n      filename: index\n      extension: html\n    - name: atom\n      mediatype: application\/xml\n      filename: atom\n      extension: xml\n      exclude: [redirect, paginated]\n  pagetypeformats:\n    page: [html]\n    homepage: [html, atom]\n    section: [html, atom]\n    vocabulary: [html]\n    term: [html, atom]\nPost-process\nVous pouvez étendre les capacités de Cecil avec un post-processeur de sortie pour modifier les fichiers de sortie après leur génération.\n",
      "content_html": "<h1>Sortie</h1>\n<p>Définit où et dans quel format les pages sont rendues.</p>\n<h2 id=\"output-dir\">output.dir</h2>\n<p>Répertoire où les fichiers de pages rendues sont enregistrés (<code translate=\"no\">_site</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">_site</span></code></pre>\n<h2 id=\"output-formats\">output.formats</h2>\n<p>Liste de définition des formats de sortie, utilisés pour rendre les pages (par ex. HTML, Atom, RSS, JSON, XML, etc.).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">formats:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">&lt;name&gt;</span>            <span class=\"hljs-comment\"># nom du format, par ex. `html` (requis)</span>\n      <span class=\"hljs-attr\">mediatype:</span> <span class=\"hljs-string\">&lt;media</span> <span class=\"hljs-string\">type&gt;</span> <span class=\"hljs-comment\"># type MIME, ex. `text/html` (facultatif)</span>\n      <span class=\"hljs-attr\">subpath:</span> <span class=\"hljs-string\">&lt;sub</span> <span class=\"hljs-string\">path&gt;</span>     <span class=\"hljs-comment\"># sous-chemin, ex. `amp` dans `path/amp/index.html` (facultatif)</span>\n      <span class=\"hljs-attr\">filename:</span> <span class=\"hljs-string\">&lt;file</span> <span class=\"hljs-string\">name&gt;</span>   <span class=\"hljs-comment\"># nom du fichier, ex. `index` dans `path/index.html` (facultatif)</span>\n      <span class=\"hljs-attr\">extension:</span> <span class=\"hljs-string\">&lt;extension&gt;</span>  <span class=\"hljs-comment\"># extension du fichier, ex. `html` dans `path/index.html` (requis)</span>\n      <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">[&lt;variable&gt;]</span>   <span class=\"hljs-comment\"># n’applique pas ce format aux pages identifiées par les variables listées, ex. `[redirect, paginated]` (facultatif)</span></code></pre>\n<p>Ces formats sont utilisés dans la configuration <a href=\"#output-pagetypeformats\"><code translate=\"no\">output.pagetypeformats</code></a> et dans la variable de page <a href=\"../content/2-front-matter.fr.md#output\"><code translate=\"no\">output</code></a>.</p>\n<h3 id=\"formats-par-defaut\">Formats par défaut</h3>\n<p>Cecil fournit quelques <a href=\"https://github.com/Cecilapp/Cecil/blob/main/config/base.php#L81-L162\" target=\"_blank\" rel=\"noopener noreferrer\">formats par défaut</a>, qui peuvent être surchargés dans le fichier de configuration : <code translate=\"no\">html</code> (par défaut), <code translate=\"no\">atom</code>, <code translate=\"no\">rss</code>, <code translate=\"no\">json</code>, <code translate=\"no\">xml</code>, <code translate=\"no\">txt</code>, <code translate=\"no\">amp</code>, <code translate=\"no\">js</code>, <code translate=\"no\">webmanifest</code>, <code translate=\"no\">xsl</code>, <code translate=\"no\">jsonfeed</code>, <code translate=\"no\">iframe</code>, <code translate=\"no\">oembed</code>.</p>\n<h2 id=\"output-pagetypeformats\">output.pagetypeformats</h2>\n<p>Il n’est pas nécessaire de définir la variable <code translate=\"no\">output</code> pour chaque page, car Cecil applique automatiquement les formats définis pour chaque type de page (<code translate=\"no\">homepage</code>, <code translate=\"no\">page</code>, <code translate=\"no\">section</code>, <code translate=\"no\">vocabulary</code> et <code translate=\"no\">term</code>).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">pagetypeformats:</span>\n    <span class=\"hljs-attr\">page:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">homepage:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">vocabulary:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">term:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span></code></pre>\n<p>Plusieurs formats peuvent être définis pour un même type de page. Par exemple, le type de page <code translate=\"no\">section</code> peut être rendu automatiquement en HTML et Atom :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">pagetypeformats:</span>\n    <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span></code></pre>\n<aside class=\"note note-info\"><p>Pour rendre une page, <a href=\"../templates/1-lookup-rules.fr.md#regles-de-recherche\">Cecil recherche un template</a> nommé <code translate=\"no\">&lt;layout&gt;.&lt;format&gt;.twig</code> (ex. <code translate=\"no\">page.html.twig</code>).</p></aside>\n<h2 id=\"exemple-de-output\">exemple de output</h2>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">_site</span>\n  <span class=\"hljs-attr\">formats:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">html</span>\n      <span class=\"hljs-attr\">mediatype:</span> <span class=\"hljs-string\">text/html</span>\n      <span class=\"hljs-attr\">filename:</span> <span class=\"hljs-string\">index</span>\n      <span class=\"hljs-attr\">extension:</span> <span class=\"hljs-string\">html</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">atom</span>\n      <span class=\"hljs-attr\">mediatype:</span> <span class=\"hljs-string\">application/xml</span>\n      <span class=\"hljs-attr\">filename:</span> <span class=\"hljs-string\">atom</span>\n      <span class=\"hljs-attr\">extension:</span> <span class=\"hljs-string\">xml</span>\n      <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">[redirect,</span> <span class=\"hljs-string\">paginated]</span>\n  <span class=\"hljs-attr\">pagetypeformats:</span>\n    <span class=\"hljs-attr\">page:</span> <span class=\"hljs-string\">[html]</span>\n    <span class=\"hljs-attr\">homepage:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span>\n    <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span>\n    <span class=\"hljs-attr\">vocabulary:</span> <span class=\"hljs-string\">[html]</span>\n    <span class=\"hljs-attr\">term:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span></code></pre>\n<h2 id=\"post-process\">Post-process</h2>\n<p>Vous pouvez étendre les capacités de Cecil avec un <a href=\"../developers/1-extend.fr.md#post-processeur-de-rendu\">post-processeur de sortie</a> pour modifier les fichiers de sortie après leur génération.</p>\n<hr>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/cache/",
      "url": "https://cecil.app/fr/documentation/configuration/cache/",
      "title": "Cache",
      "summary": "Cache des assets, des templates et des traductions.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Cache\nOptions de cache.\ncache.enabled\nLe cache est activé par défaut (true), mais vous pouvez le désactiver avec :\ncache:\n  enabled: false\nIl n’est pas recommandé de désactiver le cache pour des raisons de performance.\ncache.dir\nRépertoire où les fichiers de cache sont stockés (.cache par défaut).\ncache:\n  dir: '.cache'\nLe répertoire de cache est relatif au répertoire du site, mais vous pouvez utiliser un chemin absolu : cela peut être utile pour stocker le cache dans un répertoire partagé.\ncache.assets\nOptions du cache des ressources.\ncache.assets.ttl\nTemps de vie du cache des ressources en secondes (null par défaut = aucune expiration).\ncache:\n  assets:\n    ttl: ~\ncache.assets.remote.ttl\nTemps de vie du cache des ressources distantes en secondes (7 jours par défaut).\ncache:\n  assets:\n    remotes:\n      ttl: 604800 # 7 jours\ncache.templates\nDésactive le cache des templates avec false (true par défaut).\ncache:\n  templates: true\nVoir la documentation du cache des templates pour plus de détails.\ncache.translations\nDésactive le cache des traductions avec false (true par défaut).\ncache:\n  translations: true\n",
      "content_html": "<h1>Cache</h1>\n<p>Options de cache.</p>\n<h2 id=\"cache-enabled\">cache.enabled</h2>\n<p>Le cache est activé par défaut (<code translate=\"no\">true</code>), mais vous pouvez le désactiver avec :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<aside class=\"note note-warning\"><p>Il n’est pas recommandé de désactiver le cache pour des raisons de performance.</p></aside>\n<h2 id=\"cache-dir\">cache.dir</h2>\n<p>Répertoire où les fichiers de cache sont stockés (<code translate=\"no\">.cache</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">'.cache'</span></code></pre>\n<aside class=\"note note-info\"><p>Le répertoire de cache est relatif au répertoire du site, mais vous pouvez utiliser un chemin absolu : cela peut être utile pour stocker le cache dans un répertoire partagé.</p></aside>\n<h2 id=\"cache-assets\">cache.assets</h2>\n<p>Options du cache des ressources.</p>\n<h3 id=\"cache-assets-ttl\">cache.assets.ttl</h3>\n<p>Temps de vie du cache des ressources en secondes (<code translate=\"no\">null</code> par défaut = aucune expiration).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">assets:</span>\n    <span class=\"hljs-attr\">ttl:</span> <span class=\"hljs-string\">~</span></code></pre>\n<h3 id=\"cache-assets-remote-ttl\">cache.assets.remote.ttl</h3>\n<p>Temps de vie du cache des ressources distantes en secondes (7 jours par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">assets:</span>\n    <span class=\"hljs-attr\">remotes:</span>\n      <span class=\"hljs-attr\">ttl:</span> <span class=\"hljs-number\">604800</span> <span class=\"hljs-comment\"># 7 jours</span></code></pre>\n<h2 id=\"cache-templates\">cache.templates</h2>\n<p>Désactive le cache des templates avec <code translate=\"no\">false</code> (<code translate=\"no\">true</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">templates:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<aside class=\"note note-info\"><p>Voir la <a href=\"../templates/6-cache.fr.md\">documentation du cache des templates</a> pour plus de détails.</p></aside>\n<h2 id=\"cache-translations\">cache.translations</h2>\n<p>Désactive le cache des traductions avec <code translate=\"no\">false</code> (<code translate=\"no\">true</code> par défaut).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">translations:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<hr>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/serveur/",
      "url": "https://cecil.app/fr/documentation/configuration/serveur/",
      "title": "Serveur et optimisation",
      "summary": "En-têtes du serveur local et optimisation de la sortie.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Serveur et optimisation\nServeur\nserver.headers\nVous pouvez définir des en-têtes HTTP personnalisés, utilisés par le serveur d’aperçu local.\nDepuis la version 8.38.0, l’option headers a été déplacée dans la section server.headers.\nserver:\n  headers:\n    - path: &lt;path&gt; # chemin relatif, préfixé par un slash. Prend en charge le joker \"*\".\n      headers:\n        - key: &lt;key&gt;\n          value: \"&lt;value&gt;\"\nC’est utile pour tester une Content Security Policy ou Cache-Control personnalisée.\nExemple :\nserver:\n  headers:\n    - path: \/*\n      headers:\n        - key: X-Frame-Options\n          value: \"SAMEORIGIN\"\n        - key: X-XSS-Protection\n          value: \"1; mode=block\"\n        - key: X-Content-Type-Options\n          value: \"nosniff\"\n        - key: Content-Security-Policy\n          value: \"default-src 'self'; object-src 'self'; img-src 'self'\"\n        - key: Strict-Transport-Security\n          value: \"max-age=31536000; includeSubDomains; preload\"\n    - path: \/assets\/*\n      headers:\n        - key: Cache-Control\n          value: \"public, max-age=31536000\"\n    - path: \/foo.html\n      headers:\n        - key: Foo\n          value: \"bar\"\n\nOptimisation\nLes options d’optimisation permettent d’activer la compression des fichiers de sortie : HTML, CSS, JavaScript et images.\noptimize:\n  enabled: false     # active l’optimisation des fichiers (`false` par défaut)\n  html:\n    enabled: true    # active l’optimisation des fichiers HTML\n    ext: [html, htm]   # extensions de fichiers prises en charge\n  css:\n    enabled: true    # active l’optimisation des fichiers CSS\n    ext: [css]         # extensions de fichiers prises en charge\n  js:\n    enabled: true    # active l’optimisation des fichiers JavaScript\n    ext: [js]          # extensions de fichiers prises en charge\n  images:\n    enabled: true    # active l’optimisation des fichiers images\n    ext: [jpeg, jpg, png, gif, webp, svg, avif] # extensions de fichiers prises en charge\nCette option est désactivée par défaut et peut être activée via :\noptimize: true\nUne fois l’option globale activée, les 4 types de fichiers seront traités.\nIl est possible de désactiver chacun d’eux via enabled: false et de modifier l’extension des fichiers traités via ext.\nIl est également possible d’activer cette option via la CLI lors de l’utilisation des commandes \"build\" et \"serve\" avec l’option --optimize.\nLe compresseur d’images utilisera les binaires suivants s’ils sont présents sur le système : JpegOptim, Optipng, Pngquant 2, SVGO, Gifsicle, cwebp et avifenc.\n",
      "content_html": "<h1>Serveur et optimisation</h1>\n<h2 id=\"serveur\">Serveur</h2>\n<h3 id=\"server-headers\">server.headers</h3>\n<p>Vous pouvez définir des <a href=\"https://developer.mozilla.org/docs/Glossary/Response_header\" target=\"_blank\" rel=\"noopener noreferrer\">en-têtes HTTP</a> personnalisés, utilisés par le serveur d’aperçu local.</p>\n<aside class=\"note note-warning\"><p>Depuis la version <ins>8.38.0</ins>, l’option <code translate=\"no\">headers</code> a été déplacée dans la section <code translate=\"no\">server.headers</code>.</p></aside>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">server:</span>\n  <span class=\"hljs-attr\">headers:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">&lt;path&gt;</span> <span class=\"hljs-comment\"># chemin relatif, préfixé par un slash. Prend en charge le joker \"*\".</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">&lt;key&gt;</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"&lt;value&gt;\"</span></code></pre>\n<aside class=\"note note-tip\"><p>C’est utile pour tester une <a href=\"https://developer.mozilla.org/docs/Web/HTTP/CSP\" target=\"_blank\" rel=\"noopener noreferrer\">Content Security Policy</a> ou <code translate=\"no\">Cache-Control</code> personnalisée.</p></aside>\n<p><em>Exemple :</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">server:</span>\n  <span class=\"hljs-attr\">headers:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">/*</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">X-Frame-Options</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"SAMEORIGIN\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">X-XSS-Protection</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"1; mode=block\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">X-Content-Type-Options</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"nosniff\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Content-Security-Policy</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"default-src 'self'; object-src 'self'; img-src 'self'\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Strict-Transport-Security</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"max-age=31536000; includeSubDomains; preload\"</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">/assets/*</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Cache-Control</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"public, max-age=31536000\"</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">/foo.html</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Foo</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"bar\"</span></code></pre>\n<hr>\n<h2 id=\"optimisation\">Optimisation</h2>\n<p>Les options d’optimisation permettent d’activer la compression des fichiers de sortie : HTML, CSS, JavaScript et images.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">optimize:</span>\n  <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># active l’optimisation des fichiers (`false` par défaut)</span>\n  <span class=\"hljs-attr\">html:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># active l’optimisation des fichiers HTML</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">htm]</span>   <span class=\"hljs-comment\"># extensions de fichiers prises en charge</span>\n  <span class=\"hljs-attr\">css:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># active l’optimisation des fichiers CSS</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[css]</span>         <span class=\"hljs-comment\"># extensions de fichiers prises en charge</span>\n  <span class=\"hljs-attr\">js:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># active l’optimisation des fichiers JavaScript</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[js]</span>          <span class=\"hljs-comment\"># extensions de fichiers prises en charge</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># active l’optimisation des fichiers images</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[jpeg,</span> <span class=\"hljs-string\">jpg,</span> <span class=\"hljs-string\">png,</span> <span class=\"hljs-string\">gif,</span> <span class=\"hljs-string\">webp,</span> <span class=\"hljs-string\">svg,</span> <span class=\"hljs-string\">avif]</span> <span class=\"hljs-comment\"># extensions de fichiers prises en charge</span></code></pre>\n<p>Cette option est désactivée par défaut et peut être activée via :</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">optimize:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<p>Une fois l’option globale activée, les 4 types de fichiers seront traités.<br>\nIl est possible de désactiver chacun d’eux via <code translate=\"no\">enabled: false</code> et de modifier l’extension des fichiers traités via <code translate=\"no\">ext</code>.</p>\n<aside class=\"note note-tip\"><p>Il est également possible d’activer cette option via la CLI lors de l’utilisation des commandes \"build\" et \"serve\" avec l’option <code translate=\"no\">--optimize</code>.</p></aside>\n<aside class=\"note note-important\"><p>Le compresseur d’<strong>images</strong> utilisera les binaires suivants s’ils sont présents sur le système : <a href=\"https://github.com/tjko/jpegoptim\" target=\"_blank\" rel=\"noopener noreferrer\">JpegOptim</a>, <a href=\"http://optipng.sourceforge.net/\" target=\"_blank\" rel=\"noopener noreferrer\">Optipng</a>, <a href=\"https://pngquant.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Pngquant 2</a>, <a href=\"https://github.com/svg/svgo\" target=\"_blank\" rel=\"noopener noreferrer\">SVGO</a>, <a href=\"http://www.lcdf.org/gifsicle/\" target=\"_blank\" rel=\"noopener noreferrer\">Gifsicle</a>, <a href=\"https://developers.google.com/speed/webp/docs/cwebp\" target=\"_blank\" rel=\"noopener noreferrer\">cwebp</a> et <a href=\"https://github.com/AOMediaCodec/libavif\" target=\"_blank\" rel=\"noopener noreferrer\">avifenc</a>.</p></aside>\n<hr>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/surcharge/",
      "url": "https://cecil.app/fr/documentation/configuration/surcharge/",
      "title": "Surcharge de configuration",
      "summary": "Surchargez la configuration avec des variables d’environnement ou une option CLI.",
      "date_published": "2026-03-27T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Surcharge de configuration\nVariables d’environnement\nLa configuration peut être surchargée via des variables d’environnement.\nAu démarrage, Cecil essaie également de charger un fichier .env depuis le chemin du site courant (le répertoire de travail actuel, ou l’argument &lt;path&gt; s’il est fourni).\n\nSi le fichier .env n’existe pas, Cecil continue normalement.\nLes variables déjà définies par le shell\/système sont conservées.\n\nChaque nom de variable d’environnement doit être préfixé par CECIL_ et la clé de configuration doit être en majuscules.\nPar exemple, la commande suivante définit le baseurl du site :\nexport CECIL_BASEURL=\"https:\/\/example.com\/\"\nVous pouvez stocker la même valeur dans un fichier .env à la racine du projet :\nCECIL_BASEURL=\"https:\/\/example.com\/\"\nCECIL_TITLE=\"Mon site Cecil\"\nOption CLI\nVous pouvez combiner plusieurs fichiers de configuration avec l’option --config (priorité de gauche à droite) :\nphp cecil.phar --config config-1.yml,config-2.yml",
      "content_html": "<h1>Surcharge de configuration</h1>\n<h2 id=\"variables-d-environnement\">Variables d’environnement</h2>\n<p>La configuration peut être surchargée via des <a href=\"https://en.wikipedia.org/wiki/Environment_variable\" target=\"_blank\" rel=\"noopener noreferrer\">variables d’environnement</a>.</p>\n<p>Au démarrage, Cecil essaie également de charger un fichier <code translate=\"no\">.env</code> depuis le chemin du site courant (le répertoire de travail actuel, ou l’argument <code translate=\"no\">&lt;path&gt;</code> s’il est fourni).</p>\n<ul>\n<li>Si le fichier <code translate=\"no\">.env</code> n’existe pas, Cecil continue normalement.</li>\n<li>Les variables déjà définies par le shell/système sont conservées.</li>\n</ul>\n<p>Chaque nom de variable d’environnement doit être préfixé par <code translate=\"no\">CECIL_</code> et la clé de configuration doit être en majuscules.</p>\n<p>Par exemple, la commande suivante définit le <code translate=\"no\">baseurl</code> du site :</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\"><span class=\"hljs-built_in\">export</span> CECIL_BASEURL=<span class=\"hljs-string\">\"https://example.com/\"</span></code></pre>\n<p>Vous pouvez stocker la même valeur dans un fichier <code translate=\"no\">.env</code> à la racine du projet :</p>\n<pre><code class=\"language-dotenv\" translate=\"no\">CECIL_BASEURL=\"https://example.com/\"\nCECIL_TITLE=\"Mon site Cecil\"</code></pre>\n<h2 id=\"option-cli\">Option CLI</h2>\n<p>Vous pouvez combiner plusieurs fichiers de configuration avec l’option <code translate=\"no\">--config</code> (priorité de gauche à droite) :</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">php cecil.phar --config config-1.yml,config-2.yml</code></pre>",
      "language": "fr"
    },
    {
      "id": "https://cecil.app/fr/documentation/configuration/codes-de-locale/",
      "url": "https://cecil.app/fr/documentation/configuration/codes-de-locale/",
      "title": "Codes de locale",
      "summary": "Liste des codes de locale à utiliser avec l’option languages.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-02T00:00:00+00:00","content_text": "Codes de locale\nCodes de locale disponibles (language_COUNTRY) utilisés par l’option languages.\n\n\n\nLocale\nCode\n\n\n\n\nAlbanais (Albanie)\nsq_AL\n\n\nAlbanais\nsq\n\n\nArabe (Algérie)\nar_DZ\n\n\nArabe (Bahreïn)\nar_BH\n\n\nArabe (Égypte)\nar_EG\n\n\nArabe (Irak)\nar_IQ\n\n\nArabe (Jordanie)\nar_JO\n\n\nArabe (Koweït)\nar_KW\n\n\nArabe (Liban)\nar_LB\n\n\nArabe (Libye)\nar_LY\n\n\nArabe (Maroc)\nar_MA\n\n\nArabe (Oman)\nar_OM\n\n\nArabe (Qatar)\nar_QA\n\n\nArabe (Arabie saoudite)\nar_SA\n\n\nArabe (Soudan)\nar_SD\n\n\nArabe (Syrie)\nar_SY\n\n\nArabe (Tunisie)\nar_TN\n\n\nArabe (Émirats arabes unis)\nar_AE\n\n\nArabe (Yémen)\nar_YE\n\n\nArabe\nar\n\n\nBiélorusse (Biélorussie)\nbe_BY\n\n\nBiélorusse\nbe\n\n\nBulgare (Bulgarie)\nbg_BG\n\n\nBulgare\nbg\n\n\nCatalan (Espagne)\nca_ES\n\n\nCatalan\nca\n\n\nChinois (Chine)\nzh_CN\n\n\nChinois (Hong Kong)\nzh_HK\n\n\nChinois (Singapour)\nzh_SG\n\n\nChinois (Taïwan)\nzh_TW\n\n\nChinois\nzh\n\n\nCroate (Croatie)\nhr_HR\n\n\nCroate\nhr\n\n\nTchèque (République tchèque)\ncs_CZ\n\n\nTchèque\ncs\n\n\nDanois (Danemark)\nda_DK\n\n\nDanois\nda\n\n\nNéerlandais (Belgique)\nnl_BE\n\n\nNéerlandais (Pays-Bas)\nnl_NL\n\n\nNéerlandais\nnl\n\n\nAnglais (Australie)\nen_AU\n\n\nAnglais (Canada)\nen_CA\n\n\nAnglais (Inde)\nen_IN\n\n\nAnglais (Irlande)\nen_IE\n\n\nAnglais (Malte)\nen_MT\n\n\nAnglais (Nouvelle-Zélande)\nen_NZ\n\n\nAnglais (Philippines)\nen_PH\n\n\nAnglais (Singapour)\nen_SG\n\n\nAnglais (Afrique du Sud)\nen_ZA\n\n\nAnglais (Royaume-Uni)\nen_GB\n\n\nAnglais (États-Unis)\nen_US\n\n\nAnglais\nen\n\n\nEstonien (Estonie)\net_EE\n\n\nEstonien\net\n\n\nFinnois (Finlande)\nfi_FI\n\n\nFinnois\nfi\n\n\nFrançais (Belgique)\nfr_BE\n\n\nFrançais (Canada)\nfr_CA\n\n\nFrançais (France)\nfr_FR\n\n\nFrançais (Luxembourg)\nfr_LU\n\n\nFrançais (Suisse)\nfr_CH\n\n\nFrançais\nfr\n\n\nAllemand (Autriche)\nde_AT\n\n\nAllemand (Allemagne)\nde_DE\n\n\nAllemand (Luxembourg)\nde_LU\n\n\nAllemand (Suisse)\nde_CH\n\n\nAllemand\nde\n\n\nGrec (Chypre)\nel_CY\n\n\nGrec (Grèce)\nel_GR\n\n\nGrec\nel\n\n\nHébreu (Israël)\niw_IL\n\n\nHébreu\niw\n\n\nHindi (Inde)\nhi_IN\n\n\nHongrois (Hongrie)\nhu_HU\n\n\nHongrois\nhu\n\n\nIslandais (Islande)\nis_IS\n\n\nIslandais\nis\n\n\nIndonésien (Indonésie)\nin_ID\n\n\nIndonésien\nin\n\n\nIrlandais (Irlande)\nga_IE\n\n\nIrlandais\nga\n\n\nItalien (Italie)\nit_IT\n\n\nItalien (Suisse)\nit_CH\n\n\nItalien\nit\n\n\nJaponais (Japon)\nja_JP\n\n\nJaponais (Japon,JP)\nja_JP_JP\n\n\nJaponais\nja\n\n\nCoréen (Corée du Sud)\nko_KR\n\n\nCoréen\nko\n\n\nLetton (Lettonie)\nlv_LV\n\n\nLetton\nlv\n\n\nLituanien (Lituanie)\nlt_LT\n\n\nLituanien\nlt\n\n\nMacédonien (Macédoine)\nmk_MK\n\n\nMacédonien\nmk\n\n\nMalais (Malaisie)\nms_MY\n\n\nMalais\nms\n\n\nMaltais (Malte)\nmt_MT\n\n\nMaltais\nmt\n\n\nNorvégien (Norvège)\nno_NO\n\n\nNorvégien (Norvège, Nynorsk)\nno_NO_NY\n\n\nNorvégien\nno\n\n\nPolonais (Pologne)\npl_PL\n\n\nPolonais\npl\n\n\nPortugais (Brésil)\npt_BR\n\n\nPortugais (Portugal)\npt_PT\n\n\nPortugais\npt\n\n\nRoumain (Roumanie)\nro_RO\n\n\nRoumain\nro\n\n\nRusse (Russie)\nru_RU\n\n\nRusse\nru\n\n\nSerbe (Bosnie-Herzégovine)\nsr_BA\n\n\nSerbe (Monténégro)\nsr_ME\n\n\nSerbe (Serbie et Monténégro)\nsr_CS\n\n\nSerbe (Serbie)\nsr_RS\n\n\nSerbe\nsr\n\n\nSlovaque (Slovaquie)\nsk_SK\n\n\nSlovaque\nsk\n\n\nSlovène (Slovénie)\nsl_SI\n\n\nSlovène\nsl\n\n\nEspagnol (Argentine)\nes_AR\n\n\nEspagnol (Bolivie)\nes_BO\n\n\nEspagnol (Chili)\nes_CL\n\n\nEspagnol (Colombie)\nes_CO\n\n\nEspagnol (Costa Rica)\nes_CR\n\n\nEspagnol (République dominicaine)\nes_DO\n\n\nEspagnol (Équateur)\nes_EC\n\n\nEspagnol (Salvador)\nes_SV\n\n\nEspagnol (Guatemala)\nes_GT\n\n\nEspagnol (Honduras)\nes_HN\n\n\nEspagnol (Mexique)\nes_MX\n\n\nEspagnol (Nicaragua)\nes_NI\n\n\nEspagnol (Panama)\nes_PA\n\n\nEspagnol (Paraguay)\nes_PY\n\n\nEspagnol (Pérou)\nes_PE\n\n\nEspagnol (Porto Rico)\nes_PR\n\n\nEspagnol (Espagne)\nes_ES\n\n\nEspagnol (États-Unis)\nes_US\n\n\nEspagnol (Uruguay)\nes_UY\n\n\nEspagnol (Venezuela)\nes_VE\n\n\nEspagnol\nes\n\n\nSuédois (Suède)\nsv_SE\n\n\nSuédois\nsv\n\n\nThaï (Thaïlande)\nth_TH\n\n\nThaï (Thaïlande,TH)\nth_TH_TH\n\n\nThaï\nth\n\n\nTurc (Turquie)\ntr_TR\n\n\nTurc\ntr\n\n\nUkrainien (Ukraine)\nuk_UA\n\n\nUkrainien\nuk\n\n\nVietnamien (Vietnam)\nvi_VN\n\n\nVietnamien\nvi\n\n\n",
      "content_html": "<h1>Codes de locale</h1>\n<p>Codes de locale disponibles (<code translate=\"no\">language_COUNTRY</code>) utilisés par l’option <a href=\"2-languages.fr.md#languages\"><code translate=\"no\">languages</code></a>.</p>\n<table>\n<thead>\n<tr>\n<th>Locale</th>\n<th>Code</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Albanais (Albanie)</td>\n<td>sq_AL</td>\n</tr>\n<tr>\n<td>Albanais</td>\n<td>sq</td>\n</tr>\n<tr>\n<td>Arabe (Algérie)</td>\n<td>ar_DZ</td>\n</tr>\n<tr>\n<td>Arabe (Bahreïn)</td>\n<td>ar_BH</td>\n</tr>\n<tr>\n<td>Arabe (Égypte)</td>\n<td>ar_EG</td>\n</tr>\n<tr>\n<td>Arabe (Irak)</td>\n<td>ar_IQ</td>\n</tr>\n<tr>\n<td>Arabe (Jordanie)</td>\n<td>ar_JO</td>\n</tr>\n<tr>\n<td>Arabe (Koweït)</td>\n<td>ar_KW</td>\n</tr>\n<tr>\n<td>Arabe (Liban)</td>\n<td>ar_LB</td>\n</tr>\n<tr>\n<td>Arabe (Libye)</td>\n<td>ar_LY</td>\n</tr>\n<tr>\n<td>Arabe (Maroc)</td>\n<td>ar_MA</td>\n</tr>\n<tr>\n<td>Arabe (Oman)</td>\n<td>ar_OM</td>\n</tr>\n<tr>\n<td>Arabe (Qatar)</td>\n<td>ar_QA</td>\n</tr>\n<tr>\n<td>Arabe (Arabie saoudite)</td>\n<td>ar_SA</td>\n</tr>\n<tr>\n<td>Arabe (Soudan)</td>\n<td>ar_SD</td>\n</tr>\n<tr>\n<td>Arabe (Syrie)</td>\n<td>ar_SY</td>\n</tr>\n<tr>\n<td>Arabe (Tunisie)</td>\n<td>ar_TN</td>\n</tr>\n<tr>\n<td>Arabe (Émirats arabes unis)</td>\n<td>ar_AE</td>\n</tr>\n<tr>\n<td>Arabe (Yémen)</td>\n<td>ar_YE</td>\n</tr>\n<tr>\n<td>Arabe</td>\n<td>ar</td>\n</tr>\n<tr>\n<td>Biélorusse (Biélorussie)</td>\n<td>be_BY</td>\n</tr>\n<tr>\n<td>Biélorusse</td>\n<td>be</td>\n</tr>\n<tr>\n<td>Bulgare (Bulgarie)</td>\n<td>bg_BG</td>\n</tr>\n<tr>\n<td>Bulgare</td>\n<td>bg</td>\n</tr>\n<tr>\n<td>Catalan (Espagne)</td>\n<td>ca_ES</td>\n</tr>\n<tr>\n<td>Catalan</td>\n<td>ca</td>\n</tr>\n<tr>\n<td>Chinois (Chine)</td>\n<td>zh_CN</td>\n</tr>\n<tr>\n<td>Chinois (Hong Kong)</td>\n<td>zh_HK</td>\n</tr>\n<tr>\n<td>Chinois (Singapour)</td>\n<td>zh_SG</td>\n</tr>\n<tr>\n<td>Chinois (Taïwan)</td>\n<td>zh_TW</td>\n</tr>\n<tr>\n<td>Chinois</td>\n<td>zh</td>\n</tr>\n<tr>\n<td>Croate (Croatie)</td>\n<td>hr_HR</td>\n</tr>\n<tr>\n<td>Croate</td>\n<td>hr</td>\n</tr>\n<tr>\n<td>Tchèque (République tchèque)</td>\n<td>cs_CZ</td>\n</tr>\n<tr>\n<td>Tchèque</td>\n<td>cs</td>\n</tr>\n<tr>\n<td>Danois (Danemark)</td>\n<td>da_DK</td>\n</tr>\n<tr>\n<td>Danois</td>\n<td>da</td>\n</tr>\n<tr>\n<td>Néerlandais (Belgique)</td>\n<td>nl_BE</td>\n</tr>\n<tr>\n<td>Néerlandais (Pays-Bas)</td>\n<td>nl_NL</td>\n</tr>\n<tr>\n<td>Néerlandais</td>\n<td>nl</td>\n</tr>\n<tr>\n<td>Anglais (Australie)</td>\n<td>en_AU</td>\n</tr>\n<tr>\n<td>Anglais (Canada)</td>\n<td>en_CA</td>\n</tr>\n<tr>\n<td>Anglais (Inde)</td>\n<td>en_IN</td>\n</tr>\n<tr>\n<td>Anglais (Irlande)</td>\n<td>en_IE</td>\n</tr>\n<tr>\n<td>Anglais (Malte)</td>\n<td>en_MT</td>\n</tr>\n<tr>\n<td>Anglais (Nouvelle-Zélande)</td>\n<td>en_NZ</td>\n</tr>\n<tr>\n<td>Anglais (Philippines)</td>\n<td>en_PH</td>\n</tr>\n<tr>\n<td>Anglais (Singapour)</td>\n<td>en_SG</td>\n</tr>\n<tr>\n<td>Anglais (Afrique du Sud)</td>\n<td>en_ZA</td>\n</tr>\n<tr>\n<td>Anglais (Royaume-Uni)</td>\n<td>en_GB</td>\n</tr>\n<tr>\n<td>Anglais (États-Unis)</td>\n<td>en_US</td>\n</tr>\n<tr>\n<td>Anglais</td>\n<td>en</td>\n</tr>\n<tr>\n<td>Estonien (Estonie)</td>\n<td>et_EE</td>\n</tr>\n<tr>\n<td>Estonien</td>\n<td>et</td>\n</tr>\n<tr>\n<td>Finnois (Finlande)</td>\n<td>fi_FI</td>\n</tr>\n<tr>\n<td>Finnois</td>\n<td>fi</td>\n</tr>\n<tr>\n<td>Français (Belgique)</td>\n<td>fr_BE</td>\n</tr>\n<tr>\n<td>Français (Canada)</td>\n<td>fr_CA</td>\n</tr>\n<tr>\n<td>Français (France)</td>\n<td>fr_FR</td>\n</tr>\n<tr>\n<td>Français (Luxembourg)</td>\n<td>fr_LU</td>\n</tr>\n<tr>\n<td>Français (Suisse)</td>\n<td>fr_CH</td>\n</tr>\n<tr>\n<td>Français</td>\n<td>fr</td>\n</tr>\n<tr>\n<td>Allemand (Autriche)</td>\n<td>de_AT</td>\n</tr>\n<tr>\n<td>Allemand (Allemagne)</td>\n<td>de_DE</td>\n</tr>\n<tr>\n<td>Allemand (Luxembourg)</td>\n<td>de_LU</td>\n</tr>\n<tr>\n<td>Allemand (Suisse)</td>\n<td>de_CH</td>\n</tr>\n<tr>\n<td>Allemand</td>\n<td>de</td>\n</tr>\n<tr>\n<td>Grec (Chypre)</td>\n<td>el_CY</td>\n</tr>\n<tr>\n<td>Grec (Grèce)</td>\n<td>el_GR</td>\n</tr>\n<tr>\n<td>Grec</td>\n<td>el</td>\n</tr>\n<tr>\n<td>Hébreu (Israël)</td>\n<td>iw_IL</td>\n</tr>\n<tr>\n<td>Hébreu</td>\n<td>iw</td>\n</tr>\n<tr>\n<td>Hindi (Inde)</td>\n<td>hi_IN</td>\n</tr>\n<tr>\n<td>Hongrois (Hongrie)</td>\n<td>hu_HU</td>\n</tr>\n<tr>\n<td>Hongrois</td>\n<td>hu</td>\n</tr>\n<tr>\n<td>Islandais (Islande)</td>\n<td>is_IS</td>\n</tr>\n<tr>\n<td>Islandais</td>\n<td>is</td>\n</tr>\n<tr>\n<td>Indonésien (Indonésie)</td>\n<td>in_ID</td>\n</tr>\n<tr>\n<td>Indonésien</td>\n<td>in</td>\n</tr>\n<tr>\n<td>Irlandais (Irlande)</td>\n<td>ga_IE</td>\n</tr>\n<tr>\n<td>Irlandais</td>\n<td>ga</td>\n</tr>\n<tr>\n<td>Italien (Italie)</td>\n<td>it_IT</td>\n</tr>\n<tr>\n<td>Italien (Suisse)</td>\n<td>it_CH</td>\n</tr>\n<tr>\n<td>Italien</td>\n<td>it</td>\n</tr>\n<tr>\n<td>Japonais (Japon)</td>\n<td>ja_JP</td>\n</tr>\n<tr>\n<td>Japonais (Japon,JP)</td>\n<td>ja_JP_JP</td>\n</tr>\n<tr>\n<td>Japonais</td>\n<td>ja</td>\n</tr>\n<tr>\n<td>Coréen (Corée du Sud)</td>\n<td>ko_KR</td>\n</tr>\n<tr>\n<td>Coréen</td>\n<td>ko</td>\n</tr>\n<tr>\n<td>Letton (Lettonie)</td>\n<td>lv_LV</td>\n</tr>\n<tr>\n<td>Letton</td>\n<td>lv</td>\n</tr>\n<tr>\n<td>Lituanien (Lituanie)</td>\n<td>lt_LT</td>\n</tr>\n<tr>\n<td>Lituanien</td>\n<td>lt</td>\n</tr>\n<tr>\n<td>Macédonien (Macédoine)</td>\n<td>mk_MK</td>\n</tr>\n<tr>\n<td>Macédonien</td>\n<td>mk</td>\n</tr>\n<tr>\n<td>Malais (Malaisie)</td>\n<td>ms_MY</td>\n</tr>\n<tr>\n<td>Malais</td>\n<td>ms</td>\n</tr>\n<tr>\n<td>Maltais (Malte)</td>\n<td>mt_MT</td>\n</tr>\n<tr>\n<td>Maltais</td>\n<td>mt</td>\n</tr>\n<tr>\n<td>Norvégien (Norvège)</td>\n<td>no_NO</td>\n</tr>\n<tr>\n<td>Norvégien (Norvège, Nynorsk)</td>\n<td>no_NO_NY</td>\n</tr>\n<tr>\n<td>Norvégien</td>\n<td>no</td>\n</tr>\n<tr>\n<td>Polonais (Pologne)</td>\n<td>pl_PL</td>\n</tr>\n<tr>\n<td>Polonais</td>\n<td>pl</td>\n</tr>\n<tr>\n<td>Portugais (Brésil)</td>\n<td>pt_BR</td>\n</tr>\n<tr>\n<td>Portugais (Portugal)</td>\n<td>pt_PT</td>\n</tr>\n<tr>\n<td>Portugais</td>\n<td>pt</td>\n</tr>\n<tr>\n<td>Roumain (Roumanie)</td>\n<td>ro_RO</td>\n</tr>\n<tr>\n<td>Roumain</td>\n<td>ro</td>\n</tr>\n<tr>\n<td>Russe (Russie)</td>\n<td>ru_RU</td>\n</tr>\n<tr>\n<td>Russe</td>\n<td>ru</td>\n</tr>\n<tr>\n<td>Serbe (Bosnie-Herzégovine)</td>\n<td>sr_BA</td>\n</tr>\n<tr>\n<td>Serbe (Monténégro)</td>\n<td>sr_ME</td>\n</tr>\n<tr>\n<td>Serbe (Serbie et Monténégro)</td>\n<td>sr_CS</td>\n</tr>\n<tr>\n<td>Serbe (Serbie)</td>\n<td>sr_RS</td>\n</tr>\n<tr>\n<td>Serbe</td>\n<td>sr</td>\n</tr>\n<tr>\n<td>Slovaque (Slovaquie)</td>\n<td>sk_SK</td>\n</tr>\n<tr>\n<td>Slovaque</td>\n<td>sk</td>\n</tr>\n<tr>\n<td>Slovène (Slovénie)</td>\n<td>sl_SI</td>\n</tr>\n<tr>\n<td>Slovène</td>\n<td>sl</td>\n</tr>\n<tr>\n<td>Espagnol (Argentine)</td>\n<td>es_AR</td>\n</tr>\n<tr>\n<td>Espagnol (Bolivie)</td>\n<td>es_BO</td>\n</tr>\n<tr>\n<td>Espagnol (Chili)</td>\n<td>es_CL</td>\n</tr>\n<tr>\n<td>Espagnol (Colombie)</td>\n<td>es_CO</td>\n</tr>\n<tr>\n<td>Espagnol (Costa Rica)</td>\n<td>es_CR</td>\n</tr>\n<tr>\n<td>Espagnol (République dominicaine)</td>\n<td>es_DO</td>\n</tr>\n<tr>\n<td>Espagnol (Équateur)</td>\n<td>es_EC</td>\n</tr>\n<tr>\n<td>Espagnol (Salvador)</td>\n<td>es_SV</td>\n</tr>\n<tr>\n<td>Espagnol (Guatemala)</td>\n<td>es_GT</td>\n</tr>\n<tr>\n<td>Espagnol (Honduras)</td>\n<td>es_HN</td>\n</tr>\n<tr>\n<td>Espagnol (Mexique)</td>\n<td>es_MX</td>\n</tr>\n<tr>\n<td>Espagnol (Nicaragua)</td>\n<td>es_NI</td>\n</tr>\n<tr>\n<td>Espagnol (Panama)</td>\n<td>es_PA</td>\n</tr>\n<tr>\n<td>Espagnol (Paraguay)</td>\n<td>es_PY</td>\n</tr>\n<tr>\n<td>Espagnol (Pérou)</td>\n<td>es_PE</td>\n</tr>\n<tr>\n<td>Espagnol (Porto Rico)</td>\n<td>es_PR</td>\n</tr>\n<tr>\n<td>Espagnol (Espagne)</td>\n<td>es_ES</td>\n</tr>\n<tr>\n<td>Espagnol (États-Unis)</td>\n<td>es_US</td>\n</tr>\n<tr>\n<td>Espagnol (Uruguay)</td>\n<td>es_UY</td>\n</tr>\n<tr>\n<td>Espagnol (Venezuela)</td>\n<td>es_VE</td>\n</tr>\n<tr>\n<td>Espagnol</td>\n<td>es</td>\n</tr>\n<tr>\n<td>Suédois (Suède)</td>\n<td>sv_SE</td>\n</tr>\n<tr>\n<td>Suédois</td>\n<td>sv</td>\n</tr>\n<tr>\n<td>Thaï (Thaïlande)</td>\n<td>th_TH</td>\n</tr>\n<tr>\n<td>Thaï (Thaïlande,TH)</td>\n<td>th_TH_TH</td>\n</tr>\n<tr>\n<td>Thaï</td>\n<td>th</td>\n</tr>\n<tr>\n<td>Turc (Turquie)</td>\n<td>tr_TR</td>\n</tr>\n<tr>\n<td>Turc</td>\n<td>tr</td>\n</tr>\n<tr>\n<td>Ukrainien (Ukraine)</td>\n<td>uk_UA</td>\n</tr>\n<tr>\n<td>Ukrainien</td>\n<td>uk</td>\n</tr>\n<tr>\n<td>Vietnamien (Vietnam)</td>\n<td>vi_VN</td>\n</tr>\n<tr>\n<td>Vietnamien</td>\n<td>vi</td>\n</tr>\n</tbody>\n</table>",
      "language": "fr"
    }
  ]
}
