mehrsprachige Homepage
tom
- programmiertechnik
0 rolfrost0 e70 DANKE an alle !!
tom0 Tom
0 Sven Rautenberg0 tom
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
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
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
Hello tom,
Und in der DB gibt es dann eben
TEXT-en
TEXT-de
TEXT-esUnd 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)
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
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)
$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
Dann werd ich mich mal mit Sessions vertraut machen :-)
thx all,
tom
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
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
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.
- 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
Moin!
- 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