如何将多语言内容从CSV迁移到Drupal 8?


8

我来自阅读使用新的Drupal 8迁移API /模块内容迁移:从CSV到Drupal 8的过程,创建迁移的过程非常清楚,并且可以正常工作,但是我找不到如何将内容迁移到多语言站点。在“ 迁移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这是我的多语言新手Q /建议,您难道不能假装您只是用英语创建了D8网站,现在您想使其成为多语言网站吗?
No Sssweat

@NoSssweat我有一个多语言站点。我在CSV文件中有两种语言的信息,我需要从该文件中创建两种语言的节点(英语的节点以及他的法语翻译)
Adrian Cid Almaguer

@NoSssweat您可以发布答案以及执行步骤吗?
Adrian Cid Almaguer

@NoSssweat带有格式和文本字段的文本
Adrian Cid Almaguer

原来我
没事

Answers:


3

从CSV基础知识迁移

如其他地方所述,迁移代码似乎只是在最近(从8.2.x或8.3.x开始)稳定下来,并且网络上的博客文章中包含大量旧的,过时的和不正确的指令。话虽如此,按照Mtech的Lucas Hedding和AdaHernández这两篇博客文章的说明,我已经取得了大约75%的成功。

Github上有一个随附的示例代码库Lucas设置,涵盖了第一个CSV博客文章示例的基础,但其中不包括任何有关图像或文件迁移的帮助程序。

Wunderkraut还有另一个示例存储库,其中确实包含CSV示例迁移,其中包括用户,分类,文章和图像的迁移:

从CSV多语言迁移

我建议从上面的CSV基础知识开始,然后再转到本部分。您确实需要针对每种语言使用单独的迁移脚本。

在这篇博客文章中,我还介绍了20%的方法,概述了如何修改迁移yaml文件以支持多语种内容的详细信息,包括translations: true在本destination节中启用的内容,以便在本节中添加相应的langcode:字段,以process实现语言实体(例如节点和术语),并language:为特定的多语言字段处理添加参数。

我发现最困难的部分是弄清楚如何导入文件或图像字段(剩下的5%对我来说)。上面的示例均未演示如何正确导入图像alt字段。就我而言,我有一个共享图像的图像字段,但是alt属性是可翻译的。我想出了如何自行将基本alt字段导入默认语言节点的方法,但是我很难让导入对其他语言使用相同的fid但不同的alt文本。@Vasi用户通过添加一个content_translation_source在外语迁移YAML的处理步骤中调用的附加字段来找出解决方案。此处有完整示例的更多细节:

附加讨论

最后,这里也进行了一些讨论:


1
:我创造了我剩下的问题一个后续的问题在这里drupal.stackexchange.com/questions/229750/...
JamesWilson

谢谢,我将用您答案中的信息测试代码
Adrian Cid Almaguer

1
原来这里缺少的键是在外语翻译部分添加一个content_translation_source字段process,该值应设置为导入的原始语言的语言代码。请参阅上面链接上的瓦西答案。我还将更新我的帖子以反映此修复程序。
JamesWilson'3

3

您需要两个迁移任务,即迁移​​文件夹中的yml文件:

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

然后,在插件(MigrateExternalTranslatedTestSource.php)中,您需要将.csv(在中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'],
   ];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.