diff --git a/core/lib/Drupal/Core/Language/Language.php b/core/lib/Drupal/Core/Language/Language.php
index 4f1605d..b74daaf 100644
--- a/core/lib/Drupal/Core/Language/Language.php
+++ b/core/lib/Drupal/Core/Language/Language.php
@@ -217,7 +217,24 @@ public function setNegotiationMethodId($method_id) {
    *   The array of language objects keyed by langcode.
    */
   public static function sort(&$languages) {
-    uasort($languages, 'Drupal\Component\Utility\SortArray::sortByWeightAndTitleKey');
+    uasort($languages, '\Drupal\Core\Language\Language::sortByWeightAndName');
+  }
+
+
+  /**
+   * This is a sort() callback.
+   *
+   * @param \Drupal\Core\Language\LanguageInterface $a
+   * @param \Drupal\Core\Language\LanguageInterface $b
+   * @return int
+   */
+  public static function sortByWeightAndName(LanguageInterface $a, LanguageInterface $b) {
+    if ($a->getWeight() == $b->getWeight()) {
+      return strnatcasecmp($a->getName(), $b->getName());
+    }
+    else {
+      return $a->getWeight() < $b->getWeight() ? -1 : 1;
+    }
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php b/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php
index 7abed94..aee28e4 100644
--- a/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php
@@ -91,4 +91,84 @@ public function testGetNegotiationMethodId() {
     $this->assertSame($method_id, $this->language->getNegotiationMethodId());
   }
 
+  /**
+   * Tests sorting an array of Language objects.
+   *
+   * @dataProvider providerTestSortArrayOfLanguages
+   *
+   * @param array $languages
+   *   An array of \Drupal\Core\Language\Language objects.
+   * @param array $expected
+   *   The expected sorted array of languages.
+   */
+  public function testSortArrayOfLanguages(array $languages, array $expected) {
+    Language::sort($languages);
+    $this->assertEquals($expected, $languages);
+  }
+
+  /**
+   * Provides data for testSortArrayOfLanguages.
+   *
+   * @return array
+   *   An array of test data.
+   */
+  public function providerTestSortArrayOfLanguages() {
+    $language9A = new Language();
+    $language9A->setName('A');
+    $language9A->setWeight(9);
+    $language10A = new Language();
+    $language10A->setName('A');
+    $language10A->setWeight(10);
+    $language10B = new Language();
+    $language10B->setName('B');
+    $language10B->setWeight(10);
+
+    return array(
+      // Set up data, already ordered by weight.
+      array(
+        array(
+          $language9A,
+          $language10B,
+        ),
+        array(
+          $language9A,
+          $language10B,
+        ),
+      ),
+      // Set up data, out of order by weight.
+      array(
+        array(
+          $language10B,
+          $language9A,
+        ),
+        array(
+          $language10B,
+          $language9A,
+        ),
+      ),
+      // Set up data, tied by weight, already ordered by name.
+      array(
+        array(
+          $language10A,
+          $language10B,
+        ),
+        array(
+          $language10A,
+          $language10B,
+        ),
+      ),
+      // Set up data, tied by weight, out of order by name.
+      array(
+        array(
+          $language10B,
+          $language10A,
+        ),
+        array(
+          $language10A,
+          $language10B,
+        ),
+      ),
+    );
+  }
+
 }
