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
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:
https://github.com/tqc/moment.git#no-dynamic-import
von git statt moment
direkt von 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'])
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.
Hilfreichster Kommentar
import 'moment/min/moment-with-locales'
macht den Trick!
moment.locale('fr'); moment().format("ll");
ergibt wie erwartet
"1 févr. 2018"
.