将多语言内容从 CSV 迁移到 Drupal 8
已发表: 2021-07-13现在,通过各种模块可以轻松地将数据从任何来源迁移到 Drupal 8,这些模块允许轻松传输数据。 Drupal 中的迁移是将数据从外部源移动到当前 Drupal 站点的任何过程的术语。 您可以迁移包括节点、用户、配置和站点的任何其他组件的数据。
Drupal 为您提供了多种迁移内容的方法。 根据网站和数据来源,您可以选择最佳方式。 但是,迁移多语言数据可以为您的迁移过程添加更多步骤。 您首先需要迁移基本内容,然后再迁移翻译。 在本文中,我们将详细介绍这些步骤,以帮助您更好地了解将多语言内容从 CSV 迁移到 Drupal 8。

您需要的 Drupal 8 迁移模块
如前所述,Drupal 提供了大量选项和模块,可以帮助您轻松、轻松地迁移。 要迁移多语言内容,您需要:
- 迁移:提供一个灵活的框架,用于将内容从其他来源迁移到 Drupal。
- Migrate plus:提供用于迁移的插件,如源插件、流程插件、目标插件和 API 扩展。
- 迁移 Drupal:提供对迁移内容和配置的支持。
- 迁移源 CSV:提供插件以将内容从 CSV 文件导入 Drupal。
- 迁移工具:此模块提供用于迁移的 UI 工具和 Drush 命令。
- 配置开发模块:该模块将脚本转换为配置。
步骤 1:迁移基础内容
要开始迁移基本内容,我们首先需要在 Drupal 8 中创建一个自定义模块。

确保info.yml具有这些键和值。
您需要创建yaml文件(称为迁移脚本),并将其放置在创建的自定义模块的 config/install 目录中。 info.yml 的 config_devel /install键应该写了所有的 yaml 文件。

这是用于导入分类术语的示例 yaml 文件。 迁移脚本有 4 个部分:
- 元数据:将具有 id、标签和迁移组 id。
- 来源:来源密钥应包含 CSV 文件的路径。
- 过程:字段和CSV 列之间的映射。
- 目的地:保存导入数据的目的地。
yaml文件节点内容也应该类似写。 唯一的区别是目的地。

目标插件应该是entity:node并且default_bundle将具有导入内容的内容类型的机器名称。
创建所有 yaml 文件后,yaml 的 ID 应包含在info.yml 中。 一切都完成后,启用自定义模块。
使用 Drush 命令drush cdi <migration id> 。 这里的迁移 id 是techx migration 。 这会将脚本转换为配置。
运行命令后转到admin>structure>migration 。 您将通过单击列表迁移找到您创建的迁移组。 这将显示创建的迁移脚本列表。

单击执行选项卡将显示可用操作列表:


导入是从源中拉取数据。
回滚将删除导入的数据。
Stop是中断导入或回滚过程。
有时进程会卡住。 要将状态移至空闲,请使用重置。
有关如何迁移不同实体(如用户、段落)的数据的更详细信息,请查看 CSV 导入以迁移 Drupal 7 到 8 - 完整指南。
第 2 步:迁移基础内容的翻译
如果您已经在 Drupal 8 网站上启用了多语言内容,则可以跳过第一步。 如果您想知道如何创建多语言 Drupal 8 网站(以及您为什么需要一个网站),请查看这篇文章。
1. 为 Drupal 网站添加语言
要导入翻译,首先我们必须使我们的网站多语言。 让我们看看如何将语言下载到站点。
- 启用语言和内容翻译模块。 这些是核心模块。
- 转到 /admin/config/regional 和 language/language/添加语言。

- 单击下拉菜单将为您提供语言列表。 在网站上选择您想要的语言,然后单击添加语言。 这将下载您网站的语言。
2. 为实体启用翻译
一旦我们安装了我们需要的语言,我们必须在导入或将翻译添加到内容之前启用实体的翻译。 为此,请转到admin/config/regional/content translation 。 选择要为其启用转换的实体,然后单击保存配置。
在此示例中,我将导入博客内容类型,因此我将启用博客内容类型的翻译。

3. 更新迁移文件
需要对 yaml 文件进行一些更改才能导入翻译。 给出翻译内容的CSV文件的路径作为基本内容,翻译内容存储在不同的文件中。 术语翻译的变化。

在脚本的 process 部分添加一个新的 key tid ,插件为迁移,源为id ,迁移值应为其基本内容迁移脚本的迁移 id 。
对于节点迁移,在 process 部分添加一个新的 key nid 。 这里的迁移键将具有其基本内容迁移脚本的迁移 ID的值。

应该添加的另一个键是值设置为true 的翻译。 无论实体如何,这都应添加到所有翻译迁移脚本的目标部分。

使用langcode键定义翻译导入的语言。 在这个例子中,我导入了日语翻译,所以值将是ja 。

这些更改告诉脚本从基本内容迁移中获取内容的 id,这些内容从中被视为翻译而不是新节点。
要记住的要点
- 导入过程应该按顺序进行。 例如,如果在节点中引用术语,则应在节点内容之前先导入术语。
- 在导入翻译之前启用实体的翻译。
- CSV 文件中翻译内容的顺序应与基本内容相同。 也就是说,基本内容及其翻译应该在 CSV 文件的同一行中。
- 先导入基础内容,再导入翻译内容。 否则两者都将被视为单独的内容。
