Moment: perubahan lokal tidak berfungsi

Dibuat pada 15 Feb 2016  ·  22Komentar  ·  Sumber: moment/moment

Ketika saya mencoba mengubah nilai lokal, tidak ada yang terjadi, bahkan kesalahan.

      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'

Saya juga mencoba dari konsol alat pengembang Chrome:

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

Komentar yang paling membantu

Saya tambahkan:
import 'moment/locale/fr';

dan menggunakan:
moment.locale('fr')

sekarang setel lokal dengan benar ke perancis.
Ini tidak dinamis tetapi akan melakukan pekerjaan untuk saat ini.

Saya bisa menutupnya saya pikir dan terima kasih untuk semua orang yang menjawab.
Semoga masalah ini akan membantu orang yang menggunakan TypeScript/Angular/Jspm.

Semua 22 komentar

Apakah Anda menggunakan pemuat modul yang mungkin memberi Anda contoh momen yang berbeda?

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

Saya sedang dalam proyek sudut, modul ditangani dengan JSPM.
Saya tidak mengerti apa yang Anda maksud dengan " itu mungkin memberi Anda contoh momen yang berbeda"

3 baris adalah kode nyata yang saya coba, menggunakan momen yang sama dalam metode yang sama.
Saya memiliki hasil yang sama jika saya menggunakan variabel tertentu.

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

hasilnya adalah:

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

Apakah Anda mengimpor data lokal? File .js mana yang Anda gunakan?

Maksud Anda menambahkan impor lain setelah baris:
import * sebagai momen dari 'momen';

atau impor di modul sens, di sini dengan JSPM.
(Saya memiliki moment.js dan banyak yang tampak seperti localexx.js seperti fr.js dalam kasus saya di folder modul jspm.)

Bacalah bagian "Di mana menggunakannya" pada dokumen dan lihat apakah salah satu skenario tersebut berlaku untuk Anda. Secara umum, Anda harus menggunakan moment-with-locales.js , atau memuat data lokal secara terpisah. Sebagian besar loader tidak akan secara otomatis mengambil file bahasa, jadi Anda mungkin perlu mengimpornya secara terpisah.

Pada dasarnya, jika Anda mencoba untuk beralih ke lokal yang tidak dimuat, momen akan kembali ke lokal en .

Saya akan bereksperimen apa yang saya bisa dengan ini.
Saya menggunakan baris sederhana yang ditambahkan ke package.json dengan kemudian digunakan oleh jspm melalui npm install
"moment": "github:moment/moment@^2.11.2"

Saya kemudian menggunakannya dengan satu impor:
import * as moment from 'moment';

Saya menulisnya di komentar ini untuk melacak pengguna masa depan yang mungkin memiliki penggunaan yang sama.
Saya akan memposting hasil percobaan saya.
Terima kasih

Saya tambahkan:
import 'moment/locale/fr';

dan menggunakan:
moment.locale('fr')

sekarang setel lokal dengan benar ke perancis.
Ini tidak dinamis tetapi akan melakukan pekerjaan untuk saat ini.

Saya bisa menutupnya saya pikir dan terima kasih untuk semua orang yang menjawab.
Semoga masalah ini akan membantu orang yang menggunakan TypeScript/Angular/Jspm.

Mungkin menambahkan ini ke dokumentasi. Saya memiliki masalah yang sama dan semakin banyak orang mulai menggunakan jspm alih-alih Bower.

Senang Anda berhasil! Saya menambahkan masalah ke repo dokumen. Jangan ragu untuk mengirim PR di sana.

impor seperti itu
import 'moment/src/locale/fr-ca';
import 'moment/src/locale/en-ca';

Terima kasih @younss , metode Anda berhasil untuk saya. Saya menggunakan Ionic 2 RC 2.

@younss Anda adalah penyelamat saya! ini 10/10/2017 dan dokumen tidak menentukan perubahan ini! diperbarui dari saat 2.18 ke 2.19.0 dan impor lokal benar-benar macet :(
Menggunakan Bereaksi.
Terima kasih lagi!

Saya memiliki masalah yang sama ketika saya memperbarui ke 2.19.1
Mungkin ini bisa membantu:

Menghapus :

  • folder node_modules
  • paket-lock.json

Peluncuran ulang:
instal npm

Saya tetap mengimpor 'momen' secara normal dan menggunakan lokal di sources. Jadi tidak perlu mengimpor seperti yang dilakukan @younss .
Menggunakan VueJS.
Ini berhasil untuk saya.

Mungkin pb ada di file package-lock.json yang tidak memperbarui data node saat dengan benar. Dengan menghapusnya dan meluncurkan kembali npm install, buat file package-lock.json baru dengan semua data diperbarui.

@younss , terima kasih , bekerja untuk saya, saya menggunakan parcel-bundler

Solusi Ini Bekerja untuk saya .. Di sini

Saya tambahkan:
impor 'momen/lokal/fr';

Apakah ini berubah lagi?
saya menginstal:

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

Saya membuat kelas dengan satu fungsi:

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

Lognya adalah sebagai berikut:

pt-br
pt-BR Sel 20 Des 2016 10:45:12 GMT+0100
fr-ca
fr-CA Sel 20 Des 2016 10:45:12 GMT+0100

impor seperti itu
import 'moment/src/locale/fr-ca';
import 'moment/src/locale/en-ca';

Ini bekerja untuk saya terima kasih!

Saya menggunakan:

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

moment.locale('fr', fr);

dan itu berhasil.
Solusi lain tidak berhasil untuk saya.

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

moment.locale('ru');

Satu-satunya bekerja untuk saya. @ligne13 Terima kasih atas petunjuknya!

momen 2.25.2

Hai,

Saat menggunakan 'import 'moment/locale/fr';' di Aplikasi Node/Express saya, saya mendapatkan kesalahan ini: "SyntaxError: Cannot use import statement outside a module" .

Saya mencari di Google ini dan saya mencoba menambahkan --experimental-modules --es-module-specifier-resolution=node flags tetapi sekarang aplikasi saya berantakan.

Jika saya tidak dapat menambahkan impor ini, apakah ada cara lain untuk mengubah lokal?

Terima kasih

Paulus


Spesifikasi:

  • OS: Ubuntu 20.04 melalui WSL2
  • Node : 12.18.3
  • NPM : 6.14.6
  • Ekspres: 4.16.1
  • MomentJS : 2.27

Hai,

Saat menggunakan 'import 'moment/locale/fr';' di Aplikasi Node/Express saya, saya mendapatkan kesalahan ini: "SyntaxError: Cannot use import statement outside a module" .

Saya mencari di Google ini dan saya mencoba menambahkan --experimental-modules --es-module-specifier-resolution=node flags tetapi sekarang aplikasi saya berantakan.

Jika saya tidak dapat menambahkan impor ini, apakah ada cara lain untuk mengubah lokal?

Terima kasih

Paulus

Spesifikasi:

  • OS: Ubuntu 20.04 melalui WSL2
  • Node : 12.18.3
  • NPM : 6.14.6
  • Ekspres: 4.16.1
  • MomentJS : 2.27

@pbrissaud

Anda belum bisa menggunakan 'import' di node.js. Saya belum mencobanya sendiri, tetapi saya rasa ini akan berhasil:

require('moment/locale/fr')
moment.locale('fr');
Apakah halaman ini membantu?
0 / 5 - 0 peringkat