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:
- Activar / desactivar un idioma en
/languagesafecta a toda la web: hace que ese idioma esté disponible para los visitantes, aparezca en el selector público, y se pueda traducir contenido a ese idioma. - Traducir el contenido de un campo concreto se hace inline, en la pantalla de edición del propio componente / item, campo a campo, no en una pantalla dedicada de traducciones.
Acceso rápido
- URL:
/languages - Menú: entrada Idiomas en el menú lateral del panel.
Pantalla principal
La pantalla principal muestra un listado simple de los idiomas configurados. Cada fila contiene:
- Código del idioma (p. ej.
es,ca,en), conforme a ISO 639-1. - Nombre legible (p. ej. Castellano, Català, English).
- Estado: activo (visible en la web) o inactivo (no se muestra pero los datos se conservan).
- Por defecto: marcador que indica cuál es el idioma de fallback cuando un campo no está traducido al idioma del visitante.
- Iconos de acción: editar, activar / desactivar, marcar como por defecto, eliminar.
Tareas habituales
12.1 Ver el listado de idiomas
Para revisar qué idiomas están configurados en el sitio:
- Entra en
/languages. - Aparece la tabla con todos los idiomas (activos e inactivos).
- 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.
- Localiza el idioma en el listado.
- Pulsa el icono de activar / desactivar (un interruptor o un check) en la fila correspondiente.
- Confirma la acción.
- 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.
12.3 Marcar un idioma como predeterminado
El idioma por defecto es el que se usa como fallback en dos casos:
- Cuando un visitante accede a la web sin preferencia de idioma detectable (URL, cookie o cabecera
Accept-Language). - Cuando un campo traducible no tiene valor en el idioma del visitante: el sistema muestra el valor del idioma por defecto; si tampoco hay valor allí, muestra cadena vacía.
Para cambiar el idioma por defecto:
- Localiza el idioma en el listado.
- Pulsa el icono de marcar como por defecto (estrella o bandera).
- Confirma la acción. El idioma seleccionado queda marcado como por defecto; el que lo era antes deja de serlo.
- 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/contactovs./contacto).
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:
- Entra en la página donde está el componente (p. ej.
/pages→ abre la página → Editar contenido del componente). - 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.
- Selecciona el idioma destino (p. ej. Inglés) y rellena el valor traducido del campo.
- Repite para cada campo traducible y para cada idioma.
- 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:
- Items de colección (ver sección 5): cada item tiene sus campos editables; los traducibles se traducen del mismo modo, inline.
- Variables globales (ver sección 11): si la variable es traducible, la pantalla de edición muestra un campo de valor por idioma.
- Páginas: el
title, elslugy losmeta(description, OpenGraph) son traducibles.
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:
- El formulario de edición del componente muestra un selector de idioma para ese campo.
- El sistema guarda un valor por idioma en la tabla
component_field_translations(relación componente–campo–idioma–valor). - En runtime, el motor de plantillas elige el valor del idioma del visitante, con fallback al idioma por defecto.
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:
- Es el idioma que se muestra cuando no se puede detectar preferencia del visitante.
- Es el idioma de fallback para campos no traducidos en el idioma del visitante.
- Es el idioma "sin prefijo" en las URLs (p. ej.
/contactoen vez de/ca/contactocuando el por defecto esca). El resto de idiomas sí llevan prefijo:/es/contacto,/en/contacto.
Detección del idioma del visitante
El CMS elige el idioma del visitante con este orden de prioridad:
- URL: el prefijo del primer segmento (
/es/,/ca/,/en/…) tiene la máxima prioridad. Si el visitante entra en/es/contacto, el idioma eses. - 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. - Cabecera HTTP
Accept-Language: el navegador envía los idiomas preferidos del usuario. El CMS elige el primero que esté activo en el sitio. - 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:
- Valor en el idioma detectado (URL / cookie /
Accept-Language). - Si no hay valor en ese idioma, valor en el idioma por defecto.
- 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:
component_field_translations— traducciones de los campos editables de los componentes.collection_item_translations— traducciones de los campos de los items de colección.page_translations— traducciones de los metadatos de página (title,meta_description,meta_og_image…).global_variable_translations— traducciones de variables globales marcadas como traducibles.menu_translations— traducciones de los items de menú.
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:
- Cambia la URL al prefijo del idioma elegido.
- Establece la cookie de preferencia (para que en la próxima visita prevalezca sobre
Accept-Language). - Renderiza la página en el idioma elegido (con fallback a por defecto donde falte traducción).
Errores frecuentes
- Un campo no se traduce aunque cambie el selector de idioma en el editor: el campo no está marcado como traducible (
is_translatable=falseen la definición del componente). Hay que editar el componente (ver sección 4), abrir la configuración del campo y marcar la casilla traducible. Tras guardar, el campo pasará a admitir un valor por idioma. - He añadido un idioma pero no aparece en el selector público de la web: comprueba que el idioma está activo (no solo creado). Si está creado pero inactivo, el front no lo muestra aunque los datos estén listos. Actívalo desde
/languages. - Un idioma aparece con el nombre "undefined" o vacío en el selector público: falta el nombre legible del idioma en la base de datos. Edita el idioma y rellena el campo Nombre (no solo el código).
- La web salta siempre al idioma por defecto aunque entro con
/es/en la URL: el idiomaesno está activo en/languages, o no existe en la BD. Actívalo o créalo. Si el código de URL no coincide con ningún idioma activo, el CMS redirige al idioma por defecto. - He traducido un campo en inglés, pero un visitante en inglés sigue viendo el texto en castellano: revisa: (1) que el visitante entra con el prefijo
/en/o con la cookie de preferencia enen, (2) que el idiomaenestá activo, y (3) que la traducción se ha guardado en el formulario (muchas veces uno se olvida de pulsar Guardar tras cambiar de pestaña de idioma). - Traducción parcial: la mitad de la página se ve en un idioma y la otra mitad en otro: comportamiento esperado cuando solo algunos campos están traducidos al idioma del visitante. El resto hace fallback al idioma por defecto. Revisa qué campos están marcados como traducibles y rellénalos en todos los idiomas activos para tener la página completa en cada idioma.
- No puedo marcar un idioma como por defecto: solo puede haber un idioma por defecto. El sistema te obliga a desmarcar el actual antes (o lo desmarca automáticamente al confirmar el cambio). Si estás intentando eliminar el idioma que es por defecto, primero tienes que marcar otro.
- He borrado un idioma y se han perdido todas las traducciones: el panel pide confirmación antes de eliminar; si confirmas, las traducciones de ese idioma se eliminan de la BD (los valores en el idioma por defecto se conservan, pero los del idioma borrado se pierden). Si no estás seguro, desactiva el idioma en vez de eliminarlo: así los datos se conservan y puedes recuperarlos reactivándolo.