Saltar a contenido

Domain Config Language

El módulo Domain Config Language añade la dimensión de idioma a las sobrescrituras de configuración por dominio que proporciona Domain Config. Actívalo en sitios multilingües donde necesites valores que varíen tanto por dominio como por idioma (por ejemplo, un nombre de sitio distinto en one.example.com en español y en inglés).

Es el compañero natural de Domain Config: por sí solo, éste último ofrece una capa de sobrescrituras por dominio; añadiendo Domain Config Language obtienes una segunda capa indexada por la pareja (domain, langcode).

Cuándo activarlo

  • Tienes el módulo language del núcleo activado.
  • Quieres valores de configuración distintos por dominio y por idioma.

En sitios monolingües, no lo instales — Domain Config por sí solo ya cubre las sobrescrituras por dominio sin arrastrar el módulo language a tu instalación.

Lo que aporta

  • Drupal\domain_config_language\Config\DomainLanguageConfigFactoryOverride — servicio config.factory.override registrado bajo el identificador domain.language.config_factory_override (prioridad -252).
  • Drupal\domain_config_language\Config\DomainLanguageConfigOverride — el objeto editable de sobrescritura por pareja (domain, idioma).
  • Drupal\domain_config_language\DomainConfigLanguageManager — un decorador del servicio language_manager del núcleo que resuelve las sobrescrituras en tiempo de ejecución a través de la factoría por dominio e idioma.

Estas clases están marcadas como @internal. El contrato estable es el identificador de servicio domain.language.config_factory_override.

Almacenamiento

Las sobrescrituras se guardan en colecciones de configuración de Drupal con el siguiente nombre:

domain.{domain_id}.language.{langcode}

El nombre de la colección lo construye Drupal\domain_config_language\Config\DomainLanguageConfigCollectionUtils::createDomainLanguageConfigCollectionName(). Dentro de una colección, el objeto de configuración conserva su nombre original — la sobrescritura del nombre de sitio para one_example_com en francés se guarda como system.site dentro de la colección domain.one_example_com.language.fr.

Este formato no ha cambiado con la división de los módulos. Los sitios 3.x existentes se actualizan de forma transparente: el hook domain_config_update_10002() instala automáticamente este submódulo cuando el módulo language ya está activado.

Comportamiento en tiempo de ejecución

Resolución de sobrescrituras

Este módulo registra un segundo servicio config.factory.override por encima del que proporciona Domain Config:

  1. domain.config_factory_override (prioridad -253, de Domain Config) — carga la sobrescritura desde la colección domain.{domain_id}.
  2. domain.language.config_factory_override (prioridad -252, de este módulo) — carga la sobrescritura desde la colección domain.{domain_id}.language.{lang_code}.

Una prioridad más alta se ejecuta antes; la sobrescritura por idioma se aplica entonces después de la del dominio y se sitúa en la cima de la cascada:

Configuración base (colección por defecto)
  ↓ fusionada con
Sobrescritura por dominio (colección domain.{domain_id})
  ↓ fusionada con
Sobrescritura por (domain, idioma) (colección domain.{domain_id}.language.{lang_code})
  = Configuración final en tiempo de ejecución

Ejemplo con system.site en el dominio two_example_com, idioma es:

# Configuración base (colección por defecto):
system.site:
  name: "My Site"

# Sobrescritura por dominio (colección domain.two_example_com):
system.site:
  name: "Two"        # reemplaza "My Site" por "Two"

# Sobrescritura por (domain, idioma) (colección domain.two_example_com.language.es):
system.site:
  name: "Dos"        # reemplaza "Two" por "Dos"

# Resultado final en tiempo de ejecución: name = "Dos"

Caché

El servicio de sobrescritura por idioma proporciona un sufijo de caché que combina el identificador del dominio activo con el código de idioma, de modo que un objeto de configuración cacheado para (two_example_com, es) no se sirva a (two_example_com, en).

Los metadatos de caché añaden languages:language_interface al contexto domain existente, para que las salidas renderizadas que dependen de sobrescrituras por idioma se varíen correctamente.

Exportación e importación de configuración

El FileStorage de Drupal convierte los puntos de los nombres de colección en separadores de directorio. Sobre la estructura de exportación por dominio descrita en la documentación de Domain Config, este módulo añade un subdirectorio language/{langcode}/ bajo cada carpeta de dominio:

config/sync/
  system.site.yml                              # Configuración base
  domain/
    one_example_com/
      system.site.yml                          # Sobrescritura por dominio
      language/
        fr/
          system.site.yml                      # Sobrescritura por (domain, idioma)
    two_example_com/
      system.site.yml
      language/
        en/
          system.site.yml
        es/
          system.site.yml

Los módulos pueden suministrar sobrescrituras por defecto en formato de dominio e idioma con la misma convención en su directorio config/install/:

mymodule/config/install/
  domain/
    one_example_com/
      language/
        fr/
          system.site.yml
    two_example_com/
      language/
        en/
          system.site.yml

Cuando se crea una nueva entidad de dominio o se instala este módulo, la llamada ConfigInstallerInterface::installCollectionDefaultConfig() de Drupal recupera estos archivos en la colección domain.{domain_id}.language.{langcode} correspondiente.

Migración de 2.x a 3.x

En Domain 2.x, las sobrescrituras por idioma se guardaban como objetos de configuración separados, en la colección por defecto, junto a las de por dominio, siguiendo una convención de nombres que incrustaba el código de idioma en el nombre plano:

domain.config.{domain_id}.{langcode}.{config_name}

Por ejemplo, una sobrescritura en francés del nombre de sitio en one_example_com:

domain.config.one_example_com.fr.system.site

Limitación: las sobrescrituras por idioma debían tratarse aparte del sistema LanguageConfigOverride propio del núcleo de Drupal; no pasaban por ningún canal estándar de sobrescritura de configuración.

El formato 3.x unifica ambos tipos de sobrescrituras bajo colecciones de configuración (véase Almacenamiento arriba para el nombre de la colección por idioma). La migración hacia ese formato se entrega como domain_config_language_install() — se ejecuta automáticamente la primera vez que se instala este módulo (lo que en sitios que se actualizan dispara domain_config_update_10002()).

La migración la realiza el servicio Drupal\domain_config_language\Service\DomainConfigMigration y cubre tanto las sobrescrituras por dominio (sin langcode) como las de por idioma en una sola pasada:

  1. Escanea los objetos de configuración heredados — encuentra todas las entradas domain.config.{domain_id}.* en la colección por defecto.
  2. Analiza cada nombre heredado — extrae el identificador de dominio, el código de idioma opcional y el nombre de configuración con el patrón:
    /^domain\.config\.{domain_id}(?:\.([a-z]{2}))?\.([^.]+\.[^.]+)$/
    
  3. Escribe en las colecciones — copia los datos en la colección domain.{domain_id} (sin langcode) o domain.{domain_id}.language.{lang_code} (con langcode) correspondiente.
  4. Actualiza el registro — si Domain Config UI está instalado, actualiza el ajuste overridable_configurations en domain_config_ui.settings.
  5. Limpia — borra los objetos domain.config.* heredados de la colección por defecto.

La migración es idempotente: en una instalación nueva sin datos heredados es un no-op. Si algún dominio falla, las excepciones se recopilan por dominio y se devuelven en el resultado de la migración.

Servicios

Servicio Clase Rol
domain.language.config_factory_override DomainLanguageConfigFactoryOverride Sobrescrituras por (domain, idioma) (prioridad -252)
domain.language_manager DomainConfigLanguageManager Decora language_manager para integrar las sobrescrituras por dominio e idioma
domain_config_language.config_migration DomainConfigMigration Servicio de migración 2.x → 3.x (interno)

Relación con Domain Config UI

Si además has activado Domain Config UI, instala Domain Config Language UI para que la página de vista general muestre las sobrescrituras por idioma y para que éstas se limpien junto con la sobrescritura base al eliminarla.