Installer un Drupal multilingue depuis la configuration

Soumis par GoZ le lun 10/12/2018 - 11:12

Installer un Drupal multilingue depuis la configuration

Depuis que nous n'avons plus besoin de features pour gérer la configuration et depuis que nous pouvons gérer cette configuration via les fichiers yaml dans un répertoire de configuration, il est beaucoup plus facile de maintenir une configuration entre différents environnements. Depuis quelques temps, il est possible d'installer sans module supplémentaire un Drupal en se basant sur une configuration existante.
Je ne traiterai pas ici de l'installation de Drupal depuis la configuration, vous pouvez lire un très bon article sur le sujet chez les happyculteurs Installer drupal depuis la configuration.

En revanche, si vous souhaitez installer Drupal depuis la configuration avec du multilingue, a date, il va falloir rajouter quelques patchs pour que cela fonctionne.

Premier problème rencontré, lorsque l'on lance l'installation, on arrive sur l'erreur suivante:

The "configurable_language" entity cannot have a URI as it does not have an ID

Nous avons donc notre premier patch: Non interactive install not in English with configuration overrides is broken.

On relance l'installation, et là:

Drupal\Core\Entity\EntityStorageException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'content_translation_source' in 'field list': INSERT INTO {node_field_data} (nid, vid, type, langcode, title, uid, status, created, changed, promote, sticky, revision_translation_affected, default_langcode, content_translation_source, content_translation_outdated) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10, :db_insert_placeholder_11, :db_insert_placeholder_12, :db_insert_placeholder_13, :db_insert_placeholder_14); Array ( [:db_insert_placeholder_0] => 2 [:db_insert_placeholder_1] => 2 [:db_insert_placeholder_2] => page [:db_insert_placeholder_3] => en [:db_insert_placeholder_4] => asdf [:db_insert_placeholder_5] => 1 [:db_insert_placeholder_6] => 0 [:db_insert_placeholder_7] => 1445445894 [:db_insert_placeholder_8] => 1445445901 [:db_insert_placeholder_9] => 0 [:db_insert_placeholder_10] => 0 [:db_insert_placeholder_11] => 1 [:db_insert_placeholder_12] => 1 [:db_insert_placeholder_13] => und [:db_insert_placeholder_14] => 0 ) in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (line 757 of core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).

Ce qui nous donne un second patch: Programmatically created translatable content type returns SQL error on content creation.

Pour récapituler, le fichier composer.json devrait ressembler à:

{
    ...
    "extra": {
    ...
        "patches": {
            "drupal/core": {
                "[2599228] Programmatically created translatable content type returns SQL error on content creation": "https://www.drupal.org/files/issues/2018-12-06/2599228-104-8.6.x.patch",
                "[2999061] Non interactive install not in English with configuration overrides is broken": "https://www.drupal.org/files/issues/2018-09-16/2999061-10.patch"
            }
        }
    }
    ....
}

Et voilà, grâce à ces 2 patchs, nous pouvons maintenant installer un Drupal depuis une configuration existante avec du multilingue.