Page d'accueil » Codage » Une manière définitive de mettre en forme des dates pour des sites internationaux

    Une manière définitive de mettre en forme des dates pour des sites internationaux

    Les formats de date varient en fonction de la région et de la langue. Il est donc toujours utile de trouver un moyen d’afficher les dates aux utilisateurs, en fonction de leur langue et de leur région..

    En décembre 2012, l'ECMA a publié les spécifications de l'Internationalisation API for JavaScript. L'API d'internationalisation nous aide à afficher certaines données en fonction de la langue et des spécifications de la peau. Il peut être utilisé pour identifier les devises, les fuseaux horaires et plus.

    Dans ce post, nous allons examiner formatage de date en utilisant cette API.

    Connaître les paramètres régionaux de l'utilisateur

    Pour afficher la date selon les paramètres régionaux préférés de l'utilisateur, nous devons d'abord connaître les paramètres régionaux. Actuellement, le moyen le plus sûr de le savoir est de demander à l'utilisateur; permettre aux utilisateurs de sélectionner les paramètres de langue et de région de leur choix dans la page Web.

    Mais si ce n’est pas une option, vous pouvez interpréter le Accepter la langue demander en-tête ou lire le navigator.language(pour Chrome et Firefox) ou navigator.browserLanguage(pour IE) valeurs.

    Sachez que toutes ces options ne renvoient pas la langue préférée de l'interface utilisateur du navigateur..

     var language_tag = window.navigator.browserLanguage || window.navigator.language || "en"; // retourne les balises de langue comme 'en-GB' 

    Vérifier l'API d'internationalisation

    Pour savoir si le navigateur prend en charge l’internationalisation API ou non, nous pouvons vérifier la présence de l’objet global. Intl.

     if (window.hasOwnPropertyâ €‹("Intl") && typeof Intl === "objet") // L'API d'internationalisation est présente, laissez-nous l'utiliser 

    le Intl objet

    Intl est un objet global pour l’utilisation de l’API d’internationalisation. Il a trois propriétés qui sont des constructeurs pour trois objets à savoir Collateur, Format de nombre, et DateTimeFormat.

    L'objet que nous allons utiliser est DateTimeFormat ce qui nous aidera à formater la date et l'heure selon différentes langues.

    le DateTimeFormat objet

    le DateTimeFormat constructeur prend deux arguments optionnels;

    • lieux - une chaîne ou un tableau de chaînes représentant les balises de langue, par exemple; “de” pour la langue allemande, “en-GB” pour l'anglais utilisé au Royaume-Uni. Si une balise de langue n'est pas mentionnée, les paramètres régionaux par défaut seront ceux du moteur d'exécution..
    • options - un objet dont les propriétés sont utilisées pour personnaliser le formateur. Il a les propriétés suivantes:
    Propriété La description Valeurs possibles
    journée Jour du mois “2 chiffres”, “numérique”
    ère La date tombe, ex: BC “étroit”, “court”, “longue”
    formatMatcher L'algorithme utilisé pour la correspondance de format “de base”, “meilleur ajustement”[Défaut]
    heure Représente les heures dans le temps “2 chiffres”, “numérique”
    heure12 Indique le format 12 heures (vrai) ou format 24 heures (faux) vrai, faux
    localeMatcher L'algorithme utilisé pour la correspondance des paramètres régionaux “Chercher”, “meilleur ajustement”[Défaut]
    minute Minutes dans le temps “2 chiffres”, “numérique”
    mois Mois dans un an “2 chiffres”, “numérique”, “étroit”, “court”, “longue”
    seconde Secondes dans le temps “2 chiffres”, “numérique”
    fuseau horaire Fuseau horaire à appliquer “UTC”, la valeur par défaut est le fuseau horaire d'exécution
    timeZoneName Fuseau horaire de la date “court”, “longue”
    jour de la semaine Jour de la semaine “étroit”, “court”, “longue”
    année Année de la date “2 chiffres”, “numérique”

    Exemple:

     var formatter = new Intl.DateTimeFormat ('en-GB'); / * renvoie un formateur pouvant formater une date au format de date anglais britannique * / 
     var options = jour de la semaine: 'short'; var formatter = new Intl.DateTimeFormat ('en-GB', options); / * renvoie un formateur pouvant formater une date au format de date anglais britannique * ainsi que le jour de la semaine en notation abrégée telle que "Jeu" pour jeudi * / 

    le format une fonction

    L'instance de la DateTimeFormat l'objet a un accesseur de propriété (getter) appelé format qui retourne une fonction qui formate un Rendez-vous amoureux basé sur lieux et options trouvé dans le DateTimeFormat exemple.

    La fonction prend un Rendez-vous amoureux objet ou indéfini comme argument optionnel et retourne un chaîne dans le format de date demandé.

    Remarque: Si l'argument est soit indéfini ou non fourni alors il retourne la valeur de Date.now () dans le format de date demandé.

    Voici la syntaxe:

     new Intl.DateTimeFormat (). format () // retournera la date actuelle au format de date d'exécution 

    Et maintenant, codons un formatage de date simple.

    Changeons la langue et voyons le résultat.

    Maintenant, il est temps d'examiner les options.

    le toLocaleDateString méthode

    Au lieu d’utiliser un formateur comme dans les exemples ci-dessus, vous pouvez également utiliser Date.prototype.toLocaleString de la même manière avec le lieux et options arguments, ils sont similaires mais il est recommandé d’utiliser le DateTimeFormat object quand il y a trop de dates dans votre application.

     var mydate = new Date ('2015/04/22'); var options = jour de la semaine: "court", année: "numérique", mois: "long", jour: "numérique"; console.log (mydate.toLocaleDateString ('en-GB', options)); // renvoie "mer. 22 avril 2015" 

    Tester si le lieux sont pris en charge

    Pour vérifier la prise en charge lieux, nous pouvons utiliser la méthode pris en chargeLocalesOf de DateTimeFormat objet. Il renvoie un tableau de tous les paramètres régionaux pris en charge ou un tableau vide si aucun des paramètres régionaux n'est pris en charge..

    Pour les tests, ajoutons une locale fictive “blabla” dans la liste des lieux à vérifier.

     console.log (Intl.DateTimeFormat.supportedLocalesOf (["zh", "blah", "fa-pes"])); // retourne Array ["zh", "fa-pes"] 

    Prise en charge du navigateur

    À la fin d'avril 2015, les principaux navigateurs prennent en charge l'API d'internationalisation..

    Références

    • ECMA International: Spécification de l'API d'internationalisation ECMAScript
    • IANA: Registre des sous-étiquettes de langue
    • Le coin de Norbert: L'API d'internationalisation d'ECMAScript