diff --git a/.gitignore b/.gitignore
index e06d9263de8b4d0dc7b2a482925c619a35d843b8..dffc66b4d51ad227838b39529211c867d8ebc6b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ Homestead.yaml
 .env
 .orig
 .vscode
+langfiles.zip
 # The Files created by Gulp in the build process
 /public/build
 /public/js/lib.js
diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php
index 80d3fecf88b3b33425ac08835c6c0d8e3ca33f11..a7b3c710c97f1e6992d8de00da4d05d0f98ba3ee 100644
--- a/app/Http/Controllers/LanguageController.php
+++ b/app/Http/Controllers/LanguageController.php
@@ -6,19 +6,26 @@ use Illuminate\Http\Request;
 use App\Models\LanguageObject;
 use RecursiveDirectoryIterator;
 use RecursiveIteratorIterator;
+use ZipArchive;
 
 class LanguageController extends Controller
 {
+
+    public function __construct() 
+    {
+       $this->languageFilePath = resource_path()."/lang/";
+       $this->languages = array('de','en','fr','es','nd');
+    }
+
     public function createOverview(Request $request)
     {
-        $languageFilePath = resource_path() . "/lang/";
-        $files            = scandir($languageFilePath);
+        $languageFolders  = scandir($this->languageFilePath);
         $dirs             = [];
-        foreach ($files as $file) {
-            if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
-                $dirs[] = $file;
-            }
 
+        foreach ($languageFolders as $folder) {
+            if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
+                $dirs[] = $folder;
+            }
         }
         # Im Array "$dirs" haben wir nun alle Verzeichnisse mit dem entsprechenden Sprachkürzel
         # Alle von uns bislang unterstützen Sprachen sind hier eingetragen.
@@ -26,7 +33,7 @@ class LanguageController extends Controller
         $sum       = [];
         foreach ($dirs as $dir) {
             # Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
-            $di                           = new RecursiveDirectoryIterator($languageFilePath . $dir);
+            $di                           = new RecursiveDirectoryIterator($this->languageFilePath . $dir);
             $langTexts[$dir]["textCount"] = 0;
             $langTexts[$dir]["fileCount"] = 0;
             foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
@@ -37,9 +44,7 @@ class LanguageController extends Controller
                         $sum = array_merge($sum, $this->getValues([$key => $value], basename($filename)));
                         $langTexts[$dir]["textCount"] += count($this->getValues([$key => $value]));
                     }
-
                 }
-
             }
         }
         $deComplete = $langTexts["de"]["textCount"] === count($sum) ? true : false;
@@ -52,17 +57,17 @@ class LanguageController extends Controller
 
     public function createEditPage($from, $to, $exclude = "", $email = "")
     {
-        $languageFilePath = resource_path() . "/lang/";
-        $files            = scandir($languageFilePath);
+        $languageFolders  = scandir($this->languageFilePath);
         $dirs             = [];
-        foreach ($files as $file) {
-            if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
-                $dirs[$file] = $file;
-            }
 
+        foreach ($languageFolders as $folder) {
+            if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
+                $dirs[$folder] = $folder;
+            }
         }
+
         # Abbruchbedingungen:
-        if ($from === "" || $to === "" || ($from !== "de" && $from !== "all") || ($from === "all" && $to !== "de") && !array_has($dirs, $to)) {
+        if (!in_array($to, $this->languages) || $from === "" || $to === "" || ($from !== "de" && $from !== "all") || ($from === "all" && $to !== "de") && !array_has($dirs, $to)) {
             return redirect(url('languages'));
         }
 
@@ -77,7 +82,7 @@ class LanguageController extends Controller
             }
 
             # Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
-            $di              = new RecursiveDirectoryIterator($languageFilePath . $dir);
+            $di              = new RecursiveDirectoryIterator($this->languageFilePath . $dir);
             $langTexts[$dir] = 0;
             foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
                 if (!$this->endsWith($filename, ".")) {
@@ -89,32 +94,20 @@ class LanguageController extends Controller
                     }
                     $filePath[basename($filename)] = preg_replace("/lang\/.*?\//si", "lang/$to/", substr($filename, strpos($filename, "lang")));
                 }
-
             }
         }
 
         $langs = [];
         $fn    = "";
         $t     = [];
-        $ex    = ['files' => [], 'new' => 0];
-        if ($exclude !== "") {
-            try {
-                $ex = unserialize(base64_decode($exclude));
-            } catch (ErrorException $e) {
-                $ex = ['files' => [], 'new' => 0];
-            }
-        }
+        $ex = $this->decodeExcludedFiles($exclude);
 
         foreach ($texts as $filename => $text) {
-            $has = false;
             foreach ($ex['files'] as $file) {
                 if ($file === $filename) {
-                    $has = true;
+                    continue 2;
                 }
             }
-            if ($has) {
-                continue;
-            }
             while ($this->hasToMuchDimensions($text)) {
                 $text = $this->deMultidimensionalizeArray($text);
             }
@@ -124,15 +117,10 @@ class LanguageController extends Controller
                     continue;
                 }
 
-                $complete = true;
                 foreach ($languages as $lang => $value) {
                     if ($lang !== $to) {
                         $langs = array_add($langs, $lang, $lang);
                     }
-                    if (!isset($languages[$to]) && isset($languages[$lang])) {
-                        $complete = false;
-                    }
-
                 }
                 if (!isset($languages[$to])) {
                     $fn = $filePath[$filename];
@@ -143,7 +131,6 @@ class LanguageController extends Controller
         }
         $t = $this->htmlEscape($t, $to);
         $t = $this->createHints($t, $to);
-
         return view('languages.edit')
             ->with('texts', $t)             //Array mit vorhandenen Ãœbersetzungen der Datei $fn in beiden Sprachen
             ->with('filename', $fn)         //Pfad zur angezeigten Datei
@@ -158,30 +145,22 @@ class LanguageController extends Controller
 
     public function createSynopticEditPage(Request $request, $exclude = "") 
     {
-        $languageFilePath = resource_path() . "/lang/";
-        $languageFolders  = scandir($languageFilePath); 
-        #Enthält zu jeder Sprache ein Objekt mit allen Daten
+        $languageFolders  = scandir($this->languageFilePath); 
+        # Enthält zu jeder Sprache ein Objekt mit allen Daten
         $languageObjects  = [];
-        $to = [];
+        $to = []; # Alle vorhandenen Sprachen
 
-        #Dekodieren ausgeschlossener Dateien anhand des URL-Parameters
-        $ex    = ['files' => [], 'new' => 0];
-        if ($exclude !== "") {
-            try {
-                $ex = unserialize(base64_decode($exclude));
-            } catch (\ErrorException $e) {
-                $ex = ['files' => [], 'new' => 0];
-            }
-        }
+        # Dekodieren ausgeschlossener Dateien anhand des URL-Parameters
+        $ex = $this->decodeExcludedFiles($exclude);
 
-        #Instanziiere LanguageObject
+        # Instanziiere LanguageObject
         foreach ($languageFolders as $folder) {
-            if (is_dir($languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
-                $languageObjects[$folder] = new LanguageObject($folder, $languageFilePath.$folder);
+            if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") {
+                $languageObjects[$folder] = new LanguageObject($folder, $this->languageFilePath.$folder);
             }
         }
 
-        #Speichere Daten in LanguageObject, überspringe ausgeschlossene Dateien
+        # Speichere Daten in LanguageObject, überspringe ausgeschlossene Dateien
         foreach ($languageObjects as $folder => $languageObject) {
             $to[] = $folder;
             $di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($languageObject->filePath));
@@ -202,7 +181,7 @@ class LanguageController extends Controller
 
         $fn = "";
 
-        #Wähle die erste, unbearbeitete Datei aus
+        # Wähle die erste, unbearbeitete Datei aus
         foreach($languageObjects as $folder => $languageObject) {
             foreach($languageObject->stringMap as $languageFileName => $languageFile) {
                 $fn = $languageFileName;
@@ -210,13 +189,9 @@ class LanguageController extends Controller
             }
         }
 
-        if($fn === "") {
-            //Alles bearbeitet -> zeige entsprechende Nachricht
-        }
-
         $snippets = [];
 
-        #Speichere den Inhalt der ausgewählten Datei in allen Sprachen in $snippets ab
+        # Speichere den Inhalt der ausgewählten Datei in allen Sprachen in $snippets ab
         foreach($languageObjects as $folder => $languageObject) {
             foreach($languageObject->stringMap as $languageFileName => $languageFile) {
                 if($languageFileName === $fn) {
@@ -228,7 +203,7 @@ class LanguageController extends Controller
             }
         }
 
-        #Fülle $snippets auf mit leeren Einträgen für übrige Sprachen
+        # Fülle $snippets auf mit leeren Einträgen für übrige Sprachen
         foreach($to as $t) {
             foreach($snippets as $key => $langArray) {
                 if(!isset($langArray[$t])) {
@@ -238,9 +213,9 @@ class LanguageController extends Controller
         }
 
         return view('languages.synoptic')
-            ->with('to', $to)           #Alle vorhandenen Sprachen
-            ->with('texts', $snippets)         #Array mit Sprachsnippets
-            ->with('filename', $fn)     #Name der Datei
+            ->with('to', $to)           # Alle vorhandenen Sprachen
+            ->with('texts', $snippets)         # Array mit Sprachsnippets
+            ->with('filename', $fn)     # Name der Datei
             ->with('title', trans('titles.languages.edit'));
     }
 
@@ -258,6 +233,124 @@ class LanguageController extends Controller
         return $t;
     }
 
+    public function processSynopticPageInput(Request $request, $exclude = "") {
+
+        $filename = $request->input('filename');
+
+        # Identifizieren des gedrückten Buttons
+        if(isset($request['nextpage'])) {
+
+            # Leite weiter zur nächsten Seite
+            $ex = [];
+
+            if ($exclude !== "") {
+                try {
+                    $ex = unserialize(base64_decode($exclude));
+                } catch (\ErrorException $e) {
+                    $ex = [];
+                }
+
+                if (!isset($ex["files"])) {
+                    $ex["files"] = [];
+                }
+            }
+            if (!isset($ex["new"])) {
+                $ex["new"] = 0;
+            }
+            $ex['files'][] = basename($filename);
+            $ex = base64_encode(serialize($ex));
+
+            return redirect(url('synoptic', ['exclude' => $ex]));
+
+        } elseif(isset($request['download'])) {
+        # Andernfalls auslesen, zippen und herunterladen der veränderten Dateien 
+         
+            $data = [];
+            $new  = 0;
+            $editedFiles = [];
+
+            foreach ($request->all() as $key => $value) {
+
+                if ($key === "filename" || $value === "") {
+                    continue;
+                }
+
+                $key = base64_decode($key);
+
+                # Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
+                $langdir = $this->extractLanguage($key);
+                $filepath = "lang/".$langdir."/".$filename;
+     
+                if (strpos($key, "_new_") === 0 && $value !== "" || MailController::isEdited($this->processKey($key), $value, $filepath)) {
+                    $new++;
+                    $editedFiles[$langdir] = $filepath;
+                } 
+            }     
+
+            # Erneute Iteration über Request, damit Dateien mitsamt vorherigen Einträgen abgespeichert werden 
+            foreach($request->all() as $key => $value) {
+
+                if ($key === "filename" || $value === "") {
+                    continue;
+                }
+
+                $key = base64_decode($key);
+
+                # Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
+                $langdir = $this->extractLanguage($key);
+
+                # Ãœberspringe Datei, falls diese nicht bearbeitet worden ist
+                if(!isset($editedFiles[$langdir])) {
+                    continue;
+                }
+
+                # Key kuerzen, sodass er nur den eigentlichen Keynamen enthält
+                $key = $this->processKey($key);
+                
+                if (!strpos($key, "#")) {
+                    $data[$langdir][$key] = $value;
+                # Aufdröseln von 2D-Arrays
+                } else {
+                    $ref = &$data;
+                    do {
+                        $ref = &$ref[$langdir][substr($key, 0, strpos($key, "#"))];
+                        $key = substr($key, strpos($key, "#") + 1);
+                    } while (strpos($key, "#"));
+                    $ref = &$ref[$key];
+                    $ref = $value;
+                }
+            }
+
+            if(file_exists("langfiles.zip"))
+                unlink("langfiles.zip");
+
+            $zip = new ZipArchive();
+
+            if (empty($data) || $zip->open("langfiles.zip", ZipArchive::CREATE) !== TRUE) {
+                return redirect(url('synoptic', ['exclude' => $exclude]));
+            } 
+                
+            try{
+            # Erstelle Ausgabedateien
+                foreach($data as $lang => $entries) {
+                    $output = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+                    $output = preg_replace("/\{/si", "[", $output);
+                    $output = preg_replace("/\}/si", "]", $output);
+                    $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
+                    $output = "<?php\n\nreturn $output;\n";
+                    $zip->addEmptyDir($lang);
+                    $zip->addFromString($lang."/".$filename, $output);
+                }
+
+            $zip->close();
+
+            return response()->download("langfiles.zip", $filename.".zip");
+                    } catch(ErrorException $e) {
+                echo("Failed to write ".$filename);
+                }
+        }
+    }
+
     private function createHints($t, $to)
     {
         foreach ($t as $key => $langTexts) {
@@ -278,6 +371,21 @@ class LanguageController extends Controller
         return $t;
     }
 
+    private function decodeExcludedFiles($exclude)
+    {
+        $ex = ['files' => [], 'new' => 0];
+
+        if ($exclude !== "") {
+            try {
+                $ex = unserialize(base64_decode($exclude));
+            } catch (ErrorException $e) {
+                $ex = ['files' => [], 'new' => 0];
+            }
+        }
+
+        return $ex;
+    }
+
     private function getValues($values, $prefix = "")
     {
         $return = [];
@@ -324,7 +432,6 @@ class LanguageController extends Controller
                     if (is_array($val)) {
                         $isArray = true;
                     }
-
                 }
             } else {
                 $tmp[$key] = $value;
@@ -359,4 +466,27 @@ class LanguageController extends Controller
         // search forward starting from end minus needle length characters
         return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false);
     }
+
+    private function extractLanguage($key) 
+    {   
+        # Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "de"
+        preg_match("/^(?:_new_)?([^_]*)/", $key, $matches);
+        foreach($matches as $dir) {
+            if(strlen($dir) == 2)
+                return $dir;
+            }
+    }
+
+    private function processKey($key) 
+    {   
+        $key = trim($key);
+        # Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "redirect"
+        preg_match("/^(?:_new_)?(?:[^_]*)_(\w*.?\w*#?.?\w*)/", $key, $matches);
+        foreach($matches as $processedKey) {
+            if(strpos($processedKey, "_") === FALSE) {
+                return $processedKey;
+            }
+        }
+        return $key;
+    }
 }
diff --git a/app/Http/Controllers/MailController.php b/app/Http/Controllers/MailController.php
index 5b80d7e5c9adcb47e1d7768e44cc554d2e9eadf3..55ca74ea64dc8aa4955cfef242d08a5a251eaaeb 100644
--- a/app/Http/Controllers/MailController.php
+++ b/app/Http/Controllers/MailController.php
@@ -9,7 +9,6 @@ use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use LaravelLocalization;
 use Mail;
-use ZipArchive;
 
 class MailController extends Controller
 {
@@ -119,7 +118,7 @@ class MailController extends Controller
     }
 
     #Ueberprueft ob ein bereits vorhandener Eintrag bearbeitet worden ist
-    private function isEdited($k, $v, $filename)
+    public static function isEdited($k, $v, $filename)
     {
         try {
             $temp = include resource_path()."/".$filename;
@@ -135,29 +134,6 @@ class MailController extends Controller
         return false;
     }
 
-    private function extractLanguage($key) 
-    {   
-        #Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "de"
-        preg_match("/^(?:_new_)?([^_]*)/", $key, $matches);
-        foreach($matches as $dir) {
-            if(strlen($dir) == 2)
-                return $dir;
-            }
-    }
-
-    private function processKey($key) 
-    {   
-        $key = trim($key);
-        #Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "redirect"
-        preg_match("/^(?:_new_)?(?:[^_]*)_(\w*.?\w*#?.?\w*)/", $key, $matches);
-        foreach($matches as $processedKey) {
-            if(strpos($processedKey, "_") === FALSE) {
-                return $processedKey;
-            }
-        }
-        return $key;
-    }
-
     public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email ="")
     {
         $filename = $request->input('filename');
@@ -243,130 +219,4 @@ class MailController extends Controller
         return redirect(url('languages/edit', ['from' => $from, 'to' => $to, 'exclude' => $ex, 'email' => $emailAddress]));
     }
 
-
-
-    public function processSynopticPageInput(Request $request, $exclude = "") {
-
-        $filename = $request->input('filename');
-
-        #Identifizieren des gedrückten Buttons
-        if(isset($request['nextpage'])) {
-            #Leite weiter zur nächsten Seite
-            $ex = [];
-
-            if ($exclude !== "") {
-                try {
-                    $ex = unserialize(base64_decode($exclude));
-                } catch (\ErrorException $e) {
-                    $ex = [];
-                }
-
-                if (!isset($ex["files"])) {
-                    $ex["files"] = [];
-                }
-            }
-            if (!isset($ex["new"])) {
-                $ex["new"] = 0;
-            }
-            $ex['files'][] = basename($filename);
-            $ex = base64_encode(serialize($ex));
-
-            return redirect(url('synoptic', ['exclude' => $ex]));
-        }
-
-        #Andernfalls auslesen, zippen und herunterladen der veränderten Dateien 
-        $data = [];
-        $new  = 0;
-        $editedFiles = [];
-
-        foreach ($request->all() as $key => $value) {
-
-            if ($key === "filename" || $value === "") {
-                continue;
-            }
-
-            $key = base64_decode($key);
-
-            #Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
-            $langdir = $this->extractLanguage($key);
-            $filepath = "lang/".$langdir."/".$filename;
- 
-            if (strpos($key, "_new_") === 0 && $value !== "" || $this->isEdited($this->processKey($key), $value, $filepath)) {
-                $new++;
-                $editedFiles[$langdir] = $filepath;
-            } 
-        }     
-
-        #Erneute Iteration über Request, damit Dateien mitsamt vorherigen Einträgen abgespeichert werden 
-        foreach($request->all() as $key => $value) {
-
-            if ($key === "filename" || $value === "") {
-                continue;
-            }
-
-            $key = base64_decode($key);
-
-            #Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel)
-            $langdir = $this->extractLanguage($key);
-
-            #Ãœberspringe Datei, falls diese nicht bearbeitet worden ist
-            if(!isset($editedFiles[$langdir])) {
-                continue;
-            }
-
-            #Key kuerzen, sodass er nur den eigentlichen Keynamen enthält
-            $key = $this->processKey($key);
-            
-            if (!strpos($key, "#")) {
-                $data[$langdir][$key] = $value;
-            #Aufdröseln von 2D-Arrays
-            } else {
-                $ref = &$data;
-                do {
-                    $ref = &$ref[$langdir][substr($key, 0, strpos($key, "#"))];
-                    $key = substr($key, strpos($key, "#") + 1);
-                } while (strpos($key, "#"));
-                $ref = &$ref[$key];
-                $ref = $value;
-            }
-        }
-
-        if(empty($data)) {
-            return redirect(url('synoptic', ['exclude' => $exclude]));
-        }
-
-
-        if(file_exists("langfiles.zip"))
-            unlink("langfiles.zip");
-
-        $zip = new ZipArchive();
-
-        if ($zip->open("langfiles.zip", ZipArchive::CREATE) !== TRUE) {  
-            exit("Cannot open ".$filename);
-        } 
-            
-        try{
-        #Erstelle Ausgabedateien
-            foreach($data as $lang => $entries) {
-                $output = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
-                $output = preg_replace("/\{/si", "[", $output);
-                $output = preg_replace("/\}/si", "]", $output);
-                $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
-                $output = "<?php\n\nreturn $output;\n";
-                $zip->addEmptyDir($lang);
-                $zip->addFromString($lang."/".$filename, $output);
-            }
-        } catch(ErrorException $e) {
-            exit("Failed to write ".$filename);
-        }
-
-        $zip->close();
-
-        return response()->download("langfiles.zip", $filename.".zip");
-
-
-    }
-
-
-
 }
diff --git a/app/Models/LanguageObject.php b/app/Models/LanguageObject.php
index 971e905cdd16eddf2cb5969981a5e02c1d77f220..bd8c6e49a76bb8764e920eed16e50dfde21c4dfb 100644
--- a/app/Models/LanguageObject.php
+++ b/app/Models/LanguageObject.php
@@ -30,7 +30,7 @@ class LanguageObject
  	   }
 	}
 
-
+    #Helferfunktion für saveData
     private function deMultiDimensionalize($filename, $key, $value)
     {
     	foreach($value as $key2 => $value2) {
diff --git a/public/langfiles.zip b/public/langfiles.zip
deleted file mode 100644
index 601229310be12f9f35e1c77f29b1b62ab90afe68..0000000000000000000000000000000000000000
Binary files a/public/langfiles.zip and /dev/null differ
diff --git a/resources/views/languages/synoptic.blade.php b/resources/views/languages/synoptic.blade.php
index 234a057546f6f69839b0de5e0ca9209acd196183..70b2bedefe710e4fc2f058b7fb1a4ea190aee4b7 100644
--- a/resources/views/languages/synoptic.blade.php
+++ b/resources/views/languages/synoptic.blade.php
@@ -3,7 +3,7 @@
 @section('title', $title )
 
 @section('content')
-	<h1>Ãœbersicht</h1>
+	<h1>{{ trans('languages.header') }}</h1>
 <?php /*
 	<!--
 	<div class="progress">
diff --git a/routes/web.php b/routes/web.php
index 42174d2b71f1274e3a181221f229e3a69dd48eeb..bb0da00dc7d97a71db198a7cb21f4e1bee666407 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -159,7 +159,7 @@ Route::group(
         });
         Route::get('languages', 'LanguageController@createOverview');
         Route::get('synoptic/{exclude?}', 'LanguageController@createSynopticEditPage');
-        Route::post('synoptic/{exclude?}', 'MailController@processSynopticPageInput');
+        Route::post('synoptic/{exclude?}', 'LanguageController@processSynopticPageInput');
         Route::get('languages/edit/{from}/{to}/{exclude?}/{email?}', 'LanguageController@createEditPage');
         Route::post('languages/edit/{from}/{to}/{exclude?}/{email?}', 'MailController@sendLanguageFile');
         Route::get('berlin', 'StartpageController@berlin');
diff --git a/synoptic b/synoptic
deleted file mode 100644
index fc24c0f08a5aa3888a7eef5685658a336557c2aa..0000000000000000000000000000000000000000
--- a/synoptic
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-<!DOCTYPE html>
-<html lang="de">
-	<head>
-		<meta charset="utf-8" />
-		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-		<title>Sprachdateien bearbeiten - MetaGer</title>
-		<meta name="description" content="Sicher suchen und finden unter Wahrung der Privatsphäre. Das digitale Wissen der Welt muss ohne Bevormundung durch Staaten oder Konzerne frei zugänglich sein und bleiben." />
-		<meta name="keywords" content="Internetsuche, privatsphäre, privacy, Suchmaschine, Datenschutz, Anonproxy, anonym suchen, Bildersuche, Suchmaschine, anonym, MetaGer, metager, metager.de" />
-		<meta name="page-topic" content="Dienstleistung" />
-		<meta name="robots" content="index,follow" />
-		<meta name="revisit-after" content="7 days" />
-		<meta name="audience" content="all" />
-		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
-		<meta rel="icon" type="image/x-icon" href="/favicon.ico" />
-		<meta rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
-		<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE" />
-		<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE" />
-		<link rel="search" type="application/opensearchdescription+xml" title="MetaGer: Sicher suchen &amp; finden, Privatsphäre schützen" href="http://localhost:8000/plugins/YTowOnt9/opensearch.xml">
-		<link type="text/css" rel="stylesheet" href="/css/themes/default.css" />
-		<link id="theme" type="text/css" rel="stylesheet" href="/css/theme.css.php" />
-			</head>
-	<body>
-		<header>
-				<a class="navbar-brand" href="http://localhost:8000/">
-		<div class="logo">
-			<h1>MetaGer</h1>
-		</div>
-	</a>
-		<nav id="navbar-static-pages" class="navbar-resultpage">
-
-
-			<ul id="metager-static-nav-list" class="list-inline pull-right">
-				<li id="toggle-nav-hide" class="hidden">
-					<a class="metager-navbar-toggle pull-right" href="#" data-original-title="" title="">
-									<span class="sr-only">Navigation anzeigen</span>
-									<i class="fa fa-bars" aria-hidden="true"></i>
-					</a>
-					<div class="clearfix"></div>
-				</li>
-				<li id="toggle-nav-show">
-					<a class="metager-navbar-toggle pull-right" href="#metager-static-nav-list" data-original-title="" title="">
-									<span class="sr-only">Navigation anzeigen</span>
-									<i class="fa fa-bars" aria-hidden="true"></i>
-					</a>
-					<div class="clearfix"></div>
-				</li>
-				<li  class="active"  >
-					<a href="http://localhost:8000/"  tabindex="200" id="navigationSuche">Suche</a>
-				</li>
-				<li  class="metager-dropdown"  >
-					<a class="metager-dropdown-toggle" role="button" aria-expanded="false" tabindex="201">Fördern
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://localhost:8000/spende" tabindex="202">Spenden</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/beitritt" tabindex="203">Beitrittsformular SUMA-EV</a>
-									</li>
-									<li>
-										<a href="https://www.boost-project.com/de/shops?charity_id=1129&amp;tag=bl" tabindex="204">Einkaufen bei MetaGer-Fördershops</a>
-									</li>
-								</ul>
-							</li>
-														<li id="gutscheine" class="metager-dropdown"  >
-								<a href="https://metager.de/gutscheine/">Gutscheine</a>
-								<a class="metager-dropdown-toggle" data-role="button" aria-expanded="false" tabindex="205"><span class="caret"></span></span>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="https://metager.de/gutscheine/congstar/" tabindex="206" >Congstar Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/check24/" tabindex="207" >Check24 Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/handyflash/" tabindex="208" >Handyflash Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/groupon/" tabindex="209" >Groupon Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/medion/" tabindex="210" >Medion Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/navabi/" tabindex="211" >Navabi Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/netcologne/" tabindex="212" >Netcologne Gutschein</a>
-									</li>
-									<li>
-										<a href="https://metager.de/gutscheine/teufel/" tabindex="213" >Teufel Gutschein</a>
-									</li>
-									<li role="separator" class="divider"></li>
-									<li>
-										<a href="https://metager.de/gutscheine/alle-gutscheine/" tabindex="214" >Alle Gutscheine</a>
-									</li>
-								</ul>
-							</li>
-														<li  >
-								<a href="http://localhost:8000/datenschutz" id="navigationPrivacy" tabindex="215">Datenschutz</a>
-							</li>
-							<li  class="metager-dropdown"  >
-								<a class="metager-dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" id="navigationHilfe" tabindex="216">Hilfe
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://localhost:8000/hilfe" tabindex="217">Hilfe</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/faq" tabindex="218">FAQ</a>
-									</li>
-								</ul>
-							</li>
-							<li  class="metager-dropdown"  >
-								<a class="metager-dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" id="navigationKontakt" tabindex="219">Kontakt
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://forum.suma-ev.de/" tabindex="220">Forum</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/kontakt" tabindex="221">Kontakt</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/team" tabindex="222">Team</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/about" tabindex="223">Ãœber uns</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/impressum" tabindex="224">Impressum</a>
-									</li>
-								</ul>
-							</li>
-							<li  class="metager-dropdown"  >
-								<a class="metager-dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" tabindex="225">Dienste
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-									<li>
-										<a href="http://localhost:8000/widget" tabindex="226">Widget</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/zitat-suche" tabindex="227">Zitatsuche</a>
-									</li>
-									<li>
-										<a href="https://metager.de/klassik/asso/" tabindex="228">Assoziator</a>
-									</li>
-									<li>
-										<a href="http://code.metager.de/" tabindex="229">Code-Suche</a>
-									</li>
-									<li>
-										<a href="http://localhost:8000/app" tabindex="230">MetaGer App</a>
-									</li>
-									<li>
-										<a href="https://metager.to/" tabindex="231">URL-Verkürzer</a>
-									</li>
-									<li>
-										<a href="https://maps.metager.de" target="_blank" tabindex="232">Maps.MetaGer.de</a>
-									</li>
-									<li>
-										<a href="https://gitlab.metager3.de/open-source/MetaGer" tabindex="233">MetaGer Quellcode</a>
-									</li>
-									<li>
-										<a href="http://forum.suma-ev.de/viewtopic.php?f=3&amp;t=43" tabindex="234">TOR-Hidden-Service</a>
-									</li>
-								</ul>
-							</li>
-							<li class="metager-dropdown">
-								<a class="metager-dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" id="navigationSprache" tabindex="235">Sprache (Deutsch)
-								<span class="caret"></span></a>
-								<ul class="metager-dropdown-menu">
-																			<li>
-											<a rel="alternate" hreflang="de" href="http://localhost:8000/synoptic" tabindex="235">Deutsch</a>
-										</li>
-																			<li>
-											<a rel="alternate" hreflang="en" href="http://localhost:8000/en/synoptic" tabindex="236">English</a>
-										</li>
-																			<li>
-											<a rel="alternate" hreflang="es" href="http://localhost:8000/es/synoptic" tabindex="237">español</a>
-										</li>
-																			<li>
-											<a rel="alternate" hreflang="fr" href="http://localhost:8000/fr/synoptic" tabindex="238">français</a>
-										</li>
-																	</ul>
-							</li>
-			</ul>
-		</nav>
-
-		</header>
-		<div class="wrapper">
-			<main class="mg-panel container">
-																					<h1>Ãœbersicht</h1>
-	<h2>results.php</h2>
-	<form id="submit" method="POST">
-		<input type="hidden" name="filename" value="results.php" />
-	</form>
-	<table class="table">
-		<thead>
-			<tr>
-				<th>#ID</th>
-									<th>de</th>
-									<th>en</th>
-									<th>es</th>
-									<th>fr</th>
-									<th>nd</th>
-								
-			</tr>
-		</thead>
- <tbody> 
-							<tr> <!--Key -->
-				<td class="name language-name">redirect</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfcmVkaXJlY3Q=">(mit redirect) </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fcmVkaXJlY3Q=">(with redirect) </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfcmVkaXJlY3Q=">(con desviar) </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl9yZWRpcmVjdA=="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF9yZWRpcmVjdA=="></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">weiter</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfd2VpdGVy">Weitersuchen </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fd2VpdGVy">more </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfd2VpdGVy">Continuar </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl93ZWl0ZXI="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF93ZWl0ZXI="></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">zurueck</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfenVydWVjaw==">Zurück </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fenVydWVjaw==">back </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfenVydWVjaw==">Atrás </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl96dXJ1ZWNr"></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF96dXJ1ZWNr"></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">filter</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfZmlsdGVy">Die Suchergebnisse wurden gefiltert: &lt;strong&gt;[:filter]&lt;/strong&gt;. &lt;a href=&quot;:link&quot; target=&quot;_blank&quot;&gt;Filter abschalten.&lt;/a&gt; </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fZmlsdGVy">Results are filtered by language: &lt;strong&gt;[:filter]&lt;/strong&gt;. &lt;a href=&quot;:link&quot; target=&quot;_blank&quot;&gt;Disable this filter.&lt;/a&gt; </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfZmlsdGVy">Resultados filtraban:  &lt;strong&gt;[:filter]&lt;/strong&gt;. &lt;a href=&quot;:link&quot; target=&quot;_blank&quot;&gt;Desactivar filtro.&lt;/a&gt; </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl9maWx0ZXI="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF9maWx0ZXI="></textarea>
-						</td>
-													</tr>
-							<tr> <!--Key -->
-				<td class="name language-name">filter.default</td>
-															<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZGVfZmlsdGVyLmRlZmF1bHQ=">Sie erhalten die Benutzeroberfläche in &lt;strong&gt;:langName&lt;/strong&gt;, aber Ergebnisse in &lt;strong&gt;ALLEN&lt;/strong&gt; Sprachen. Für ausschließlich deutschsprachige Ergebnisse können Sie unter &lt;a href=&quot;/settings&quot; target=&quot;_blank&quot;&gt;anpassen&lt;/a&gt; die &quot;Sprache auswählen&quot;. </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZW5fZmlsdGVyLmRlZmF1bHQ=">The interface language is set to &lt;strong&gt;:langName&lt;/strong&gt; but you will receive results in &lt;strong&gt;ALL&lt;/strong&gt; languages. If you want to restrict the results to a specific language, please click  &lt;a href=&quot;/en/settings&quot; target=&quot;_blank&quot;&gt;customize&lt;/a&gt; and choose your desired language there. </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="ZXNfZmlsdGVyLmRlZmF1bHQ=">Recibís el interfaz del usuario en &lt;strong&gt;:langName&lt;/strong&gt;, pero resultados en &lt;strong&gt;TODOS&lt;/strong&gt; idiomas. Usan  &lt;a href=&quot;/settings&quot; target=&quot;_blank&quot;&gt;adjustar&lt;/a&gt; para seleccionar una idioma para los resultados. </textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19mcl9maWx0ZXIuZGVmYXVsdA=="></textarea>
-						</td>
-																				<td>
-							<textarea class="language-text-area" rows="1" cols="20" form="submit" name="X25ld19uZF9maWx0ZXIuZGVmYXVsdA=="></textarea>
-						</td>
-													</tr>
-					</tbody>  
-
-	</table>
-<!--
-	<p>Sobald du mit deinen Texten zufrieden bist, kannst du uns diese mit einem Klick auf folgenden Knopf automatisch zusenden. Wenn es mehr fehlende Texte in der angegebenen Sprache gibt, wird dein Browser dich danach direkt zu diesen leiten.</p>
-	<p><b>Hinweis</b>: Die übermittelten Texte werden von diesem Tool erst erkannt, sobald diese von uns gesichtet und eingefügt wurden. Wenn du deine Arbeit sichern möchtest um diese zu einem späteren Zeitpunkt fortzusetzen (auch wenn wir deine bisherige Arbeit noch nicht übernehmen konnten), so reicht es vollkommen, den aktuellen Link aus deiner Browserleiste zu kopieren und zu einem späteren Zeitpunkt wieder aufzurufen.</p>
-	<p><b>Achtung</b>: Mit der Einsendung stimmst du einer <a href="https://gitlab.metager3.de/open-source/MetaGer" target="_blank" rel="noopener">Veröffentlichung</a> deiner Texte unter AGPL-v3-Lizenz durch uns zu. Falls du namentlich genannt werden möchtest, teile uns dies bitte in einer email an <a href="mailto:office@suma-ev.de">office@suma-ev.de</a> mit.</p>
-	<p><b>E-Mail-Adresse für Rückfragen</b> (optional):</p>
--->
-	<button class="btn btn-success" type="submit" form="submit">Dateien herunterladen</button>
-	<button class="btn btn-success" type="submit" form="submit">Nächste Seite</button>
-	<script type="text/javascript" src="/js/lib.js"></script>
-	<script type="text/javascript" src="/build/js/editLanguage-7a1cbfb2ba.js"></script>
-			</main>
-						<footer class="noprint">
-				<ul class="list-inline hidden-xs">
-					<li>
-						<a href="https://www.suma-ev.de/"  >
-						<img src="/img/suma_ev_logo-m1-greyscale.png" alt="SUMA-EV Logo"></a>
-					</li>
-					<li id="info">
-						<a href="http://localhost:8000/kontakt">Kontakt</a> - <a href="http://localhost:8000/impressum">Impressum</a>
-						MetaGer wird entwickelt und betrieben vom <a href="https://www.suma-ev.de/">SUMA-EV - Verein für freien Wissenszugang.</a>
-					</li>
-					<li>
-						<a href="https://www.uni-hannover.de/"  >
-						<img src="/img/luh_metager.png" alt="LUH Logo"></a>
-					</li>
-				</ul>
-			</footer>
-			<img src="http://localhost:8000/img/piwik.png?site=http%3A%2F%2Flocalhost%3A8000%2Fsynoptic" class="hidden" />
-		</div>
-	</body>
-</html>