Moment: كيفية تغيير اللغة في MomentJS في React Native؟

تم إنشاؤها على ٣٠ يناير ٢٠١٨  ·  21تعليقات  ·  مصدر: moment/moment

هذا ما لدي لكنه لا يعمل.

import moment from 'moment' 
import 'moment/min/moment-with-locales' 
import 'moment-duration-format' // used by moment  
componentDidMount () {  
 console.log(moment.locale())   
 console.log(moment.locale('zh-cn'))    
 console.log(moment.locale())  
} 

مخرجات سجل وحدة التحكم: en ، en ، en
إخراج سجل وحدة التحكم المتوقع: en، zh-cn، zh-cn

عندما حاولت تغيير لحظة الاستيراد من "لحظة" إلى لحظة استيراد من "لحظة / دقيقة / لحظة مع لغات" ولكنها ألقى خطأ في هذا السطر:

const total = moment.duration(this.props.stoveUsage.total, 'seconds').format('H:mm', { trim: false })

خطأ: momentWithLocales2.default.duration (...) التنسيق ليس دالة

Troubleshooting Up-For-Grabs

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

import 'moment/min/moment-with-locales'

عمل الحيلة!

moment.locale('fr'); moment().format("ll");

النتائج في "1 févr. 2018" كما هو متوقع.

ال 21 كومينتر

لتأكيد ذلك ، فإن moment.locale('es') ليس له أي تأثير بالنسبة لي في React Native.

import 'moment/min/moment-with-locales'

عمل الحيلة!

moment.locale('fr'); moment().format("ll");

النتائج في "1 févr. 2018" كما هو متوقع.

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

@ Leeds-eBooks هل يمكن أن تشرح كيف تستورد اللحظة؟ لقد عدت إلى 2.18 ومع ذلك أحتاج إلى استيراد لحظة من لحظة مع لغات للحصول على المحلية للعمل بشكل صحيح في رد الفعل الأصلي

شكرا

msevestre نعم بالطبع ، على الرغم من أنني أعتقد أن الحل الذي قدمته قد يكون قديمًا الآن ، فقد جعلته يعمل في الكود الخاص بي ثم انتقلت إليه ، أعتقد أن إصدارًا أحدث من الوقت ربما يكون قد أصلحه. ومع ذلك ، فإن إصلاحي هو:

  • تثبيت https://github.com/tqc/moment.git#no-dynamic-import من git ، بدلاً من moment مباشرة من npm
  • ومن بعد:
import moment from 'moment'

import 'moment/src/locale/en-gb'
import 'moment/src/locale/es'
import 'moment/src/locale/fr'
import 'moment/src/locale/pl'
import 'moment/src/locale/pt'
// ...etc

// bonus trick!
import DeviceInfo from 'react-native-device-info'
const deviceLocale = DeviceInfo.getDeviceLocale()
moment.locale([deviceLocale, 'en'])

هذا ما أفعله ، وهو يعمل لأجلي ، لكن كما أقول قد لا يكون ضروريًا بعد الآن.

@ Leeds-eBooks رهيبة. شكرا لملاحظاتك السريعة. حقا ساعد

نجح هذا معي ،
https://momentjs.com/docs/#/i18n/instance -locale /

يجب عليك نسخ جميع الكلمات إلى لغة على App.js أكثر مما تريد ، وسيعمل هذا في جميع تطبيقاتك.

VanessaChu - هل ما زلت تواجه مشكلة؟

هذا الحل يعمل بالنسبة لي

مرحبًا يا أيها الناس ، import 'moment/locale/fr'; يعمل معي ، ولكن إذا كنت أرغب في عمل لغة ديناميكية ، مثل عدم الاضطرار إلى استيراد جميع اللغات الموجودة ، فهل تعرف أي حيل للقيام بشيء مثل import 'moment/locale/[variable]' حيث متغير هي اللغة المطلوبة؟
حتى تعمل مع كل دولة ...: /

آمل أن يكون معظم المشاركين في المناقشة قد تم حل مشاكلهم :) شكرًا لك @ Leeds-eBooks

بالنسبة إلى الإصدار 3.x ، قد يكون لدينا المزيد من إصدارات اللحظة مع / بدون الاستيراد الديناميكي / es6 ، لذا فإن هذه مشكلة أقل.

مرحبا MayeuldP ،
لا أعرف ما إذا كنت ستصل إلى الإصلاح باستخدام لغات متغيرة للحظات في Reactjs / ReactNative ، لكني أريد مشاركة الحل الذي قد يساعد شخصًا ما.
ليس عليك استيراد الثقافة حسب الثقافة بدلاً من ذلك ، فقط أضف: import 'moment/min/locales' فقط وبعد ذلك يمكنك تعيين لحظتك المحلية ('') مع ثقافتك المفضلة.

أنا أستخدم v2.18 وهذه الطريقة تعمل.

import moment from 'moment';
import momentFR from 'moment/src/locale/fr' 
moment.locale('fr',momentFR );

مرحبًا KashifAhmed في الإصدار 2.22.2 ، يجب عليك استخدام moment.updateLocale ('fr'، momentFR)

تحذير الإيقاف: استخدم moment.updateLocale (localeName ، config) لتغيير لغة موجودة. يجب استخدام Momentjs.com/guides/#/warnings/define -locale / لمزيد من المعلومات.

افحص هذا:

import moment from "moment";
import 'moment/min/locales'

هذا يشمل جميع تكوينات اللغات منذ اللحظة ، إنها js ، لذلك لا مشكلة في الحجم.

واجهت مشكلة من قبل عندما قام شخص ما بتثبيت التطبيق بهاتف محمول بلغة مختلفة.

من هذا يمكنك تعيين أي موقع محدد بلحظة دون أي مشكلة ،

moment.locale('es');

أو استخدام لغة الجهاز دون قلق بشأنه خارج مواصفات لغتك كمثال منbenadamstyles

في حالتي ، لم يكن استيراد الإعدادات المحلية كافيًا ، لذلك استخدمت القاموس الذي تم استيراده وأزلت الحرف الأول الذي يمثل شرطة سفلية _

import moment from 'moment';
import momentPTBR from 'moment/src/locale/pt-br';

function prepareLocale(locale) {
  for (const key in locale) {
    if (locale.hasOwnProperty(key)) {
      // remove first character underscore fom key, i.e. '_calendar' => 'calendar'
      locale[key.substring(1)] = locale[key];
    }
  }
  return locale;
}

moment.defineLocale('pt-br', prepareLocale(momentPTBR));

import 'moment/src/locale/en-gb' لم ينجح معي ، لكن import 'moment/locale/en-gb' لم يعمل.

  "dependencies": {
    "expo": "32.0.0",
    "moment": "2.24.0",
    "react": "16.5.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz"
  },

في الجزء العلوي من الملف في الشجرة ، إليك كيف يبدو الكود الخاص بي:

import moment from 'moment'

import 'moment/locale/en-gb'

const momentLocale = moment.locale('en-gb')
if (momentLocale !== 'en-gb') {
  throw new Error(`Moment fell back to locale ${momentLocale}`)
}

export default () => null

أنا أستخدم v2.18 وهذه الطريقة تعمل.

` import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
هل يمكنك إعطاء بعض الأمثلة من فضلك.
شكر كثيرا!

لقد غيرت إصداري من 2.24 إلى 2.18 وهو يعمل الآن. يوجد خطأ في مكان ما بعد 2.20.

هذا العمل بالنسبة لي

import moment from 'moment'
import 'moment/locale/pt-br'
moment.locale('pt-br')

هذا العمل بالنسبة لي

import moment from 'moment'
import 'moment/locale/pt-br'
moment.locale('pt-br')

تأكد من التحقق من أن ما تحصل عليه من .locale() هو ما قمت بتعيينه. يتراجع بصمت.

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