migrate
、migrate_tools
、migrate_plus
、migrate_source_csv
を使用してCSVからメニュー項目をインポートしています。
これは、私が元の言語でそれをどのように行っているかの例です:
source:
plugin: csv
path: 'private://init/links_gl.csv'
delimiter: ','
Enclosure: '"'
header_row_count: 1
keys:
- id
column_names:
0:
id: id
1:
source_id: source_id
2:
parent_id: parent_id
3:
menu_name: menu_name
4:
weight: weight
5:
title: title
constants:
path: 'entity:node/'
ids:
id:
type: string
process:
title: title
menu_name: menu_name
nid:
plugin: bbaa_migration_lookup
migration: init_contents_gl
source: source_id
'link/uri':
plugin: bbaa_concat
source:
- constants/path
- '@nid'
parent:
plugin: menu_link_parent
source:
- parent_id
- '@menu_name'
external:
plugin: default_value
default_value: 0
expanded:
plugin: default_value
default_value: 1
enabled:
plugin: default_value
default_value: 1
langcode:
plugin: default_value
default_value: 'gl'
weight: weight
destination:
plugin: entity:menu_link_content
bundle: menu_link_content
no_stub: true
動作していますが、翻訳されたメニュー項目を含む別のCSVファイルをインポートする必要があります。
翻訳された言語用に別の移行構成を作成し、このコードを追加してみました。
id:
plugin: migration
source: id
migration: init_links_gl
content_translation_source:
plugin: default_value
default_value: 'gl'
langcode:
plugin: default_value
default_value: 'es'
destination:
plugin: entity:menu_link_content
translations: true
no_stub: true
しかし、それは機能しません。
移行でメニュー項目を翻訳するにはどうすればよいですか?
私のコードには明らかに問題はありませんが、2つの完全な例を投稿することをお勧めします(理想的には、カスタムプラグインなしでインポートできる簡単な例を最初に試す必要があります)
2番目のYMLファイル(翻訳)では、ほとんどのものをインポートする必要がないことに注意してください。基本的には、id
、parent
、およびtitle
、nid
または'link/uri'
は不要です。
このドキュメントは不足しているため、実用的な例を投稿しています(CSVではなくJSONを使用)。
最初の移行のためのYML:
id: menu
label: JSON feed of menu links
migration_group: menu
source:
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- modules/custom/migrate_custom/artifacts/menu_en.json
item_selector: data
fields:
-
name: mlid
label: 'Unique Id coming from API'
selector: id
-
name: country_migration_id
label: 'Unique Country Id coming from API. Used to create the relation with the nodes'
selector: country_migration_id
-
name: name
label: 'Country name'
selector: name
-
name: parent_id
label: 'Parent menu link id'
selector: parent
constants:
path: 'entity:node/'
ids:
mlid:
type: string
process:
menu_name:
plugin: default_value
default_value: 'main'
nid:
plugin: migration_lookup
migration:
- country
source_ids:
country:
- country_migration_id
title:
plugin: get
source: name
language: 'en'
'link/uri':
plugin: concat
source:
- constants/path
- '@nid'
parent:
plugin: menu_link_parent
source:
- parent_id
- 'main'
external:
plugin: default_value
default_value: 0
expanded:
plugin: default_value
default_value: 0
enabled:
plugin: default_value
default_value: 1
langcode:
plugin: default_value
default_value: 'en'
destination:
plugin: entity:menu_link_content
bundle: menu_link_content
no_stub: true
migration_dependencies:
required:
- country
dependencies:
enforced:
module:
- migrate_custom
翻訳用のYMLファイル:
id: menu_ca
label: JSON feed of menu links (Catalan)
migration_group: menu
source:
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- modules/custom/migrate_custom/artifacts/menu_ca.json
item_selector: data
fields:
-
name: mlid
label: 'Unique Id coming from API. Used to match the original language of the menu links'
selector: id
-
name: name
label: 'Country name'
selector: name
-
name: parent_id
label: 'Parent menu link id'
selector: parent
ids:
mlid:
type: string
process:
menu_name:
plugin: default_value
default_value: 'main'
id:
plugin: migration_lookup
migration:
- menu
source_ids:
menu:
- mlid
title:
plugin: get
source: name
language: 'ca'
parent:
plugin: menu_link_parent
source:
- parent_id
- 'main'
external:
plugin: default_value
default_value: 0
expanded:
plugin: default_value
default_value: 0
enabled:
plugin: default_value
default_value: 1
langcode:
plugin: default_value
default_value: 'ca'
destination:
plugin: entity:menu_link_content
bundle: menu_link_content
no_stub: true
translations: true
migration_dependencies:
required:
- country
- menu
dependencies:
enforced:
module:
- migrate_custom
menu_en.json:
{
"data": [{
"id": "1_CHE",
"country_migration_id": "CHE",
"name": "Switzerland",
"parent": 0
}]
}
menu_ca.json:
{
"data": [{
"id": "1_CHE",
"country_migration_id": "CHE",
"name": "Suïssa",
"parent": 0
}]
}