Webseite in verschiedenen Sprachen
-
-
- Offizieller Beitrag
Naja, die Texte müssen ja irgendwie in der angebotene Sprache angezeigt werden.
Wo sollen die her kommen, wenn Du die nicht übersetzt oder übersetzen lässt?Wie Du das ganze aufbauen willst, hast Du Dir schon überlegt?
Das hreflang ist eigentlich nur SE relevant. -
ich mag das forum
-
- Offizieller Beitrag
Sammelst Du Beitragspunkte???
-
Hey,
hm ok. Dann geht ja nur engisch bei mir.
Ja, habe ich. Ich möchte pro sprache einen eigenen ordner machen und dann für die sprachen hinter jeder datei ein url-parameter. Dann z.b. sollte man ja auch beim anfangs html tag das attribut lang="sprache" benutzen.
Braucht man dann dieses hreflang nicht ?
Gruß,
Stef -
- Offizieller Beitrag
Doch, ich würde beides nutzen, sowohl lang, als auch den <link>-Tag alternate mit hreflang.
Zum Thema URL, es macht SEO technisch mehr Sinn, die Sprache in der URL zu verbauen, anstatt einen Parameter zu verwenden, bspw.:
Welcher Inhalt dann geladen und angezeigt wird, sollte dann ein PHP-Script regeln. -
Hey,
ok.
Ich habe mal ein kleines script geschrieben was es regeln soll mit switch case:
PHP
Alles anzeigen<?php $sprache = $_SERVER['HTTP_ACCEPT_LANGUAGE']; switch ($sprache) { case 'de': $lade = '/de/index.html'; break; case 'en' : $lade = '/en/index.html'; break; default: $lade = '/de/index.html'; break; } header('LOCATION : $lade'); ?>
Ist dies so ok ?
Stef
-
- Offizieller Beitrag
Hi,
Annähernd
Du benötigst bspw. den 'de'-case nicht, wenn es eh der Default ist:
PHPswitch ($sprache) { case 'en' : $lade = '/en/index.html'; break; default: $lade = '/de/index.html'; break; }
Und dann sollte der Inhalt eingebunden werden, anstatt weiterzuleiten, bspw.:
Dann kommt es nur noch darauf an, woher Du $sprache nimmst.
Wenn Du das über URL machst, wie in #6 dargestellt, kannst Du das ganz easy filtern:
Damit erhältst Du dann ein Array, das bspw. so aussieht:
und damit weißt Du, welche Sprache und welche Seite Du laden musst und ersparst Dir sogar die switch/case Logik. -
Hey,
ja stimmt schon. Nicht drauf geachtet.
Ok. Also wenn ich jetzt z.b. die Bilder mit einem a-tag verlinkt habe kann ich die php datei so verlinken:
?
Dann sieht das script wie folgt aus wenn ichs richtig verstanden habe :
PHP
Alles anzeigen<?php $sprache = array_filter( explode('/', $_SERVER['REQUEST_URI']) ); switch ($sprache) { case 'en' : $lade = '/en/index.html'; break; default: $lade = '/de/index.html'; break; } // include_once $lade; - in html einbinden ?>
Ohne switch/case sollte man ja mit if abfragen ob die sprache de oder en ist und dann jeweils falls eines zutrifft die seite neu laden auf die sprache.
PHP
Alles anzeigen$sprache = array_filter( explode('/', $_SERVER['REQUEST_URI']) ); if($sprache =='en') { header("LOCATION : /en/index.html"); } if($sprache == 'de') { header("LOCATION : /de/index.html"); }
Stef
-
- Offizieller Beitrag
Ne, die Links bleiben wie sie sind:
Dein Webserver sollte alle Anfragen auf die index.php leiten ( Beispiel: .htaccess, näheres siehe hierApache Configuration
Alles anzeigenRewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [QSA,L]
und in der index.php hast Du dann alles zur Verfügung. Bei Deiner Aufteilung mit den Ordnern würde auch das hier reichen:PHP
Alles anzeigen$sContentFilePath = trim( $_SERVER['REQUEST_URI'], '/' ) . '.html'; if ( !is_file($sContentFilePath) ) { throw new Exception( "Inhaltsseite ' . $sContentPath . ' nicht gefunden!" ); } include_once $sContentPath';
Anstatt eine Exception zu werfen, kannst Du natürlich auch eine Standard- oder Fehlerseite laden. -
Hey,
aso ok.
Habe mit htaccess noch nichts zu tun gehabt. Ich schaue es mir mal genauer an.
Zu denm Code das ich ihn richtig verstanden habe :
PHP
Alles anzeigen$sContentFilePath = trim( $_SERVER['REQUEST_URI'], '/' ) . '.html'; // hier wird der var $sContentFilePath die url angegeben um auf die Seiten zugreifen zu können und mit dem trim entfernt man die leerzeichen dann if ( !is_file($sContentFilePath) ) { //wenn $sContentFilePath keine File ist throw new Exception( "Inhaltsseite ' . $sContentPath . ' nicht gefunden!" ); //werfe exception } include_once $sContentPath; // ist $sContentPath eine von php verfügbare fehlermeldung ?
Muss man dann include_once nicht in html dann einbinden ?
Stef
-
- Offizieller Beitrag
Im Detail:
Für das Beispiel http://www.example.com/de/seite liefert $_SERVER['REQUEST_URI']:entfernt in diesem Fall führende und auch abschliessende Slashes.
Ein .html rangehängt und wir haben für $sContentFilePath:!is_file() hast Du korrekt verstanden.
Wenn es keine Datei ist, wird per throw eine Exception ( Ausnahme ) geworfen, was allerdings erst wirklich sinnvoll wird, wenn das aus einer Methode oder Funktion kommt.
Man kann stattdessen auch einfach eine Standard-Seite setzen, bspw.:
Und das include_once hat nichts mit HTML zu tun, damit bindest Du Scripte/Dateien ein, ganz gleich welche, solange sie den Kontext nicht stören.Gruß Arne
-
Aso ok. Dann lagert man sozusagen diese datei aus und bindet diese dann auf der hauptseite mit include_once oder require_once ein.
Vielen Dank.
Gruß Stef