322 votes

Comment changer la langue de moment.js ?

J'essaie de changer la langue de la date qui est définie par moment.js. La langue par défaut est l'anglais, mais je veux changer la langue allemande. Voici ce que j'ai essayé :

var now = moment().format("LLL").lang("de");

Il donne NaN .

var now = moment("de").format("LLL");

Ce n'est même pas une réaction.

var now = moment().format("LLL", "de");

Pas de changement : le résultat est toujours en anglais.

Comment cela est-il possible ?

3voto

GameScripting Points 2922

Comme j'utilisais webpack avec gulp et ses amis ( ce générateur a tout mis en place pour moi), j'ai dû modifier le fichier bower.json. J'ai dû remplacer l'importation par défaut pour le paquet moment et sélectionner le fichier qui vient avec toutes les langues :

"overrides": {
  "moment": {
    "main": [
        "min/moment-with-locales.min.js"
    ]
  }
}

Voici mon fichier bower.json complet :

{
  "name": "html5",
  "version": "0.0.0",
  "dependencies": {
    "angular-animate": "~1.4.2",
    "angular-cookies": "~1.4.2",
    "angular-touch": "~1.4.2",
    "angular-sanitize": "~1.4.2",
    "angular-messages": "~1.4.2",
    "angular-ui-router": "~0.2.15",
    "bootstrap-sass": "~3.3.5",
    "angular-bootstrap": "~0.13.4",
    "malarkey": "yuanqing/malarkey#~1.3.1",
    "angular-toastr": "~1.5.0",
    "moment": "~2.10.6",
    "animate.css": "~3.4.0",
    "angular": "~1.4.2",
    "lodash": "^4.13.1",
    "angular-moment": "^0.10.3",
    "angularLocalStorage": "ngStorage#^0.3.2",
    "ngstorage": "^0.3.10"
  },
  "devDependencies": {
    "angular-mocks": "~1.4.2"
  },
  "overrides": {
    "bootstrap-sass": {
      "main": [
        "assets/stylesheets/_bootstrap.scss",
        "assets/fonts/bootstrap/glyphicons-halflings-regular.eot",
        "assets/fonts/bootstrap/glyphicons-halflings-regular.svg",
        "assets/fonts/bootstrap/glyphicons-halflings-regular.ttf",
        "assets/fonts/bootstrap/glyphicons-halflings-regular.woff",
        "assets/fonts/bootstrap/glyphicons-halflings-regular.woff2"
      ]
    },
    "moment": {
      "main": [
          "min/moment-with-locales.min.js"
      ]
    }
  },
  "resolutions": {
    "angular": "~1.4.2"
  }
}

3voto

Dmitry Points 165

J'utilise angular2-moment, mais l'utilisation doit être similaire.

import { MomentModule } from "angular2-moment";
import moment = require("moment");

export class AppModule {

  constructor() {
    moment.locale('ru');
  }
}

3voto

WesternGun Points 1621

Pour moi, il y a quelques changements à faire (ver. 2.20)

  1. Vous définissez les paramètres linguistiques à l'aide de la fonction moment.locale('de') et vous créez un nouvel objet représentant la date de maintenant par moment() (notez la parenthèse) et ensuite format('LLL') il. La parenthèse est importante.

Cela signifie donc que :

moment.locale('de');
var now = moment();
now.format('LLL');
  1. N'oubliez pas non plus d'utiliser moment-with-locale.js . Le fichier contient toutes les informations locales et a une taille plus importante. Télécharger le fichier locale ne suffit pas. Si nécessaire, modifiez le nom pour qu'il soit moment.js . Django refuse de se charger moment-with-locale.js dans mon cas.

EDIT : Il s'est avéré qu'il n'est pas nécessaire de renommer le fichier. J'ai juste oublié de l'invoquer dans la page pour que Django ne pense pas qu'il est nécessaire de le charger, donc c'est ma faute.

1voto

Rob Jens Points 64

Oups, lapsus de la plume. Je résoudrais ce problème : var moment = function(x) { return moment(x).locale('de'); } Les autres méthodes ne semblent pas vraiment coller/tenir dans les conditions (pour moi).

1voto

Yanick Rochon Points 18537

Pour ceux qui travaillent dans des environnements asynchrones, moment se comporte de manière inattendue lors du chargement des locales à la demande.

Au lieu de

await import('moment/locale/en-ca');
moment.locale('en-ca');

inverser l'ordre

moment.locale('en-ca');
await import('moment/locale/en-ca');

Il semble que les locales soient chargées dans la locale actuellement sélectionnée, ce qui a pour effet de remplacer toutes les informations relatives aux locales précédemment définies. Le fait de changer de locale d'abord, puis de charger les informations relatives à la locale n'entraîne donc pas ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X