- 🇳🇱Netherlands megachriz
Tagging issue with "multilanguage", so I can find this issue back as soon as I plan to focus on Feeds multilingual issues again.
- 🇨🇴Colombia Leif_S
@MegaChriz: Just wanted to add that I am also very interested in importing content to different languages/translation sets
- 🇮🇪Ireland marksmith
After many trials, I have found a way to import multilingual content by Feeds. Since it appeared to me pretty complex to achieve, I share this with everyone looking for a solution. I imported multilingual content between two Drupal sites via JSON (Feeds extensible parser and JSON API Include modules), but I suppose it should work for other use cases as well.
As suggested in #3 above under 1, I could achieve multilingual import in two steps, by creating 2 different feed types (eg., feed_type_se (default language, sweedish), feed_type_en (the translated language)).
1. For feed_type_se (default language) I configure the feed type as follows:
- Language: Sweedish
- Insert new content items
- Update existing content itemsWhen creating the feed, I provide the feed source in the default language, something like this:
https://sourcesite.se/se/jsonapi/node/article?jsonapi_include=1&filter%5Bfield_issue_reference.id%5D=a7d6789c-a2af-4ee7-819a-8206b9ce25e2
(I want to import a list of articles belonging to a journal issue, identified by the uuid a7d6789c-a2af-4ee7-819a-8206b9ce25e2)2. For importing the translated content, I used this configuration while creating the feed type feed_type_en.
- Language: English
- Do not insert new content items (!)
- Update existing content itemsConfigure the map so that the translated items are mapped to the translated target fields, like source "title" is mapped to "title" in English, etc.
When creating the second feed, I provide the feed source in the translated language (here English), something like this:
https://sourcesite.se/en/jsonapi/node/article?jsonapi_include=1&filter%5Bfield_issue_reference.id%5D=a7d6789c-a2af-4ee7-819a-8206b9ce25e2As for the unique field for the import to be mapped, I created a custom JSON ID field (field_json_id) on the target content type to be fed from the source. The source that will be imported into this field is the UUID as above (in JSON this appears as id of the source site item).
The tricky part is that this field_json_id, which is used as the unique field has to be marked as a translatable field (Users may translate this field) on the content type field setting. (Otherwise you get the "this title already exists" error message). And you should choose the translation language for the unique field as well, as in the image below.
- 🇯🇵Japan ptmkenny
I tried to follow @marksmith's instructions, but my experience was a little different, so I'm going to write down what I did here.
I'm using the latest dev version of Feeds on Drupal 11.1.
I have a site with a default language of English and an additional language of Japanese.
I have a custom entity type Dinner with two translated fields, Apples and Oranges, and a third non-translated field, Broccoli.
First, I created a Feed Type "Dinner English". On the settings page, under "Processor" -> "Language", I selected English. Then, on the mappings, for the fields Apples and Oranges, which can be translated, I set the language to "English". Then I created a feed of this feed type and tested import; everything worked as expected.
Next, I created a Feed Type "Dinner Japanese". On the settings page, under "Processor" -> "Language", I selected Japanese. Then, on the mappings, for the fields Apples and Oranges, which can be translated, I set the language to "Japanese". Then I created a feed of this feed type and tested import; everything worked as expected.
Differences from what @marksmith reported:
- I could use the same Feeds GUID for both the default language (English) and my other language (Japanese).
- I used "Insert new content items" for both the default language and the other language.
I would be happy to make a docs page about this, but first I'd like to know why @marksmith and I needed different settings.
Hi everybody,
I think I found the reason for this strange error: #3126351: A translation already exists for the specified language
This is what I do: I import nodes from an old Drupal 7 site with 3 languages: default Enlish and Dutch and French as secondary and third language.
I use separate feeds to import each language..
In each feed I provide the langcode mapped from the language of the translation.
In each feed I provide the tranlation_id which I gave the same language as the language of the translation. (tranlation_id is the id that grouped the translations in the old Drupal 7 site.)
After importing the first language the node table gets a line extra for each imported nodeLangcode is the default language of that node.
When I import the second language this langcode first is overwritten by the language in the mapping and you get: (fr in this case)Further up in the code the processor tries to create the second language but then discovers that fr already exists as the default language and stops with the message A translation already exists for the specified language
When I remove the langcode mapping in the second feed, the import works like charm!
Kind regards and thanks for this marvelous module.
Erwin