{
  "version": "https://jsonfeed.org/version/1",
  "title": "Marmite 0.4.0",
  "home_page_url": "https://marmite.blog",
  "feed_url": "https://marmite.blog/tag-documentazione.json",
  "description": "Static Site Generator <br> <small>for blogs</small> <br> <small>made with ❤️ and 🦀</small>",
  "items": [
    {
      "id": "https://marmite.blog/language-streams-contenuti-multilingue.html",
      "url": "https://marmite.blog/language-streams-contenuti-multilingue.html",
      "title": "Language Streams - Contenuti Multilingue",
      "content_html": "<p>Marmite supporta siti multilingue attraverso le language streams. Ogni lingua diventa una stream con la propria pagina di elenco e feed RSS, mentre le traduzioni vengono automaticamente collegate con la navigazione &quot;Disponibile anche in&quot; e tag hreflang per la SEO.</p>\n<h2><a href=\"#come-funziona\" aria-hidden=\"true\" class=\"anchor\" id=\"come-funziona\"></a>Come Funziona</h2>\n<p>Le lingue vengono rilevate automaticamente dai contenuti. Basta impostare <code>language: xx</code> nel frontmatter oppure usare le convenzioni di denominazione delle sottocartelle, e marmite gestisce il resto - nessuna configurazione necessaria.</p>\n<p>Il campo <code>language</code> in <code>marmite.yaml</code> (valore predefinito <code>en</code>) determina la lingua predefinita del sito. I contenuti nella lingua predefinita rimangono su <code>index.html</code>. Le altre lingue ottengono le proprie pagine di stream (<code>pt.html</code>, <code>es.html</code>) e feed RSS (<code>pt.rss</code>, <code>es.rss</code>).</p>\n<h3><a href=\"#opzionale-nomi-di-visualizzazione\" aria-hidden=\"true\" class=\"anchor\" id=\"opzionale-nomi-di-visualizzazione\"></a>Opzionale: Nomi di Visualizzazione</h3>\n<p>Per impostazione predefinita, le language stream vengono etichettate con il loro codice a due lettere (ad esempio &quot;pt&quot;, &quot;es&quot;). Per impostare nomi leggibili, aggiungi una sezione opzionale <code>languages</code> in <code>marmite.yaml</code>:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-yaml\"><a-pr>language</a-pr><a-p>:</a-p> <a-s>en</a-s>\n<a-pr>languages</a-pr><a-p>:</a-p>\n  <a-pr>pt</a-pr><a-p>:</a-p>\n    <a-pr>display_name</a-pr><a-p>:</a-p> <a-s>&quot;Portugues&quot;</a-s>\n  <a-pr>es</a-pr><a-p>:</a-p>\n    <a-pr>display_name</a-pr><a-p>:</a-p> <a-s>&quot;Espanol&quot;</a-s></code></pre>\n<p>Questo segue lo stesso pattern di <code>streams:</code> e <code>series:</code> - la configurazione e puramente estetica. I siti senza contenuti multilingue non vengono influenzati in alcun modo.</p>\n<h2><a href=\"#organizzazione-dei-contenuti\" aria-hidden=\"true\" class=\"anchor\" id=\"organizzazione-dei-contenuti\"></a>Organizzazione dei Contenuti</h2>\n<p>Ci sono quattro modi per organizzare contenuti multilingue. Tutti producono output HTML piatto.</p>\n<h3><a href=\"#opzione-1-raggruppamento-per-sottocartella-auto-scoperta\" aria-hidden=\"true\" class=\"anchor\" id=\"opzione-1-raggruppamento-per-sottocartella-auto-scoperta\"></a>Opzione 1: Raggruppamento per Sottocartella (Auto-Scoperta)</h3>\n<p>Raggruppa le traduzioni in una sottocartella con il nome dello slug del contenuto base. I file con prefisso di un codice lingua ISO 639-1 vengono automaticamente rilevati e collegati:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">content/hello/\n  hello.md              # Lingua predefinita (en)\n  pt-ola-mundo.md       # Traduzione in portoghese\n  es-hola-mundo.md      # Traduzione in spagnolo\n</code></pre>\n<p>Questo genera:</p>\n<ul>\n<li><code>hello.html</code> - Post in inglese, elencato in <code>index.html</code></li>\n<li><code>pt-ola-mundo.html</code> - Post in portoghese, elencato in <code>pt.html</code></li>\n<li><code>es-hola-mundo.html</code> - Post in spagnolo, elencato in <code>es.html</code></li>\n</ul>\n<p>Tutte e tre le pagine mostrano automaticamente i link &quot;Disponibile anche in&quot; verso le altre.</p>\n<div class=\"markdown-alert markdown-alert-tip\">\n<p class=\"markdown-alert-title\">Tip</p>\n<p>La sottocartella puo anche avere la data, ad esempio <code>content/2026-07-02-hello/</code>, cosi non devi specificare la data nel frontmatter di ogni traduzione.</p>\n</div>\n<h3><a href=\"#opzione-2-misto-file-piatto--sottocartella\" aria-hidden=\"true\" class=\"anchor\" id=\"opzione-2-misto-file-piatto--sottocartella\"></a>Opzione 2: Misto File Piatto + Sottocartella</h3>\n<p>Se hai un sito piatto esistente e vuoi aggiungere traduzioni senza spostare i file originali, crea una sottocartella che corrisponda allo slug del contenuto esistente:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">content/\n  hello.md              # File piatto esistente, slug: hello\n  hello/\n    pt-ola.md           # Traduzione in portoghese, collegata automaticamente\n</code></pre>\n<p>Marmite rileva che il nome della sottocartella <code>hello</code> corrisponde allo slug del file piatto e li collega come traduzioni.</p>\n<div class=\"markdown-alert markdown-alert-important\">\n<p class=\"markdown-alert-title\">Important</p>\n<p>I nomi delle sottocartelle devono corrispondere allo slug del post originale (non il nome del file, ma lo slug risolto, a volte preso dal titolo) per essere collegati automaticamente come traduzioni.</p>\n</div>\n<h3><a href=\"#opzione-3-puntatore-translates\" aria-hidden=\"true\" class=\"anchor\" id=\"opzione-3-puntatore-translates\"></a>Opzione 3: Puntatore Translates</h3>\n<p>Ogni traduzione punta allo slug del contenuto originale usando il campo <code>translates</code>. Marmite costruisce automaticamente la rete completa di collegamenti bidirezionali:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-yaml\"><a-p>---</a-p>\n<a-pr>title</a-pr><a-p>:</a-p> <a-s>Ciao Mondo</a-s>\n<a-pr>date</a-pr><a-p>:</a-p> <a-s>2024-01-01</a-s>\n<a-pr>language</a-pr><a-p>:</a-p> <a-s>it</a-s>\n<a-pr>translates</a-pr><a-p>:</a-p> <a-s>hello</a-s>\n<a-p>---</a-p></code></pre>\n<p>Questo e piu semplice rispetto al mantenere una lista <code>translations</code> in ogni file. Basta impostare <code>translates</code> su ogni traduzione e marmite collega tutto automaticamente. Quando <code>language</code> e impostato su un valore diverso dalla lingua predefinita del sito e nessuna <code>stream</code> e definita esplicitamente, marmite inserisce automaticamente il contenuto nella stream della lingua corrispondente.</p>\n<h3><a href=\"#opzione-4-collegamento-traduzione-via-frontmatter\" aria-hidden=\"true\" class=\"anchor\" id=\"opzione-4-collegamento-traduzione-via-frontmatter\"></a>Opzione 4: Collegamento Traduzione via Frontmatter</h3>\n<p>Imposta la lingua e le traduzioni esplicitamente nel frontmatter:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-yaml\"><a-p>---</a-p>\n<a-pr>title</a-pr><a-p>:</a-p> <a-s>Hello World</a-s>\n<a-pr>date</a-pr><a-p>:</a-p> <a-s>2024-01-01</a-s>\n<a-pr>language</a-pr><a-p>:</a-p> <a-s>en</a-s> <a-c># puo essere omesso perche e la lingua predefinita</a-c>\n<a-pr>translations</a-pr><a-p>:</a-p>\n  <a-p>-</a-p> <a-s>pt-ola</a-s>  <a-c># poi scrivi un post con slug `ola` e language: pt</a-c>\n  <a-p>-</a-p> <a-s>es-hola</a-s>\n<a-p>---</a-p></code></pre>\n<p>Il campo <code>translations</code> accetta una lista di slug. Marmite risolve ogni slug al contenuto reale, compila il codice lingua e il nome di visualizzazione, e crea collegamenti bidirezionali. Se il post A elenca il post B come traduzione, il post B riceve automaticamente un collegamento di ritorno al post A.</p>\n<div class=\"markdown-alert markdown-alert-important\">\n<p class=\"markdown-alert-title\">Important</p>\n<p>Preferisci le opzioni 1 e 2 per il rilevamento automatico. Le opzioni 3 e 4 richiedono frontmatter esplicito ma offrono maggiore controllo sui collegamenti.</p>\n</div>\n<h2><a href=\"#campi-del-frontmatter\" aria-hidden=\"true\" class=\"anchor\" id=\"campi-del-frontmatter\"></a>Campi del Frontmatter</h2>\n<h3><a href=\"#language\" aria-hidden=\"true\" class=\"anchor\" id=\"language\"></a><code>language</code></h3>\n<p>Imposta esplicitamente il codice lingua del contenuto:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-yaml\"><a-pr>language</a-pr><a-p>:</a-p> <a-s>it</a-s></code></pre>\n<p>Di solito non e necessario con il rilevamento per sottocartella (Opzioni 1 e 2), dove la lingua viene dedotta automaticamente. Usalo per le Opzioni 3 e 4, dove la lingua deve essere specificata nel frontmatter.</p>\n<p>Quando <code>language</code> e impostato su un valore diverso dalla lingua predefinita del sito e nessuna <code>stream</code> e definita esplicitamente, marmite usa automaticamente la lingua come stream, cioe il contenuto verra pubblicato nella stream corrispondente (ad esempio <code>it.html</code>).</p>\n<h3><a href=\"#translates\" aria-hidden=\"true\" class=\"anchor\" id=\"translates\"></a><code>translates</code></h3>\n<p>Punta una traduzione allo slug del contenuto originale:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-yaml\"><a-pr>translates</a-pr><a-p>:</a-p> <a-s>hello</a-s></code></pre>\n<p>Marmite crea collegamenti bidirezionali tra il contenuto originale e tutte le sue traduzioni. Non e necessario con l'auto-scoperta per sottocartella (Opzioni 1 e 2). Vedi l'Opzione 3 sopra per i dettagli.</p>\n<h3><a href=\"#translations\" aria-hidden=\"true\" class=\"anchor\" id=\"translations\"></a><code>translations</code></h3>\n<p>Collega manualmente alle traduzioni per slug:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-yaml\"><a-pr>translations</a-pr><a-p>:</a-p>\n  <a-p>-</a-p> <a-s>en-hello-world</a-s>\n  <a-p>-</a-p> <a-s>pt-ola-mundo</a-s></code></pre>\n<p>Non e necessario quando si usa l'auto-scoperta per sottocartella (Opzioni 1 e 2) o il campo <code>translates:</code> (Opzione 3), poiche le traduzioni vengono collegate automaticamente.</p>\n<h2><a href=\"#note-di-compatibilita\" aria-hidden=\"true\" class=\"anchor\" id=\"note-di-compatibilita\"></a>Note di Compatibilita</h2>\n<ul>\n<li>I contenuti nella lingua predefinita usano la stream <code>index</code> e appaiono nella pagina principale <code>index.html</code></li>\n<li>Le lingue vengono auto-popolate da tutti i contenuti osservati - nessuna configurazione necessaria</li>\n<li>Il rilevamento della lingua dal prefisso del nome file funziona solo all'interno delle sottocartelle, mai per file piatti nella radice dei contenuti (prevenendo falsi positivi come <code>essential-guide.md</code> rilevato come lingua <code>es</code>)</li>\n<li>Dopo la raccolta dei contenuti, una fase di scoperta delle traduzioni raggruppa i contenuti per sottocartella, elabora i puntatori <code>translates:</code> e risolve i riferimenti del frontmatter</li>\n<li>Un post puo avere sia una <code>series</code> che una language stream - funzionano indipendentemente</li>\n<li>Le collisioni di slug tra lingue sono evitate dal prefisso della stream negli slug (<code>en-hello</code> vs <code>es-hola</code>)</li>\n<li>Le pagine (contenuti senza date) possono avere <code>language</code> e <code>translations</code> per la visualizzazione nei template, ma non appaiono nelle pagine di elenco della stream</li>\n</ul>\n<blockquote>\n<p>Please consider giving a ☆ on Marmite <a href=\"https://github.com/rochacbruno/marmite\">Github</a> repository, that helps a lot!</p>\n</blockquote>\n<!-- Contents from _markdown_footer.md are appended to every content -->\n<!-- _references.md is a file to gather all references together \nthis file is appended to every raw markdown.\n-->\n",
      "summary": "\"Scrivi contenuti in piu lingue con collegamento automatico delle traduzioni, pagine di stream per lingua e tag hreflang per la SEO utilizzando la funzione language streams di marmite.\"",
      "date_published": "2026-07-02T00:00:00-00:00",
      "image": "media/language-streams/banner.jpg",
      "authors": [
        {
          "name": "Bruno Rocha",
          "url": "https://go.rocha.social/@bruno",
          "avatar": "https://github.com/rochacbruno.png"
        }
      ],
      "tags": [
        "documentazione"
      ],
      "language": "en"
    }
  ]
}