Moment: Bagaimana cara mengubah lokal di momentJS di React Native?

Dibuat pada 30 Jan 2018  ·  21Komentar  ·  Sumber: moment/moment

Ini adalah apa yang saya miliki tetapi tidak berhasil.

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

keluaran log konsol: en, en, en
keluaran log konsol yang diharapkan: en, zh-cn, zh-cn

Ketika saya mencoba mengubah momen impor dari 'momen' menjadi momen impor dari 'momen/min/momen-dengan-lokal' tetapi itu menimbulkan kesalahan pada baris ini:

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

kesalahan: momentWithLocales2.default.duration(...).format bukan fungsi

Troubleshooting Up-For-Grabs

Komentar yang paling membantu

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

melakukan trik!

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

menghasilkan "1 févr. 2018" seperti yang diharapkan.

Semua 21 komentar

Mengonfirmasi bahwa, moment.locale('es') tidak berpengaruh bagi saya di React Native.

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

melakukan trik!

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

menghasilkan "1 févr. 2018" seperti yang diharapkan.

Jika Anda tidak ingin menggunakan moment-with-locales , yang memuat semua data lokal, kembali ke momen v2.18 memperbaikinya untuk saya. Pasti ada bug dengan momen v2.20 dan pengaturan lokal di reaksi asli.

@Leeds-eBooks Bisakah Anda menjelaskan bagaimana Anda mengimpor momen? Saya memutar kembali ke 2.18 namun saya perlu mengimpor momen dari momen-dengan-lokal agar lokal berfungsi dengan baik di reaksi-asli

Terima kasih

@msevestre Ya tentu saja, meskipun saya pikir solusi saya mungkin kedaluwarsa sekarang, saya membuatnya berfungsi dalam kode saya dan melanjutkan, saya pikir versi momen yang lebih baru mungkin telah memperbaikinya. Namun demikian, perbaikan saya adalah:

  • instal https://github.com/tqc/moment.git#no-dynamic-import dari git, alih-alih moment langsung dari npm
  • kemudian:
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'])

Inilah yang saya lakukan, dan ini berhasil untuk saya, tetapi seperti yang saya katakan itu mungkin tidak lagi diperlukan.

@Leeds-eBooks Luar Biasa. Terima kasih atas tanggapan cepat Anda. Sangat membantu

Ini berhasil bagi saya,
https://momentjs.com/docs/#/i18n/instance -locale/

Anda harus membuat instance di App.js semua kata ke bahasa daripada yang Anda inginkan, ini akan berfungsi di semua aplikasi Anda.

@VanessaChu - apakah Anda masih memiliki masalah?

Solusi ini bekerja untuk saya

Hai teman-teman, import 'moment/locale/fr'; berfungsi untuk saya, tetapi jika saya ingin melakukan yang dinamis, seperti tidak harus mengimpor semua bahasa yang ada, apakah Anda tahu trik untuk melakukan sesuatu seperti import 'moment/locale/[variable]' where variabel apakah bahasa yang dibutuhkan
Sehingga bekerja dengan setiap negara... :/

Saya harap sebagian besar peserta diskusi menyelesaikan masalah mereka :) Terima kasih @Leeds-eBooks

Untuk 3.x kami mungkin memiliki lebih banyak versi momen dengan/tanpa impor dinamis/es6 jadi ini bukan masalah.

Halo @MayeuldP ,
saya tidak tahu apakah Anda tiba untuk memperbaiki menggunakan bahasa variabel momen di Reactjs/ReactNative, tetapi saya ingin membagikan solusi yang mungkin membantu seseorang.
Anda tidak perlu mengimpor budaya demi budaya, cukup tambahkan : import 'moment/min/locales' saja dan nanti Anda dapat mengatur moment.local('') Anda dengan budaya favorit Anda.

Saya menggunakan v2.18 dan metode ini berhasil.

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

Hai, @KashifAhmed Di v.2.22.2 Anda harus menggunakan moment.updateLocale('fr',momentFR)

Peringatan penghentian: gunakan moment.updateLocale(localeName, config) untuk mengubah lokal yang ada. moment.defineLocale(localeName, config) hanya boleh digunakan untuk membuat lokal baru Lihat http://momentjs.com/guides/#/warnings/define -locale/ untuk info lebih lanjut.

Periksa ini:

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

Ini termasuk semua konfigurasi languajes dari saat, ini js, jadi tidak ada masalah dengan ukuran.

Saya memiliki masalah sebelumnya ketika seseorang menginstal aplikasi dengan ponsel dengan bahasa yang berbeda.

Dari sini Anda dapat mengatur lokal apa pun yang ditentukan oleh momen tanpa masalah,

moment.locale('es');

Atau menggunakan perangkat lokal tanpa khawatir akan keluar dari spesifikasi bahasa Anda seperti contoh dari @benadamstyles

Dalam kasus saya, impor lokal tidak cukup, jadi saya menggunakan kamus yang diimpor dan menghapus karakter pertama yang merupakan garis bawah _

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' tidak berhasil untuk saya, tetapi import 'moment/locale/en-gb' berhasil.

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

Di file paling atas di pohon, inilah tampilan kode saya:

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

Saya menggunakan v2.18 dan metode ini berhasil.

` import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
bisa tolong berikan beberapa contoh.
Terima kasih banyak!

Saya mengubah versi saya dari 2.24 menjadi 2.18 dan berfungsi sekarang. Ada bug di suatu tempat setelah 2.20.

itu bekerja untuk saya

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

itu bekerja untuk saya

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

Pastikan Anda memeriksa bahwa apa yang Anda dapatkan kembali dari .locale() adalah yang Anda tetapkan. Itu jatuh kembali diam-diam.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat