diff --git a/core/core.services.yml b/core/core.services.yml
index 19b0b72ee669b5b68db5236f8749707cfd632370..51a41fa65609ab80a52ce9e805fc6f322170f41f 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -478,7 +478,7 @@ services:
       - { name: event_subscriber }
   controller.page:
     class: Drupal\Core\Controller\HtmlPageController
-    arguments: ['@controller_resolver', '@string_translation', '@title_resolver']
+    arguments: ['@controller_resolver', '@title_resolver']
   controller.ajax:
     class: Drupal\Core\Controller\AjaxController
     arguments: ['@controller_resolver', '@ajax_response_renderer']
@@ -604,7 +604,7 @@ services:
     arguments: ['@config.manager', '@config.storage', '@config.storage.snapshot']
   exception_controller:
     class: Drupal\Core\Controller\ExceptionController
-    arguments: ['@content_negotiation', '@string_translation', '@title_resolver', '@html_page_renderer', '@html_fragment_renderer']
+    arguments: ['@content_negotiation', '@title_resolver', '@html_page_renderer', '@html_fragment_renderer']
     calls:
       - [setContainer, ['@service_container']]
   exception_listener:
diff --git a/core/lib/Drupal/Core/Annotation/Translation.php b/core/lib/Drupal/Core/Annotation/Translation.php
index 57268783069322b72edba27308e41cf2b58f37ff..ad32b5e196c0871b3fa70047666575c0ebe4396e 100644
--- a/core/lib/Drupal/Core/Annotation/Translation.php
+++ b/core/lib/Drupal/Core/Annotation/Translation.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Annotation;
 
 use Drupal\Component\Annotation\AnnotationBase;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * @defgroup plugin_translatable Translatable plugin metadata
@@ -51,6 +52,7 @@
  * @ingroup plugin_translatable
  */
 class Translation extends AnnotationBase {
+  use StringTranslationTrait;
 
   /**
    * The translation of the value passed to the constructor of the class.
@@ -59,13 +61,6 @@ class Translation extends AnnotationBase {
    */
   protected $translation;
 
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * Constructs a new class instance.
    *
@@ -88,7 +83,7 @@ public function __construct(array $values) {
         'context' => $values['context'],
       );
     }
-    $this->translation = $this->getTranslationManager()->translate($string, $arguments, $options);
+    $this->translation = $this->t($string, $arguments, $options);
   }
 
   /**
@@ -98,18 +93,4 @@ public function get() {
     return $this->translation;
   }
 
-  /**
-   * Returns the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function getTranslationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = \Drupal::translation();
-    }
-
-    return $this->translationManager;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderBase.php b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderBase.php
index 63fe1997b3dfb8a884b54aa75f71a22b8930aab8..a88944a64fcfc8ae2b27dda4d6753765aca6e39d 100644
--- a/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderBase.php
+++ b/core/lib/Drupal/Core/Breadcrumb/BreadcrumbBuilderBase.php
@@ -7,12 +7,15 @@
 
 namespace Drupal\Core\Breadcrumb;
 
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
 /**
  * Defines a common base class for breadcrumb builders adding a link generator.
  *
  * @todo Use traits once we have a PHP 5.4 requirement.
  */
 abstract class BreadcrumbBuilderBase implements BreadcrumbBuilderInterface {
+  use StringTranslationTrait;
 
   /**
    * The link generator.
@@ -21,13 +24,6 @@ abstract class BreadcrumbBuilderBase implements BreadcrumbBuilderInterface {
    */
   protected $linkGenerator;
 
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * Returns the service container.
    *
@@ -64,26 +60,4 @@ protected function linkGenerator() {
     return $this->linkGenerator;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
-  /**
-   * Returns the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = $this->container()->get('string_translation');
-    }
-    return $this->translationManager;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Config/ConfigImportValidateEventSubscriberBase.php b/core/lib/Drupal/Core/Config/ConfigImportValidateEventSubscriberBase.php
index dfda0aa483b2a489c7892a8913cf42d901de3354..ee5340c9ed88b1a5af6ee67f2211f4e11e31a5e4 100644
--- a/core/lib/Drupal/Core/Config/ConfigImportValidateEventSubscriberBase.php
+++ b/core/lib/Drupal/Core/Config/ConfigImportValidateEventSubscriberBase.php
@@ -7,13 +7,14 @@
 
 namespace Drupal\Core\Config;
 
-use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
  * Defines a base event listener implementation for config sync validation.
  */
 abstract class ConfigImportValidateEventSubscriberBase implements EventSubscriberInterface {
+  use StringTranslationTrait;
 
   /**
    * Checks that the configuration synchronization is valid.
@@ -31,27 +32,4 @@ static function getSubscribedEvents() {
     return $events;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * @param string $string
-   *   A string containing the English string to translate.
-   * @param array $args
-   *   An associative array of replacements to make after translation. Based
-   *   on the first character of the key, the value is escaped and/or themed.
-   *   See \Drupal\Component\Utility\String::format() for details.
-   * @param array $options
-   *   An associative array of additional options, with the following elements:
-   *   - 'langcode': The language code to translate to a language other than
-   *      what is used to display the page.
-   *   - 'context': The context the source string belongs to.
-   *
-   * @return string
-   *   The translated string.
-   *
-   * @see \Drupal\Core\StringTranslation\TranslationInterface::translate()
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return \Drupal::translation()->translate($string, $args, $options);
-  }
 }
diff --git a/core/lib/Drupal/Core/Config/ConfigImporter.php b/core/lib/Drupal/Core/Config/ConfigImporter.php
index bdedf9095b76f15cba590bde77abaeafcea13820..6b3691308f51ef58d7766ea0d45ead21039a749a 100644
--- a/core/lib/Drupal/Core/Config/ConfigImporter.php
+++ b/core/lib/Drupal/Core/Config/ConfigImporter.php
@@ -15,7 +15,8 @@
 use Drupal\Core\DependencyInjection\DependencySerialization;
 use Drupal\Core\Entity\EntityStorageException;
 use Drupal\Core\Lock\LockBackendInterface;
-use Drupal\Core\StringTranslation\TranslationManager;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
 /**
@@ -38,6 +39,7 @@
  * @see \Drupal\Core\Config\ConfigImporterEvent
  */
 class ConfigImporter extends DependencySerialization {
+  use StringTranslationTrait;
 
   /**
    * The name used to identify the lock.
@@ -121,13 +123,6 @@ class ConfigImporter extends DependencySerialization {
    */
   protected $themeHandler;
 
-  /**
-   * The string translation service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationManager
-   */
-  protected $translationManager;
-
   /**
    * Flag set to import system.theme during processing theme enable and disables.
    *
@@ -178,10 +173,10 @@ class ConfigImporter extends DependencySerialization {
    *   The module handler
    * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
    *   The theme handler
-   * @param \Drupal\Core\StringTranslation\TranslationManager $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation service.
    */
-  public function __construct(StorageComparerInterface $storage_comparer, EventDispatcherInterface $event_dispatcher, ConfigManagerInterface $config_manager, LockBackendInterface $lock, TypedConfigManagerInterface $typed_config, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, TranslationManager $translation_manager) {
+  public function __construct(StorageComparerInterface $storage_comparer, EventDispatcherInterface $event_dispatcher, ConfigManagerInterface $config_manager, LockBackendInterface $lock, TypedConfigManagerInterface $typed_config, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, TranslationInterface $string_translation) {
     $this->storageComparer = $storage_comparer;
     $this->eventDispatcher = $event_dispatcher;
     $this->configManager = $config_manager;
@@ -189,7 +184,7 @@ public function __construct(StorageComparerInterface $storage_comparer, EventDis
     $this->typedConfigManager = $typed_config;
     $this->moduleHandler = $module_handler;
     $this->themeHandler = $theme_handler;
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
     $this->processedConfiguration = $this->storageComparer->getEmptyChangelist();
     $this->processedExtensions = $this->getEmptyExtensionsProcessedList();
   }
@@ -835,7 +830,7 @@ protected function checkOp($op, $name) {
             $entity_type = $this->configManager->getEntityManager()->getDefinition($entity_type_id);
             $entity = $entity_storage->load($entity_storage->getIDFromConfigName($name, $entity_type->getConfigPrefix()));
             $entity->delete();
-            $this->logError($this->translationManager->translate('Deleted and replaced configuration entity "@name"', array('@name' => $name)));
+            $this->logError($this->t('Deleted and replaced configuration entity "@name"', array('@name' => $name)));
           }
           else {
             $this->storageComparer->getTargetStorage()->delete($name);
@@ -1008,31 +1003,7 @@ protected function reInjectMe() {
     $this->typedConfigManager = \Drupal::service('config.typed');
     $this->moduleHandler = \Drupal::moduleHandler();
     $this->themeHandler = \Drupal::service('theme_handler');
-    $this->translationManager = \Drupal::service('string_translation');
-  }
-
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * @param string $string
-   *   A string containing the English string to translate.
-   * @param array $args
-   *   An associative array of replacements to make after translation. Based
-   *   on the first character of the key, the value is escaped and/or themed.
-   *   See \Drupal\Component\Utility\String::format() for details.
-   * @param array $options
-   *   An associative array of additional options, with the following elements:
-   *   - 'langcode': The language code to translate to a language other than
-   *      what is used to display the page.
-   *   - 'context': The context the source string belongs to.
-   *
-   * @return string
-   *   The translated string.
-   *
-   * @see \Drupal\Core\StringTranslation\TranslationManager::translate()
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
+    $this->stringTranslation = \Drupal::service('string_translation');
   }
 
 }
diff --git a/core/lib/Drupal/Core/Controller/ControllerBase.php b/core/lib/Drupal/Core/Controller/ControllerBase.php
index 3af41f53fdf1e6ad90879e54a21beb8195e9db31..286c134b39ee22f110b5acaa656b684377d6fa2d 100644
--- a/core/lib/Drupal/Core/Controller/ControllerBase.php
+++ b/core/lib/Drupal/Core/Controller/ControllerBase.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Controller;
 
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 
@@ -31,6 +32,7 @@
  * @see \Drupal\Core\DependencyInjection\ContainerInjectionInterface
  */
 abstract class ControllerBase implements ContainerInjectionInterface {
+  use StringTranslationTrait;
 
   /**
    * The entity manager.
@@ -53,13 +55,6 @@ abstract class ControllerBase implements ContainerInjectionInterface {
    */
   protected $languageManager;
 
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * The configuration factory.
    *
@@ -275,28 +270,6 @@ protected function currentUser() {
     return $this->currentUser;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
-  /**
-   * Returns the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = $this->container()->get('string_translation');
-    }
-    return $this->translationManager;
-  }
-
   /**
    * Returns the language manager service.
    *
diff --git a/core/lib/Drupal/Core/Controller/ExceptionController.php b/core/lib/Drupal/Core/Controller/ExceptionController.php
index 12e9cbe49f32267f4ea552021eb8e2567f0e89d6..4333ffef58ab67c1522ebc9d55436fd86c73612a 100644
--- a/core/lib/Drupal/Core/Controller/ExceptionController.php
+++ b/core/lib/Drupal/Core/Controller/ExceptionController.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Page\DefaultHtmlPageRenderer;
 use Drupal\Core\Page\HtmlPageRendererInterface;
-use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
@@ -60,8 +59,6 @@ class ExceptionController extends HtmlControllerBase implements ContainerAwareIn
    * @param \Drupal\Core\ContentNegotiation $negotiation
    *   The content negotiation library to use to determine the correct response
    *   format.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
    * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver
    *   The title resolver.
    * @param \Drupal\Core\Page\HtmlPageRendererInterface $renderer
@@ -69,8 +66,8 @@ class ExceptionController extends HtmlControllerBase implements ContainerAwareIn
    * @param \Drupal\Core\Page\HtmlFragmentRendererInterface $fragment_renderer
    *   The fragment rendering service.
    */
-  public function __construct(ContentNegotiation $negotiation, TranslationInterface $translation_manager, TitleResolverInterface $title_resolver, HtmlPageRendererInterface $renderer, $fragment_renderer) {
-    parent::__construct($translation_manager, $title_resolver);
+  public function __construct(ContentNegotiation $negotiation, TitleResolverInterface $title_resolver, HtmlPageRendererInterface $renderer, $fragment_renderer) {
+    parent::__construct($title_resolver);
     $this->negotiation = $negotiation;
     $this->htmlPageRenderer = $renderer;
     $this->fragmentRenderer = $fragment_renderer;
diff --git a/core/lib/Drupal/Core/Controller/HtmlControllerBase.php b/core/lib/Drupal/Core/Controller/HtmlControllerBase.php
index 6b81e7e1291afc73f4e42a350d554a45a4bbbd9a..5795a48af7852213f5b2a553115614261b2efdc2 100644
--- a/core/lib/Drupal/Core/Controller/HtmlControllerBase.php
+++ b/core/lib/Drupal/Core/Controller/HtmlControllerBase.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Controller;
 
-use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\Core\Page\HtmlFragment;
 use Drupal\Core\Utility\Title;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
@@ -19,13 +18,6 @@
  */
 class HtmlControllerBase {
 
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * The title resolver.
    *
@@ -36,13 +28,10 @@ class HtmlControllerBase {
   /**
    * Constructs a new HtmlControllerBase object.
    *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
    * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver
    *   The title resolver.
    */
-  public function __construct(TranslationInterface $translation_manager, TitleResolverInterface $title_resolver) {
-    $this->translationManager = $translation_manager;
+  public function __construct(TitleResolverInterface $title_resolver) {
     $this->titleResolver = $title_resolver;
   }
 
diff --git a/core/lib/Drupal/Core/Controller/HtmlPageController.php b/core/lib/Drupal/Core/Controller/HtmlPageController.php
index 167293904c9a27ae3d0fb056d2a15064b4a435fa..6ed82f19f11a222d22e3a9aba6c7afd84ee6b659 100644
--- a/core/lib/Drupal/Core/Controller/HtmlPageController.php
+++ b/core/lib/Drupal/Core/Controller/HtmlPageController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Controller;
 
-use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\HttpFoundation\Request;
 
 /**
@@ -27,13 +26,11 @@ class HtmlPageController extends HtmlControllerBase {
    *
    * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
    *   The controller resolver.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
    * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver
    *   The title resolver.
    */
-  public function __construct(ControllerResolverInterface $controller_resolver, TranslationInterface $translation_manager, TitleResolverInterface $title_resolver) {
-    parent::__construct($translation_manager, $title_resolver);
+  public function __construct(ControllerResolverInterface $controller_resolver, TitleResolverInterface $title_resolver) {
+    parent::__construct($title_resolver);
 
     $this->controllerResolver = $controller_resolver;
   }
diff --git a/core/lib/Drupal/Core/Controller/TitleResolver.php b/core/lib/Drupal/Core/Controller/TitleResolver.php
index 5a1ca50b24c0d684b86155f33b146ac6810d51d5..4fe90a6a7efc1cc6a57197207b6e82440b03bf2d 100644
--- a/core/lib/Drupal/Core/Controller/TitleResolver.php
+++ b/core/lib/Drupal/Core/Controller/TitleResolver.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Controller;
 
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Route;
@@ -15,6 +16,7 @@
  * Provides the default implementation of the title resolver interface.
  */
 class TitleResolver implements TitleResolverInterface {
+  use StringTranslationTrait;
 
   /**
    * The controller resolver.
@@ -23,24 +25,17 @@ class TitleResolver implements TitleResolverInterface {
    */
   protected $controllerResolver;
 
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * Constructs a TitleResolver instance.
    *
    * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
    *   The controller resolver.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager.
    */
-  public function __construct(ControllerResolverInterface $controller_resolver, TranslationInterface $translation_manager) {
+  public function __construct(ControllerResolverInterface $controller_resolver, TranslationInterface $string_translation) {
     $this->controllerResolver = $controller_resolver;
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
   }
 
   /**
@@ -74,7 +69,7 @@ public function getTitle(Request $request, Route $route) {
       }
 
       // Fall back to a static string from the route.
-      $route_title = $this->translationManager->translate($title, $args, $options);
+      $route_title = $this->t($title, $args, $options);
     }
     return $route_title;
   }
diff --git a/core/lib/Drupal/Core/Datetime/Date.php b/core/lib/Drupal/Core/Datetime/Date.php
index 898a49e258a87ccd28bd9007e8ddbdd47cecb12f..2dd512a58ee8b73de6cd9916714aa8aedd622277 100644
--- a/core/lib/Drupal/Core/Datetime/Date.php
+++ b/core/lib/Drupal/Core/Datetime/Date.php
@@ -14,11 +14,13 @@
 use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Provides a service to handler various date related functionality.
  */
 class Date {
+  use StringTranslationTrait;
 
   /**
    * The list of loaded timezones.
@@ -181,7 +183,7 @@ public function formatInterval($interval, $granularity = 2, $langcode = NULL) {
     foreach ($this->units as $key => $value) {
       $key = explode('|', $key);
       if ($interval >= $value) {
-        $output .= ($output ? ' ' : '') . $this->stringTranslation->formatPlural(floor($interval / $value), $key[0], $key[1], array(), array('langcode' => $langcode));
+        $output .= ($output ? ' ' : '') . $this->formatPlural(floor($interval / $value), $key[0], $key[1], array(), array('langcode' => $langcode));
         $interval %= $value;
         $granularity--;
       }
@@ -193,15 +195,6 @@ public function formatInterval($interval, $granularity = 2, $langcode = NULL) {
     return $output ? $output : $this->t('0 sec', array(), array('langcode' => $langcode));
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->stringTranslation->translate($string, $args, $options);
-  }
-
   /**
    * Loads the given format pattern for the given langcode.
    *
diff --git a/core/lib/Drupal/Core/Entity/EntityControllerBase.php b/core/lib/Drupal/Core/Entity/EntityControllerBase.php
index 7b60766308cddfb72053d4739b2618417ff04f38..cbaf6709d90cd82799c0fb3eec5af3fb9418a8b4 100644
--- a/core/lib/Drupal/Core/Entity/EntityControllerBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityControllerBase.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\DependencyInjection\DependencySerialization;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 
 /**
@@ -17,13 +18,7 @@
  * @todo Convert this to a trait.
  */
 abstract class EntityControllerBase extends DependencySerialization {
-
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
+  use StringTranslationTrait;
 
   /**
    * The module handler to invoke hooks on.
@@ -32,32 +27,6 @@ abstract class EntityControllerBase extends DependencySerialization {
    */
   protected $moduleHandler;
 
-  /**
-   * Gets the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = \Drupal::translation();
-    }
-    return $this->translationManager;
-  }
-
-  /**
-   * Sets the translation manager for this controller.
-   *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
-   *
-   * @return $this
-   */
-  public function setTranslationManager(TranslationInterface $translation_manager) {
-    $this->translationManager = $translation_manager;
-    return $this;
-  }
-
   /**
    * Returns the module handler.
    *
diff --git a/core/lib/Drupal/Core/Entity/EntityFormInterface.php b/core/lib/Drupal/Core/Entity/EntityFormInterface.php
index aae4c5f9aaaf73a57d4d92793b9b3350eb70080d..f1aeaa808b5283fdae69cf672abb40a47a22f4c7 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormInterface.php
@@ -129,14 +129,14 @@ public function validate(array $form, array &$form_state);
   public function submit(array $form, array &$form_state);
 
   /**
-   * Sets the translation manager for this form.
+   * Sets the string translation service for this form.
    *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager.
    *
    * @return $this
    */
-  public function setTranslationManager(TranslationInterface $translation_manager);
+  public function setStringTranslation(TranslationInterface $string_translation);
 
   /**
    * Sets the module handler for this form.
diff --git a/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index b7b1347c9842db6fe12f754b272d8f321c41a443..ca5025c4f564aea5ec12cf3a01841ee559e11b45 100644
--- a/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -8,7 +8,6 @@
 namespace Drupal\Core\Entity;
 
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Component\Utility\String;
 
@@ -201,15 +200,6 @@ public function render() {
     return $build;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
   /**
    * Returns the title of the page.
    *
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 7385ae3ce14d105a490011d1a4430e167331bb80..fb1a78636c15094638cf119ee01dbefad3162e32 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -230,7 +230,7 @@ public function getFormObject($entity_type, $operation) {
       }
 
       $controller
-        ->setTranslationManager($this->translationManager)
+        ->setStringTranslation($this->translationManager)
         ->setModuleHandler($this->moduleHandler)
         ->setOperation($operation);
       $this->controllers['form'][$operation][$entity_type] = $controller;
@@ -288,8 +288,8 @@ public function getController($entity_type, $controller_type, $controller_class_
       if (method_exists($controller, 'setModuleHandler')) {
         $controller->setModuleHandler($this->moduleHandler);
       }
-      if (method_exists($controller, 'setTranslationManager')) {
-        $controller->setTranslationManager($this->translationManager);
+      if (method_exists($controller, 'setStringTranslation')) {
+        $controller->setStringTranslation($this->translationManager);
       }
       $this->controllers[$controller_type][$entity_type] = $controller;
     }
diff --git a/core/lib/Drupal/Core/Form/FormBase.php b/core/lib/Drupal/Core/Form/FormBase.php
index 8a4009f9348d5b625ae75aa96d539f4feca22c6b..0bfa75351b82c49edd2717847825b133ad26172a 100644
--- a/core/lib/Drupal/Core/Form/FormBase.php
+++ b/core/lib/Drupal/Core/Form/FormBase.php
@@ -11,7 +11,7 @@
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\DependencyInjection\DependencySerialization;
 use Drupal\Core\Routing\UrlGeneratorInterface;
-use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 
@@ -19,13 +19,7 @@
  * Provides a base class for forms.
  */
 abstract class FormBase extends DependencySerialization implements FormInterface, ContainerInjectionInterface {
-
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
+  use StringTranslationTrait;
 
   /**
    * The current request.
@@ -74,15 +68,6 @@ public function validateForm(array &$form, array &$form_state) {
     // Validation is optional.
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
   /**
    * Generates a URL or path for a specific route based on the given parameters.
    *
@@ -96,19 +81,6 @@ public function url($route_name, $route_parameters = array(), $options = array()
     return $this->urlGenerator()->generateFromRoute($route_name, $route_parameters, $options);
   }
 
-  /**
-   * Gets the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = $this->container()->get('string_translation');
-    }
-    return $this->translationManager;
-  }
-
   /**
    * Retrieves a configuration object.
    *
@@ -144,19 +116,6 @@ protected function configFactory() {
     return $this->configFactory;
   }
 
-  /**
-   * Sets the translation manager for this form.
-   *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
-   *
-   * @return $this
-   */
-  public function setTranslationManager(TranslationInterface $translation_manager) {
-    $this->translationManager = $translation_manager;
-    return $this;
-  }
-
   /**
    * Sets the config factory for this form.
    *
diff --git a/core/lib/Drupal/Core/Form/FormBuilder.php b/core/lib/Drupal/Core/Form/FormBuilder.php
index 96f06ba1e5bd8a23d364295081e30734c31cf75c..4cd5c1c4f9c0b5e2403ef0fb39f0626f47197bf1 100644
--- a/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -19,6 +19,7 @@
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Url;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -32,6 +33,7 @@
  * Provides form building and processing.
  */
 class FormBuilder implements FormBuilderInterface {
+  use StringTranslationTrait;
 
   /**
    * The module handler.
@@ -61,13 +63,6 @@ class FormBuilder implements FormBuilderInterface {
    */
   protected $urlGenerator;
 
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * The current request.
    *
@@ -123,19 +118,19 @@ class FormBuilder implements FormBuilderInterface {
    *   The event dispatcher.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The URL generator.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager.
    * @param \Drupal\Core\Access\CsrfTokenGenerator $csrf_token
    *   The CSRF token generator.
    * @param \Drupal\Core\HttpKernel $http_kernel
    *   The HTTP kernel.
    */
-  public function __construct(ModuleHandlerInterface $module_handler, KeyValueExpirableFactoryInterface $key_value_expirable_factory, EventDispatcherInterface $event_dispatcher, UrlGeneratorInterface $url_generator, TranslationInterface $translation_manager, CsrfTokenGenerator $csrf_token = NULL, HttpKernel $http_kernel = NULL) {
+  public function __construct(ModuleHandlerInterface $module_handler, KeyValueExpirableFactoryInterface $key_value_expirable_factory, EventDispatcherInterface $event_dispatcher, UrlGeneratorInterface $url_generator, TranslationInterface $string_translation, CsrfTokenGenerator $csrf_token = NULL, HttpKernel $http_kernel = NULL) {
     $this->moduleHandler = $module_handler;
     $this->keyValueExpirableFactory = $key_value_expirable_factory;
     $this->eventDispatcher = $event_dispatcher;
     $this->urlGenerator = $url_generator;
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
     $this->csrfToken = $csrf_token;
     $this->httpKernel = $http_kernel;
   }
@@ -1813,15 +1808,6 @@ protected function currentUser() {
     return $this->currentUser;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/lib/Drupal/Core/Installer/Exception/InstallerException.php b/core/lib/Drupal/Core/Installer/Exception/InstallerException.php
index e8c1ec355183fbb7933d81ec0a44fa0639c4b3e2..b9b3bcf7a45d66ade3ce35e97de6c12cc72ccd77 100644
--- a/core/lib/Drupal/Core/Installer/Exception/InstallerException.php
+++ b/core/lib/Drupal/Core/Installer/Exception/InstallerException.php
@@ -7,10 +7,13 @@
 
 namespace Drupal\Core\Installer\Exception;
 
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
 /**
  * Base class for exceptions thrown by installer.
  */
 class InstallerException extends \RuntimeException {
+  use StringTranslationTrait;
 
   /**
    * The page title to output.
@@ -19,13 +22,6 @@ class InstallerException extends \RuntimeException {
    */
   protected $title;
 
-  /**
-   * The string translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $stringTranslation;
-
   /**
    * Constructs a new installer exception.
    *
@@ -52,13 +48,4 @@ public function getTitle() {
     return $this->title;
   }
 
-  /**
-   * Translates a string using StringTranslation.
-   *
-   * @see \Drupal\Core\StringTranslation\TranslationInterface::translate()
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->stringTranslation->translate($string, $args, $options);
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Plugin/ContextAwarePluginBase.php b/core/lib/Drupal/Core/Plugin/ContextAwarePluginBase.php
index fa036a26c4fa0f40bc33f4af744866437e0cec05..19f5825071233a407eb814a20ec851aff656d299 100644
--- a/core/lib/Drupal/Core/Plugin/ContextAwarePluginBase.php
+++ b/core/lib/Drupal/Core/Plugin/ContextAwarePluginBase.php
@@ -11,7 +11,7 @@
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\Core\Plugin\Context\Context;
 use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
-use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Drupal specific class for plugins that use context.
@@ -21,6 +21,7 @@
  * ContextAwarePluginBase but it is using a different Context class.
  */
 abstract class ContextAwarePluginBase extends ComponentContextAwarePluginBase {
+  use StringTranslationTrait;
 
   /**
    * Override of \Drupal\Component\Plugin\ContextAwarePluginBase::__construct().
@@ -55,47 +56,4 @@ public function setContextValue($name, $value) {
     return $this;
   }
 
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
-  /**
-   * Gets the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = \Drupal::translation();
-    }
-    return $this->translationManager;
-  }
-
-  /**
-   * Sets the translation manager for this plugin.
-   *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
-   *
-   * @return self
-   *   The plugin object.
-   */
-  public function setTranslationManager(TranslationInterface $translation_manager) {
-    $this->translationManager = $translation_manager;
-    return $this;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Plugin/PluginBase.php b/core/lib/Drupal/Core/Plugin/PluginBase.php
index f0bce24488a32938baaa91bd359bb7e0cf166a54..931062d089aeba6ef6c099ef20a81354f3b6bdb9 100644
--- a/core/lib/Drupal/Core/Plugin/PluginBase.php
+++ b/core/lib/Drupal/Core/Plugin/PluginBase.php
@@ -8,13 +8,14 @@
 namespace Drupal\Core\Plugin;
 
 use Drupal\Component\Plugin\PluginBase as ComponentPluginBase;
-use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Base class for plugins supporting metadata inspection and translation.
  */
 abstract class PluginBase extends ComponentPluginBase {
+  use StringTranslationTrait;
 
   /**
    * An array of service IDs keyed by property name used for serialization.
@@ -26,49 +27,6 @@ abstract class PluginBase extends ComponentPluginBase {
    */
   protected $_serviceIds = array();
 
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
-  /**
-   * Gets the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = \Drupal::getContainer()->get('string_translation');
-    }
-    return $this->translationManager;
-  }
-
-  /**
-   * Sets the translation manager for this plugin.
-   *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
-   *   The translation manager.
-   *
-   * @return self
-   *   The plugin object.
-   */
-  public function setTranslationManager(TranslationInterface $translation_manager) {
-    $this->translationManager = $translation_manager;
-    return $this;
-  }
-
   /**
    * {@inheritdoc}
    *
diff --git a/core/lib/Drupal/Core/StringTranslation/StringTranslationTrait.php b/core/lib/Drupal/Core/StringTranslation/StringTranslationTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..01e3ec628114148c45ca542c0971c5da2969f4d8
--- /dev/null
+++ b/core/lib/Drupal/Core/StringTranslation/StringTranslationTrait.php
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\StringTranslation\StringTranslationTrait.
+ */
+
+namespace Drupal\Core\StringTranslation;
+
+/**
+ * Wrapper methods for \Drupal\Core\StringTranslation\TranslationInterface.
+ *
+ * Injected translation can be performed by using a protected method ::t(), so
+ * string extractor tools can find all translatable strings. This method must
+ * wrap \Drupal\Core\StringTranslation\TranslationInterface::translate().
+ * This trait provides this method in a re-usable way.
+ *
+ * Procedural code must use the global function t(). Any other approach will
+ * result in untranslatable strings, because the string extractor will not be
+ * able to find them.
+ */
+trait StringTranslationTrait {
+
+  /**
+   * The string translation service.
+   *
+   * @var \Drupal\Core\StringTranslation\TranslationInterface
+   */
+  protected $stringTranslation;
+
+  /**
+   * Translates a string to the current language or to a given language.
+   *
+   * See the t() documentation for details.
+   */
+  protected function t($string, array $args = array(), array $options = array()) {
+    return $this->getStringTranslation()->translate($string, $args, $options);
+  }
+
+  /**
+   * Formats a string containing a count of items.
+   *
+   * See the \Drupal\Core\StringTranslation\TranslationInterface::formatPlural()
+   * documentation for details.
+   */
+  protected function formatPlural($count, $singular, $plural, array $args = array(), array $options = array()) {
+    return $this->getStringTranslation()->formatPlural($count, $singular, $plural, $args, $options);
+  }
+
+  /**
+   * Gets the string translation service.
+   *
+   * @return \Drupal\Core\StringTranslation\TranslationInterface
+   *   The string translation service.
+   */
+  protected function getStringTranslation() {
+    if (!$this->stringTranslation) {
+      $this->stringTranslation = \Drupal::service('string_translation');
+    }
+
+    return $this->stringTranslation;
+  }
+
+  /**
+   * Sets the string translation service to use.
+   *
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation
+   *   The string translation service.
+   *
+   * @return $this
+   */
+  public function setStringTranslation(TranslationInterface $translation) {
+    $this->stringTranslation = $translation;
+
+    return $this;
+  }
+
+}
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Form/SettingsForm.php b/core/modules/aggregator/lib/Drupal/aggregator/Form/SettingsForm.php
index 2d8ebb3bf57e6c43c75ae10bb38d7980c7e8076b..075b61439b669e7f3229bcfbbe0008b904cb7bc9 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Form/SettingsForm.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Form/SettingsForm.php
@@ -56,12 +56,12 @@ class SettingsForm extends ConfigFormBase {
    *   The aggregator parser plugin manager.
    * @param \Drupal\aggregator\Plugin\AggregatorPluginManager $processor_manager
    *   The aggregator processor plugin manager.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation manager.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, AggregatorPluginManager $fetcher_manager, AggregatorPluginManager $parser_manager, AggregatorPluginManager $processor_manager, TranslationInterface $translation_manager) {
+  public function __construct(ConfigFactoryInterface $config_factory, AggregatorPluginManager $fetcher_manager, AggregatorPluginManager $parser_manager, AggregatorPluginManager $processor_manager, TranslationInterface $string_translation) {
     parent::__construct($config_factory);
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
     $this->managers = array(
       'fetcher' => $fetcher_manager,
       'parser' => $parser_manager,
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php b/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
index 482ac75150fc832f058b901ba24ebd26e987d367..bb76ec25cfaf5fcdee41c422143eb8b3c079c269 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Language\LanguageManager;
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Manages discovery and instantiation of block plugins.
@@ -21,6 +22,7 @@
  * @see \Drupal\block\BlockPluginInterface
  */
 class BlockManager extends DefaultPluginManager {
+  use StringTranslationTrait;
 
   /**
    * An array of all available modules and their data.
@@ -29,13 +31,6 @@ class BlockManager extends DefaultPluginManager {
    */
   protected $moduleData;
 
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * Constructs a new \Drupal\block\Plugin\Type\BlockManager object.
    *
@@ -48,15 +43,15 @@ class BlockManager extends DefaultPluginManager {
    *   The language manager.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   The module handler to invoke the alter hook with.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager.
    */
-  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, LanguageManager $language_manager, ModuleHandlerInterface $module_handler, TranslationInterface $translation_manager) {
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, LanguageManager $language_manager, ModuleHandlerInterface $module_handler, TranslationInterface $string_translation) {
     parent::__construct('Plugin/Block', $namespaces, $module_handler, 'Drupal\block\Annotation\Block');
 
     $this->alterInfo('block');
     $this->setCacheBackend($cache_backend, $language_manager, 'block_plugins');
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
   }
 
   /**
@@ -94,15 +89,6 @@ protected function getModuleName($module) {
     return $module;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
-  }
-
   /**
    * Gets the names of all block categories.
    *
diff --git a/core/modules/book/lib/Drupal/book/BookManager.php b/core/modules/book/lib/Drupal/book/BookManager.php
index 3e0a6aa06da684680a22ea3e1f3d8825bffbdb1a..c491cf475ec06921dc385b0e650552b9e32f2d05 100644
--- a/core/modules/book/lib/Drupal/book/BookManager.php
+++ b/core/modules/book/lib/Drupal/book/BookManager.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\node\NodeInterface;
 
@@ -20,6 +21,7 @@
  * Defines a book manager.
  */
 class BookManager implements BookManagerInterface {
+  use StringTranslationTrait;
 
   /**
    * Defines the maximum supported depth of the book tree.
@@ -40,13 +42,6 @@ class BookManager implements BookManagerInterface {
    */
   protected $entityManager;
 
-  /**
-   * The translation service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translation;
-
   /**
    * Config Factory Service Object.
    *
@@ -74,7 +69,7 @@ class BookManager implements BookManagerInterface {
   public function __construct(Connection $connection, EntityManagerInterface $entity_manager, TranslationInterface $translation, ConfigFactoryInterface $config_factory) {
     $this->connection = $connection;
     $this->entityManager = $entity_manager;
-    $this->translation = $translation;
+    $this->stringTranslation = $translation;
     $this->configFactory = $config_factory;
   }
 
@@ -323,15 +318,6 @@ public function getBookParents(array $item, array $parent = array()) {
     return $book;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translation->translate($string, $args, $options);
-  }
-
   /**
    * Builds the parent selection form element for the node form or outline tab.
    *
diff --git a/core/modules/comment/lib/Drupal/comment/CommentManager.php b/core/modules/comment/lib/Drupal/comment/CommentManager.php
index 6ffc7b0cd62b5fa828fd27c130716e0cd8f77745..bf43f6e29be1919d734359362bd7984dfe276b83 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentManager.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentManager.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Drupal\field\FieldInfo;
 
@@ -21,6 +22,7 @@
  * Comment manager contains common functions to manage comment fields.
  */
 class CommentManager implements CommentManagerInterface {
+  use StringTranslationTrait;
 
   /**
    * The field info service.
@@ -50,13 +52,6 @@ class CommentManager implements CommentManagerInterface {
    */
   protected $userConfig;
 
-  /**
-   * The string translation service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * The url generator service.
    *
@@ -73,16 +68,16 @@ class CommentManager implements CommentManagerInterface {
    *   The entity manager service.
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The config factory.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation service.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
    */
-  public function __construct(FieldInfo $field_info, EntityManagerInterface $entity_manager, ConfigFactoryInterface $config_factory, TranslationInterface $translation_manager, UrlGeneratorInterface $url_generator) {
+  public function __construct(FieldInfo $field_info, EntityManagerInterface $entity_manager, ConfigFactoryInterface $config_factory, TranslationInterface $string_translation, UrlGeneratorInterface $url_generator) {
     $this->fieldInfo = $field_info;
     $this->entityManager = $entity_manager;
     $this->userConfig = $config_factory->get('user.settings');
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
     $this->urlGenerator = $url_generator;
   }
 
@@ -293,13 +288,4 @@ public function forbiddenMessage(EntityInterface $entity, $field_name) {
     return '';
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
-  }
-
 }
diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigSync.php b/core/modules/config/lib/Drupal/config/Form/ConfigSync.php
index 19f417fa0526fc5fdcf8ef5fa2234644755265ca..a9eaac76ab8beb118b45fb0b809c7d463d52c862 100644
--- a/core/modules/config/lib/Drupal/config/Form/ConfigSync.php
+++ b/core/modules/config/lib/Drupal/config/Form/ConfigSync.php
@@ -264,7 +264,7 @@ public function submitForm(array &$form, array &$form_state) {
       $this->typedConfigManager,
       $this->moduleHandler,
       $this->themeHandler,
-      $this->translationManager()
+      $this->getStringTranslation()
     );
     if ($config_importer->alreadyImporting()) {
       drupal_set_message($this->t('Another request may be synchronizing configuration already.'));
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php b/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php
index 89d44eff9fbc690c5ff3c9fcc850641d1af89173..ce935f4bdbf12401173193329c95f836b97bcd0d 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/ConfigNamesMapper.php
@@ -89,14 +89,14 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
    *   The mapper plugin discovery service.
    * @param \Drupal\Core\Routing\RouteProviderInterface
    *   The route provider.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation manager.
    *
    * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException
    *   Throws an exception if the route specified by the 'base_route_name' in
    *   the plugin definition could not be found by the route provider.
    */
-  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $translation_manager) {
+  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $string_translation) {
     $this->pluginId = $plugin_id;
     $this->pluginDefinition = $plugin_definition;
     $this->routeProvider = $route_provider;
@@ -105,7 +105,7 @@ public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterfa
     $this->localeConfigManager = $locale_config_manager;
     $this->configMapperManager = $config_mapper_manager;
 
-    $this->setTranslationManager($translation_manager);
+    $this->stringTranslation = $string_translation;
   }
 
   /**
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/DateFormat.php b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/DateFormat.php
index 3cc98672fa71c340a3b89427c90f67c2d006b28e..3abb57eca2251c344a2e142929f191d6c44a081c 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/DateFormat.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/DateFormat.php
@@ -11,11 +11,13 @@
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Language\Language;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Defines the date format element for the configuration translation interface.
  */
-class DateFormat extends Element {
+class DateFormat implements ElementInterface {
+  use StringTranslationTrait;
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Element.php b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Element.php
deleted file mode 100644
index 40a43c2700ac2bc8ae62f7cd3d9b3793530cf09c..0000000000000000000000000000000000000000
--- a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Element.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\config_translation\FormElement\Element.
- */
-
-namespace Drupal\config_translation\FormElement;
-
-/**
- * Defines a base class for form elements.
- */
-abstract class Element implements ElementInterface {
-
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
-  /**
-   * Returns the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = \Drupal::translation();
-    }
-    return $this->translationManager;
-  }
-
-}
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textarea.php b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textarea.php
index e79107e744e5e5805683cccf6b4dc8e0ae28db33..b796685b0ba68591fc78b85c05d812642cff9408 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textarea.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textarea.php
@@ -8,11 +8,13 @@
 namespace Drupal\config_translation\FormElement;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Defines the textarea element for the configuration translation interface.
  */
-class Textarea extends Element {
+class Textarea implements ElementInterface {
+  use StringTranslationTrait;
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textfield.php b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textfield.php
index 1791961c185e39b6976ba1c870b6058fa787ffec..46d71fe2479eb928e0d2dbd693f95351693b8f51 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textfield.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/FormElement/Textfield.php
@@ -8,11 +8,13 @@
 namespace Drupal\config_translation\FormElement;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
  * Defines the textfield element for the configuration translation interface.
  */
-class Textfield extends Element {
+class Textfield implements ElementInterface {
+  use StringTranslationTrait;
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php b/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php
index f7fd862f213b08e1081c7ad4be1937fed4db8ef9..37e546d6a3df624989923cab40676c6ba1b22967 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php
@@ -11,6 +11,7 @@
 use Drupal\Component\Plugin\Derivative\DerivativeBase;
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -18,6 +19,7 @@
  * Provides local task definitions for all entity bundles.
  */
 class FieldUiLocalTask extends DerivativeBase implements ContainerDerivativeInterface {
+  use StringTranslationTrait;
 
   /**
    * The route provider.
@@ -33,13 +35,6 @@ class FieldUiLocalTask extends DerivativeBase implements ContainerDerivativeInte
    */
   protected $entityManager;
 
-  /**
-   * The translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * Creates an FieldUiLocalTask object.
    *
@@ -47,13 +42,13 @@ class FieldUiLocalTask extends DerivativeBase implements ContainerDerivativeInte
    *   The route provider.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager.
    */
-  public function __construct(RouteProviderInterface $route_provider, EntityManagerInterface $entity_manager, TranslationInterface $translation_manager) {
+  public function __construct(RouteProviderInterface $route_provider, EntityManagerInterface $entity_manager, TranslationInterface $string_translation) {
     $this->routeProvider = $route_provider;
     $this->entityManager = $entity_manager;
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
   }
 
   /**
@@ -196,13 +191,4 @@ public function alterLocalTasks(&$local_tasks) {
     }
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
-  }
-
 }
diff --git a/core/modules/forum/lib/Drupal/forum/ForumManager.php b/core/modules/forum/lib/Drupal/forum/ForumManager.php
index 388dd4ad0ec7bbb06225ee51f243d2ecb34b7edd..ea601b72249e2ac68a7f5241125107a4fa30efbe 100644
--- a/core/modules/forum/lib/Drupal/forum/ForumManager.php
+++ b/core/modules/forum/lib/Drupal/forum/ForumManager.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\comment\CommentInterface;
 use Drupal\field\FieldInfo;
 use Drupal\node\NodeInterface;
@@ -21,6 +22,7 @@
  * Provides forum manager service.
  */
 class ForumManager extends DependencySerialization implements ForumManagerInterface {
+  use StringTranslationTrait;
 
   /**
    * Forum sort order, newest first.
@@ -105,13 +107,6 @@ class ForumManager extends DependencySerialization implements ForumManagerInterf
    */
   protected $fieldInfo;
 
-  /**
-   * Translation manager service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * Constructs the forum manager service.
    *
@@ -123,15 +118,15 @@ class ForumManager extends DependencySerialization implements ForumManagerInterf
    *   The current database connection.
    * @param \Drupal\field\FieldInfo $field_info
    *   The field info service.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager service.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, EntityManagerInterface $entity_manager, Connection $connection, FieldInfo $field_info, TranslationInterface $translation_manager) {
+  public function __construct(ConfigFactoryInterface $config_factory, EntityManagerInterface $entity_manager, Connection $connection, FieldInfo $field_info, TranslationInterface $string_translation) {
     $this->configFactory = $config_factory;
     $this->entityManager = $entity_manager;
     $this->connection = $connection;
     $this->fieldInfo = $field_info;
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
   }
 
   /**
@@ -550,15 +545,6 @@ public function updateIndex($nid) {
     }
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumBreadcrumbBuilderBaseTest.php b/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumBreadcrumbBuilderBaseTest.php
index 22d3618e1fcbfa4f7269b6dac133098ef37d5e23..8b71d695203187c8c92a4ff20ba6ad16b8bc9798 100644
--- a/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumBreadcrumbBuilderBaseTest.php
+++ b/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumBreadcrumbBuilderBaseTest.php
@@ -131,7 +131,7 @@ public function testBuild() {
 
     // Add a translation manager for t().
     $translation_manager = $this->getStringTranslationStub();
-    $property = new \ReflectionProperty('Drupal\forum\Breadcrumb\ForumNodeBreadcrumbBuilder', 'translationManager');
+    $property = new \ReflectionProperty('Drupal\forum\Breadcrumb\ForumNodeBreadcrumbBuilder', 'stringTranslation');
     $property->setAccessible(TRUE);
     $property->setValue($breadcrumb_builder, $translation_manager);
 
diff --git a/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumListingBreadcrumbBuilderTest.php b/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumListingBreadcrumbBuilderTest.php
index 2aa280473b73571517e60a42591853ceb7ba7fd3..7a5834305d84f16a72ef8a77239a280502b600ce 100644
--- a/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumListingBreadcrumbBuilderTest.php
+++ b/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumListingBreadcrumbBuilderTest.php
@@ -187,7 +187,7 @@ public function testBuild() {
 
     // Add a translation manager for t().
     $translation_manager = $this->getStringTranslationStub();
-    $property = new \ReflectionProperty('Drupal\forum\Breadcrumb\ForumNodeBreadcrumbBuilder', 'translationManager');
+    $property = new \ReflectionProperty('Drupal\forum\Breadcrumb\ForumNodeBreadcrumbBuilder', 'stringTranslation');
     $property->setAccessible(TRUE);
     $property->setValue($breadcrumb_builder, $translation_manager);
 
diff --git a/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumNodeBreadcrumbBuilderTest.php b/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumNodeBreadcrumbBuilderTest.php
index 4a12d0d2dac30b3ec37754a65d8cfe2fbe2464af..d1019f5e5cd6171d1824820d2e3904a330d43702 100644
--- a/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumNodeBreadcrumbBuilderTest.php
+++ b/core/modules/forum/tests/Drupal/forum/Tests/Breadcrumb/ForumNodeBreadcrumbBuilderTest.php
@@ -195,7 +195,7 @@ public function testBuild() {
 
     // Add a translation manager for t().
     $translation_manager = $this->getStringTranslationStub();
-    $property = new \ReflectionProperty('Drupal\forum\Breadcrumb\ForumNodeBreadcrumbBuilder', 'translationManager');
+    $property = new \ReflectionProperty('Drupal\forum\Breadcrumb\ForumNodeBreadcrumbBuilder', 'stringTranslation');
     $property->setAccessible(TRUE);
     $property->setValue($breadcrumb_builder, $translation_manager);
 
diff --git a/core/modules/migrate/lib/Drupal/migrate/MigrateExecutable.php b/core/modules/migrate/lib/Drupal/migrate/MigrateExecutable.php
index dcb84d24e291aacd8a76447aeb72fae744055d40..5b9d8bb86850f7f7d17155eba7cae2b0d9f63492 100644
--- a/core/modules/migrate/lib/Drupal/migrate/MigrateExecutable.php
+++ b/core/modules/migrate/lib/Drupal/migrate/MigrateExecutable.php
@@ -8,6 +8,7 @@
 namespace Drupal\migrate;
 
 use Drupal\Core\Utility\Error;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\Plugin\MigrateIdMapInterface;
 
@@ -15,6 +16,7 @@
  * Defines a migrate executable class.
  */
 class MigrateExecutable {
+  use StringTranslationTrait;
 
   /**
    * The configuration of the migration to do.
@@ -126,13 +128,6 @@ class MigrateExecutable {
    */
   protected $memoryLimit;
 
-  /**
-   * The translation manager.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * The rollback action to be saved for the current row.
    *
@@ -645,26 +640,4 @@ public function handleException(\Exception $exception, $save = TRUE) {
     $this->message->display($message, 'error');
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager()->translate($string, $args, $options);
-  }
-
-  /**
-   * Gets the translation manager.
-   *
-   * @return \Drupal\Core\StringTranslation\TranslationInterface
-   *   The translation manager.
-   */
-  protected function translationManager() {
-    if (!$this->translationManager) {
-      $this->translationManager = \Drupal::translation();
-    }
-    return $this->translationManager;
-  }
-
 }
diff --git a/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecutableTest.php b/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecutableTest.php
index e837e09e74433a6824085e370358e562d55466b5..fd0da23683b0ca195aa33d1c1d8edd91504347b5 100644
--- a/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecutableTest.php
+++ b/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecutableTest.php
@@ -67,7 +67,7 @@ protected function setUp() {
     $this->message = $this->getMock('Drupal\migrate\MigrateMessageInterface');
 
     $this->executable = new TestMigrateExecutable($this->migration, $this->message);
-    $this->executable->setTranslationManager($this->getStringTranslationStub());
+    $this->executable->setStringTranslation($this->getStringTranslationStub());
     $this->executable->setTimeThreshold(0.1);
     $this->executable->limit = array('unit' => 'second', 'value' => 1);
   }
diff --git a/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecuteableMemoryExceededTest.php b/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecuteableMemoryExceededTest.php
index 133402e15d86453c3ce8831cdf0bd81611be9dd5..e4b6e2495f764fd0a72255736107acb7d1dba212 100644
--- a/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecuteableMemoryExceededTest.php
+++ b/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateExecuteableMemoryExceededTest.php
@@ -70,7 +70,7 @@ protected function setUp() {
     $this->message = $this->getMock('Drupal\migrate\MigrateMessageInterface');
 
     $this->executable = new TestMigrateExecutable($this->migration, $this->message);
-    $this->executable->setTranslationManager($this->getStringTranslationStub());
+    $this->executable->setStringTranslation($this->getStringTranslationStub());
   }
 
   /**
diff --git a/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateSqlSourceTestCase.php b/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateSqlSourceTestCase.php
index 98db38ebb55b562fe98c6082cb8987ad70349711..29946d1fb2cb05d92ea7ccab6676947b3d5b0131 100644
--- a/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateSqlSourceTestCase.php
+++ b/core/modules/migrate/tests/Drupal/migrate/Tests/MigrateSqlSourceTestCase.php
@@ -83,7 +83,7 @@ protected function setUp() {
     $plugin = new $plugin_class($this->migrationConfiguration['source'], $this->migrationConfiguration['source']['plugin'], array(), $migration);
     $plugin->setDatabase($this->getDatabase($this->databaseContents + array('test_map' => array())));
     $plugin->setModuleHandler($module_handler);
-    $plugin->setTranslationManager($this->getStringTranslationStub());
+    $plugin->setStringTranslation($this->getStringTranslationStub());
     $migration->expects($this->any())
       ->method('getSourcePlugin')
       ->will($this->returnValue($plugin));
diff --git a/core/modules/migrate/tests/Drupal/migrate/Tests/TestMigrateExecutable.php b/core/modules/migrate/tests/Drupal/migrate/Tests/TestMigrateExecutable.php
index ad305f2566c11a4e8785496aab30a3f875c55d1d..87462360cf85dc4a299232d2256493fef1c68d13 100644
--- a/core/modules/migrate/tests/Drupal/migrate/Tests/TestMigrateExecutable.php
+++ b/core/modules/migrate/tests/Drupal/migrate/Tests/TestMigrateExecutable.php
@@ -37,13 +37,13 @@ class TestMigrateExecutable extends MigrateExecutable {
   protected $clearedMemoryUsage;
 
   /**
-   * Sets the translation manager.
+   * Sets the string translation service.
    *
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The translation manager.
    */
-  public function setTranslationManager(TranslationInterface $translation_manager) {
-    $this->translationManager = $translation_manager;
+  public function setStringTranslation(TranslationInterface $string_translation) {
+    $this->stringTranslation = $string_translation;
   }
 
   /**
diff --git a/core/modules/system/lib/Drupal/system/Controller/SystemController.php b/core/modules/system/lib/Drupal/system/Controller/SystemController.php
index 64049aaaa58d42d2977cbad6ea547b44678d0d50..62272963d6845380069d3e86b2f9bad7df268327 100644
--- a/core/modules/system/lib/Drupal/system/Controller/SystemController.php
+++ b/core/modules/system/lib/Drupal/system/Controller/SystemController.php
@@ -302,10 +302,10 @@ public function themesPage() {
 
     // There are two possible theme groups.
     $theme_group_titles = array(
-      'enabled' => $this->translationManager()->formatPlural(count($theme_groups['enabled']), 'Enabled theme', 'Enabled themes'),
+      'enabled' => $this->formatPlural(count($theme_groups['enabled']), 'Enabled theme', 'Enabled themes'),
     );
     if (!empty($theme_groups['disabled'])) {
-      $theme_group_titles['disabled'] = $this->translationManager()->formatPlural(count($theme_groups['disabled']), 'Disabled theme', 'Disabled themes');
+      $theme_group_titles['disabled'] = $this->formatPlural(count($theme_groups['disabled']), 'Disabled theme', 'Disabled themes');
     }
 
     uasort($theme_groups['enabled'], 'system_sort_themes');
diff --git a/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkForm.php b/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkForm.php
index 172162b2e72f591252d247e75f1e0aa8daef4050..fc9898df65bc86aa8c44540d0a44910c3bb769e3 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkForm.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkForm.php
@@ -268,7 +268,7 @@ public function viewsFormSubmit(&$form, &$form_state) {
 
       $count = count(array_filter($form_state['values'][$this->options['id']]));
       if ($count) {
-        drupal_set_message($this->translationManager()->formatPlural($count, '%action was applied to @count item.', '%action was applied to @count items.', array(
+        drupal_set_message($this->formatPlural($count, '%action was applied to @count item.', '%action was applied to @count items.', array(
           '%action' => $action->label(),
         )));
       }
diff --git a/core/modules/system/tests/Drupal/system/Tests/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php b/core/modules/system/tests/Drupal/system/Tests/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
index ef7cb95c76eb4e95a91759f441430e3a41c503f9..f7c86a2d43845e363cc62706f3004977c0fea9a7 100644
--- a/core/modules/system/tests/Drupal/system/Tests/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
+++ b/core/modules/system/tests/Drupal/system/Tests/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
@@ -124,7 +124,7 @@ public function setUp() {
       $this->currentUser
     );
 
-    $this->builder->setTranslationManager($this->getStringTranslationStub());
+    $this->builder->setStringTranslation($this->getStringTranslationStub());
 
     $this->linkGenerator = $this->getMock('Drupal\Core\Utility\LinkGeneratorInterface');
     $this->builder->setLinkGenerator($this->linkGenerator);
@@ -415,8 +415,8 @@ protected function setupStubPathProcessor() {
  */
 class TestPathBasedBreadcrumbBuilder extends PathBasedBreadcrumbBuilder {
 
-  public function setTranslationManager(TranslationInterface $translation_manager) {
-    $this->translationManager = $translation_manager;
+  public function setStringTranslation(TranslationInterface $string_translation) {
+    $this->stringTranslation = $string_translation;
   }
 
   public function setLinkGenerator(LinkGeneratorInterface $link_generator) {
diff --git a/core/modules/update/lib/Drupal/update/UpdateManager.php b/core/modules/update/lib/Drupal/update/UpdateManager.php
index 8c7c48abdd028c9174b99716e66db03b044ed9d4..a1801fe0aedbe234de89134dad94106980489859 100644
--- a/core/modules/update/lib/Drupal/update/UpdateManager.php
+++ b/core/modules/update/lib/Drupal/update/UpdateManager.php
@@ -10,12 +10,14 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Utility\ProjectInfo;
 
 /**
  * Default implementation of UpdateManagerInterface.
  */
 class UpdateManager implements UpdateManagerInterface {
+  use StringTranslationTrait;
 
   /**
    * The update settings
@@ -59,13 +61,6 @@ class UpdateManager implements UpdateManagerInterface {
    */
   protected $availableReleasesTempStore;
 
-  /**
-   * The translation service.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translation;
-
   /**
    * Constructs a UpdateManager.
    *
@@ -84,7 +79,7 @@ public function __construct(ConfigFactoryInterface $config_factory, ModuleHandle
     $this->updateSettings = $config_factory->get('update.settings');
     $this->moduleHandler = $module_handler;
     $this->updateProcessor = $update_processor;
-    $this->translation = $translation;
+    $this->stringTranslation = $translation;
     $this->keyValueStore = $key_value_expirable_factory->get('update');
     $this->availableReleasesTempStore = $key_value_expirable_factory->get('update_available_releases');
     $this->projects = array();
@@ -215,13 +210,4 @@ public function fetchDataBatch(&$context) {
     }
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translation->translate($string, $args, $options);
-  }
-
 }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsEntityArgumentValidator.php b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsEntityArgumentValidator.php
index 9800e32e2a471c40e4857a2ae8020b971a0d2aeb..7c83546f7bdb3e2bf4b5d272e30e2ce6992d635e 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsEntityArgumentValidator.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsEntityArgumentValidator.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Plugin\Derivative\DerivativeBase;
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -21,6 +22,8 @@
  * @see \Drupal\views\Plugin\views\argument_validator\Entity
  */
 class ViewsEntityArgumentValidator extends DerivativeBase implements ContainerDerivativeInterface {
+  use StringTranslationTrait;
+
   /**
    * The base plugin ID this derivative is for.
    *
@@ -35,13 +38,6 @@ class ViewsEntityArgumentValidator extends DerivativeBase implements ContainerDe
    */
   protected $entityManager;
 
-  /**
-   * The string translation.
-   *
-   * @var \Drupal\Core\StringTranslation\TranslationInterface
-   */
-  protected $translationManager;
-
   /**
    * List of derivative definitions.
    *
@@ -56,13 +52,13 @@ class ViewsEntityArgumentValidator extends DerivativeBase implements ContainerDe
    *   The base plugin ID.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager.
-   * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation.
    */
-  public function __construct($base_plugin_id, EntityManagerInterface $entity_manager, TranslationInterface $translation_manager) {
+  public function __construct($base_plugin_id, EntityManagerInterface $entity_manager, TranslationInterface $string_translation) {
     $this->basePluginId = $base_plugin_id;
     $this->entityManager = $entity_manager;
-    $this->translationManager = $translation_manager;
+    $this->stringTranslation = $string_translation;
   }
 
   /**
@@ -96,13 +92,4 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     return $this->derivatives;
   }
 
-  /**
-   * Translates a string to the current language or to a given language.
-   *
-   * See the t() documentation for details.
-   */
-  protected function t($string, array $args = array(), array $options = array()) {
-    return $this->translationManager->translate($string, $args, $options);
-  }
-
 }
diff --git a/core/modules/views_ui/tests/Drupal/views_ui/Tests/ViewListBuilderTest.php b/core/modules/views_ui/tests/Drupal/views_ui/Tests/ViewListBuilderTest.php
index 483752593a3dc1d777b7290ba0891f3302f59d95..902b615ad7c68ff769e4eeebc19c90eacc9c1954 100644
--- a/core/modules/views_ui/tests/Drupal/views_ui/Tests/ViewListBuilderTest.php
+++ b/core/modules/views_ui/tests/Drupal/views_ui/Tests/ViewListBuilderTest.php
@@ -125,7 +125,7 @@ public function testBuildRowEntityList() {
     // because t() is called on there.
     $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $view_list_builder = new TestViewListBuilder($entity_type, $storage, $display_manager);
-    $view_list_builder->setTranslationManager($this->getStringTranslationStub());
+    $view_list_builder->setStringTranslation($this->getStringTranslationStub());
 
     $view = new View($values, 'view');
 
diff --git a/core/tests/Drupal/Tests/Core/Controller/ExceptionControllerTest.php b/core/tests/Drupal/Tests/Core/Controller/ExceptionControllerTest.php
index 0c5f4e70ccb7830161bccad46dc4ba1ac41e6f11..7597dea27f18890795c2b27ba0a3d1a0efc84a5b 100644
--- a/core/tests/Drupal/Tests/Core/Controller/ExceptionControllerTest.php
+++ b/core/tests/Drupal/Tests/Core/Controller/ExceptionControllerTest.php
@@ -35,7 +35,6 @@ public static function getInfo() {
   public function test405HTML() {
     $exception = new \Exception('Test exception');
     $flat_exception = FlattenException::create($exception, 405);
-    $translation_manager = $this->getStringTranslationStub();
     $html_page_renderer = $this->getMock('Drupal\Core\Page\HtmlPageRendererInterface');
     $html_fragment_renderer = $this->getMock('Drupal\Core\Page\HtmlFragmentRendererInterface');
     $title_resolver = $this->getMock('Drupal\Core\Controller\TitleResolverInterface');
@@ -45,7 +44,7 @@ public function test405HTML() {
       ->method('getContentType')
       ->will($this->returnValue('html'));
 
-    $exception_controller = new ExceptionController($content_negotiation, $translation_manager, $title_resolver, $html_page_renderer, $html_fragment_renderer);
+    $exception_controller = new ExceptionController($content_negotiation, $title_resolver, $html_page_renderer, $html_fragment_renderer);
     $response = $exception_controller->execute($flat_exception, new Request());
     $this->assertEquals($response->getStatusCode(), 405, 'HTTP status of response is correct.');
     $this->assertEquals($response->getContent(), 'Method Not Allowed', 'HTTP response body is correct.');
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
index f6d412949f570d9d659d1041d11d4d7863623e6e..121d7455357d4e5b2aba44f9954f3928226ed9b7 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
@@ -132,7 +132,7 @@ public function testGetOperations() {
       ->will($this->returnValue($url));
 
     $list = new EntityListBuilder($this->entityType, $this->roleStorage, $this->moduleHandler);
-    $list->setTranslationManager($this->translationManager);
+    $list->setStringTranslation($this->translationManager);
 
     $operations = $list->getOperations($this->role);
     $this->assertInternalType('array', $operations);
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
index 080d79f04dfbe775f51b4e624c9ba9e2b33d065b..7e01f36eb83d687eed0936705d0958e4c6a92d51 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
@@ -348,7 +348,7 @@ public function testGetFormObject() {
     $apple_form = $this->entityManager->getFormObject('apple', 'default');
     $this->assertInstanceOf('Drupal\Tests\Core\Entity\TestEntityForm', $apple_form);
     $this->assertAttributeInstanceOf('Drupal\Core\Extension\ModuleHandlerInterface', 'moduleHandler', $apple_form);
-    $this->assertAttributeInstanceOf('Drupal\Core\StringTranslation\TranslationInterface', 'translationManager', $apple_form);
+    $this->assertAttributeInstanceOf('Drupal\Core\StringTranslation\TranslationInterface', 'stringTranslation', $apple_form);
 
     $banana_form = $this->entityManager->getFormObject('banana', 'default');
     $this->assertInstanceOf('Drupal\Tests\Core\Entity\TestEntityFormInjected', $banana_form);
@@ -398,7 +398,7 @@ public function testGetController() {
     $apple_controller = $this->entityManager->getController('apple', 'storage');
     $this->assertInstanceOf($class, $apple_controller);
     $this->assertAttributeInstanceOf('Drupal\Core\Extension\ModuleHandlerInterface', 'moduleHandler', $apple_controller);
-    $this->assertAttributeInstanceOf('Drupal\Core\StringTranslation\TranslationInterface', 'translationManager', $apple_controller);
+    $this->assertAttributeInstanceOf('Drupal\Core\StringTranslation\TranslationInterface', 'stringTranslation', $apple_controller);
 
     $banana_controller = $this->entityManager->getController('banana', 'storage', 'getStorageClass');
     $this->assertInstanceOf('Drupal\Tests\Core\Entity\TestEntityControllerInjected', $banana_controller);
diff --git a/core/tests/Drupal/Tests/Core/Menu/ContextualLinkDefaultTest.php b/core/tests/Drupal/Tests/Core/Menu/ContextualLinkDefaultTest.php
index 883b79e6603a7a148c12a29874f4c2d9a50f9173..9b1b4e7009023786d5c921e7cc13ca323f8e9b0a 100644
--- a/core/tests/Drupal/Tests/Core/Menu/ContextualLinkDefaultTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/ContextualLinkDefaultTest.php
@@ -73,7 +73,7 @@ protected function setUp() {
 
   protected function setupContextualLinkDefault() {
     $this->contextualLinkDefault = new ContextualLinkDefault($this->config, $this->pluginId, $this->pluginDefinition);
-    $this->contextualLinkDefault->setTranslationManager($this->stringTranslation);
+    $this->contextualLinkDefault->setStringTranslation($this->stringTranslation);
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php b/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php
index 4febf0246b4d2c8a3073713e9a79aae3945ad3ce..70bddbc93a3505d38e6a3eb738e8dd91a6822480 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php
@@ -83,7 +83,7 @@ protected function setUp() {
    */
   protected function setupLocalActionDefault() {
     $this->localActionDefault = new LocalActionDefault($this->config, $this->pluginId, $this->pluginDefinition, $this->routeProvider);
-    $this->localActionDefault->setTranslationManager($this->stringTranslation);
+    $this->localActionDefault->setStringTranslation($this->stringTranslation);
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php b/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
index a0f8106ccfc8b9bf1734a190ccfb6a412e1b6532..9cd72102cca31f5ff95b4be5b65dd97319db9400 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
@@ -87,7 +87,7 @@ protected function setupLocalTaskDefault() {
     $this->localTaskBase = new TestLocalTaskDefault($this->config, $this->pluginId, $this->pluginDefinition);
     $this->localTaskBase
       ->setRouteProvider($this->routeProvider)
-      ->setTranslationManager($this->stringTranslation);
+      ->setStringTranslation($this->stringTranslation);
 
   }
 
diff --git a/core/tests/Drupal/Tests/Core/StringTranslation/StringTranslationTraitTest.php b/core/tests/Drupal/Tests/Core/StringTranslation/StringTranslationTraitTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..69d2cea4eb08ab35b1ad1b96345a784700366c3b
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/StringTranslation/StringTranslationTraitTest.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\StringTranslation\StringTranslationTraitTest.
+ */
+
+namespace Drupal\Tests\Core\StringTranslation;
+
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * Tests \Drupal\Core\StringTranslation\StringTranslationTrait.
+ *
+ * @see \Drupal\Core\StringTranslation\StringTranslationTrait
+ * @coversDefaultClass \Drupal\Core\StringTranslation\StringTranslationTrait
+ *
+ * @group Drupal
+ * @group StringTranslation
+ */
+class StringTranslationTraitTest extends UnitTestCase {
+
+  /**
+   * A reflection of self::$translation.
+   *
+   * @var \ReflectionClass
+   */
+  protected $reflection;
+
+  /**
+   * The mock under test that uses StringTranslationTrait.
+   *
+   * @var object
+   * @see PHPUnit_Framework_MockObject_Generator::getObjectForTrait()
+   */
+  protected $translation;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'String translation trait',
+      'description' => 'Tests the string translation trait.',
+      'group' => 'StringTranslation',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    $this->translation = $this->getObjectForTrait('\Drupal\Core\StringTranslation\StringTranslationTrait');
+    $stub = $this->getStringTranslationStub();
+    $stub->expects($this->any())
+      ->method('formatPlural')
+      ->will($this->returnArgument(2));
+    $this->translation->setStringTranslation($stub);
+    $this->reflection = new \ReflectionClass(get_class($this->translation));
+  }
+
+  /**
+   * @covers ::t
+   */
+  public function testT() {
+    $method = $this->reflection->getMethod('t');
+    $method->setAccessible(TRUE);
+
+    $this->assertEquals('something', $method->invoke($this->translation, 'something'));
+  }
+
+  /**
+   * @covers ::formatPlural
+   */
+  public function testFormatPlural() {
+    $method = $this->reflection->getMethod('formatPlural');
+    $method->setAccessible(TRUE);
+
+    $this->assertEquals('apples', $method->invoke($this->translation, 2, 'apple', 'apples'));
+  }
+
+}