Meilleur moyen de déterminer les paramètres régionaux de l'utilisateur dans le navigateur

J'ai un site Web (Flash) localisé dans une douzaine de langues et je veux définir automatiquement une valeur par défaut en fonction des paramètres du navigateur de l'utilisateur afin de minimiser les étapes d'accès au contenu.

FYI, je ne peux pas utiliser les scripts de serveur en raison de restrictions de proxy, donc je suppose que JavaScript ou ActionScript serait approprié pour résoudre le problème.

Des questions:

  1. Quelle serait la meilleure méthode pour «deviner» les paramètres régionaux de l'utilisateur?

  2. Existe-t-il des classes / fonctions simples existantes qui pourraient m'aider (pas de faisceaux de localisation complexes)? Spécialement pour décomposer toutes les langues possibles en un nombre plus petit (les traductions que j'ai) de manière intelligente.

  3. À quel point puis-je faire confiance à une telle solution?

  4. D'autres solutions de contournement ou des suggestions?

Merci d'avance!

    La façon appropriée est de regarder l'en – tête HTTP Accept-Language envoyé au serveur. Cela contient la liste de langues pondérée et pondérée que l'utilisateur a configurée pour préférer son navigateur.

    Malheureusement cet en-tête n'est pas disponible pour la lecture dans 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 les langues préférées de l'utilisateur. Sur IE, vous obtenez plutôt systemLanguage (langage installé sur le système d'exploitation), browserLanguage (même que la language ) et userLanguage (région OS configurée par l'utilisateur), qui sont tous aussi peu utiles.

    Si je devais choisir entre ces propriétés, je voudrais d'abord userLanguage à la language d' userLanguage , revenir à la language et seulement après cela (si ceux-ci ne correspondaient à aucune langue disponible) en regardant browserLanguage et enfin systemLanguage .

    Si vous pouvez placer un script côté serveur ailleurs sur le net, il suffit de lire l'en-tête Accept-Language et de le cracher en tant que 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'; 

    Alors vous pouvez inclure un script <script src> sur ce service externe dans le HTML et utiliser JavaScript pour analyser l'en-tête de la langue. Je ne connais aucun code de bibliothèque existant pour le faire, cependant, puisque l'analyse Accept-Language est presque toujours effectuée sur le côté du serveur.

    Tout ce que vous finissez par faire, vous avez certainement besoin d'un utilisateur, car il va toujours deviner mal pour certaines personnes. Souvent, il est plus facile de mettre le paramètre de langue dans l'URL (par ex. Http: //www.example.com/fr/site vs http: //www.example.com/de/site) et laissez l'utilisateur cliquer Liens entre les deux. Parfois, vous voulez une seule URL pour les deux versions linguistiques, auquel cas vous devez enregistrer le paramètre dans les cookies, mais cela peut confondre les agents utilisateurs sans assistance pour les cookies et les moteurs de recherche.

    Cet article suggère les propriétés suivantes de l'objet navigateur du navigateur :

    • Navigator.language (Netscape – Localisation du navigateur)
    • Navigator.browserLanguage (IE-Specific – Browser Localized Language)
    • Navigator.systemLanguage (IE-Specific – Windows OS – Localized Language)
    • Navigator.userLanguage

    Transformez-les en une fonction javascript et vous devriez pouvoir deviner la bonne langue, dans la plupart des cas. Assurez-vous de dégrader gracieusement, alors partagez vos liens de choix de langue, de sorte que s'il n'y a pas de javascript ou que la méthode ne fonctionne pas, l'utilisateur peut encore décider. Si cela fonctionne, il suffit de cacher la div.

    Le seul problème qui se pose sur le côté client est que vous fournissez toutes les langues au client, ou vous devez attendre que le script soit exécuté et que vous avez détecté la langue avant de demander la bonne version. Le fait de servir la version de langue la plus populaire en cas de défaut irrite le plus petit nombre de personnes.

    Edit: J'aimerais soumettre la suggestion des cookies de Ivan, mais je vous assure que l'utilisateur peut toujours modifier la langue plus tard; Pas tout le monde préfère la langue par défaut de leur navigateur.

    Sur Chrome et Firefox 32+, navigator.languages ​​contient une gamme de paramètres régionaux en fonction de la préférence de l'utilisateur et est plus précis que navigator.language, mais pour le rendre compatible avec l'arrière (Testé Chrome / IE / Firefox / Safari), puis utiliser ce:

     function getLang() { if (navigator.languages != undefined) return navigator.languages[0]; else return navigator.language; } 

    Pour Flash, vous disposez de flash.system.Capabilities.language : considérez la détection de la langue du système d'exploitation pour deviner les paramètres régionaux appropriés.

    Tapez: "about: config" dans votre barre d'adresse et sur la recherche de page "general.useragent.locale" Autres utilisations: https://addons.mozilla.org/en-US/firefox/addon/quick-locale-switcher /