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"
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
.
Veja também "Carregando locales no navegador" .
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 :
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:
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');
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.