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
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:
https://github.com/tqc/moment.git#no-dynamic-import
depuis git, au lieu de moment
directement depuis npmimport 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.
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.