diff --git a/src/Plugin/facets/processor/TranslateEntityProcessor.php b/src/Plugin/facets/processor/TranslateEntityProcessor.php
new file mode 100644
index 0000000..7f44cdc
--- /dev/null
+++ b/src/Plugin/facets/processor/TranslateEntityProcessor.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Drupal\facets\Plugin\facets\processor;
+
+use Drupal\Core\Entity\ContentEntityBase;
+use Drupal\Core\Entity\Entity;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\facets\FacetInterface;
+use Drupal\facets\Plugin\facets\facet_source\SearchApiViews;
+use Drupal\facets\Processor\BuildProcessorInterface;
+use Drupal\facets\Processor\ProcessorPluginBase;
+use Drupal\field\Entity\FieldStorageConfig;
+
+/**
+ * Provides a processor that transforms the results to show the translated entity label.
+ *
+ * @FacetsProcessor(
+ *   id = "translate_entity",
+ *   label = @Translation("Translate entity label"),
+ *   description = @Translation("Translate entity label"),
+ *   stages = {
+ *     "build" = 5
+ *   }
+ * )
+ */
+class TranslateEntityProcessor extends ProcessorPluginBase implements BuildProcessorInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build(FacetInterface $facet, array $results) {
+    $language_interface = \Drupal::languageManager()->getCurrentLanguage();
+
+    $ids = [];
+    /** @var \Drupal\facets\Result\ResultInterface $result */
+    foreach ($results as &$result) {
+      $ids[] = $result->getRawValue();
+    }
+
+    // Load the indexed entities.
+    $index = $facet->getFacetSource()->getIndex();
+    $field = $index->getField($facet->getFieldIdentifier());
+    $field_config = FieldStorageConfig::loadByName($field->getDatasource()->getEntityTypeId(), $facet->getFieldIdentifier());
+    $entity_type = $field_config->getSetting('target_type');
+    $entities = \Drupal::entityTypeManager()
+      ->getStorage($entity_type)
+      ->loadMultiple($ids);
+
+    for ($i = 0; $i < count($entities); $i++) {
+      /** @var ContentEntityBase $entity */
+      $entity = $entities[$ids[$i]];
+
+      // Check for a translation.
+      if ($entity->hasTranslation($language_interface->getId())) {
+        $entity = $entity->getTranslation($language_interface->getId());
+      }
+
+      // Apply label/name/title.
+      switch ($entity_type) {
+        case 'taxonomy_term':
+          $label = $entity->getName();
+          break;
+        case 'node':
+          $label = $entity->getTitle();
+          break;
+        default:
+          $label = $entity->label();
+          break;
+      }
+      $results[$i]->setDisplayValue($label);
+    }
+
+    return $results;
+  }
+
+}
diff --git a/src/Plugin/facets/processor/TranslateTaxonomyProcessor.php b/src/Plugin/facets/processor/TranslateTaxonomyProcessor.php
deleted file mode 100644
index 32636cf..0000000
--- a/src/Plugin/facets/processor/TranslateTaxonomyProcessor.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-namespace Drupal\facets\Plugin\facets\processor;
-
-use Drupal\facets\FacetInterface;
-use Drupal\facets\Processor\BuildProcessorInterface;
-use Drupal\facets\Processor\ProcessorPluginBase;
-use Drupal\taxonomy\Entity\Term;
-
-/**
- * Provides a processor that transforms the results to show the translated term.
- *
- * @FacetsProcessor(
- *   id = "translate_taxonomy",
- *   label = @Translation("Translate taxonomy terms"),
- *   description = @Translation("Translate the taxonomy terms"),
- *   stages = {
- *     "build" = 5
- *   }
- * )
- */
-class TranslateTaxonomyProcessor extends ProcessorPluginBase implements BuildProcessorInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function build(FacetInterface $facet, array $results) {
-    $language_interface = \Drupal::languageManager()->getCurrentLanguage();
-
-    /** @var \Drupal\facets\Result\ResultInterface $result */
-    foreach ($results as &$result) {
-      /** @var \Drupal\taxonomy\Entity\Term $term */
-      $term = Term::load($result->getRawValue());
-
-      if ($term->hasTranslation($language_interface->getId())) {
-        $term_trans = $term->getTranslation($language_interface->getId());
-        $result->setDisplayValue($term_trans->getName());
-      }
-      else {
-        $result->setDisplayValue($term->getName());
-      }
-    }
-    return $results;
-  }
-
-}
diff --git a/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php b/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php
new file mode 100644
index 0000000..fd80642
--- /dev/null
+++ b/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php
@@ -0,0 +1,172 @@
+<?php
+
+namespace Drupal\Tests\facets\Unit\Plugin\processor;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\facets\Entity\Facet;
+use Drupal\facets\Plugin\facets\processor\TranslateEntityProcessor;
+use Drupal\facets\Result\Result;
+use Drupal\node\Entity\Node;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+ * @group facets
+ */
+class TranslateEntityProcessorTest extends UnitTestCase {
+
+  /**
+   * The processor to be tested.
+   *
+   * @var \Drupal\facets\Plugin\facets\processor\TranslateEntityProcessor
+   */
+  protected $processor;
+
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->processor = new TranslateEntityProcessor([], 'translate_entity', []);
+
+    $this->createNodeMocks();
+    $this->createTermMocks();
+  }
+
+  /**
+   * Tests that node results were correctly changed.
+   */
+  public function testNodeResultsChanged() {
+    /** @var \Drupal\facets\Result\ResultInterface[] $original_results */
+    $original_results = [
+      new Result(2, 2, 6),
+    ];
+
+    $facet = new Facet([], 'facet');
+    $facet->setResults($original_results);
+
+    $expected_results = [
+      ['nid' => 2, 'title' => 'shaken not stirred']
+    ];
+
+    foreach ($expected_results as $key => $expected) {
+      $this->assertEquals($expected['nid'], $original_results[$key]->getRawValue());
+      $this->assertEquals($expected['nid'], $original_results[$key]->getDisplayValue());
+    }
+
+    /** @var \Drupal\facets\Result\ResultInterface[] $filtered_results */
+    $filtered_results = $this->processor->build($facet, $original_results);
+
+    foreach ($expected_results as $key => $expected) {
+      $this->assertEquals($expected['nid'], $filtered_results[$key]->getRawValue());
+      $this->assertEquals($expected['title'], $filtered_results[$key]->getDisplayValue());
+    }
+  }
+
+  /**
+   * Tests that term results were correctly changed.
+   */
+  public function testTermResultsChanged() {
+    /** @var \Drupal\facets\Result\ResultInterface[] $original_results */
+    $original_results = [
+      new Result(1, 1, 5),
+    ];
+
+    $facet = new Facet([], 'facets_facet');
+    $facet->setResults($original_results);
+
+    $expected_results = [
+      ['tid' => 1, 'name' => 'Burrowing owl'],
+    ];
+
+    foreach ($expected_results as $key => $expected) {
+      $this->assertEquals($expected['tid'], $original_results[$key]->getRawValue());
+      $this->assertEquals($expected['tid'], $original_results[$key]->getDisplayValue());
+    }
+
+    $filtered_results = $this->processor->build($facet, $original_results);
+
+    foreach ($expected_results as $key => $expected) {
+      $this->assertEquals($expected['tid'], $filtered_results[$key]->getRawValue());
+      $this->assertEquals($expected['name'], $filtered_results[$key]->getDisplayValue());
+    }
+  }
+
+  /**
+   * Creates and sets up the container to be used in tests.
+   */
+  protected function createNodeMocks() {
+    $node = $this->getMockBuilder(Node::class)
+      ->disableOriginalConstructor()
+      ->getMock();
+    $node->expects($this->any())
+      ->method('getTitle')
+      ->willReturn('shaken not stirred');
+
+    $node_storage = $this->getMock(EntityStorageInterface::class);
+    $node_storage->expects($this->any())
+      ->method('load')
+      ->willReturn($node);
+    $entity_manager = $this->getMock(EntityManagerInterface::class);
+    $entity_manager->expects($this->any())
+      ->method('getStorage')
+      ->willReturn($node_storage);
+
+    $language_manager = $this->getMock(LanguageManagerInterface::class);
+    $language = new Language(['langcode' => 'en']);
+    $language_manager->expects($this->any())
+      ->method('getCurrentLanguage')
+      ->will($this->returnValue($language));
+
+    $container = new ContainerBuilder();
+    $container->set('entity.manager', $entity_manager);
+    $container->set('language_manager', $language_manager);
+    \Drupal::setContainer($container);
+  }
+
+  /**
+   * Creates and sets up the container to be used in tests.
+   */
+  protected function createTermMocks() {
+    $term = $this->getMockBuilder('\Drupal\taxonomy\Entity\Term')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $term->expects($this->any())
+      ->method('getName')
+      ->willReturn('Burrowing owl');
+
+    $term_storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface');
+    $term_storage->expects($this->any())
+      ->method('load')
+      ->willReturn($term);
+    $entity_manager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $entity_manager->expects($this->any())
+      ->method('getStorage')
+      ->willReturn($term_storage);
+
+    $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
+    $language = new Language(['langcode' => 'en']);
+    $language_manager->expects($this->any())
+      ->method('getCurrentLanguage')
+      ->will($this->returnValue($language));
+
+    $container = new ContainerBuilder();
+    $container->set('entity.manager', $entity_manager);
+    $container->set('language_manager', $language_manager);
+    \Drupal::setContainer($container);
+  }
+
+  /**
+   * Tests configuration.
+   */
+  public function testConfiguration() {
+    $config = $this->processor->defaultConfiguration();
+    $this->assertEquals([], $config);
+  }
+
+}
diff --git a/tests/src/Unit/Plugin/processor/TranslateTaxonomyProcessorTest.php b/tests/src/Unit/Plugin/processor/TranslateTaxonomyProcessorTest.php
deleted file mode 100644
index 4cf8b62..0000000
--- a/tests/src/Unit/Plugin/processor/TranslateTaxonomyProcessorTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-namespace Drupal\Tests\facets\Unit\Plugin\processor;
-
-use Drupal\Core\Language\Language;
-use Drupal\facets\Entity\Facet;
-use Drupal\facets\Plugin\facets\processor\TranslateTaxonomyProcessor;
-use Drupal\facets\Result\Result;
-use Drupal\Tests\UnitTestCase;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-
-/**
- * Unit test for processor.
- *
- * @group facets
- */
-class TranslateTaxonomyProcessorTest extends UnitTestCase {
-
-  /**
-   * The processor to be tested.
-   *
-   * @var \Drupal\facets\processor\SortProcessorInterface
-   */
-  protected $processor;
-
-  /**
-   * Creates a new processor object for use in the tests.
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->processor = new TranslateTaxonomyProcessor([], 'translate_taxonomy', []);
-
-    $this->createMocks();
-  }
-
-  /**
-   * Tests that results were correctly changed.
-   */
-  public function testResultsChanged() {
-    /** @var \Drupal\facets\Result\ResultInterface[] $original_results */
-    $original_results = [
-      new Result(1, 1, 5),
-    ];
-
-    $facet = new Facet([], 'facets_facet');
-    $facet->setResults($original_results);
-
-    $expected_results = [
-      ['tid' => 1, 'name' => 'Burrowing owl'],
-    ];
-
-    foreach ($expected_results as $key => $expected) {
-      $this->assertEquals($expected['tid'], $original_results[$key]->getRawValue());
-      $this->assertEquals($expected['tid'], $original_results[$key]->getDisplayValue());
-    }
-
-    $filtered_results = $this->processor->build($facet, $original_results);
-
-    foreach ($expected_results as $key => $expected) {
-      $this->assertEquals($expected['tid'], $filtered_results[$key]->getRawValue());
-      $this->assertEquals($expected['name'], $filtered_results[$key]->getDisplayValue());
-    }
-  }
-
-  /**
-   * Creates and sets up the container to be used in tests.
-   */
-  protected function createMocks() {
-    $term = $this->getMockBuilder('\Drupal\taxonomy\Entity\Term')
-      ->disableOriginalConstructor()
-      ->getMock();
-    $term->expects($this->any())
-      ->method('getName')
-      ->willReturn('Burrowing owl');
-
-    $term_storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface');
-    $term_storage->expects($this->any())
-      ->method('load')
-      ->willReturn($term);
-    $entity_manager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
-    $entity_manager->expects($this->any())
-      ->method('getStorage')
-      ->willReturn($term_storage);
-
-    $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
-    $language = new Language(['langcode' => 'en']);
-    $language_manager->expects($this->any())
-      ->method('getCurrentLanguage')
-      ->will($this->returnValue($language));
-
-    $container = new ContainerBuilder();
-    $container->set('entity.manager', $entity_manager);
-    $container->set('language_manager', $language_manager);
-    \Drupal::setContainer($container);
-  }
-
-  /**
-   * Tests configuration.
-   */
-  public function testConfiguration() {
-    $config = $this->processor->defaultConfiguration();
-    $this->assertEquals([], $config);
-  }
-
-}
