¿Cómo migrar contenido multilingüe de CSV a Drupal 8?

8

Vengo de la lectura Utilizando el nuevo módulo / API de migración de Drupal 8 y migración de contenido: CSV a Drupal 8, el proceso para crear una migración es muy claro y funciona, pero no puedo encontrar cómo migrar contenido a un sitio multilingüe. En la descripción general de la API de Migrate, no puedo encontrar ninguna información al respecto.

Entonces, ¿cómo puedo migrar contenido multilingüe?

ACTUALIZACIÓN: Encontré un ejemplo: https://github.com/drupal/drupal/tree/8.3.x/core/modules/migrate/tests/modules/migrate_external_translated_test

Por el momento pude migrar el contenido en inglés pero no las traducciones.

Adrian Cid Almaguer
fuente
1
Descargo de responsabilidad: nunca antes había creado un sitio multilingüe. I was able for the moment to migrate the english contentAquí está mi novato multilingüe Q / sugerencia, ¿No puede simplemente pretender que creó el sitio D8 en inglés y ahora quiere hacerlo multilingüe?
No Sssweat
@NoSssweat Tengo un sitio multilingüe. Tengo en el archivo CSV la información en dos idiomas y necesito crear a partir de este archivo los nodos en dos idiomas (el nodo en inglés y su traducción en francés)
Adrian Cid Almaguer
@NoSssweat, ¿puedes publicar una respuesta con los pasos para hacerlo?
Adrian Cid Almaguer
@NoSssweat texto con formato y campos de texto
Adrian Cid Almaguer
Resulta que estoy muy lejos, espero que estos 2 videos te ayuden
No Sssweat

Respuestas:

3

Migrar desde los conceptos básicos de CSV

Como se indicó en otra parte, el código de migración solo recientemente (a partir de 8.2.xo 8.3.x) parece haberse asentado y hay muchas instrucciones antiguas, obsoletas e incorrectas en las publicaciones de blog en la web. Dicho esto, he tenido un 75% de éxito siguiendo las instrucciones en estos dos conjuntos de publicaciones de blog de Lucas Hedding y Ada Hernández en Mtech.

Hay una base de código de ejemplo que acompaña la configuración de Lucas en Github que cubre los conceptos básicos del primer ejemplo de publicación de blog CSV, pero no incluye ningún ayudante con la imagen o las migraciones de archivos.

Hay otro repositorio de ejemplo de Wunderkraut que incluye una migración de ejemplo CSV con migración de usuario, taxonomía, artículos e imágenes aquí:

Migración multilingüe desde CSV

Recomiendo comenzar con los conceptos básicos de CSV anteriores, luego pasar a esta sección. Realmente necesita tener scripts de migración separados para cada idioma.

Obtuve un 20% adicional del camino con esta publicación de blog, que describe los detalles sobre cómo modificar un archivo yaml de migración para admitir contenido multilingüe, incluido, para habilitar translations: trueen la destinationsección, agregar el langcode:campo en la processsección para una entidades linguales (como nodos y términos) y para agregar el language:parámetro para el procesamiento de campo específico en varios idiomas

La parte más difícil es descubrir cómo importar campos de archivos o imágenes (el 5% restante para mí). Ninguno de los ejemplos anteriores muestra cómo importar campos alternativos de imagen correctamente. En mi caso, tengo un campo de imagen que comparte la imagen, pero el atributo alt es traducible. Descubrí cómo importar el campo alternativo básico al nodo de idioma predeterminado por mi cuenta, pero tengo problemas para que la importación use el mismo texto alternativo pero diferente para otros idiomas. El usuario @Vasi descubrió la solución agregando un campo adicional llamado content_translation_sourceen el paso del proceso de la migración de idioma extranjero YAML. Más detalles con un ejemplo completo aquí:

Discusión adicional

Finalmente, hay una discusión aquí también:

JamesWilson
fuente
1
He creado una pregunta de seguimiento para mi problema restante aquí: drupal.stackexchange.com/questions/229750/…
JamesWilson
gracias, probaré el código con la información en tu respuesta
Adrian Cid Almaguer
1
Resulta que la clave que falta aquí es agregar un content_translation_sourcecampo en la processsección de la traducción del idioma extranjero, el valor debe establecerse en el código de idioma del idioma original importado. Vea la respuesta de Vasi en el enlace de arriba. También actualizaré mi publicación para reflejar esta solución.
JamesWilson
3

necesita ambas tareas de migración, los archivos yml en la carpeta de migración:

migrate.migration.external_translated_test_node.yml
migrate.migration.external_translated_test_node_translation.yml

Luego, en el complemento (MigrateExternalTranslatedTestSource.php), debe leer su .csv (in initializeIterator()) en la estructura de la matriz de importación:

  /**
   * 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
fuente