Moment: ¿Cómo cambiar la configuración regional en momentJS en React Native?

Creado en 30 ene. 2018  ·  21Comentarios  ·  Fuente: moment/moment

Esto es lo que tengo pero no funciona.

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

salidas de registro de la consola: en, en, en
salida de registro de consola esperada: en, zh-cn, zh-cn

Cuando intenté cambiar el momento de importación de 'momento' a importar momento de 'momento/min/momento-con-locales' pero arroja un error en esta línea:

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

error: momentWithLocales2.default.duration(...).format no es una función

Troubleshooting Up-For-Grabs

Comentario más útil

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

¡Hace el truco!

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

da como resultado "1 févr. 2018" como se esperaba.

Todos 21 comentarios

Confirmando eso, moment.locale('es') no tiene efecto para mí en React Native.

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

¡Hace el truco!

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

da como resultado "1 févr. 2018" como se esperaba.

Si no desea usar moment-with-locales , que carga todos los datos locales, retroceder al momento v2.18 me solucionó esto. Definitivamente hay un error con el momento v2.20 y la configuración regional en reaccionar nativo.

@Leeds-eBooks ¿Podría explicar cómo importa el momento? Regresé a 2.18 y, sin embargo, necesito importar el momento desde el momento con las configuraciones regionales para que el local funcione correctamente en react-native

Gracias

@msevestre Sí, por supuesto, aunque creo que mi solución puede estar desactualizada ahora, hice que funcionara en mi código y seguí adelante, creo que una versión posterior de Moment podría haberlo solucionado. Sin embargo, mi solución es:

  • instale https://github.com/tqc/moment.git#no-dynamic-import desde git, en lugar de moment directamente desde npm
  • entonces:
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'])

Esto es lo que estoy haciendo, y me está funcionando, pero como digo, puede que ya no sea necesario.

@Leeds-eBooks Impresionante. Gracias por sus comentarios rápidos. Realmente ayudó

Esto funcionó para mí,
https://momentjs.com/docs/#/i18n/instance-locale/

Debe instanciar en App.js todas las palabras en el idioma que desee, esto funcionará en toda su aplicación.

@VanessaChu - ¿Todavía tienes un problema?

Esta solución funciona para mí.

Hola gente, import 'moment/locale/fr'; funciona para mí, pero si quiero hacer uno dinámico, como no tener que importar todos los idiomas existentes, ¿conocen algún truco para hacer algo como import 'moment/locale/[variable]' donde variable es el idioma necesario?
Para que funcione con todos los países... :/

Espero que la mayoría de los participantes de la discusión hayan resuelto sus problemas :) Gracias @Leeds-eBooks

Para 3.x, es posible que tengamos más versiones de moment con/sin la importación dinámica/es6, por lo que este es un problema menor.

Hola @MayeuldP ,
No sé si llegas a solucionar el uso de lenguajes variables de momentos en Reactjs/ReactNative, pero quiero compartir la solución, puede ayudar a alguien.
no tiene que importar cultura por cultura, solo agregue: import 'moment/min/locales' solamente y luego puede configurar su moment.local('') con su cultura favorita.

Estoy usando v2.18 y este método funciona.

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

Hola, @KashifAhmed En v.2.22.2 deberías usar moment.updateLocale('fr',momentFR)

Advertencia de obsolescencia: utilice moment.updateLocale(localeName, config) para cambiar una configuración regional existente. moment.defineLocale(localeName, config) solo debe usarse para crear una nueva configuración regional Consulte http://momentjs.com/guides/#/warnings/define -locale/ para obtener más información.

Mira esto:

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

Esto incluye todas las configuraciones de idiomas desde el momento, es js, por lo que no hay problema con el tamaño.

Tuve un problema antes cuando alguien instaló la aplicación con un móvil con un idioma diferente.

A partir de aquí se puede configurar cualquier locale definido por momento sin ningún problema,

moment.locale('es');

O usar la configuración regional del dispositivo sin preocuparse de que esté fuera de las especificaciones de su idioma como ejemplo de @benadamstyles

En mi caso, importar la configuración regional no fue suficiente, así que utilicé el diccionario importado y eliminé el primer carácter que es un guión bajo _

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' no funcionó para mí, pero import 'moment/locale/en-gb' sí.

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

En el archivo superior del árbol, así es como se ve mi código:

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

Estoy usando v2.18 y este método funciona.

` import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
¿Podría por favor dar algunos ejemplos?
¡muchas gracias!

Cambié mi versión de 2.24 a 2.18 y ahora funciona. Hay un error en algún lugar después de 2.20.

su trabajo para mí

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

su trabajo para mí

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

Asegúrese de verificar que lo que obtiene de .locale() es lo que configuró. Vuelve a caer en silencio.

¿Fue útil esta página
0 / 5 - 0 calificaciones