Comment fonctionne l'internationalisation en JavaScript?

143

Je me demande comment gérer l'internationalisation en JavaScript. J'ai cherché sur Google mais je n'obtiens pas de réponses convaincantes pour:

  • JavaScript prend-il en charge nativement l'internationalisation?
  • Qu'est-ce que i18n en JavaScript?
  • Comment gérer les calendriers, les devises, les dates, etc.?

J'ai déjà lu l' internationalisation dans JavaScript .

rajakvk
la source
Microsoft a récemment publié un plugin de globalisation jquery. Les détails sont ici
Adeel

Réponses:

161

La prise en charge de la localisation dans les anciens navigateurs est médiocre. À l'origine, cela était dû à des phrases dans la ECMAScriptspé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:

  • Autres:

N'hésitez pas à ajouter / modifier.

Andy E
la source
13
Merci à toutes les personnes qui ont contribué; Je n'aurais jamais pensé pouvoir apprendre quelque chose en lisant mes anciennes réponses. Je suis heureux de voir la mise à jour de la spécification de l'API d'internationalisation, c'est vraiment génial et je viens de la tester dans Chrome.
Andy E
1
Merci pour l'excellente compilation. Sur une note positive, il semble que Mozilla pourrait bientôt livrer un toLocaleString () moderne - éventuellement FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams
1
i18next.com est maintenant livré avec une gestion de la traduction construite sur top locize.com - cela pourrait être une grande victoire si vous devez résoudre le processus de traduction complet - pas seulement instrumenter votre code pour i18n. Plus a une belle fonctionnalité d'édition Incontext ...
jamuhl
12

Mozilla a récemment publié l'impressionnant L20n ou localisation 2.0. Selon 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 se trouve sur le référentiel github L20n.

bois de frêne
la source
J'ai commencé un projet qui nécessite une localisation et nous avons décidé d'utiliser aussi L20n;). J'ai donc écrit une première version d'un plugin L20n pour RequireJS ( github.com/fernandogmar/L20n-RequireJS ) au cas où vous utiliseriez RequireJS, j'espère que cela vous sera également utile. Toute suggestion sera la bienvenue.
Fernando Gm
0

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

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

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

Luca Matteis
la source
0

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.

Amir E. Aharoni
la source