Accept-Language
Gunnar Bittersmann
- javascript
0 Maus0 Christian Seiler0 rfb
1 peterS.- css
Hello out there!
Kommt man eigentlich mit JavaScript an die im Browser eingestellten bevorzugten Sprachen (Accept-Language) heran?
(navigator.language/navigator.userLanguage ist nicht gemeint.)
See ya up the road,
Gunnar
Hallo,
les es einfach nach, dann weißt du es. Jetzt bekommst du auch mal so eine Antwort, wie du sie immer gibst.
Gruß,
Maus
Servus,
Jetzt bekommst du auch mal so eine Antwort, wie du sie immer gibst.
Nur fehlt hier der Link zu einer passenden Ressource, den Gunnar gesetzt hätte...
Gruss
Patrick
Hello out there!
Nur fehlt hier der Link zu einer passenden Ressource
Also weeßte, Patrick, das ist nun wirklich ein bisschen viel verlangt von jemandem, der nicht mal die Frage verstanden hat.
See ya up the road,
Gunnar
Hallo Gunnar,
Kommt man eigentlich mit JavaScript an die im Browser eingestellten bevorzugten Sprachen (Accept-Language) heran?
Kann sein, dass es bei irgend einem Browser eine nicht oder nur schlecht dokumentierte Möglichkeit gibt, aber allgemein gilt: Nein, das geht nicht.
Viele Grüße,
Christian
Moin
indirekt? Ich meine per AJAX?
Gruß
rfb
Hallo rfb,
indirekt? Ich meine per AJAX?
Beim XMLHttpRequest-Objekt kann man meines Wissens nur die Response-Header abfragen und Request-Header setzen - nicht jedoch Request-Header abfragen - damit ist rumfummeln an XMLHttpRequest alleine wenig hilfreich.
Und wenn man dann ein serverseitiges Script dahinterschraubt, das JavaScript dann mitteilt, wie der Header aussah, dann kann man gleich schon bei der ursprünglichen Anfrage (als die Seite geladen wurde) serverseitig die Information mit in die Seite einfügen, dass JavaScript sie auslesen kann - mit XMLHttpRequest ist hier also erst einmal (zumindest prinzipiell) gar nichts gewonnen. Mag natürlich Fälle geben, in denen das Abfragen per XMLHttpRequest sinnvoller ist, als das direkte Generieren der eigentlichen Seite, aber das ändert nichts an der Tatsache, dass XMLHttpRequest selbst einem in der Sache nicht weiterhilft, man braucht trotzdem noch ein serverseitiges Pendant.
Viele Grüße,
Christian
gruss Gunnar,
Kommt man eigentlich mit JavaScript an die im Browser eingestellten
bevorzugten Sprachen (Accept-Language) heran?(navigator.language/navigator.userLanguage ist nicht gemeint.)
"css 2"-faehige browser, welche die pseudoklasse ":lang
" richtig
interpretieren eroeffnen Dir zuallerersteinmal die moeglichkeit,
bei z.b. mehrsprachigen dokumenten den dokumenteninhalt
*sprachzielgruppengerecht* nur ueber css-regeln und anhand der
sprachwunschliste des nutzers anzuzeigen.
eine entsprechende *autodetect.css* fuer [en/de] saehe in ihren
grundzuegen folgendermassen aus:
~~~css
/* default: german text is displayed, english text gets suppressed yet */
*[lang=en] {display: none;}
*[lang=de] {display: inline;}
div[lang=de], h1[lang=de], h2[lang=de], h3[lang=de], h4[lang=de], h5[lang=de], h6[lang=de],
p[lang=de], ul[lang=de], ol[lang=de], dl[lang=de], hr[lang=de], pre[lang=de], table[lang=de],
address[lang=de], blockquote[lang=de], form[lang=de], fieldset[lang=de], noscript[lang=de] {
display: block; /* center, dir, menu, isindex, noframes need to be added as well if still in use */
}
hier muss man sich erstmal fuer einen anzuzeigenden \*sprachdefault\*
entscheiden; alle anderen ueber den attributselektor [lang=..] in
einen sprachlichen kontext gesetzten elemente werden ausgeblendet.
ueber den kontext des pseudoklassenselektors "html:lang(..)", der die
spracheinstellungen des nutzers beruecksichtigen sollte, werden dann
das allgemeine sprachspezifische erscheinungsbild des dokuments sowie
die ausnahmen von diesen allgemeinen regeln festgelegt wie z.b.:
~~~css
/* if the ":lang" selector is browser supported following rules will be applied \*/
html:lang(en) *[lang=de] {display: none;}
html:lang(en) *[lang=en] {display: inline;}
html:lang(en) div[lang=en],
html:lang(en) h1[lang=en], html:lang(en) h2[lang=en], html:lang(en) h3[lang=en],
html:lang(en) h4[lang=en], html:lang(en) h5[lang=en], html:lang(en) h6[lang=en],
html:lang(en) p[lang=en], html:lang(en) ul[lang=en], html:lang(en) ol[lang=en], html:lang(en) dl[lang=en],
html:lang(en) hr[lang=en], html:lang(en) pre[lang=en], html:lang(en) table[lang=en],
html:lang(en) address[lang=en], html:lang(en) blockquote[lang=en],
html:lang(en) form[lang=en], html:lang(en) fieldset[lang=en],
html:lang(en) noscript[lang=en] {
display: block; /* center, dir, menu, isindex, noframes need to be added as well if still in use \*/
}
/* exceptions \*/
abbr[lang=de],
acronym[lang=de],
*[lang=de].polyglot {display: inline;}
abbr[lang=en],
acronym[lang=en],
*[lang=en].polyglot {display: inline;}
html[lang=de], html[lang=en] {display: block;}
das gegebene bsp. laesst sich sehr leicht auch auf dokumente anpassen,
die mehr als nur zweisprachig sind.
natuerlich findet hier keine spracherkennung im sinne von »gib mir eine
liste zu unterstuetzender sprachen absteigend geordnet nach relevanz
zurueck« statt.
es handelt sich vielmehr um eine ein- bis mehrstufige kaskade von nicht
ganz dumm angeordneten css-filtern, die sich des language-attributs und
der language-pseudoklasse bedienen und auf nutzerseite das ergebnis
dieses filterprozesses auch nur insofern zur anzeige bringen, wie diese
filter mit den vom nutzer gemachten spracheinstellungen korrespondieren.
das war die reine css-lehre; in einer JavaScript-faehigen umgebung
laesst sich ein solch beispielhaft gegebenes dokument dann natuerlich
auch in jeder hinsicht manipulieren und auslesen.
es ist z.b. ohne weiteres moeglich alle im dokument ausgezeichneten
sprachen in erfahrung zu bringen, testweise ein div/span-element zu
erzeugen und dessen language-attribut der gerade erzeugten js-sprach-
liste entsprechend zu setzen sowie dann dessen ".style.display"-wert
auszulesen.
das ergebnis waere dann eine fuer genau dieses dokument zur anwendung
kommende preferierte-sprache, die nicht unbedingt mit der in den
browsereinstellungen gemachten ersten zielsprache uebereinstimmen muss.
(ein entsprechend umfangreich aufgebohrter *css-sprachtest* koennte das
allerding beheben.)
als *proof-of-concept* kann ich eine abgewandelte form der reinen css-
loesung zur ansicht feilbieten, die, da es sich um eine uebersetzung
aus dem englischen orginal ins deutsche handelt, auch eine deutsche
ansicht erzwingt.
eine schon oben erwaehnte *autodetect.css* ist aber als eines von
mehreren alternativen stylesheets eingebunden, sodass man sich ueber
das ansicht/view menu des browsers von der wirksamkeit ebendieser
ueberzeugen kann:
http://www.pseliger.de/translations/Douglas-Crockford/missunderstood-JavaScript.html
so long - peterS. - pseliger@gmx.net