У меня небольшая проблема с React-Intl.
Когда приложение загружено, переводы в порядке, но когда я меняю язык, i18nConfig изменяется, но переводы не обновляются.
Я пробовал несколько вещей, но не могу заставить его работать.
Приложение. js:
let i18nConfig = {
locale: navigator.language.split(/[-_]/)[0],
messages: getMessagesFromLang(navigator.language.split(/[-_]/)[0])
};
function getMessagesFromLang(lang) {
switch (lang) {
case "fr":
return locale_fr;
case "en":
return locale_en;
default:
return locale_en;
}
}
function onChangeLanguage(lang) {
switch (lang) {
case "fr": i18nConfig.messages = locale_fr; break;
case "en": i18nConfig.messages = locale_en; break;
default: i18nConfig.messages = locale_en; break;
}
i18nConfig.locale = lang;
}
function getCurrentLang() {
return i18nConfig.locale;
}
export default function App() {
return (
<IntlProvider key={i18nConfig.locale} locale={i18nConfig.locale} messages={i18nConfig.messages}>
<Content onChangeLanguage={onChangeLanguage} getCurrentLang={getCurrentLang} />
</IntlProvider>
);
}
Содержание. js:
const options = [{ value: "en", label: "English" },{ value: "fr", label: "Français" }];
export default class Content extends React.Component {
state = {
selectedOption: null
};
handleChange = selectedOption => {
this.setState({ selectedOption }, () =>
console.log(`Option selected:`, this.state.selectedOption)
);
this.props.onChangeLanguage(selectedOption.value);
};
render() {
return (
<span><FormattedMessage id="app.content.link.rules" defaultMessage="Rules" /></span>
<Select value={this.state.selectedOption} onChange={this.handleChange} options={options} />
);
}