diff --git a/core/lib/Drupal/Core/StringTranslation/TranslationManager.php b/core/lib/Drupal/Core/StringTranslation/TranslationManager.php
index cdfc2df..3e07d28 100644
--- a/core/lib/Drupal/Core/StringTranslation/TranslationManager.php
+++ b/core/lib/Drupal/Core/StringTranslation/TranslationManager.php
@@ -164,9 +164,17 @@ public function formatPlural($count, $singular, $plural, array $args = array(),
       return SafeMarkup::set($translated_array[0]);
     }
 
-    // Get the plural index through the gettext formula.
-    // @todo implement static variable to minimize function_exists() usage.
-    $index = (function_exists('locale_get_plural')) ? locale_get_plural($count, isset($options['langcode']) ? $options['langcode'] : NULL) : -1;
+    if (FALSE === $this->getStringTranslation(empty($options['langcode']) ? $this->defaultLangcode : $options['langcode'], $translatable_string, empty($options['context']) ? '' : $options['context'])) {
+      // Use the base index if the string is not translated. This will
+      // avoid showing one language's string with another language's
+      // index.
+      $index = -1;
+    }
+    else {
+      // Get the plural index through the gettext formula.
+      // @todo implement static variable to minimize function_exists() usage.
+      $index = (function_exists('locale_get_plural')) ? locale_get_plural($count, isset($options['langcode']) ? $options['langcode'] : NULL) : -1;
+    }
     if ($index == 0) {
       // Singular form.
       $return = $translated_array[0];
diff --git a/core/modules/locale/src/Tests/LocalePluralFormatTest.php b/core/modules/locale/src/Tests/LocalePluralFormatTest.php
index e6b51f1..b3e6023 100644
--- a/core/modules/locale/src/Tests/LocalePluralFormatTest.php
+++ b/core/modules/locale/src/Tests/LocalePluralFormatTest.php
@@ -133,6 +133,10 @@ public function testGetPluralFormat() {
         $this->assertIdentical(\Drupal::translation()->formatPlural($count, '1 hour', '@count hours', array(), array('langcode' => $langcode)), $expected_plural_string, 'Plural translation of 1 hours / @count hours for count ' . $count . ' in ' . $langcode . ' is ' . $expected_plural_string);
       }
     }
+
+    // Assert that untranslated strings fall back to the base language string
+    // and plural index.
+    $this->assertIdentical(format_plural(0, '1 untranslated string', '@count untranslated strings', array(), array('langcode' => 'fr')), '0 untranslated strings', 'In in the case of untranslated strings, we are falling back to the string, and the plural formula, in the base language.');
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php b/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
index 7f2859c..c2050ee 100644
--- a/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
@@ -45,11 +45,6 @@ public function providerTestFormatPlural() {
    */
   public function testFormatPlural($count, $singular, $plural, array $args = array(), array $options = array(), $expected) {
     $translator = $this->getMock('\Drupal\Core\StringTranslation\Translator\TranslatorInterface');
-    $translator->expects($this->once())
-      ->method('getStringTranslation')
-      ->will($this->returnCallback(function ($langcode, $string) {
-        return $string;
-      }));
     $this->translationManager->addTranslator($translator);
     $result = $this->translationManager->formatPlural($count, $singular, $plural, $args, $options);
     $this->assertEquals($expected, $result);
@@ -62,6 +57,11 @@ class TestTranslationManager extends TranslationManager {
   public function __construct() {
   }
 
+  public function getStringTranslation($langcode, $string, $context) {
+    // For this test, no strings are translated.
+    return FALSE;
+  }
+
 }
 
 }
