diff --git a/core/lib/Drupal/Core/Annotation/PluralTranslation.php b/core/lib/Drupal/Core/Annotation/PluralTranslation.php
new file mode 100644
index 0000000..67d75eb
--- /dev/null
+++ b/core/lib/Drupal/Core/Annotation/PluralTranslation.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Annotation\PluralTranslation.
+ */
+
+namespace Drupal\Core\Annotation;
+
+use Drupal\Component\Annotation\AnnotationInterface;
+
+/**
+ * Defines an annotation object for strings that require plural forms. Note that
+ * the return values for both 'singular' and 'plural' keys needs to be passed to
+ * format_plural().
+ *
+ * For example, the annotation can to look like this:
+ * @code
+ *   label_count = @ PluralTranslation(
+ *     singular = "1 item",
+ *     plural = "@count items"
+ *   ),
+ * @endcode
+ * Remove spaces after @ in your actual plugin - these are put into this sample
+ * code so that it is not recognized as annotation.
+ *
+ * Code samples that make use of this annotation class and the definition sample
+ * above:
+ * @code
+ *   // Returns: 1 item
+ *   echo $entity->entityTypeLabel(TRUE, 1);
+ *
+ *   // Returns: 5 items
+ *   echo $entity->entityTypeLabel(TRUE, 5);
+ * @endcode
+ *
+ * @Annotation
+ *
+ * @see \Drupal\Core\Entity\Entity::entityTypeLabel()
+ *
+ * @ingroup plugin_translatable
+ */
+class PluralTranslation implements AnnotationInterface {
+
+  /**
+   * The string for the singular case.
+   *
+   * @var string
+   */
+  protected $singular;
+
+  /**
+   * The string for the plural case.
+   *
+   * @var string
+   */
+  protected $plural;
+
+  /**
+   * Constructs a PluralTranslation object.
+   */
+  public function __construct($values) {
+    $this->singular = $values['singular'];
+    $this->plural = $values['plural'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function get() {
+    return array(
+      'singular' => $this->singular,
+      'plural' => $this->plural,
+    );
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 23701f4..3d81619 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -370,4 +370,25 @@ public function changed() {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function entityTypeLabel($label_form = self::ENTITY_TYPE_LABEL_GENERIC, $count = NULL) {
+    $info = $this->entityInfo();
+    switch ($label_form) {
+      case static::ENTITY_TYPE_LABEL_SINGULAR:
+        return $info['label_singular'];
+
+      case static::ENTITY_TYPE_LABEL_PLURAL:
+        return $info['label_plural'];
+
+      case static::ENTITY_TYPE_LABEL_COUNT:
+        return format_plural($count, $info['label_count']['singular'], $info['label_count']['plural']);
+
+      case static::ENTITY_TYPE_LABEL_GENERIC:
+      default:
+        return $info['label'];
+    }
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php
index 5f84ac9..931818f 100644
--- a/core/lib/Drupal/Core/Entity/EntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityInterface.php
@@ -15,6 +15,27 @@
 interface EntityInterface extends AccessibleInterface {
 
   /**
+   * Identifies the generic entity type label.
+   */
+  const ENTITY_TYPE_LABEL_GENERIC = 0;
+
+  /**
+   * Identifies the indefinite singular entity type label.
+   */
+  const ENTITY_TYPE_LABEL_SINGULAR = 1;
+
+  /**
+   * Identifies the indefinite plural entity type label.
+   */
+  const ENTITY_TYPE_LABEL_PLURAL = 2;
+
+  /**
+   * Identifies the definite singular/plural (depending on the count given)
+   * entity type label.
+   */
+  const ENTITY_TYPE_LABEL_COUNT = 3;
+
+  /**
    * Returns the entity UUID (Universally Unique Identifier).
    *
    * The UUID is guaranteed to be unique and can be used to identify an entity
@@ -245,4 +266,19 @@ public function referencedEntities();
    */
   public function changed();
 
+  /**
+   * Returns the translated label of the entity type.
+   *
+   * @param int $label_form
+   *   (optional) One of self::ENTITY_TYPE_LABEL_GENERIC,
+   *   self::ENTITY_TYPE_LABEL_SINGULAR, self:ENTITY_TYPE_LABEL_PLURAL or
+   *   self::ENTITY_TYPE_LABEL_COUNT. Defaults to the generic entity type label.
+   * @param int $count
+   *   (optional) The item count to display if the plural form was requested.
+   *
+   * @return string
+   *   The translated label.
+   */
+  public function entityTypeLabel($label_form = self::ENTITY_TYPE_LABEL_GENERIC, $count = NULL);
+
 }
diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php
index 21887ca..05bc36f 100644
--- a/core/modules/node/lib/Drupal/node/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Entity/Node.php
@@ -19,6 +19,12 @@
  * @EntityType(
  *   id = "node",
  *   label = @Translation("Content"),
+ *   label_singular = @Translation("content item"),
+ *   label_plural = @Translation("content items"),
+ *   label_count = @PluralTranslation(
+ *     singular = "1 content item",
+ *     plural = "@count content items"
+ *   ),
  *   bundle_label = @Translation("Content type"),
  *   module = "node",
  *   controllers = {
diff --git a/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php b/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php
index d2fba9b..51b9cc1 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php
@@ -38,6 +38,10 @@ public function setUp() {
         'color' => 'yellow',
         'uses' => array(
           'bread' => t('Banana bread'),
+          'loaf' => array(
+            'singular' => '1 loaf',
+            'plural' => '@count loafs',
+          ),
         ),
         'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Banana',
         'provider' => 'plugin_test',
diff --git a/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/plugin_test/fruit/Banana.php b/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/plugin_test/fruit/Banana.php
index 55f1d12..a4f377a 100644
--- a/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/plugin_test/fruit/Banana.php
+++ b/core/modules/system/tests/modules/plugin_test/lib/Drupal/plugin_test/Plugin/plugin_test/fruit/Banana.php
@@ -16,7 +16,11 @@
  *   label = "Banana",
  *   color = "yellow",
  *   uses = {
- *     "bread" = @Translation("Banana bread")
+ *     "bread" = @Translation("Banana bread"),
+ *     "loaf" = @PluralTranslation(
+ *       singular = "1 loaf",
+ *       plural = "@count loafs"
+ *     )
  *   }
  * )
  */
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
index 80d93a1..a7c36a5 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -1147,4 +1147,11 @@ public function changed() {
      return $this->storage->changed();
    }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function entityTypeLabel($label_form = self::ENTITY_TYPE_LABEL_GENERIC, $count = NULL) {
+    return $this->storage->entityTypeLabel($label_form, $count);
+  }
+
 }
diff --git a/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php b/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
index 3e86b66..4c4458c 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
@@ -59,6 +59,10 @@ protected function setUp() {
         'color' => 'yellow',
         'uses' => array(
           'bread' => 'Banana bread',
+          'loaf' => array(
+            'singular' => '1 loaf',
+            'plural' => '@count loafs',
+          ),
         ),
         'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Banana',
       ),
