Moment: les changements de paramètres régionaux ne fonctionnent pas

Créé le 15 févr. 2016  ·  22Commentaires  ·  Source: moment/moment

Lorsque j'essaie de modifier la valeur des paramètres régionaux, rien ne se passe, pas même une erreur.

      this.$log.log(moment.locale()); // returns 'en'
      this.$log.log(moment.locale('fr')); // set to french but returns 'en'
      this.$log.log(moment.locale()); // of course, still returns 'en' instead of 'fr'

J'ai également essayé depuis la console des outils de développement Chrome :

> moment.locale('fr')
-> "en"
Troubleshooting

Commentaire le plus utile

J'ai ajouté:
import 'moment/locale/fr';

et en utilisant :
moment.locale('fr')

définit maintenant correctement la locale en français.
Il n'est pas dynamique mais il fera le travail pour l'instant.

Je peux le fermer je pense et merci pour toutes les personnes qui ont répondu.
J'espère que ce problème aidera les personnes utilisant TypeScript/Angular/Jspm.

Tous les 22 commentaires

Utilisez-vous un chargeur de module qui peut vous donner une instance différente de moment ?

import m from 'moment';

this.$log.log(m.locale());
this.$log.log(m.locale('fr'));
this.$log.log(m.locale());

this.$log.log(window.moment.locale());
this.$log.log(window.moment.locale('is'));
this.$log.log(window.moment.locale());

Je suis dans un projet angulaire, les modules sont des handles avec JSPM.
Je ne comprends pas ce que vous entendez par "cela peut vous donner un moment différent"

Les 3 lignes sont du vrai code que j'ai essayé, en utilisant le même moment dans la même méthode.
J'ai le même résultat si j'utilise une variable spécifique.

import * as moment from 'moment';

export function registerDateFormatService(appModule: angular.IModule) {
   appModule.service('dateFormatService', DateFormatService);
}

export class DateFormatService {
   constructor(private $log: ng.ILogService) {
   }

   public format(value: moment.Moment, displayFormat: string): string {
      this.$log.log(value.locale());
      this.$log.log(value.locale('fr'));
      this.$log.log(value.locale());
      return value.format(displayFormat);
   }
}

les résultats sont :

angular.js:13239 Moment {_isAMomentObject: true, _i: "2010-10-20 4:30", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object…}_d: Wed Oct 20 2010 00:00:00 GMT+0200 (CEST)_f: "YYYY-MM-DD"_i: "2010-10-20 4:30"_isAMomentObject: true_isUTC: false_isValid: true_locale: Locale_abbr: "en"_ordinalParse: /\d{1,2}(th|st|nd|rd)/_ordinalParseLenient: /\d{1,2}(th|st|nd|rd)|\d{1,2}/ordinal: (number)__proto__: Locale_pf: Object__proto__: Moment
angular.js:13239 en

Importez-vous les données locales ? Quel(s) fichier(s) .js utilisez-vous ?

Voulez-vous dire ajouter une autre importation après la ligne :
importer * comme moment à partir de « moment » ;

ou importer dans le module sens, ici avec JSPM.
(J'ai moment.js et beaucoup de ce qui ressemble à localexx.js comme fr.js dans mon cas dans le dossier des modules jspm.)

Lisez la section « Où l'utiliser » des documents et voyez si l'un de ces scénarios s'applique à vous. En général, vous devez soit utiliser moment-with-locales.js , soit avoir chargé les données locales séparément. La plupart des chargeurs ne récupèrent pas automatiquement le fichier de langue, vous devrez donc peut-être les importer séparément.

Fondamentalement, si vous essayez de passer à une locale qui n'est pas chargée, moment reviendra à la locale en .

Je vais expérimenter ce que je peux avec ça.
J'utilise une simple ligne ajoutée à package.json avec ensuite utilisée par jspm via npm install
"moment": "github:moment/moment@^2.11.2"

Je l'utilise ensuite avec un seul import :
import * as moment from 'moment';

Je l'ai écrit dans ce commentaire pour garder une trace pour les futurs utilisateurs qui pourraient avoir le même usage.
Je posterai le résultat de mes expériences.
Merci

J'ai ajouté:
import 'moment/locale/fr';

et en utilisant :
moment.locale('fr')

définit maintenant correctement la locale en français.
Il n'est pas dynamique mais il fera le travail pour l'instant.

Je peux le fermer je pense et merci pour toutes les personnes qui ont répondu.
J'espère que ce problème aidera les personnes utilisant TypeScript/Angular/Jspm.

Peut-être ajouter ceci à la documentation. J'ai eu le même problème et de plus en plus de gens commencent à utiliser jspm au lieu de Bower.

Heureux que tu es parvenu à le faire fonctionner! J'ai ajouté un problème au référentiel docs. N'hésitez pas à y envoyer un PR.

importer comme ça
importer 'moment/src/locale/fr-ca';
importer « moment/src/locale/en-ca » ;

Merci @younss , ta méthode a fonctionné pour moi. J'utilise Ionic 2 RC 2.

@younss tu es mon sauveur ! nous sommes le 10/10/2017 et la doc ne précise pas ce changement ! mis à jour à partir du moment 2.18 à 2.19.0 et les importations locales ont complètement planté :(
Utilisation de React.
Merci encore!

J'ai eu le même problème lors de la mise à jour vers la 2.19.1
Peut-être que cela pourrait aider :

Supprimer :

  • dossier node_modules
  • package-lock.json

Relancer :
npm installer

Je garde l'import "moment" normalement et j'utilise les paramètres régionaux dans mes sources. Donc pas besoin d'importer comme @younss l'a fait.
Utilisation de VueJS.
Cela a fonctionné pour moi.

Peut-être que le pb est dans le fichier package-lock.json qui ne met pas à jour correctement les données du nœud de moment. En le supprimant et en relançant npm install, créez un nouveau fichier package-lock.json avec toutes les données mises à jour.

@younss , merci , ça marche pour moi, j'utilise parcel-bundler

Cette solution a fonctionné pour moi .. Ici

J'ai ajouté:
importer « moment/locale/fr » ;

Cela a-t-il encore changé ?
J'ai installé:

npm i moment-with-locales-es6
npm i moment

J'ai créé une classe avec une fonction :

import * as moment from 'moment';
import 'moment/locale/pt-br';
import 'moment/locale/fr-ca';

export class DatetimeFormatPipe
    transform(date: string): string {
        moment.locale('pt-BR');
        console.log(moment.locale()); 
        console.log('pt-BR', moment(date).toLocaleString());

        moment.locale('fr-CA');
        console.log(moment.locale());
        console.log('fr-CA', moment(date).toLocaleString());

        return "";
    }
}

Les journaux sont les suivants :

pt-br
pt-BR mar. 20 déc. 2016 10:45:12 GMT+0100
fr-ca
fr-CA mar. 20 déc. 2016 10:45:12 GMT+0100

importer comme ça
importer 'moment/src/locale/fr-ca';
importer « moment/src/locale/en-ca » ;

ça marche pour moi merci !

J'utilise:

import moment from 'moment/dist/moment';
import fr from 'moment/dist/locale/fr';

moment.locale('fr', fr);

et il fonctionne.
Les autres solutions n'ont pas fonctionné pour moi.

import moment from 'moment/dist/moment';
import 'moment/dist/locale/ru';

moment.locale('ru');

Le seul fonctionne pour moi. @ligne13 Merci pour l'astuce !

moment 2.25.2

Salut,

Lors de l'utilisation de 'import 'moment/locale/fr';' dans mon application Node/Express, j'ai eu cette erreur : "SyntaxError: Cannot use import statement outside a module" .

J'ai googlé ceci et j'essaie d'ajouter --experimental-modules --es-module-specifier-resolution=node drapeaux mais maintenant mon application est un gâchis.

Si je ne peux pas ajouter cette importation, existe-t-il un autre moyen de changer la locale ?

Merci

Paul


Spécifications :

  • OS : Ubuntu 20.04 à WSL2
  • Nœud : 12.18.3
  • NMP : 6.14.6
  • Express : 4.16.1
  • MomentJS : 2.27

Salut,

Lors de l'utilisation de 'import 'moment/locale/fr';' dans mon application Node/Express, j'ai eu cette erreur : "SyntaxError: Cannot use import statement outside a module" .

J'ai googlé ceci et j'essaie d'ajouter --experimental-modules --es-module-specifier-resolution=node drapeaux mais maintenant mon application est un gâchis.

Si je ne peux pas ajouter cette importation, existe-t-il un autre moyen de changer la locale ?

Merci

Paul

Spécifications :

  • OS : Ubuntu 20.04 à WSL2
  • Nœud : 12.18.3
  • NMP : 6.14.6
  • Express : 4.16.1
  • MomentJS : 2.27

@pbrissaud

Vous ne pouvez pas encore utiliser 'import' dans node.js. Je ne l'ai pas essayé moi-même, mais je pense que cela fonctionnerait:

require('moment/locale/fr')
moment.locale('fr');
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

RobinvanderVliet picture RobinvanderVliet  ·  3Commentaires

benhathaway picture benhathaway  ·  3Commentaires

slavafomin picture slavafomin  ·  3Commentaires

M-Zuber picture M-Zuber  ·  3Commentaires

dogukankotan picture dogukankotan  ·  3Commentaires