Как перенести многоязычный контент из CSV в Drupal 8?

8

Я прочитал « Использование нового API / модуля миграции Drupal 8 и миграции контента: от CSV к Drupal 8», процесс создания миграции очень понятен и работает, но я не могу найти способ переноса контента на многоязычный сайт. В обзоре Migrate API я не могу найти никакой информации об этом.

Итак, как я могу перенести многоязычный контент?

ОБНОВЛЕНИЕ: я нашел пример: https://github.com/drupal/drupal/tree/8.3.x/core/modules/migrate/tests/modules/migrate_external_translated_test

На данный момент я смог перенести английский контент, но не переводы.

Адриан Сид Альмагер
источник
1
Отказ от ответственности: я никогда не создавал многоязычный сайт раньше. I was able for the moment to migrate the english contentВот мое многоязычное предложение для новичков: не могли бы вы просто притвориться, что создали сайт D8 на английском, а теперь хотите сделать его многоязычным?
Нет Sssweat
@ NoSssweat У меня есть многоязычный сайт. У меня есть в файле CSV информация на двух языках, и мне нужно создать из этого файла узлы на двух языках (узел на английском и его перевод на французский)
Адриан Сид
@ NoSssweat вы можете опубликовать ответ с шагами, чтобы сделать это?
Адриан Сид
@ NoSssweat текст с форматом и текстовыми полями
Адриан Сид
Оказывается, я далеко, я надеюсь, что эти 2 видео помогут вам
Нет Sssweat

Ответы:

3

Миграция с основ CSV

Как указывалось в другом месте, код миграции только недавно (по состоянию на 8.2.x или 8.3.x), казалось, успокоился, и в сообщениях блога в Интернете есть множество старых, устаревших и неправильных инструкций. Тем не менее, я добился примерно 75% успеха, следуя инструкциям по этим двум наборам постов от Лукаса Хеддинга и Ады Эрнандес из Мтех.

В Github есть сопутствующий пример установки Lucas для кодовой базы, который охватывает основы первого примера поста в блоге CSV, но он не включает никаких помощников при переносе изображений или файлов.

Существует еще один пример репозитория от Wunderkraut, который включает в себя пример миграции CSV с миграцией пользователей, таксономии, статей и изображений:

Многоязычная миграция из CSV

Я рекомендую начать с основ CSV, а затем перейти к этому разделу. Вам действительно нужно иметь отдельные скрипты миграции для каждого языка.

Я получил еще 20% пути с этим сообщением в блоге, в котором подробно описывается, как изменить файл переноса yaml для поддержки многоязычного контента, в том числе, для включения translations: trueв destinationразделе, добавить langcode:поле в processразделе для правильной многоязычности. языковые объекты (например, узлы и термины), а также добавить language:параметр для конкретной обработки многоязычного поля.

Самым сложным было выяснить, как импортировать поля файлов или изображений (оставшиеся 5% для меня). Ни один из приведенных выше примеров не демонстрирует, как правильно импортировать альтернативные поля изображения. В моем случае у меня есть поле изображения, которое разделяет изображение, но атрибут alt можно перевести. Я выяснил, как самостоятельно импортировать базовое поле alt в языковой узел по умолчанию, но у меня возникли проблемы с тем, чтобы при импорте использовался тот же самый fid, но другой текст alt для других языков. Решение было найдено пользователем @Vasi путем добавления дополнительного поля, которое вызывается content_translation_sourceна шаге процесса миграции на иностранный язык YAML. Более подробно с полным примером здесь:

Дополнительное обсуждение

Наконец, здесь также идет некоторая дискуссия:

Джеймс Энтони Уилсон
источник
1
Я создал дополнительный вопрос для моей оставшейся проблемы здесь: drupal.stackexchange.com/questions/229750/...
Джеймс Энтони Уилсон
спасибо, я опробую код с информацией в вашем ответе
Адриан Сид
1
Оказывается, пропущенный ключ здесь заключается в том, чтобы добавить content_translation_sourceполе в processраздел перевода на иностранный язык, значение должно быть установлено на код языка исходного импортируемого языка. Смотрите ответ Васи по ссылке выше. Я также обновлю свой пост, чтобы отразить это исправление.
Джеймс Энтони Уилсон
3

вам нужны обе задачи миграции, файлы yml в папке миграции:

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

Затем в плагине (MigrateExternalTranslatedTestSource.php) вам нужно прочитать ваш .csv (in initializeIterator()) в структуру массива импорта:

  /**
   * 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
источник