diff -u b/src/Feeds/Target/Language.php b/src/Feeds/Target/Language.php --- b/src/Feeds/Target/Language.php +++ b/src/Feeds/Target/Language.php @@ -3,7 +3,8 @@ namespace Drupal\feeds\Feeds\Target; use Drupal\feeds\Plugin\Type\Target\FieldTargetBase; - +use Drupal\feeds\FeedInterface; +use Drupal\Core\Entity\EntityInterface; /** * Defines a language field mapper. @@ -20,8 +21,13 @@ /** * {@inheritdoc} */ - protected function prepareValue($delta, array &$values) { - // TODO: validate and format if neccessary + public function setTarget(FeedInterface $feed, EntityInterface $entity, $field_name, array $values) { + if ($values = $this->prepareValues($values)) { + $langcode = isset($values[0]['value']) ? $values[0]['value'] : NULL; + if (!empty($langcode)) { + $entity->set($field_name, $langcode); + } + } } } only in patch2: unchanged: --- /dev/null +++ b/tests/resources/csv/content_language.csv @@ -0,0 +1,3 @@ +"guid","title","langcode" +1,"Lorem ipsum",und +2,"Ut wisi enim ad minim veniam",es only in patch2: unchanged: --- /dev/null +++ b/tests/src/Kernel/Feeds/Target/LanguageTest.php @@ -0,0 +1,83 @@ +container->get('entity.manager')->getStorage('configurable_language')->create([ + 'id' => 'es', + ]); + $language->save(); + + // Create feed type. + $this->feedType = $this->createFeedTypeForCsv([ + 'guid', + 'title', + 'langcode', + ]); + } + + /** + * Tests importing a content with a specific language. + */ + public function testImportLanguage() { + $this->feedType->addMapping([ + 'target' => 'langcode', + 'map' => ['value' => 'langcode'], + ]); + $this->feedType->save(); + + // Import. + $feed = $this->createFeed($this->feedType->id(), [ + 'source' => $this->resourcesPath() . '/csv/content_language.csv', + ]); + $feed->import(); + + // Assert three created nodes. + $this->assertNodeCount(2); + + $expected = [ + 1 => 'und', + 2 => 'es', + ]; + foreach ($expected as $nid => $value) { + $node = Node::load($nid); + $this->assertEquals($value, $node->langcode->value); + } + } + +}