Moment: los cambios de configuración regional no funcionan

Creado en 15 feb. 2016  ·  22Comentarios  ·  Fuente: moment/moment

Cuando intento cambiar el valor de la configuración regional, no sucede nada, ni siquiera un error.

      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'

También probé desde la consola de herramientas para desarrolladores de Chrome:

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

Comentario más útil

Yo añadí:
import 'moment/locale/fr';

y usando:
moment.locale('fr')

ahora establece correctamente la configuración regional en francés.
No es dinámico, pero funcionará por ahora.

Puedo cerrarlo creo y gracias por todas las personas que respondieron.
Espero que este problema ayude a las personas que usan TypeScript / Angular / Jspm.

Todos 22 comentarios

¿Está utilizando un cargador de módulos que puede brindarle una instancia diferente de momento?

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());

Estoy en un proyecto angular, los módulos son manejadores con JSPM.
No entiendo lo que quieres decir con "eso puede darte una instancia diferente de momento".

Las 3 líneas son código real que probé, usando el mismo momento en el mismo método.
Tengo el mismo resultado si uso una variable específica.

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);
   }
}

los resultados son:

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

¿Está importando los datos de la configuración regional? ¿Qué archivo (s) .js está utilizando?

¿Quiere decir agregar otra importación después de la línea:
importar * como momento de 'momento';

o importar en el módulo sens, aquí con JSPM.
(Tengo moment.js y mucho de lo que parece localexx.js como fr.js en mi caso en la carpeta de módulos jspm).

Lea la sección "Dónde usarlo" de los documentos y vea si alguno de esos escenarios se aplica a usted. En general, debe usar moment-with-locales.js o haber cargado los datos de la configuración regional por separado. La mayoría de los cargadores no recogerán automáticamente el archivo de idioma, por lo que es posible que deba importarlos por separado.

Básicamente, si intenta cambiar a una configuración regional que no está cargada, el momento volverá a la configuración regional en .

Experimentaré lo que pueda con esto.
Estoy usando una línea simple agregada a package.json y luego la usa jspm a través de npm install
"moment": "github:moment/moment@^2.11.2"

Luego lo uso con una sola importación:
import * as moment from 'moment';

Lo escribí en este comentario para realizar un seguimiento de los futuros usuarios que puedan tener el mismo uso.
Publicaré el resultado de mis experimentos.
Gracias

Yo añadí:
import 'moment/locale/fr';

y usando:
moment.locale('fr')

ahora establece correctamente la configuración regional en francés.
No es dinámico, pero funcionará por ahora.

Puedo cerrarlo creo y gracias por todas las personas que respondieron.
Espero que este problema ayude a las personas que usan TypeScript / Angular / Jspm.

Quizás agregue esto a la documentación. Tuve el mismo problema y cada vez más personas comienzan a usar jspm en lugar de Bower.

¡Me alegro de que lo hayas hecho funcionar! Agregué un problema al repositorio de documentos. No dude en enviar un PR allí.

importar así
importar 'momento / src / locale / fr-ca';
importar 'momento / src / locale / en-ca';

Gracias @younss , tu método funcionó para mí. Estoy usando Ionic 2 RC 2.

@younss eres mi salvador! ¡Es 10/10/2017 y los documentos no especifican este cambio! actualizado desde el momento 2.18 al 2.19.0 y las importaciones de configuraciones regionales fallaron por completo :(
Usando React.
¡Gracias de nuevo!

Tuve el mismo problema cuando actualicé a 2.19.1
Quizás esto podría ayudar:

Eliminar :

  • carpeta node_modules
  • package-lock.json

Relanzar:
npm install

Sigo import 'moment' normalmente y uso la configuración regional en mis fuentes. Así que no es necesario importar como lo hizo
Usando VueJS.
Esto funcionó para mí.

Tal vez el pb esté en el archivo package-lock.json que no actualiza correctamente los datos del nodo de momento. Al eliminarlo y volver a iniciar npm install, cree un nuevo archivo package-lock.json con todos los datos actualizados.

@younss , gracias, funciona para mí, estoy usando parcel-bundler

Esta solución funcionó para mí ... Aquí

Yo añadí:
importar 'momento / locale / fr';

¿Esto cambió de nuevo?
Lo instalé:

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

Creé una clase con una función:

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 "";
    }
}

Los registros son los siguientes:

pt-br
pt-BR Martes 20 de diciembre de 2016 10:45:12 GMT + 0100
fr-ca
fr-CA Martes 20 de diciembre de 2016 10:45:12 GMT + 0100

importar así
importar 'momento / src / locale / fr-ca';
importar 'momento / src / locale / en-ca';

Funciona para mi gracias!

Yo suelo:

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

moment.locale('fr', fr);

y funciona.
Otras soluciones no funcionaron para mí.

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

moment.locale('ru');

Lo único que funciona para mí. @ ligne13 ¡ Gracias por la pista!

momento 2.25.2

Hola,

Al usar 'import' moment / locale / fr ';' en mi aplicación Node / Express, recibí este error: "SyntaxError: No se puede usar la declaración de importación fuera de un módulo" .

Busqué en Google e intento agregar --experimental-modules --es-module-specifier-resolution = banderas de

Si no puedo agregar esta importación, ¿hay otra forma de cambiar la configuración regional?

Gracias

Pablo


Especificaciones:

  • SO: Ubuntu 20.04 a WSL2
  • Nodo: 12.18.3
  • NPM: 6.14.6
  • Expreso: 4.16.1
  • MomentJS: 2,27

Hola,

Al usar 'import' moment / locale / fr ';' en mi aplicación Node / Express, recibí este error: "SyntaxError: No se puede usar la declaración de importación fuera de un módulo" .

Busqué en Google e intento agregar --experimental-modules --es-module-specifier-resolution = banderas de

Si no puedo agregar esta importación, ¿hay otra forma de cambiar la configuración regional?

Gracias

Pablo

Especificaciones:

  • SO: Ubuntu 20.04 a WSL2
  • Nodo: 12.18.3
  • NPM: 6.14.6
  • Expreso: 4.16.1
  • MomentJS: 2,27

@pbrissaud

Todavía no puede usar 'importar' en node.js. No lo he probado yo mismo, pero creo que esto funcionaría:

require('moment/locale/fr')
moment.locale('fr');
¿Fue útil esta página
0 / 5 - 0 calificaciones