Autom. Sprachauswahl
Terry
- programmiertechnik
0 Gunnar Bittersmann
0 Schuer0 迪拉斯
0 Wolfgang
Hallo,
ich möchte meine Homepage in mehreren Sprachen aufbauen. Kann ich in .htaccess oder in einer anderen Datei oder notfalls im HTML-Dokument steuern, dass die Seite mit der Sprache aufgerufen wird, die der Anwender in seinem Browser eingestellt hat?
Thanks
Hello out there!
ich möchte meine Homepage in mehreren Sprachen aufbauen. Kann ich in .htaccess oder in einer anderen Datei oder notfalls im HTML-Dokument steuern, dass die Seite mit der Sprache aufgerufen wird, die der Anwender in seinem Browser eingestellt hat?
"Content negotiation" ist dein Stichwort.
http://forum.de.selfhtml.org/archiv/2006/6/t131307/#m849403
http://forum.de.selfhtml.org/archiv/2006/4/t127369/#m822336
http://forum.de.selfhtml.org/archiv/2006/3/t124751/#m804069
See ya up the road,
Gunnar
Hallo Gunnar u. Ihr anderen,
den Königsweg habe ich aus den vielen Dokumenten nicht herausgefunden. Da ich noch wenig mit Servern zu tun hatte, verstehe ich die umfangreiche Beschreibung von "Content negotiation" überhaupt nicht.
Aber ich habe ein Beispiel gefunden, das folgendermassen aussieht:
Datei .htaccess:
# Alternative Inhalte
AddType application/x-type-map var
Options +MultiViews
DirectoryIndex index
Datei index.var:
URI: index; vary="type,language"
URI: indexd.htm
Content-type: text/html; qs=1.0
Content-language: de
URI: indexf.htm
Content-type: text/html; qs=0.8
Content-language: fr
Ich verstehe es zwar nicht, aber es funktioniert im Internet!
Leider aber nicht auf meinem lokalen Apache-Server.
Weiß jemand, was ich da noch wo ändern muss?
Danke
Hallo Gunnar u. Ihr anderen,
den Königsweg habe ich aus den vielen Dokumenten nicht herausgefunden. Da ich noch wenig mit Servern zu tun hatte, verstehe ich die umfangreiche Beschreibung von "Content negotiation" überhaupt nicht.
Aber ich habe ein Beispiel gefunden, das folgendermassen aussieht:Datei .htaccess:
Alternative Inhalte
AddType application/x-type-map var
Options +MultiViews
DirectoryIndex index
>
>
> Datei index.var:
>
> ~~~apache
> URI: index; vary="type,language"
>
> URI: indexd.htm
> Content-type: text/html; qs=1.0
> Content-language: de
>
> URI: indexf.htm
> Content-type: text/html; qs=0.8
> Content-language: fr
>
Ich verstehe es zwar nicht, aber es funktioniert im Internet!
Leider aber nicht auf meinem lokalen Apache-Server.Weiß jemand, was ich da noch wo ändern muss?
Danke
Hey,
Apache bietet mehrere Methoden zur CN; Typemaps, wie von dir genannt, ist einer davon. Ich hab noch nie davon Gebrauch gemacht. Mein bevorzugter Weg MultiViews richtet sich schon nach dem Dateinamen und macht erweiterte Konfiguration unnötig, weil der Kram schon standardmäßig aktiviert ist.
In deinem Fall: speichere Dateien mit Sprachendungen, bspw. quux.html.en
und quux.html.de. Verlinke auf quux.html (oder nur quux) und der Server ermittelt mit dem vom Browser geschickten Accept*-Header die passende Ressource.
Das klappt auch mit Zeichenkodierungen: quux.html.utf-8 und quux.html.iso-8859-2 (verlinke auf quux.html oder nur quux)
Auch Inhaltstypen gehen: quux.xhtml und quux.html und quux.txt (verlinke auf quux)
quux.svg und quux.png und quux.jpg (verlinke auf quux/binde quux als Bildobjekt ein)
Lies mehr dazu im Handbuch.
http://httpd.apache.org/docs/2.2/mod/mod_mime.html#multipleext
http://httpd.apache.org/docs/2.2/content-negotiation.html#naming
Wenn du heute CN schlau einsetzt und dir Gedanken um gutes URI-Design machst, kannst du in der Zukunft Ressourcen in Hinblick auf bessere Technologie austauschen, ohne dass Links kaputtgehen/dein Googlejuice flöten geht.
Kann ich in .htaccess oder in einer anderen Datei oder notfalls im HTML-Dokument steuern, dass die Seite mit der Sprache aufgerufen wird, die der Anwender in seinem Browser eingestellt hat?
Deine index.php könnte auf verschiedene Unterverzeichnisse leiden, etwa so:
<?php
$lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (substr($lang_variable, 0, 2) == "en") {
header ("Location:./en/");
exit;
}else {
header ("Location:./de/");
exit;
}
?>
Ist die Browserkennung englisch, wird auf /en/ geleitet, in allen anderen Fällen auf /de/.
Viele Grüße!
_ds
Hey,
if (substr($lang_variable, 0, 2) == "en") {
header ("Location:./en/");
exit;
}else {
header ("Location:./de/");
exit;
}
dieser Algorithmus zur Content-Negotiation ist unvollständig. Ein typischer Fall - Nutzer bevorzugt deutsch mit englisch als Fallback - liefert das falsche.
Wie's richtig geht, steht in http://httpd.apache.org/docs/2.2/content-negotiation.html#methods sowie der HTTP/1.1-Spec.
Hallo Terry
ich möchte meine Homepage in mehreren Sprachen aufbauen. Kann ich in .htaccess oder in einer anderen Datei oder notfalls im HTML-Dokument steuern, dass die Seite mit der Sprache aufgerufen wird, die der Anwender in seinem Browser eingestellt hat?
Ja das geht und die Methoden sind genannt. Trotzdem möchte ich dich davor warnen, dass zu tun. Wenn jemand unterwegs ist und zu Beispiel auf einem Internetcafe heraus surft, dann müssen die Browsereinstellungen nichts mit der Auffassung des Surfers zu tun haben. Eine einfache Sprachnavigation ist das wesentlich hilfreicher.
Herzliche Grüße
Wolfgang
Hello out there!
Ja das geht und die Methoden sind genannt. Trotzdem möchte ich dich davor warnen, dass zu tun. Wenn jemand unterwegs ist und zu Beispiel auf einem Internetcafe heraus surft, dann müssen die Browsereinstellungen nichts mit der Auffassung des Surfers zu tun haben. Eine einfache Sprachnavigation ist das wesentlich hilfreicher.
Content negotiation steht einer Auswahl der Sprache durch den Nutzer nicht im Wege.
Letztere ist auch immer anzubieten, wie ich auch in zwei der drei von mir verlionkten Postings ausdrücklich gesagt hatte.
See ya up the road,
Gunnar