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
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]