diff --git a/core/modules/aggregator/aggregator.install b/core/modules/aggregator/aggregator.install
index 0f52e71..e145abe 100644
--- a/core/modules/aggregator/aggregator.install
+++ b/core/modules/aggregator/aggregator.install
@@ -133,6 +133,13 @@ function aggregator_schema() {
         'default' => '',
         'description' => 'Title of the feed.',
       ),
+      'langcode' => array(
+        'description' => 'The {language}.langcode of this feed.',
+        'type' => 'varchar',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'url' => array(
         'type' => 'text',
         'not null' => TRUE,
@@ -232,6 +239,13 @@ function aggregator_schema() {
         'default' => '',
         'description' => 'Title of the feed item.',
       ),
+      'langcode' => array(
+        'description' => 'The {language}.langcode of this feed item.',
+        'type' => 'varchar',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'link' => array(
         'type' => 'text',
         'not null' => TRUE,
@@ -293,3 +307,31 @@ function aggregrator_update_8000() {
     'aggregator_category_selector' => 'source.category_selector',
   ));
 }
+
+/**
+ * Adds the langcode field to {aggregator_item} and {aggregator_feed}.
+ */
+function aggregator_update_8001() {
+  // Add the field.
+  db_add_field('aggregator_feed', 'langcode', array(
+    'description' => 'The {language}.langcode of this feed.',
+    'type' => 'varchar',
+    'length' => 12,
+    'not null' => TRUE,
+    'default' => '',
+  ));
+  db_add_field('aggregator_item', 'langcode', array(
+    'description' => 'The {language}.langcode of this feed item.',
+    'type' => 'varchar',
+    'length' => 12,
+    'not null' => TRUE,
+    'default' => '',
+  ));
+  // Set langcode to LANGUAGE_DEFAULT.
+  db_update('aggregator_feed')
+    ->fields(array('langcode' => LANGUAGE_DEFAULT))
+    ->execute();
+  db_update('aggregator_item')
+    ->fields(array('langcode' => LANGUAGE_DEFAULT))
+    ->execute();
+}
diff --git a/core/modules/aggregator/aggregator.processor.inc b/core/modules/aggregator/aggregator.processor.inc
index 54ae7a5..10b52f1 100644
--- a/core/modules/aggregator/aggregator.processor.inc
+++ b/core/modules/aggregator/aggregator.processor.inc
@@ -49,7 +49,7 @@ function aggregator_aggregator_process($feed) {
           $entry = reset($entry);
         }
         else {
-          $entry = entity_create('aggregator_item', array());
+          $entry = entity_create('aggregator_item', array('langcode' => $feed->language()->langcode));
         }
         if ($item['timestamp']) {
           $entry->timestamp->value = $item['timestamp'];
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php b/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
index 12a156b..97fb698 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
@@ -30,6 +30,14 @@ public function form(array $form, array &$form_state, EntityInterface $feed) {
       '#description' => t('The name of the feed (or the name of the website providing the feed).'),
       '#required' => TRUE,
     );
+
+    $form['langcode'] = array(
+      '#title' => t('Language'),
+      '#type' => 'language_select',
+      '#default_value' => $feed->language()->langcode,
+      '#languages' => LANGUAGE_ALL,
+    );
+
     $form['url'] = array(
       '#type' => 'url',
       '#title' => t('URL'),
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php b/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php
index 6268201..d8c052c 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/FeedStorageController.php
@@ -127,6 +127,11 @@ public function baseFieldDefinitions() {
       'description' => t('The title of the feed.'),
       'type' => 'string_field',
     );
+    $fields['langcode'] = array(
+      'label' => t('Language code'),
+      'description' => t('The feed language code.'),
+      'type' => 'language_field',
+    );
     $fields['url'] = array(
       'label' => t('URL'),
       'description' => t('The URL to the feed.'),
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php b/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php
index 87479ed..69876ab 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/ItemStorageController.php
@@ -87,6 +87,11 @@ public function baseFieldDefinitions() {
       'description' => t('The title of the feed item.'),
       'type' => 'string_field',
     );
+    $fields['langcode'] = array(
+      'label' => t('Language code'),
+      'description' => t('The feed item language code.'),
+      'type' => 'language_field',
+    );
     $fields['link'] = array(
       'label' => t('Link'),
       'description' => t('The link of the feed item.'),
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
index c53558e..916931d 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
@@ -51,6 +51,13 @@ class Feed extends EntityNG implements ContentEntityInterface {
   public $title;
 
   /**
+   * The feed language code.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldInterface
+   */
+  public $langcode;
+
+  /**
    * URL to the feed.
    *
    * @var \Drupal\Core\Entity\Field\FieldInterface
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php
index cc780bd..8f6468c 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php
@@ -57,6 +57,13 @@ class Item extends EntityNG implements ContentEntityInterface {
   public $title;
 
   /**
+   * The feed language code.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldInterface
+   */
+  public $langcode;
+
+  /**
    * Link to the feed item.
    *
    * @var \Drupal\Core\Entity\Field\FieldInterface
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorTestBase.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorTestBase.php
index d5fc747..d91a6ff 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorTestBase.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorTestBase.php
@@ -43,14 +43,16 @@ function setUp() {
    * @param $feed_url
    *   (optional) If given, feed will be created with this URL, otherwise
    *   /rss.xml will be used. Defaults to NULL.
+   * @param array $edit
+   *   Array with additional form fields.
    *
    * @return \Drupal\aggregator\Plugin\Core\Entity\Feed $feed
    *   Full feed object if possible.
    *
    * @see getFeedEditArray()
    */
-  function createFeed($feed_url = NULL) {
-    $edit = $this->getFeedEditArray($feed_url);
+  function createFeed($feed_url = NULL, array $edit = array()) {
+    $edit = $this->getFeedEditArray($feed_url, $edit);
     $this->drupalPost('admin/config/services/aggregator/add/feed', $edit, t('Save'));
     $this->assertRaw(t('The feed %name has been added.', array('%name' => $edit['title'])), format_string('The feed !name has been added.', array('!name' => $edit['title'])));
 
@@ -76,11 +78,13 @@ function deleteFeed(Feed $feed) {
    * @param $feed_url
    *   (optional) If given, feed will be created with this URL, otherwise
    *   /rss.xml will be used. Defaults to NULL.
+   * @param array $edit
+   *   Array with additional form fields.
    *
    * @return
    *   A feed array.
    */
-  function getFeedEditArray($feed_url = NULL) {
+  function getFeedEditArray($feed_url = NULL, array $edit = array()) {
     $feed_name = $this->randomName(10);
     if (!$feed_url) {
       $feed_url = url('rss.xml', array(
@@ -88,7 +92,7 @@ function getFeedEditArray($feed_url = NULL) {
         'absolute' => TRUE,
       ));
     }
-    $edit = array(
+    $edit += array(
       'title' => $feed_name,
       'url' => $feed_url,
       'refresh' => '900',
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedLanguageTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedLanguageTest.php
new file mode 100644
index 0000000..611638a
--- /dev/null
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedLanguageTest.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\aggregator\Tests\FeedLanguageTest.
+ */
+
+namespace Drupal\aggregator\Tests;
+
+use Drupal\Core\Language\Language;
+
+/**
+ * Tests aggregator feeds in multiple languages.
+ */
+class FeedLanguageTest extends AggregatorTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('language');
+
+  /**
+   * List of langcodes.
+   *
+   * @var array
+   */
+  protected $langcodes = array();
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Multilingual feeds',
+      'description' => 'Checks creating of feeds in multiple languages',
+      'group' => 'Aggregator',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp();
+
+    // Create test languages.
+    $this->langcodes = array(language_load('en'));
+    for ($i = 1; $i < 3; ++$i) {
+      $language = new Language(array(
+        'langcode' => 'l' . $i,
+        'name' => $this->randomString(),
+      ));
+      language_save($language);
+      $this->langcodes[$i] = $language;
+    }
+  }
+
+  /**
+   * Tests creation of feeds with a language.
+   */
+  public function testFeedLanguage() {
+    $feeds = array();
+    // Create feeds.
+    $feeds[1] = $this->createFeed(NULL, array('langcode' => $this->langcodes[1]->langcode));
+    $feeds[2] = $this->createFeed(NULL, array('langcode' => $this->langcodes[2]->langcode));
+
+    // Make sure that the language has been assigned.
+    $this->assertEqual($feeds[1]->language()->langcode, $this->langcodes[1]->langcode);
+    $this->assertEqual($feeds[2]->language()->langcode, $this->langcodes[2]->langcode);
+
+    // Create example nodes to create feed items from and then update the feeds.
+    $this->createSampleNodes();
+    $this->cronRun();
+
+    // Loop over the created feed items and verify that their language matches
+    // the one from the feed.
+    foreach ($feeds as $feed) {
+      $items = entity_load_multiple_by_properties('aggregator_item', array('fid' => $feed->id()));
+      $this->assertTrue(count($items) > 0, 'Feed items were created.');
+      foreach ($items as $item) {
+        $this->assertEqual($item->language()->langcode, $feed->language()->langcode);
+      }
+    }
+  }
+}
