Comment migrer du contenu multilingue de CSV vers Drupal 8?

8

Je viens de lire Utilisation du nouvel API / module de migration Drupal 8 et migration de contenu: CSV vers Drupal 8, le processus de création d'une migration est très clair et fonctionne, mais je ne trouve pas comment migrer du contenu vers un site multilingue. Dans la vue d'ensemble de l'API Migrate, je ne trouve aucune information à ce sujet.

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.

Adrian Cid Almaguer
la source
1
Avertissement: je n'ai jamais créé de site multilingue auparavant. I was able for the moment to migrate the english contentVoici mon débutant multilingue Q / suggestion, ne pouvez-vous pas simplement prétendre que vous venez de créer le site D8 en anglais et maintenant vous voulez le rendre multilingue?
Pas de Sssweat le
@NoSssweat J'ai un site multilingue. J'ai dans le fichier CSV les informations en deux langues et je dois créer à partir de ce fichier les nœuds en deux langues (le nœud en anglais et sa traduction en français)
Adrian Cid Almaguer
@NoSssweat pouvez-vous poster une réponse avec les étapes pour le faire?
Adrian Cid Almaguer
@NoSssweat texte avec format et champs de texte
Adrian Cid Almaguer
Il s'avère que je suis loin, j'espère que ces 2 vidéos vous aideront
No Sssweat

Réponses:

3

Migrer depuis les bases de 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.

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 les migrations d'images ou de 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 le contenu multilingue, y compris, pour activer translations: truedans la destinationsection, ajouter le langcode:champ dans la processsection pour un multi- des entités linguistiques (comme les nœuds et les termes) et d'ajouter le language:paramètre pour le 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 d'autres langues. L'utilisateur @Vasi a trouvé la solution en ajoutant un champ supplémentaire appelé content_translation_sourceà 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:

JamesWilson
la source
1
J'ai créé une question de suivi pour mon problème restant ici: drupal.stackexchange.com/questions/229750/…
JamesWilson
merci, je vais tester le code avec les informations dans votre réponse
Adrian Cid Almaguer
1
Il s'avère que la clé manquante consiste à ajouter un content_translation_sourcechamp dans la processsection de la traduction en langue étrangère, la valeur doit être définie sur le code de langue de la langue d'origine importée. Voir la réponse de Vasi sur le lien ci-dessus. Je mettrai également à jour mon message pour refléter ce correctif.
JamesWilson
3

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 (in 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'],
   ];
rémy
la source