KateTe: Frage zum Wiki-Artikel „language“

problematische Seite

Hallo,

Die Erkennung der Sprache ist in dem Codebeispiel abhängig von der Reihenfolge der Einstellungen. Wenn ich Deutschland (de) also de-DE aktiviere aber nicht an den Anfang der Kette (nach oben) stelle, sondern dort en steht, erkennt er en.

Hat irgendjemand eine verlässliche Methode gefunden, wie man die tatsächliche UI Sprache ermitteln kann. Aus dem gelieferten Accept-Language String geht das nicht.

String Bsp. de-DE aktiviert & an erster Stelle: de-DE,de;q=0.9,en;q=0.8,af;q=0.7,en-US;q=0.6,pl;q=0.5

String Bsp. de-DE aktiviert & nicht an erster Stellen: en,de-DE;q=0.9,de;q=0.8,af;q=0.7,en-US;q=0.6,pl;q=0.5

String Bsp. de-De aktiviert aber am Ende der Liste: en,af;q=0.9,de;q=0.8,en-US;q=0.7,pl;q=0.6,de-DE;q=0.5

Link Codebeispiel: https://wiki.selfhtml.org/wiki/JavaScript/Navigator/language

Bin auf der Suche nach eine Lösung in Java [request.getHeader(Accept-Language);] oder JavaScript

  1. problematische Seite

    Hi,

    Die Erkennung der Sprache ist in dem Codebeispiel abhängig von der Reihenfolge der Einstellungen.

    bei richtiger Auswertung wäre sie das; das Codebeispiel macht aber nur eine einfache Hauruck-Abfrage.

    Wenn ich Deutschland (de) also de-DE aktiviere aber nicht an den Anfang der Kette (nach oben) stelle, sondern dort en steht, erkennt er en.

    Ja. Wenn de-DE an erster Stelle steht, en aber weiter hinten ebenfalls vorkommt, entscheidet dieses Beispiel ebenfalls zugunsten von Englisch. Wollte man die Reihenfolge tatsächlich bewerten, dürfte man die beiden indexOf() nicht bloß auf negativ abfragen, sondern müsste für den Fall, dass beide positiv sind, auch noch ermitteln, welcher der beiden kleiner ist. Der sollte dann gewinnen.

    Das Codebeispiel bedeutet in Klartext:

    • Wenn "en" in der Liste der gewünschten Sprachen steht, sprich englisch
    • Wenn das nicht der Fall ist, dafür aber "de" gelistet ist, sprich deutsch
    • Wenn weder "en" noch "de" vorkommt, sag "Unknown".
      Englisch hat hier im Beispiel also Vorrang, weil es als erstes abgefragt wird.

    Hat irgendjemand eine verlässliche Methode gefunden, wie man die tatsächliche UI Sprache ermitteln kann. Aus dem gelieferten Accept-Language String geht das nicht.

    Mir ist auch keine Möglichkeit bekannt, die UI-Sprache herauszufinden - weder clientseitig (Javascript) noch serverseitig (über die HTTP-Header).
    Meines Erachtens ist auch der einleitende Text im SELFHTML-Wiki nicht korrekt: Navigator.language enthält eben nicht die "Menüsprache" der Browser-Installation, sondern den Wert, der als Accept-Language im Request-Header gesendet wird.

    Ciao,
     Martin

    --
    Ein Tag, an dem du nicht wenigstens einmal gelacht hast, ist ein verlorener Tag.
    1. problematische Seite

      @@Der Martin

      Navigator.language enthält eben nicht die "Menüsprache" der Browser-Installation, sondern den Wert, der als Accept-Language im Request-Header gesendet wird.

      … der als erster Wert als Accept-Language im Request-Header gesendet wird.

      Navigator.languages enthält alle.

      Huch, seit wann gibt’s das denn? Als ich das letzte Mal hier fragte, ob man mit JavaScript an die Liste der bevorzugten Sprachen herankäme, war noch die einhellige Meinung: nö.

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  2. problematische Seite

    Hallo KateTe,

    vielleicht verstehe ich dein Problem ja nicht, aber…

    das Attribut navigator.language sollte genau eine Sprache enthalten. Ich habe gerade mein Chrome auf UI-Sprache englisch gestellt (Browser-UI), aber die Sprachpräferenz auf Deutsch gelegt. Daraufhin liefert mir google ein deutsches UI, mit lang="de" im <html> Element, und navigator.language ist "de-DE".

    Was im Accept-Language Header steht, ist - mutmaßlich - von navigator.languages abgeleitet. Woher die Gewichte kommen, ist Sache des Browsers. Mein Chrome hat 4 Sprachen in languages (de-DE, de, en-US, en) und gibt denen jeweils 0.1 weniger Gewicht.

    Die UI-Sprache des Browsers ist eine ganz andere Sache. Ich kann Chrome sagen, er soll mir sein UI in deutsch anzeigen (das Browser-UI), aber trotzdem Englisch an Stelle 1 haben.

    Der Accept-Language Header sollte vom Server ausgewertet werden, um eine Sprache für die gelieferte Seite auszuwählen. Welche das ist, soll der Server im lang-Attribut des html-Elements vermerken. Das hat dann Einfluss auf sprachspezifische Eigenheiten der Darstellung (Rechtschreibprüfung, Silbentrennung, etc). Ein JavaScript kann das auch abfragen, und sich daran orientieren.

    Heißt also: je nach dem, ob wir vom Server oder vom Browser reden, stellen sich unterschiedliche Fragen. Der Server muss an Hand von Accept-Language entscheiden, welche der möglichen Sprachen er ausgeben soll. Und ein JavaScript im Browser muss prüfen, was der Server denn nun wirklich geliefert hat. Dazu kann es das lang-Attribut im html Element verwenden, oder navigator.language. Was passiert, wenn der Server ein lang-Attribut liefert, für das im Browser keine Sprache angegeben ist, musst Du ausprobieren.

    Rolf

    --
    sumpsi - posui - clusi