Reagieren-intl multi-language-app: änderung-Sprachen und übersetzungen-Speicher
Habe ich darauf reagiert-router-app und möchte hinzufügen: i18n. In reagieren-intl Beispiel root-Komponente verpackt in IntlProvider:
ReactDOM.render(
<IntlProvider locale="en">
<App />
</IntlProvider>,
document.getElementById('container')
);
Aber es ist nur ein locale (Spracheinstellung). So aktualisieren Sie die app für das hinzufügen von anderen Sprachen und wie ist der beste Weg, übersetzungen zu speichern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe vor dem gleichen problem, und das ist, was ich herausgefunden habe:
Um die Sprache zu ändern, die ich verwendet Lösung hier, die im Grunde ist verbindlich IntlProvider zu ReduxStore mit Connect-Funktion. Auch vergessen Sie nicht, um wichtige re-render-Komponenten auf Sprache ändern. Dies ist im Grunde der gesamte code:
Dies ist ConnectedIntlProvider.js nur bindet Standard IntlProvider(beachten Sie die-Taste prop, fehlt im original-Kommentar auf github)
Und dann in deinem Eintrag-point-Datei:
Nächste, was zu tun ist, um einfach zu implementieren reducer, die für die Verwaltung Gebietsschema und machen action-Macher um die Sprache zu ändern auf Nachfrage.
Als der beste Weg zum speichern von übersetzungen - fand ich viele Diskussionen über dieses Thema und die situation scheint zu sein, ziemlich verwirrt, ehrlich gesagt, ich bin ziemlich verblüfft, dass die Macher reagieren-intl Fokus so sehr auf die Datums-und Zahlenformate und vergessen über die übersetzung. Also, ich weiß nicht, den absolut richtigen Weg, es zu handhaben, aber das ist was ich tun:
Erstellen Ordner "locales" und innen schaffen Haufen von Dateien wie "en.js", "fi.js", "ru.js" usw. Im Prinzip alle Sprachen, die Sie arbeiten mit.
In jeder Datei exportieren json-Objekt mit übersetzungen wie diese:
Anderen Dateien haben genau die gleiche Struktur, aber mit übersetzten Zeichenketten innen.
Dann im Getriebe ist verantwortlich für Sprache, ändern, importieren, alle Staaten aus diesen Dateien und laden Sie Sie in redux speichern, sobald die Aktion zum ändern der Sprache ausgelöst. Die Komponente erstellt im vorherigen Schritt wird weitergeben von änderungen an IntlProvider und neue locale stattfinden wird. Ausgabe, die es auf der Seite mit
<FormattedMessage>
oderintl.formatMessage({id: 'app.header.title'})}
Lesen Sie mehr auf, dass auf Ihrer github-wiki.Sie haben einige DefineMessages Funktion gibt, aber ehrlich gesagt konnte ich nicht finden, eine gute Informationen, wie es zu benutzen, kann man im Prinzip vergessen, und Sie werden OK.
Mit einer neuen Kontext-API-ich glaube, es ist nicht erforderlich, um redux jetzt:
IntlContext.jsx
Main App.jsx Komponente:
LanguageSwitch.jsx
Habe ich einen repository veranschaulicht diese Idee.
Und auch codesandbox Beispiel.