Moment: لا تعمل التغييرات المحلية

تم إنشاؤها على ١٥ فبراير ٢٠١٦  ·  22تعليقات  ·  مصدر: moment/moment

عندما أحاول تغيير القيمة المحلية ، لا يحدث شيء ، ولا حتى الخطأ.

      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'

لقد حاولت أيضًا من وحدة تحكم أدوات مطوري Chrome:

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

التعليق الأكثر فائدة

أضفت:
import 'moment/locale/fr';

وباستخدام:
moment.locale('fr')

يقوم الآن بتعيين الإعدادات المحلية إلى الفرنسية بشكل صحيح.
إنها ليست ديناميكية ولكنها ستؤدي المهمة في الوقت الحالي.

يمكنني إغلاقها على ما أعتقد وأشكر جميع الأشخاص الذين أجابوا.
آمل أن تساعد هذه المشكلة الأشخاص الذين يستخدمون TypeScript / Angular / Jspm.

ال 22 كومينتر

هل تستخدم محمل وحدة قد يمنحك حالة مختلفة من اللحظة؟

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

أنا في مشروع زاوي ، الوحدات النمطية مقابض مع JSPM.
لا أفهم ما تقصده بعبارة "قد يمنحك ذلك حالة مختلفة من اللحظة"

الثلاثة أسطر هي رمز حقيقي جربته ، باستخدام نفس اللحظة وبنفس الطريقة.
أحصل على نفس النتيجة إذا استخدمت متغيرًا معينًا.

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

النتائج هي:

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

هل تقوم باستيراد البيانات المحلية؟ ما هو ملف (ملفات) .js الذي تستخدمه؟

هل تقصد إضافة استيراد آخر بعد السطر:
استيراد * كلحظة من "لحظة" ؛

أو الاستيراد في وحدة الاستشعار ، هنا مع JSPM.
(لديّ moment.js والكثير مما يشبه localexx.js مثل fr.js في حالتي في مجلد وحدات jspm.)

اقرأ قسم "مكان استخدامه" في المستندات وتحقق مما إذا كان أي من هذه السيناريوهات ينطبق عليك. بشكل عام ، تحتاج إما إلى استخدام moment-with-locales.js ، أو تحميل بيانات اللغة بشكل منفصل. لن تلتقط معظم برامج التحميل ملف اللغة تلقائيًا ، لذلك قد تحتاج إلى استيرادها بشكل منفصل.

بشكل أساسي ، إذا حاولت التبديل إلى لغة لم يتم تحميلها ، فستعود اللحظة إلى الإعدادات المحلية en .

سأجرب ما يمكنني فعله مع هذا.
أنا أستخدم سطرًا بسيطًا مضافًا إلى package.json مع ثم يتم استخدامه بواسطة jspm من خلال تثبيت npm
"moment": "github:moment/moment@^2.11.2"

ثم أستخدمه مع استيراد واحد:
import * as moment from 'moment';

لقد كتبته في هذا التعليق لتتبع المستخدمين في المستقبل الذين قد يكون لديهم نفس الاستخدام.
سوف أنشر نتيجة تجاربي.
شكرا

أضفت:
import 'moment/locale/fr';

وباستخدام:
moment.locale('fr')

يقوم الآن بتعيين الإعدادات المحلية إلى الفرنسية بشكل صحيح.
إنها ليست ديناميكية ولكنها ستؤدي المهمة في الوقت الحالي.

يمكنني إغلاقها على ما أعتقد وأشكر جميع الأشخاص الذين أجابوا.
آمل أن تساعد هذه المشكلة الأشخاص الذين يستخدمون TypeScript / Angular / Jspm.

ربما أضف هذا إلى الوثائق. واجهت نفس المشكلة وبدأ المزيد والمزيد من الأشخاص في استخدام jspm بدلاً من Bower.

سعيد لأنك عملت! لقد أضفت مشكلة إلى مستودع المستندات. لا تتردد في إرسال العلاقات العامة هناك.

استيراد من هذا القبيل
استيراد "moment / src / locale / fr-ca" ؛
استيراد "moment / src / locale / en-ca" ؛

شكرا younss ، طريقتك عملت معي. أنا أستخدم Ionic 2 RC 2.

younss أنت
باستخدام React.
شكرا لك مرة أخرى!

واجهت نفس المشكلة عندما قمت بالتحديث إلى 2.19.1
ربما هذا يمكن أن يساعد:

يزيل :

  • مجلد node_modules
  • package-lock.json

إعادة الإطلاق:
تثبيت npm

أستمر في الاستيراد "لحظة" بشكل طبيعي وأستخدم اللغة في مصادري. لذلك لا داعي للاستيراد كما فعل younss .
باستخدام VueJS.
هذا عمل معي.

ربما يكون pb في ملف package-lock.json الذي لا يقوم بتحديث بيانات العقدة اللحظية بشكل صحيح. بإزالته وإعادة تشغيل npm ، قم بتثبيته ، قم بإنشاء ملف package-lock.json جديد مع تحديث جميع البيانات.

younss ، شكرًا ، يعمل معي ، أنا أستخدم أداة تجميع الطرود

هذا الحل نجح معي .. هنا

أضفت:
استيراد "لحظة / لغة / فرنسي" ؛

هل تغير هذا مرة أخرى؟
أنا ركبت:

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

لقد أنشأت فصلًا بوظيفة واحدة:

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

السجلات كالتالي:

pt-br
pt-BR الثلاثاء 20 ديسمبر 2016 10:45:12 GMT + 0100
الاب كاليفورنيا
fr-CA الثلاثاء 20 ديسمبر 2016 10:45:12 GMT + 0100

استيراد من هذا القبيل
استيراد "moment / src / locale / fr-ca" ؛
استيراد "moment / src / locale / en-ca" ؛

إنه يعمل لأجلي شكرا!

أنا أستعمل:

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

moment.locale('fr', fr);

ويعمل.
لم تنجح الحلول الأخرى بالنسبة لي.

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

moment.locale('ru');

يعمل فقط بالنسبة لي. @ ligne13 شكرا على التلميح!

لحظة 2.25.2

أهلا،

عند استخدام "import" moment / locale / fr "؛" في تطبيق Node / Express الخاص بي ، تلقيت هذا الخطأ: "SyntaxError: لا يمكن استخدام عبارة الاستيراد خارج وحدة نمطية" .

لقد بحثت في Google عن هذا وأحاول إضافة العقدة ولكن الآن تطبيقي في حالة من الفوضى.

إذا لم أتمكن من إضافة هذا الاستيراد ، فهل هناك طريقة أخرى لتغيير اللغة؟

شكرا

بول


المواصفات:

  • نظام التشغيل: Ubuntu 20.04 حتى WSL2
  • العقدة: 12.18.3
  • NPM: 6.14.6
  • صريح: 4.16.1
  • لحظة JS: 2.27.2

أهلا،

عند استخدام "import" moment / locale / fr "؛" في تطبيق Node / Express الخاص بي ، تلقيت هذا الخطأ: "SyntaxError: لا يمكن استخدام عبارة الاستيراد خارج وحدة نمطية" .

لقد بحثت في Google عن هذا وأحاول إضافة العقدة ولكن الآن تطبيقي في حالة من الفوضى.

إذا لم أتمكن من إضافة هذا الاستيراد ، فهل هناك طريقة أخرى لتغيير اللغة؟

شكرا

بول

المواصفات:

  • نظام التشغيل: Ubuntu 20.04 حتى WSL2
  • العقدة: 12.18.3
  • NPM: 6.14.6
  • صريح: 4.16.1
  • لحظة JS: 2.27.2

تضمين التغريدة

لا يمكنك استخدام "استيراد" في node.js حتى الآن. لم أجربها بنفسي ، لكني أعتقد أن هذا سينجح:

require('moment/locale/fr')
moment.locale('fr');
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات