Layout Builder Asymmetric Translation
Permite anulaciones de diseño asimétricas (diferentes) para cada traducción de entidades de contenido utilizando Layout Builder.
layout_builder_at
Instalar
composer require 'drupal/layout_builder_at:^3.0'
composer require 'drupal/layout_builder_at:8.x-2.15'
Overview
Layout Builder Asymmetric Translation permite configurar diferentes diseños y bloques para distintas traducciones de idioma en elementos de contenido que utilizan anulaciones de Layout Builder. Esto resuelve el desafío multilingüe común donde diferentes idiomas necesitan diferentes disposiciones de diseño.
Por ejemplo, si un nodo de Artículo necesita mostrar dos bloques adicionales que no están presentes en otros nodos de Artículo, la traducción en inglés puede mostrar el Bloque A a la izquierda y el Bloque B a la derecha, mientras que la traducción en alemán puede mostrarlos en orden inverso: el Bloque A a la derecha y el Bloque B a la izquierda.
El módulo funciona haciendo traducible el campo de sección de diseño. Cuando Layout Builder está habilitado en una visualización de entidad, el módulo automáticamente hace traducible el campo layout_builder__layout. Esto permite que cada traducción mantenga su propio conjunto independiente de secciones y bloques.
El módulo también proporciona un widget de campo que opcionalmente puede copiar bloques desde la traducción de origen al crear una nueva traducción, permitiendo a los editores comenzar con el mismo diseño y luego modificarlo según sea necesario para el idioma de destino.
Features
- Permite diferentes diseños y disposiciones de bloques de Layout Builder para cada traducción de idioma de una entidad de contenido
- Hace automáticamente traducible el campo layout_builder__layout cuando Layout Builder está habilitado en un tipo de entidad
- Hace traducibles los campos de sección de diseño existentes al instalar el módulo
- Proporciona una casilla de verificación 'Copiar bloques a la traducción' que aparece al crear nuevas traducciones
- Tres modos de apariencia del widget: desmarcado (predeterminado), marcado, o marcado y oculto para copia automática
- Los bloques inline agregados a los diseños heredan automáticamente el idioma de la entidad a la que están adjuntos
- Maneja correctamente las dependencias de bloques inline con el contexto de traducción apropiado
- Limpia los datos de tempstore específicos de la traducción cuando se elimina una traducción
- Soporta campos Entity Reference Revisions dentro de bloques inline durante la replicación
- Elimina la advertencia de campo no traducible de Layout Builder de la tabla de configuración de idioma de contenido
Use Cases
Diferentes bloques promocionales por idioma
Un sitio web de marketing necesita mostrar diferentes banners promocionales y bloques de llamada a la acción para audiencias en inglés y alemán. Con este módulo, la versión en inglés puede mostrar un banner de 'Ofertas de Verano' en la barra lateral derecha mientras la versión en alemán muestra un banner de 'Sommerschlussverkauf' en la barra lateral izquierda con diferentes imágenes.
Ordenamiento de contenido específico por idioma
Un sitio de noticias muestra artículos relacionados de manera diferente según la dirección de lectura. El diseño en inglés muestra artículos relacionados en el lado derecho, mientras que la traducción al árabe los muestra en el lado izquierdo para acomodar los patrones de lectura de derecha a izquierda.
Bloques específicos por región
Un sitio de comercio electrónico necesita mostrar bloques de proveedores de pago que varían por región/idioma. La versión en inglés de EE.UU. muestra bloques de PayPal y tarjeta de crédito, mientras que la versión en alemán muestra bloques de Klarna y débito directo SEPA en diferentes posiciones.
Iniciar traducciones desde diseños existentes
Al crear una traducción al francés de una página con un diseño complejo, los editores pueden marcar 'Copiar bloques a la traducción' para duplicar todos los bloques existentes y sus posiciones, luego modificar solo lo necesario para la audiencia francesa en lugar de reconstruir desde cero.
Flujo de trabajo de copia automática de bloques
Configure el widget como 'Marcado y oculto' para tipos de contenido donde las traducciones siempre deben comenzar con el mismo diseño que el idioma de origen, agilizando el flujo de trabajo de traducción al copiar automáticamente todos los bloques.
Tips
- Use la configuración de widget 'Marcado y oculto' para tipos de contenido donde siempre quiera que los bloques se copien automáticamente a nuevas traducciones
- Al copiar bloques, el contenido de bloques inline se duplica completamente, creando copias independientes que pueden editarse por separado por traducción
- El módulo hace automáticamente traducibles los campos de diseño existentes al instalarse, por lo que no necesita recrear campos
- Los campos Entity Reference Revisions (como Paragraphs) dentro de bloques inline también se duplican correctamente al copiar bloques
- Después de instalar el módulo, recuerde habilitar la traducción para el campo Layout en la configuración de Idioma del contenido para cada tipo de entidad
Technical Details
Admin Pages 1
/admin/config/regional/content-language
Habilite la traducción para el campo de diseño de Layout Builder en sus tipos de entidad. Esta es una página de Drupal core donde configura qué campos deben ser traducibles por tipo de entidad.
Hooks 9
hook_module_implements_alter
Elimina la implementación form_entity_form_display_edit_form_alter de Layout Builder para reemplazarla con la propia implementación del módulo que permite configurar el campo de diseño en la visualización del formulario cuando es traducible.
hook_theme_registry_alter
Elimina la función de preproceso de Layout Builder para language_content_settings_table para eliminar el mensaje de advertencia 'No traducible' ya que este módulo hace traducibles los campos de diseño.
hook_form_entity_form_display_edit_form_alter
Modifica el formulario de edición de visualización de formulario de entidad para mostrar la configuración del campo de diseño cuando es traducible, y agrega validación para evitar seleccionar el Widget de Layout Builder predeterminado.
hook_form_alter
Modifica los formularios de entidad para mostrar la casilla 'Copiar bloques a la traducción' con la etiqueta apropiada cuando la bandera layout_builder_at_access está establecida en el widget.
hook_layout_builder_section_storage_alter
Reemplaza la clase OverridesSectionStorage del core con TranslatableOverridesSectionStorage para permitir el acceso a la pestaña Layout en traducciones.
hook_field_storage_config_presave
Hace traducibles los campos layout_section cuando se guardan. Esto habilita traducciones asimétricas para anulaciones de Layout Builder.
hook_form_layout_builder_add_block_alter
Establece el idioma predeterminado de los bloques inline para que coincida con el idioma de la entidad al agregar bloques vía Layout Builder. Este comportamiento puede deshabilitarse vía settings.php.
hook_entity_translation_delete
Limpia el tempstore de Layout Builder cuando se elimina una traducción de entidad, eliminando cualquier cambio de diseño no guardado para esa traducción.
hook_install
Hace traducibles todos los campos layout_section existentes cuando se instala el módulo (excepto durante la sincronización de configuración).
Troubleshooting 5
Asegúrese de que el campo layout_builder__layout esté habilitado para traducción en Administración > Configuración > Regional e idioma > Idioma del contenido. Marque la casilla para el campo Layout bajo su tipo de entidad.
Configure la Gestión de visualización del formulario para su tipo de entidad y establezca el campo layout_builder__layout para usar el widget 'Layout Builder Asymmetric Translation' en lugar del widget oculto o predeterminado.
Por defecto, los bloques inline heredan el idioma de la entidad. Si no desea este comportamiento, agregue $settings['layout_builder_at_set_content_block_language_to_entity'] = FALSE; a su archivo settings.php.
Este error de validación ocurre porque el widget original de Layout Builder no soporta traducciones asimétricas. Seleccione el widget 'Layout Builder Asymmetric Translation' u oculte el campo en la visualización del formulario.
Estos dos módulos son mutuamente excluyentes y no pueden usarse juntos en el mismo sitio. Elija un enfoque: asimétrico (diferentes diseños por idioma) o simétrico (mismos diseños en todos los idiomas).
Security Notes 2
- El módulo usa la cobertura de seguridad del core de Drupal y sigue los patrones de acceso de entidades de Drupal
- La copia de bloques respeta los permisos de acceso de entidades - los usuarios necesitan los permisos apropiados para crear y editar bloques personalizados