diff --git a/core/modules/locale/locale.compare.inc b/core/modules/locale/locale.compare.inc
index 4a2f69a..2aa6526 100644
--- a/core/modules/locale/locale.compare.inc
+++ b/core/modules/locale/locale.compare.inc
@@ -44,11 +44,6 @@ function locale_translation_flush_projects() {
  *   - "status": Project status, 1 = enabled.
  */
 function locale_translation_build_projects() {
-  // This function depends on Update module. We degrade gracefully.
-  if (!\Drupal::moduleHandler()->moduleExists('update')) {
-    return array();
-  }
-
   // Get the project list based on .info.yml files.
   $projects = locale_translation_project_list();
 
@@ -57,33 +52,18 @@ function locale_translation_build_projects() {
 
   $default_server = locale_translation_default_translation_server();
 
-  // If project is a dev release, or core, find the latest available release.
-  $project_updates = update_get_available(TRUE);
   foreach ($projects as $name => $data) {
-    if (isset($project_updates[$name]['releases']) && $project_updates[$name]['project_status'] != 'not-fetched') {
-      // Find out if a dev version is installed.
-      if (preg_match("/^\d+\.x-(\d+)\..*-dev$/", $data['info']['version'], $matches) ||
-          preg_match("/^(\d+)\.\d+\.\d+.*-dev$/", $data['info']['version'], $matches)) {
-        // Find a suitable release to use as alternative translation.
-        foreach ($project_updates[$name]['releases'] as $project_release) {
-          // The first release with the same major release number which is not a
-          // dev release is the one. Releases are sorted the most recent first.
-          // For example the major release number for a contrib module
-          // 8.x-2.x-dev is "2", for core 8.1.0-dev is "8".
-          // @todo https://www.drupal.org/node/1774024 Make a helper function.
-          if ($project_release['version_major'] == $matches[1] &&
-              (!isset($project_release['version_extra']) || $project_release['version_extra'] != 'dev')) {
-            $release = $project_release;
-            break;
-          }
-        }
+    // For dev releases, remove the '-dev' part and trust the translation server
+    // to fall back to the latest stable release for that branch.
+    if (isset($data['info']['version']) && strpos($data['info']['version'], '-dev')) {
+      if (preg_match("/^(\d+\.x-\d+\.).*$/", $data['info']['version'], $matches)) {
+        // Example matches: 8.x-1.x-dev, 8.x-1.0-alpha1+5-dev => 8.x-1.x
+        $data['info']['version'] = $matches[1] . 'x';
       }
-
-      if (!empty($release['version'])) {
-        $data['info']['version'] = $release['version'];
+      elseif (preg_match("/^(\d+\.\d+\.).*$/", $data['info']['version'], $matches)) {
+        // Example match: 8.0.0-dev => 8.0.x (Drupal core)
+        $data['info']['version'] = $matches[1] . 'x';
       }
-
-      unset($release);
     }
 
     // For every project store information.
@@ -96,6 +76,7 @@ function locale_translation_build_projects() {
       'server_pattern' => isset($data['info']['interface translation server pattern']) && $data['info']['interface translation server pattern'] ? $data['info']['interface translation server pattern'] : $default_server['pattern'],
       'status' => !empty($data['project_status']) ? 1 : 0,
     );
+
     $project = (object) $data;
     $projects[$name] = $project;
 
@@ -117,8 +98,6 @@ function locale_translation_build_projects() {
 function locale_translation_project_list() {
   $projects = &drupal_static(__FUNCTION__, array());
   if (empty($projects)) {
-    module_load_include('compare.inc', 'update');
-    $config = \Drupal::config('locale.settings');
     $projects = array();
 
     $additional_whitelist = array(
diff --git a/core/modules/locale/locale.translation.inc b/core/modules/locale/locale.translation.inc
index f097602..0383aaf 100644
--- a/core/modules/locale/locale.translation.inc
+++ b/core/modules/locale/locale.translation.inc
@@ -60,7 +60,7 @@ function locale_translation_get_projects(array $project_names = array()) {
     $row_count = \Drupal::service('locale.project')->countProjects();
     // https://www.drupal.org/node/1777106 is a follow-up issue to make the
     // check for possible out-of-date project information more robust.
-    if ($row_count == 0 && \Drupal::moduleHandler()->moduleExists('update')) {
+    if ($row_count == 0) {
       module_load_include('compare.inc', 'locale');
       // At least the core project should be in the database, so we build the
       // data if none are found.
diff --git a/core/modules/locale/src/Form/TranslationStatusForm.php b/core/modules/locale/src/Form/TranslationStatusForm.php
index 90d2193..fab5635 100644
--- a/core/modules/locale/src/Form/TranslationStatusForm.php
+++ b/core/modules/locale/src/Form/TranslationStatusForm.php
@@ -232,9 +232,6 @@ protected function prepareUpdateData(array $status) {
    * This method will produce debug information including the respective path(s)
    * based on this setting.
    *
-   * Translations for development versions are never fetched, so the debug info
-   * for that is a fixed message.
-   *
    * @param array $project_info
    *   An array which is the project information of the source.
    *
@@ -245,9 +242,6 @@ protected function createInfoString($project_info) {
     $remote_path = isset($project_info->files['remote']->uri) ? $project_info->files['remote']->uri : FALSE;
     $local_path = isset($project_info->files['local']->uri) ? $project_info->files['local']->uri : FALSE;
 
-    if (strpos($project_info->version, 'dev') !== FALSE) {
-      return $this->t('No translation files are provided for development releases.');
-    }
     if (locale_translation_use_remote_source() && $remote_path && $local_path) {
       return $this->t('File not found at %remote_path nor at %local_path', array(
         '%remote_path' => $remote_path,
diff --git a/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php b/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php
index a0a8684..17fd2c8 100644
--- a/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php
+++ b/core/modules/locale/src/Tests/LocaleConfigTranslationImportTest.php
@@ -23,7 +23,7 @@ class LocaleConfigTranslationImportTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('language', 'update', 'locale_test_translate');
+  public static $modules = array('language', 'locale_test_translate');
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/locale/src/Tests/LocaleUpdateBase.php b/core/modules/locale/src/Tests/LocaleUpdateBase.php
index 5f5408b..74edb4a 100644
--- a/core/modules/locale/src/Tests/LocaleUpdateBase.php
+++ b/core/modules/locale/src/Tests/LocaleUpdateBase.php
@@ -50,7 +50,7 @@
    *
    * @var array
    */
-  public static $modules = array('update', 'update_test', 'locale', 'locale_test');
+  public static $modules = array('locale', 'locale_test');
 
   /**
    * {@inheritdoc}
@@ -58,11 +58,6 @@
   protected function setUp() {
     parent::setUp();
 
-    // Update module should not go out to d.o to check for updates. We override
-    // the url to the default update_test xml path. But without providing
-    // a mock xml file, no update data will be found.
-    $this->config('update.settings')->set('fetch.url', Url::fromRoute('update_test.update_test', [], ['absolute' => TRUE])->toString())->save();
-
     // Setup timestamps to identify old and new translation sources.
     $this->timestampOld = REQUEST_TIME - 300;
     $this->timestampMedium = REQUEST_TIME - 200;
diff --git a/core/modules/locale/src/Tests/LocaleUpdateDevelopmentReleaseTest.php b/core/modules/locale/src/Tests/LocaleUpdateDevelopmentReleaseTest.php
new file mode 100644
index 0000000..09ab884
--- /dev/null
+++ b/core/modules/locale/src/Tests/LocaleUpdateDevelopmentReleaseTest.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\locale\Tests\LocaleUpdateDevelopmentReleaseTest.
+ */
+
+namespace Drupal\locale\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Test for proper version fallback in case of a development release.
+ *
+ * @group language
+ */
+class LocaleUpdateDevelopmentReleaseTest extends WebTestBase {
+
+  public static $modules = array('locale', 'locale_test_development_release');
+
+  protected function setUp() {
+    parent::setUp();
+    module_load_include('compare.inc', 'locale');
+    $admin_user = $this->drupalCreateUser(array('administer modules', 'administer languages', 'access administration pages', 'translate interface'));
+    $this->drupalLogin($admin_user);
+    $this->drupalPostForm('admin/config/regional/language/add', array('predefined_langcode' => 'hu'), t('Add language'));
+  }
+
+  public function testLocaleUpdateDevelopmentRelease() {
+    $projects = locale_translation_build_projects();
+    $this->verbose($projects['drupal']->info['version']);
+    $this->assertEqual($projects['drupal']->info['version'], '8.0.x', 'The branch of the core dev release.');
+    $this->verbose($projects['contrib']->info['version']);
+    $this->assertEqual($projects['contrib']->info['version'], '12.x-10.x', 'The branch of the contrib module dev release.');
+  }
+}
diff --git a/core/modules/locale/src/Tests/LocaleUpdateInterfaceTest.php b/core/modules/locale/src/Tests/LocaleUpdateInterfaceTest.php
index a66ff48..0490789 100644
--- a/core/modules/locale/src/Tests/LocaleUpdateInterfaceTest.php
+++ b/core/modules/locale/src/Tests/LocaleUpdateInterfaceTest.php
@@ -88,7 +88,8 @@ public function testInterface() {
     $this->drupalGet('admin/reports/translations');
     $this->assertText(t('Missing translations for one project'), 'No translations found');
     $this->assertText(SafeMarkup::format('@module (@version). @info', array('@module' => 'Locale test translate', '@version' => '1.3-dev', '@info' => t('No translation files are provided for development releases.'))), 'Release details');
-    $this->assertText(t('No translation files are provided for development releases.'), 'Release info');
+//    @todo Replace by an assertion for the 'branch' URL.
+//    $this->assertText(t('No translation files are provided for development releases.'), 'Release info');
 
     // Override Drupal core translation status as 'no translations found'.
     $status = locale_translation_get_status();
diff --git a/core/modules/locale/src/Tests/LocaleUpdateNotDevelopmentReleaseTest.php b/core/modules/locale/src/Tests/LocaleUpdateNotDevelopmentReleaseTest.php
deleted file mode 100644
index 0763809..0000000
--- a/core/modules/locale/src/Tests/LocaleUpdateNotDevelopmentReleaseTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\locale\Tests\LocaleUpdateNotDevelopmentReleaseTest.
- */
-
-namespace Drupal\locale\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Test for finding the first available normal core release version,
- * in case of core is a development release.
- *
- * @group language
- */
-class LocaleUpdateNotDevelopmentReleaseTest extends WebTestBase {
-
-  public static $modules = array('update', 'locale', 'locale_test_not_development_release');
-
-  protected function setUp() {
-    parent::setUp();
-    module_load_include('compare.inc', 'locale');
-    $admin_user = $this->drupalCreateUser(array('administer modules', 'administer languages', 'access administration pages', 'translate interface'));
-    $this->drupalLogin($admin_user);
-    $this->drupalPostForm('admin/config/regional/language/add', array('predefined_langcode' => 'hu'), t('Add language'));
-  }
-
-  public function testLocaleUpdateNotDevelopmentRelease() {
-    // Set available Drupal releases for test.
-    $available = array(
-      'title' => 'Drupal core',
-      'short_name' => 'drupal',
-      'type' => 'project_core',
-      'api_version' => '8.x',
-      'project_status' => 'unsupported',
-      'link' => 'https://www.drupal.org/project/drupal',
-      'terms' => '',
-      'releases' => array(
-        '8.0.0-alpha110' => array(
-          'name'          => 'drupal 8.0.0-alpha110',
-          'version'       => '8.0.0-alpha110',
-          'tag'           => '8.0.0-alpha110',
-          'version_major' => '8',
-          'version_minor' => '0',
-          'version_patch' => '0',
-          'version_extra' => 'alpha110',
-          'status'        => 'published',
-          'release_link'  => 'https://www.drupal.org/node/2316617',
-          'download_link' => 'http://ftp.drupal.org/files/projects/drupal-8.0.0-alpha110.tar.gz',
-          'date'          => '1407344628',
-          'mdhash'        => '9d71afdd0ce541f2ff5ca2fbbca00df7',
-          'filesize'      => '9172832',
-          'files'         => '',
-          'terms'         => array(),
-        ),
-        '8.0.0-alpha100' => array(
-          'name'          => 'drupal 8.0.0-alpha100',
-          'version'       => '8.0.0-alpha100',
-          'tag'           => '8.0.0-alpha100',
-          'version_major' => '8',
-          'version_minor' => '0',
-          'version_patch' => '0',
-          'version_extra' => 'alpha100',
-          'status'        => 'published',
-          'release_link'  => 'https://www.drupal.org/node/2316617',
-          'download_link' => 'http://ftp.drupal.org/files/projects/drupal-8.0.0-alpha100.tar.gz',
-          'date'          => '1407344628',
-          'mdhash'        => '9d71afdd0ce541f2ff5ca2fbbca00df7',
-          'filesize'      => '9172832',
-          'files'         => '',
-          'terms'         => array(),
-        ),
-      ),
-    );
-    $available['last_fetch'] = REQUEST_TIME;
-    \Drupal::keyValueExpirable('update_available_releases')->setWithExpire('drupal', $available, 10);
-    $projects = locale_translation_build_projects();
-    $this->verbose($projects['drupal']->info['version']);
-    $this->assertEqual($projects['drupal']->info['version'], '8.0.0-alpha110', 'The first release with the same major release number which is not a development release.');
-  }
-}
diff --git a/core/modules/locale/tests/modules/locale_test_development_release/locale_test_development_release.info.yml b/core/modules/locale/tests/modules/locale_test_development_release/locale_test_development_release.info.yml
new file mode 100644
index 0000000..fd1481c
--- /dev/null
+++ b/core/modules/locale/tests/modules/locale_test_development_release/locale_test_development_release.info.yml
@@ -0,0 +1,7 @@
+name: 'Locale Test Development Release'
+type: module
+description: 'Helper module to test the behaviour when the core verison is a development release.'
+package: Testing
+version: VERSION
+core: 8.x
+hidden: true
diff --git a/core/modules/locale/tests/modules/locale_test_development_release/locale_test_development_release.module b/core/modules/locale/tests/modules/locale_test_development_release/locale_test_development_release.module
new file mode 100644
index 0000000..18a1f10
--- /dev/null
+++ b/core/modules/locale/tests/modules/locale_test_development_release/locale_test_development_release.module
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ * Simulate a Drupal version.
+ */
+
+use Drupal\Core\Extension\Extension;
+
+/**
+ * Implements hook_system_info_alter().
+ *
+ * Change the core version number to a development one for testing.
+ * 8.0.0-alpha102-dev is the simulated version.
+ */
+function locale_test_development_release_system_info_alter(&$info, Extension $file, $type) {
+  if (isset($info['package']) && $info['package'] == 'Core') {
+    $info['version'] = '8.0.0-alpha102-dev';
+  }
+}
+
+/**
+ * Implements hook_locale_translation_projects_alter().
+ *
+ * Add a contrib module with a dev release to list of translatable modules.
+ */
+function locale_test_development_release_locale_translation_projects_alter(&$projects) {
+  $projects['contrib'] = [
+    'name' => 'contrib',
+    'info' => array(
+      'name' => 'Contributed module',
+      'package' => 'Other',
+      'version' => '12.x-10.4-unstable11+14-dev',
+      'project' => 'contrib_module',
+      'datestamp' => '0',
+      '_info_file_ctime' => 1442933959,
+    ),
+    'datestamp' => '0',
+    'project_type' => 'module',
+    'project_status' => TRUE,
+  ];
+}
\ No newline at end of file
diff --git a/core/modules/locale/tests/modules/locale_test_not_development_release/locale_test_not_development_release.info.yml b/core/modules/locale/tests/modules/locale_test_not_development_release/locale_test_not_development_release.info.yml
deleted file mode 100644
index 7acf9a0..0000000
--- a/core/modules/locale/tests/modules/locale_test_not_development_release/locale_test_not_development_release.info.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-name: 'Locale Test Not Development Release'
-type: module
-description: 'The first release with the same major release number which is not a development release.'
-package: Testing
-version: VERSION
-core: 8.x
-hidden: true
diff --git a/core/modules/locale/tests/modules/locale_test_not_development_release/locale_test_not_development_release.module b/core/modules/locale/tests/modules/locale_test_not_development_release/locale_test_not_development_release.module
deleted file mode 100644
index d35ce32..0000000
--- a/core/modules/locale/tests/modules/locale_test_not_development_release/locale_test_not_development_release.module
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/**
- * @file
- * Simulate a Drupal version.
- */
-
-use Drupal\Core\Extension\Extension;
-
-/**
- * Implements hook_system_info_alter().
- *
- * Change the core version number to a development one for testing.
- * 8.0.0-alpha102-dev is the simulated version.
- */
-function locale_test_not_development_release_system_info_alter(&$info, Extension $file, $type) {
-  if (isset($info['package']) && $info['package'] == 'Core') {
-    $info['version'] = '8.0.0-alpha102-dev';
-  }
-}
