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
    1. <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

  • 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
    1. https://www.example.com/de/startseite
    2. 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

  • Hi,


    Annähernd :-)


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

    PHP
    1. switch ($sprache) {
    2. case 'en' :
    3. $lade = '/en/index.html';
    4. break;
    5. default:
    6. $lade = '/de/index.html';
    7. break;
    8. }


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

    PHP
    1. 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
    1. $aUriSegments = array_filter( explode('/', $_SERVER['REQUEST_URI']) );


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

    Code
    1. 0 => de
    2. 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
    1. <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

  • Ne, die Links bleiben wie sie sind:

    HTML
    1. <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

  • Im Detail:

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


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

    Code
    1. /de/seite


    PHP
    1. 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
    1. 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
    1. if ( !is_file($sContentFilePath) ) {
    2. $sContentPath = 'de/startseite.html';
    3. }


    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