Moment: mudanças de local não funcionam

Criado em 15 fev. 2016  ·  22Comentários  ·  Fonte: moment/moment

Quando tento alterar o valor da localidade, nada acontece, nem mesmo erro.

      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'

Eu também tentei no console de ferramentas de desenvolvedor do Chrome:

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

Comentários muito úteis

Eu adicionei:
import 'moment/locale/fr';

e usando:
moment.locale('fr')

agora define corretamente o local para francês.
Não é dinâmico, mas fará o trabalho por enquanto.

Eu posso fechar eu acho e obrigado por todas as pessoas que responderam.
Espero que este problema ajude as pessoas que usam TypeScript / Angular / Jspm.

Todos 22 comentários

Você está usando um carregador de módulo que pode estar dando a você uma instância diferente do 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());

Estou em um projeto angular, os módulos são manipulados com JSPM.
Não entendo o que você quer dizer com "isso pode estar dando a você um momento diferente"

As 3 linhas são códigos reais que experimentei, usando o mesmo momento e o mesmo método.
Tenho o mesmo resultado se usar uma variável 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);
   }
}

os resultados são:

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

Você está importando os dados de localidade? Qual (is) arquivo (s) .js você está usando?

Você quer dizer adicionar outra importação após a linha:
importar * como momento de 'momento';

ou importe no módulo sens, aqui com JSPM.
(Tenho moment.js e muito do que parece localexx.js, como fr.js no meu caso, na pasta de módulos jspm.)

Leia a seção "Onde usar" dos documentos e veja se alguma dessas situações se aplica a você. Em geral, você precisa usar moment-with-locales.js ou carregar os dados de localidade separadamente. A maioria dos carregadores não seleciona automaticamente o arquivo de idioma, portanto, pode ser necessário importá-los separadamente.

Basicamente, se você tentar mudar para um local que não está carregado, o momento reverterá para o local en .

Vou experimentar o que puder com isso.
Estou usando uma linha simples adicionada a package.json com é usado por jspm por meio de npm install
"moment": "github:moment/moment@^2.11.2"

Eu então o uso com uma única importação:
import * as moment from 'moment';

Eu escrevi neste comentário para manter um controle para futuros usuários que podem ter o mesmo uso.
Vou postar o resultado dos meus experimentos.
Obrigado

Eu adicionei:
import 'moment/locale/fr';

e usando:
moment.locale('fr')

agora define corretamente o local para francês.
Não é dinâmico, mas fará o trabalho por enquanto.

Eu posso fechar eu acho e obrigado por todas as pessoas que responderam.
Espero que este problema ajude as pessoas que usam TypeScript / Angular / Jspm.

Talvez adicione isso à documentação. Eu tive o mesmo problema e mais e mais pessoas começam a usar jspm em vez do Bower.

Feliz por você fazer isso funcionar! Eu adicionei um problema ao repositório de documentos. Sinta-se à vontade para enviar um PR para lá.

importar assim
importar 'momento / src / locale / fr-ca';
import 'moment / src / locale / en-ca';

Obrigado @younss , seu método funcionou para mim. Estou usando o Ionic 2 RC 2.

@younss você é meu salvador! é 10/10/2017 e os documentos não especificam esta alteração! atualizado do momento 2.18 para 2.19.0 e as importações de localidades travaram completamente :(
Usando React.
Obrigado novamente!

Eu tive o mesmo problema quando atualizei para o 2.19.1
Talvez isso possa ajudar:

Retirar :

  • pasta node_modules
  • package-lock.json

Relançar:
npm install

Eu continuo importando 'momento' normalmente e uso locale em minhas fontes. Portanto, não há necessidade de importar como fez @younss .
Usando o VueJS.
Isso funcionou para mim.

Talvez o pb esteja no arquivo package-lock.json que não atualiza os dados do nó de momento corretamente. Removendo-o e reiniciando o npm install, ele cria um novo arquivo package-lock.json com todos os dados atualizados.

@younss , obrigado, funciona para mim, estou usando o parcel-bundler

Esta solução funcionou para mim .. Aqui

Eu adicionei:
import 'moment / locale / fr';

Isso mudou de novo?
Eu instalei:

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

Eu criei uma classe com uma função:

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

Os registros são os seguintes:

pt-br
pt-BR Ter 20 de dezembro de 2016 10:45:12 GMT + 0100
fr-ca
fr-CA Ter. 20 de dezembro de 2016 10:45:12 GMT + 0100

importar assim
importar 'momento / src / locale / fr-ca';
import 'moment / src / locale / en-ca';

Funciona para mim, obrigado!

Eu uso:

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

moment.locale('fr', fr);

e funciona.
Outras soluções não funcionaram para mim.

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

moment.locale('ru');

O único funciona para mim. @ ligne13 Obrigado pela dica!

momento 2.25.2

Oi,

Ao usar 'import' moment / locale / fr ';' em meu aplicativo Node / Express, recebo este erro: "SyntaxError: Não é possível usar a instrução de importação fora de um módulo" .

Pesquisei isso no Google e tento adicionar --experimental-modules --es-module-specifier-resolution = sinalizadores de

Se eu não conseguir adicionar essa importação, há outra maneira de alterar o local?

Obrigado

Paulo


Especificações:

  • SO: Ubuntu 20.04 a WSL2
  • Nó: 12.18.3
  • NPM: 6.14.6
  • Expresso: 4.16.1
  • MomentJS: 2.27

Oi,

Ao usar 'import' moment / locale / fr ';' em meu aplicativo Node / Express, recebo este erro: "SyntaxError: Não é possível usar a instrução de importação fora de um módulo" .

Pesquisei isso no Google e tento adicionar --experimental-modules --es-module-specifier-resolution = sinalizadores de

Se eu não conseguir adicionar essa importação, há outra maneira de alterar o local?

Obrigado

Paulo

Especificações:

  • SO: Ubuntu 20.04 a WSL2
  • Nó: 12.18.3
  • NPM: 6.14.6
  • Expresso: 4.16.1
  • MomentJS: 2.27

@pbrissaud

Você não pode usar 'import' em node.js ainda. Eu mesmo não tentei, mas acho que funcionaria:

require('moment/locale/fr')
moment.locale('fr');
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

dbshwang picture dbshwang  ·  3Comentários

danieljsinclair picture danieljsinclair  ·  3Comentários

RobinvanderVliet picture RobinvanderVliet  ·  3Comentários

tanepiper picture tanepiper  ·  3Comentários

Shoroh picture Shoroh  ·  3Comentários