Language Streams - Contenido Multilingue
Thursday, 02 July 2026 - ⧖ 5.0 minMarmite soporta sitios multilingues a traves de language streams. Cada idioma se convierte en una stream con su propia pagina de listado y feed RSS, mientras que las traducciones se vinculan automaticamente con navegacion "Tambien disponible en" y etiquetas hreflang para SEO.
Como Funciona
Los idiomas se detectan automaticamente a partir del contenido. Solo establece language: xx en el frontmatter o usa convenciones de nombres de subcarpetas, y marmite se encarga del resto - no se requiere configuracion.
El campo language en marmite.yaml (valor predeterminado en) determina el idioma predeterminado del sitio. El contenido en el idioma predeterminado permanece en index.html. Los demas idiomas obtienen sus propias paginas de stream (pt.html, es.html) y feeds RSS (pt.rss, es.rss).
Opcional: Nombres para Visualizacion
Por defecto, las streams de idioma se etiquetan con su codigo de dos letras (por ejemplo, "pt", "es"). Para establecer nombres legibles, agrega una seccion opcional languages en marmite.yaml:
language : en
languages :
pt :
display_name : "Portugues"
es :
display_name : "Espanol"
Esto sigue el mismo patron que streams: y series: - la configuracion es puramente estetica. Los sitios sin contenido en multiples idiomas no se ven afectados.
Organizacion del Contenido
Hay cuatro formas de organizar contenido multilingue. Todas producen salida HTML plana.
Opcion 1: Agrupacion por Subcarpeta (Auto-Descubrimiento)
Agrupa las traducciones en una subcarpeta con el nombre del slug del contenido base. Los archivos con prefijo de codigo de idioma ISO 639-1 se detectan y vinculan automaticamente:
content/hello/
hello.md # Idioma predeterminado (en)
pt-ola-mundo.md # Traduccion al portugues
es-hola-mundo.md # Traduccion al espanol
Esto genera:
hello.html- Post en ingles, listado enindex.htmlpt-ola-mundo.html- Post en portugues, listado enpt.htmles-hola-mundo.html- Post en espanol, listado enes.html
Las tres paginas muestran automaticamente enlaces "Tambien disponible en" hacia las otras.
Tip
La subcarpeta tambien puede tener la fecha, por ejemplo content/2026-07-02-hello/, asi no necesitas especificar la fecha en el frontmatter de cada traduccion.
Opcion 2: Mixto Archivo Plano + Subcarpeta
Si tienes un sitio plano existente y quieres agregar traducciones sin mover los archivos originales, crea una subcarpeta que coincida con el slug del contenido existente:
content/
hello.md # Archivo plano existente, slug: hello
hello/
pt-ola.md # Traduccion al portugues, vinculada automaticamente
Marmite detecta que el nombre de la subcarpeta hello coincide con el slug del archivo plano y los vincula como traducciones.
Important
Los nombres de las subcarpetas deben coincidir con el slug del post original (no el nombre del archivo, sino el slug resuelto, a veces tomado del titulo) para ser vinculados automaticamente como traducciones.
Opcion 3: Puntero Translates
Cada traduccion apunta al slug del contenido original usando el campo translates. Marmite construye la red completa de enlaces bidireccionales automaticamente:
---
title : Hola Mundo
date : 2024-01-01
language : es
translates : hello
---
Esto es mas simple que mantener una lista translations en cada archivo. Solo establece translates en cada traduccion y marmite conecta todo. Cuando language se define con un valor diferente al idioma predeterminado del sitio, marmite automaticamente coloca el contenido en la stream del idioma correspondiente.
Opcion 4: Enlace de Traduccion via Frontmatter
Define el idioma y las traducciones explicitamente en el frontmatter:
---
title : Hello World
date : 2024-01-01
language : en # se puede omitir porque es el idioma predeterminado
translations :
- pt-ola # luego escribes un post con slug `ola` y language: pt
- es-hola
---
El campo translations acepta una lista de slugs. Marmite resuelve cada slug al contenido real, completa el codigo de idioma y el nombre de visualizacion, y crea enlaces bidireccionales. Si el post A lista al post B como traduccion, el post B automaticamente recibe un enlace de vuelta al post A.
Important
Prefiere las opciones 1 y 2 para auto-descubrimiento. Las opciones 3 y 4 requieren frontmatter explicito pero te dan mas control sobre la vinculacion.
Campos de Frontmatter
language
Define explicitamente el codigo de idioma del contenido:
language : es
Normalmente no es necesario con la deteccion por subcarpeta (Opciones 1 y 2) - el idioma se infiere automaticamente. Usalo para las Opciones 3 y 4.
Cuando language se define con un valor diferente al idioma predeterminado del sitio y no se establece una stream explicita, marmite automaticamente usa el idioma como stream, es decir, este post se publicara en la stream es.html.
translates
Apunta una traduccion al slug del contenido original:
translates : hello
Marmite crea enlaces bidireccionales entre el contenido original y todas sus traducciones. No es necesario con auto-descubrimiento por subcarpeta. Ver Opcion 3 arriba para mas detalles.
translations
Vincula manualmente a traducciones por slug:
translations :
- en-hello-world
- pt-ola-mundo
No es necesario al usar auto-descubrimiento por subcarpeta (Opciones 1 y 2) o translates: (Opcion 3), ya que las traducciones se vinculan automaticamente.
Notas de Compatibilidad
- El contenido del idioma predeterminado usa la stream
indexy aparece en la pagina principalindex.html - Los idiomas se auto-detectan a partir de todo el contenido observado - no se requiere configuracion
- La deteccion de idioma por prefijo de nombre de archivo solo funciona dentro de subcarpetas, nunca para archivos planos en la raiz del contenido (previniendo falsos positivos como
essential-guide.mdsiendo detectado como idiomaes) - Los punteros
translates:se procesan despues de la recoleccion de contenido para construir enlaces bidireccionales - Un post puede tener tanto una
seriescomo una language stream - funcionan independientemente - Las colisiones de slug entre idiomas se evitan con el prefijo de stream en los slugs (
en-hellovses-hola) - Las paginas (contenido sin fechas) pueden tener
languageytranslationspara visualizacion en plantillas, pero no aparecen en paginas de listado de stream
Please consider giving a ☆ on Marmite Github repository, that helps a lot!