web-dev-qa-db-fra.com

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 définir la langue allemande. Voici ce que j'ai essayé:

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

C’est donner NaN.

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

Cela ne réagit même pas.

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

Pas de changement: cela produit toujours un résultat en anglais.

Comment est-ce possible?

152
doniyor

Vous avez besoin de moment.lang (WARNING: lang() est obsolète depuis l'instant 2.8.0, utilisez locale() à la place. ):

moment.lang("de").format('LLL');

http://momentjs.com/docs/#/i18n/


À partir de la version 2.8.1, moment.locale('de') définit la localisation, mais ne renvoie pas moment. Quelques exemples:

var march = moment('2017-03')
console.log(march.format('MMMM')) // 'March'

moment.locale('de') // returns the new locale, in this case 'de'
console.log(march.format('MMMM')) // 'March' still, since the instance was before the locale was set

var deMarch = moment('2017-03')
console.log(deMarch.format('MMMM')) // 'März'

// You can, however, change just the locale of a specific moment
march.locale('es')
console.log(march.format('MMMM')) // 'Marzo'

En résumé, l'appel de locale sur le global moment définit les paramètres régionaux pour toutes les futures instances de moment, mais ne renvoie pas d'instance de moment. L'appel de locale sur une instance la définit pour cette instance ET renvoie cette instance.

En outre, comme Shiv l’a dit dans les commentaires, assurez-vous d’utiliser "moment-avec-locales.min.js" et non "moment.min.js", sinon cela ne fonctionnerait pas.

233
kalley

J'ai dû importer aussi la langue:

import moment from 'moment'
import 'moment/locale/es'  // without this line it didn't work
moment.locale('es')

Puis utilisez le moment comme vous le feriez normalement

alert(moment(date).fromNow())
103
Agu Dondo

Méthode la plus rapide: installer avec Bower

Je viens d'installer moment avec bower et lié de.js comme ressource javascript dans mon projet html.

bower install moment --save

Vous pouvez également télécharger manuellement les fichiers moment.js et de.js.

Lien 'de.js' dans votre projet

La liaison du de.js dans mon fichier de projet principal a automatiquement modifié les paramètres régionaux pour tous les accès à la classe moment et à ses méthodes.

Il y aura plus besoin maintenant de faire une moment.locale("de"). ou moment.lang("de"). dans le code source.

Liez simplement les paramètres régionaux souhaités comme ceci:

<script src="/bower_components/moment/moment.js"></script>
<script src="/bower_components/moment/locale/de.js"></script>

Vous pouvez également lier les bibliothèques sans le chemin bower_components si vous avez téléchargé le style moment.js des années 1990 via un clic droit, ce qui fonctionne toujours bien dans la plupart des scénarios.

56
nottinhill

Avec momentjs 2.8+, procédez comme suit:

moment.locale("de").format('LLL');

http://momentjs.com/docs/#/i18n/

34
Nashenas

Vous devez ajouter moment.lang(navigator.language) dans votre script.

Et vous devez également ajouter chaque paramètre régional du pays dans lequel vous souhaitez afficher: par exemple, en GB ou en FR, vous devez ajouter le format de ce paramètre dans la bibliothèque moment.js. Un exemple de ce format est disponible dans la documentation de momentjs. Si vous n’ajoutez pas ce format dans moment.js, il sélectionnera TOUJOURS les paramètres régionaux américains car c’est le seul que je voie actuellement.

10
Smart Coder

fin 2017/2018: les réponses anothers ont trop de code ancien à modifier, alors voici ma réponse propre alternative:

avec besoin

let moment = require('moment');
require('moment/locale/fr.js');

avec les importations

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

Utilisation:

moment.locale('fr');
moment().format('D MMM YY');  // Correct, set default global format 
// moment.locale('fr').format('D MMM YY') //Wrong old versions for global default format

avec fuseau horaire

*exiger:

require('moment-range');
require('moment-timezone');

*importation:

import 'moment-range';
import 'moment-timezone';

zones d'utilisation:

const newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
const losAngeles = newYork.clone().tz("America/Los_Angeles");
const london     = newYork.clone().tz("Europe/London");

fonction pour formater la date

const ISOtoDate = function (dateString, format='') {

 // if date is not string use conversion:
 // value.toLocaleDateString() +' '+ value.toLocaleTimeString();

  if ( !dateString ) {
    return '';
  }

  if (format ) {
    return moment(dateString).format(format);
  } else  {
    return moment(dateString);  // It will use default global format
  }  
};
7
stackdave

POUR LES UTILISATEURS DE METEOR:

moment les paramètres régionaux ne sont pas installés par défaut dans meteor, vous obtenez uniquement les paramètres régionaux 'en' avec l'installation par défaut.

Donc, vous utilisez le code comme indiqué correctement dans d'autres réponses:

moment.locale('it').format('LLL');

mais il restera en anglais jusqu'à ce que vous installiez les paramètres régionaux dont vous avez besoin.

Il existe un moyen propre et agréable d’ajouter des paramètres régionaux individuels pour moment dans météore (fourni par rzymek ).

Installez le paquet moment de la manière habituelle de météore avec:

meteor add rzymek:moment

Ensuite, ajoutez simplement les paramètres régionaux dont vous avez besoin, par exemple pour l'italien:

meteor add rzymek:moment-locale-it

Ou si vous voulez vraiment ajouter tous les paramètres régionaux disponibles (ajoute environ 30 000 à votre page):

meteor add rzymek:moment-locales
6
mwarren

À partir du moment 2.18.1 et suivants:

  moment.locale("de");
  var m = moment().format("LLL")
3
apadana

fonctionne bien comme ça: return moment(status.created_at).locale('es').fromNow();

2
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>MomentJS</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    <script type="text/javascript" src="moment.js"></script>
    <script type="text/javascript" src="locale/ne.js"></script>
</head>
<body>
    <script>
        jQuery(document).ready(function($) {
            moment.locale('en'); // default the locale to English
            var localLocale = moment();

            moment.locale('ne'); // change the global locale to Nepalese
            var ne1 = localLocale.format('LLLL');
            var ne2 = moment().format('LLLL');

            $('.ne1').text(ne1);
            $('.ne2').text(ne2);
        });
    </script>
    <p class="ne1"></p>
    <p class="ne2"></p>
</body>
</html>

démo

2
Ram Pukar

Comme j'utilisais webpack avec gulp et mes amis ( ce générateur tout configuré pour moi), j'ai dû modifier le fichier bower.json. J'ai dû remplacer l'importation par défaut pour le paquetage moment et sélectionner le fichier fourni avec toutes les langues:

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

Ceci est mon fichier complet bower.json:

{
  "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"
  }
}
2
GameScripting

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

  1. Vous définissez les paramètres régionaux avec moment.locale('de'), et vous créez un nouvel objet représentant la date d'aujourd'hui par moment() (notez la parenthèse) puis par format('LLL') it. La parenthèse est importante.

Donc ça signifie:

moment.locale('de');
var now = moment();
now.format('LLL');
  1. Pensez également à utiliser moment-with-locale.js. Le fichier contient toutes les informations sur les paramètres régionaux et a une taille de fichier supérieure. Télécharger le dossier locale ne suffit pas. Si nécessaire, remplacez le nom par moment.js. Django refuse simplement de 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 que le charger est nécessaire, c'est donc ma faute.

2
WesternGun

Changer le moment js langue selon la version

Version: 2.8 +

moment.locale ('salut');

Version: 2.5.1

moment.lang ('salut');

2
Anil Nankar

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');
  }
}
2
Dmitry

pour momentjs 2.12 +, procédez comme suit:

moment.updateLocale('de');

Notez également que vous devez utiliser moment.updateLocale(localeName, config) pour modifier un environnement local existant. moment.defineLocale(localeName, config) ne doit être utilisé que pour créer un nouveau paramètre régional.

1
Francisco Costa

Oups glisser du stylo. Je résoudrais ceci: var moment = function(x) { return moment(x).locale('de'); } Les autres moyens ne semblent pas vraiment tenir/tenir dans certaines conditions (pour moi).

0
Rob Jens