diff -u b/core/lib/Drupal/Component/Utility/HtmlAttributeValueOutput.php b/core/lib/Drupal/Component/Utility/HtmlAttributeValueOutput.php
--- b/core/lib/Drupal/Component/Utility/HtmlAttributeValueOutput.php
+++ b/core/lib/Drupal/Component/Utility/HtmlAttributeValueOutput.php
@@ -8,25 +8,28 @@
 namespace Drupal\Component\Utility;
 
 /**
- * Implements an output strategy to be used to format strings to be used as
- * HTML attribute values.
+ * Provides an output strategy for HTML attribute values.
+ *
+ * Use this when rendering a given HTML string into an HTML attribute value,
+ * such as select list options. Never use this to render strings into
+ * "style"/"on*" attributes, or attributes that are not wrapped in quotes.
  */
 class HtmlAttributeValueOutput implements OutputStrategyInterface {
 
   /**
-   * Given an HTML string, translate it to a plain text string and escape.
+   * Given an HTML string, transforms it to a plain text string and escape.
    *
-   * @param $string|\Drupal\Component\Utility\SafeStringInterface
-   *   An HTML string or any object that can be cast to string.
+   * @param string|object $string
+   *   An HTML string or an object with a __toString magic method.
    *
    * @return string
    *   A string with HTML tags stripped and HTML entities decoded, and then
    *   escaped for use within HTML attributes.
    */
   public static function renderFromHtml($string) {
-    // @todo Conver the result to AttributeSafeStringInterface, see
+    // @todo Convert the result to AttributeSafeStringInterface, see
     //   https://www.drupal.org/node/2569485
-    return Html::escape(PlainTextOutput::renderFromHtml($string));
+    return Html::escape(SimplePlainTextOutput::renderFromHtml($string));
   }
 
 }
diff -u b/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php b/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php
--- b/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php
+++ b/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php
@@ -7,18 +7,28 @@
 namespace Drupal\Component\Utility;
 
 /**
- * Output strategies ensure depending on the context whether output is safe.
+ * Provides an output strategy that formats HTML strings for a given context.
+ *
+ * Output strategies assist in transforming unsanitized HTML strings into
+ * strings that are appropriate for a given context (i.e. plain-text, HTML
+ * attributes), through performing the relevant sanitization and formatting.
  */
 interface OutputStrategyInterface {
 
   /**
-   * Given an HTML string, translate it to the desired output string.
+   * Transforms a given HTML string into to a context-appropriate output string.
    *
-   * @param $string|\Drupal\Component\Utility\SafeStringInterface
-   *   An HTML string.
+   * This transformation consists of performing the formatting appropriate to
+   * a given output context (i.e. plain-text email subjects, HTML attribute
+   * values) as well as sanitizing a string that may be safe or unsafe for HTML
+   * output but not yet safe for the given context.
+   *
+   * @param string|object $string
+   *   An HTML string or an object with a __toString magic method.
    *
    * @return string
-   *   A new string depending on strategy.
+   *   A new string that is formatted and sanitized according to the
+   *   output strategy.
    */
   public static function renderFromHtml($string);
 
reverted:
--- b/core/lib/Drupal/Component/Utility/PlainTextOutput.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * @file
- * Contains \Drupal\Component\Utility\PlainTextOutput.
- */
-
-namespace Drupal\Component\Utility;
-
-/**
- * Implements an output strategy to be used to format strings as plain text.
- */
-class PlainTextOutput implements OutputStrategyInterface {
-
-  /**
-   * Given an HTML string, translate it to a plain text string.
-   *
-   * @param $string|\Drupal\Component\Utility\SafeStringInterface
-   *   An HTML string or a any object that can be cast to string.
-   *
-   * @return string
-   *   A string with HTML tags stripped and HTML entities decoded suitable for
-   *   email or other non-HTML context.
-   */
-  public static function renderFromHtml($string) {
-    return Html::decodeEntities(strip_tags((string) $string));
-  }
-
-}
diff -u b/core/lib/Drupal/Core/StringTranslation/TranslatableString.php b/core/lib/Drupal/Core/StringTranslation/TranslatableString.php
--- b/core/lib/Drupal/Core/StringTranslation/TranslatableString.php
+++ b/core/lib/Drupal/Core/StringTranslation/TranslatableString.php
@@ -138,6 +138,7 @@
     if (!isset($this->translatableString)) {
       $this->translatableString = $this->getStringTranslation()->translateString($this);
     }
+
     // Handle any replacements.
     if ($args = $this->getArguments()) {
       return $this->placeholderFormat($this->translatableString, $args);
diff -u b/core/tests/Drupal/Tests/Component/Utility/HtmlAttributeValueOutputTest.php b/core/tests/Drupal/Tests/Component/Utility/HtmlAttributeValueOutputTest.php
--- b/core/tests/Drupal/Tests/Component/Utility/HtmlAttributeValueOutputTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/HtmlAttributeValueOutputTest.php
@@ -9,7 +9,6 @@
 
 use Drupal\Component\Utility\HtmlAttributeValueOutput;
 use Drupal\Component\Utility\SafeMarkup;
-use Drupal\Component\Utility\SafeStringInterface;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -52,16 +51,10 @@
     $string = 'The &lt;em&gt; tag makes your text look like <em>"this"</em>.';
     $data['escaped-html-with-quotes'] = [$expected, $string];
 
-    $safe_string = $this->prophesize(SafeStringInterface::class);
-    $safe_string->__toString()->willReturn('<em>"this"</em>');
-    $safe_string = $safe_string->reveal();
-
+    $safe_string = SafeString::create('<em>"this"</em>');
     $data['escaped-html-with-quotes-and-placeholders'] = [$expected, 'The @tag tag makes your text look like @result.', ['@tag' =>'<em>', '@result' => $safe_string]];
 
-    $safe_string = $this->prophesize(SafeStringInterface::class);
-    $safe_string->__toString()->willReturn($string);
-    $safe_string = $safe_string->reveal();
-
+    $safe_string = SafeString::create($string);
     $data['safe-string'] = [$expected, $safe_string];
 
     return $data;
reverted:
--- b/core/tests/Drupal/Tests/Component/Utility/PlainTextOutputTest.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Tests\Component\Utility\PlainTextOutputTest.
- */
-
-namespace Drupal\Tests\Component\Utility;
-
-use Drupal\Component\Utility\PlainTextOutput;
-use Drupal\Component\Utility\SafeMarkup;
-use Drupal\Component\Utility\SafeStringInterface;
-use Drupal\Tests\UnitTestCase;
-
-/**
- * @coversDefaultClass \Drupal\Component\Utility\PlainTextOutput
- * @group Utility
- */
-class PlainTextOutputTest extends UnitTestCase {
-
-  /**
-   * Tests ::renderFromHtml().
-   *
-   * @param $expected
-   *   The expected formatted value.
-   * @param $string
-   *   A string to be formatted.
-   * @param array $args
-   *   (optional) An associative array of replacements to make. Defaults to
-   *   none.
-   *
-   * @covers ::renderFromHtml
-   * @dataProvider providerRenderFromHtml
-   */
-  public function testRenderFromHtml($expected, $string, $args = []) {
-    $markup = SafeMarkup::format($string, $args);
-    $output = PlainTextOutput::renderFromHtml($markup);
-    $this->assertSame($expected, $output);
-  }
-
-  /**
-   * Data provider for ::testRenderFromHtml()
-   */
-  public function providerRenderFromHtml() {
-    $data = [];
-
-    $data['simple-text'] = ['Giraffes and wombats', 'Giraffes and wombats'];
-    $data['simple-html'] = ['Giraffes and wombats', '<a href="/muh">Giraffes</a> and <strong>wombats</strong>'];
-    $data['html-with-quote'] = ['Giraffes and quote"s', '<a href="/muh">Giraffes</a> and <strong>quote"s</strong>'];
-
-    $expected = 'The <em> tag makes your text look like "this".';
-    $string = 'The &lt;em&gt; tag makes your text look like <em>"this"</em>.';
-    $data['escaped-html-with-quotes'] = [$expected, $string];
-
-    $safe_string = $this->prophesize(SafeStringInterface::class);
-    $safe_string->__toString()->willReturn('<em>"this"</em>');
-    $safe_string = $safe_string->reveal();
-
-    $data['escaped-html-with-quotes-and-placeholders'] = [$expected, 'The @tag tag makes your text look like @result.', ['@tag' =>'<em>', '@result' => $safe_string]];
-
-    $safe_string = $this->prophesize(SafeStringInterface::class);
-    $safe_string->__toString()->willReturn($string);
-    $safe_string = $safe_string->reveal();
-
-    $data['safe-string'] = [$expected, $safe_string];
-
-    return $data;
-  }
-
-}
only in patch2:
unchanged:
--- /dev/null
+++ b/core/lib/Drupal/Component/Utility/PlainTextSimpleOutput.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Utility\PlainTextSimpleOutput.
+ */
+
+namespace Drupal\Component\Utility;
+
+/**
+ * Provides an output strategy for transforming HTML into simple plain text.
+ *
+ * Use this when rendering a given HTML string into a plain text string that
+ * does not need special formatting, such as a label or an email subject.
+ *
+ * @todo Provide a PlainTextFormattedOutput strategy that transforms HTML
+ *   into formatted plain text for use in the email body and long texts.
+ */
+class PlainTextSimpleOutput implements OutputStrategyInterface {
+
+  /**
+   * Transforms a given HTML string into a plain text string.
+   *
+   * Use this when rendering a given HTML string into a plain text string that
+   * does not need special formatting, such as a label or an email subject.
+   *
+   * @param string|object $string
+   *   An HTML string or an object with a __toString magic method.
+   *
+   * @return string
+   *   A string with HTML tags stripped and HTML entities decoded suitable for
+   *   email or other non-HTML contexts.
+   */
+  public static function renderFromHtml($string) {
+    return Html::decodeEntities(strip_tags((string) $string));
+  }
+
+}
only in patch2:
unchanged:
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Utility/PlainTextSimpleOutputTest.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Component\Utility\PlainTextSimpleOutputTest.
+ */
+
+namespace Drupal\Tests\Component\Utility;
+
+use Drupal\Component\Utility\SimplePlainTextOutput;
+use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\SafeString;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\Component\Utility\PlainTextSimpleOutput
+ * @group Utility
+ */
+class PlainTextSimpleOutputTest extends UnitTestCase {
+
+  /**
+   * Tests ::renderFromHtml().
+   *
+   * @param $expected
+   *   The expected formatted value.
+   * @param $string
+   *   A string to be formatted.
+   * @param array $args
+   *   (optional) An associative array of replacements to make. Defaults to
+   *   none.
+   *
+   * @covers ::renderFromHtml
+   * @dataProvider providerRenderFromHtml
+   */
+  public function testRenderFromHtml($expected, $string, $args = []) {
+    $markup = SafeMarkup::format($string, $args);
+    $output = SimplePlainTextOutput::renderFromHtml($markup);
+    $this->assertSame($expected, $output);
+  }
+
+  /**
+   * Data provider for ::testRenderFromHtml()
+   */
+  public function providerRenderFromHtml() {
+    $data = [];
+
+    $data['simple-text'] = ['Giraffes and wombats', 'Giraffes and wombats'];
+    $data['simple-html'] = ['Giraffes and wombats', '<a href="/muh">Giraffes</a> and <strong>wombats</strong>'];
+    $data['html-with-quote'] = ['Giraffes and quote"s', '<a href="/muh">Giraffes</a> and <strong>quote"s</strong>'];
+
+    $expected = 'The <em> tag makes your text look like "this".';
+    $string = 'The &lt;em&gt; tag makes your text look like <em>"this"</em>.';
+    $data['escaped-html-with-quotes'] = [$expected, $string];
+
+    $safe_string = SafeString::create('<em>"this"</em>');
+    $data['escaped-html-with-quotes-and-placeholders'] = [$expected, 'The @tag tag makes your text look like @result.', ['@tag' =>'<em>', '@result' => $safe_string]];
+
+    $safe_string = SafeString::create($string);
+    $data['safe-string'] = [$expected, $safe_string];
+
+    return $data;
+  }
+
+}
