diff --git a/core/modules/locale/lib/Drupal/locale/Gettext.php b/core/modules/locale/lib/Drupal/locale/Gettext.php
index 376e544..859e4a7 100644
--- a/core/modules/locale/lib/Drupal/locale/Gettext.php
+++ b/core/modules/locale/lib/Drupal/locale/Gettext.php
@@ -82,8 +82,8 @@ static function fileToDatabase($file, $options) {
     );
     // Instantiate and initialize the stream reader for this file.
     $reader = new PoStreamReader();
-    $reader->setLangcode($file->langcode->value);
-    $reader->setURI($file->uri->value);
+    $reader->setLangcode($file->langcode);
+    $reader->setURI($file->uri);
 
     try {
       $reader->open();
@@ -99,7 +99,7 @@ static function fileToDatabase($file, $options) {
 
     // Initialize the database writer.
     $writer = new PoDatabaseWriter();
-    $writer->setLangcode($file->langcode->value);
+    $writer->setLangcode($file->langcode);
     $writer_options = array(
       'overwrite_options' => $options['overwrite_options'],
       'customized' => $options['customized'],
diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php
index e5dccbd..725284a 100644
--- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php
+++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php
@@ -147,8 +147,8 @@ private function makePoFile($path, $filename, $timestamp = NULL, $translations =
       'timestamp' => $timestamp,
       'status' => FILE_STATUS_PERMANENT,
     ));
-    file_put_contents($file->uri, $po_header . $text);
-    touch(drupal_realpath($file->uri), $timestamp);
+    file_put_contents($file->uri->value, $po_header . $text);
+    touch(drupal_realpath($file->uri->value), $timestamp);
     $file->save();
   }
 
diff --git a/core/modules/locale/locale.batch.inc b/core/modules/locale/locale.batch.inc
index c090584..3709406 100644
--- a/core/modules/locale/locale.batch.inc
+++ b/core/modules/locale/locale.batch.inc
@@ -37,15 +37,15 @@ function locale_translation_batch_status_fetch_remote($source, &$context) {
   // data with the remote status.
   if (isset($source->files[LOCALE_TRANSLATION_REMOTE])) {
     $remote_file = $source->files[LOCALE_TRANSLATION_REMOTE];
-    $result = locale_translation_http_check($remote_file->uri->value);
+    $result = locale_translation_http_check($remote_file->uri);
 
     if ($result) {
       // Update the file object with the result data. In case of a redirect we
       // store the resulting uri. If a file is not found we don't update the
       // file object, and store it unchanged.
       if (isset($result['last_modified'])) {
-        $remote_file->uri->value = isset($result['location']) ? $result['location'] : $remote_file->uri->value;
-        $remote_file->timestamp->value = $result['last_modified'];
+        $remote_file->uri = isset($result['location']) ? $result['location'] : $remote_file->uri;
+        $remote_file->timestamp = $result['last_modified'];
         $source->files[LOCALE_TRANSLATION_REMOTE] = $remote_file;
       }
       // Record success.
@@ -333,7 +333,7 @@ function locale_translation_batch_fetch_import($project, $langcode, $options, &$
             // translations after successfull import. Otherwise the temporary
             // file is deleted after being imported.
             if ($import_type == LOCALE_TRANSLATION_DOWNLOADED && config('locale.settings')->get('translation.path') && isset($source_result->files[LOCALE_TRANSLATION_LOCAL])) {
-              if (file_unmanaged_move($file->uri->value, $source_result->files[LOCALE_TRANSLATION_LOCAL]->uri->value, FILE_EXISTS_REPLACE)) {
+              if (file_unmanaged_move($file->uri, $source_result->files[LOCALE_TRANSLATION_LOCAL]->uri, FILE_EXISTS_REPLACE)) {
                 // The downloaded file is now moved to the local file location.
                 // From this point forward we can treat it as if we imported a
                 // local file.
@@ -343,15 +343,15 @@ function locale_translation_batch_fetch_import($project, $langcode, $options, &$
             // The downloaded file is imported but will not be stored locally.
             // Store the timestamp and delete the file.
             if ($import_type == LOCALE_TRANSLATION_DOWNLOADED) {
-              $timestamp = filemtime($source_result->files[$import_type]->uri->value);
+              $timestamp = filemtime($source_result->files[$import_type]->uri);
               $source_result->files[LOCALE_TRANSLATION_IMPORTED]->timestamp = $timestamp;
               $source_result->files[LOCALE_TRANSLATION_IMPORTED]->last_checked = REQUEST_TIME;
-              file_unmanaged_delete($file->uri->value);
+              file_unmanaged_delete($file->uri);
             }
             // If the translation file is stored in the local directory. The
             // timestamp of the file is stored.
             if ($import_type == LOCALE_TRANSLATION_LOCAL) {
-              $timestamp = filemtime($source_result->files[$import_type]->uri->value);
+              $timestamp = filemtime($source_result->files[$import_type]->uri);
               $source_result->files[LOCALE_TRANSLATION_LOCAL]->timestamp = $timestamp;
               $source_result->files[LOCALE_TRANSLATION_IMPORTED]->timestamp = $timestamp;
               $source_result->files[LOCALE_TRANSLATION_IMPORTED]->last_checked = REQUEST_TIME;
@@ -361,7 +361,7 @@ function locale_translation_batch_fetch_import($project, $langcode, $options, &$
           else {
             // File import failed. We can delete the temporary file.
             if ($import_type == LOCALE_TRANSLATION_DOWNLOADED) {
-              file_unmanaged_delete($file->uri->value);
+              file_unmanaged_delete($file->uri);
             }
           }
         }
@@ -501,7 +501,7 @@ function locale_translation_http_check($uri) {
  *   File object if download was successful. FALSE on failure.
  */
 function locale_translation_download_source($source_file) {
-  if ($uri = system_retrieve_file($source_file->uri->value, 'temporary://')) {
+  if ($uri = system_retrieve_file($source_file->uri, 'temporary://')) {
     $file = new stdClass();
     $file->project = $source_file->project;
     $file->langcode = $source_file->langcode;
diff --git a/core/modules/locale/locale.bulk.inc b/core/modules/locale/locale.bulk.inc
index a35b4eb..efb8bb4 100644
--- a/core/modules/locale/locale.bulk.inc
+++ b/core/modules/locale/locale.bulk.inc
@@ -9,6 +9,7 @@
 use Drupal\locale\Gettext;
 use Drupal\locale\PoDatabaseReader;
 use Drupal\Core\Language\Language;
+use Drupal\file\FileInterface;
 
 
 /**
@@ -125,7 +126,7 @@ function locale_translate_import_form_submit($form, &$form_state) {
       'customized' => $form_state['values']['customized'] ? LOCALE_CUSTOMIZED : LOCALE_NOT_CUSTOMIZED,
     );
     $file = locale_translate_file_attach_properties($file, $options);
-    $batch = locale_translate_batch_build(array($file->uri->value => $file), $options);
+    $batch = locale_translate_batch_build(array($file->uri => $file), $options);
     batch_set($batch);
   }
   else {
@@ -453,7 +454,7 @@ function locale_translate_batch_import($file, $options, &$context) {
     try {
       if (empty($context['sandbox'])) {
         $context['sandbox']['parse_state'] = array(
-          'filesize' => filesize(drupal_realpath($file->uri->value)),
+          'filesize' => filesize(drupal_realpath($file->uri)),
           'chunk_size' => 200,
           'seek' => 0,
         );
@@ -464,7 +465,7 @@ function locale_translate_batch_import($file, $options, &$context) {
       $report = GetText::fileToDatabase($file, $options);
       // If not yet finished with reading, mark progress based on size and
       // position.
-      if ($report['seek'] < filesize($file->uri->value)) {
+      if ($report['seek'] < filesize($file->uri)) {
 
         $context['sandbox']['parse_state']['seek'] = $report['seek'];
         // Maximize the progress bar at 95% before completion, the batch API
@@ -484,34 +485,34 @@ function locale_translate_batch_import($file, $options, &$context) {
         $context['finished'] = 1;
 
         // Store the file data for processing by the next batch operation.
-        $file->timestamp->value = filemtime($file->uri->value);
-        $context['results']['files'][$file->uri->value] = $file;
-        $context['results']['languages'][$file->uri->value] = $file->langcode->value;
+        $file->timestamp = filemtime($file->uri);
+        $context['results']['files'][$file->uri] = $file;
+        $context['results']['languages'][$file->uri] = $file->langcode;
       }
 
       // Add the reported values to the statistics for this file.
       // Each import iteration reports statistics in an array. The results of
       // each iteration are added and merged here and stored per file.
-      if (!isset($context['results']['stats']) || !isset($context['results']['stats'][$file->uri->value])) {
-        $context['results']['stats'][$file->uri->value] = array();
+      if (!isset($context['results']['stats']) || !isset($context['results']['stats'][$file->uri])) {
+        $context['results']['stats'][$file->uri] = array();
       }
       foreach ($report as $key => $value) {
         if (is_numeric($report[$key])) {
-          if (!isset($context['results']['stats'][$file->uri->value][$key])) {
-            $context['results']['stats'][$file->uri->value][$key] = 0;
+          if (!isset($context['results']['stats'][$file->uri][$key])) {
+            $context['results']['stats'][$file->uri][$key] = 0;
           }
-          $context['results']['stats'][$file->uri->value][$key] += $report[$key];
+          $context['results']['stats'][$file->uri][$key] += $report[$key];
         }
         elseif (is_array($value)) {
-          $context['results']['stats'][$file->uri->value] += array($key => array());
-          $context['results']['stats'][$file->uri->value][$key] = array_merge($context['results']['stats'][$file->uri->value][$key], $value);
+          $context['results']['stats'][$file->uri] += array($key => array());
+          $context['results']['stats'][$file->uri][$key] = array_merge($context['results']['stats'][$file->uri][$key], $value);
         }
       }
     }
     catch (Exception $exception) {
       // Import failed. Store the data of the failing file.
       $context['results']['failed_files'][] = $file;
-      watchdog('locale', 'Unable to import translations file: @file', array('@file' => $file->uri->value));
+      watchdog('locale', 'Unable to import translations file: @file', array('@file' => $file->uri));
     }
   }
 }
@@ -684,6 +685,14 @@ function locale_translate_file_create($filepath) {
  *   Modified file object.
  */
 function locale_translate_file_attach_properties($file, $options = array()) {
+  // If $file is a file entity, convert it to a stdClass.
+  if ($file instanceof FileInterface) {
+    $file = (object) array(
+      'filename' => $file->filename->value,
+      'uri' => $file->uri->value,
+    );
+  }
+
   // Extract project, verion and language code from the file name. Supported:
   // {project}-{version}.{langcode}.po, {prefix}.{langcode}.po or {langcode}.po
   preg_match('!
@@ -700,7 +709,7 @@ function locale_translate_file_attach_properties($file, $options = array()) {
     ([^\./]+)               # language code (group 5)
     \.                      # .
     po                      # po extension
-    $!x', $file->filename->value, $matches);
+    $!x', $file->filename, $matches);
   if (isset($matches[5])) {
     $file->project = $matches[2] . $matches[3];
     $file->version = $matches[4];
