Saltar al contenido HtmlpressGenerador de sitios estáticos HtmlpressGenerador de sitios estáticos

Cambiar tema

Atajos de teclado

Traducciones

Actualizado el

Un sitio se puede publicar en varios idiomas. El primer idioma es el predeterminado y conserva sus URL; cada uno de los demás se sirve bajo su propio prefijo, como /es/, con su propia navegación, búsqueda, llms.txt y textos de interfaz. La cabecera recibe un selector de idioma, y una página aún sin traducir se queda en la navegación, marcada con el idioma en el que está escrita.

Configurar los idiomas

htmlpress.yaml
languages:
  - code: en
    label: English
  - code: es
    label: Español
  - code: zh
    label: 简体中文

Cada idioma acepta:

Campo Predeterminado Propósito
code ninguno, obligatorio El prefijo de URL y el sufijo del nombre de archivo: letras minúsculas, dígitos y -, empezando por una letra.
label ninguno, obligatorio El nombre que se muestra en el selector de idioma.
locale el code La etiqueta para <html lang>, hreflang y las fechas, como pt-BR.
dir rtl para árabe, hebreo, persa, urdu y algunos más ltr o rtl, escrito en <html dir>.
flag la región del locale o, si no, el país habitual del idioma Un código de país de dos letras para la bandera del selector, como br; uno sin bandera incluida no muestra ninguna.
messages ninguno Textos de interfaz que reemplazan a los integrados; ver más abajo.

Sin languages, el sitio está solo en inglés y nada de lo que sigue se aplica. Un código listado dos veces, una clave de mensaje desconocida, o una sección cuyo prefijo queda bajo el prefijo de otro idioma (/es/…) hace fallar la compilación.

Traducir una página

Una traducción es un archivo junto a su original, nombrado con el código del idioma antes de .html. Se sirve bajo el prefijo del idioma y se empareja con el original por URL:

  • index.html — /
  • index.es.html — /es/
  • guides
    • install.html — /guides/install/
    • install.es.html — /es/guides/install/

Un sufijo que no nombra ningún idioma configurado sigue formando parte del nombre, así que vite.config.html sigue siendo una página en inglés. Para guardar las traducciones en una carpeta propia, o para nombrar un archivo libremente, define el idioma en su head; un archivo que ya está bajo la carpeta del idioma no recibe el prefijo dos veces:

es/guias/instalar.html
<meta name="language" content="es" />
<meta name="path" content="/guides/install/" />
es/guias/instalar.md
---
language: es
path: /guides/install/
---

Una traducción solo se empareja con su original cuando ambos comparten una URL bajo el prefijo del idioma, así que da a un archivo renombrado el mismo path que su original. Un idioma que la configuración no lista hace fallar la compilación.

Traducir la configuración

El title, la description y el banner del sitio, el title de un enlace, y el title, el siteTitle y el siteDescription de una sección aceptan un texto para todos los idiomas o un mapa por código de idioma. Un idioma que falta en el mapa recibe el texto del idioma predeterminado:

htmlpress.yaml
title:
  en: Acme Docs
  es: Documentación de Acme
sections:
  - title: { en: Guide, es: Guía, zh: 指南 }
    prefix: /
  - title: Blog
    type: blog
    prefix: /blog/

Cada sección y cada enlace con un prefix se replica bajo el prefijo de cada idioma: el blog en español vive en /es/blog/, con su propio índice, páginas de etiquetas y feed RSS que listan las entradas en español y, después, las predeterminadas aún sin traducir. Una sección de changelog compila sus páginas en todos los idiomas, conservando las notas de versión tal como se escribieron; esas copias apuntan su URL canónica a la del idioma predeterminado y quedan fuera del sitemap. Una sección custom cuya url es una página del sitio lleva a la traducción de esa página, cuando el idioma abierto la tiene.

Páginas aún sin traducir

Un idioma lista cada página del idioma predeterminado de la que no tiene traducción, para que su navegación mantenga la misma forma. Esa entrada enlaza al original y lleva como insignia el código del idioma predeterminado, con "Aún sin traducir" como texto emergente. La página sin traducir se compila una sola vez, en su propio idioma; la búsqueda y llms.txt solo listan las páginas propias de cada idioma.

El selector de idioma enlaza cada idioma a la versión de esta página en él o, si no existe, a la página de inicio de ese idioma. Un idioma sin página de inicio propia, index.es.html, recibe una redirección de /es/ a su primera página; también el idioma predeterminado sin index.html. Los hosts que leen _redirects, como Cloudflare y Netlify, y htmlpress start redirigen en el servidor; los demás usan una página de redirección.

Textos de la interfaz

Los textos propios de htmlpress, como "En esta página", "Anterior" y "Editar esta página", y las fechas, vienen incluidos en inglés, alemán, español, francés, japonés, ruso y chino, y se eligen según el idioma del locale. Cualquiera de ellos se puede reemplazar por idioma:

htmlpress.yaml
languages:
  - code: en
    label: English
    messages:
      page.edit: Edit on GitHub
  - code: pt
    label: Português
    locale: pt-BR
    messages:
      toc.title: Nesta página
      nav.previous: Anterior
      nav.next: Próximo

Un idioma que htmlpress no incluye recurre al inglés para los textos que no define. Las claves son las de messages/en.yaml; los marcadores {name}, como {date}, se rellenan. date.format y date.months dan forma a cada fecha que se muestra a los lectores.

Qué recibe una página traducida

  • <html lang> y, para los idiomas que se escriben de derecha a izquierda, <html dir="rtl">.
  • Con site definido, un alternate hreflang por cada idioma que tiene la página, además de x-default apuntando a la versión del idioma predeterminado, y un og:locale.
  • El índice de búsqueda de su idioma, _htmlpress/search.<code>.json, y una copia en Markdown y un llms.txt bajo el prefijo del idioma.
  • El selector <htmlpress-language>, que un escape del layout coloca como cualquier otro elemento; se elimina en un sitio de un solo idioma.

Ver también

Hecho con ❤ y Htmlpress

Acciones

Editar en GitHubVer como Markdown

Contenido