peterS.: Accept-Language

Beitrag lesen

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:]