tom: mehrsprachige Homepage

Hallo Leute,
ich habe seit längerem eine Homepage, die ich nun gern auch in englisch und spanisch anbieten möchte.

Ich verwende bereits PHP.
Der content wird zum Teil einer DB entnommen.

Wie geh ich da am besten vor ?

Ich würde jetzt an einer Stelle eine Sprachauswahl einbauen, die einer Veriablen den entspr. wert zuweist, also z.B. $lang=eng

In den PHP Datein würde ich den bereits verfassten Text in eine if-abfrage einbauen (if($lang=dt)).
In den else-if Teil kommen dann die anderen Versionen.

Macht das Sinn ?
Dann schleppe ich halt immer ein $lang=xxx in der Adresszeile mit.

Wie könnte man das "schöner" lösen ?

Danke
tom

  1. hi Tom,

    ich habe seit längerem eine Homepage, die ich nun gern auch in englisch und spanisch anbieten möchte.

    Dann schleppe ich halt immer ein $lang=xxx in der Adresszeile mit.

    Wie könnte man das "schöner" lösen ?

    Also ich würde da einen Cookie setzen.

    Viele Grüße, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Hello tom,

      ich habe seit längerem eine Homepage, die ich nun gern auch in englisch und spanisch anbieten möchte.

      Dann schleppe ich halt immer ein $lang=xxx in der Adresszeile mit.

      Also ich würde da einen Cookie setzen.

      Ich auch, und zwar ein "Session-Cookie". Sessions kosten acuh nicht sooo viel extra. Und PHP unterstützt das sehr leistungsstark.

      Wenn man dann gleich den passenden Query-Modifier in der Session speichert, muss man keine der Funktionen umschreiben.

      $sql = "select $feld"."-".$lang." as $feld from Table ..."

      Und in der DB gibt es dann eben

      TEXT-en
      TEXT-de
      TEXT-es

      Und in der Funktion heißt der dann immer nur "TEXT"

      Grüße

      Tom

      1. Hello tom,

        Und in der DB gibt es dann eben

        TEXT-en
        TEXT-de
        TEXT-es

        Und in der Funktion heißt der dann immer nur "TEXT"

        Und wenn man es "richtig" machen will, dann steht in der ersten Tabelle nur die Standardsprache und alle weiteren Sprachen werden in extra-Tabellen abgelegt.

        Grüße

        Tom (der mit dem Bauch tanzt)

  2. Hi,

    ich würde für den eigentlichen Text mehrere Spalten anlegen und dann so den Spaltennamen bestimmen

    $spaltenname = "seitentext_$lang";

    $lang ist wie schon gesagt ein Cookie, dann kann beispielsweise folgendes herauskommen:

    "seitentext_deu"
    "seitentext_eng"
    ...

    So sparst du dir auch unnötige If-Abfragen

    E7

    1. Hello,

      ich würde für den eigentlichen Text mehrere Spalten anlegen und dann so den Spaltennamen bestimmen

      $spaltenname = "seitentext_$lang";

      $lang ist wie schon gesagt ein Cookie, dann kann beispielsweise folgendes herauskommen:

      "seitentext_deu"
      "seitentext_eng"

      Genau, das sagt ich ja schon. Und wenn man dann noch ein "as" spendiert, passt es wieder mit der Polymophie...

      Grüße

      Tom [der mit dem Bauch tanzt)

    2. $lang ist wie schon gesagt ein Cookie, dann kann beispielsweise Folgendes herauskommen:

      Und was machen wenn Cookie off ist!
      Also ich würde entweder ne Variable mitgeben oder mit Sessions arbeiten.

      Variable hätte den Nachteil, dass Du jeden Link anbinden mußt.
      Während Sessions schnell glöst wären.

      Viele Grüße aus Berlin

      TomIRL

  3. Dann werd ich mich mal mit Sessions vertraut machen :-)

    thx all,
    tom

    1. Hello tom,

      Dann werd ich mich mal mit Sessions vertraut machen :-)

      Machs mit Sessions *gg*

      Im Archiv noch mal unter "Session" zu suchen, lohnt sich.
      Hier ein Link zu Testscripten: http://forum.de.selfhtml.org/archiv/2003/11/62196/#m352252

      Grüße

      Tom

  4. Moin!

    ich habe seit längerem eine Homepage, die ich nun gern auch in englisch und spanisch anbieten möchte.

    Ich verwende bereits PHP.
    Der content wird zum Teil einer DB entnommen.

    Wie geh ich da am besten vor ?

    Vergiss Sessions! (Sorry, Jungs, aber Sessions sind bei Sprachauswahl das letzte, was mir dazu einfällt - aus diversen Gründen, die ich hier gerne auseinanderdrösele).

    Ausgangspunkt deiner Überlegungen sollte sein (er war es bei meiner Überlegung jedenfalls): Was macht der Besucher? Was kriegt der zu sehen, wie kann er die Sprache wählen, und wie kann man ihm das Leben leicht machen?

    Fangen wir mal ganz hinten an: Das Leben leicht machen geht durch Automatik. Eigentlich jeder Browser sendet die bevorzugte Sprache seines Benutzers mit. Auf diese Weise kann man für den Deutschen Deutsch, für den Engländer Englisch und für den Spanier Spanisch auswählen. Diese Sprachinformation findet man bei PHP in $_SERVER['HTTP_ACCEPT_LANGUAGE']. Da steht, durch Komma separiert, eine Liste, welche Sprachen bevorzugt werden.

    Es gibt dazu einen Tipp&Trick für PHP von Christian Seiler, der dir die ganzen Überlegungen "Was ist, wenn ich keine passende Sprache habe" etc. abnimmt: http://aktuell.de.selfhtml.org/tippstricks/php/httpsprache/index.htm.

    Ok, nun hast du als Ergebnis also eine Sprache, die du tatsächlich anbietest und die der Benutzer bevorzugt - oder die du zumindest als Standard festgelegt hast, wenn nichts paßt.

    Mein Standard ist dann, dass sich diese Sprache in der URL widerspiegelt:
    www.example.com/de/...
    www.example.com/en/...
    www.example.com/es/...

    Die Startseite www.example.com/index.php hat, basierend auf der Browserangabe, dabei nur die Aufgabe, den Benutzer auf die Startseite des passenden Unterverzeichnisses zu leiten.

    Unterhalb dieses Verzeichnisses spielt sich dann ein einzelner Sprachauftritt ab.

    Die Sprache wechseln kann man, indem man auf die Startseite der jeweils anderen Verzeichnisse verlinkt. Und wenn man es tatsächlich leisten kann, dann linkt man nicht einfach blind auf die Startseite, sondern auf die identische Seite der anderen Sprache - dazu muß man natürlich identische Seiten haben.

    Sowas läßt sich als Billig-Lösung ganz einfach einbauen, indem du deine bisherigen Skripte einfach kopierst und dreimal auf der Website hast.

    Die bessere Version wäre, dass du die URL per Rewriting alle auf _einen_ Verzeichnisbaum mappst und dann mit PHP die URL auswertest und herausfindest, welche Sprache gewünscht ist. Das kannst du dann meinetwegen dynamisch in DB-Abfragen einbauen.

    Du mußt dir nur etwas (meinetwegen ein paar Ausnahmeregelungen) für Sachen wie Bilder einfallen lassen, die nicht aus der DB kommen, aber je Sprache trotzdem unterschiedlich sind, weil sie z.B. Text enthalten.

    Welche Vorteile hat diese URL-Vorgehensweise?

    1. Suchmaschinen haben damit kein Problem. Da alle Sprachvarianten als parameterlose URL zur Verfügung stehen (mal davon abgesehen, was man mit PHP-Krams sonst noch so macht), werden alle Sprachvarianten indiziert. Die Startseite gibt einen Redirect aus, der auch für die Suchmaschinen nicht schädlich ist und mutmaßlich auf der definierten Standardsprache landet, und von dort aus ist einerseits die jeweilige Sprach-Site verlinkt, als auch die Wechsel-Links zu den anderen Versionen vorhanden. Die Suchmaschine kommt also überall hin.

    2. Durch die dynamische Auswertung der Browserinformation kommt der Besucher meistens auf die von ihm gewünschte Sprache.

    3. In den Fällen, in denen man bei dieser Automatik falsch rät, kann der Besucher diese Entscheidung _ohne Sessions_ mit einem Klick ändern. Man muß die Entscheidung _gegen_ die Automatik also nicht selber irgendwie speichern, weil sie in der URL schon gespeichert wird.

    4. Die so entstehenden URLs sehen auch noch vernünftig aus.

    Bis auf die Automatik-Auswahl wird solch ein URL-Sprachwahl-Mechanismus mittlerweile häufig genutzt, beispielsweise bei www.php.net und www.mysql.com für die Sprachvarianten der Dokumentation.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. Hallo Sven,

      Die bessere Version wäre, dass du die URL per Rewriting alle auf _einen_ Verzeichnisbaum mappst und dann mit PHP die URL auswertest und herausfindest, welche Sprache gewünscht ist. Das kannst du dann meinetwegen dynamisch in DB-Abfragen einbauen.

      hm, das ist ja im Grunde die Vorgehensweise, die ich anfangs auch geplant habe, oder ?

      Also ich hab z.b. nur EINE kontakt.php, in der der entspr. Content 3x steht (in den versch. Sprachen)
      Je nach ausgewaehlter Sprache = Wert einer Variablen in der Url wird der entspr. Teil angezeigt.

      Hab ich Dich jetzt missverstanden oder ist das der bester Weg ??

      Du mußt dir nur etwas (meinetwegen ein paar Ausnahmeregelungen) für Sachen wie Bilder einfallen lassen, die nicht aus der DB kommen, aber je Sprache trotzdem unterschiedlich sind, weil sie z.B. Text enthalten.

      Das waer z.B. das Menue.
      Aber selbst da koennte ich den Dateinamen der Bilder von PHP entspr. der URL generieren, oder ?
      also z.b. <img scr="kontakt_<? print($lang); ?>.jpg" alt=...>

      Dann gibts eben ein kontakt_de.jpg, kontakt_en.jpg usw.

      1. Die so entstehenden URLs sehen auch noch vernünftig aus.

      Aber ich schleif eben immer ein Variable mehr in der URL mit, richtig ?

      Vielen Dank auch Dir fuer Deine Antwort(en)
      tom

      1. Moin!

        1. Die so entstehenden URLs sehen auch noch vernünftig aus.

        Aber ich schleif eben immer ein Variable mehr in der URL mit, richtig ?

        Nein.

        Du hast die folgenden URLs:

        Startseiten:
        /de/index.html
        /en/index.html
        /es/index.html

        Unterseiten:
        /de/thema/index.html
        /en/thema/index.html
        /es/thema/index.html

        und so weiter.

        Da ist keine Variable in der URL - die Variable ist sozusagen im Pfadnamen abgelegt.

        Und dann mußt du auch nicht unbedingt mit so Konstrukten in Bildnamen wie "kontakt_de.gif" arbeiten, sondern hast je Sprachversion deinen eigenen Bilderordner:
        /de/img/
        /en/img/
        /es/img/

        Da ist jeweils eine sprachabhängige Grafik drin, die aber gerne überall gleich heißt.

        Sprachunabhängige Grafiken sind zentral in
        /img/
        gespeichert - das sind Bilder, Illustrationen und Gimmicks wie z.B. Bulletzeichen etc.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)