Immer wieder neu erfunden und allzu oft schlechter, als was es schon gibt. Deshalb meine Regeln als Grundlage für die Diskussion.
1) Der User entscheidet aktiv
Der User fällt die Sprachauswahl aktiv mit einem Klick auf seine Sprache: Entweder auf einer vorgelagerten Sprachauswahlseite oder auf jeder beliebigen Contentseite.
Keine Technik, wo diese nichts nützt. Ja, der Browser schickt bei jedem Aufruf seine akzeptierten Sprachen im HTTP Request Header mit (vgl. RFC 2616) -- sogar gewichtet. Die Website darf damit aber keine vorschnellen Entscheidungen fällen, da diese Mitgabe nicht unbedingt den aktuellen Bedürfnissen des Users entsprechen. Häufig weiss der User zudem nicht, wie sich diese "Accept Language" beeinflussen lässt und auch ich bin schon unzähliche Male in die Falle getappt und hatte plötzlich Software in einer Sprache installiert, die ich nicht wollte (fies in diesem Bezug ist der Java-Download).
Ein noch übleres, erlebtes Verhalten ist, dass eine Site meine Sprache aufgrund der ersten besuchten Seite bestimmt und mit einem persistenten Cookie auf bei mir "festschreibt". So komme ich über eine Suchmaschine direkt auf eine Seite und deren Sprache soll (für immer) meine bevorzugte Sprache sein... kaum!
2) Der User muss nur einmal entscheiden
Hat sich der User explizit für seine Sprache entschieden (vgl. 1), so darf die Plattform diese speichern und in der Zukunft als Vorgabe nutzen. So soll die Sprach-/Länderauswahlseite nicht mehr gezeigt werden; Eine spätere explizite Änderung durch den Nutzer muss aber jederzeit möglich sein. Die Vorgabe wird entsprechend angepasst.
3) Umschaltung ist auf jeder Seite rechts oben
Sprachumschaltung ist rechts oben auf jeder Seite der Webanwendung zu finden. Punkt.
4) Keine Flaggen aber Textlabel
Länderflaggen zur Sprachumschaltung sind falsch. Erstens gibt es in einem Land mehrere Sprachen (auch in den USA -- bitte mal die Demographie in dem Grossstädten anschauen). Schweizer Flagge = vier Landessprachen (beim Rätoromanischen gäbe es noch mehrere unterschiedliche Varianten) und zahlreiche häufig gesprochene Sprachen.
Zweitens genügt die Sprache allein nicht, da eine Sprache zu einem Kulturkreis gehört. So beispielsweise Französisch in Afrika, Frankreich, der Schweiz, Kanada, Belgien etc. Sowohl Inhalte, Tonalität, Wortschatz wie auch Syntax unterscheiden sich. Je nachdem will ich mich anpassen (oder bewusst nicht, weil ich mit einem Landesimage arbeite).
So ist es übrigens auch in der relevanten Spezifikation drin: Eine Kombination von Sprache (nach ISO-639) und von Land (nach ISO-3166). Schön ist dass auch Sprachen ausserhalb von ISO im HTTP header codiert werden können, so beispielsweise Google auf Klingonisch.
5) Label haben mindestens zwei Buchstaben und sind in der Zielsprache
Die Textlabel (vgl. 4) rechts oben auf jeder Seite (vgl. 3) haben, sofern klar einem Kulturkreis zugeordnet, mindestens zwei Buchstaben. Am offensichtlichsten eignen sich dafür die Abkürzungen im Standard ISO-639. Möglich und teilweise besser (wegen der Grösse und somit der Einfachheit zum klicken) sind die ausgeschriebenen Sprachen und zwar in der Zielsprache. Als nicht Englisch / Französich auf der deutschen Seite aber english / franà§ais. Das Beispiel ist wegen der einfache Verständlichkeit ein bisschen zu simpel... aber stellen die ihr Handy mal auf Griechisch...
6) Die Sprache ist in der URI drin (und nicht als Parameter)
Ein bestimmte Informationselement hat eine eindeutige Referenzierung eine URI (das ist Grundlage von Hypertext -- alles andere [z.B. eine ganze Website in index.asp] ist falsch). So gibt es eigentlich zwei gute Möglichkeiten. http://domaene.ch/news/item1.de.html resp. http://domaene.ch/news/item1.en.html (bei der Umsetzung hilft mod Negotiation von Apache ganz nett). Oder http://domaene.ch/de/news/item1.html resp. http://domaene.ch/en/news/item1.html.
An der Grenze des guten ist ein einziger Parameter im Stil http://domaene.ch//news/item1.html?lange=en aber auf keinen Fall ist die Sprache in der Session drin, sonst tut es nicht mit eindeutigen Referenzen, Suchmachinen etc.
Habe ich was vergessen und Diskussion ist erwünscht...



