 .../edit/Access/EditEntityFieldAccessCheck.php     |    2 +-
 .../edit/lib/Drupal/edit/EditController.php        |    2 +-
 .../Access/EditEntityFieldAccessCheckTest.php      |   29 ++++++++------------
 3 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/core/modules/edit/lib/Drupal/edit/Access/EditEntityFieldAccessCheck.php b/core/modules/edit/lib/Drupal/edit/Access/EditEntityFieldAccessCheck.php
index 2c5dd92..2dbfc45 100644
--- a/core/modules/edit/lib/Drupal/edit/Access/EditEntityFieldAccessCheck.php
+++ b/core/modules/edit/lib/Drupal/edit/Access/EditEntityFieldAccessCheck.php
@@ -88,7 +88,7 @@ protected function validateAndUpcastRequestAttributes(Request $request) {
       throw new NotFoundHttpException();
     }
     $langcode = $request->attributes->get('langcode');
-    if (!$langcode || (field_valid_language($langcode) !== $langcode)) {
+    if (!$langcode || !$entity->hasTranslation($langcode)) {
       throw new NotFoundHttpException();
     }
   }
diff --git a/core/modules/edit/lib/Drupal/edit/EditController.php b/core/modules/edit/lib/Drupal/edit/EditController.php
index eb1865e..f5b0f17 100644
--- a/core/modules/edit/lib/Drupal/edit/EditController.php
+++ b/core/modules/edit/lib/Drupal/edit/EditController.php
@@ -148,7 +148,7 @@ public function metadata(Request $request) {
       if (!$field_name || !$entity->hasField($field_name)) {
         throw new NotFoundHttpException();
       }
-      if (!$langcode || (field_valid_language($langcode) !== $langcode)) {
+      if (!$langcode || !$entity->hasTranslation($langcode)) {
         throw new NotFoundHttpException();
       }
 
diff --git a/core/modules/edit/tests/Drupal/edit/Tests/Access/EditEntityFieldAccessCheckTest.php b/core/modules/edit/tests/Drupal/edit/Tests/Access/EditEntityFieldAccessCheckTest.php
index a745148..ba2e038 100644
--- a/core/modules/edit/tests/Drupal/edit/Tests/Access/EditEntityFieldAccessCheckTest.php
+++ b/core/modules/edit/tests/Drupal/edit/Tests/Access/EditEntityFieldAccessCheckTest.php
@@ -5,7 +5,7 @@
  * Contains \Drupal\edit\Tests\Access\EditEntityFieldAccessCheckTest.
  */
 
-namespace Drupal\edit\Tests\Access {
+namespace Drupal\edit\Tests\Access;
 
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Route;
@@ -133,6 +133,10 @@ public function testAccess(EntityInterface $entity, FieldInterface $field = NULL
       ->method('get')
       ->with('valid')
       ->will($this->returnValue($field));
+    $entity_with_field->expects($this->once())
+      ->method('hasTranslation')
+      ->with(Language::LANGCODE_NOT_SPECIFIED)
+      ->will($this->returnValue(TRUE));
 
     // Prepare the request to be valid.
     $request->attributes->set('entity_type', 'test_entity');
@@ -242,10 +246,16 @@ public function testAccessWithNotPassedLanguage() {
    * @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    */
   public function testAccessWithInvalidLanguage() {
+    $entity = $this->createMockEntity();
+    $entity->expects($this->once())
+      ->method('hasTranslation')
+      ->with('xx-lolspeak')
+      ->will($this->returnValue(FALSE));
+
     $route = new Route('/edit/form/test_entity/1/body/und/full', array(), array('_access_edit_entity_field' => 'TRUE'));
     $request = new Request();
     $request->attributes->set('entity_type', 'entity_test');
-    $request->attributes->set('entity', $this->createMockEntity());
+    $request->attributes->set('entity', $entity);
     $request->attributes->set('field_name', 'valid');
     $request->attributes->set('langcode', 'xx-lolspeak');
 
@@ -272,18 +282,3 @@ protected function createMockEntity() {
   }
 
 }
-
-}
-
-// @todo remove once field_access() and field_valid_language() can be injected.
-namespace {
-
-  use Drupal\Core\Language\Language;
-
-  if (!function_exists('field_valid_language')) {
-    function field_valid_language($langcode, $default = TRUE) {
-      return $langcode == Language::LANGCODE_NOT_SPECIFIED ? Language::LANGCODE_NOT_SPECIFIED : 'en';
-    }
-  }
-
-}
