Je viens de lire tilisation de la nouvelle Drupal 8 Migration API/Module et Content Migration: CSV to Drupal 8 le processus de création d'une migration est très clair et fonctionne, mais je ne trouve pas comment migrer le contenu vers un site multilingue. Dans Présentation de l'API Migrate je ne trouve aucune information à propos de ça.
Alors, comment puis-je migrer du contenu multilingue?
MISE À JOUR: J'ai trouvé un exemple: https://github.com/drupal/drupal/tree/8.3.x/core/modules/migrate/tests/modules/migrate_external_translated_test
J'ai pu pour l'instant migrer le contenu anglais mais pas les traductions.
Migrer depuis les bases CSV
Comme indiqué ailleurs, le code de migration n'a que récemment (à partir de 8.2.x ou 8.3.x) semblé s'installer et il y a des tas d'instructions anciennes, obsolètes et incorrectes dans les articles de blog sur le Web. Cela étant dit, j'ai eu environ 75% de succès en suivant les instructions sur ces deux séries de billets de blog de Lucas Hedding et Ada Hernández chez Mtech.
https://www.mtech-llc.com/blog/lucas-hedding/migrating-using-csv
https://www.mtech-llc.com/blog/ada-hernandez/how-migrate-images-drupal-8-using-csv-source
Il existe un exemple de configuration de base de code Lucas sur Github qui couvre les bases du premier exemple de blog CSV, mais il n'inclut aucun assistant pour la migration des images ou des fichiers.
Il existe un autre exemple de référentiel de Wunderkraut qui inclut un exemple de migration CSV avec la migration des utilisateurs, de la taxonomie, des articles et des images ici:
Migration multilingue depuis CSV
Je recommande de commencer par les bases CSV ci-dessus, puis de passer à cette section. Vous devez vraiment avoir des scripts de migration distincts pour chaque langue.
J'ai obtenu 20% de plus avec ce billet de blog, qui décrit les détails sur la façon de modifier un fichier yaml de migration pour prendre en charge contenu multilingue y compris, pour activer translations: true
dans la section destination
, pour ajouter le langcode:
champ dans la section process
pour les entités multilingues appropriées (comme les nœuds et les termes), et pour ajouter le language:
paramètre pour un traitement de champ multilingue spécifique.
J'ai trouvé la partie la plus difficile à comprendre comment importer des champs de fichier ou d'image (les 5% restants pour moi). Aucun des exemples ci-dessus ne montre comment importer correctement les champs alt d'image. Dans mon cas, j'ai un champ d'image qui partage l'image, mais l'attribut alt est traduisible. J'ai compris comment importer moi-même le champ alt de base dans le nœud de langue par défaut, mais j'ai du mal à obtenir que l'importation utilise le même texte alt mais différent pour les autres langues. L'utilisateur @Vasi a trouvé la solution en ajoutant un champ supplémentaire appelé content_translation_source
sur l'étape de processus de la migration en langue étrangère YAML. Plus de détails avec un exemple complet ici:
Discussion supplémentaire
Enfin, il y a aussi une discussion en cours ici:
vous avez besoin des deux tâches de migration, les fichiers yml dans le dossier de migration:
migrate.migration.external_translated_test_node.yml
migrate.migration.external_translated_test_node_translation.yml
Ensuite, dans le plugin (MigrateExternalTranslatedTestSource.php), vous devez lire votre .csv (dans initializeIterator()
) dans la structure du tableau d'importation:
/**
* The data to import.
*
* @var array
*/
protected $import = [
['name' => 'cat', 'title' => 'Cat', 'lang' => 'English'],
['name' => 'cat', 'title' => 'Chat', 'lang' => 'French'],
['name' => 'cat', 'title' => 'Gato', 'lang' => 'Spanish'],
['name' => 'dog', 'title' => 'Dog', 'lang' => 'English'],
['name' => 'dog', 'title' => 'Chien', 'lang' => 'French'],
['name' => 'monkey', 'title' => 'Monkey', 'lang' => 'English'],
];