web-dev-qa-db-ja.com

多言語コンテンツをCSVからDrupal 8に移行する方法は?

私は読み取りから来ます 新しいDrupal 8移行API /モジュールを使用 および コンテンツの移行:CSVからDrupal 8 移行を作成するプロセスは非常に明確で機能していますが、コンテンツを多言語サイトに移行する方法を見つけることができません。 Migrate APIの概要 で情報を見つけることができませんこれについて。

では、どうすれば多言語コンテンツを移行できますか?

UPDATE:例を見つけました: https://github.com/drupal/drupal/tree/8.3.x/core/modules/migrate/tests/modules/migrate_external_translated_test

今のところ、英語のコンテンツは移行できましたが、翻訳は移行できませんでした。

8

CSVの基本から移行する

他の場所で述べたように、移行コードは最近(8.2.xまたは8.3.xの時点で)落ち着くように思われ、Web上のブログ投稿には、古くて時代遅れの誤った指示がたくさんあります。そうは言っても、MtechのLucas HeddingとAdaHernándezによるこれら2つのブログ投稿の説明に従って、私は約75%成功しました。

最初のCSVブログ投稿の例の基本をカバーする、付随するサンプルコードベースLucasセットアップがGithubにありますが、イメージまたはファイルの移行に関するヘルパーは含まれていません。

Wunderkrautからの別のサンプルリポジトリがあり、ユーザー、分類、記事、画像の移行を含むCSVの移行例がここに含まれています。

CSVからの多言語移行

上記のCSVの基本から始めて、このセクションに進むことをお勧めします。実際には、言語ごとに個別の移行スクリプトが必要です。

このブログ投稿でさらに20%を得ました。これには、移行yamlファイルを変更して多言語コンテンツをサポートし、destinationtranslations: trueを有効にする方法などの詳細が記載されています。セクション。適切な多言語エンティティ(ノードや用語など)のprocessセクションにlangcode:フィールドを追加し、特定の多言語フィールド処理にlanguage:パラメータを追加します。

ファイルまたは画像フィールドをインポートする方法を理解するのが最も難しい部分です(残りの5%は私にとって)。上記の例のいずれも、画像のaltフィールドを適切にインポートする方法を示していません。私の場合、画像を共有する画像フィールドがありますが、alt属性は翻訳可能です。基本的なaltフィールドをデフォルトの言語ノードに自分でインポートする方法を見つけましたが、インポートで他の言語に同じfidで異なるaltテキストを使用するのに問題があります。ソリューションは、ユーザー@Vasiが外国語の移行YAMLのプロセスステップにcontent_translation_sourceと呼ばれる追加フィールドを追加することで理解しました。ここに完全な例を含む詳細:

追加のディスカッション

最後に、ここでもいくつかの議論が行われています:

3
JamesWilson

両方の移行タスク、移行フォルダー内の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'],
   ];
_
3
rémy