Gunnar Bittersmann: Accept-Language

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

--
„Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
  1. 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

    1. 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

      --
      sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
      1. 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

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
  2. 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

    --
    "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
    1. Moin

      indirekt? Ich meine per AJAX?

      Gruß
      rfb

      --
      Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
      (Galileo Galilei)
      1. 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

        --
        "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
  3. 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:]