<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://cecil.app/xsl/atom.xsl" media="all"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cecil.app/documentation/configuration/</id>
  <title>Cecil - Configuration</title>
  <subtitle><![CDATA[Cecil is a command-line PHP application that merges Markdown pages, medias and Twig templates to generate a static website.]]></subtitle>
  <link href="https://cecil.app/documentation/configuration/atom.xml" rel="self" type="application/atom+xml" />
  <link href="https://cecil.app/documentation/configuration/" rel="alternate" type="text/html" />
  <updated>2026-10-06T00:34:02+00:00</updated>
  <author>
    <name>Cecil</name>
    <uri>https://cecil.app</uri>
  </author>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/site/</id>
    <title>Site options</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/site/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Site options</h1>
<h2 id="title">title</h2>
<p>Main title of the site.</p>
<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>
<h2 id="baseline">baseline</h2>
<p>Short description (~ 20 characters).</p>
<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>
<h2 id="baseurl">baseurl</h2>
<p>The base URL.</p>
<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>
<p><em>Example:</em></p>
<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>
<aside class="note note-important"><p><code translate="no">baseurl</code> should end with a trailing slash (<code translate="no">/</code>).</p></aside>
<h2 id="canonicalurl">canonicalurl</h2>
<p>If set to <code translate="no">true</code> the <a href="/documentation/templates/reference/functions/#url"><code translate="no">url()</code></a> function will return the absolute URL (<code translate="no">false</code> by default).</p>
<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>
<h2 id="description">description</h2>
<p>Site description (~ 250 characters).</p>
<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>
<h2 id="menus">menus</h2>
<p>Menus are used to create <a href="/documentation/templates/variables/#site-menus">navigation links in templates</a>.</p>
<p>A menu is made up of a unique ID and entry properties (name, URL, weight).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">menus:</span>
  <span class="hljs-string">&lt;name&gt;:</span>
    <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>
      <span class="hljs-attr">name:</span> <span class="hljs-string">"&lt;name&gt;"</span>    <span class="hljs-comment"># name displayed in templates</span>
      <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;url&gt;</span>        <span class="hljs-comment"># relative or absolute URL</span>
      <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>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">menus:</span>
  <span class="hljs-attr">main:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">about</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">"About"</span>
      <span class="hljs-attr">url:</span> <span class="hljs-string">/about/</span>
      <span class="hljs-attr">weight:</span> <span class="hljs-number">1</span>
  <span class="hljs-attr">footer:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">author</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">The</span> <span class="hljs-string">author</span>
      <span class="hljs-attr">url:</span> <span class="hljs-string">https://arnaudligny.fr</span>
      <span class="hljs-attr">weight:</span> <span class="hljs-number">99</span></code></pre>
<aside class="note note-info"><p>A <code translate="no">main</code> menu is automatically created with the home page entry and all sections entries (<a href="/documentation/content/">See content management</a>)</p></aside>
<aside class="note note-tip"><p>A page can be added to a menu by setting the <a href="/documentation/content/front-matter/#menu"><code translate="no">menu</code> variable</a> in its front matter.</p></aside>
<h3 id="override-an-entry">Override an entry</h3>
<p>A page menu entry can be overridden: use the page ID as <code translate="no">id</code>.</p>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">menus:</span>
  <span class="hljs-attr">main:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">index</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">"My amazing homepage!"</span>
      <span class="hljs-attr">weight:</span> <span class="hljs-number">1</span></code></pre>
<h3 id="disable-an-entry">Disable an entry</h3>
<p>A menu entry can be disabled with <code translate="no">enabled: false</code>.</p>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">menus:</span>
  <span class="hljs-attr">main:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">about</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span></code></pre>
<h2 id="taxonomies">taxonomies</h2>
<p>List of vocabularies, paired by plural and singular value.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">taxonomies:</span>
  <span class="hljs-string">&lt;plural&gt;:</span> <span class="hljs-string">&lt;singular&gt;</span></code></pre>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">taxonomies:</span>
  <span class="hljs-attr">categories:</span> <span class="hljs-string">category</span>
  <span class="hljs-attr">tags:</span> <span class="hljs-string">tag</span></code></pre>
<p>Then you can use those vocabularies in your content’s <a href="/documentation/content/front-matter/#taxonomy">front matter</a>.</p>
<aside class="note note-warning"><p>Since <ins>version 8.37.0</ins>, default vocabularies <code translate="no">category</code> and <code translate="no">tag</code> have been removed. You must define them in the configuration file if you want to use them.</p></aside>
<aside class="note note-tip"><p>A vocabulary can be disabled with the special value <code translate="no">disabled</code>. Example: <code translate="no">tags: disabled</code>.</p></aside>
<h2 id="theme">theme</h2>
<p>The theme to use, or a list of themes.</p>
<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>
<span class="hljs-comment"># or</span>
<span class="hljs-attr">theme:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">&lt;theme1&gt;</span> <span class="hljs-comment"># theme name</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">&lt;theme2&gt;</span></code></pre>
<aside class="note note-info"><p>The first theme overrides the others, and so on.</p></aside>
<p><em>Examples:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">theme:</span> <span class="hljs-string">hyde</span></code></pre>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">theme:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">serviceworker</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">hyde</span></code></pre>
<aside class="note note-info"><p>See <a href="https://github.com/Cecilapp?q=theme#org-repositories" target="_blank" rel="noopener noreferrer">themes on GitHub</a> or on website <a href="https://cecil.app/themes/">themes section</a>.</p></aside>
<h2 id="date">date</h2>
<p>Date format and timezone.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">date:</span>
  <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>
  <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>
<ul>
<li><code translate="no">format</code>: <a href="https://php.net/date" target="_blank" rel="noopener noreferrer">PHP date</a> format specifier</li>
<li><code translate="no">timezone</code>: see <a href="https://php.net/timezones" target="_blank" rel="noopener noreferrer">timezones</a></li>
</ul>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">date:</span>
  <span class="hljs-attr">format:</span> <span class="hljs-string">'j F, Y'</span>
  <span class="hljs-attr">timezone:</span> <span class="hljs-string">'Europe/Paris'</span></code></pre>
<h2 id="metatags">metatags</h2>
<p><em>metatags</em> are SEO and social helpers that can be automatically injected in the <code translate="no">&lt;head&gt;</code>, with the 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>
<p>This template adds the following meta tags:</p>
<ul>
<li>Page title + Site title, or Site title + Site baseline</li>
<li>Page/Site description</li>
<li>Page/Site keywords</li>
<li>Page/Site author</li>
<li>Search engine crawler directives (<em>robots</em>)</li>
<li>Favicon links</li>
<li>Navigation links (first, previous, next, last)</li>
<li>Canonical URL</li>
<li>Alternate links (i.e.: RSS feed, others languages)</li>
<li><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> links</li>
<li><a href="https://ogp.me" target="_blank" rel="noopener noreferrer">Open Graph</a></li>
<li>Facebook profile ID</li>
<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>
<li><a href="https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/" target="_blank" rel="noopener noreferrer">Fediverse tag</a></li>
<li><a href="https://www.dublincore.org/specifications/dublin-core/dcmi-terms/" target="_blank" rel="noopener noreferrer">Dublin Core</a></li>
<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>
</ul>
<h3 id="metatags-options">metatags options</h3>
<p>Cecil uses page front matter to feed meta tags, and falls back to site options when needed.</p>
<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>
<span class="hljs-attr">description:</span> <span class="hljs-string">"Page/Site description"</span>  <span class="hljs-comment"># used by description meta</span>
<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>
<span class="hljs-attr">keywords:</span> <span class="hljs-string">[keyword1,</span> <span class="hljs-string">keyword2]</span>        <span class="hljs-comment"># obsolete</span>
<span class="hljs-attr">author:</span>                               <span class="hljs-comment"># used by author meta</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">&lt;name&gt;</span>                          <span class="hljs-comment"># author name</span>
  <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;url&gt;</span>                            <span class="hljs-comment"># author URL</span>
  <span class="hljs-attr">email:</span> <span class="hljs-string">&lt;email&gt;</span>                        <span class="hljs-comment"># author email</span>
<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>
<span class="hljs-attr">canonical:</span>                            <span class="hljs-comment"># used to override the generated canonical URL</span>
  <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;URL&gt;</span>                            <span class="hljs-comment"># absolute URL</span>
  <span class="hljs-attr">title:</span> <span class="hljs-string">"&lt;URL title&gt;"</span>                  <span class="hljs-comment"># optional canonical title</span>
<span class="hljs-attr">social:</span>                               <span class="hljs-comment"># used by social networks meta</span>
  <span class="hljs-attr">twitter:</span>                              <span class="hljs-comment"># used by Twitter/X Card</span>
    <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;URL&gt;</span>                            <span class="hljs-comment"># used for `rel=me` link</span>
    <span class="hljs-attr">site:</span> <span class="hljs-string">username</span>                        <span class="hljs-comment"># site username</span>
    <span class="hljs-attr">creator:</span> <span class="hljs-string">username</span>                     <span class="hljs-comment"># page author username</span>
  <span class="hljs-attr">mastodon:</span>                             <span class="hljs-comment"># used by Mastodon meta</span>
    <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;URL&gt;</span>                            <span class="hljs-comment"># used for `rel=me` link</span>
    <span class="hljs-attr">creator:</span> <span class="hljs-string">handle</span>                       <span class="hljs-comment"># page author account</span>
  <span class="hljs-attr">facebook:</span>                             <span class="hljs-comment"># used by Facebook meta</span>
    <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;URL&gt;</span>                            <span class="hljs-comment"># used for `rel=me` link</span>
    <span class="hljs-attr">id:</span> <span class="hljs-number">123456789</span>                         <span class="hljs-comment"># Facebook profile ID</span>
    <span class="hljs-attr">username:</span> <span class="hljs-string">username</span>                    <span class="hljs-comment"># page author username</span></code></pre>
<aside class="note note-tip"><p>If needed, <code translate="no">title</code> and <code translate="no">image</code> can be overridden:</p>
<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>
<h3 id="metatags-configuration">metatags configuration</h3>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">metatags:</span>
  <span class="hljs-attr">title:</span>                   <span class="hljs-comment"># title options</span>
    <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>
    <span class="hljs-attr">only:</span> <span class="hljs-literal">false</span>              <span class="hljs-comment"># displays page title only (`false` by default)</span>
    <span class="hljs-attr">pagination:</span>              <span class="hljs-comment"># pagination options</span>
      <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>
      <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>
  <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>
  <span class="hljs-attr">favicon:</span>                 <span class="hljs-comment"># favicon options</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>            <span class="hljs-comment"># includes favicon (`true` by default)</span>
    <span class="hljs-attr">image:</span> <span class="hljs-string">favicon.png</span>       <span class="hljs-comment"># path to favicon image</span>
    <span class="hljs-attr">sizes:</span>                   <span class="hljs-comment"># sizes by device</span>
      <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>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">"shortcut icon":</span> <span class="hljs-string">[196]</span>                   <span class="hljs-comment"># Android</span>
      <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>
  <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>
  <span class="hljs-attr">image:</span> <span class="hljs-literal">true</span>              <span class="hljs-comment"># includes image (`true` by default)</span>
  <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>
  <span class="hljs-attr">articles:</span> <span class="hljs-string">"blog"</span>         <span class="hljs-comment"># articles' section (`blog` by default)</span>
  <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>
  <span class="hljs-attr">mastodon:</span> <span class="hljs-literal">true</span>           <span class="hljs-comment"># includes Mastodon meta tags (`true` by default)</span>
  <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>
  <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>
<h2 id="debug">debug</h2>
<p>Enables the <em>debug mode</em>, used to display debug information like very verbose logs, Twig dump, Twig profiler, SCSS sourcemap, etc.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">debug:</span> <span class="hljs-literal">true</span></code></pre>
<p>There are two other ways to enable <em>debug mode</em>:</p>
<ol>
<li>Run a command with the <code translate="no">-vvv</code> option</li>
<li>Set the <code translate="no">CECIL_DEBUG</code> environment variable to <code translate="no">true</code></li>
</ol>
<hr>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/languages/</id>
    <title>Languages</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/languages/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Languages</h1>
<h2 id="language">language</h2>
<p>The main language, defined by its code.</p>
<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>
<p>By default only others <a href="#languages">languages</a> pages path are prefixed with its language code, but you can prefix the path of the main language pages with the following option:</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-comment">#language: &lt;code&gt;</span>
<span class="hljs-attr">language:</span>
  <span class="hljs-attr">code:</span> <span class="hljs-string">&lt;code&gt;</span>
  <span class="hljs-attr">prefix:</span> <span class="hljs-literal">true</span></code></pre>
<aside class="note note-info"><p>When <code translate="no">prefix</code> is set to <code translate="no">true</code>, an alias is automatically created for the home page that redirect from<code translate="no">/</code> to <code translate="no">/&lt;code&gt;/</code>.</p></aside>
<h2 id="languages">languages</h2>
<p>Options of available languages, used for <a href="/documentation/content/multilingual/">pages</a> and <a href="/documentation/templates/localization/">templates</a> localization.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">languages:</span>
  <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>
    <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>
    <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>
    <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>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">language:</span> <span class="hljs-string">en</span>
<span class="hljs-attr">languages:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">en</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">English</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">en_US</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">fr</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">Français</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">fr_FR</span></code></pre>
<aside class="note note-info"><p>A <a href="/documentation/configuration/locale-codes/">locale code list</a> is available if needed.</p></aside>
<h3 id="localize">Localize</h3>
<p>To localize configuration options you must store them under the <code translate="no">config</code> key of the language.</p>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">title:</span> <span class="hljs-string">"Cecil in english"</span>
<span class="hljs-attr">languages:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">en</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">English</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">en_US</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">fr</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">Français</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">fr_FR</span>
    <span class="hljs-attr">config:</span>
      <span class="hljs-attr">title:</span> <span class="hljs-string">"Cecil en français"</span></code></pre>
<aside class="note note-info"><p>In <a href="/documentation/templates/">templates</a> you can access to an option with <code translate="no">{{ site.&lt;option&gt; }}</code>, for example <code translate="no">{{ site.title }}</code>.<br>
If an option is not available in the current language (e.g.: <code translate="no">fr</code>) it fallback to the global one (e.g.: <code translate="no">en</code>).</p></aside>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/pages/</id>
    <title>Pages</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/pages/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Pages</h1>
<h2 id="pages-dir">pages.dir</h2>
<p>Directory source of pages (<code translate="no">pages</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">pages</span></code></pre>
<h2 id="pages-ext">pages.ext</h2>
<p>Extensions of pages files.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <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>
<h2 id="pages-exclude">pages.exclude</h2>
<p>Directories, paths and files name to exclude (accepts globs, strings and regexes).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <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>
<h2 id="pages-prefix-separator">pages.prefix.separator</h2>
<p>List of characters used as separator between a filename prefix (<code translate="no">date</code> or <code translate="no">weight</code>) and the slug.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">prefix:</span>
    <span class="hljs-attr">separator:</span> <span class="hljs-string">['-',</span> <span class="hljs-string">'_'</span><span class="hljs-string">]</span></code></pre>
<h2 id="pages-sortby">pages.sortby</h2>
<p>Default collections sort method.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">sortby:</span> <span class="hljs-string">date</span> <span class="hljs-comment"># `date`, `updated`, `title` or `weight`</span>
  <span class="hljs-comment"># or</span>
  <span class="hljs-attr">sortby:</span>
    <span class="hljs-attr">variable:</span> <span class="hljs-string">date</span>    <span class="hljs-comment"># `date`, `updated`, `title` or `weight`</span>
    <span class="hljs-attr">desc_title:</span> <span class="hljs-literal">false</span> <span class="hljs-comment"># sort by title in descending order</span>
    <span class="hljs-attr">reverse:</span> <span class="hljs-literal">false</span>    <span class="hljs-comment"># reverse the sort order</span></code></pre>
<h2 id="pages-pagination">pages.pagination</h2>
<p>Pagination is available for list pages (<em>type</em> is <code translate="no">homepage</code>, <code translate="no">section</code> or <code translate="no">term</code>).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">pagination:</span>
    <span class="hljs-attr">max:</span> <span class="hljs-number">5</span>     <span class="hljs-comment"># maximum number of entries per page</span>
    <span class="hljs-attr">path:</span> <span class="hljs-string">page</span> <span class="hljs-comment"># path to the paginated page</span></code></pre>
<h3 id="disable-pagination">Disable pagination</h3>
<p>Pagination can be disabled:</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">pagination:</span> <span class="hljs-literal">false</span></code></pre>
<h2 id="pages-paths">pages.paths</h2>
<p>Apply a custom <a href="/documentation/content/front-matter/#predefined-variables"><code translate="no">path</code></a> for all pages of a <strong><em>Section</em></strong>.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">paths:</span>
    <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>
      <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>
<h3 id="path-placeholders">Path placeholders</h3>
<ul>
<li><code translate="no">:year</code></li>
<li><code translate="no">:month</code></li>
<li><code translate="no">:day</code></li>
<li><code translate="no">:section</code></li>
<li><code translate="no">:slug</code></li>
</ul>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">paths:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">section:</span> <span class="hljs-string">Blog</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">:section/:year/:month/:day/:slug</span> <span class="hljs-comment"># e.g.: /blog/2020/12/01/my-post/</span>
<span class="hljs-comment"># localized</span>
<span class="hljs-attr">languages:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">fr</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">Français</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">fr_FR</span>
    <span class="hljs-attr">config:</span>
      <span class="hljs-attr">pages:</span>
        <span class="hljs-attr">paths:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-attr">section:</span> <span class="hljs-string">Blog</span>
            <span class="hljs-attr">path:</span> <span class="hljs-string">blogue/:year/:month/:day/:slug</span> <span class="hljs-comment"># e.g.: /blogue/2020/12/01/mon-billet/</span></code></pre>
<h2 id="pages-frontmatter">pages.frontmatter</h2>
<p>Page front matter format (<code translate="no">yaml</code> by default, also accepts <code translate="no">ini</code>, <code translate="no">toml</code> and <code translate="no">json</code>).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">frontmatter:</span> <span class="hljs-string">yaml</span></code></pre>
<h2 id="pages-body">pages.body</h2>
<p>Page body options.</p>
<aside class="note note-info"><p>To know how those options impacts your content see <em><a href="/documentation/content/markdown/">Content &gt; Markdown</a></em> documentation.</p></aside>
<h3 id="pages-body-toc">pages.body.toc</h3>
<p>Headers used to build the table of contents (<code translate="no">[h2, h3]</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">body:</span>
    <span class="hljs-attr">toc:</span> <span class="hljs-string">[h2,</span> <span class="hljs-string">h3]</span></code></pre>
<h3 id="pages-body-highlight">pages.body.highlight</h3>
<p>Enables code syntax highlighting (<code translate="no">true</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">body:</span>
    <span class="hljs-attr">highlight:</span> <span class="hljs-literal">false</span> <span class="hljs-comment"># set to false to disable syntax highlighting</span></code></pre>
<h3 id="pages-body-images">pages.body.images</h3>
<p>Images handling options.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">body:</span>
    <span class="hljs-attr">images:</span>
      <span class="hljs-attr">formats:</span> <span class="hljs-string">[]</span>       <span class="hljs-comment"># adds alternative image formats as `source` (e.g. `[avif, webp]`, empty array by default)</span>
      <span class="hljs-attr">resize:</span> <span class="hljs-number">0</span>         <span class="hljs-comment"># resizes all images to &lt;width&gt; (in pixels, `0` to disable)</span>
      <span class="hljs-attr">responsive:</span> <span class="hljs-literal">false</span> <span class="hljs-comment"># adds responsive image variants to the `srcset` attribute (`false` by default)</span>
      <span class="hljs-attr">lazy:</span> <span class="hljs-literal">true</span>        <span class="hljs-comment"># adds `loading="lazy"` attribute (`true` by default)</span>
      <span class="hljs-attr">decoding:</span> <span class="hljs-literal">true</span>    <span class="hljs-comment"># adds `decoding="async"` attribute (`true` by default)</span>
      <span class="hljs-attr">caption:</span> <span class="hljs-literal">false</span>    <span class="hljs-comment"># puts the image in a &lt;figure&gt; element and adds a &lt;figcaption&gt; containing the title (`false` by default)</span>
      <span class="hljs-attr">placeholder:</span> <span class="hljs-string">''</span>   <span class="hljs-comment"># fills the &lt;img&gt; background before loading ('color' or 'lqip', empty by default)</span>
      <span class="hljs-attr">class:</span> <span class="hljs-string">''</span>         <span class="hljs-comment"># sets a default class on each image (empty by default)</span>
      <span class="hljs-attr">dark_suffix:</span> <span class="hljs-string">''</span>   <span class="hljs-comment"># suffix of the dark variant image (e.g. `.dark`), disabled by default</span>
      <span class="hljs-attr">mobile_suffix:</span> <span class="hljs-string">''</span> <span class="hljs-comment"># suffix of the mobile variant image (e.g. `.mobile`), disabled by default</span>
      <span class="hljs-attr">mobile_media_query:</span> <span class="hljs-string">'(max-width: 767px)'</span> <span class="hljs-comment"># media query of the mobile variant `&lt;source&gt;`</span>
      <span class="hljs-attr">remote:</span>           <span class="hljs-comment"># remote image handling (set to `false` to disable)</span>
        <span class="hljs-attr">fallback:</span>         <span class="hljs-comment"># path to the fallback image, stored in assets dir (empty by default)</span></code></pre>
<aside class="note note-warning"><p>Since version <ins>8.41.0</ins>, the <code translate="no">pages.body.images.resize</code> option is used to resize images to a specific width, no more to enable the resize feature (enabled systematically).</p></aside>
<aside class="note note-important"><p>Global options, like responsives images widths and sizes, are configurable in the <a href="/documentation/configuration/assets/#assets-images"><code translate="no">assets.images</code></a> section.</p></aside>
<aside class="note note-info"><p>Remote images are downloaded and converted into <em>Assets</em> to be manipulated. You can disable this behavior by setting the option <code translate="no">pages.body.images.remote.enabled</code> to <code translate="no">false</code>.</p></aside>
<aside class="note note-tip"><p>When <code translate="no">dark_suffix</code> is set (e.g. <code translate="no">dark_suffix: .dark</code>), Cecil automatically looks for a dark variant of each image (e.g. <code translate="no">photo.dark.jpg</code> alongside <code translate="no">photo.jpg</code>). If found, the image is wrapped in a <code translate="no">&lt;picture&gt;</code> element with a <code translate="no">&lt;source media="(prefers-color-scheme: dark)"&gt;</code> for automatic light/dark theme switching. Works in combination with <code translate="no">formats</code> and <code translate="no">responsive</code>.
In the same way, when <code translate="no">mobile_suffix</code> is set (e.g. <code translate="no">mobile_suffix: .mobile</code>), Cecil looks for a mobile variant of each image (e.g. <code translate="no">photo.mobile.jpg</code> alongside <code translate="no">photo.jpg</code>) and adds a <code translate="no">&lt;source&gt;</code> element with the <code translate="no">mobile_media_query</code> media query (<code translate="no">(max-width: 767px)</code> by default). If <code translate="no">dark_suffix</code> is also set, the dark variant of the mobile image (e.g. <code translate="no">photo.mobile.dark.jpg</code>) is used on mobile with dark color scheme. Mobile sources are placed before dark sources, so that a mobile variant takes precedence.</p></aside>
<h3 id="pages-body-links">pages.body.links</h3>
<p>Links handling options.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">body:</span>
    <span class="hljs-attr">links:</span>
      <span class="hljs-attr">embed:</span>
        <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span>     <span class="hljs-comment"># turns links in embedded content if possible (`false` by default)</span>
        <span class="hljs-attr">video:</span> <span class="hljs-string">[mp4,</span> <span class="hljs-string">webm]</span> <span class="hljs-comment"># video files extensions</span>
        <span class="hljs-attr">audio:</span> <span class="hljs-string">[mp3]</span>       <span class="hljs-comment"># audio files extensions</span>
      <span class="hljs-attr">external:</span>
        <span class="hljs-attr">blank:</span> <span class="hljs-literal">false</span>     <span class="hljs-comment"># if true open external link in new tab</span>
        <span class="hljs-attr">noopener:</span> <span class="hljs-literal">true</span>   <span class="hljs-comment"># if true add "noopener" to `rel` attribute</span>
        <span class="hljs-attr">noreferrer:</span> <span class="hljs-literal">true</span> <span class="hljs-comment"># if true add "noreferrer" to `rel` attribute</span>
        <span class="hljs-attr">nofollow:</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># if true add "nofollow" to `rel` attribute</span></code></pre>
<h3 id="pages-body-excerpt">pages.body.excerpt</h3>
<p>Excerpt handling options.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">body:</span>
    <span class="hljs-attr">excerpt:</span>
      <span class="hljs-attr">separator:</span> <span class="hljs-string">excerpt|break</span> <span class="hljs-comment"># string to use as separator (`excerpt|break` by default)</span>
      <span class="hljs-attr">capture:</span> <span class="hljs-string">before</span>          <span class="hljs-comment"># part to capture, `before` or `after` the separator (`before` by default)</span></code></pre>
<h2 id="pages-virtual">pages.virtual</h2>
<p>Virtual pages is the best way to create pages without content (<strong>front matter only</strong>).</p>
<p>It consists of a list of pages with a <code translate="no">path</code> and some front matter variables.</p>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">virtual:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">code</span>
      <span class="hljs-attr">redirect:</span> <span class="hljs-string">https://github.com/ArnaudLigny</span></code></pre>
<h2 id="pages-default">pages.default</h2>
<p>Default pages are pages created automatically by Cecil (from built-in templates):</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">default:</span>
    <span class="hljs-attr">index:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">''</span>
      <span class="hljs-attr">title:</span> <span class="hljs-string">Home</span>
      <span class="hljs-attr">published:</span> <span class="hljs-literal">true</span>
    <span class="hljs-attr">404:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-number">404</span>
      <span class="hljs-attr">title:</span> <span class="hljs-string">Page</span> <span class="hljs-string">not</span> <span class="hljs-string">found</span>
      <span class="hljs-attr">layout:</span> <span class="hljs-number">404</span>
      <span class="hljs-attr">uglyurl:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">published:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">excluded:</span> <span class="hljs-literal">true</span>
    <span class="hljs-attr">robots:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">robots</span>
      <span class="hljs-attr">title:</span> <span class="hljs-string">Robots.txt</span>
      <span class="hljs-attr">layout:</span> <span class="hljs-string">robots</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">txt</span>
      <span class="hljs-attr">published:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">excluded:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">multilingual:</span> <span class="hljs-literal">false</span>
    <span class="hljs-attr">sitemap:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">sitemap</span>
      <span class="hljs-attr">title:</span> <span class="hljs-string">XML</span> <span class="hljs-string">sitemap</span>
      <span class="hljs-attr">layout:</span> <span class="hljs-string">sitemap</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">xml</span>
      <span class="hljs-attr">changefreq:</span> <span class="hljs-string">monthly</span>
      <span class="hljs-attr">priority:</span> <span class="hljs-number">0.5</span>
      <span class="hljs-attr">published:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">excluded:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">multilingual:</span> <span class="hljs-literal">false</span>
    <span class="hljs-attr">xsl/atom:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">xsl/atom</span>
      <span class="hljs-attr">layout:</span> <span class="hljs-string">feed</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">xsl</span>
      <span class="hljs-attr">uglyurl:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">published:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">excluded:</span> <span class="hljs-literal">true</span>
    <span class="hljs-attr">xsl/rss:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">xsl/rss</span>
      <span class="hljs-attr">layout:</span> <span class="hljs-string">feed</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">xsl</span>
      <span class="hljs-attr">uglyurl:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">published:</span> <span class="hljs-literal">false</span>
      <span class="hljs-attr">excluded:</span> <span class="hljs-literal">true</span></code></pre>
<aside class="note note-info"><p>The structure is almost identical of <a href="#pages-virtual"><code translate="no">pages.virtual</code></a>, except the named key.</p></aside>
<p>Each one can be:</p>
<ol>
<li>disabled: <code translate="no">published: false</code></li>
<li>excluded from list pages: <code translate="no">excluded: true</code></li>
<li>excluded from localization: <code translate="no">multilingual: false</code></li>
</ol>
<aside class="note note-tip"><p>Since version 8.68.0 you can override the default <code translate="no">robots.txt</code> page by creating a page with the same <code translate="no">path</code>:
<em>pages/robots.md</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-meta">---</span>
<span class="hljs-attr">layout:</span> <span class="hljs-string">robots</span>
<span class="hljs-attr">output:</span> <span class="hljs-string">txt</span>
<span class="hljs-meta">---</span>
<span class="hljs-attr">User-agent:</span> <span class="hljs-string">AI-bot</span>
<span class="hljs-attr">Disallow:</span> <span class="hljs-string">/</span></code></pre></aside>
<h2 id="pages-generators">pages.generators</h2>
<p>Generators are used by Cecil to create additional pages (e.g.: sitemap, feed, pagination, etc.) from existing pages, or from other sources like the configuration file or external sources.</p>
<p>Below the list of Generators provided by Cecil, in a defined order:</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">generators:</span>
    <span class="hljs-attr">10:</span> <span class="hljs-string">'Cecil\Generator\DefaultPages'</span>
    <span class="hljs-attr">20:</span> <span class="hljs-string">'Cecil\Generator\VirtualPages'</span>
    <span class="hljs-attr">30:</span> <span class="hljs-string">'Cecil\Generator\ExternalBody'</span>
    <span class="hljs-attr">40:</span> <span class="hljs-string">'Cecil\Generator\Section'</span>
    <span class="hljs-attr">50:</span> <span class="hljs-string">'Cecil\Generator\Taxonomy'</span>
    <span class="hljs-attr">60:</span> <span class="hljs-string">'Cecil\Generator\Homepage'</span>
    <span class="hljs-attr">70:</span> <span class="hljs-string">'Cecil\Generator\Pagination'</span>
    <span class="hljs-attr">80:</span> <span class="hljs-string">'Cecil\Generator\Alias'</span>
    <span class="hljs-attr">90:</span> <span class="hljs-string">'Cecil\Generator\Redirect'</span></code></pre>
<aside class="note note-tip"><p>You can extend Cecil with <a href="/documentation/developers/extend/#pages-generator">Pages generator</a>.</p></aside>
<h2 id="pages-subsets">pages.subsets</h2>
<p>Subsets are used to render a part of the pages collection, based on a specific path, language or output format, with the command:</p>
<pre><code class="language-bash hljs bash" translate="no">cecil build --render-subset=&lt;name&gt;</code></pre>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">subsets:</span>
    <span class="hljs-string">&lt;name&gt;:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">&lt;path&gt;</span> <span class="hljs-comment"># glob or string path (e.g.: `blog/*`, `blog`)</span>
      <span class="hljs-attr">language:</span> <span class="hljs-string">&lt;language&gt;</span> <span class="hljs-comment"># language code (e.g.: `en`, `fr`)</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">&lt;output&gt;</span> <span class="hljs-comment"># output format (e.g.: `html`, `atom`)</span></code></pre>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">subsets:</span>
    <span class="hljs-attr">blog_en:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">blog</span>
      <span class="hljs-attr">language:</span> <span class="hljs-string">en</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">html</span>
    <span class="hljs-attr">search_index:</span>
      <span class="hljs-attr">path:</span> <span class="hljs-string">'*'</span>
      <span class="hljs-attr">output:</span> <span class="hljs-string">json</span></code></pre>
<hr>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/data-static/</id>
    <title>Data and static files</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/data-static/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Data and static files</h1>
<h2 id="data">Data</h2>
<p>Where data files are stored and what extensions are handled.</p>
<p>Supported formats: YAML, JSON, XML and CSV.</p>
<h3 id="data-dir">data.dir</h3>
<p>Data source directory (<code translate="no">data</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">data:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">data</span></code></pre>
<h3 id="data-ext">data.ext</h3>
<p>Array of files extensions.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">data:</span>
  <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>
<h3 id="data-load">data.load</h3>
<p>Enables <code translate="no">site.data</code> collection (<code translate="no">true</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">data:</span>
  <span class="hljs-attr">load:</span> <span class="hljs-literal">true</span></code></pre>
<hr>
<h2 id="static">Static</h2>
<p>Management of static files are copied (PDF, fonts, etc.).</p>
<aside class="note note-important"><p>You should put your assets files, used by <a href="/documentation/assets/#asset"><code translate="no">asset()</code></a>, in the <a href="/documentation/configuration/assets/#assets-dir"><code translate="no">assets</code> directory</a> to avoid unnecessary files copy.</p></aside>
<h3 id="static-dir">static.dir</h3>
<p>Static files source directory (<code translate="no">static</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">static:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">static</span></code></pre>
<h3 id="static-target">static.target</h3>
<p>Directory where static files are copied (root by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">static:</span>
  <span class="hljs-attr">target:</span> <span class="hljs-string">''</span></code></pre>
<h3 id="static-exclude">static.exclude</h3>
<p>List of excluded files. Accepts globs, strings and regexes.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">static:</span>
  <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>
<aside class="note note-tip"><p>If you use <a href="https://icons.getbootstrap.com" target="_blank" rel="noopener noreferrer">Bootstrap Icons</a> you can exclude the <code translate="no">node_modules</code> except <code translate="no">node_modules/bootstrap-icons</code> with a regular expression:</p>
<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>
<h3 id="static-load">static.load</h3>
<p>Enables <code translate="no">site.static</code> collection (<code translate="no">false</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">static:</span>
  <span class="hljs-attr">load:</span> <span class="hljs-literal">false</span></code></pre>
<h3 id="static-mounts">static.mounts</h3>
<p>Allows to copy specific files or directories to a specific destination.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">static:</span>
  <span class="hljs-attr">mounts:</span> <span class="hljs-string">[]</span></code></pre>
<h3 id="static-example">static example</h3>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">static:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">docs</span>
  <span class="hljs-attr">target:</span> <span class="hljs-string">docs</span>
  <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>
  <span class="hljs-attr">load:</span> <span class="hljs-literal">true</span>
  <span class="hljs-attr">mounts:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">source/path/file.ext:</span> <span class="hljs-string">dest/path/file.ext</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">node_modules/bootstrap-icons/font/fonts:</span> <span class="hljs-string">fonts</span></code></pre>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/assets/</id>
    <title>Assets</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/assets/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Assets</h1>
<p>Assets management (images, CSS and JS files).</p>
<h2 id="assets-dir">assets.dir</h2>
<p>Assets source directory (<code translate="no">assets</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">assets</span></code></pre>
<h2 id="assets-target">assets.target</h2>
<p>Directory where remote and resized assets files are saved (root by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">target:</span> <span class="hljs-string">''</span></code></pre>
<h2 id="assets-fingerprint">assets.fingerprint</h2>
<p>Enables fingerprinting (cache busting) for assets files (<code translate="no">true</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">fingerprint:</span> <span class="hljs-literal">true</span></code></pre>
<h2 id="assets-compile">assets.compile</h2>
<p>Enables <a href="https://sass-lang.com" target="_blank" rel="noopener noreferrer">Sass</a> files compilation (<code translate="no">true</code> by default). See the <a href="https://scssphp.github.io/scssphp/docs/#output-formatting" target="_blank" rel="noopener noreferrer">documentation of scssphp</a> for options details.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">compile:</span>
    <span class="hljs-attr">style:</span> <span class="hljs-string">expanded</span>      <span class="hljs-comment"># compilation style (`expanded` or `compressed`. `expanded` by default)</span>
    <span class="hljs-attr">import:</span> <span class="hljs-string">[sass,</span> <span class="hljs-string">scss]</span> <span class="hljs-comment"># list of imported paths (`[sass, scss, node_modules]` by default)</span>
    <span class="hljs-attr">sourcemap:</span> <span class="hljs-literal">false</span>     <span class="hljs-comment"># enables sourcemap in debug mode (`false` by default)</span>
    <span class="hljs-attr">variables:</span> <span class="hljs-string">[]</span>        <span class="hljs-comment"># list of preset variables (empty by default)</span></code></pre>
<aside class="note note-info"><p><code translate="no">sourcemap</code> is used to debug SCSS compilation (<a href="/documentation/configuration/site/#debug">debug mode</a> must be enabled).</p></aside>
<h2 id="assets-minify">assets.minify</h2>
<p>Enables CSS and JS minification (<code translate="no">true</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">minify:</span> <span class="hljs-literal">true</span></code></pre>
<h2 id="assets-images">assets.images</h2>
<p>Images management.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">optimize:</span> <span class="hljs-literal">false</span> <span class="hljs-comment"># enables images optimization with JpegOptim, Optipng, Pngquant 2, SVGO 1, Gifsicle, cwebp, avifenc (`false` by default)</span>
    <span class="hljs-attr">quality:</span> <span class="hljs-number">75</span>     <span class="hljs-comment"># image quality of `optimize` and `resize` (`75` by default)</span>
    <span class="hljs-attr">responsive:</span>
      <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"># `srcset` attribute images widths</span>
      <span class="hljs-attr">sizes:</span>
        <span class="hljs-attr">default:</span> <span class="hljs-string">'100vw'</span> <span class="hljs-comment"># default `sizes` attribute (`100vw` by default)</span></code></pre>
<h2 id="assets-images-cdn">assets.images.cdn</h2>
<p>URL of image assets can be easily replaced by a provided CDN <code translate="no">url</code>.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">cdn:</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># enables Image CDN (`false` by default)</span>
      <span class="hljs-attr">canonical:</span> <span class="hljs-literal">true</span> <span class="hljs-comment"># `image_url` is canonical (instead of a relative path) (`true` by default)</span>
      <span class="hljs-attr">remote:</span> <span class="hljs-literal">true</span>    <span class="hljs-comment"># handles not local images too (`true` by default)</span>
      <span class="hljs-attr">account:</span> <span class="hljs-string">'xxxx'</span> <span class="hljs-comment"># provider account</span>
      <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>
<p><code translate="no">url</code> is a pattern that contains variables:</p>
<ul>
<li><code translate="no">%account%</code> replaced by the <code translate="no">assets.images.cdn.account</code> option</li>
<li><code translate="no">%image_url%</code> replaced by the image canonical URL or <code translate="no">path</code></li>
<li><code translate="no">%width%</code> replaced by the image width</li>
<li><code translate="no">%quality%</code> replaced by the <code translate="no">assets.images.quality</code> option</li>
<li><code translate="no">%format%</code> replaced by the image format</li>
</ul>
<p>See <a href="/documentation/assets/cdn-providers/"><strong>CDN providers</strong></a>.</p>
<h2 id="assets-remote-useragent">assets.remote.useragent</h2>
<p>User agent used to download remote assets.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">remote:</span>
    <span class="hljs-attr">useragent:</span>
      <span class="hljs-attr">default:</span> <span class="hljs-string">&lt;string&gt;</span> <span class="hljs-comment"># default user agent</span>
      <span class="hljs-attr">useragent1:</span> <span class="hljs-string">&lt;string&gt;</span>
      <span class="hljs-attr">useragent2:</span> <span class="hljs-string">&lt;string&gt;</span></code></pre>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/layouts/</id>
    <title>Layouts</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/layouts/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Layouts</h1>
<p>Templates options.</p>
<h2 id="layouts-dir">layouts.dir</h2>
<p>Templates directory source (<code translate="no">layouts</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">layouts</span></code></pre>
<h2 id="layouts-autoescape">layouts.autoescape</h2>
<p>Overrides Twig <code translate="no">autoescape</code> option (<code translate="no">false</code> by default).</p>
<p>If set to <code translate="no">null</code>, Cecil uses an extension-based strategy:</p>
<ul>
<li><code translate="no">*.js.twig</code> -&gt; <code translate="no">js</code></li>
<li><code translate="no">*.css.twig</code> -&gt; <code translate="no">css</code></li>
<li><code translate="no">*.html.twig</code> and <code translate="no">*.twig</code> -&gt; <code translate="no">html</code></li>
<li>any other extension -&gt; <code translate="no">false</code></li>
</ul>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">autoescape:</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># disables automatic escaping (default) </span>
  <span class="hljs-comment">#autoescape: null  # use Cecil automatic strategy by template filename extension </span>
  <span class="hljs-comment">#autoescape: html</span>
  <span class="hljs-comment">#autoescape: js</span></code></pre>
<h2 id="layouts-images">layouts.images</h2>
<p>Images handling options.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">formats:</span> <span class="hljs-string">[]</span>       <span class="hljs-comment"># used by `html` function: adds alternatives image formats as `source` (e.g. `[avif, webp]`, empty array by default)</span>
    <span class="hljs-attr">responsive:</span> <span class="hljs-literal">false</span> <span class="hljs-comment"># used by `html` function: adds responsive images ('width' or 'density', `false` by default)</span>
    <span class="hljs-attr">placeholder:</span> <span class="hljs-string">''</span>   <span class="hljs-comment"># used by `html` function: fills image background before loading (`color` or `lqip`, disabled by default)</span>
    <span class="hljs-attr">dark_suffix:</span> <span class="hljs-string">''</span>   <span class="hljs-comment"># suffix of the dark variant image (e.g. `.dark`), disabled by default</span>
    <span class="hljs-attr">mobile_suffix:</span> <span class="hljs-string">''</span> <span class="hljs-comment"># suffix of the mobile variant image (e.g. `.mobile`), disabled by default</span>
    <span class="hljs-attr">mobile_media_query:</span> <span class="hljs-string">'(max-width: 767px)'</span> <span class="hljs-comment"># media query of the mobile variant `&lt;source&gt;`</span></code></pre>
<h2 id="layouts-translations">layouts.translations</h2>
<p>Translations handling options.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">translations:</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">translations</span> <span class="hljs-comment"># translations source directory (`translations` by default)</span>
    <span class="hljs-attr">formats:</span>          <span class="hljs-comment"># translations supported formats</span>
      <span class="hljs-attr">yaml:</span>
        <span class="hljs-attr">loader:</span> <span class="hljs-string">Symfony\Component\Translation\Loader\YamlFileLoader</span>
        <span class="hljs-attr">ext:</span> <span class="hljs-string">[yml,</span> <span class="hljs-string">yaml]</span>
      <span class="hljs-attr">mo:</span>
        <span class="hljs-attr">loader:</span> <span class="hljs-string">Symfony\Component\Translation\Loader\MoFileLoader</span>
        <span class="hljs-attr">ext:</span> <span class="hljs-string">[mo]</span></code></pre>
<p>Each translation format defines:</p>
<ul>
<li><code translate="no">loader</code>: Symfony translation loader class</li>
<li><code translate="no">ext</code>: one or more file extensions associated with this format</li>
</ul>
<h2 id="layouts-components">layouts.components</h2>
<p><a href="/documentation/templates/components/">Templates Components</a> options.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">components:</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">components</span> <span class="hljs-comment"># components source directory (`components` by default)</span>
    <span class="hljs-attr">ext:</span> <span class="hljs-string">twig</span>       <span class="hljs-comment"># components files extension (`twig` by default)</span></code></pre>
<h2 id="layouts-sections">layouts.sections</h2>
<p>Maps a section to the layouts of another section: the mapped name is used in place of <code translate="no">&lt;section&gt;</code> by the <a href="/documentation/templates/lookup-rules/#lookup-rules">lookup rules</a> of the section and of its pages.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">sections:</span>
    <span class="hljs-attr">news:</span> <span class="hljs-string">blog</span> <span class="hljs-comment"># the "news" section is rendered with `blog/list.html.twig` and its pages with `blog/page.html.twig`</span></code></pre>
<aside class="note note-tip"><p>A <a href="/documentation/content/pages/#sub-section">sub-section</a> already falls back to the layouts of its parent sections: no mapping is needed for that.</p></aside>
<hr>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/output/</id>
    <title>Output</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/output/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Output</h1>
<p>Defines where and in what format pages are rendered.</p>
<h2 id="output-dir">output.dir</h2>
<p>Directory where rendered pages’ files are saved (<code translate="no">_site</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">output:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">_site</span></code></pre>
<h2 id="output-formats">output.formats</h2>
<p>List of output formats definition, which are used to render pages (e.g. HTML, Atom, RSS, JSON, XML, etc.).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">output:</span>
  <span class="hljs-attr">formats:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">&lt;name&gt;</span>            <span class="hljs-comment"># name of the format, e.g.: `html` (required)</span>
      <span class="hljs-attr">mediatype:</span> <span class="hljs-string">&lt;media</span> <span class="hljs-string">type&gt;</span> <span class="hljs-comment"># media type (MIME type), ie: 'text/html' (optional)</span>
      <span class="hljs-attr">subpath:</span> <span class="hljs-string">&lt;sub</span> <span class="hljs-string">path&gt;</span>     <span class="hljs-comment"># sub path, e.g.: `amp` in `path/amp/index.html` (optional)</span>
      <span class="hljs-attr">filename:</span> <span class="hljs-string">&lt;file</span> <span class="hljs-string">name&gt;</span>   <span class="hljs-comment"># file name, e.g.: `index` in `path/index.html` (optional)</span>
      <span class="hljs-attr">extension:</span> <span class="hljs-string">&lt;extension&gt;</span>  <span class="hljs-comment"># file extension, e.g.: `html` in `path/index.html` (required)</span>
      <span class="hljs-attr">exclude:</span> <span class="hljs-string">[&lt;variable&gt;]</span>   <span class="hljs-comment"># don’t apply this format to pages identified by listed variables, e.g.: `[redirect, paginated]` (optional)</span></code></pre>
<p>Those formats are used in the <a href="#output-pagetypeformats"><code translate="no">output.pagetypeformats</code></a> configuration and in the <a href="/documentation/content/front-matter/#output"><code translate="no">output</code> page variable</a>.</p>
<h3 id="default-formats">Default formats</h3>
<p>Cecil provides some <a href="https://github.com/Cecilapp/Cecil/blob/main/config/base.php#L81-L162" target="_blank" rel="noopener noreferrer">default formats</a>, which can be overridden in the configuration file: <code translate="no">html</code> (default), <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>
<h2 id="output-pagetypeformats">output.pagetypeformats</h2>
<p>It’s not required to set <code translate="no">output</code> variable for each page, as Cecil automatically applies the formats defined for each page type (<code translate="no">homepage</code>, <code translate="no">page</code>, <code translate="no">section</code>, <code translate="no">vocabulary</code> and <code translate="no">term</code>).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">output:</span>
  <span class="hljs-attr">pagetypeformats:</span>
    <span class="hljs-attr">page:</span> <span class="hljs-string">[&lt;format&gt;]</span>
    <span class="hljs-attr">homepage:</span> <span class="hljs-string">[&lt;format&gt;]</span>
    <span class="hljs-attr">section:</span> <span class="hljs-string">[&lt;format&gt;]</span>
    <span class="hljs-attr">vocabulary:</span> <span class="hljs-string">[&lt;format&gt;]</span>
    <span class="hljs-attr">term:</span> <span class="hljs-string">[&lt;format&gt;]</span></code></pre>
<p>Several formats can be defined for the one type of page. For example the <code translate="no">section</code> page type can be automatically rendered in HTML and Atom:</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">output:</span>
  <span class="hljs-attr">pagetypeformats:</span>
    <span class="hljs-attr">section:</span> <span class="hljs-string">[html,</span> <span class="hljs-string">atom]</span></code></pre>
<aside class="note note-info"><p>To render a page, <a href="/documentation/templates/lookup-rules/#lookup-rules">Cecil lookup for a template</a> named <code translate="no">&lt;layout&gt;.&lt;format&gt;.twig</code> (e.g. <code translate="no">page.html.twig</code>)</p></aside>
<h2 id="output-example">output example</h2>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">output:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">_site</span>
  <span class="hljs-attr">formats:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">html</span>
      <span class="hljs-attr">mediatype:</span> <span class="hljs-string">text/html</span>
      <span class="hljs-attr">filename:</span> <span class="hljs-string">index</span>
      <span class="hljs-attr">extension:</span> <span class="hljs-string">html</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">atom</span>
      <span class="hljs-attr">mediatype:</span> <span class="hljs-string">application/xml</span>
      <span class="hljs-attr">filename:</span> <span class="hljs-string">atom</span>
      <span class="hljs-attr">extension:</span> <span class="hljs-string">xml</span>
      <span class="hljs-attr">exclude:</span> <span class="hljs-string">[redirect,</span> <span class="hljs-string">paginated]</span>
  <span class="hljs-attr">pagetypeformats:</span>
    <span class="hljs-attr">page:</span> <span class="hljs-string">[html]</span>
    <span class="hljs-attr">homepage:</span> <span class="hljs-string">[html,</span> <span class="hljs-string">atom]</span>
    <span class="hljs-attr">section:</span> <span class="hljs-string">[html,</span> <span class="hljs-string">atom]</span>
    <span class="hljs-attr">vocabulary:</span> <span class="hljs-string">[html]</span>
    <span class="hljs-attr">term:</span> <span class="hljs-string">[html,</span> <span class="hljs-string">atom]</span></code></pre>
<h2 id="post-process">Post process</h2>
<p>You can extend Cecil capabilities with an <a href="/documentation/developers/extend/#output-post-processor">Output post processor</a> to modify the output files after they have been generated.</p>
<hr>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/cache/</id>
    <title>Cache</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/cache/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Cache</h1>
<p>Cache options.</p>
<h2 id="cache-enabled">cache.enabled</h2>
<p>Cache is enabled by default (<code translate="no">true</code>), but you can disable it with:</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span></code></pre>
<aside class="note note-warning"><p>It’s not recommended to disable the cache for performance reasons.</p></aside>
<h2 id="cache-dir">cache.dir</h2>
<p>Directory where cache files are stored (<code translate="no">.cache</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">'.cache'</span></code></pre>
<aside class="note note-info"><p>The cache directory is relative to the site directory, but you can use an absolute path: it can be useful to store the cache in a shared directory.</p></aside>
<h2 id="cache-assets">cache.assets</h2>
<p>Assets cache options.</p>
<h3 id="cache-assets-ttl">cache.assets.ttl</h3>
<p>Time to live of assets cache in seconds (<code translate="no">null</code> by default = no expiration).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">assets:</span>
    <span class="hljs-attr">ttl:</span> <span class="hljs-string">~</span></code></pre>
<h3 id="cache-assets-remote-ttl">cache.assets.remote.ttl</h3>
<p>Time to live of remote assets cache in seconds (7 days by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">assets:</span>
    <span class="hljs-attr">remotes:</span>
      <span class="hljs-attr">ttl:</span> <span class="hljs-number">604800</span> <span class="hljs-comment"># 7 days</span></code></pre>
<h2 id="cache-templates">cache.templates</h2>
<p>Disables templates cache with <code translate="no">false</code> (<code translate="no">true</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">templates:</span> <span class="hljs-literal">true</span></code></pre>
<aside class="note note-info"><p>See <a href="/documentation/templates/cache/">templates cache documentation</a> for more details.</p></aside>
<h2 id="cache-translations">cache.translations</h2>
<p>Disables translations cache  with <code translate="no">false</code> (<code translate="no">true</code> by default).</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">translations:</span> <span class="hljs-literal">true</span></code></pre>
<hr>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/server/</id>
    <title>Server and optimization</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/server/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Server and optimization</h1>
<h2 id="server">Server</h2>
<h3 id="server-headers">server.headers</h3>
<p>You can define custom <a href="https://developer.mozilla.org/docs/Glossary/Response_header" target="_blank" rel="noopener noreferrer">HTTP headers</a>, used by the local preview server.</p>
<aside class="note note-warning"><p>Since version <ins>8.38.0</ins>, the <code translate="no">headers</code> option has been moved to the <code translate="no">server.headers</code> section.</p></aside>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">server:</span>
  <span class="hljs-attr">headers:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">&lt;path&gt;</span> <span class="hljs-comment"># Relative path, prefixed with a slash. Support "*" wildcard.</span>
      <span class="hljs-attr">headers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">&lt;key&gt;</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"&lt;value&gt;"</span></code></pre>
<aside class="note note-tip"><p>It's useful to test custom <a href="https://developer.mozilla.org/docs/Web/HTTP/CSP" target="_blank" rel="noopener noreferrer">Content Security Policy</a> or <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control" target="_blank" rel="noopener noreferrer">Cache-Control</a>.</p></aside>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">server:</span>
  <span class="hljs-attr">headers:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">/*</span>
      <span class="hljs-attr">headers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">X-Frame-Options</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"SAMEORIGIN"</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">X-XSS-Protection</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"1; mode=block"</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">X-Content-Type-Options</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"nosniff"</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">Content-Security-Policy</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"default-src 'self'; object-src 'self'; img-src 'self'"</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">Strict-Transport-Security</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"max-age=31536000; includeSubDomains; preload"</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">/assets/*</span>
      <span class="hljs-attr">headers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">Cache-Control</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"public, max-age=31536000"</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">/foo.html</span>
      <span class="hljs-attr">headers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">key:</span> <span class="hljs-string">Foo</span>
          <span class="hljs-attr">value:</span> <span class="hljs-string">"bar"</span></code></pre>
<hr>
<h2 id="optimize">Optimize</h2>
<p>The optimization options allow to enable compression of output files: HTML, CSS, JavaScript and image.</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">optimize:</span>
  <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span>     <span class="hljs-comment"># enables files optimization (`false` by default)</span>
  <span class="hljs-attr">html:</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>    <span class="hljs-comment"># enables HTML files optimization</span>
    <span class="hljs-attr">ext:</span> <span class="hljs-string">[html,</span> <span class="hljs-string">htm]</span>   <span class="hljs-comment"># supported files extensions</span>
  <span class="hljs-attr">css:</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>    <span class="hljs-comment"># enables CSS files optimization</span>
    <span class="hljs-attr">ext:</span> <span class="hljs-string">[css]</span>         <span class="hljs-comment"># supported files extensions</span>
  <span class="hljs-attr">js:</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>    <span class="hljs-comment"># enables JavaScript files optimization</span>
    <span class="hljs-attr">ext:</span> <span class="hljs-string">[js]</span>          <span class="hljs-comment"># supported files extensions</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>    <span class="hljs-comment"># enables images files optimization</span>
    <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"># supported files extensions</span></code></pre>
<p>This option is disabled by default and can be enabled via:</p>
<pre><code class="language-yaml hljs yaml" translate="no"><span class="hljs-attr">optimize:</span> <span class="hljs-literal">true</span></code></pre>
<p>Once the global option is enabled, the 4 file types will be processed.<br>
It is possible to disable each of them via <code translate="no">enabled: false</code> and modify processed files extension via <code translate="no">ext</code>.</p>
<aside class="note note-tip"><p>It is also possible to enable this option through CLI when using the "build" and "serve" commands via the <code translate="no">--optimize</code> option.</p></aside>
<aside class="note note-important"><p><strong>Images</strong> compressor will use these binaries if they are present in the system: <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> and <a href="https://github.com/AOMediaCodec/libavif" target="_blank" rel="noopener noreferrer">avifenc</a>.</p></aside>
<hr>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/override/</id>
    <title>Override configuration</title>
    <published>2021-05-07T00:00:00+00:00</published>
    <updated>2026-10-05T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/override/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Override configuration</h1>
<h2 id="environment-variables">Environment variables</h2>
<p>The configuration can be overridden through <a href="https://en.wikipedia.org/wiki/Environment_variable" target="_blank" rel="noopener noreferrer">environment variables</a>.</p>
<p>At startup, Cecil also attempts to load a <code translate="no">.env</code> file from the current site path (the current working directory, or the <code translate="no">&lt;path&gt;</code> argument if provided).</p>
<ul>
<li>If the <code translate="no">.env</code> file does not exist, Cecil continues normally.</li>
<li>Variables already defined by the shell/system are preserved.</li>
</ul>
<p>Each environment variable name must be prefixed with <code translate="no">CECIL_</code> and the configuration key must be set in uppercase.</p>
<p>For example, the following command set the website’s <code translate="no">baseurl</code>:</p>
<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>
<p>You can store the same value in a <code translate="no">.env</code> file at your project root:</p>
<pre><code class="language-dotenv" translate="no">CECIL_BASEURL="https://example.com/"
CECIL_TITLE="My Cecil site"</code></pre>
<h2 id="cli-option">CLI option</h2>
<p>You can combine multiple configuration files, with the <code translate="no">--config</code> option (left-to-right precedence):</p>
<pre><code class="language-bash hljs bash" translate="no">php cecil.phar --config config-1.yml,config-2.yml</code></pre>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/documentation/configuration/locale-codes/</id>
    <title>Locale codes</title>
    <published>2020-12-19T00:00:00+00:00</published>
    <updated>2026-10-02T00:00:00+00:00</updated>
    <link href="https://cecil.app/documentation/configuration/locale-codes/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h1>Locale codes</h1>
<p>Available locale codes (<code translate="no">language_COUNTRY</code>) used by the <a href="/documentation/configuration/languages/#languages"><code translate="no">languages</code></a> option.</p>
<table>
<thead>
<tr>
<th>Locale</th>
<th>Code</th>
</tr>
</thead>
<tbody>
<tr>
<td>Albanian (Albania)</td>
<td>sq_AL</td>
</tr>
<tr>
<td>Albanian</td>
<td>sq</td>
</tr>
<tr>
<td>Arabic (Algeria)</td>
<td>ar_DZ</td>
</tr>
<tr>
<td>Arabic (Bahrain)</td>
<td>ar_BH</td>
</tr>
<tr>
<td>Arabic (Egypt)</td>
<td>ar_EG</td>
</tr>
<tr>
<td>Arabic (Iraq)</td>
<td>ar_IQ</td>
</tr>
<tr>
<td>Arabic (Jordan)</td>
<td>ar_JO</td>
</tr>
<tr>
<td>Arabic (Kuwait)</td>
<td>ar_KW</td>
</tr>
<tr>
<td>Arabic (Lebanon)</td>
<td>ar_LB</td>
</tr>
<tr>
<td>Arabic (Libya)</td>
<td>ar_LY</td>
</tr>
<tr>
<td>Arabic (Morocco)</td>
<td>ar_MA</td>
</tr>
<tr>
<td>Arabic (Oman)</td>
<td>ar_OM</td>
</tr>
<tr>
<td>Arabic (Qatar)</td>
<td>ar_QA</td>
</tr>
<tr>
<td>Arabic (Saudi Arabia)</td>
<td>ar_SA</td>
</tr>
<tr>
<td>Arabic (Sudan)</td>
<td>ar_SD</td>
</tr>
<tr>
<td>Arabic (Syria)</td>
<td>ar_SY</td>
</tr>
<tr>
<td>Arabic (Tunisia)</td>
<td>ar_TN</td>
</tr>
<tr>
<td>Arabic (United Arab Emirates)</td>
<td>ar_AE</td>
</tr>
<tr>
<td>Arabic (Yemen)</td>
<td>ar_YE</td>
</tr>
<tr>
<td>Arabic</td>
<td>ar</td>
</tr>
<tr>
<td>Belarusian (Belarus)</td>
<td>be_BY</td>
</tr>
<tr>
<td>Belarusian</td>
<td>be</td>
</tr>
<tr>
<td>Bulgarian (Bulgaria)</td>
<td>bg_BG</td>
</tr>
<tr>
<td>Bulgarian</td>
<td>bg</td>
</tr>
<tr>
<td>Catalan (Spain)</td>
<td>ca_ES</td>
</tr>
<tr>
<td>Catalan</td>
<td>ca</td>
</tr>
<tr>
<td>Chinese (China)</td>
<td>zh_CN</td>
</tr>
<tr>
<td>Chinese (Hong Kong)</td>
<td>zh_HK</td>
</tr>
<tr>
<td>Chinese (Singapore)</td>
<td>zh_SG</td>
</tr>
<tr>
<td>Chinese (Taiwan)</td>
<td>zh_TW</td>
</tr>
<tr>
<td>Chinese</td>
<td>zh</td>
</tr>
<tr>
<td>Croatian (Croatia)</td>
<td>hr_HR</td>
</tr>
<tr>
<td>Croatian</td>
<td>hr</td>
</tr>
<tr>
<td>Czech (Czech Republic)</td>
<td>cs_CZ</td>
</tr>
<tr>
<td>Czech</td>
<td>cs</td>
</tr>
<tr>
<td>Danish (Denmark)</td>
<td>da_DK</td>
</tr>
<tr>
<td>Danish</td>
<td>da</td>
</tr>
<tr>
<td>Dutch (Belgium)</td>
<td>nl_BE</td>
</tr>
<tr>
<td>Dutch (Netherlands)</td>
<td>nl_NL</td>
</tr>
<tr>
<td>Dutch</td>
<td>nl</td>
</tr>
<tr>
<td>English (Australia)</td>
<td>en_AU</td>
</tr>
<tr>
<td>English (Canada)</td>
<td>en_CA</td>
</tr>
<tr>
<td>English (India)</td>
<td>en_IN</td>
</tr>
<tr>
<td>English (Ireland)</td>
<td>en_IE</td>
</tr>
<tr>
<td>English (Malta)</td>
<td>en_MT</td>
</tr>
<tr>
<td>English (New Zealand)</td>
<td>en_NZ</td>
</tr>
<tr>
<td>English (Philippines)</td>
<td>en_PH</td>
</tr>
<tr>
<td>English (Singapore)</td>
<td>en_SG</td>
</tr>
<tr>
<td>English (South Africa)</td>
<td>en_ZA</td>
</tr>
<tr>
<td>English (United Kingdom)</td>
<td>en_GB</td>
</tr>
<tr>
<td>English (United States)</td>
<td>en_US</td>
</tr>
<tr>
<td>English</td>
<td>en</td>
</tr>
<tr>
<td>Estonian (Estonia)</td>
<td>et_EE</td>
</tr>
<tr>
<td>Estonian</td>
<td>et</td>
</tr>
<tr>
<td>Finnish (Finland)</td>
<td>fi_FI</td>
</tr>
<tr>
<td>Finnish</td>
<td>fi</td>
</tr>
<tr>
<td>French (Belgium)</td>
<td>fr_BE</td>
</tr>
<tr>
<td>French (Canada)</td>
<td>fr_CA</td>
</tr>
<tr>
<td>French (France)</td>
<td>fr_FR</td>
</tr>
<tr>
<td>French (Luxembourg)</td>
<td>fr_LU</td>
</tr>
<tr>
<td>French (Switzerland)</td>
<td>fr_CH</td>
</tr>
<tr>
<td>French</td>
<td>fr</td>
</tr>
<tr>
<td>German (Austria)</td>
<td>de_AT</td>
</tr>
<tr>
<td>German (Germany)</td>
<td>de_DE</td>
</tr>
<tr>
<td>German (Luxembourg)</td>
<td>de_LU</td>
</tr>
<tr>
<td>German (Switzerland)</td>
<td>de_CH</td>
</tr>
<tr>
<td>German</td>
<td>de</td>
</tr>
<tr>
<td>Greek (Cyprus)</td>
<td>el_CY</td>
</tr>
<tr>
<td>Greek (Greece)</td>
<td>el_GR</td>
</tr>
<tr>
<td>Greek</td>
<td>el</td>
</tr>
<tr>
<td>Hebrew (Israel)</td>
<td>iw_IL</td>
</tr>
<tr>
<td>Hebrew</td>
<td>iw</td>
</tr>
<tr>
<td>Hindi (India)</td>
<td>hi_IN</td>
</tr>
<tr>
<td>Hungarian (Hungary)</td>
<td>hu_HU</td>
</tr>
<tr>
<td>Hungarian</td>
<td>hu</td>
</tr>
<tr>
<td>Icelandic (Iceland)</td>
<td>is_IS</td>
</tr>
<tr>
<td>Icelandic</td>
<td>is</td>
</tr>
<tr>
<td>Indonesian (Indonesia)</td>
<td>in_ID</td>
</tr>
<tr>
<td>Indonesian</td>
<td>in</td>
</tr>
<tr>
<td>Irish (Ireland)</td>
<td>ga_IE</td>
</tr>
<tr>
<td>Irish</td>
<td>ga</td>
</tr>
<tr>
<td>Italian (Italy)</td>
<td>it_IT</td>
</tr>
<tr>
<td>Italian (Switzerland)</td>
<td>it_CH</td>
</tr>
<tr>
<td>Italian</td>
<td>it</td>
</tr>
<tr>
<td>Japanese (Japan)</td>
<td>ja_JP</td>
</tr>
<tr>
<td>Japanese (Japan,JP)</td>
<td>ja_JP_JP</td>
</tr>
<tr>
<td>Japanese</td>
<td>ja</td>
</tr>
<tr>
<td>Korean (South Korea)</td>
<td>ko_KR</td>
</tr>
<tr>
<td>Korean</td>
<td>ko</td>
</tr>
<tr>
<td>Latvian (Latvia)</td>
<td>lv_LV</td>
</tr>
<tr>
<td>Latvian</td>
<td>lv</td>
</tr>
<tr>
<td>Lithuanian (Lithuania)</td>
<td>lt_LT</td>
</tr>
<tr>
<td>Lithuanian</td>
<td>lt</td>
</tr>
<tr>
<td>Macedonian (Macedonia)</td>
<td>mk_MK</td>
</tr>
<tr>
<td>Macedonian</td>
<td>mk</td>
</tr>
<tr>
<td>Malay (Malaysia)</td>
<td>ms_MY</td>
</tr>
<tr>
<td>Malay</td>
<td>ms</td>
</tr>
<tr>
<td>Maltese (Malta)</td>
<td>mt_MT</td>
</tr>
<tr>
<td>Maltese</td>
<td>mt</td>
</tr>
<tr>
<td>Norwegian (Norway)</td>
<td>no_NO</td>
</tr>
<tr>
<td>Norwegian (Norway,Nynorsk)</td>
<td>no_NO_NY</td>
</tr>
<tr>
<td>Norwegian</td>
<td>no</td>
</tr>
<tr>
<td>Polish (Poland)</td>
<td>pl_PL</td>
</tr>
<tr>
<td>Polish</td>
<td>pl</td>
</tr>
<tr>
<td>Portuguese (Brazil)</td>
<td>pt_BR</td>
</tr>
<tr>
<td>Portuguese (Portugal)</td>
<td>pt_PT</td>
</tr>
<tr>
<td>Portuguese</td>
<td>pt</td>
</tr>
<tr>
<td>Romanian (Romania)</td>
<td>ro_RO</td>
</tr>
<tr>
<td>Romanian</td>
<td>ro</td>
</tr>
<tr>
<td>Russian (Russia)</td>
<td>ru_RU</td>
</tr>
<tr>
<td>Russian</td>
<td>ru</td>
</tr>
<tr>
<td>Serbian (Bosnia and Herzegovina)</td>
<td>sr_BA</td>
</tr>
<tr>
<td>Serbian (Montenegro)</td>
<td>sr_ME</td>
</tr>
<tr>
<td>Serbian (Serbia and Montenegro)</td>
<td>sr_CS</td>
</tr>
<tr>
<td>Serbian (Serbia)</td>
<td>sr_RS</td>
</tr>
<tr>
<td>Serbian</td>
<td>sr</td>
</tr>
<tr>
<td>Slovak (Slovakia)</td>
<td>sk_SK</td>
</tr>
<tr>
<td>Slovak</td>
<td>sk</td>
</tr>
<tr>
<td>Slovenian (Slovenia)</td>
<td>sl_SI</td>
</tr>
<tr>
<td>Slovenian</td>
<td>sl</td>
</tr>
<tr>
<td>Spanish (Argentina)</td>
<td>es_AR</td>
</tr>
<tr>
<td>Spanish (Bolivia)</td>
<td>es_BO</td>
</tr>
<tr>
<td>Spanish (Chile)</td>
<td>es_CL</td>
</tr>
<tr>
<td>Spanish (Colombia)</td>
<td>es_CO</td>
</tr>
<tr>
<td>Spanish (Costa Rica)</td>
<td>es_CR</td>
</tr>
<tr>
<td>Spanish (Dominican Republic)</td>
<td>es_DO</td>
</tr>
<tr>
<td>Spanish (Ecuador)</td>
<td>es_EC</td>
</tr>
<tr>
<td>Spanish (El Salvador)</td>
<td>es_SV</td>
</tr>
<tr>
<td>Spanish (Guatemala)</td>
<td>es_GT</td>
</tr>
<tr>
<td>Spanish (Honduras)</td>
<td>es_HN</td>
</tr>
<tr>
<td>Spanish (Mexico)</td>
<td>es_MX</td>
</tr>
<tr>
<td>Spanish (Nicaragua)</td>
<td>es_NI</td>
</tr>
<tr>
<td>Spanish (Panama)</td>
<td>es_PA</td>
</tr>
<tr>
<td>Spanish (Paraguay)</td>
<td>es_PY</td>
</tr>
<tr>
<td>Spanish (Peru)</td>
<td>es_PE</td>
</tr>
<tr>
<td>Spanish (Puerto Rico)</td>
<td>es_PR</td>
</tr>
<tr>
<td>Spanish (Spain)</td>
<td>es_ES</td>
</tr>
<tr>
<td>Spanish (United States)</td>
<td>es_US</td>
</tr>
<tr>
<td>Spanish (Uruguay)</td>
<td>es_UY</td>
</tr>
<tr>
<td>Spanish (Venezuela)</td>
<td>es_VE</td>
</tr>
<tr>
<td>Spanish</td>
<td>es</td>
</tr>
<tr>
<td>Swedish (Sweden)</td>
<td>sv_SE</td>
</tr>
<tr>
<td>Swedish</td>
<td>sv</td>
</tr>
<tr>
<td>Thai (Thailand)</td>
<td>th_TH</td>
</tr>
<tr>
<td>Thai (Thailand,TH)</td>
<td>th_TH_TH</td>
</tr>
<tr>
<td>Thai</td>
<td>th</td>
</tr>
<tr>
<td>Turkish (Turkey)</td>
<td>tr_TR</td>
</tr>
<tr>
<td>Turkish</td>
<td>tr</td>
</tr>
<tr>
<td>Ukrainian (Ukraine)</td>
<td>uk_UA</td>
</tr>
<tr>
<td>Ukrainian</td>
<td>uk</td>
</tr>
<tr>
<td>Vietnamese (Vietnam)</td>
<td>vi_VN</td>
</tr>
<tr>
<td>Vietnamese</td>
<td>vi</td>
</tr>
</tbody>
</table>]]>
    </content>
  </entry>
</feed>
