diff --git a/core/modules/entity/lib/Drupal/entity/Entity.php b/core/modules/entity/lib/Drupal/entity/Entity.php
index 7e73024..a476534 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity.php
@@ -220,9 +220,12 @@ class Entity implements EntityInterface {
       return isset($langcode) ? $langcode : $default_language->langcode;
     }
     else {
-      // If there is a langcode defined for this field, just return it. Otherwise
-      // return LANGUAGE_NOT_SPECIFIED.
-      return (isset($this->langcode) ? $this->langcode : LANGUAGE_NOT_SPECIFIED);
+      if ($langcode != NULL && $langcode != LANGUAGE_NOT_SPECIFIED) {
+        $field_name = $field['field_name'];
+        throw new EntityStorageException("Field $field_name is not translatable and does only work with langcode = LANGUAGE_NOT_SPECIFIED");
+      }
+      // For non-translatable the langcode is LANGUAGE_NOT_SPECIFIED.
+      return LANGUAGE_NOT_SPECIFIED;
     }
   }
 
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php
index 9875b39..9e8b58e 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityTranslationTest.php
@@ -10,6 +10,7 @@ namespace Drupal\entity\Tests;
 use Exception;
 use InvalidArgumentException;
 use Drupal\simpletest\WebTestBase;
+use Drupal\entity\EntityStorageException;
 
 /**
  * Tests entity translation.
@@ -86,18 +87,25 @@ class EntityTranslationTest extends WebTestBase {
     $value = $entity->get($this->field_name);
     $this->assertEqual($value, array(0 => array('value' => 'default value')), 'Untranslated value retrieved.');
 
+    $message = "An exception is thrown when trying to set an field with an invalid language";
+
     // Set the value in a certain language. As the entity is not
-    // language-specific it should use the default language and so ignore the
-    // specified language.
-    $entity->set($this->field_name, array(0 => array('value' => 'default value2')), $this->langcodes[1]);
-    $value = $entity->get($this->field_name);
-    $this->assertEqual($value, array(0 => array('value' => 'default value2')), 'Untranslated value updated.');
-    $this->assertFalse($entity->translations(), 'No translations are available');
+    // language-specific it will throw an exception.
+    try {
+      $entity->set($this->field_name, array(0 => array('value' => 'default value2')), $this->langcodes[1]);
+      $this->fail($message);
+    } catch (EntityStorageException $e) {
+      $this->assertTrue($e instanceof EntityStorageException, $message);
+    }
 
-    // Test getting a field value using the default language for a not
+    // Test getting a field value using a specific language for a not
     // language-specific entity.
-    $value = $entity->get($this->field_name, $this->langcodes[1]);
-    $this->assertEqual($value, array(0 => array('value' => 'default value2')), 'Untranslated value retrieved.');
+    try {
+      $value = $entity->get($this->field_name, $this->langcodes[1]);
+      $this->fail($message);
+    } catch (EntityStorageException $e) {
+      $this->assertTrue($e instanceof EntityStorageException, $message);
+    }
 
     // Now, make the entity language-specific by assigning a language and test
     // translating it.
