Webseite in verschiedenen Sprachen

  • Hey zusammen,

    unzwar ich möchte bei meiner testseite mehrere Sprachen hinzufügen, z.b. englisch/italienisch/....

    Ich weis das dies mit hreflang geht:

    HTML
    <link rel="alternate" hreflang="en" href="meineseite.html?en" >

    Muss ich nun die seiten selbst übersetzen ?

    Stef

  • 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.:

    Code
    https://www.example.com/de/startseite
    https://www.example.com/en/home


    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:

    Ist dies so ok ?

    Stef

    • Offizieller Beitrag

    Hi,

    Annähernd :)

    Du benötigst bspw. den 'de'-case nicht, wenn es eh der Default ist:

    PHP
    switch ($sprache) {
        case 'en' :
            $lade = '/en/index.html';
            break;
        default:
            $lade = '/de/index.html';
            break;
    }

    Und dann sollte der Inhalt eingebunden werden, anstatt weiterzuleiten, bspw.:

    PHP
    include_once $lade;

    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:

    PHP
    $aUriSegments = array_filter( explode('/', $_SERVER['REQUEST_URI']) );


    Damit erhältst Du dann ein Array, das bspw. so aussieht:

    Code
    0 => de
    1 => startseite


    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:

    PHP
    <a href="<?php include_once $lade?>"><img src=".." alt="..."></a>

    ?

    Dann sieht das script wie folgt aus wenn ichs richtig verstanden habe :

    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.

    Stef

    Einmal editiert, zuletzt von Stef (23. August 2016 um 12:29)

    • Offizieller Beitrag

    Ne, die Links bleiben wie sie sind:

    HTML
    <a href="//example.com/de/startseite"><img src=".." alt="..."></a>


    Dein Webserver sollte alle Anfragen auf die index.php leiten ( Beispiel: .htaccess, näheres siehe hier :(


    und in der index.php hast Du dann alles zur Verfügung. Bei Deiner Aufteilung mit den Ordnern würde auch das hier reichen:


    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 :

    Muss man dann include_once nicht in html dann einbinden ?

    Stef

    • Offizieller Beitrag

    Im Detail:

    PHP
    $sContentFilePath = trim( $_SERVER['REQUEST_URI'], '/' ) . '.html';


    Für das Beispiel http://www.example.com/de/seite liefert $_SERVER['REQUEST_URI']:

    Code
    /de/seite
    PHP
    trim( $_SERVER['REQUEST_URI'], '/' )

    entfernt in diesem Fall führende und auch abschliessende Slashes.
    Ein .html rangehängt und wir haben für $sContentFilePath:

    Code
    de/seite.html

    !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.:

    PHP
    if ( !is_file($sContentFilePath) ) {
    
    
        $sContentPath = 'de/startseite.html';
    
    
    }


    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