diff --git a/modules/translation/application/clicommands/TestCommand.php b/modules/translation/application/clicommands/TestCommand.php
new file mode 100644
index 000000000..3e395286e
--- /dev/null
+++ b/modules/translation/application/clicommands/TestCommand.php
@@ -0,0 +1,132 @@
+<?php
+/* Icinga Web 2 | (c) 2017 Icinga Development Team | GPLv2+ */
+
+namespace Icinga\Module\Translation\Clicommands;
+
+use Icinga\Date\DateFormatter;
+use Icinga\Module\Translation\Cli\ArrayToTextTableHelper;
+use Icinga\Module\Translation\Cli\TranslationCommand;
+use Icinga\Util\Translator;
+
+/**
+ * Timestamp test helper
+ *
+ *
+ */
+class TestCommand extends TranslationCommand
+{
+    protected $locales = array();
+
+    /**
+     * Get translation examples for DateFormatter
+     *
+     * To help you check if the values got translated correctly
+     *
+     * USAGE:
+     *
+     *   icingacli translation test dateformatter <locale>
+     *
+     * EXAMPLES:
+     *
+     *   icingacli translation test dateformatter de_DE
+     *   icingacli translation test dateformatter fr_FR
+     */
+    public function dateformatterAction()
+    {
+        $time = time();
+
+        /** @uses DateFormatter::timeAgo */
+        $this->printTable($this->getMultiTranslated(
+            'Time Ago',
+            array('Icinga\Date\DateFormatter', 'timeAgo'),
+            array(
+                "15 sec" => $time - 15,
+                "62 sec" => $time - 62,
+                "10 min" => $time - 600,
+                "1h"     => $time - 1 * 3600,
+                "3h"     => $time - 3 * 3600,
+                "25h"    => $time - 25 * 3600,
+                "31d"    => $time - 31 * 24 * 3600,
+            )
+        ));
+
+        $this->printTable($this->getMultiTranslated(
+            'Time Since',
+            array('Icinga\Date\DateFormatter', 'timeSince'),
+            array(
+                "15 sec" => $time - 15,
+                "62 sec" => $time - 62,
+                "10 min" => $time - 600,
+                "1h"     => $time - 1 * 3600,
+                "3h"     => $time - 3 * 3600,
+                "25h"    => $time - 25 * 3600,
+                "31d"    => $time - 31 * 24 * 3600,
+            )
+        ));
+
+        $this->printTable($this->getMultiTranslated(
+            'Time Until',
+            array('Icinga\Date\DateFormatter', 'timeUntil'),
+            array(
+                "15 sec" => $time + 15,
+                "62 sec" => $time + 62,
+                "10 min" => $time + 600,
+                "1h"     => $time + 1 * 3600,
+                "3h"     => $time + 3 * 3600,
+                "25h"    => $time + 25 * 3600,
+                "31d"    => $time + 31 * 24 * 3600,
+            )
+        ));
+    }
+
+    public function defaultAction()
+    {
+        $this->dateformatterAction();
+    }
+
+    public function init()
+    {
+        foreach ($this->params->getAllStandalone() as $l) {
+            $this->locales[] = $l;
+        }
+        // TODO: get from to environment by default?
+    }
+
+    protected function callTranslated($callback, $arguments, $locale = 'C')
+    {
+        Translator::setupLocale($locale);
+        return call_user_func_array($callback, $arguments);
+    }
+
+    protected function getMultiTranslated($name, $callback, $arguments, $locales = null)
+    {
+        if ($locales === null) {
+            $locales = $this->locales;
+        }
+        array_unshift($locales, 'C');
+
+        $rows = array();
+
+        foreach ($arguments as $k => $args) {
+            $row = array($name => $k);
+
+            if (! is_array($args)) {
+                $args = array($args);
+            }
+            foreach ($locales as $locale) {
+                $row[$locale] = $this->callTranslated($callback, $args, $locale);
+            }
+            $rows[] = $row;
+        }
+
+        return $rows;
+    }
+
+    protected function printTable($rows)
+    {
+        $tt = new ArrayToTextTableHelper($rows);
+        $tt->showHeaders(true);
+        $tt->render();
+        echo "\n\n";
+    }
+}
diff --git a/modules/translation/library/Translation/Cli/ArrayToTextTableHelper.php b/modules/translation/library/Translation/Cli/ArrayToTextTableHelper.php
new file mode 100644
index 000000000..f5738e6f6
--- /dev/null
+++ b/modules/translation/library/Translation/Cli/ArrayToTextTableHelper.php
@@ -0,0 +1,233 @@
+<?php
+
+namespace Icinga\Module\Translation\Cli;
+
+/**
+ * Array to Text Table Generation Class
+ *
+ * @author    Tony Landis <tony@tonylandis.com>
+ * @link      http://www.tonylandis.com/
+ * @copyright Copyright (C) 2006-2009 Tony Landis
+ * @license   http://www.opensource.org/licenses/bsd-license.php
+ */
+class ArrayToTextTableHelper
+{
+    /**
+     * @var array The array for processing
+     */
+    protected $rows;
+
+    /**
+     * @var int The column width settings
+     */
+    protected $cs = array();
+
+    /**
+     * @var int The Row lines settings
+     */
+    protected $rs = array();
+
+    /**
+     * @var int The Column index of keys
+     */
+    protected $keys = array();
+
+    /**
+     * @var int Max Column Height (returns)
+     */
+    protected $mH = 2;
+
+    /**
+     * @var int Max Row Width (chars)
+     */
+    protected $mW = 30;
+
+    protected $head = false;
+    protected $pcen = "+";
+    protected $prow = "-";
+    protected $pcol = "|";
+
+
+    /**
+     * Prepare array into textual format
+     *
+     * @param array $rows      The input array
+     * @param bool  $head      Show heading
+     * @param int   $maxWidth  Max Column Height (returns)
+     * @param int   $maxHeight Max Row Width (chars)
+     */
+    public function __construct($rows)
+    {
+        $this->rows =& $rows;
+        $this->cs = array();
+        $this->rs = array();
+
+        if (! $xc = count($this->rows)) {
+            return false;
+        }
+
+        $this->keys = array_keys($this->rows[0]);
+        $columns = count($this->keys);
+
+        for ($x = 0; $x < $xc; $x++) {
+            for ($y = 0; $y < $columns; $y++) {
+                $this->setMax($x, $y, $this->rows[$x][$this->keys[$y]]);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Show the headers using the key values of the array for the titles
+     *
+     * @param bool $bool
+     */
+    public function showHeaders($bool)
+    {
+        if ($bool) {
+            $this->setHeading();
+        }
+    }
+
+    /**
+     * Set the maximum width (number of characters) per column before truncating
+     *
+     * @param int $maxWidth
+     */
+    public function setMaxWidth($maxWidth)
+    {
+        $this->mW = (int) $maxWidth;
+    }
+
+    /**
+     * Set the maximum height (number of lines) per row before truncating
+     *
+     * @param int $maxHeight
+     */
+    public function setMaxHeight($maxHeight)
+    {
+        $this->mH = (int) $maxHeight;
+    }
+
+    /**
+     * Prints the data to a text table
+     *
+     * @param bool $return Set to 'true' to return text rather than printing
+     *
+     * @return mixed
+     */
+    public function render($return = false)
+    {
+        if ($return) {
+            ob_start(null, 0, true);
+        }
+
+        $this->printLine();
+        $this->printHeading();
+
+        $rc = count($this->rows);
+        for ($i = 0; $i < $rc;
+             $i++) {
+            $this->printRow($i);
+        }
+
+        $this->printLine(false);
+
+        if ($return) {
+            $contents = ob_get_contents();
+            ob_end_clean();
+            return $contents;
+        }
+        return null;
+    }
+
+    protected function setHeading()
+    {
+        $data = array();
+        foreach ($this->keys as $colKey => $value) {
+            $this->setMax(false, $colKey, $value);
+            $data[$colKey] = strtoupper($value);
+        }
+        if (! is_array($data)) {
+            return false;
+        }
+        $this->head = $data;
+
+        return $this;
+    }
+
+    protected function printLine($nl = true)
+    {
+        print $this->pcen;
+        foreach ($this->cs as $key => $val) {
+            print $this->prow .
+                str_pad('', $val, $this->prow, STR_PAD_RIGHT) .
+                $this->prow .
+                $this->pcen;
+        }
+        if ($nl) {
+            print "\n";
+        }
+    }
+
+    protected function printHeading()
+    {
+        if (! is_array($this->head)) {
+            return false;
+        }
+
+        print $this->pcol;
+        foreach ($this->cs as $key => $val) {
+            print ' ' .
+                str_pad($this->head[$key], $val, ' ', STR_PAD_BOTH) .
+                ' ' .
+                $this->pcol;
+        }
+
+        print "\n";
+        $this->printLine();
+
+        return $this;
+    }
+
+    protected function printRow($rowKey)
+    {
+        // loop through each line
+        for ($line = 1; $line <= $this->rs[$rowKey]; $line++) {
+            print $this->pcol;
+            for ($colKey = 0; $colKey < count($this->keys); $colKey++) {
+                print " ";
+                print str_pad(
+                    substr($this->rows[$rowKey][$this->keys[$colKey]], ($this->mW * ($line - 1)), $this->mW),
+                    $this->cs[$colKey],
+                    ' ',
+                    STR_PAD_RIGHT
+                );
+                print " " . $this->pcol;
+            }
+            print  "\n";
+        }
+    }
+
+    protected function setMax($rowKey, $colKey, &$colVal)
+    {
+        $w = mb_strlen($colVal);
+        $h = 1;
+        if ($w > $this->mW) {
+            $h = ceil($w % $this->mW);
+            if ($h > $this->mH) {
+                $h = $this->mH;
+            }
+            $w = $this->mW;
+        }
+
+        if (! isset($this->cs[$colKey]) || $this->cs[$colKey] < $w) {
+            $this->cs[$colKey] = $w;
+        }
+
+        if ($rowKey !== false && (! isset($this->rs[$rowKey]) || $this->rs[$rowKey] < $h)) {
+            $this->rs[$rowKey] = $h;
+        }
+    }
+}