web-dev-qa-db-fra.com

Comment fonctionne l'internationalisation en JavaScript?

Je me demande comment traiter l'internationalisation en JavaScript. J'ai googlé mais je n'obtiens pas de réponses convaincantes pour:

  • Est-ce que JavaScript a un support natif pour l'internationalisation?
  • Qu'est-ce que i18n en JavaScript?
  • Comment gérer les calendriers, les devises, les dates, etc.?

J'ai déjà lu Internationalisation à l'intérieur de JavaScript .

139
rajakvk

La prise en charge de la localisation dans les navigateurs existants est médiocre. À l'origine, cela était dû à des phrases dans les spécifications de langage ECMAScript qui ressemblaient à ceci:

Number.prototype.toLocaleString ()
Produit une valeur de chaîne qui représente la valeur du nombre mis en forme conformément aux conventions des paramètres régionaux de l’environnement hôte. Cette fonction dépend de la mise en oeuvre et est permise, mais non encouragée, de renvoyer la même chose que toString .

Chaque méthode de localisation définie dans la spécification est définie comme "dépendant 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 milliers (parfait pour les chaînes de devise). 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 d'internationalisation ECMAScript , une nouvelle norme complétant la spécification du langage ECMAScript, fournit de bien meilleurs résultats. prise en charge de la comparaison de chaînes, du formatage des nombres et du formatage de la date et de l'heure; il corrige également les fonctions correspondantes dans les spécifications de langage. 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 des environnements où elle n’existe pas encore.

Déterminer la langue préférée de l'utilisateur reste un problème, car il n'y a aucune spécification pour obtenir la langue actuelle. Chaque navigateur implémente une méthode pour obtenir une chaîne de langue, mais celle-ci peut être basée sur la langue du système d'exploitation de l'utilisateur ou uniquement sur la langue du navigateur:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

Une bonne solution consiste à exporter l'en-tête Accept-Language du serveur vers le client. S'il est au format JavaScript, il peut être transmis aux constructeurs de l'Internationalization API, qui choisiront automatiquement les paramètres régionaux les plus adaptés (ou les premiers pris en charge).

En bref, vous devez faire beaucoup de travail vous-même ou utiliser un framework/library , car vous ne pouvez pas compter sur le navigateur pour le faire à votre place.

Diverses librairies et plugins pour la localisation:

N'hésitez pas à ajouter/modifier.

157
Andy E

Mozilla a récemment publié l'impressionnant L20n ou localisation 2.0. Dans leurs propres mots, L20n est

un langage de script open source, spécifique à la localisation, utilisé pour traiter le genre, les pluriels, les conjugaisons et la plupart des autres éléments originaux du langage naturel.

Leur implémentation js est sur le github L20n repository.

11
ashwoods

Vous pouvez également essayer une autre bibliothèque - https://github.com/wikimedia/jquery.i18n .

En plus du remplacement de paramètres et de plusieurs formes plurielles, il prend en charge le genre, une caractéristique plutôt unique des règles de grammaire personnalisées dont certaines langues ont besoin.

0
Amir E. Aharoni

Une partie est native, le reste est disponible dans les bibliothèques.

Par exemple, Datejs est une bonne bibliothèque de dates internationale.

Pour le reste, il s’agit de la traduction linguistique, et JavaScript est nativement compatible Unicode (ainsi que tous les principaux navigateurs).

0
Luca Matteis