Commit 6bffae58 authored by Karl's avatar Karl
Browse files

Konflikte aufgelöst

parents eab314c6 25caff84
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
class LanguageController extends Controller
{
public function createOverview(Request $request)
{
$languageFilePath = resource_path() . "/lang/";
$files = scandir($languageFilePath);
$dirs = [];
foreach ($files as $file) {
if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
$dirs[] = $file;
}
}
# Im Array "$dirs" haben wir nun alle Verzeichnisse mit dem entsprechenden Sprachkürzel
# Alle von uns bislang unterstützen Sprachen sind hier eingetragen.
$langTexts = [];
$sum = [];
foreach ($dirs as $dir) {
# Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
$di = new RecursiveDirectoryIterator($languageFilePath . $dir);
$langTexts[$dir]["textCount"] = 0;
$langTexts[$dir]["fileCount"] = 0;
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
if (!$this->endsWith($filename, ".")) {
$langTexts[$dir]["fileCount"] += 1;
$tmp = include $filename;
foreach ($tmp as $key => $value) {
$sum = array_merge($sum, $this->getValues([$key => $value], basename($filename)));
}
$langTexts[$dir]["textCount"] += count($tmp);
}
}
}
$deComplete = $langTexts["de"]["textCount"] === count($sum) ? true : false;
return view('languages.overview')
->with('title', trans('titles.languages'))
->with('langTexts', $langTexts)
->with('sum', $sum)
->with('deComplete', $deComplete);
}
public function createEditPage($from, $to, $exclude = "")
{
$languageFilePath = resource_path() . "/lang/";
$files = scandir($languageFilePath);
$dirs = [];
foreach ($files as $file) {
if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
$dirs[$file] = $file;
}
}
# Abbruchbedingungen:
if ($from === "" || $to === "" || ($from !== "de" && $from !== "all") || ($from === "all" && $to !== "de") && !array_has($dirs, $to)) {
return redirect(url('languages'));
}
$texts = [];
$langTexts = [];
$sum = [];
$filePath = [];
foreach ($dirs as $dir) {
if ($from !== "all" && $dir !== $to && $dir !== $from) {
continue;
}
# Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
$di = new RecursiveDirectoryIterator($languageFilePath . $dir);
$langTexts[$dir] = 0;
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
if (!$this->endsWith($filename, ".")) {
$tmp = include $filename;
foreach ($tmp as $key => $value) {
$sum = array_merge($sum, $this->getValues([$key => $value], basename($filename)));
$texts[basename($filename)][$key][$dir] = $value;
}
$filePath[basename($filename)] = preg_replace("/lang\/.*?\//si", "lang/$to/", substr($filename, strpos($filename, "lang")));
$langTexts[$dir] += count($tmp);
}
}
}
$langs = [];
$fn = "";
$t = [];
$ex = ['files' => [], 'new' => 0];
if ($exclude !== "") {
try {
$ex = unserialize(base64_decode($exclude));
} catch (\ErrorException $e) {
$ex = ['files' => [], 'new' => 0];
}
}
foreach ($texts as $filename => $text) {
$has = false;
foreach ($ex['files'] as $file) {
if ($file === $filename) {
$has = true;
}
}
if ($has) {
continue;
}
# Hier können wir später die bereits bearbeiteten Dateien ausschließen.
foreach ($text as $textname => $languages) {
foreach ($languages as $lang => $value) {
if ($lang !== $to) {
$langs = array_add($langs, $lang, $lang);
}
}
if (!isset($languages[$to])) {
$fn = $filePath[$filename];
$t = $text;
break;
}
}
}
while ($this->hasToMuchDimensions($t)) {
$t = $this->deMultidimensionalizeArray($t);
}
#die(var_dump($t));
return view('languages.edit')
->with('texts', $t)
->with('filename', $fn)
->with('title', trans('titles.languages.edit'))
->with('langs', $langs)
->with('to', $to)
->with('langTexts', $langTexts)
->with('sum', $sum)
->with('css', 'editLanguage.css')
->with('new', $ex["new"]);
}
private function getValues($values, $prefix = "")
{
$return = [];
if (!is_array($values)) {
return $return;
} else {
foreach ($values as $key => $value) {
if (is_array($value)) {
$return = array_merge($return, $this->getValues($value, $prefix . $key));
} elseif (is_string($value)) {
$return[$prefix . $key] = $value;
}
}
}
return $return;
}
private function hasToMuchDimensions($t)
{
foreach ($t as $key => $value) {
if (is_array($value)) {
foreach ($value as $lang => $val) {
if (is_array($val)) {
return true;
}
}
}
}
return false;
}
private function deMultidimensionalizeArray($t)
{
# Es gibt noch Besonderheiten in den Texten
# Es kann sein, dass statt einem String ein Array aus Strings als Werte existieren.
# Diese müssen aufgelöst werden:
$tmp = [];
foreach ($t as $key => $value) {
$isArray = false;
if (is_array($value)) {
foreach ($value as $lang => $val) {
if (is_array($val)) {
$isArray = true;
}
}
} else {
$tmp[$key] = $value;
continue;
}
if (!$isArray) {
$tmp[$key] = $value;
} else {
$tmp[$key] = "";
foreach ($value as $lang => $val) {
if (is_array($val)) {
foreach ($val as $key2 => $val) {
$tmp["\t" . $key . "#" . $key2][$lang] = $val;
}
}
}
}
}
return $tmp;
}
private function startsWith($haystack, $needle)
{
// search backwards starting from haystack length characters from the end
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false;
}
private function endsWith($haystack, $needle)
{
// search forward starting from end minus needle length characters
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false);
}
}
......@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use LaravelLocalization;
use Mail;
......@@ -119,4 +120,73 @@ class MailController extends Controller
}
}
public function sendLanguageFile(Request $request, $from, $to, $exclude = "")
{
$filename = $request->input('filename');
# Wir erstellen nun zunächst den Inhalt der Datei:
$data = [];
$new = 0;
foreach ($request->all() as $key => $value) {
if ($key === "filename" || $value === "") {
continue;
}
if (strpos($key, "_new_") === 0 && $value !== "") {
$new++;
$key = substr($key, strpos($key, "_new_") + 5);
}
$key = trim($key);
if (!strpos($key, "#")) {
$data[$key] = $value;
} else {
$ref = &$data;
do {
$ref = &$ref[substr($key, 0, strpos($key, "#"))];
$key = substr($key, strpos($key, "#") + 1);
} while (strpos($key, "#"));
$ref = &$ref[$key];
$ref = $value;
}
}
$output = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
$output = preg_replace("/\{/si", "[", $output);
$output = preg_replace("/\}/si", "]", $output);
$output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
$output = "<?php\n\nreturn $output;\n";
$message = "Moin moin,\n\nein Benutzer hat eine Sprachdatei aktualisiert.\nSollten die Texte so in Ordnung sein, ersetzt, oder erstellt die Datei aus dem Anhang in folgendem Pfad:\n$filename\n\nFolgend zusätzlich der Inhalt der Datei:\n\n$output";
Mail::send(['text' => 'kontakt.mail'], ['messageText' => $message], function ($message) use ($output, $filename) {
$message->subject('MetaGer - Sprachdatei');
$message->from('noreply@metager.de');
$message->to('office@suma-ev.de');
$message->attachData($output, basename($filename));
});
# Wir haben nun eine Mail an uns geschickt, welche die entsprechende Datei beinhaltet.
# Nun müssen wir den Nutzer eigentlich nur noch zurück leiten und die Letzte bearbeitete Datei ausschließen:
$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["new"] += $new;
$ex = base64_encode(serialize($ex));
return redirect(url('languages/edit', ['from' => $from, 'to' => $to, 'exclude' => $ex]));
}
}
......@@ -115,15 +115,14 @@ Route::group(
return view('hilfe')
->with('title', trans('titles.hilfe'))
->with('css', 'help.css')
->with('navbarFocus', 'hilfe');
});
->with('navbarFocus', 'hilfe');
});
Route::get('faq', function()
{
return view('faq')
->with('title', trans('titles.faq'))
->with('css', 'help.css')
->with('navbarFocus', 'hilfe');
Route::get('faq', function () {
return view('faq')
->with('title', trans('titles.faq'))
->with('css', 'help.css')
->with('navbarFocus', 'hilfe');
});
Route::get('widget', function () {
......@@ -160,4 +159,13 @@ Route::group(
Route::get('owi', function () {
return redirect('https://metager.de/klassik/en/owi/');
});
Route::get('MG20', function () {
return redirect('https://metager.de/klassik/MG20');
});
Route::get('databund', function () {
return redirect('https://metager.de/klassik/databund');
});
Route::get('languages', 'LanguageController@createOverview');
Route::get('languages/edit/{from}/{to}/{exclude?}', 'LanguageController@createEditPage');
Route::post('languages/edit/{from}/{to}/{exclude?}', 'MailController@sendLanguageFile');
});
......@@ -13,7 +13,7 @@ class Search extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
protected $hash, $host, $port, $name, $getString, $useragent, $fp;
protected $hash, $host, $port, $name, $getString, $useragent, $fp, $additionalHeaders;
protected $buffer_length = 8192;
/**
......@@ -21,14 +21,15 @@ class Search extends Job implements ShouldQueue
*
* @return void
*/
public function __construct($hash, $host, $port, $name, $getString, $useragent)
public function __construct($hash, $host, $port, $name, $getString, $useragent, $additionalHeaders)
{
$this->hash = $hash;
$this->host = $host;
$this->port = $port;
$this->name = $name;
$this->getString = $getString;
$this->useragent = $useragent;
$this->hash = $hash;
$this->host = $host;
$this->port = $port;
$this->name = $name;
$this->getString = $getString;
$this->useragent = $useragent;
$this->additionalHeaders = $additionalHeaders;
}
/**
......@@ -220,6 +221,7 @@ class Search extends Job implements ShouldQueue
$out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$out .= "Accept-Language: de,en-US;q=0.7,en;q=0.3\r\n";
$out .= "Accept-Encoding: gzip, deflate, br\r\n";
$out .= str_replace("$#!#$", "\r\n", $this->additionalHeaders);
$out .= "Connection: keep-alive\r\n\r\n";
# Anfrage senden:
$sent = 0;
......
......@@ -88,6 +88,7 @@ abstract class Searchengine
$this->hash = md5($this->host . $this->getString . $this->port . $this->name);
$this->resultHash = $metager->getHashCode();
$this->canCache = $metager->canCache();
if (!isset($this->additionalHeaders)) {$this->additionalHeaders = "";}
}
abstract public function loadResults($result);
......@@ -111,7 +112,7 @@ abstract class Searchengine
* Sollen diese Parallel verarbeitet werden, muss ein anderer QUEUE_DRIVER verwendet werden.
* siehe auch: https://laravel.com/docs/5.2/queues
*/
$this->dispatch(new Search($this->resultHash, $this->host, $this->port, $this->name, $this->getString, $this->useragent));
$this->dispatch(new Search($this->resultHash, $this->host, $this->port, $this->name, $this->getString, $this->useragent, $this->additionalHeaders));
}
}
......
td.name {
white-space: pre;
}
\ No newline at end of file
* {
}
* {}
h3 {
font-size: 21px;
margin-top: 7px;
margin-bottom: 5px;
}
p {
......@@ -15,24 +13,27 @@ h1 {
margin-bottom: 25px;
}
p {
margin: 20px 0;
}
main {
text-align: left;
}
h2 {
font-size: 23px;
margin-top: 10px;
}
address {
white-space: pre;
}
main ul{
main ul {
list-style-type: disc;
text-align: left;
}
.well-sm {
margin: 10px 0px;
}
h1 + h2 {
margin-top: 0;
}
h2 + h3 {
margin-top: 0;
}
\ No newline at end of file
function copyCode() {
$("#codesnippet").select();
try {
var successful = document.execCommand('copy');
if (successful) {
$('#copyButton').removeClass('btn-default');
$('#copyButton').addClass('btn-success');
} else {
$('#copyButton').removeClass('btn-default');
$('#copyButton').addClass('btn-danger');
}
} catch (err) {
$('#copyButton').removeClass('btn-default');
$('#copyButton').addClass('btn-danger');
}
}
window.onload = function() {
$('#copyButton').bind('click', copyCode);
};
\ No newline at end of file
<?php
return [
'achtung' => 'Achtung, da sich unsere Website in der aktiven Entwicklung befindet, kann es dazu kommen, dass sich immer wieder Änderungen an Aufbau und Funktion der Website ergeben. Wir versuchen stets das FAQ schnellstmöglich den Änderungen entsprechend anzupassen, können jedoch nicht verhindern, dass es zu temporären Unstimmigkeiten in Teilen der Erklärungen kommt.',
'title' => 'MetaGer - FAQ',
'dienste' => 'Kostenlose Dienste',
'dienste' => 'Dienste',
'suchwortassoziator.title' => 'Suchwortassoziator',
'suchwortassoziator.1' => 'Als Hilfe für die Erschließung eines Begriffsumfelds haben wir den <a href="https://metager.de/klassik/asso/" target="_blank">MetaGer-Web-Assoziator</a> entwickelt. Sie finden das Tool unter dem Reiter "Dienste". Gibt man in diesen ein Suchwort ein, welches dem zu untersuchenden Fachgebiet irgendwie nahe kommt, dann wird versucht, typische Fachbegriffe dieses Gebietes aus dem WWW zu extrahieren.',
'suchwortassoziator.1' => 'Als Hilfe für die Erschließung eines Begriffsumfelds haben wir den <a href="https://metager.de/klassik/asso/" target="_blank">MetaGer-Web-Assoziator</a> entwickelt. Sie finden das Tool auch direkt unter dem Reiter "Dienste". Gibt man in diesen ein Suchwort ein, welches dem zu untersuchenden Fachgebiet irgendwie nahe kommt, dann wird versucht, typische Fachbegriffe dieses Gebietes aus dem WWW zu extrahieren.',
'suchwortassoziator.2' => 'Beispiel: Sie möchten mehr über Zeckenbisse und deren Gefahren wissen, aber ihnen fallen die medizinischen Fachbegriffe für Erkrankungen aus diesem Bereich nicht mehr ein. Die Eingabe des Wortes "Zeckenbisse" in den Web-Assoziator liefert dann u.a. die Begriffe "Borreliose" und "fsme".',
'suchwortassoziator.3' => 'Da diese Assoziationsanalyse u.a. aus Web-Dokumenten selber gewonnen wird, ist sie sprachunabhängig; d.h. Sie können bei Eingabe deutscher Wörter Fachbegriffe aus beliebigen Sprachen gewinnen (und umgekehrt). Wenn Ihnen andererseits Assoziationsanalysen auffallen, die mit Hilfe Ihrer Fachkenntnisse besser sein könnten, dann zögern Sie bitte nicht, uns dieses samt Ihrem Verbesserungsvorschlag <a href="https://metager.de/kontakt/" target="_blank">über unser Kontaktformular</a> mitzuteilen.',
......@@ -13,16 +15,16 @@ return [
'widget.1' => 'Hierbei handelt es sich um einen Codegenerator, der es Ihnen ermöglicht, MetaGer in Ihre Webseite einzubinden. Sie können damit dann nach Belieben auf Ihrer eigenen Seite oder im Internet suchen lassen. Bei allen Fragen: <a href="https://metager.de/kontakt/" target="_blank">unser Kontaktformular</a>',
'urlshort.title' => 'URL-Verkürzer',
'urlshort.1' => 'Sie finden den URL-Verkürzer unter "Dienste". Wenn Sie einen extrem langen Link- oder Domainnamen haben, können Sie diesen hier in eine kurze und prägnante Form bringen. Metager sorgt dann zusammen mit Yourls für die Weiterleitung.',
'urlshort.1' => 'Sie finden den <a href="https://metager.to/" target="_blank">URL-Verkürzer</a> auch direkt unter "Dienste". Wenn Sie einen extrem langen Link- oder Domainnamen haben, können Sie diesen hier in eine kurze und prägnante Form bringen. MetaGer sorgt dann zusammen mit Yourls für die Weiterleitung.',
'dienste.kostenlos' => 'Selbstverständlich sind all unsere Dienste kostenlos',
'datenschutz.title' => 'Anonymität und Datensicherheit',
'datenschutz.1' => 'Cookies, Session-IDs und IP-Adressen',
'datenschutz.2' => 'Nichts von alldem wird hier bei MetaGer gespeichert, aufgehoben oder sonst irgendwie verarbeitet. Weil wir diese Thematik für extrem wichtig halten, haben wir auch Möglichkeiten geschaffen, die Ihnen helfen können, hier ein Höchstmaß an Sicherheit zu erreichen: den MetaGer-TOR-Hidden-Service und unseren Proxyserver.',
'datenschutz.3' => 'Genauere Informationen dazu finden Sie unter der Überschrift "Dienste".',
'tor.title' => 'Tor-Hidden-Service',
'tor.1' => 'Bei MetaGer werden schon seit vielen Jahren die IP-Adressen der Nutzer anonymisiert und nicht gespeichert. Nichtsdestotrotz sind diese Adressen auf dem MetaGer-Server sichtbar: wenn MetaGer also einmal kompromittiert sein sollte, dann könnte dieser Angreifer Ihre Adressen mitlesen und speichern. Um dem höchsten Sicherheitsbedürfnis entgegenzukommen, unterhalten wir eine MetaGer-Repräsentanz im Tor-Netzwerk: den MetaGer-TOR-hidden-Service - erreichbar über: <a href="https://metager.de/tor/" target="_blank">https://metager.de/tor/</a>. Für die Benutzung benötigen Sie einen speziellen Browser, den Sie etwa auf <a href="https://www.torproject.org/" target="_blank">https://www.torproject.org/</a> herunter laden können.',
'tor.2' => 'MetaGer erreichen Sie in diesem Browser dann unter: http://b7cxf4dkdsko6ah2.onion/tor/.',
'tor.1' => 'Bei MetaGer werden schon seit vielen Jahren die IP-Adressen der Nutzer anonymisiert und nicht gespeichert. Nichtsdestotrotz sind diese Adressen auf dem MetaGer-Server sichtbar: wenn MetaGer also einmal kompromittiert sein sollte, dann könnte dieser Angreifer Ihre Adressen mitlesen und speichern. Um dem höchsten Sicherheitsbedürfnis entgegenzukommen, unterhalten wir eine MetaGer-Repräsentanz im Tor-Netzwerk: den MetaGer-TOR-hidden-Service - erreichbar über: <a href="https://metager.de/tor/" target="_blank">https://metager.de/tor/</a>. Für die Benutzung benötigen Sie einen speziellen Browser, den Sie etwa auf <a href="https://www.torproject.org/" target="_blank">https://www.torproject.org/</a> herunter laden können (Details siehe: <a href="http://forum.suma-ev.de/viewtopic.php?f=3&t=43" target="_blank">http://forum.suma-ev.de/viewtopic.php?f=3&t=43</a>).',
'tor.2' => 'MetaGer erreichen Sie im Tor-Browser dann unter: http://b7cxf4dkdsko6ah2.onion .',
'proxy.title' => 'MetaGer Proxyserver',
'proxy.1' => 'Um ihn zu verwenden, müssen Sie auf der MetaGer-Ergebnisseite nur auf den Link "anonym öffnen" rechts neben dem Ergebnislink klicken. Dann wird Ihre Anfrage an die Zielwebseite über unseren anonymisierenden Proxy-Server geleitet und Ihre persönlichen Daten bleiben weiterhin völlig geschützt. Wichtig: wenn Sie ab dieser Stelle den Links auf den Seiten folgen, bleiben Sie durch den Proxy geschützt. Sie können aber oben im Adressfeld keine neue Adresse ansteuern. In diesem Fall verlieren Sie den Schutz. Ob Sie noch geschützt sind, sehen Sie ebenfalls im Adressfeld. Es zeigt: https://proxy.suma-ev.de/?url=hier steht die eigentlich Adresse.',
......@@ -48,13 +50,13 @@ return [
'faq.9.h' => 'Wie genau funktioniert das Ranking bei MetaGer?',
'faq.9.b' => 'Dazu machen wir aus nahe liegenden Gründen keine Angaben',
'faq.10.h' => 'Mit meinem XYZ-Browser und dem XYZ-Betriebssystem kann ich MetaGer nicht abfragen. Was tun?',
'faq.10.b' => 'Versuchen Sie bitte zuerst, das aktuelle Plugin zu installieren. Zum Installieren einfach auf den Link direkt unter dem Suchfeld klicken. Dort sollte Ihr Browser schon erkannt worden sein. Wenn Sie dann noch Probleme haben sollten, wenden Sie sich bitte an uns: office@suma-ev.de',
'faq.10.b' => 'Versuchen Sie bitte zuerst, das aktuelle Plugin zu installieren. Zum Installieren einfach auf den Link direkt unter dem Suchfeld klicken. Dort sollte Ihr Browser schon erkannt worden sein. Wenn Sie dann noch Probleme haben sollten, wenden Sie sich bitte an uns: <a href="mailto:office@suma-ev.de" target="_blank">office@suma-ev.de</a>',
'faq.11.h' => 'Wo habt ihr eigentlich all\' die klugen Sprüche eures "Sprücheklopfers" her?',
'faq.11.b' => 'Sie sind aus Quellen im Internet zusammengesucht. Den größten Teil hatte uns netterweise Alexander Hammer zur Verfügung gestellt. Schönen Dank! Nebenbei bemerkt: Wir teilen keineswegs die inhaltliche Meinung, die in jedem Spruch zum Ausdruck kommt! Sprüche sollen und müssen kontroverses darstellen. Unter "anpassen" können Sie sie ausschalten.',
'faq.12.h' => 'Wie kann ich die Anzeige meiner vorherigen Suchen löschen?',
'faq.12.b' => 'Die Suchvorschläge liefert Ihnen Ihr Webbrowser und dort können Sie sie auch ausschalten. Meist geht das über die Chronik.',
'faq.13.h' => 'Wie haltet ihr es eigentlich mit dem Datenschutz, wie lange wird bei euch was gespeichert?',
'faq.13.b.1' => 'Der Schutz persönlicher Daten ist uns so wichtig, dass wir alles, was dem zuwiderlaufen könnte, gar nicht erst machen: es gibt bei uns keine Cookies oder Session-IDs oder irgendetwas, was so etwas ermöglichen würde. Siehe auch: https://metager.de/datenschutz/',
'faq.13.b.1' => 'Der Schutz persönlicher Daten ist uns so wichtig, dass wir alles, was dem zuwiderlaufen könnte, gar nicht erst machen: es gibt bei uns keine Cookies oder Session-IDs oder irgendetwas, was so etwas ermöglichen würde. Siehe auch: <a href="https://metager.de/datenschutz/" target="_blank">https://metager.de/datenschutz/</a>',
'faq.13.b.2' => 'Was es bei jeder Suchmaschine gibt (und wogegen auch wir nichts tun können), das sind die bei den Abfragen mitgesendeten IP-Adressen. Auch dies können personenbezogene Daten sein. Darum speichern wir auch diese Adressen NICHT - und zwar überhaupt nicht, auch nicht tageweise, und schon gar nicht für Jahre. Die IP-Adressen werden bereits während Ihre Suche noch läuft, anonymisiert und in dieser anonymen Form an die von MetaGer abgefragten Suchdienste weitergegeben. Nach unseren Erfahrungen kommt der Betrieb von Suchmaschinen sehr gut OHNE Speicherung von IP-Adressen aus. Was tun wir zusätzlich?',
'faq.13.b.3' => 'Wenn Sie generell (unabhängig von MetaGer) ohne Speicherung Ihrer IP-Adresse im Internet surfen wollen, dann können Sie am einfachsten einen der freien und werbefinanzierten Proxies benutzen, einen kommerziellen anmieten, oder den für Sie kostenlosen MetaGer-Proxy verwenden. Genauere Informationen dazu finden Sie unter der Überschrift "Dienste".',
'faq.13.b.4' => 'Wenn Sie Ihre Anonymität noch weiter absichern wollen, dann können Sie Teilnehmer am Tor-Netzwerk werden. Genauere Informationen dazu finden Sie unter der Überschrift "Dienste".',
......@@ -62,7 +64,7 @@ return [
'faq.14.h' => 'über welche Wege kann eine Zuordnung zu Personen hergestellt werden?',
'faq.14.b' => 'Die Zuordnung kann dann hergestellt werden, wenn sich ein Nutzer bei einem Dienst eines Anbieters (z.B. Google-Mail) persönlich angemeldet hat. Dann wird ein Cookie für diesen Anmelder gesetzt. Bei einer späteren Suche ist dann dieser Anmelder anhand des Cookies identifiziert. Es sein denn: der (schlaue) Anwender löscht den Cookie ;-) Aber die wenigsten tun das. Eine exakte Zuordnung über die IP-Adresse zur Person ist nur mit Hilfe des Providers möglich. Dies wird im Normalfall wahrscheinlich nicht geschehen. Aber es gibt weitere Indizien: auch anhand einer wechselnden IP ist ohne Mithilfe des Providers eine ungefähre geografische Zuordnung möglich. Darüber hinaus sendet der Browser weitere Daten, wie z.B. den User-Agent, dessen genaue Version und Arbeitsumgebung, das Betriebssystem und dessen exakte Version und ggf. Patch-Level. Auch mit diesen Daten ist eine Zuordnung zur Person des Anmelders, wenn dessen Daten durch die Anmeldung zu einem Dienst erst einmal bekannt sind, mit hoher Wahrscheinlichkeit möglich.',
'faq.15.h' => 'Wie ist MetaGer eigentlich entstanden, wie ist die Geschichte von MetaGer?',
'faq.15.b' => 'MetaGer gibt es seit 1996 ... die Einzelheiten der Entstehungsgeschichte kann man hier in einem Interview nachlesen: http://blog.suma-ev.de/node/207.',
'faq.15.b' => 'MetaGer gibt es seit 1996 ... die Einzelheiten der Entstehungsgeschichte kann man hier in einem Interview nachlesen: <a href="http://blog.suma-ev.de/node/207" target="_blank">http://blog.suma-ev.de/node/207</a>.',
'faq.16.h' => 'Darf ich einen Link auf euch setzen? oder Darf ich auf euch verlinken ?',
'faq.16.b' => 'Ja! Sie dürfen 1000-sende von Links auf uns setzen!! Sie dürfen das selbst dann, wenn Sie über manche Dinge des Lebens eine andere Meinung haben als wir, selbst dann, wenn Sie nicht die gleiche Partei wählen oder eine andere Meinung über die einzig richtige Art der Rechtschreibung haben. Sie dürfen Links auf alles von uns setzen, was Sie wollen. Je mehr, je besser! Noch lieber wäre es uns natürlich, wenn Sie (vielleicht im Rahmen der Verbesserung Ihrer Webseiten) unser Widget nutzen würden. Bitte schauen Sie unter dem Punkt "Dienste" nach.',
];
<?php
return [
'achtung' => 'Achtung, da sich unsere Website in der aktiven Entwicklung befindet, kann es dazu kommen, dass sich immer wieder Änderungen an Aufbau und Funktion der Website ergeben. Wir versuchen stets die Hilfe schnellstmöglich den Änderungen entsprechend anzupassen, können jedoch nicht verhindern, dass es zu temporären Unstimmigkeiten in Teilen der Erklärungen kommt.',
'title' => 'MetaGer - Hilfe',
'einstellungen' => 'Einstellungen',
......@@ -21,8 +23,7 @@ return [
'mehrwortsuche.title' => 'Mehrwortsuche',
'mehrwortsuche.1' => 'Bei einer Mehrwortsuche werden als Voreinstellung diejenigen Dokumente gesucht, in denen möglichst alle Worte vorkommen, oder solche, die denen möglichst nahe kommen. Die Suche nach mehreren Begriffen zeigt annähernd gleiche Ergebnisse mit oder ohne Verwendung von Anführungszeichen. Wenn Sie jedoch zum Beispiel ein längeres Zitat oder so etwas suchen, sollten Sie Anführungszeichen verwenden.',
'mehrwortsuche.2' => 'Beispiel: die Suche nach <div class="well well-sm">"in den öden Fensterhöhlen"</div> liefert viele Ergebnisse, aber spannend (und genauer) wird es bei der Suche <div class="well well-sm">Schiller "in den öden Fensterhöhlen"</div>',
'grossklein.title' => 'Gro&szlig;-/ Kleinschreibung',
'grossklein.1' => 'Gro&szlig;- und Kleinschreibung wird bei der Suche nicht unterschieden, es handelt sich um eine rein inhaltliche Suche.',
'grossklein.2' => 'Beispiel: die Suche nach <div class="well well-sm">gro&szlig;schreibung</div> liefert also genau die gleichen Ergebnisse wie <div class="well well-sm">GRO&szlig;SCHREIBUNG</div>',
'grossklein.2' => 'Beispiel: die Suche nach <div class="well well-sm">gro&szlig;schreibung</div> liefert genau die gleichen Ergebnisse wie <div class="well well-sm">GRO&szlig;SCHREIBUNG</div>',
];
......@@ -36,6 +36,7 @@ return [
'plugin.head.3' => 'MetaGer zum Opera hinzufügen',
'plugin.head.4' => 'MetaGer zum Internet Explorer hinzufügen',
'plugin.head.5' => 'MetaGer zum Microsoft Edge hinzufügen',
'plugin.head.6' => 'MetaGer zum Safari hinzufügen',
'plugin.head.info' => '(aktuelle Sucheinstellungen werden übernommen)',
'plugin.firefox.1' => 'Klicken Sie in Ihrem Browser oben rechts im Suchfeld auf die Lupe mit dem kleinen "+" und dann auf "MetaGer hinzufügen" (siehe Bild)',
......@@ -68,4 +69,6 @@ return [
'plugin.edge.3' => 'Scrollen Sie nach unten und klicken auf "Erweiterte Einstellungen anzeigen"',
'plugin.edge.4' => 'Scrollen Sie erneut nach unten bis zum Punkt "In Adressleiste suchen mit" und klicken Sie auf "Ändern"',
'plugin.edge.5' => 'Wählen Sie "MetaGer: Sicher suchen & finden..." und klicken Sie auf "Als Standard"',
'plugin.safari' => '<ol><li>Installieren Sie das Safari-PlugIn <a href="http://www.opensearchforsafari.com/" target="_blank">OpenSearchforSafari</a>.<li>Rufen Sie MetaGer auf und fügen Sie MetaGer mit dem OpenSearch-Knopf(Lupen-Symbol) in der Safari-Men&uuml;leiste hinzu.<li>L&ouml;schen Sie (nach Bedarf) die anderen Suchmaschinen aus dem OpenSearch-PlugIn, indem Sie das "X" neben diesen betätigen.<li>Sie können nun über den OpenSearch-Knopf(Lupe) mit MetaGer suchen.',
];
<?php
return [
'achtung' => 'Warning! For our website is in constant development there are continuous changes to the structure and functionality of our website. We try to update our help pages as quickly as possible, but can not prevent temporary mistakes.',
'title' => 'MetaGer - FAQ',
'dienste' => 'Tools-free of charge',
......@@ -29,4 +31,7 @@ return [
'faq.title' => 'FAQ',
'faq.1.h' => 'MetaGer – what is it?',
'faq.10.b' => 'Versuchen Sie bitte zuerst, das aktuelle Plugin zu installieren. Zum Installieren einfach auf den Link direkt unter dem Suchfeld klicken. Dort sollte Ihr Browser schon erkannt worden sein. Wenn Sie dann noch Probleme haben sollten, wenden Sie sich bitte an uns: <a href="mailto:office@suma-ev.de" target="_blank">office@suma-ev.de</a>',
'faq.13.b.1' => 'Der Schutz pers&ouml;nlicher Daten ist uns so wichtig, dass wir alles, was dem zuwiderlaufen k&ouml;nnte, gar nicht erst machen: es gibt bei uns keine Cookies oder Session-IDs oder irgendetwas, was so etwas erm&ouml;glichen w&uuml;rde. Siehe auch: <a href="https://metager.de/datenschutz/" target="_blank">https://metager.de/datenschutz/</a>',
'faq.15.b' => 'MetaGer gibt es seit 1996 ... die Einzelheiten der Entstehungsgeschichte kann man hier in einem Interview nachlesen: <a href="http://blog.suma-ev.de/node/207" target="_blank">http://blog.suma-ev.de/node/207</a>.',
];