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
languagedel 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— servicioconfig.factory.overrideregistrado bajo el identificadordomain.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 serviciolanguage_managerdel 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:
domain.config_factory_override(prioridad -253, de Domain Config) — carga la sobrescritura desde la coleccióndomain.{domain_id}.domain.language.config_factory_override(prioridad -252, de este módulo) — carga la sobrescritura desde la coleccióndomain.{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:
- Escanea los objetos de configuración heredados — encuentra todas
las entradas
domain.config.{domain_id}.*en la colección por defecto. - 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}))?\.([^.]+\.[^.]+)$/ - Escribe en las colecciones — copia los datos en la colección
domain.{domain_id}(sin langcode) odomain.{domain_id}.language.{lang_code}(con langcode) correspondiente. - Actualiza el registro — si Domain Config UI está instalado,
actualiza el ajuste
overridable_configurationsendomain_config_ui.settings. - 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.