12. Idiomas

Introducción

El CMS es multi-idioma: las páginas, los componentes, los items de colección, los menús y muchos campos de la base de datos admiten un valor distinto por idioma. Desde esta sección se gestionan los idiomas activos del sitio (códigos, etiquetas, estado, idioma por defecto).

Es importante distinguir dos cosas:

Acceso rápido

Pantalla principal

Listado de idiomas del CMS con Catalán-CA configurado
Listado de idiomas del CMS. En este despliegue solo hay un idioma configurado (Catalán-CA), marcado como idioma por defecto y como visible. La tabla muestra código, nombre, estado y acciones por fila.

La pantalla principal muestra un listado simple de los idiomas configurados. Cada fila contiene:

Tareas habituales

12.1 Ver el listado de idiomas

Para revisar qué idiomas están configurados en el sitio:

  1. Entra en /languages.
  2. Aparece la tabla con todos los idiomas (activos e inactivos).
  3. El idioma marcado como por defecto aparece destacado (con una insignia, un check, o en la primera fila según el diseño).

En este despliegue solo está configurado Catalán-CA. Esto significa que la web pública se sirve en catalán y que el contenido no está traducido a otros idiomas. El contenido del panel (esta pantalla, los menús, los textos de la UI) sigue en castellano independientemente del idioma de la web.

12.2 Activar / desactivar un idioma

Activar un idioma es lo que lo hace visible para los visitantes y editable para los editores.

  1. Localiza el idioma en el listado.
  2. Pulsa el icono de activar / desactivar (un interruptor o un check) en la fila correspondiente.
  3. Confirma la acción.
  4. El cambio se aplica al instante:
    • Si lo activas, el idioma aparece en el selector público de la web y puedes empezar a traducir contenido a él.
    • Si lo desactivas, el idioma desaparece del selector público y los visitantes que lo tenían seleccionado pasan al idioma por defecto. Los datos traducidos se conservan: no se borra nada, solo se oculta.
Importante: desactivar un idioma no borra las traducciones existentes. Si lo reactivas más adelante, el contenido traducido sigue ahí. Esto permite preparar traducciones en segundo plano sin afectar al sitio en producción.

12.3 Marcar un idioma como predeterminado

El idioma por defecto es el que se usa como fallback en dos casos:

Para cambiar el idioma por defecto:

  1. Localiza el idioma en el listado.
  2. Pulsa el icono de marcar como por defecto (estrella o bandera).
  3. Confirma la acción. El idioma seleccionado queda marcado como por defecto; el que lo era antes deja de serlo.
  4. El cambio se aplica al instante. Las URLs de la web pueden reescribirse: el idioma por defecto suele ser el que no aparece en la URL (p. ej. /es/contacto vs. /contacto).
Importante: solo puede haber un idioma por defecto a la vez. Si intentas marcar uno nuevo, el sistema desmarca automáticamente el anterior. Si eliminas el idioma que era por defecto, el CMS no deja eliminarlo: primero te obliga a marcar otro como por defecto.

12.4 Traducir el contenido de un componente (inline)

La traducción de contenido no se hace en una pantalla dedicada tipo /translations. Se hace inline en la pantalla de edición de cada componente / item de colección, campo por campo. Para que un campo sea traducible, tiene que estar marcado como tal en la definición del componente (ver sección 4).

Flujo habitual para traducir un componente:

  1. Entra en la página donde está el componente (p. ej. /pages → abre la página → Editar contenido del componente).
  2. En el formulario de edición del componente, los campos marcados como traducibles aparecen con un selector de idioma (un combo, pestañas o banderas) que te permite cambiar entre los idiomas activos.
  3. Selecciona el idioma destino (p. ej. Inglés) y rellena el valor traducido del campo.
  4. Repite para cada campo traducible y para cada idioma.
  5. Guarda. La web pública mostrará, en función del idioma del visitante, el valor traducido o, en su defecto, el del idioma por defecto.

Lo mismo aplica a:

Referencia técnica (webmasters)

Marcado de campos como traducibles: is_translatable

En la definición de un componente (ver sección 4), cada field admite la propiedad is_translatable (booleano). Si vale true:

Si vale false (o no se define), el campo tiene un único valor compartido por todos los idiomas: traducible = no.

Idioma por defecto

Configurar el idioma por defecto tiene tres efectos:

Detección del idioma del visitante

El CMS elige el idioma del visitante con este orden de prioridad:

  1. URL: el prefijo del primer segmento (/es/, /ca/, /en/…) tiene la máxima prioridad. Si el visitante entra en /es/contacto, el idioma es es.
  2. Cookie de preferencia: si el visitante ha seleccionado manualmente un idioma en el selector de la web, se guarda en una cookie. En visitas siguientes, esa cookie prevalece sobre la cabecera Accept-Language.
  3. Cabecera HTTP Accept-Language: el navegador envía los idiomas preferidos del usuario. El CMS elige el primero que esté activo en el sitio.
  4. Idioma por defecto: si nada de lo anterior encaja, se usa el idioma por defecto configurado en /languages.

Fallback de idioma

Para cada campo traducible, la resolución es:

  1. Valor en el idioma detectado (URL / cookie / Accept-Language).
  2. Si no hay valor en ese idioma, valor en el idioma por defecto.
  3. Si tampoco hay valor allí, cadena vacía.

Este comportamiento permite traducir parcialmente: puedes traducir solo los campos más importantes y dejar el resto con el valor por defecto, sin que la web se rompa.

Almacenamiento de traducciones

Las traducciones se almacenan en tablas dedicadas (no en columnas por idioma), para poder tener un número arbitrario de idiomas sin migrar la BD cada vez que se añade uno:

Selector de idioma en el frontend

El componente que renderiza el selector de idioma en la cabecera del sitio (típicamente en el header global) lee los idiomas activos de /languages y genera los enlaces. Al pulsar, se:

  1. Cambia la URL al prefijo del idioma elegido.
  2. Establece la cookie de preferencia (para que en la próxima visita prevalezca sobre Accept-Language).
  3. Renderiza la página en el idioma elegido (con fallback a por defecto donde falte traducción).

Errores frecuentes