diff --git a/composer.lock b/composer.lock
index 0b06bc4bf615ae56391c0e3f820a8a6f189c89b8..9e0b6f35b073c2fa04b6f9d899f7d5dc906ef43b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4466,33 +4466,33 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.13.0",
+            "version": "1.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
+                "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
-                "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
+                "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.2",
-                "php": "^7.2 || ~8.0, <8.1",
+                "php": "^7.2 || ~8.0, <8.2",
                 "phpdocumentor/reflection-docblock": "^5.2",
                 "sebastian/comparator": "^3.0 || ^4.0",
                 "sebastian/recursion-context": "^3.0 || ^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^6.0",
+                "phpspec/phpspec": "^6.0 || ^7.0",
                 "phpunit/phpunit": "^8.0 || ^9.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.11.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
@@ -4527,9 +4527,9 @@
             ],
             "support": {
                 "issues": "https://github.com/phpspec/prophecy/issues",
-                "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
+                "source": "https://github.com/phpspec/prophecy/tree/1.14.0"
             },
-            "time": "2021-03-17T13:42:18+00:00"
+            "time": "2021-09-10T09:02:12+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
diff --git a/lib/SimpleSAML/Locale/Translate.php b/lib/SimpleSAML/Locale/Translate.php
index 6fb59cc9a6004b93637198a2059ff44ebc154269..eaa58c1230364c134eda0254e8f241ecac86d3ed 100644
--- a/lib/SimpleSAML/Locale/Translate.php
+++ b/lib/SimpleSAML/Locale/Translate.php
@@ -25,27 +25,6 @@ class Translate
      */
     private Configuration $configuration;
 
-    /**
-     * Associative array of languages.
-     *
-     * @var array
-     */
-    private array $langtext = [];
-
-    /**
-     * Associative array of dictionaries.
-     *
-     * @var array
-     */
-    private array $dictionaries = [];
-
-    /**
-     * The default dictionary.
-     *
-     * @var string|null
-     */
-    private ?string $defaultDictionary = null;
-
     /**
      * The language object we'll use internally.
      *
@@ -79,70 +58,6 @@ class Translate
     }
 
 
-    /**
-     * This method retrieves a dictionary with the name given.
-     *
-     * @param string $name The name of the dictionary, as the filename in the dictionary directory, without the
-     * '.php' ending.
-     *
-     * @return array An associative array with the dictionary.
-     */
-    private function getDictionary(string $name): array
-    {
-        if (!array_key_exists($name, $this->dictionaries)) {
-            $sepPos = strpos($name, ':');
-            if ($sepPos !== false) {
-                $module = substr($name, 0, $sepPos);
-                $fileName = substr($name, $sepPos + 1);
-                $dictDir = Module::getModuleDir($module) . '/dictionaries/';
-            } else {
-                $dictDir = $this->configuration->getPathValue('dictionarydir', 'dictionaries/') ?: 'dictionaries/';
-                $fileName = $name;
-            }
-
-            $this->dictionaries[$name] = $this->readDictionaryFile($dictDir . $fileName);
-        }
-
-        return $this->dictionaries[$name];
-    }
-
-
-    /**
-     * This method retrieves a tag as an array with language => string mappings.
-     *
-     * @param string $tag The tag name. The tag name can also be on the form '{<dictionary>:<tag>}', to retrieve a tag
-     * from the specific dictionary.
-     *
-     * @return array|null An associative array with language => string mappings, or null if the tag wasn't found.
-     */
-    public function getTag(string $tag): ?array
-    {
-        // first check translations loaded by the includeInlineTranslation and includeLanguageFile methods
-        if (array_key_exists($tag, $this->langtext)) {
-            return $this->langtext[$tag];
-        }
-
-        // check whether we should use the default dictionary or a dictionary specified in the tag
-        if (substr($tag, 0, 1) === '{' && preg_match('/^{((?:\w+:)?\w+?):(.*)}$/D', $tag, $matches)) {
-            $dictionary = $matches[1];
-            $tag = $matches[2];
-        } else {
-            $dictionary = $this->defaultDictionary;
-            if ($dictionary === null) {
-                // we don't have any dictionary to load the tag from
-                return null;
-            }
-        }
-
-        $dictionary = $this->getDictionary($dictionary);
-        if (!array_key_exists($tag, $dictionary)) {
-            return null;
-        }
-
-        return $dictionary[$tag];
-    }
-
-
     /**
      * Mark a string for translation without translating it.
      *
@@ -156,139 +71,6 @@ class Translate
     }
 
 
-    /**
-     * Include a translation inline instead of putting translations in dictionaries. This function is recommended to be
-     * used ONLY for variable data, or when the translation is already provided by an external source, as a database
-     * or in metadata.
-     *
-     * @param string $tag The tag that has a translation
-     * @param mixed $translation The translation array
-     *
-     * @throws \Exception If $translation is neither a string nor an array.
-     */
-    public function includeInlineTranslation(string $tag, $translation): void
-    {
-        if (is_string($translation)) {
-            $translation = ['en' => $translation];
-        } elseif (!is_array($translation)) {
-            throw new \Exception(
-                "Inline translation should be string or array. Is " . gettype($translation) . " now!"
-            );
-        }
-
-        Logger::debug('Translate: Adding inline language translation for tag [' . $tag . ']');
-        $this->langtext[$tag] = $translation;
-    }
-
-
-    /**
-     * Include a language file from the dictionaries directory.
-     *
-     * @param string $file File name of dictionary to include
-     * @param \SimpleSAML\Configuration|null $otherConfig Optionally provide a different configuration object than the
-     * one provided in the constructor to be used to find the directory of the dictionary. This allows to combine
-     * dictionaries inside the SimpleSAMLphp main code distribution together with external dictionaries. Defaults to
-     * null.
-     */
-    public function includeLanguageFile(string $file, Configuration $otherConfig = null): void
-    {
-        if (!empty($otherConfig)) {
-            $filebase = $otherConfig->getPathValue('dictionarydir', 'dictionaries/');
-        } else {
-            $filebase = $this->configuration->getPathValue('dictionarydir', 'dictionaries/');
-        }
-        $filebase = $filebase ?: 'dictionaries/';
-
-        $lang = $this->readDictionaryFile($filebase . $file);
-        Logger::debug('Translate: Merging language array. Loading [' . $file . ']');
-        $this->langtext = array_merge($this->langtext, $lang);
-    }
-
-
-    /**
-     * Read a dictionary file in JSON format.
-     *
-     * @param string $filename The absolute path to the dictionary file, minus the .definition.json ending.
-     *
-     * @return array An array holding all the translations in the file.
-     */
-    private function readDictionaryJSON(string $filename): array
-    {
-        $definitionFile = $filename . '.definition.json';
-        Assert::true(file_exists($definitionFile));
-
-        $fileContent = file_get_contents($definitionFile);
-        $lang = json_decode($fileContent, true);
-
-        if (empty($lang)) {
-            Logger::error('Invalid dictionary definition file [' . $definitionFile . ']');
-            return [];
-        }
-
-        $translationFile = $filename . '.translation.json';
-        if (file_exists($translationFile)) {
-            $fileContent = file_get_contents($translationFile);
-            $moreTrans = json_decode($fileContent, true);
-            if (!empty($moreTrans)) {
-                $lang = array_merge_recursive($lang, $moreTrans);
-            }
-        }
-
-        return $lang;
-    }
-
-
-    /**
-     * Read a dictionary file in PHP format.
-     *
-     * @param string $filename The absolute path to the dictionary file.
-     *
-     * @return array An array holding all the translations in the file.
-     */
-    private function readDictionaryPHP(string $filename): array
-    {
-        $phpFile = $filename . '.php';
-        Assert::true(file_exists($phpFile));
-
-        $lang = null;
-        include($phpFile);
-        /** @psalm-var array|null $lang */
-        if (isset($lang)) {
-            return $lang;
-        }
-
-        return [];
-    }
-
-
-    /**
-     * Read a dictionary file.
-     *
-     * @param string $filename The absolute path to the dictionary file.
-     *
-     * @return array An array holding all the translations in the file.
-     */
-    private function readDictionaryFile(string $filename): array
-    {
-        Logger::debug('Translate: Reading dictionary [' . $filename . ']');
-
-        $jsonFile = $filename . '.definition.json';
-        if (file_exists($jsonFile)) {
-            return $this->readDictionaryJSON($filename);
-        }
-
-        $phpFile = $filename . '.php';
-        if (file_exists($phpFile)) {
-            return $this->readDictionaryPHP($filename);
-        }
-
-        Logger::error(
-            $_SERVER['PHP_SELF'] . ' - Translate: Could not find dictionary file at [' . $filename . ']'
-        );
-        return [];
-    }
-
-
     /**
      * Translate a singular text.
      *