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