diff --git a/src/Plugin/Filter/FilterOnomasticon.php b/src/Plugin/Filter/FilterOnomasticon.php
index 9c2c588..d3e5bf7 100644
--- a/src/Plugin/Filter/FilterOnomasticon.php
+++ b/src/Plugin/Filter/FilterOnomasticon.php
@@ -7,6 +7,7 @@ use Drupal\filter\Plugin\FilterBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\taxonomy\Entity\Vocabulary;
 use Drupal\taxonomy\Entity\Term;
+use Drupal\Core\Language\LanguageInterface;
 use Masterminds\HTML5;
 
 /**
@@ -242,7 +243,9 @@ class FilterOnomasticon extends FilterBase {
 
     // Get all glossary terms.
     // Note: this only retrieves basic term data.
-    $terms = $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($this->settings['onomasticon_vocabulary']);
+    $terms = \Drupal::entityTypeManager()
+      ->getStorage('taxonomy_term')
+      ->loadTree($this->settings['onomasticon_vocabulary'], 0 , NULL, true);
 
     // Prepare tag parts for insertion.
     $ins_before = $ins_between = $ins_after = '';
@@ -263,23 +266,31 @@ class FilterOnomasticon extends FilterBase {
     // Cycle through terms and search for occurrence.
     $marker = '###';
     $replacements = array();
+    $language = \Drupal::languageManager()
+      ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
+      ->getId();
+
+    /** @var Term $term */
     foreach ($terms as $term) {
-      $term_name = $term->name;
+      if ($term->hasTranslation($language)) {
+          $term = $term->getTranslation($language);;
+      }
+      $term_name = $term->label();
       // Get position of term in text independent of case.
       $pos = strpos(strtolower($text), strtolower($term_name));
-      if ($pos !== false) {
-        // Set the correct cased needle.
-        $needle = substr($text, $pos, strlen($term_name));
-        $description = Term::load($term->tid)->get('description')->value;
-        if ($implement == 'attr_title') {
+      if ($pos === false) {
+          continue;
+      }
+      // Set the correct cased needle.
+      $needle = substr($text, $pos, strlen($term_name));
+      $description = $term->getDescription();
+      if ($implement == 'attr_title') {
           $description = strip_tags($description);
-        }
-        $replace = $ins_before . (($order == 1) ? $needle : $description) . $ins_between . (($order == 2) ? $needle : $description) . $ins_after;
-        $placeholder = $marker . $term->tid . $marker;
-        $replacements[$placeholder] = $replace;
-        //$text = substr_replace($text, $replace, $pos, strlen($needle));
-        $text = preg_replace("/\b" . $needle . "\b/", $placeholder, $text, 1);
       }
+      $replace = $ins_before . (($order == 1) ? $needle : $description) . $ins_between . (($order == 2) ? $needle : $description) . $ins_after;
+      $placeholder = $marker . $term->id() . $marker;
+      $replacements[$placeholder] = $replace;
+      $text = preg_replace("/\b" . $needle . "\b/", $placeholder, $text, 1);
     }
     foreach ($replacements as $placeholder => $replacement) {
       $text = str_replace($placeholder, $replacement, $text);
