Я прочитал « Использование нового 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
На данный момент я смог перенести английский контент, но не переводы.
8
migration
importing-exporting
Адриан Сид Альмагер
источник
источник
I was able for the moment to migrate the english content
Вот мое многоязычное предложение для новичков: не могли бы вы просто притвориться, что создали сайт D8 на английском, а теперь хотите сделать его многоязычным?Ответы:
Миграция с основ CSV
Как указывалось в другом месте, код миграции только недавно (по состоянию на 8.2.x или 8.3.x), казалось, успокоился, и в сообщениях блога в Интернете есть множество старых, устаревших и неправильных инструкций. Тем не менее, я добился примерно 75% успеха, следуя инструкциям по этим двум наборам постов от Лукаса Хеддинга и Ады Эрнандес из Мтех.
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
В 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. Более подробно с полным примером здесь:Дополнительное обсуждение
Наконец, здесь также идет некоторая дискуссия:
источник
content_translation_source
поле вprocess
раздел перевода на иностранный язык, значение должно быть установлено на код языка исходного импортируемого языка. Смотрите ответ Васи по ссылке выше. Я также обновлю свой пост, чтобы отразить это исправление.вам нужны обе задачи миграции, файлы yml в папке миграции:
Затем в плагине (MigrateExternalTranslatedTestSource.php) вам нужно прочитать ваш .csv (in
initializeIterator()
) в структуру массива импорта:источник