將多語言內容從 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 。
對於節點遷移,在進程部分添加一個新的密鑰nid 。 這裡的遷移鍵將具有其基本內容遷移腳本的遷移 ID的值。

應該添加的另一個鍵是值設置為true 的翻譯。 無論實體如何,這都應添加到所有翻譯遷移腳本的目標部分。

使用langcode鍵定義翻譯導入的語言。 在這個例子中,我導入了日語翻譯,所以值將是ja 。

這些更改告訴腳本從基本內容遷移中獲取內容的 id,這些內容從中被視為翻譯而不是新節點。
要記住的要點
- 導入過程應該按順序進行。 例如,如果在節點中引用術語,則應在節點內容之前先導入術語。
- 在導入翻譯之前啟用實體的翻譯。
- CSV 文件中翻譯內容的順序應與基本內容相同。 也就是說,基本內容及其翻譯應該在 CSV 文件的同一行中。
- 先導入基礎內容,再導入翻譯內容。 否則兩者都將被視為單獨的內容。
