Moment: مشاكل لغة أيام الأسبوع

تم إنشاؤها على ١٥ يوليو ٢٠١٧  ·  7تعليقات  ·  مصدر: moment/moment

وصف المشكلة وخطوات إعادة الإنتاج:
كما في الوثيقة الرسمية ،
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
إذا كان هذا صحيحًا ، فسيتم إرجاع أيام الأسبوع بترتيب محلي محدد. ولكن في هذه الحالة ، يتم تغيير لغة اللحظة عالميًا.

لذلك إذا كنت أرغب فقط في تغيير اللغة محليًا ، فأنا أستخدمها
moment.localeData('zh_CN').weekdaysShort()
يسرد دائمًا أيام الأسبوع من الأحد إلى السبت باللغة الصينية (ليس بترتيب محدد محليًا). ولم أتمكن من تقديم قيمة "حقيقية" للدالة في هذه الحالة (تسبب خطأ).

يرجى تضمين قيم جميع المتغيرات المستخدمة.

بيئة:

أمثلة: Chrome 49 على OSX ، و Internet Explorer 10 على Windows 7 ، و Node.JS 4.4.4 على Ubuntu 16.0.4

يعتبر كل من المتصفح ونظام التشغيل مهمين بالنسبة لنا ، خاصة إذا كانت لديك بيئة غير معتادة مثل تطبيق IOT.

معلومات أخرى قد تكون مفيدة:

  • إعداد المنطقة الزمنية للجهاز الذي يعمل عليه الرمز
  • الوقت والتاريخ اللذين تم فيهما تشغيل الكود
  • مكتبات أخرى قيد الاستخدام (TypeScript ، Immutable.js ، إلخ)

إذا كنت تبلغ عن مشكلة ، فالرجاء تشغيل الكود التالي في البيئة التي تستخدمها وتضمين الإخراج:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

تأكد من أن مشكلتك معزولة عن اللحظة.

Bug Language

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

معلومة مثيرة للاهتمام هي أن الوظيفة weekday تدرك الإعدادات المحلية ، لذا

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

إرجاع ['Sunday', 'Monday', ...] مقابل en-us .
ولكن ['Monday', 'Tuesday', ...] مقابل en-gb .

ال 7 كومينتر

حسنًا ، لا يمكنني إعادة إنتاج هذا. أعتقد أنك تقول هذا:

moment.locale('en') //=> "en" (I don't have the locale set to zh)

// you're saying this is NOT in the right order
moment.localeData('zh_CN').weekdays(); //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

//but if you change the global locale, then it is
moment.locale('zh_CN'); //=> "zh-cn"
moment.weekdays() //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

لن أتفاجأ إذا نجحت كما قلت (إن localeData تحصل على البيانات مباشرة ، لذلك لن يكون مفاجئًا إذا لم تقم بإعادة الترتيب ، وربما ليس لدينا واجهة برمجة تطبيقات لـ الحصول على أيام الأسبوع المطلوبة للغة غير المحددة عالميًا). لكن ... أليست تلك المصفوفات فوق نفس الشيء؟ أنا لا أقرأ أو أتحدث الصينية ، لذا لا أعرف ما إذا كانت بالترتيب الصحيح محليًا ، ولكن ما لم أفقد شيئًا ما (ممكن دائمًا عند النظر إلى شخصيات غير مألوفة) ، فإما كلاهما أو كلاهما غير صحيح ؟

إنه نفس الشيء مع "en-gb" و "en-us".

إذا كانت الإعدادات المحلية الخاصة بي هي "en-us" وأريد الحصول على أيام الأسبوع "en-gb" ، بما في ذلك الفرز ، فسأضطر إلى تغيير اللغة على مستوى العالم أو القيام ببعض أعمال المصفوفة للحصول على أيام الأسبوع التي تم فرزها.

moment.locale('en-us')
moment.weekdays(true) // ["Sunday", "Monday", ...

moment.locale('en-gb')
moment.weekdays(true) // ["Monday", "Tuesday", ...

لكن

moment.localeData('en-us').weekdays() // ["Sunday", "Monday", ...

moment.localeData('en-gb').weekdays() // ["Sunday", "Monday", ...

ولا يوجد

moment.localeData('en-gb').weekdays(true)

حسنًا ، نعم ، أنا أسمي هذا خطأ.

معلومة مثيرة للاهتمام هي أن الوظيفة weekday تدرك الإعدادات المحلية ، لذا

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

إرجاع ['Sunday', 'Monday', ...] مقابل en-us .
ولكن ['Monday', 'Tuesday', ...] مقابل en-gb .

فعلت بعض الحفر.

هناك وظيفة مختلفة تنفذ <Moment>.weekdays مقابل <Locale>.weekdays (وبالمثل أيام الأسبوع الدنيا ، أيام الأسبوع القصيرة ، الأشهر ، الأشهر القصيرة)

كما هو مذكور في المستندات ، تم تصميم الأول لسرد أشهر المنطقة المحلية الحالية أو أيام الأسبوع.
https://momentjs.com/docs/#/i18n/listing -months-weekdays /

والثاني مصمم للحصول على معلومات من الإعدادات المحلية نفسها.
https://momentjs.com/docs/#/i18n/locale -data /

يمكننا ترتيب أيام الأسبوع باستخدام نفس المعامل.

  • لذلك ، فإن moment.localeData('en-gb').weekdays(true) سيعود ['Monday', 'Tuesday', ...] ).
  • أعتقد أن هذا معقول لأن هذا الاستدعاء يلقي بخطأ في الإصدارات الحالية من Moment.

لقد طرحت العلاقات العامة - اسمحوا لي أن أعرف ما هو رأيكم جميعًا.

هل هناك خطة لإصلاح moment().locale('en-us').weekday(0) للعودة الاثنين وليس الأحد؟

inbalg لا ، هذا صحيح

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات