diff --git a/app/controllers/localizations.php b/app/controllers/localizations.php
deleted file mode 100644
index 72a0a6a63cb098f1e470e88c454b91c4384f82c3..0000000000000000000000000000000000000000
--- a/app/controllers/localizations.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-# Lifter010: TODO
-/*
- * Copyright (C) 2010 - Marcus Lunzenauer <mlunzena@uos.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- */
-
-
-/**
- * TODO
- */
-class LocalizationsController extends Trails_Controller {
-
-    /**
-     * Callback function being called before an action is executed. If this
-     * function does not return FALSE, the action will be called, otherwise
-     * an error will be generated and processing will be aborted. If this function
-     * already #rendered or #redirected, further processing of the action is
-     * withheld.
-     *
-     * @param string  Name of the action to perform.
-     * @param array   An array of arguments to the action.
-     *
-     * @return bool
-     */
-    public function before_filter(&$action, &$args)
-    {
-        require_once 'lib/language.inc.php';
-
-        // substitute dashes with underscores, remove things like .UTF-8
-        $args = (array) strtr(current(explode('.', $action)), "-", "_");
-
-        // invalid language?
-        if (!isset($GLOBALS['INSTALLED_LANGUAGES'][$action])) {
-            $action = "not_acceptable";
-        } else {
-            $action = "show";
-        }
-    }
-
-
-    function show_action($language = NULL)
-    {
-        $this->set_content_type('application/javascript; charset=UTF-8');
-
-        $modified = filemtime(dirname(__FILE__) . '/../views/localizations/show.php');
-        $this->response->add_header('Last-Modified', date("r", $modified));
-
-        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
-            if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) === $modified) {
-                $this->set_status(304, "Not modified.");
-                $this->render_nothing();
-                return;
-            }
-        }
-
-        $this->language = $language;
-        setLocaleEnv($language, "studip");
-
-        // make this instance available to the view to use
-        // the helper methods
-        $this->plugin = $this;
-    }
-
-
-    function not_acceptable_action($language = NULL)
-    {
-        $this->set_status(406);
-        $this->set_content_type('application/json; charset=UTF-8');
-        $languages = array_keys($GLOBALS['INSTALLED_LANGUAGES']);
-        $this->render_text(json_encode($languages));
-    }
-}
diff --git a/app/controllers/messages.php b/app/controllers/messages.php
index a5c789574ee51ea2c68ea58ab830d4845a2a9046..2ec5d324242f1764066b2e99d114618b89fc285d 100644
--- a/app/controllers/messages.php
+++ b/app/controllers/messages.php
@@ -936,8 +936,10 @@ class MessagesController extends AuthenticatedController {
             '#',
             Icon::create('trash'),
             [
-                'onclick' => "return STUDIP.Dialog.confirm('Wirklich %s Nachricht(en) löschen?'.toLocaleString().replace('%s',
-        jQuery('#bulk tbody :checked').length), function() { jQuery('#bulk').submit(); }) "
+                'onclick' => sprintf(
+                    'return STUDIP.Dialog.confirm("%s".replace("%%s", $("#bulk tbody :checked").length), function() { $("#bulk").submit(); })',
+                    _('Wirklich %s Nachricht(en) löschen?')
+                )
             ]
         );
 
diff --git a/app/views/admin/autoinsert/manual.php b/app/views/admin/autoinsert/manual.php
index d233ed697e581c3fb20cc3c72e0b818b6351d08c..612f56155828c804cca356c350570963b2d420d5 100644
--- a/app/views/admin/autoinsert/manual.php
+++ b/app/views/admin/autoinsert/manual.php
@@ -148,12 +148,10 @@
                     function (json) {
                         var result = "";
                         if (!json || json.error) {
-                            result = "Fehler".toLocaleString() + ": ";
-                            result += json.error
-                                ? json.error.toLocaleString()
-                                : "Fehler bei der Ãœbertragung".toLocaleString();
+                            result = '<?= _('Fehler') ?>: ';
+                            result += json.error || '<?= _('Fehler bei der Ãœbertragung') ?>';
                         } else {
-                            result = "Gefundene Nutzer".toLocaleString() + ": ";
+                            result = '<?= _('Gefundene Nutzer') ?>: ';
                             result += "<strong>" + json.users + "</strong>";
                         }
                         $('#autoinsert_count').html(result);
@@ -162,7 +160,7 @@
                 event.preventDefault();
             });
             $('input[name^=remove_filter]').click(function (event) {
-                return confirm("Wollen Sie diesen Filter wirklich entfernen?".toLocaleString());
+                return confirm('<?= _('Wollen Sie diesen Filter wirklich entfernen?') ?>');
             });
         });
     </script>
diff --git a/app/views/localizations/show.php b/app/views/localizations/show.php
deleted file mode 100644
index bc3adb08d57d65677938cf6a2b53bbfd635c55b1..0000000000000000000000000000000000000000
--- a/app/views/localizations/show.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-$translations = array(
-    // app/controllers/messages.php
-    'Wirklich %s Nachrichten löschen?' => _('Wirklich %s Nachrichten löschen?'),
-    ', [\'id\' => $this->user]))
-                        . \' Nachrichten endgültig gelöscht.' => _(', [\'id\' => $this->user]))
-                        . \' Nachrichten endgültig gelöscht.'),
-    ', [\'id\' => $this->user]))
-                        . \' Nachrichten endgütlig gelöscht.' => _(', [\'id\' => $this->user]))
-                        . \' Nachrichten endgütlig gelöscht.'),
-
-    // app/views/admin/autoinsert/manual.php
-    'Fehler' => _('Fehler'),
-    'Fehler bei der Ãœbertragung' => _('Fehler bei der Ãœbertragung'),
-    'Gefundene Nutzer' => _('Gefundene Nutzer'),
-    'Wollen Sie diesen Filter wirklich entfernen?' => _('Wollen Sie diesen Filter wirklich entfernen?'),
-
-    // public/assets/javascripts/ckeditor/plugins/studip-quote/plugin.js
-    'Zitat einfügen' => _('Zitat einfügen'),
-    'Zitat teilen' => _('Zitat teilen'),
-    'Zitat löschen' => _('Zitat löschen'),
-    '%s hat geschrieben:' => _('%s hat geschrieben:'),
-
-    // public/plugins_packages/core/Forum/javascript/forum.js
-    'Wenn Sie die Seite verlassen, gehen ihre Änderungen verloren!' => _('Wenn Sie die Seite verlassen, gehen ihre Änderungen verloren!'),
-    'Sind sie sicher, dass Sie diese Kategorie entfernen möchten? ' => _('Sind sie sicher, dass Sie diese Kategorie entfernen möchten? '),
-    'Alle Bereiche werden dann nach "Allgemein" verschoben!' => _('Alle Bereiche werden dann nach "Allgemein" verschoben!'),
-    'Sind sie sicher, dass Sie diesen Bereich löschen möchten? ' => _('Sind sie sicher, dass Sie diesen Bereich löschen möchten? '),
-    'Es werden auch alle Beiträge in diesem Bereich gelöscht!' => _('Es werden auch alle Beiträge in diesem Bereich gelöscht!'),
-    'Sind sie sicher, dass Sie ihren bisherigen Beitrag verwerfen wollen?' => _('Sind sie sicher, dass Sie ihren bisherigen Beitrag verwerfen wollen?'),
-    'Anonym' => _('Anonym'),
-    'Die Senderin/der Sender dieser Nachricht möchte Sie auf den folgenden Beitrag aufmerksam machen. ' => _('Die Senderin/der Sender dieser Nachricht möchte Sie auf den folgenden Beitrag aufmerksam machen. '),
-    'Link zum Beitrag: ' => _('Link zum Beitrag: '),
-    'Beitrag verschieben' => _('Beitrag verschieben'),
-    'Thema schließen' => _('Thema schließen'),
-    'Thema öffnen' => _('Thema öffnen'),
-    'Hervorhebung aufheben' => _('Hervorhebung aufheben'),
-    'Thema hervorheben' => _('Thema hervorheben'),
-
-);
-
-?>
-<?= json_encode($translations) ?>
\ No newline at end of file
diff --git a/lib/include/html_head.inc.php b/lib/include/html_head.inc.php
index 2991ba7797b582a04318fa288eb83c68e98681bc..f93878e41421c15dac5e0310174012db50378fae 100644
--- a/lib/include/html_head.inc.php
+++ b/lib/include/html_head.inc.php
@@ -57,10 +57,6 @@ $getInstalledLanguages = function () {
             wysiwyg_enabled: <?= json_encode((bool) Config::get()->WYSIWYG) ?>
         }
     </script>
-<? if ($_SESSION['_language'] !== 'de_DE'): ?>
-    <link rel="localization" hreflang="<?= htmlReady(strtr($_SESSION['_language'], '_', '-')) ?>"
-          href="<?= URLHelper::getScriptLink('dispatch.php/localizations/' . $_SESSION['_language']) ?>" type="application/vnd.oftn.l10n+json">
-<? endif ?>
 
     <?= PageLayout::getHeadElements() ?>
 
diff --git a/templates/layouts/base.php b/templates/layouts/base.php
index 6fde8c93ccc6b6b6563b5dbbcb58cfd3d2368fbf..3395c7206b47012ac25770e43e9624b990b66098 100644
--- a/templates/layouts/base.php
+++ b/templates/layouts/base.php
@@ -86,10 +86,6 @@ $getInstalledLanguages = function () {
             server_timestamp: <?= time() ?>
         }
     </script>
-<? if ($_SESSION['_language'] !== 'de_DE'): ?>
-    <link rel="localization" hreflang="<?= htmlReady(strtr($_SESSION['_language'], '_', '-')) ?>"
-          href="<?= URLHelper::getScriptLink('dispatch.php/localizations/' . $_SESSION['_language']) ?>" type="application/vnd.oftn.l10n+json">
-<? endif ?>
 
     <?= PageLayout::getHeadElements() ?>