La prise en charge de la localisation dans les anciens navigateurs est médiocre. À l'origine, cela était dû à des phrases dans la ECMAScript
spécification de langue qui ressemblent à ceci:
Number.prototype.toLocaleString ()
Produit une valeur de chaîne qui représente la valeur du Number formaté selon les conventions des paramètres régionaux actuels de l'environnement hôte. Cette fonction dépend de l'implémentation, et il est permis, mais pas encouragé, qu'elle renvoie la même chose que toString .
Chaque méthode de localisation définie dans la spécification est définie comme "dépendante de l'implémentation", ce qui entraîne de nombreuses incohérences. Dans ce cas, Chrome Opera et Safari renverraient la même chose que .toString()
. Firefox et IE renverront des chaînes au format local, et IE inclut même un séparateur de mille (parfait pour les chaînes de devises). Chrome a récemment été mis à jour pour renvoyer une chaîne séparée par des milliers, mais sans décimale fixe.
Pour les environnements modernes , la spécification de l'API ECMAScript Internationalization , une nouvelle norme qui complète la spécification du langage ECMAScript, fournit une bien meilleure prise en charge pour la comparaison de chaînes, le formatage des nombres et le formatage de la date et de l'heure; il corrige également les fonctions correspondantes dans la spécification de langue. Une introduction peut être trouvée ici . Les implémentations sont disponibles en:
- Chrome 24
- Firefox 29
- Internet Explorer 11
- Opéra 15
Il existe également une implémentation de compatibilité, Intl.js , qui fournira l'API dans les environnements où elle n'existe pas déjà.
La détermination de la langue préférée de l'utilisateur reste un problème car il n'y a pas de spécification pour obtenir la langue actuelle. Chaque navigateur implémente une méthode pour obtenir une chaîne de langue, mais cela peut être basé sur la langue du système d'exploitation de l'utilisateur ou simplement sur la langue du navigateur:
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
Une bonne solution pour cela consiste à vider l'en-tête Accept-Language du serveur vers le client. S'il est formaté en JavaScript, il peut être transmis aux constructeurs de l'API d'internationalisation, qui choisiront automatiquement le meilleur paramètre régional (ou le premier pris en charge).
En bref, vous devez effectuer une grande partie du travail vous-même, ou utiliser un framework / une bibliothèque , car vous ne pouvez pas compter sur le navigateur pour le faire à votre place.
Diverses bibliothèques et plugins pour la localisation:
N'hésitez pas à ajouter / modifier.