La bonne façon est de regarder l'en - tête HTTP Accept-Language envoyé au serveur. Il contient la liste ordonnée et pondérée des langues que l'utilisateur a configuré pour préférer son navigateur.
Malheureusement, cet en-tête n'est pas disponible pour la lecture à l'intérieur de JavaScript; tout ce que vous obtenez est navigator.language
, qui vous indique quelle version localisée du navigateur Web a été installée. Ce n'est pas nécessairement la même chose que la ou les langues préférées de l'utilisateur. Sur IE, vous obtenez à la place systemLanguage
(langue installée du système d'exploitation), browserLanguage
(identique à language
) et userLanguage
(région du système d'exploitation configurée par l'utilisateur), qui sont tous également inutiles.
Si je devais choisir entre ces propriétés, je reniflerais d' userLanguage
abord, en retombant language
et seulement après cela (si celles-ci ne correspondaient à aucune langue disponible) en regardant browserLanguage
et enfin systemLanguage
.
Si vous pouvez mettre un script côté serveur ailleurs sur le net qui lit simplement l'en-tête Accept-Language et le recrache sous forme de fichier JavaScript avec la valeur d'en-tête dans la chaîne, par exemple:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
vous pouvez alors inclure un <script src> pointant vers ce service externe dans le HTML et utiliser JavaScript pour analyser l'en-tête de la langue. Cependant, je ne connais aucun code de bibliothèque existant, car l'analyse en langage accepté est presque toujours effectuée côté serveur.
Quoi que vous finissiez par faire, vous aurez certainement besoin d'un remplacement par l'utilisateur car il devinera toujours mauvais pour certaines personnes. Il est souvent plus facile de mettre le paramètre de langue dans l'URL (par exemple, http: //www.example.com/en/site vs http: //www.example.com/de/site) et de laisser l'utilisateur cliquer liens entre les deux. Parfois, vous voulez une URL unique pour les deux versions linguistiques, auquel cas vous devez stocker le paramètre dans les cookies, mais cela peut confondre les agents utilisateurs sans prise en charge des cookies et des moteurs de recherche.