Sönke Tesch: Auslesen der Sprache liefert bei IE 6 'undefined'

Beitrag lesen

Die JavaScript Variable navigator.language liefert beim IE 6 nur 'undefined'.

Ich möchte bei meiner Homepage gern eine Sprachenweiche realisieren, aber wenn mir der Internetxplorer quer schießt, kann ich das wohl vergessen.

Hat jemand eine Idee, wie man das noch machen könnte?

Überlass die Arbeit einfach dem Webserver. Beim Apache geht das folgendermaßen: Hänge einfach an den Dateinamen das Sprachkürzel an, also zum Beispiel "index.html.de" für Deutsch, "index.html.en" für Englisch. Dann erzählst Du dem Webserver mit der Zeile "Options Multiviews" in einer Datei namens ".htaccess", daß er sich aus den vorhandenen Dateien die jeweils passende raussuchen soll. Die .htaccess sollte im obersten Verzeichnis stehen, in dem diese Funktion aktiviert werden soll. Sie gilt auch für alle Unterverzeichnisse.

Beim Aufruf einer Seite namens "index.html" passiert dann folgendes: Der Webserver findet index.html nicht und stellt stattdessen eine Liste mit allen Dateien zusammen, die mit index.html beginnen. Im Beispiel wäre das index.html.de und index.html.en. Je nachdem, welche Sprache(n) der Benutzer bevorzugt, wird dann die passende Version ausgeliefert.

Die Geschichte hat in obiger Form allerdings einen Nachteil: Kommt jemand vorbei, der etwas anderes als Deutsch oder Englisch eingestellt hat, bekommt er nur eine Fehlermeldung, daß keine passende Sprache vorhanden ist (allerdings zusammen mit einer Liste der verfügbaren Alternativen).

Das kannst Du umgehen, in dem Du in den Adressen die Anhängsel ganz weglässt (also statt <a href="index.html"> nur noch <a href="index"> schreibst) _und_ eine der vorhandenen Dateien ohne Sprachkürzel speicherst. Beispiel:

index.html
  index.html.en

Wird eine Seite mit der Adresse "index" abgerufen und der Benutzer hat Englisch eingestellt, bekommt er index.html.en zu sehen. Hat er eine andere Sprache eingestellt, bekommt er die Standardversion index.html.

Das Weglassen der Anhängsel hat übrigens den positiven Nebeneffekt, daß man in Zukunft keine Adressen oder einen Eintrag bei Verzeichnissen wie web.de mehr ändern muß, wenn man zum Beispiel von .html-Dateien auf .shtml oder .php umsteigt. Da alle Adressen nur auf den Basisnamen lauten, sucht sich der Webserver automatisch die richtige Datei.
Funktioniert ganz hervorragend: http://kino-fahrplan.de/programm/ufa, je nach Browserfähigkeiten bekommst Du http://kino-fahrplan.de/programm/ufa.html (normal) oder http://kino-fahrplan.de/programm/ufa.html.gz (komprimiert) geliefert (die Auswahl ist hier zwischen vorkomprimierten und normalen Daten, das Prinzip ist aber das gleiche wie mit der Sprachwahl).

Mehr Infos findest Du im Kapitel Content Negotiation der Apache-Anleitung unter [http://httpd.apache.org/docs/content-negotiation], sowie im HTTP-Protokoll unter http://www.w3.org/Protocols/rfc2616/rfc2616-sec14#sec14.4.

Gruß,
  soenk.e