Moment: Wie ändere ich das Gebietsschema in momentJS in React Native?

Erstellt am 30. Jan. 2018  ·  21Kommentare  ·  Quelle: moment/moment

Das ist, was ich habe, aber es funktioniert nicht.

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

Konsolenprotokollausgaben: en, en, en
erwartete Konsolenprotokollausgabe: en, zh-cn, zh-cn

Als ich versuchte, den Importmoment von „Moment“ in den Importmoment von „Moment/Min/Moment-mit-Gebietsschemata“ zu ändern, wurde jedoch ein Fehler in dieser Zeile ausgegeben:

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

Fehler: momentWithLocales2.default.duration(...).format ist keine Funktion

Troubleshooting Up-For-Grabs

Hilfreichster Kommentar

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

macht den Trick!

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

ergibt wie erwartet "1 févr. 2018" .

Alle 21 Kommentare

Um das zu bestätigen, hat moment.locale('es') in React Native für mich keine Auswirkung.

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

macht den Trick!

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

ergibt wie erwartet "1 févr. 2018" .

Wenn Sie moment-with-locales nicht verwenden möchten, wodurch alle Gebietsschemadaten geladen werden, hat ein Rollback auf v2.18 dies für mich behoben. Es gibt definitiv einen Fehler mit Moment v2.20 und der Einstellung des Gebietsschemas auf React Native.

@Leeds-eBooks Könnten Sie erklären, wie Sie Momente importieren? Ich habe ein Rollback auf 2.18 durchgeführt und muss dennoch Moment aus Moment-with-Locales importieren, damit Local in React-Native richtig funktioniert

Danke

@msevestre Ja, natürlich, obwohl ich denke, dass meine Lösung jetzt veraltet sein könnte, habe ich sie in meinem Code zum Laufen gebracht und bin weitergefahren, ich denke, eine spätere Version von moment könnte es behoben haben. Trotzdem ist meine Lösung:

  • installiere https://github.com/tqc/moment.git#no-dynamic-import von git statt moment direkt von npm
  • dann:
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'])

Dies ist, was ich tue, und es funktioniert für mich, aber wie gesagt, es ist möglicherweise nicht mehr notwendig.

@Leeds-eBooks Großartig. Vielen Dank für Ihr schnelles Feedback. Wirklich geholfen

Das hat bei mir funktioniert,
https://momentjs.com/docs/#/i18n/instance -locale/

Sie müssen in App.js alle Wörter in die Sprache einfügen, die Sie möchten, dies funktioniert in all Ihren Anwendungen.

@VanessaChu - hast du immer noch ein Problem?

Diese Lösung funktioniert für mich

Hey Leute, import 'moment/locale/fr'; funktioniert für mich, aber wenn ich eine dynamische machen möchte, wie nicht alle vorhandenen Sprachen importieren zu müssen, kennst du irgendwelche Tricks, um so etwas wie import 'moment/locale/[variable]' wo variabel zu machen ist die benötigte Sprache?
Damit es mit jedem Land funktioniert... :/

Ich hoffe, die meisten Diskussionsteilnehmer haben ihre Probleme gelöst :) Danke @Leeds-eBooks

Für 3.x haben wir möglicherweise mehr Moment-Versionen mit/ohne dynamischen Import/es6, daher ist dies weniger problematisch.

Hallo @MayeuldP ,
Ich weiß nicht, ob Sie ankommen, um die Verwendung variabler Sprachen von Momenten in Reactjs / ReactNative zu beheben, aber ich möchte die Lösung teilen, die jemandem helfen kann.
Sie müssen nicht Kultur für Kultur importieren, sondern nur hinzufügen: import 'moment/min/locales' only und später können Sie Ihre moment.local('') mit Ihrer Lieblingskultur setzen.

Ich verwende v2.18 und diese Methode funktioniert.

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

Hallo, @KashifAhmed In v.2.22.2 sollten Sie moment.updateLocale('fr',momentFR) verwenden

Veraltungswarnung: Verwenden Sie moment.updateLocale(localeName, config), um ein vorhandenes Gebietsschema zu ändern. moment.defineLocale(localeName, config) sollte nur zum Erstellen eines neuen Gebietsschemas verwendet werden. Weitere Informationen finden Sie unter http://momentjs.com/guides/#/warnings/define -locale/.

Überprüfen Sie dies:

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

Dazu gehören alle Sprachkonfigurationen ab dem Moment, es ist js, also kein Problem mit der Größe.

Ich hatte vorher Probleme, als jemand die App mit einem Handy mit unterschiedlichen Sprachen installierte.

Von hier aus können Sie problemlos jedes beliebige Gebietsschema festlegen, das im Moment definiert ist.

moment.locale('es');

Oder die Verwendung des Gerätegebietsschemas ohne Bedenken liegt außerhalb Ihrer Sprachspezifikationen, wie das Beispiel von @benadamstyles zeigt

In meinem Fall war das Importieren des Gebietsschemas nicht genug, also habe ich das importierte Wörterbuch verwendet und das erste Zeichen entfernt, das ein Unterstrich _ ist

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' hat bei mir nicht funktioniert, aber import 'moment/locale/en-gb' schon.

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

In der obersten Datei im Baum sieht mein Code so aus:

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

Ich verwende v2.18 und diese Methode funktioniert.

` import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
kannst du bitte ein paar beispiele geben.
Danke vielmals!

Ich habe meine Version von 2.24 auf 2.18 geändert und es funktioniert jetzt. Irgendwo nach 2.20 gibt es einen Fehler.

seine Arbeit für mich

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

seine Arbeit für mich

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

Stellen Sie sicher, dass Sie überprüfen, ob das, was Sie von .locale() zurückerhalten, Ihren Einstellungen entspricht. Es fällt lautlos zurück.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

dogukankotan picture dogukankotan  ·  3Kommentare

slavafomin picture slavafomin  ·  3Kommentare

BCup picture BCup  ·  3Kommentare

chitgoks picture chitgoks  ·  3Kommentare

M-Zuber picture M-Zuber  ·  3Kommentare