Domain Config Language¶
Le module Domain Config Language ajoute la dimension langue aux
surcharges de configuration par domaine fournies par
Domain Config. Activez-le sur les sites
multilingues qui ont besoin de surcharges variables à la fois selon le
domaine et selon la langue (par exemple, un nom de site différent sur
one.example.com en français et en anglais).
C'est le complément naturel de Domain Config : seul, ce dernier offre une
couche de surcharges par domaine ; en y ajoutant Domain Config Language,
on obtient une seconde couche indexée par couple (domain, langcode).
Quand l'activer¶
- Le module
languagedu cœur est activé. - Vous voulez des valeurs de configuration différentes selon le domaine et selon la langue.
Sur un site monolingue, ne l'installez pas — Domain Config seul couvre
déjà les surcharges par domaine, sans tirer le module language dans
votre installation.
Ce que ce module fournit¶
Drupal\domain_config_language\Config\DomainLanguageConfigFactoryOverride— serviceconfig.factory.overrideenregistré sous l'identifiantdomain.language.config_factory_override(priorité-252).Drupal\domain_config_language\Config\DomainLanguageConfigOverride— l'objet de surcharge éditable par couple(domain, langue).Drupal\domain_config_language\DomainConfigLanguageManager— un décorateur du servicelanguage_managerdu cœur qui résout les surcharges au runtime via la factory de surcharges par domaine et langue.
Ces classes sont marquées @internal. Le contrat stable, c'est
l'identifiant de service domain.language.config_factory_override.
Stockage¶
Les surcharges sont stockées dans des collections de configuration Drupal nommées :
domain.{domain_id}.language.{langcode}
Le nom de la collection est construit par
Drupal\domain_config_language\Config\DomainLanguageConfigCollectionUtils::createDomainLanguageConfigCollectionName().
À l'intérieur d'une collection, l'objet de configuration garde son nom
d'origine — la surcharge du nom de site pour one_example_com en
français est stockée comme system.site dans la collection
domain.one_example_com.language.fr.
Ce format n'a pas changé avec la séparation des modules. Les sites 3.x
existants migrent de façon transparente : le hook
domain_config_update_10002() installe automatiquement ce sous-module
lorsque le module language est déjà activé.
Comportement à l'exécution¶
Résolution des surcharges¶
Ce module enregistre un second service config.factory.override au-dessus
de celui fourni par Domain Config :
domain.config_factory_override(priorité -253, fourni par Domain Config) — charge la surcharge depuis la collectiondomain.{domain_id}.domain.language.config_factory_override(priorité -252, fourni par ce module) — charge la surcharge depuis la collectiondomain.{domain_id}.language.{lang_code}.
Une priorité plus élevée s'exécute plus tôt ; la surcharge par langue s'applique donc après celle par domaine et se place au sommet de la cascade :
Configuration de base (collection par défaut)
↓ fusionnée avec
Surcharge par domaine (collection domain.{domain_id})
↓ fusionnée avec
Surcharge par (domain, langue) (collection domain.{domain_id}.language.{lang_code})
= Configuration finale au runtime
Exemple avec system.site sur le domaine two_example_com en
espagnol :
# Configuration de base (collection par défaut) :
system.site:
name: "My Site"
# Surcharge par domaine (collection domain.two_example_com) :
system.site:
name: "Two" # remplace "My Site" par "Two"
# Surcharge par (domain, langue) (collection domain.two_example_com.language.es) :
system.site:
name: "Dos" # remplace "Two" par "Dos"
# Résultat final au runtime : name = "Dos"
Mise en cache¶
Le service de surcharge par langue fournit un suffixe de cache qui
combine l'identifiant du domaine actif avec le code de langue, de sorte
qu'un objet de configuration mis en cache pour (two_example_com, es)
n'est pas servi à (two_example_com, en).
Les métadonnées de cache ajoutent languages:language_interface au
contexte domain existant, pour que les sorties rendues qui dépendent
des surcharges par langue soient correctement variées.
Export et import de configuration¶
Le FileStorage de Drupal convertit les points des noms de collection en
séparateurs de répertoires. En plus de la structure d'export par domaine
décrite dans la
documentation de Domain Config,
ce module ajoute un sous-répertoire language/{langcode}/ sous chaque
dossier de domaine :
config/sync/
system.site.yml # Configuration de base
domain/
one_example_com/
system.site.yml # Surcharge par domaine
language/
fr/
system.site.yml # Surcharge par (domain, langue)
two_example_com/
system.site.yml
language/
en/
system.site.yml
es/
system.site.yml
Les modules peuvent fournir des surcharges par défaut au format domaine et
langue avec la même convention dans leur répertoire config/install/ :
mymodule/config/install/
domain/
one_example_com/
language/
fr/
system.site.yml
two_example_com/
language/
en/
system.site.yml
Lorsqu'une nouvelle entité de domaine est créée ou que ce module est
installé, l'appel à ConfigInstallerInterface::installCollectionDefaultConfig()
de Drupal récupère ces fichiers dans la collection
domain.{domain_id}.language.{langcode} correspondante.
Migration depuis la 2.x vers la 3.x¶
En Domain 2.x, les surcharges par langue étaient stockées dans des objets de configuration séparés, dans la collection par défaut, à côté de celles par domaine, en suivant une convention de nommage qui intégrait le code de langue dans le nom plat :
domain.config.{domain_id}.{langcode}.{config_name}
Par exemple, une surcharge en français du nom de site sur
one_example_com :
domain.config.one_example_com.fr.system.site
Limitation : les surcharges par langue devaient être traitées
indépendamment du système LanguageConfigOverride du cœur Drupal ; elles
ne passaient par aucun pipeline standard de surcharge de configuration.
Le format 3.x unifie les deux types de surcharges sous des collections de
configuration (voir Stockage plus haut pour le nom de la collection par
langue). La migration vers ce format est embarquée dans
domain_config_language_install() — elle s'exécute automatiquement la
première fois que ce module est installé (ce qui, sur les sites en cours
de mise à jour, est déclenché par domain_config_update_10002()).
La migration est réalisée par le service
Drupal\domain_config_language\Service\DomainConfigMigration et couvre
à la fois les surcharges par domaine (sans langcode) et celles par
langue, en une seule passe :
- Scanne les objets de configuration hérités — détecte toutes les
entrées
domain.config.{domain_id}.*dans la collection par défaut. - Analyse chaque nom hérité — extrait l'identifiant de domaine, le
code de langue éventuel et le nom de configuration via le motif :
/^domain\.config\.{domain_id}(?:\.([a-z]{2}))?\.([^.]+\.[^.]+)$/ - Écrit dans les collections — copie les données dans la collection
domain.{domain_id}(sans langcode) oudomain.{domain_id}.language.{lang_code}(avec langcode). - Met à jour le registre — si Domain Config UI est installé, met à
jour le réglage
overridable_configurationsdansdomain_config_ui.settings. - Nettoie — supprime les objets
domain.config.*hérités de la collection par défaut.
La migration est idempotente : sur une installation neuve sans données héritées, c'est un no-op. En cas d'échec sur un domaine, les exceptions sont collectées par domaine et remontées dans le résultat de migration.
Services¶
| Service | Classe | Rôle |
|---|---|---|
domain.language.config_factory_override |
DomainLanguageConfigFactoryOverride |
Surcharges par (domain, langue) (priorité -252) |
domain.language_manager |
DomainConfigLanguageManager |
Décore language_manager pour intégrer les surcharges par domaine et langue |
domain_config_language.config_migration |
DomainConfigMigration |
Service de migration 2.x → 3.x (interne) |
Lien avec Domain Config UI¶
Si vous avez aussi activé Domain Config UI, installez Domain Config Language UI pour que la page d'aperçu d'administration affiche les surcharges par langue et que celles-ci soient nettoyées en même temps que la surcharge de base lors d'une suppression.