Moment: Comment changer les paramètres régionaux dans momentJS dans React Native ?

Créé le 30 janv. 2018  ·  21Commentaires  ·  Source: moment/moment

C'est ce que j'ai mais ça ne marche pas.

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

sorties du journal de la console : en, en, en
sortie attendue du journal de la console : en, zh-cn, zh-cn

Lorsque j'ai essayé de changer le moment d'importation de 'moment' pour importer le moment de 'moment/min/moment-with-locales' mais cela génère une erreur sur cette ligne:

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

erreur : momentWithLocales2.default.duration(...).format n'est pas une fonction

Troubleshooting Up-For-Grabs

Commentaire le plus utile

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

fait l'affaire !

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

résultats en "1 févr. 2018" comme prévu.

Tous les 21 commentaires

Confirmant cela, moment.locale('es') n'a aucun effet pour moi dans React Native.

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

fait l'affaire !

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

résultats en "1 févr. 2018" comme prévu.

Si vous ne voulez pas utiliser moment-with-locales , qui charge toutes les données de paramètres régionaux, revenir au moment v2.18 a corrigé cela pour moi. Il y a certainement un bogue avec moment v2.20 et la définition des paramètres régionaux en réaction native.

@Leeds-eBooks Pourriez-vous expliquer comment vous importez le moment ? Je suis revenu à 2.18 et pourtant j'ai besoin d'importer le moment de moment-with-locales pour que local fonctionne correctement dans react-native

Merci

@msevestre Ouais bien sûr, même si je pense que ma solution est peut-être obsolète maintenant, je l'ai fait fonctionner dans mon code et je suis passé à autre chose, je pense qu'une version ultérieure de moment aurait pu le corriger. Néanmoins, ma solution est:

  • installez https://github.com/tqc/moment.git#no-dynamic-import depuis git, au lieu de moment directement depuis npm
  • ensuite:
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'])

C'est ce que je fais, et ça marche pour moi, mais comme je l'ai dit, ce n'est peut-être plus nécessaire.

@Leeds-eBooks Génial. Merci pour vos commentaires rapides. Vraiment aidé

Cela a fonctionné pour moi,
https://momentjs.com/docs/#/i18n/instance -locale/

Vous devez instancier sur App.js tous les mots vers la langue que vous souhaitez, cela fonctionnera dans toutes vos applications.

@VanessaChu - avez-vous toujours un problème ?

Cette solution fonctionne pour moi

Salut les gens, import 'moment/locale/fr'; fonctionne pour moi, mais si je veux en faire un dynamique, comme ne pas avoir à importer toutes les langues existantes, connaissez-vous des astuces pour faire quelque chose comme import 'moment/locale/[variable]' où variable est la langue nécessaire ?
Pour que ça marche avec tous les pays... :/

J'espère que la plupart des participants à la discussion ont résolu leurs problèmes :) Merci @Leeds-eBooks

Pour 3.x, nous pourrions avoir plus de versions de moment avec/sans l'importation dynamique/es6, donc c'est moins un problème.

Bonjour @MayeuldP ,
Je ne sais pas si vous arrivez à corriger en utilisant des langages variables de moments dans Reactjs/ReactNative, mais je veux partager la solution, cela peut aider quelqu'un.
vous n'avez pas besoin d'importer culture par culture à la place, ajoutez simplement : import 'moment/min/locales' seulement et plus tard vous pouvez définir votre moment.local('') avec votre culture préférée.

J'utilise v2.18 et cette méthode fonctionne.

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

Bonjour, @KashifAhmed Dans la v.2.22.2, vous devez utiliser moment.updateLocale('fr',momentFR)

Avertissement de dépréciation : utilisez moment.updateLocale(localeName, config) pour modifier une locale existante. moment.defineLocale(localeName, config) ne doit être utilisé que pour créer un nouveau paramètre régional Voir http://momentjs.com/guides/#/warnings/define -locale/ pour plus d'informations.

Vérifiez ça:

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

Cela inclut toutes les configurations de langues à partir du moment, c'est js, donc pas de problème de taille.

J'ai eu un problème auparavant lorsque quelqu'un installait l'application avec un mobile avec une langue différente.

À partir de là, vous pouvez définir n'importe quel paramètre régional défini par moment sans aucun problème,

moment.locale('es');

Ou utiliser les paramètres régionaux de l'appareil sans vous en soucier est hors de vos spécifications linguistiques, comme l'exemple de @benadamstyles

Dans mon cas, importer les paramètres régionaux ne suffisait pas, j'ai donc utilisé le dictionnaire importé et supprimé le premier caractère qui est un trait de soulignement _

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' n'a pas fonctionné pour moi, mais import 'moment/locale/en-gb' l'a fait.

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

Dans le fichier le plus haut de l'arborescence, voici à quoi ressemble mon code :

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

J'utilise v2.18 et cette méthode fonctionne.

` import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
pourriez-vous s'il vous plaît donner quelques exemples.
Merci beaucoup!

J'ai changé ma version de 2.24 à 2.18 et ça marche maintenant. Il y a un bogue quelque part après 2.20.

son travail pour moi

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

son travail pour moi

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

Assurez-vous de vérifier que ce que vous obtenez en retour de .locale() correspond à ce que vous avez défini. Il retombe silencieusement.

Cette page vous a été utile?
0 / 5 - 0 notes