diff --git a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
index ec5cb822ac25af5293471816a15dce180540e60d..33c13cf6e2411dd0021d29f2523a10aa4f2c9ec8 100644
--- a/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
+++ b/module/VuFind/src/VuFind/I18n/Translator/TranslatorAwareTrait.php
@@ -89,16 +89,23 @@ trait TranslatorAwareTrait
     /**
      * Translate a string
      *
-     * @param string $str    String to translate
-     * @param array  $tokens Tokens to inject into the translated string
+     * @param string $str     String to translate
+     * @param array  $tokens  Tokens to inject into the translated string
+     * @param string $default Default value to use if no translation is found (null
+     * for no default).
      *
      * @return string
      */
-    public function translate($str, $tokens = array())
+    public function translate($str, $tokens = array(), $default = null)
     {
         $msg = null === $this->translator
             ? $str : $this->translator->translate($str);
 
+        // Did the translation fail to change anything?  If so, use default:
+        if (null !== $default && $msg == $str) {
+            $msg = $default;
+        }
+
         // Do we need to perform substitutions?
         if (!empty($tokens)) {
             $in = $out = array();
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Translate.php b/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
index fc67e39da7d2626bdd3b7c013026bf48358c12f7..6df6ff82ef5caf3e0b583df9e6857764258559c7 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Translate.php
@@ -26,8 +26,6 @@
  * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
  */
 namespace VuFind\View\Helper\Root;
-use Zend\I18n\Exception\RuntimeException,
-    Zend\I18n\View\Helper\AbstractTranslatorHelper;
 
 /**
  * Translate view helper
@@ -38,8 +36,11 @@ use Zend\I18n\Exception\RuntimeException,
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     http://vufind.org/wiki/vufind2:developer_manual Wiki
  */
-class Translate extends AbstractTranslatorHelper
+class Translate extends \Zend\View\Helper\AbstractHelper
+    implements \VuFind\I18n\Translator\TranslatorAwareInterface
 {
+    use \VuFind\I18n\Translator\TranslatorAwareTrait;
+
     /**
      * Translate a string
      *
@@ -52,33 +53,6 @@ class Translate extends AbstractTranslatorHelper
      */
     public function __invoke($str, $tokens = array(), $default = null)
     {
-        try {
-            $translator = $this->getTranslator();
-            if (!is_object($translator)) {
-                throw new RuntimeException();
-            }
-            $msg = $translator->translate($str);
-        } catch (RuntimeException $e) {
-            // If we get called before the translator is set up, it will throw an
-            // exception, but we should still try to display some text!
-            $msg = $str;
-        }
-
-        // Did the translation fail to change anything?  If so, use default:
-        if (!is_null($default) && $msg == $str) {
-            $msg = $default;
-        }
-
-        // Do we need to perform substitutions?
-        if (!empty($tokens)) {
-            $in = $out = array();
-            foreach ($tokens as $key => $value) {
-                $in[] = $key;
-                $out[] = $value;
-            }
-            $msg = str_replace($in, $out, $msg);
-        }
-
-        return $msg;
+        return $this->translate($str, $tokens, $default);
     }
 }
\ No newline at end of file